|
@ -0,0 +1,2 @@
|
|||
# Normalize EOL for all files that Git considers text files.
|
||||
* text=auto eol=lf
|
|
@ -0,0 +1,5 @@
|
|||
# Godot 4+ specific ignores
|
||||
.godot/
|
||||
.export/
|
||||
.itchio/
|
||||
.steam/
|
|
@ -0,0 +1,21 @@
|
|||
MIT License
|
||||
|
||||
Copyright (c) 2016-2023 The Godot Engine community
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
|
@ -0,0 +1,12 @@
|
|||
[configuration]
|
||||
|
||||
entry_symbol = "git_plugin_init"
|
||||
compatibility_minimum = "4.1.0"
|
||||
|
||||
[libraries]
|
||||
|
||||
macos.editor = "macos/libgit_plugin.macos.editor.universal.dylib"
|
||||
windows.editor.x86_64 = "win64/libgit_plugin.windows.editor.x86_64.dll"
|
||||
linux.editor.x86_64 = "linux/libgit_plugin.linux.editor.x86_64.so"
|
||||
linux.editor.arm64 = "linux/libgit_plugin.linux.editor.arm64.so"
|
||||
linux.editor.rv64 = ""
|
|
@ -0,0 +1,7 @@
|
|||
[plugin]
|
||||
|
||||
name="Godot Git Plugin"
|
||||
description="This plugin lets you interact with Git without leaving the Godot editor. More information can be found at https://github.com/godotengine/godot-git-plugin/wiki"
|
||||
author="twaritwaikar"
|
||||
version="v3.1.0"
|
||||
script="godot-git-plugin.gd"
|
|
@ -0,0 +1,7 @@
|
|||
[plugin]
|
||||
|
||||
name="ElgatoStreamDeck"
|
||||
description="A plugin to interface with Elgato Stream Deck devices."
|
||||
author="Boyne Games"
|
||||
version="1.0.0"
|
||||
script="plugin.gd"
|
|
@ -0,0 +1,12 @@
|
|||
@tool
|
||||
extends EditorPlugin
|
||||
|
||||
const AUTOLOAD_NAME = "ElgatoStreamDeck"
|
||||
|
||||
func _enter_tree():
|
||||
add_autoload_singleton(AUTOLOAD_NAME, "res://addons/godot-streamdeck-addon/singleton.gd")
|
||||
pass
|
||||
|
||||
func _exit_tree():
|
||||
remove_autoload_singleton(AUTOLOAD_NAME)
|
||||
pass
|
|
@ -0,0 +1,84 @@
|
|||
extends Node
|
||||
|
||||
const ButtonAction = {
|
||||
EMIT_SIGNAL = "games.boyne.godot.emitsignal",
|
||||
SWITCH_SCENE = "games.boyne.godot.switchscene",
|
||||
RELOAD_SCENE = "games.boyne.godot.reloadscene",
|
||||
}
|
||||
|
||||
const ButtonEvent = {
|
||||
KEY_UP = "keyUp",
|
||||
KEY_DOWN = "keyDown"
|
||||
}
|
||||
|
||||
signal on_key_up
|
||||
signal on_key_down
|
||||
|
||||
const PLUGIN_NAME = "games.boyne.godot.sdPlugin"
|
||||
const WEBSOCKET_URL = "127.0.0.1:%s/ws"
|
||||
|
||||
var _socket := WebSocketPeer.new()
|
||||
var _config := ConfigFile.new()
|
||||
|
||||
func _ready() -> void:
|
||||
|
||||
if Saving.settings.has("useStreamDeck"):
|
||||
if !Saving.settings["useStreamDeck"]:
|
||||
return
|
||||
else:
|
||||
return
|
||||
|
||||
_load_config(_get_config_path())
|
||||
_socket.connect_to_url(_get_websocket_url())
|
||||
|
||||
func _process(delta) -> void:
|
||||
_socket.poll()
|
||||
|
||||
var state = _socket.get_ready_state()
|
||||
|
||||
match state:
|
||||
WebSocketPeer.STATE_OPEN:
|
||||
while _socket.get_available_packet_count():
|
||||
var data = JSON.parse_string(_socket.get_packet().get_string_from_utf8())
|
||||
|
||||
if !(data.event == ButtonEvent.KEY_DOWN || data.event == ButtonEvent.KEY_UP):
|
||||
return
|
||||
|
||||
if data != null && data.has("action") && data.has("payload"):
|
||||
match data.action:
|
||||
ButtonAction.EMIT_SIGNAL:
|
||||
var signalInput = ""
|
||||
|
||||
if data.payload.settings.has("signalInput"):
|
||||
signalInput = data.payload.settings.signalInput
|
||||
|
||||
match data.event:
|
||||
ButtonEvent.KEY_UP:
|
||||
on_key_up.emit(signalInput)
|
||||
ButtonEvent.KEY_DOWN:
|
||||
on_key_down.emit(signalInput)
|
||||
ButtonAction.SWITCH_SCENE:
|
||||
if data.payload.settings.has("scenePath"):
|
||||
var scenePath = data.payload.settings.scenePath
|
||||
get_tree().change_scene_to_file(scenePath)
|
||||
ButtonAction.RELOAD_SCENE:
|
||||
get_tree().reload_current_scene()
|
||||
WebSocketPeer.STATE_CLOSING:
|
||||
pass
|
||||
WebSocketPeer.STATE_CLOSED:
|
||||
set_process(false)
|
||||
|
||||
func _get_websocket_url() -> String:
|
||||
return WEBSOCKET_URL % _config.get_value("bridge", "port", "8080")
|
||||
|
||||
func _get_config_path() -> String:
|
||||
match OS.get_name():
|
||||
"Windows":
|
||||
return "%s/Elgato/StreamDeck/Plugins/%s/plugin.ini" % [OS.get_config_dir(), PLUGIN_NAME]
|
||||
"macOS":
|
||||
return "%s/com.elgato.StreamDeck/Plugins/%s/plugin.ini" % [OS.get_config_dir(), PLUGIN_NAME]
|
||||
return ""
|
||||
|
||||
func _load_config(path: String) -> void:
|
||||
var file = FileAccess.open(path, FileAccess.READ)
|
||||
_config.parse(file.get_as_text())
|
|
@ -0,0 +1,357 @@
|
|||
extends Node
|
||||
|
||||
#Global Node Reference
|
||||
var main = null
|
||||
var spriteEdit = null
|
||||
var fail = null
|
||||
var mouse = null
|
||||
var spriteList = null
|
||||
var chain = null
|
||||
|
||||
var animationTick = 0
|
||||
|
||||
var filtering = false
|
||||
|
||||
#Object Selection
|
||||
var heldSprite = null
|
||||
var lastArray = []
|
||||
var i = 0
|
||||
|
||||
var reparentMode = false
|
||||
var scrollSelection = 0
|
||||
|
||||
var backgroundColor = Color(0.0,0.0,0.0,0.0)
|
||||
|
||||
#Blink
|
||||
var blinkSpeed = 1.0
|
||||
var blinkChance = 200
|
||||
var blink = false
|
||||
var blinkTick = 0
|
||||
|
||||
#Audio Listener
|
||||
|
||||
var currentMicrophone = null
|
||||
|
||||
var speaking = false
|
||||
var spectrum
|
||||
var volume = 0
|
||||
var volumeSensitivity = 0.0
|
||||
|
||||
var volumeLimit = 0.0
|
||||
var senseLimit = 0.0
|
||||
|
||||
#Speak Signals
|
||||
signal startSpeaking
|
||||
signal stopSpeaking
|
||||
|
||||
var micResetTime = 180
|
||||
|
||||
var updatePusherNode = null
|
||||
|
||||
var rand = RandomNumberGenerator.new()
|
||||
|
||||
func _ready():
|
||||
spectrum = AudioServer.get_bus_effect_instance(1, 1)
|
||||
|
||||
if !Saving.settings.has("useStreamDeck"):
|
||||
Saving.settings["useStreamDeck"] = false
|
||||
|
||||
if Saving.settings.has("secondsToMicReset"):
|
||||
Global.micResetTime = Saving.settings["secondsToMicReset"]
|
||||
else:
|
||||
Saving.settings["secondsToMicReset"] = 180
|
||||
|
||||
createMicrophone()
|
||||
|
||||
func createMicrophone():
|
||||
var playa = AudioStreamPlayer.new()
|
||||
var mic = AudioStreamMicrophone.new()
|
||||
playa.stream = mic
|
||||
playa.autoplay = true
|
||||
playa.bus = "MIC"
|
||||
add_child(playa)
|
||||
currentMicrophone = playa
|
||||
await get_tree().create_timer(micResetTime).timeout
|
||||
if currentMicrophone != playa:
|
||||
return
|
||||
deleteAllMics()
|
||||
currentMicrophone = null
|
||||
await get_tree().create_timer(0.25).timeout
|
||||
createMicrophone()
|
||||
|
||||
func deleteAllMics():
|
||||
for child in get_children():
|
||||
child.queue_free()
|
||||
|
||||
|
||||
func _process(delta):
|
||||
animationTick += 1
|
||||
|
||||
volume = spectrum.get_magnitude_for_frequency_range(20, 20000).length()
|
||||
if currentMicrophone != null:
|
||||
volumeSensitivity = lerp(volumeSensitivity,0.0,delta*2)
|
||||
|
||||
if volume>volumeLimit:
|
||||
volumeSensitivity = 1.0
|
||||
|
||||
var prev = speaking
|
||||
speaking = volumeSensitivity > senseLimit
|
||||
|
||||
if prev != speaking:
|
||||
if speaking:
|
||||
emit_signal("startSpeaking")
|
||||
else:
|
||||
emit_signal("stopSpeaking")
|
||||
|
||||
if main != null and heldSprite != null:
|
||||
if Input.is_action_just_pressed("zDown"):
|
||||
heldSprite.z -= 1
|
||||
heldSprite.setZIndex()
|
||||
pushUpdate("Moved sprite layer.")
|
||||
if Input.is_action_just_pressed("zUp"):
|
||||
heldSprite.z += 1
|
||||
heldSprite.setZIndex()
|
||||
pushUpdate("Moved sprite layer.")
|
||||
if main.editMode:
|
||||
if Input.is_action_just_pressed("reparent"):
|
||||
reparentMode = !reparentMode
|
||||
Global.chain.enable(reparentMode)
|
||||
|
||||
else:
|
||||
reparentMode = false
|
||||
Global.chain.enable(reparentMode)
|
||||
|
||||
if main.editMode:
|
||||
if reparentMode:
|
||||
RenderingServer.set_default_clear_color(Color.POWDER_BLUE)
|
||||
else:
|
||||
RenderingServer.set_default_clear_color(Color.GRAY)
|
||||
|
||||
|
||||
blinking()
|
||||
scrollSprites()
|
||||
|
||||
|
||||
if !main.fileSystemOpen:
|
||||
|
||||
if Input.is_action_just_pressed("refresh"):
|
||||
refresh()
|
||||
if Input.is_action_just_pressed("unlink"):
|
||||
unlinkSprite()
|
||||
|
||||
if Input.is_action_pressed("control"):
|
||||
if Input.is_action_just_pressed("saveImages"):
|
||||
saveImagesFromData()
|
||||
|
||||
|
||||
func select(areas):
|
||||
|
||||
if main.fileSystemOpen:
|
||||
return
|
||||
|
||||
for area in areas:
|
||||
if area.is_in_group("penis"):
|
||||
return
|
||||
|
||||
var prevSpr = heldSprite
|
||||
if areas.size() <= 0:
|
||||
heldSprite = null
|
||||
i = 0
|
||||
lastArray = []
|
||||
return
|
||||
|
||||
if areas != lastArray:
|
||||
heldSprite = areas[0].get_parent().get_parent().get_parent()
|
||||
i = 0
|
||||
else:
|
||||
i += 1
|
||||
|
||||
if i >= areas.size():
|
||||
i = 0
|
||||
|
||||
heldSprite = areas[i].get_parent().get_parent().get_parent()
|
||||
|
||||
var count = heldSprite.path.get_slice_count("/") - 1
|
||||
var i1 = heldSprite.path.get_slice("/",count)
|
||||
pushUpdate("Selected sprite \"" + i1 + "\"" + ".")
|
||||
|
||||
heldSprite.set_physics_process(true)
|
||||
|
||||
if reparentMode:
|
||||
if prevSpr == heldSprite:
|
||||
reparentMode = false
|
||||
return
|
||||
if heldSprite.parentId == prevSpr.id:
|
||||
return
|
||||
|
||||
linkSprite(prevSpr,heldSprite)
|
||||
Global.chain.enable(reparentMode)
|
||||
|
||||
lastArray = areas.duplicate()
|
||||
|
||||
spriteEdit.setImage()
|
||||
|
||||
func linkSprite(sprite,newParent):
|
||||
if sprite == newParent:
|
||||
reparentMode = false
|
||||
|
||||
return
|
||||
if newParent.parentId == sprite.id:
|
||||
reparentMode = false
|
||||
return
|
||||
|
||||
if sprite.is_ancestor_of(newParent):
|
||||
pushUpdate("Can't link to own child sprite!")
|
||||
reparentMode = false
|
||||
return
|
||||
|
||||
sprite.reparent(newParent.sprite,true)
|
||||
|
||||
sprite.parentId = newParent.id
|
||||
sprite.parentSprite = newParent
|
||||
|
||||
reparentMode = false
|
||||
|
||||
Global.spriteList.updateData()
|
||||
|
||||
var count = sprite.path.get_slice_count("/") - 1
|
||||
var i1 = sprite.path.get_slice("/",count)
|
||||
|
||||
count = newParent.path.get_slice_count("/") - 1
|
||||
var i2 = newParent.path.get_slice("/",count)
|
||||
|
||||
pushUpdate("Linked sprite \"" + i1 + "\" to sprite \"" + i2 + "\".")
|
||||
newParent.set_physics_process(true)
|
||||
|
||||
func scrollSprites():
|
||||
|
||||
if Input.is_action_pressed("control"):
|
||||
return
|
||||
|
||||
if !main.editMode:
|
||||
return
|
||||
|
||||
if main.fileSystemOpen:
|
||||
return
|
||||
|
||||
for area in mouse.area.get_overlapping_areas():
|
||||
if area.is_in_group("penis"):
|
||||
return
|
||||
|
||||
var scroll = 0
|
||||
|
||||
if heldSprite == null:
|
||||
scrollSelection = 0
|
||||
|
||||
if Input.is_action_just_pressed("scrollUp"):
|
||||
scroll-=1
|
||||
if Input.is_action_just_pressed("scrollDown"):
|
||||
scroll+=1
|
||||
|
||||
if scroll == 0:
|
||||
return
|
||||
|
||||
|
||||
var obj = get_tree().get_nodes_in_group("saved")
|
||||
|
||||
if obj.size() <= 0:
|
||||
return
|
||||
|
||||
scrollSelection += scroll
|
||||
if scrollSelection >= obj.size():
|
||||
scrollSelection = 0
|
||||
elif scrollSelection < 0:
|
||||
scrollSelection = obj.size() - 1
|
||||
|
||||
heldSprite = obj[scrollSelection]
|
||||
|
||||
var count = heldSprite.path.get_slice_count("/") - 1
|
||||
var i1 = heldSprite.path.get_slice("/",count)
|
||||
pushUpdate("Selected sprite \"" + i1 + "\"" + ".")
|
||||
|
||||
heldSprite.set_physics_process(true)
|
||||
|
||||
spriteEdit.setImage()
|
||||
|
||||
func blinking():
|
||||
blinkTick += 1
|
||||
if blinkTick == 0:
|
||||
blink = false
|
||||
if rand.randf_range(-1.0,1.0) > 0.5:
|
||||
blinkTick = (420 * blinkSpeed) + 1
|
||||
if blinkTick > 420 * blinkSpeed:
|
||||
if rand.randi() % int(blinkChance) == 0:
|
||||
blink = true
|
||||
|
||||
blinkTick = -12
|
||||
|
||||
func epicFail(err):
|
||||
print(fail)
|
||||
if fail == null:
|
||||
return
|
||||
|
||||
fail.get_node("type").text = ""
|
||||
match err:
|
||||
ERR_FILE_CORRUPT:
|
||||
fail.get_node("type").text = "FILE CORRUPT"
|
||||
ERR_FILE_NOT_FOUND:
|
||||
fail.get_node("type").text = "FILE NOT FOUND"
|
||||
ERR_FILE_CANT_OPEN:
|
||||
fail.get_node("type").text = "FILE CANT OPEN"
|
||||
ERR_FILE_ALREADY_IN_USE:
|
||||
fail.get_node("type").text = "FILE IN USE"
|
||||
ERR_FILE_NO_PERMISSION:
|
||||
fail.get_node("type").text = "MISSING PERMISSION"
|
||||
ERR_INVALID_DATA:
|
||||
fail.get_node("type").text = "DATA INVALID"
|
||||
ERR_FILE_CANT_READ:
|
||||
fail.get_node("type").text = "CANT READ FILE"
|
||||
|
||||
fail.visible = true
|
||||
await get_tree().create_timer(2.5).timeout
|
||||
fail.visible = false
|
||||
|
||||
func refresh():
|
||||
var objs = get_tree().get_nodes_in_group("saved")
|
||||
for object in objs:
|
||||
object.replaceSprite(object.path)
|
||||
object.sprite.frame = 0
|
||||
object.remadePolygon = false
|
||||
pushUpdate("Refreshed all sprites.")
|
||||
|
||||
func unlinkSprite():
|
||||
if heldSprite == null:
|
||||
return
|
||||
if heldSprite.parentId == null:
|
||||
return
|
||||
|
||||
var glob = heldSprite.global_position
|
||||
glob = Vector2(int(glob.x),int(glob.y))
|
||||
|
||||
heldSprite.get_parent().remove_child(heldSprite)
|
||||
main.origin.add_child(heldSprite)
|
||||
heldSprite.set_owner(main.origin)
|
||||
heldSprite.parentId = null
|
||||
heldSprite.parentSprite = null
|
||||
heldSprite.position = glob - main.origin.position
|
||||
|
||||
Global.spriteList.updateData()
|
||||
pushUpdate("Unlinked sprite.")
|
||||
|
||||
func saveImagesFromData():
|
||||
var sprites = get_tree().get_nodes_in_group("saved")
|
||||
if sprites.size() <= 0:
|
||||
return
|
||||
for sprite in sprites:
|
||||
var img = sprite.imageData
|
||||
var array = sprite.path.split("/",false)
|
||||
var length = sprite.path.length() - array[array.size()-1].length()
|
||||
|
||||
DirAccess.make_dir_recursive_absolute(sprite.path.left(length-1))
|
||||
img.save_png(sprite.path)
|
||||
|
||||
pushUpdate("Saved all avatar images to computer.")
|
||||
|
||||
func pushUpdate(text):
|
||||
if is_instance_valid(updatePusherNode):
|
||||
updatePusherNode.pushUpdate(text)
|
|
@ -0,0 +1,136 @@
|
|||
extends Node
|
||||
|
||||
var key = "creature"
|
||||
|
||||
var data = {}
|
||||
|
||||
var default = {
|
||||
"0": {
|
||||
"drag": 0,
|
||||
"identification": 930245150,
|
||||
"offset": "Vector2(0, 0)",
|
||||
"parentId": null,
|
||||
"path": "user://defaultAvatar/body.png",
|
||||
"pos": "Vector2(0, 0)",
|
||||
"rotDrag": 0,
|
||||
"showBlink": 0,
|
||||
"showTalk": 0,
|
||||
"type": "sprite",
|
||||
"xAmp": 9,
|
||||
"xFrq": 0.002,
|
||||
"yAmp": 11,
|
||||
"yFrq": 0.004,
|
||||
"zindex": -1 },
|
||||
"1": {
|
||||
"drag": 1,
|
||||
"identification": 456157398,
|
||||
"offset": "Vector2(0, 0)",
|
||||
"parentId": 930245150,
|
||||
"path": "user://defaultAvatar/head.png",
|
||||
"pos": "Vector2(0, 0)",
|
||||
"rotDrag": 0,
|
||||
"showBlink": 0,
|
||||
"showTalk": 0,
|
||||
"type": "sprite",
|
||||
"xAmp": 0,
|
||||
"xFrq": 0,
|
||||
"yAmp": 0,
|
||||
"yFrq": 0,
|
||||
"zindex": 0 },
|
||||
"2": { "drag": 4, "identification": 928082759, "offset": "Vector2(0, 0)", "parentId": 456157398, "path": "user://defaultAvatar/hair.png", "pos": "Vector2(0, 0)", "rotDrag": 0, "showBlink": 0, "showTalk": 0, "type": "sprite", "xAmp": 0, "xFrq": 0, "yAmp": 0, "yFrq": 0, "zindex": -2 }, "3": { "drag": 0, "identification": 346749260, "offset": "Vector2(0, 0)", "parentId": 456157398, "path": "user://defaultAvatar/mouth1.png", "pos": "Vector2(0, 0)", "rotDrag": 0, "showBlink": 0, "showTalk": 1, "type": "sprite", "xAmp": 0, "xFrq": 0, "yAmp": 0, "yFrq": 0, "zindex": 0 }, "4": { "drag": 0, "identification": 348929106, "offset": "Vector2(0, 0)", "parentId": 456157398, "path": "user://defaultAvatar/mouth2.png", "pos": "Vector2(0, 0)", "rotDrag": 0, "showBlink": 0, "showTalk": 2, "type": "sprite", "xAmp": 0, "xFrq": 0, "yAmp": 0, "yFrq": 0, "zindex": 0 }, "5": { "drag": 0, "identification": 66364456, "offset": "Vector2(0, 0)", "parentId": 456157398, "path": "user://defaultAvatar/eye1.png", "pos": "Vector2(0, 0)", "rotDrag": 0, "showBlink": 1, "showTalk": 2, "type": "sprite", "xAmp": 0, "xFrq": 0, "yAmp": 0, "yFrq": 0, "zindex": 0 }, "6": { "drag": 0, "identification": 261040117, "offset": "Vector2(0, 0)", "parentId": 456157398, "path": "user://defaultAvatar/eye2.png", "pos": "Vector2(0, 0)", "rotDrag": 0, "showBlink": 1, "showTalk": 1, "type": "sprite", "xAmp": 0, "xFrq": 0, "yAmp": 0, "yFrq": 0, "zindex": 0 }, "7": { "drag": 0, "identification": 291459997, "offset": "Vector2(0, 0)", "parentId": 456157398, "path": "user://defaultAvatar/eye3.png", "pos": "Vector2(0, 0)", "rotDrag": 0, "showBlink": 2, "showTalk": 0, "type": "sprite", "xAmp": 0, "xFrq": 0, "yAmp": 0, "yFrq": 0, "zindex": 0 }, "8": { "drag": 0, "identification": 148065686, "offset": "Vector2(-74, 92)", "parentId": 456157398, "path": "user://defaultAvatar/hat.png", "pos": "Vector2(72, -89)", "rotDrag": -2, "showBlink": 0, "showTalk": 0, "type": "sprite", "xAmp": 0, "xFrq": 0, "yAmp": 0, "yFrq": 0, "zindex": 2 } }
|
||||
|
||||
|
||||
var settings = {
|
||||
"newUser":true,
|
||||
"lastAvatar":"",
|
||||
"volume":0.185,
|
||||
"sense":0.25,
|
||||
"windowSize":Vector2i(1280,720),
|
||||
"useStreamDeck":false,
|
||||
"bounce":250,
|
||||
"gravity":1000,
|
||||
"maxFPS":60,
|
||||
"secondsToMicReset":180,
|
||||
"backgroundColor":var_to_str(Color(0.0,0.0,0.0,0.0)),
|
||||
"filtering":false,
|
||||
"costumeKeys":["1","2","3","4","5","6","7","8","9","0"],
|
||||
"blinkSpeed":1.0,
|
||||
"blinkChance":200,
|
||||
"bounceOnCostumeChange":false,
|
||||
}
|
||||
|
||||
var settingsPath = "user://settings.pngtp"
|
||||
|
||||
func _ready():
|
||||
var datas = read_save(settingsPath)
|
||||
if datas == null:
|
||||
return
|
||||
else:
|
||||
settings = datas.duplicate()
|
||||
|
||||
func _exit_tree():
|
||||
write_settings(settingsPath)
|
||||
|
||||
|
||||
func read_save(path):
|
||||
|
||||
if path == "default":
|
||||
return DefaultAvatarData.data
|
||||
|
||||
|
||||
if OS.has_feature('web'):
|
||||
var JSONstr = JavaScriptBridge.eval("window.localStorage.getItem('" + key + "');")
|
||||
if (JSONstr):
|
||||
return JSON.parse_string(JSONstr)
|
||||
else:
|
||||
return null
|
||||
else:
|
||||
var file = FileAccess.open(path, FileAccess.READ)
|
||||
if not file:
|
||||
return null
|
||||
var newData = JSON.parse_string(file.get_as_text())
|
||||
file.close()
|
||||
return newData
|
||||
|
||||
func write_save(path):
|
||||
if OS.has_feature('web'):
|
||||
JavaScriptBridge.eval("window.localStorage.setItem('" + key + "', '" + JSON.stringify(data) + "');")
|
||||
else:
|
||||
var file = FileAccess.open(path, FileAccess.WRITE)
|
||||
file.store_line(JSON.stringify(data))
|
||||
file.close()
|
||||
|
||||
func write_settings(path):
|
||||
var file = FileAccess.open(path, FileAccess.WRITE)
|
||||
file.store_line(JSON.stringify(settings))
|
||||
file.close()
|
||||
|
||||
|
||||
func clearSave():
|
||||
|
||||
if OS.has_feature('web'):
|
||||
var JSONstr = JavaScriptBridge.eval("window.localStorage.getItem('" + key + "');")
|
||||
if (JSONstr):
|
||||
JavaScriptBridge.eval("window.localStorage.removeItem('" + key + "');")
|
||||
else:
|
||||
return null
|
||||
else:
|
||||
var file = FileAccess.open("user://" + key + ".save", FileAccess.READ)
|
||||
if not file:
|
||||
return null
|
||||
file.close()
|
||||
var dir = DirAccess.open("user://")
|
||||
dir.remove(key + ".save")
|
||||
data = {}
|
||||
|
||||
func open_site(url):
|
||||
if OS.has_feature('web'):
|
||||
JavaScriptBridge.eval("window.open(\"" + url + "\");")
|
||||
else:
|
||||
print("Could not open site " + url + " without an HTML5 build")
|
||||
|
||||
func switchToSite(url):
|
||||
if OS.has_feature('web'):
|
||||
JavaScriptBridge.eval("window.open(\"" + url + "\", \"_parent\");")
|
||||
else:
|
||||
print("Could not switch to site " + url + " without an HTML5 build")
|
|
@ -0,0 +1,23 @@
|
|||
[configuration]
|
||||
|
||||
entry_symbol = "example_library_init"
|
||||
compatibility_minimum = "4.1"
|
||||
|
||||
[libraries]
|
||||
|
||||
macos.debug = "res://bin/libgdexamplemacostemplate_debug.framework/libgdexamplemacostemplate_debug.dylib"
|
||||
macos.release = "res://bin/libgdexamplemacostemplate_release.framework/libgdexamplemacostemplate_release.dylib"
|
||||
windows.debug.x86_32 = "res://bin/libgdexample.windows.template_debug.x86_32.dll"
|
||||
windows.release.x86_32 = "res://bin/libgdexample.windows.template_release.x86_32.dll"
|
||||
windows.debug.x86_64 = "res://bin/libgdexample.windows.template_debug.x86_64.dll"
|
||||
windows.release.x86_64 = "res://bin/libgdexample.windows.template_release.x86_64.dll"
|
||||
linux.debug.x86_64 = "res://bin/libgdexample.linux.template_debug.x86_64.so"
|
||||
linux.release.x86_64 = "res://bin/libgdexample.linux.template_release.x86_64.so"
|
||||
linux.debug.arm64 = "res://bin/libgdexample.linux.template_debug.arm64.so"
|
||||
linux.release.arm64 = "res://bin/libgdexample.linux.template_release.arm64.so"
|
||||
linux.debug.rv64 = "res://bin/libgdexample.linux.template_debug.rv64.so"
|
||||
linux.release.rv64 = "res://bin/libgdexample.linux.template_release.rv64.so"
|
||||
android.debug.x86_64 = "res://bin/libgdexample.android.template_debug.x86_64.so"
|
||||
android.release.x86_64 = "res://bin/libgdexample.android.template_release.x86_64.so"
|
||||
android.debug.arm64 = "res://bin/libgdexample.android.template_debug.arm64.so"
|
||||
android.release.arm64 = "res://bin/libgdexample.android.template_release.arm64.so"
|
|
@ -0,0 +1,22 @@
|
|||
[gd_resource type="AudioBusLayout" load_steps=3 format=3 uid="uid://cg7wt8xagjs7o"]
|
||||
|
||||
[sub_resource type="AudioEffectRecord" id="AudioEffectRecord_ucpvm"]
|
||||
resource_name = "Record"
|
||||
format = 0
|
||||
|
||||
[sub_resource type="AudioEffectSpectrumAnalyzer" id="AudioEffectSpectrumAnalyzer_skwrq"]
|
||||
resource_name = "SpectrumAnalyzer"
|
||||
buffer_length = 0.1
|
||||
fft_size = 0
|
||||
|
||||
[resource]
|
||||
bus/1/name = &"MIC"
|
||||
bus/1/solo = false
|
||||
bus/1/mute = false
|
||||
bus/1/bypass_fx = false
|
||||
bus/1/volume_db = -80.0
|
||||
bus/1/send = &"Master"
|
||||
bus/1/effect/0/effect = SubResource("AudioEffectRecord_ucpvm")
|
||||
bus/1/effect/0/enabled = true
|
||||
bus/1/effect/1/effect = SubResource("AudioEffectSpectrumAnalyzer_skwrq")
|
||||
bus/1/effect/1/enabled = true
|
|
@ -0,0 +1,204 @@
|
|||
[preset.0]
|
||||
|
||||
name="Windows Desktop"
|
||||
platform="Windows Desktop"
|
||||
runnable=true
|
||||
dedicated_server=false
|
||||
custom_features=""
|
||||
export_filter="all_resources"
|
||||
include_filter=""
|
||||
exclude_filter=""
|
||||
export_path=".export/release 1.4.2/windows/PNGTUBER PLUS 1.4.2 WINDOWS.exe"
|
||||
encryption_include_filters=""
|
||||
encryption_exclude_filters=""
|
||||
encrypt_pck=false
|
||||
encrypt_directory=false
|
||||
|
||||
[preset.0.options]
|
||||
|
||||
custom_template/debug=""
|
||||
custom_template/release=""
|
||||
debug/export_console_wrapper=1
|
||||
binary_format/embed_pck=false
|
||||
texture_format/bptc=true
|
||||
texture_format/s3tc=true
|
||||
texture_format/etc=false
|
||||
texture_format/etc2=false
|
||||
binary_format/architecture="x86_64"
|
||||
codesign/enable=false
|
||||
codesign/timestamp=true
|
||||
codesign/timestamp_server_url=""
|
||||
codesign/digest_algorithm=1
|
||||
codesign/description=""
|
||||
codesign/custom_options=PackedStringArray()
|
||||
application/modify_resources=true
|
||||
application/icon="res://finalIcon.ico"
|
||||
application/console_wrapper_icon=""
|
||||
application/icon_interpolation=4
|
||||
application/file_version=""
|
||||
application/product_version=""
|
||||
application/company_name="kaiakairos"
|
||||
application/product_name="PNGTuber Plus"
|
||||
application/file_description=""
|
||||
application/copyright=""
|
||||
application/trademarks=""
|
||||
ssh_remote_deploy/enabled=false
|
||||
ssh_remote_deploy/host="user@host_ip"
|
||||
ssh_remote_deploy/port="22"
|
||||
ssh_remote_deploy/extra_args_ssh=""
|
||||
ssh_remote_deploy/extra_args_scp=""
|
||||
ssh_remote_deploy/run_script="Expand-Archive -LiteralPath '{temp_dir}\\{archive_name}' -DestinationPath '{temp_dir}'
|
||||
$action = New-ScheduledTaskAction -Execute '{temp_dir}\\{exe_name}' -Argument '{cmd_args}'
|
||||
$trigger = New-ScheduledTaskTrigger -Once -At 00:00
|
||||
$settings = New-ScheduledTaskSettingsSet
|
||||
$task = New-ScheduledTask -Action $action -Trigger $trigger -Settings $settings
|
||||
Register-ScheduledTask godot_remote_debug -InputObject $task -Force:$true
|
||||
Start-ScheduledTask -TaskName godot_remote_debug
|
||||
while (Get-ScheduledTask -TaskName godot_remote_debug | ? State -eq running) { Start-Sleep -Milliseconds 100 }
|
||||
Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue"
|
||||
ssh_remote_deploy/cleanup_script="Stop-ScheduledTask -TaskName godot_remote_debug -ErrorAction:SilentlyContinue
|
||||
Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue
|
||||
Remove-Item -Recurse -Force '{temp_dir}'"
|
||||
|
||||
[preset.1]
|
||||
|
||||
name="Linux/X11"
|
||||
platform="Linux/X11"
|
||||
runnable=true
|
||||
dedicated_server=false
|
||||
custom_features=""
|
||||
export_filter="all_resources"
|
||||
include_filter=""
|
||||
exclude_filter=""
|
||||
export_path=".export/release 1.4.2/LINUX/PNGTUBER PLUS 1.4.2 LINUX.x86_64"
|
||||
encryption_include_filters=""
|
||||
encryption_exclude_filters=""
|
||||
encrypt_pck=false
|
||||
encrypt_directory=false
|
||||
|
||||
[preset.1.options]
|
||||
|
||||
custom_template/debug=""
|
||||
custom_template/release=""
|
||||
debug/export_console_wrapper=1
|
||||
binary_format/embed_pck=false
|
||||
texture_format/bptc=true
|
||||
texture_format/s3tc=true
|
||||
texture_format/etc=false
|
||||
texture_format/etc2=false
|
||||
binary_format/architecture="x86_64"
|
||||
ssh_remote_deploy/enabled=false
|
||||
ssh_remote_deploy/host="user@host_ip"
|
||||
ssh_remote_deploy/port="22"
|
||||
ssh_remote_deploy/extra_args_ssh=""
|
||||
ssh_remote_deploy/extra_args_scp=""
|
||||
ssh_remote_deploy/run_script="#!/usr/bin/env bash
|
||||
export DISPLAY=:0
|
||||
unzip -o -q \"{temp_dir}/{archive_name}\" -d \"{temp_dir}\"
|
||||
\"{temp_dir}/{exe_name}\" {cmd_args}"
|
||||
ssh_remote_deploy/cleanup_script="#!/usr/bin/env bash
|
||||
kill $(pgrep -x -f \"{temp_dir}/{exe_name} {cmd_args}\")
|
||||
rm -rf \"{temp_dir}\""
|
||||
|
||||
[preset.2]
|
||||
|
||||
name="macOS"
|
||||
platform="macOS"
|
||||
runnable=true
|
||||
dedicated_server=false
|
||||
custom_features=""
|
||||
export_filter="all_resources"
|
||||
include_filter=""
|
||||
exclude_filter=""
|
||||
export_path=".export/release 1.4.2/mac/PNGTUBER PLUS 1.4.2 MAC.zip"
|
||||
encryption_include_filters=""
|
||||
encryption_exclude_filters=""
|
||||
encrypt_pck=false
|
||||
encrypt_directory=false
|
||||
|
||||
[preset.2.options]
|
||||
|
||||
export/distribution_type=1
|
||||
binary_format/architecture="universal"
|
||||
custom_template/debug=""
|
||||
custom_template/release=""
|
||||
debug/export_console_wrapper=1
|
||||
application/icon=""
|
||||
application/icon_interpolation=4
|
||||
application/bundle_identifier="com.kaiakairos.game"
|
||||
application/signature=""
|
||||
application/app_category="Productivity"
|
||||
application/short_version="1.4.2"
|
||||
application/version="1.4.2"
|
||||
application/copyright=""
|
||||
application/copyright_localized={}
|
||||
application/min_macos_version="10.12"
|
||||
display/high_res=true
|
||||
xcode/platform_build="14C18"
|
||||
xcode/sdk_version="13.1"
|
||||
xcode/sdk_build="22C55"
|
||||
xcode/sdk_name="macosx13.1"
|
||||
xcode/xcode_version="1420"
|
||||
xcode/xcode_build="14C18"
|
||||
codesign/codesign=1
|
||||
codesign/installer_identity=""
|
||||
codesign/apple_team_id=""
|
||||
codesign/identity=""
|
||||
codesign/entitlements/custom_file=""
|
||||
codesign/entitlements/allow_jit_code_execution=false
|
||||
codesign/entitlements/allow_unsigned_executable_memory=false
|
||||
codesign/entitlements/allow_dyld_environment_variables=false
|
||||
codesign/entitlements/disable_library_validation=true
|
||||
codesign/entitlements/audio_input=true
|
||||
codesign/entitlements/camera=false
|
||||
codesign/entitlements/location=false
|
||||
codesign/entitlements/address_book=false
|
||||
codesign/entitlements/calendars=false
|
||||
codesign/entitlements/photos_library=false
|
||||
codesign/entitlements/apple_events=false
|
||||
codesign/entitlements/debugging=false
|
||||
codesign/entitlements/app_sandbox/enabled=false
|
||||
codesign/entitlements/app_sandbox/network_server=false
|
||||
codesign/entitlements/app_sandbox/network_client=false
|
||||
codesign/entitlements/app_sandbox/device_usb=false
|
||||
codesign/entitlements/app_sandbox/device_bluetooth=false
|
||||
codesign/entitlements/app_sandbox/files_downloads=0
|
||||
codesign/entitlements/app_sandbox/files_pictures=0
|
||||
codesign/entitlements/app_sandbox/files_music=0
|
||||
codesign/entitlements/app_sandbox/files_movies=0
|
||||
codesign/entitlements/app_sandbox/helper_executables=[]
|
||||
codesign/custom_options=PackedStringArray()
|
||||
notarization/notarization=0
|
||||
privacy/microphone_usage_description="So the guy can go up and down!"
|
||||
privacy/microphone_usage_description_localized={}
|
||||
privacy/camera_usage_description=""
|
||||
privacy/camera_usage_description_localized={}
|
||||
privacy/location_usage_description=""
|
||||
privacy/location_usage_description_localized={}
|
||||
privacy/address_book_usage_description=""
|
||||
privacy/address_book_usage_description_localized={}
|
||||
privacy/calendar_usage_description=""
|
||||
privacy/calendar_usage_description_localized={}
|
||||
privacy/photos_library_usage_description=""
|
||||
privacy/photos_library_usage_description_localized={}
|
||||
privacy/desktop_folder_usage_description=""
|
||||
privacy/desktop_folder_usage_description_localized={}
|
||||
privacy/documents_folder_usage_description=""
|
||||
privacy/documents_folder_usage_description_localized={}
|
||||
privacy/downloads_folder_usage_description=""
|
||||
privacy/downloads_folder_usage_description_localized={}
|
||||
privacy/network_volumes_usage_description=""
|
||||
privacy/network_volumes_usage_description_localized={}
|
||||
privacy/removable_volumes_usage_description=""
|
||||
privacy/removable_volumes_usage_description_localized={}
|
||||
ssh_remote_deploy/enabled=false
|
||||
ssh_remote_deploy/host="user@host_ip"
|
||||
ssh_remote_deploy/port="22"
|
||||
ssh_remote_deploy/extra_args_ssh=""
|
||||
ssh_remote_deploy/extra_args_scp=""
|
||||
ssh_remote_deploy/run_script="#!/usr/bin/env bash
|
||||
unzip -o -q \"{temp_dir}/{archive_name}\" -d \"{temp_dir}\"
|
||||
open \"{temp_dir}/{exe_name}.app\" --args {cmd_args}"
|
||||
ssh_remote_deploy/cleanup_script="#!/usr/bin/env bash
|
||||
kill $(pgrep -x -f \"{temp_dir}/{exe_name}.app/Contents/MacOS/{exe_name} {cmd_args}\")
|
||||
rm -rf \"{temp_dir}\""
|
After Width: | Height: | Size: 345 KiB |
|
@ -0,0 +1,33 @@
|
|||
[remap]
|
||||
|
||||
importer="font_data_dynamic"
|
||||
type="FontFile"
|
||||
uid="uid://1aomxu84k6ov"
|
||||
path="res://.godot/imported/I-pixel-u.ttf-93d60f2456fb1937becfef150a570544.fontdata"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://font/I-pixel-u.ttf"
|
||||
dest_files=["res://.godot/imported/I-pixel-u.ttf-93d60f2456fb1937becfef150a570544.fontdata"]
|
||||
|
||||
[params]
|
||||
|
||||
Rendering=null
|
||||
antialiasing=1
|
||||
generate_mipmaps=false
|
||||
multichannel_signed_distance_field=false
|
||||
msdf_pixel_range=8
|
||||
msdf_size=48
|
||||
allow_system_fallback=true
|
||||
force_autohinter=false
|
||||
hinting=1
|
||||
subpixel_positioning=1
|
||||
oversampling=0.0
|
||||
Fallbacks=null
|
||||
fallbacks=[]
|
||||
Compress=null
|
||||
compress=true
|
||||
preload=[]
|
||||
language_support={}
|
||||
script_support={}
|
||||
opentype_features={}
|
|
@ -0,0 +1,33 @@
|
|||
[remap]
|
||||
|
||||
importer="font_data_dynamic"
|
||||
type="FontFile"
|
||||
uid="uid://bj7gm7e6634it"
|
||||
path="res://.godot/imported/g.ttf-9f6d8c807fc8c8b1e0b9d659d48298ec.fontdata"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://font/g.ttf"
|
||||
dest_files=["res://.godot/imported/g.ttf-9f6d8c807fc8c8b1e0b9d659d48298ec.fontdata"]
|
||||
|
||||
[params]
|
||||
|
||||
Rendering=null
|
||||
antialiasing=1
|
||||
generate_mipmaps=false
|
||||
multichannel_signed_distance_field=false
|
||||
msdf_pixel_range=8
|
||||
msdf_size=48
|
||||
allow_system_fallback=true
|
||||
force_autohinter=false
|
||||
hinting=1
|
||||
subpixel_positioning=1
|
||||
oversampling=0.0
|
||||
Fallbacks=null
|
||||
fallbacks=[]
|
||||
Compress=null
|
||||
compress=true
|
||||
preload=[]
|
||||
language_support={}
|
||||
script_support={}
|
||||
opentype_features={}
|
|
@ -0,0 +1,33 @@
|
|||
[remap]
|
||||
|
||||
importer="font_data_dynamic"
|
||||
type="FontFile"
|
||||
uid="uid://ukj8gv8ucqsg"
|
||||
path="res://.godot/imported/goober_pixel.ttf-62c290ad12346c410d17e4f718a25b74.fontdata"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://font/goober_pixel.ttf"
|
||||
dest_files=["res://.godot/imported/goober_pixel.ttf-62c290ad12346c410d17e4f718a25b74.fontdata"]
|
||||
|
||||
[params]
|
||||
|
||||
Rendering=null
|
||||
antialiasing=1
|
||||
generate_mipmaps=false
|
||||
multichannel_signed_distance_field=false
|
||||
msdf_pixel_range=8
|
||||
msdf_size=48
|
||||
allow_system_fallback=true
|
||||
force_autohinter=false
|
||||
hinting=1
|
||||
subpixel_positioning=1
|
||||
oversampling=0.0
|
||||
Fallbacks=null
|
||||
fallbacks=[]
|
||||
Compress=null
|
||||
compress=true
|
||||
preload=[]
|
||||
language_support={}
|
||||
script_support={}
|
||||
opentype_features={}
|
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://064sfo8cbef5"
|
||||
path="res://.godot/imported/icon.png-487276ed1e3a0c39cad0279d744ee560.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://icon.png"
|
||||
dest_files=["res://.godot/imported/icon.png-487276ed1e3a0c39cad0279d744ee560.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
|
@ -0,0 +1 @@
|
|||
<svg height="128" width="128" xmlns="http://www.w3.org/2000/svg"><rect x="2" y="2" width="124" height="124" rx="14" fill="#363d52" stroke="#212532" stroke-width="4"/><g transform="scale(.101) translate(122 122)"><g fill="#fff"><path d="M105 673v33q407 354 814 0v-33z"/><path fill="#478cbf" d="m105 673 152 14q12 1 15 14l4 67 132 10 8-61q2-11 15-15h162q13 4 15 15l8 61 132-10 4-67q3-13 15-14l152-14V427q30-39 56-81-35-59-83-108-43 20-82 47-40-37-88-64 7-51 8-102-59-28-123-42-26 43-46 89-49-7-98 0-20-46-46-89-64 14-123 42 1 51 8 102-48 27-88 64-39-27-82-47-48 49-83 108 26 42 56 81zm0 33v39c0 276 813 276 813 0v-39l-134 12-5 69q-2 10-14 13l-162 11q-12 0-16-11l-10-65H447l-10 65q-4 11-16 11l-162-11q-12-3-14-13l-5-69z"/><path d="M483 600c3 34 55 34 58 0v-86c-3-34-55-34-58 0z"/><circle cx="725" cy="526" r="90"/><circle cx="299" cy="526" r="90"/></g><g fill="#414042"><circle cx="307" cy="532" r="60"/><circle cx="717" cy="532" r="60"/></g></g></svg>
|
After Width: | Height: | Size: 950 B |
|
@ -0,0 +1,38 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://brxkjnudq5pbi"
|
||||
path.s3tc="res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://icon.svg"
|
||||
dest_files=["res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=0
|
||||
svg/scale=1.0
|
||||
editor/scale_with_editor_scale=false
|
||||
editor/convert_colors_with_editor_theme=false
|
|
@ -0,0 +1,10 @@
|
|||
extends Node2D
|
||||
|
||||
@onready var editSprite = $Edit/Fancy
|
||||
@onready var editButton = $Edit/Button
|
||||
|
||||
func _process(delta):
|
||||
if Rect2(editButton.get_parent().position-Vector2(24,24),editButton.size).has_point(get_local_mouse_position()):
|
||||
editSprite.scale = lerp(editSprite.scale,Vector2(1.2,1.2),0.2)
|
||||
else:
|
||||
editSprite.scale = lerp(editSprite.scale,Vector2(1.0,1.0),0.2)
|
|
@ -0,0 +1,64 @@
|
|||
extends Node2D
|
||||
|
||||
@onready var addButton = $Add/addButton
|
||||
@onready var addSprite = $Add/Fancy3
|
||||
|
||||
@onready var linkButton = $Link/linkButton
|
||||
@onready var linkSprite = $Link/Fancy2
|
||||
|
||||
@onready var exitButton = $Exit/Button2
|
||||
@onready var exitSprite = $Exit/Fancy3
|
||||
|
||||
@onready var saveButton = $Save/saveButton
|
||||
@onready var saveSprite = $Save/Fancy4
|
||||
|
||||
@onready var loadButton = $Load/loadButton
|
||||
@onready var loadSprite = $Load/Fancy5
|
||||
|
||||
@onready var repButton = $ReplaceSprite/replaceButton
|
||||
@onready var repSprite = $ReplaceSprite/Fancy6
|
||||
|
||||
@onready var dupButton = $DuplicateSprite/duplicateButton
|
||||
@onready var dupSprite = $DuplicateSprite/Fancy
|
||||
|
||||
@onready var buttons = [addButton,linkButton,exitButton,saveButton,loadButton,repButton,dupButton]
|
||||
@onready var sprites = [addSprite,linkSprite,exitSprite,saveSprite,loadSprite,repSprite,dupSprite]
|
||||
|
||||
func _process(delta):
|
||||
var s = 0
|
||||
for b in range(buttons.size()):
|
||||
if buttons[b] == null:
|
||||
continue
|
||||
if Rect2(buttons[b].get_parent().position-Vector2(24,24),buttons[b].size).has_point(get_local_mouse_position()):
|
||||
sprites[s].scale = lerp(sprites[s].scale,Vector2(1.2,1.2),0.2)
|
||||
if Input.is_action_pressed("mouse_left"):
|
||||
sprites[s].scale = Vector2(0.6,0.6)
|
||||
match b:
|
||||
0:
|
||||
Global.mouse.text = "Add new sprite"
|
||||
1:
|
||||
Global.mouse.text = "Link sprite"
|
||||
2:
|
||||
Global.mouse.text = "Exit edit mode"
|
||||
3:
|
||||
Global.mouse.text = "Save avatar"
|
||||
4:
|
||||
Global.mouse.text = "Load avatar"
|
||||
5:
|
||||
Global.mouse.text = "Replace sprite"
|
||||
6:
|
||||
Global.mouse.text = "Duplicate sprite"
|
||||
|
||||
else:
|
||||
sprites[s].scale = lerp(sprites[s].scale,Vector2(1.0,1.0),0.2)
|
||||
s += 1
|
||||
|
||||
var newColor = Color.DARK_SLATE_GRAY if Global.heldSprite == null else Color.WHITE
|
||||
|
||||
linkSprite.get_parent().modulate = newColor
|
||||
repSprite.get_parent().modulate = newColor
|
||||
dupSprite.get_parent().modulate = newColor
|
||||
|
||||
func _notification(what):
|
||||
if what == 30:
|
||||
$MoveMenuDown.position.y = get_window().size.y
|
|
@ -0,0 +1,17 @@
|
|||
extends Node2D
|
||||
|
||||
@onready var buttonScene = preload("res://ui_scenes/microphoneSelect/mic_select_button.tscn")
|
||||
@onready var container = $ScrollContainer/VBoxContainer
|
||||
|
||||
func _ready():
|
||||
showMicMenu()
|
||||
|
||||
func showMicMenu():
|
||||
for child in container.get_children():
|
||||
child.queue_free()
|
||||
|
||||
var inputList = AudioServer.get_input_device_list()
|
||||
for input in inputList:
|
||||
var newButton = buttonScene.instantiate()
|
||||
newButton.micName = input
|
||||
container.add_child(newButton)
|
|
@ -0,0 +1,14 @@
|
|||
extends Node2D
|
||||
|
||||
@onready var rect = $NinePatchRect
|
||||
|
||||
@onready var tween = null
|
||||
|
||||
func _on_button_pressed():
|
||||
if tween != null:
|
||||
tween.stop()
|
||||
rect.visible = !rect.visible
|
||||
rect.scale = Vector2(0.0,0.0)
|
||||
tween = get_tree().create_tween()
|
||||
tween.tween_property(rect,"scale",Vector2(1,1),0.5).set_trans(Tween.TRANS_ELASTIC).set_ease(Tween.EASE_OUT)
|
||||
|
|
@ -0,0 +1,612 @@
|
|||
extends Node2D
|
||||
|
||||
var editMode = true
|
||||
|
||||
#Node Reference
|
||||
@onready var origin = $OriginMotion/Origin
|
||||
@onready var camera = $Camera2D
|
||||
@onready var controlPanel = $ControlPanel
|
||||
@onready var editControls = $EditControls
|
||||
@onready var tutorial = $Tutorial
|
||||
@onready var spriteViewer = $EditControls/SpriteViewer
|
||||
@onready var viewerArrows = $ViewerArrows
|
||||
@onready var spriteList = $EditControls/SpriteList
|
||||
|
||||
@onready var fileDialog = $FileDialog
|
||||
@onready var replaceDialog = $ReplaceDialog
|
||||
@onready var saveDialog = $SaveDialog
|
||||
@onready var loadDialog = $LoadDialog
|
||||
|
||||
@onready var lines = $Lines
|
||||
|
||||
@onready var settingsMenu = $ControlPanel/SettingsMenu
|
||||
|
||||
@onready var pushUpdates = $PushUpdates
|
||||
|
||||
@onready var shadow = $shadowSprite
|
||||
|
||||
#Scene Reference
|
||||
@onready var spriteObject = preload("res://ui_scenes/selectedSprite/spriteObject.tscn")
|
||||
|
||||
var saveLoaded = false
|
||||
|
||||
#Motion
|
||||
var yVel = 0
|
||||
var bounceSlider = 250
|
||||
var bounceGravity = 1000
|
||||
|
||||
#Costumes
|
||||
var costume = 1
|
||||
var bounceOnCostumeChange = false
|
||||
|
||||
#Zooming
|
||||
var scaleOverall = 100
|
||||
|
||||
var bounceChange = 0.0
|
||||
|
||||
#IMPORTANT
|
||||
var fileSystemOpen = false
|
||||
|
||||
#background input capture
|
||||
signal emptiedCapture
|
||||
signal pressedKey
|
||||
var costumeKeys = ["1","2","3","4","5","6","7","8","9","0"]
|
||||
|
||||
|
||||
func _ready():
|
||||
Global.main = self
|
||||
Global.fail = $Failed
|
||||
|
||||
|
||||
Global.connect("startSpeaking",onSpeak)
|
||||
|
||||
ElgatoStreamDeck.on_key_down.connect(changeCostumeStreamDeck)
|
||||
|
||||
if Saving.settings["newUser"]:
|
||||
_on_load_dialog_file_selected("default")
|
||||
Saving.settings["newUser"] = false
|
||||
saveLoaded = true
|
||||
else:
|
||||
_on_load_dialog_file_selected(Saving.settings["lastAvatar"])
|
||||
|
||||
$ControlPanel/volumeSlider.value = Saving.settings["volume"]
|
||||
$ControlPanel/sensitiveSlider.value = Saving.settings["sense"]
|
||||
|
||||
get_window().size = str_to_var(Saving.settings["windowSize"])
|
||||
|
||||
if Saving.settings.has("bounce"):
|
||||
bounceSlider = Saving.settings["bounce"]
|
||||
else:
|
||||
Saving.settings["bounce"] = 250
|
||||
|
||||
if Saving.settings.has("maxFPS"):
|
||||
Engine.max_fps = Saving.settings["maxFPS"]
|
||||
else:
|
||||
Saving.settings["maxFPS"] = 60
|
||||
|
||||
if Saving.settings.has("backgroundColor"):
|
||||
Global.backgroundColor = str_to_var(Saving.settings["backgroundColor"])
|
||||
else:
|
||||
Saving.settings["backgroundColor"] = var_to_str(Color(0.0,0.0,0.0,0.0))
|
||||
|
||||
if Saving.settings.has("filtering"):
|
||||
Global.filtering = Saving.settings["filtering"]
|
||||
else:
|
||||
Saving.settings["filtering"] = false
|
||||
|
||||
if Saving.settings.has("gravity"):
|
||||
bounceGravity = Saving.settings["gravity"]
|
||||
else:
|
||||
Saving.settings["gravity"] = 1000
|
||||
|
||||
if Saving.settings.has("costumeKeys"):
|
||||
costumeKeys = Saving.settings["costumeKeys"]
|
||||
else:
|
||||
Saving.settings["costumeKeys"] = costumeKeys
|
||||
|
||||
if Saving.settings.has("blinkSpeed"):
|
||||
Global.blinkSpeed = Saving.settings["blinkSpeed"]
|
||||
else:
|
||||
Saving.settings["blinkSpeed"] = 1.0
|
||||
|
||||
if Saving.settings.has("blinkChance"):
|
||||
Global.blinkChance = Saving.settings["blinkChance"]
|
||||
else:
|
||||
Saving.settings["blinkChance"] = 200
|
||||
|
||||
if Saving.settings.has("bounceOnCostumeChange"):
|
||||
bounceOnCostumeChange = Saving.settings["bounceOnCostumeChange"]
|
||||
else:
|
||||
Saving.settings["bounceOnCostumeChange"] = false
|
||||
|
||||
saveLoaded = true
|
||||
|
||||
RenderingServer.set_default_clear_color(Global.backgroundColor)
|
||||
swapMode()
|
||||
settingsMenu.setvalues()
|
||||
changeCostume(1)
|
||||
|
||||
var s = get_viewport().get_visible_rect().size
|
||||
origin.position = s*0.5
|
||||
camera.position = origin.position
|
||||
|
||||
func _process(delta):
|
||||
var hold = origin.get_parent().position.y
|
||||
|
||||
origin.get_parent().position.y += yVel * delta
|
||||
if origin.get_parent().position.y > 0:
|
||||
origin.get_parent().position.y = 0
|
||||
bounceChange = hold - origin.get_parent().position.y
|
||||
|
||||
yVel += bounceGravity*delta
|
||||
|
||||
if Input.is_action_just_pressed("openFolder"):
|
||||
OS.shell_open(ProjectSettings.globalize_path("user://"))
|
||||
|
||||
moveSpriteMenu(delta)
|
||||
zoomScene()
|
||||
|
||||
fileSystemOpen = isFileSystemOpen()
|
||||
|
||||
followShadow()
|
||||
|
||||
func followShadow():
|
||||
shadow.visible = is_instance_valid(Global.heldSprite)
|
||||
if !shadow.visible:
|
||||
return
|
||||
|
||||
shadow.global_position = Global.heldSprite.sprite.global_position + Vector2(6,6)
|
||||
shadow.global_rotation = Global.heldSprite.sprite.global_rotation
|
||||
shadow.offset = Global.heldSprite.sprite.offset
|
||||
|
||||
shadow.texture = Global.heldSprite.sprite.texture
|
||||
shadow.hframes = Global.heldSprite.sprite.hframes
|
||||
shadow.frame = Global.heldSprite.sprite.frame
|
||||
|
||||
|
||||
func isFileSystemOpen():
|
||||
for obj in [replaceDialog,fileDialog,saveDialog,loadDialog]:
|
||||
if obj.visible:
|
||||
if obj == replaceDialog:
|
||||
return true
|
||||
Global.heldSprite = null
|
||||
return true
|
||||
return false
|
||||
|
||||
#Displays control panel whether or not application is focused
|
||||
func _notification(what):
|
||||
match what:
|
||||
SceneTree.NOTIFICATION_APPLICATION_FOCUS_OUT:
|
||||
controlPanel.visible = false
|
||||
pushUpdates.visible = false
|
||||
SceneTree.NOTIFICATION_APPLICATION_FOCUS_IN:
|
||||
if !editMode:
|
||||
controlPanel.visible = true
|
||||
pushUpdates.visible = true
|
||||
30:
|
||||
onWindowSizeChange()
|
||||
|
||||
func onWindowSizeChange():
|
||||
if !saveLoaded:
|
||||
return
|
||||
Saving.settings["windowSize"] = var_to_str(get_window().size)
|
||||
var s = get_viewport().get_visible_rect().size
|
||||
origin.position = s*0.5
|
||||
|
||||
lines.position = s*0.5
|
||||
lines.drawLine()
|
||||
|
||||
camera.position = origin.position
|
||||
controlPanel.position = camera.position + (s/(camera.zoom*2.0))
|
||||
tutorial.position = controlPanel.position
|
||||
editControls.position = camera.position - (s/(camera.zoom*2.0))
|
||||
viewerArrows.position = editControls.position
|
||||
spriteList.position.x = s.x - 233
|
||||
pushUpdates.position.y = controlPanel.position.y
|
||||
pushUpdates.position.x = editControls.position.x
|
||||
|
||||
func zoomScene():
|
||||
#Handles Zooming
|
||||
if Input.is_action_pressed("control"):
|
||||
if Input.is_action_just_pressed("scrollUp"):
|
||||
if scaleOverall < 400:
|
||||
camera.zoom += Vector2(0.1,0.1)
|
||||
scaleOverall += 10
|
||||
changeZoom()
|
||||
if Input.is_action_just_pressed("scrollDown"):
|
||||
if scaleOverall > 10:
|
||||
camera.zoom -= Vector2(0.1,0.1)
|
||||
scaleOverall -= 10
|
||||
changeZoom()
|
||||
|
||||
$ControlPanel/ZoomLabel.modulate.a = lerp($ControlPanel/ZoomLabel.modulate.a,0.0,0.02)
|
||||
|
||||
func changeZoom():
|
||||
var newZoom = Vector2(1.0,1.0) / camera.zoom
|
||||
controlPanel.scale = newZoom
|
||||
tutorial.scale = newZoom
|
||||
editControls.scale = newZoom
|
||||
viewerArrows.scale = newZoom
|
||||
lines.scale = newZoom
|
||||
pushUpdates.scale = newZoom
|
||||
Global.mouse.scale = newZoom
|
||||
|
||||
$ControlPanel/ZoomLabel.modulate.a = 6.0
|
||||
$ControlPanel/ZoomLabel.text = "Zoom : " + str(scaleOverall) + "%"
|
||||
|
||||
Global.pushUpdate("Set zoom to " + str(scaleOverall) + "%")
|
||||
onWindowSizeChange()
|
||||
|
||||
#When the user speaks!
|
||||
func onSpeak():
|
||||
if origin.get_parent().position.y > -16:
|
||||
yVel = bounceSlider * -1
|
||||
|
||||
#Swaps between edit mode and view mode
|
||||
func swapMode():
|
||||
|
||||
Global.heldSprite = null
|
||||
|
||||
editMode = !editMode
|
||||
Global.pushUpdate("Toggled editing mode.")
|
||||
|
||||
get_viewport().transparent_bg = !editMode
|
||||
if Global.backgroundColor.a != 0.0:
|
||||
get_viewport().transparent_bg = false
|
||||
RenderingServer.set_default_clear_color(Global.backgroundColor)
|
||||
#processing
|
||||
editControls.set_process(editMode)
|
||||
controlPanel.set_process(!editMode)
|
||||
#visibility
|
||||
editControls.visible = editMode
|
||||
tutorial.visible = editMode
|
||||
controlPanel.visible = !editMode
|
||||
lines.visible = editMode
|
||||
spriteList.visible = editMode
|
||||
|
||||
#Adds sprite object to scene
|
||||
func add_image(path):
|
||||
|
||||
var rand = RandomNumberGenerator.new()
|
||||
var id = rand.randi()
|
||||
|
||||
var sprite = spriteObject.instantiate()
|
||||
sprite.path = path
|
||||
sprite.id = id
|
||||
origin.add_child(sprite)
|
||||
sprite.position = Vector2.ZERO
|
||||
|
||||
Global.spriteList.updateData()
|
||||
|
||||
Global.pushUpdate("Added new sprite.")
|
||||
|
||||
#Opens File Dialog
|
||||
func _on_add_button_pressed():
|
||||
fileDialog.visible = true
|
||||
|
||||
#Runs when selecting image in File Dialog
|
||||
func _on_file_dialog_file_selected(path):
|
||||
add_image(path)
|
||||
|
||||
func _on_save_button_pressed():
|
||||
$SaveDialog.visible = true
|
||||
|
||||
|
||||
func _on_load_button_pressed():
|
||||
$LoadDialog.visible = true
|
||||
|
||||
#LOAD AVATAR
|
||||
func _on_load_dialog_file_selected(path):
|
||||
var data = Saving.read_save(path)
|
||||
|
||||
if data == null:
|
||||
return
|
||||
|
||||
origin.queue_free()
|
||||
var new = Node2D.new()
|
||||
$OriginMotion.add_child(new)
|
||||
origin = new
|
||||
|
||||
for item in data:
|
||||
var sprite = spriteObject.instantiate()
|
||||
sprite.path = data[item]["path"]
|
||||
sprite.id = data[item]["identification"]
|
||||
sprite.parentId = data[item]["parentId"]
|
||||
|
||||
sprite.offset = str_to_var(data[item]["offset"])
|
||||
sprite.z = data[item]["zindex"]
|
||||
sprite.dragSpeed = data[item]["drag"]
|
||||
|
||||
sprite.xFrq = data[item]["xFrq"]
|
||||
sprite.xAmp = data[item]["xAmp"]
|
||||
sprite.yFrq = data[item]["yFrq"]
|
||||
sprite.yAmp = data[item]["yAmp"]
|
||||
|
||||
sprite.rdragStr = data[item]["rotDrag"]
|
||||
sprite.showOnTalk = data[item]["showTalk"]
|
||||
|
||||
sprite.showOnBlink = data[item]["showBlink"]
|
||||
|
||||
if data[item].has("rLimitMin"):
|
||||
sprite.rLimitMin = data[item]["rLimitMin"]
|
||||
if data[item].has("rLimitMax"):
|
||||
sprite.rLimitMax = data[item]["rLimitMax"]
|
||||
|
||||
if data[item].has("costumeLayers"):
|
||||
sprite.costumeLayers = str_to_var(data[item]["costumeLayers"]).duplicate()
|
||||
if sprite.costumeLayers.size() < 8:
|
||||
for i in range(5):
|
||||
sprite.costumeLayers.append(1)
|
||||
|
||||
if data[item].has("stretchAmount"):
|
||||
sprite.stretchAmount = data[item]["stretchAmount"]
|
||||
|
||||
if data[item].has("ignoreBounce"):
|
||||
sprite.ignoreBounce = data[item]["ignoreBounce"]
|
||||
|
||||
if data[item].has("frames"):
|
||||
sprite.frames = data[item]["frames"]
|
||||
if data[item].has("animSpeed"):
|
||||
sprite.animSpeed = data[item]["animSpeed"]
|
||||
if data[item].has("imageData"):
|
||||
sprite.loadedImageData = data[item]["imageData"]
|
||||
if data[item].has("clipped"):
|
||||
sprite.clipped = data[item]["clipped"]
|
||||
|
||||
origin.add_child(sprite)
|
||||
sprite.position = str_to_var(data[item]["pos"])
|
||||
|
||||
changeCostume(1)
|
||||
Saving.settings["lastAvatar"] = path
|
||||
Global.spriteList.updateData()
|
||||
|
||||
Global.pushUpdate("Loaded avatar at: " + path)
|
||||
|
||||
onWindowSizeChange()
|
||||
|
||||
#SAVE AVATAR
|
||||
func _on_save_dialog_file_selected(path):
|
||||
var data = {}
|
||||
var nodes = get_tree().get_nodes_in_group("saved")
|
||||
var id = 0
|
||||
for child in nodes:
|
||||
|
||||
if child.type == "sprite":
|
||||
data[id] = {}
|
||||
data[id]["type"] = "sprite"
|
||||
data[id]["path"] = child.path
|
||||
data[id]["imageData"] = Marshalls.raw_to_base64(child.imageData.save_png_to_buffer())
|
||||
data[id]["identification"] = child.id
|
||||
data[id]["parentId"] = child.parentId
|
||||
|
||||
data[id]["pos"] = var_to_str(child.position)
|
||||
data[id]["offset"] = var_to_str(child.offset)
|
||||
data[id]["zindex"] = child.z
|
||||
|
||||
data[id]["drag"] = child.dragSpeed
|
||||
|
||||
data[id]["xFrq"] = child.xFrq
|
||||
data[id]["xAmp"] = child.xAmp
|
||||
data[id]["yFrq"] = child.yFrq
|
||||
data[id]["yAmp"] = child.yAmp
|
||||
|
||||
data[id]["rotDrag"] = child.rdragStr
|
||||
|
||||
data[id]["showTalk"] = child.showOnTalk
|
||||
data[id]["showBlink"] = child.showOnBlink
|
||||
|
||||
data[id]["rLimitMin"] = child.rLimitMin
|
||||
data[id]["rLimitMax"] = child.rLimitMax
|
||||
|
||||
data[id]["costumeLayers"] = var_to_str(child.costumeLayers)
|
||||
|
||||
data[id]["stretchAmount"] = child.stretchAmount
|
||||
|
||||
data[id]["ignoreBounce"] = child.ignoreBounce
|
||||
|
||||
data[id]["frames"] = child.frames
|
||||
data[id]["animSpeed"] = child.animSpeed
|
||||
|
||||
data[id]["clipped"] = child.clipped
|
||||
|
||||
id += 1
|
||||
|
||||
Saving.settings["lastAvatar"] = path
|
||||
|
||||
Saving.data = data.duplicate()
|
||||
Saving.write_save(path)
|
||||
|
||||
Global.pushUpdate("Saved avatar at: " + path)
|
||||
|
||||
func _on_link_button_pressed():
|
||||
Global.reparentMode = true
|
||||
Global.chain.enable(Global.reparentMode)
|
||||
|
||||
Global.pushUpdate("Linking sprite...")
|
||||
|
||||
|
||||
func _on_kofi_pressed():
|
||||
OS.shell_open("https://ko-fi.com/kaiakairos")
|
||||
Global.pushUpdate("Support me on ko-fi!")
|
||||
|
||||
|
||||
func _on_twitter_pressed():
|
||||
OS.shell_open("https://twitter.com/kaiakairos")
|
||||
Global.pushUpdate("Follow me on twitter!")
|
||||
|
||||
|
||||
func _on_replace_button_pressed():
|
||||
if Global.heldSprite == null:
|
||||
return
|
||||
$ReplaceDialog.visible = true
|
||||
|
||||
func _on_replace_dialog_file_selected(path):
|
||||
Global.heldSprite.replaceSprite(path)
|
||||
Global.spriteList.updateData()
|
||||
Global.pushUpdate("Replacing sprite with: " + path)
|
||||
|
||||
func _on_replace_dialog_visibility_changed():
|
||||
$EditControls/ScreenCover/CollisionShape2D.disabled = !$ReplaceDialog.visible
|
||||
|
||||
|
||||
func _on_duplicate_button_pressed():
|
||||
if Global.heldSprite == null:
|
||||
return
|
||||
var rand = RandomNumberGenerator.new()
|
||||
var id = rand.randi()
|
||||
|
||||
var sprite = spriteObject.instantiate()
|
||||
sprite.path = Global.heldSprite.path
|
||||
sprite.id = id
|
||||
sprite.parentId = Global.heldSprite.parentId
|
||||
|
||||
sprite.dragSpeed = Global.heldSprite.dragSpeed
|
||||
sprite.showOnTalk = Global.heldSprite.showOnTalk
|
||||
sprite.showOnBlink = Global.heldSprite.showOnBlink
|
||||
sprite.z = Global.heldSprite.z
|
||||
|
||||
sprite.xFrq = Global.heldSprite.xFrq
|
||||
sprite.xAmp = Global.heldSprite.xAmp
|
||||
sprite.yFrq = Global.heldSprite.yFrq
|
||||
sprite.yAmp = Global.heldSprite.yAmp
|
||||
|
||||
sprite.rdragStr = Global.heldSprite.rdragStr
|
||||
|
||||
sprite.offset = Global.heldSprite.offset
|
||||
|
||||
sprite.rLimitMin = Global.heldSprite.rLimitMin
|
||||
sprite.rLimitMax = Global.heldSprite.rLimitMax
|
||||
|
||||
sprite.frames = Global.heldSprite.frames
|
||||
sprite.animSpeed = Global.heldSprite.animSpeed
|
||||
|
||||
sprite.costumeLayers = Global.heldSprite.costumeLayers
|
||||
|
||||
origin.add_child(sprite)
|
||||
sprite.position = Global.heldSprite.position + Vector2(16,16)
|
||||
|
||||
Global.heldSprite = sprite
|
||||
|
||||
Global.spriteList.updateData()
|
||||
|
||||
Global.pushUpdate("Duplicated sprite.")
|
||||
|
||||
func changeCostumeStreamDeck(id: String):
|
||||
match id:
|
||||
"1":changeCostume(1)
|
||||
"2":changeCostume(2)
|
||||
"3":changeCostume(3)
|
||||
"4":changeCostume(4)
|
||||
"5":changeCostume(5)
|
||||
"6":changeCostume(6)
|
||||
"7":changeCostume(7)
|
||||
"8":changeCostume(8)
|
||||
"9":changeCostume(9)
|
||||
"10":changeCostume(10)
|
||||
|
||||
func changeCostume(newCostume):
|
||||
costume = newCostume
|
||||
Global.heldSprite = null
|
||||
var nodes = get_tree().get_nodes_in_group("saved")
|
||||
for sprite in nodes:
|
||||
if sprite.costumeLayers[newCostume-1] == 1:
|
||||
sprite.visible = true
|
||||
sprite.changeCollision(true)
|
||||
else:
|
||||
sprite.visible = false
|
||||
sprite.changeCollision(false)
|
||||
Global.spriteEdit.layerSelected()
|
||||
spriteList.updateAllVisible()
|
||||
|
||||
if bounceOnCostumeChange:
|
||||
onSpeak()
|
||||
|
||||
Global.pushUpdate("Change costume: " + str(newCostume))
|
||||
|
||||
func moveSpriteMenu(delta):
|
||||
|
||||
#moves sprite viewer editor thing around
|
||||
|
||||
var size = get_viewport().get_visible_rect().size
|
||||
|
||||
var windowLength = 1187
|
||||
|
||||
$ViewerArrows/Arrows.position.y = size.y - 25
|
||||
|
||||
if !Global.spriteEdit.visible:
|
||||
$ViewerArrows/Arrows.visible = false
|
||||
$ViewerArrows/Arrows2.visible = false
|
||||
return
|
||||
|
||||
if size.y > windowLength+50:
|
||||
Global.spriteEdit.position.y = 66
|
||||
|
||||
$ViewerArrows/Arrows.visible = false
|
||||
$ViewerArrows/Arrows2.visible = false
|
||||
|
||||
return
|
||||
|
||||
if Global.spriteEdit.position.y < 16:
|
||||
$ViewerArrows/Arrows2.visible = true
|
||||
else:
|
||||
$ViewerArrows/Arrows2.visible = false
|
||||
if Global.spriteEdit.position.y > size.y-windowLength+2:
|
||||
$ViewerArrows/Arrows.visible = true
|
||||
else:
|
||||
$ViewerArrows/Arrows.visible = false
|
||||
|
||||
|
||||
if $EditControls/MoveMenuUp.overlaps_area(Global.mouse.area):
|
||||
Global.spriteEdit.position.y += (delta*432.0)
|
||||
elif $EditControls/MoveMenuDown.overlaps_area(Global.mouse.area):
|
||||
Global.spriteEdit.position.y -= (delta*432.0)
|
||||
|
||||
if Global.spriteEdit.position.y > 66:
|
||||
Global.spriteEdit.position.y = 66
|
||||
elif Global.spriteEdit.position.y < size.y-windowLength:
|
||||
Global.spriteEdit.position.y = size.y-windowLength
|
||||
|
||||
|
||||
|
||||
#UNAMED BUT THIS IS THE MICROPHONE MENU BUTTON
|
||||
func _on_button_pressed():
|
||||
$ControlPanel/MicInputSelect.visible = !$ControlPanel/MicInputSelect.visible
|
||||
settingsMenu.visible = false
|
||||
|
||||
|
||||
func _on_settings_buttons_pressed():
|
||||
settingsMenu.visible = !settingsMenu.visible
|
||||
|
||||
|
||||
func _on_background_input_capture_bg_key_pressed(node, keys_pressed):
|
||||
var keyStrings = []
|
||||
|
||||
for i in keys_pressed:
|
||||
if keys_pressed[i]:
|
||||
keyStrings.append(OS.get_keycode_string(i) if !OS.get_keycode_string(i).strip_edges().is_empty() else "Keycode" + str(i))
|
||||
|
||||
if fileSystemOpen:
|
||||
return
|
||||
|
||||
if keyStrings.size() <= 0:
|
||||
emit_signal("emptiedCapture")
|
||||
return
|
||||
|
||||
if settingsMenu.awaitingCostumeInput >= 0:
|
||||
|
||||
if keyStrings[0] == "Keycode1":
|
||||
if !settingsMenu.hasMouse:
|
||||
emit_signal("pressedKey")
|
||||
return
|
||||
|
||||
var currentButton = costumeKeys[settingsMenu.awaitingCostumeInput]
|
||||
costumeKeys[settingsMenu.awaitingCostumeInput] = keyStrings[0]
|
||||
Saving.settings["costumeKeys"] = costumeKeys
|
||||
Global.pushUpdate("Changed costume " + str(settingsMenu.awaitingCostumeInput+1) + " hotkey from \"" + currentButton + "\" to \"" + keyStrings[0] + "\"")
|
||||
emit_signal("pressedKey")
|
||||
|
||||
for key in keyStrings:
|
||||
var i = costumeKeys.find(key)
|
||||
if i >= 0:
|
||||
changeCostume(i+1)
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
extends Node2D
|
||||
|
||||
@onready var h = $h
|
||||
@onready var v = $v
|
||||
|
||||
func drawLine():
|
||||
var s = get_viewport().get_visible_rect().size
|
||||
v.clear_points()
|
||||
v.add_point(Vector2(0,-s.y))
|
||||
v.add_point(Vector2(0,s.y))
|
||||
|
||||
h.clear_points()
|
||||
h.add_point(Vector2(-s.x,0))
|
||||
h.add_point(Vector2(s.x,0))
|
|
@ -0,0 +1,150 @@
|
|||
; Engine configuration file.
|
||||
; It's best edited using the editor UI and not directly,
|
||||
; since the parameters that go here are not all obvious.
|
||||
;
|
||||
; Format:
|
||||
; [section] ; section goes between []
|
||||
; param=value ; assign values to parameters
|
||||
|
||||
config_version=5
|
||||
|
||||
[application]
|
||||
|
||||
config/name="PNGTuberPlus"
|
||||
run/main_scene="res://main_scenes/main.tscn"
|
||||
config/features=PackedStringArray("4.1", "GL Compatibility")
|
||||
run/max_fps=60
|
||||
boot_splash/bg_color=Color(0.0313726, 0.0313726, 0.0313726, 1)
|
||||
boot_splash/image="res://splash.png"
|
||||
boot_splash/fullsize=false
|
||||
boot_splash/use_filter=false
|
||||
config/icon="res://icon.png"
|
||||
|
||||
[audio]
|
||||
|
||||
driver/enable_input=true
|
||||
|
||||
[autoload]
|
||||
|
||||
Saving="*res://autoload/saving.gd"
|
||||
Global="*res://autoload/global.gd"
|
||||
ElgatoStreamDeck="*res://addons/godot-streamdeck-addon/singleton.gd"
|
||||
DefaultAvatarData="*res://autoload/defaultAvatarData.gd"
|
||||
|
||||
[debug]
|
||||
|
||||
gdscript/warnings/unused_parameter=0
|
||||
|
||||
[display]
|
||||
|
||||
window/size/viewport_width=1280
|
||||
window/size/viewport_height=720
|
||||
window/size/transparent=true
|
||||
window/per_pixel_transparency/allowed=true
|
||||
window/vsync/vsync_mode=0
|
||||
|
||||
[dotnet]
|
||||
|
||||
project/assembly_name="PNGTuberPlus"
|
||||
|
||||
[editor]
|
||||
|
||||
version_control/plugin_name="GitPlugin"
|
||||
version_control/autoload_on_startup=true
|
||||
|
||||
[editor_plugins]
|
||||
|
||||
enabled=PackedStringArray("res://addons/godot-streamdeck-addon/plugin.cfg")
|
||||
|
||||
[input]
|
||||
|
||||
mouse_left={
|
||||
"deadzone": 0.5,
|
||||
"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":1,"canceled":false,"pressed":false,"double_click":false,"script":null)
|
||||
]
|
||||
}
|
||||
origin={
|
||||
"deadzone": 0.5,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":79,"key_label":0,"unicode":111,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
move_up={
|
||||
"deadzone": 0.5,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":87,"key_label":0,"unicode":119,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
move_left={
|
||||
"deadzone": 0.5,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":65,"key_label":0,"unicode":97,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
move_right={
|
||||
"deadzone": 0.5,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":68,"key_label":0,"unicode":100,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
move_down={
|
||||
"deadzone": 0.5,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":83,"key_label":0,"unicode":115,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
reparent={
|
||||
"deadzone": 0.5,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":80,"key_label":0,"unicode":112,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
zDown={
|
||||
"deadzone": 0.5,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":81,"key_label":0,"unicode":113,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
zUp={
|
||||
"deadzone": 0.5,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":69,"key_label":0,"unicode":101,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
openFolder={
|
||||
"deadzone": 0.5,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194305,"key_label":0,"unicode":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
scrollUp={
|
||||
"deadzone": 0.5,
|
||||
"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":4,"canceled":false,"pressed":false,"double_click":false,"script":null)
|
||||
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194320,"key_label":0,"unicode":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
scrollDown={
|
||||
"deadzone": 0.5,
|
||||
"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":5,"canceled":false,"pressed":false,"double_click":false,"script":null)
|
||||
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194322,"key_label":0,"unicode":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
refresh={
|
||||
"deadzone": 0.5,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":82,"key_label":0,"unicode":114,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
unlink={
|
||||
"deadzone": 0.5,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":85,"key_label":0,"unicode":117,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
control={
|
||||
"deadzone": 0.5,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194326,"key_label":0,"unicode":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
saveImages={
|
||||
"deadzone": 0.5,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":76,"key_label":0,"unicode":108,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
|
||||
[rendering]
|
||||
|
||||
textures/canvas_textures/default_texture_filter=0
|
||||
textures/canvas_textures/default_texture_repeat=1
|
||||
renderer/rendering_method="gl_compatibility"
|
||||
renderer/rendering_method.mobile="gl_compatibility"
|
||||
environment/defaults/default_clear_color=Color(0.376471, 0.376471, 0.376471, 1)
|
|
@ -0,0 +1,11 @@
|
|||
shader_type canvas_item;
|
||||
|
||||
uniform sampler2D noise_texture:repeat_enable;
|
||||
uniform float distortion_strengh: hint_range(0, 0.1) = 1.0;
|
||||
uniform float speed: hint_range(0.1, 10) = 1.0;
|
||||
|
||||
void fragment() {
|
||||
vec4 noise_pixel = texture(noise_texture, UV + floor(TIME*speed)/3.0);
|
||||
vec2 uv_offset = (noise_pixel.rg * 2.0 - 1.0) * distortion_strengh;
|
||||
COLOR = texture(TEXTURE, UV + uv_offset);
|
||||
}
|
After Width: | Height: | Size: 793 B |
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://fbd6lye4drsy"
|
||||
path="res://.godot/imported/splash.png-929ed8a00b89ba36c51789452f874c77.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://splash.png"
|
||||
dest_files=["res://.godot/imported/splash.png-929ed8a00b89ba36c51789452f874c77.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
After Width: | Height: | Size: 1.2 KiB |
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dq837ls2kiahp"
|
||||
path="res://.godot/imported/Sprite-0001.png-288a5a360e6243176c931d64aeb64a51.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://test/Sprite-0001.png"
|
||||
dest_files=["res://.godot/imported/Sprite-0001.png-288a5a360e6243176c931d64aeb64a51.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
After Width: | Height: | Size: 2.0 KiB |
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cd1nle3uo2hgv"
|
||||
path="res://.godot/imported/Sprite-0002.png-44a3947905db447766957a7ed13bc868.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://test/Sprite-0002.png"
|
||||
dest_files=["res://.godot/imported/Sprite-0002.png-44a3947905db447766957a7ed13bc868.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
After Width: | Height: | Size: 365 B |
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://gw3r4dno1vmt"
|
||||
path="res://.godot/imported/line.png-e6919bfefa2d351d67eca50c945bf0f4.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://test/line.png"
|
||||
dest_files=["res://.godot/imported/line.png-e6919bfefa2d351d67eca50c945bf0f4.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
After Width: | Height: | Size: 990 B |
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dfghbqnl8a62n"
|
||||
path="res://.godot/imported/testBody.png-d4fd852332093ed7032c65478a334eaa.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://test/testBody.png"
|
||||
dest_files=["res://.godot/imported/testBody.png-d4fd852332093ed7032c65478a334eaa.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
After Width: | Height: | Size: 1.6 KiB |
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cgfxeysr8lvix"
|
||||
path="res://.godot/imported/testHead1.png-c2e8ddcf4f84e7fd7bc874494e0306de.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://test/testHead1.png"
|
||||
dest_files=["res://.godot/imported/testHead1.png-c2e8ddcf4f84e7fd7bc874494e0306de.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
After Width: | Height: | Size: 1.7 KiB |
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dc56e3if2ojsg"
|
||||
path="res://.godot/imported/testHead2.png-0ca5d9b3f241d6e0c571075aa46c47bc.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://test/testHead2.png"
|
||||
dest_files=["res://.godot/imported/testHead2.png-0ca5d9b3f241d6e0c571075aa46c47bc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
|
@ -0,0 +1,5 @@
|
|||
extends TextureProgressBar
|
||||
|
||||
|
||||
func _process(delta):
|
||||
value = Global.volume
|
After Width: | Height: | Size: 361 B |
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://xxhqegm7rq6n"
|
||||
path="res://.godot/imported/add.png-a96d2ebf66567409af9823c7762836b5.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://ui_scenes/button sprites/add.png"
|
||||
dest_files=["res://.godot/imported/add.png-a96d2ebf66567409af9823c7762836b5.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=0
|
||||
compress/normal_map=2
|
||||
compress/channel_pack=1
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=0
|
After Width: | Height: | Size: 213 B |
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://clarf70be0y3j"
|
||||
path="res://.godot/imported/button.png-4ed9f61c3161d9d75e8c2e8cfb2ab720.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://ui_scenes/button sprites/button.png"
|
||||
dest_files=["res://.godot/imported/button.png-4ed9f61c3161d9d75e8c2e8cfb2ab720.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
After Width: | Height: | Size: 3.0 KiB |
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://goff8ioh380e"
|
||||
path="res://.godot/imported/buttonBack.png-d5bbf4150b7e8db325429c7cce0515c0.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://ui_scenes/button sprites/buttonBack.png"
|
||||
dest_files=["res://.godot/imported/buttonBack.png-d5bbf4150b7e8db325429c7cce0515c0.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
After Width: | Height: | Size: 4.5 KiB |
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bs2c34vipucwm"
|
||||
path="res://.godot/imported/duplicate.png-835d2058d83cbbe21e0c2f26998f9912.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://ui_scenes/button sprites/duplicate.png"
|
||||
dest_files=["res://.godot/imported/duplicate.png-835d2058d83cbbe21e0c2f26998f9912.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
After Width: | Height: | Size: 419 B |
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dkvpm0tfnewo7"
|
||||
path="res://.godot/imported/edit.png-6f01984962a518eef5e6f7a90ee9b879.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://ui_scenes/button sprites/edit.png"
|
||||
dest_files=["res://.godot/imported/edit.png-6f01984962a518eef5e6f7a90ee9b879.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
After Width: | Height: | Size: 427 B |
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://c5jh6c65tusu5"
|
||||
path="res://.godot/imported/exit.png-5b4951474a2f017ad82fdc4a84cffa01.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://ui_scenes/button sprites/exit.png"
|
||||
dest_files=["res://.godot/imported/exit.png-5b4951474a2f017ad82fdc4a84cffa01.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
After Width: | Height: | Size: 30 KiB |
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://da4jthat2oas4"
|
||||
path="res://.godot/imported/fancy.png-2199986caacc7dc162b3e9646e986dad.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://ui_scenes/button sprites/fancy.png"
|
||||
dest_files=["res://.godot/imported/fancy.png-2199986caacc7dc162b3e9646e986dad.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
After Width: | Height: | Size: 472 B |
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bbkvrk3fntaj1"
|
||||
path="res://.godot/imported/link.png-20345aa1214cc9819bf248a140a6c37a.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://ui_scenes/button sprites/link.png"
|
||||
dest_files=["res://.godot/imported/link.png-20345aa1214cc9819bf248a140a6c37a.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
After Width: | Height: | Size: 12 KiB |
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dcsvrpj5f5bfv"
|
||||
path="res://.godot/imported/links.png-8661ed7da679eb37ec65406284435b63.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://ui_scenes/button sprites/links.png"
|
||||
dest_files=["res://.godot/imported/links.png-8661ed7da679eb37ec65406284435b63.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
After Width: | Height: | Size: 267 B |
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://spe6dnii3msy"
|
||||
path="res://.godot/imported/load.png-81254b42cc2b78f8208070b9c120e02c.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://ui_scenes/button sprites/load.png"
|
||||
dest_files=["res://.godot/imported/load.png-81254b42cc2b78f8208070b9c120e02c.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
After Width: | Height: | Size: 327 B |
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://7jjnsor4vat2"
|
||||
path="res://.godot/imported/save.png-de94af95d58599e821f85b5e97f537f3.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://ui_scenes/button sprites/save.png"
|
||||
dest_files=["res://.godot/imported/save.png-de94af95d58599e821f85b5e97f537f3.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
After Width: | Height: | Size: 397 B |
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bgo8xod6ma5s8"
|
||||
path="res://.godot/imported/setting.png-9fa533ab246cef07d9efa0670bb13e58.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://ui_scenes/button sprites/setting.png"
|
||||
dest_files=["res://.godot/imported/setting.png-9fa533ab246cef07d9efa0670bb13e58.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
After Width: | Height: | Size: 1.0 KiB |
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://djf1mbv36vr68"
|
||||
path="res://.godot/imported/micButtong.png-15ddc94949ace3b271af08acc8cbb2a9.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://ui_scenes/microphoneSelect/micButtong.png"
|
||||
dest_files=["res://.godot/imported/micButtong.png-15ddc94949ace3b271af08acc8cbb2a9.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
|
@ -0,0 +1,23 @@
|
|||
extends Control
|
||||
|
||||
var micName = ""
|
||||
|
||||
func _ready():
|
||||
$Label.text = micName
|
||||
|
||||
|
||||
func _on_button_pressed():
|
||||
|
||||
if !get_parent().get_parent().get_parent().visible:
|
||||
return
|
||||
|
||||
AudioServer.input_device = micName
|
||||
Global.deleteAllMics()
|
||||
Global.currentMicrophone = null
|
||||
|
||||
get_parent().get_parent().get_parent().visible = false
|
||||
|
||||
await get_tree().create_timer(1.0).timeout
|
||||
Global.createMicrophone()
|
||||
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
extends Node2D
|
||||
|
||||
var text = ""
|
||||
|
||||
@onready var label = $Tooltip/Label
|
||||
@onready var area = $Area2D
|
||||
|
||||
func _ready():
|
||||
Global.mouse = self
|
||||
|
||||
func _process(delta):
|
||||
if Global.main.editMode:
|
||||
if text != "":
|
||||
label.text = text
|
||||
visible = true
|
||||
else:
|
||||
visible = false
|
||||
global_position = get_global_mouse_position()
|
||||
if Input.is_action_just_pressed("mouse_left"):
|
||||
Global.select(area.get_overlapping_areas())
|
||||
else:
|
||||
visible = false
|
||||
|
||||
text = ""
|
|
@ -0,0 +1,45 @@
|
|||
[gd_scene load_steps=6 format=3 uid="uid://fxku5nddarp8"]
|
||||
|
||||
[ext_resource type="Script" path="res://ui_scenes/mouse/mouse_cursor.gd" id="1_t6obd"]
|
||||
[ext_resource type="Texture2D" uid="uid://23rqddatjku3" path="res://ui_scenes/mouse/tooltipBox.png" id="2_qcn8h"]
|
||||
[ext_resource type="FontFile" uid="uid://ukj8gv8ucqsg" path="res://font/goober_pixel.ttf" id="3_v627m"]
|
||||
|
||||
[sub_resource type="CircleShape2D" id="CircleShape2D_y1fm1"]
|
||||
radius = 1.0
|
||||
|
||||
[sub_resource type="LabelSettings" id="LabelSettings_a4hxj"]
|
||||
font = ExtResource("3_v627m")
|
||||
font_size = 31
|
||||
|
||||
[node name="MouseCursor" type="Node2D"]
|
||||
script = ExtResource("1_t6obd")
|
||||
|
||||
[node name="Area2D" type="Area2D" parent="."]
|
||||
collision_layer = 2048
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D"]
|
||||
shape = SubResource("CircleShape2D_y1fm1")
|
||||
|
||||
[node name="Tooltip" type="Node2D" parent="."]
|
||||
z_index = 4096
|
||||
position = Vector2(-24, 46)
|
||||
|
||||
[node name="NinePatchRect" type="NinePatchRect" parent="Tooltip"]
|
||||
offset_left = 9.0
|
||||
offset_top = -4.0
|
||||
offset_right = 168.0
|
||||
offset_bottom = 48.0
|
||||
texture = ExtResource("2_qcn8h")
|
||||
region_rect = Rect2(0, 0, 48, 48)
|
||||
patch_margin_left = 8
|
||||
patch_margin_top = 8
|
||||
patch_margin_right = 8
|
||||
patch_margin_bottom = 8
|
||||
|
||||
[node name="Label" type="Label" parent="Tooltip"]
|
||||
offset_left = 7.0
|
||||
offset_top = 7.0
|
||||
offset_right = 173.0
|
||||
offset_bottom = 41.0
|
||||
label_settings = SubResource("LabelSettings_a4hxj")
|
||||
horizontal_alignment = 1
|
After Width: | Height: | Size: 210 B |
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://23rqddatjku3"
|
||||
path="res://.godot/imported/tooltipBox.png-fbd17edca11f36259ef2d1e9921dc393.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://ui_scenes/mouse/tooltipBox.png"
|
||||
dest_files=["res://.godot/imported/tooltipBox.png-fbd17edca11f36259ef2d1e9921dc393.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
|
@ -0,0 +1,39 @@
|
|||
extends Node2D
|
||||
|
||||
@onready var vbox = $VBoxContainer
|
||||
|
||||
var tick = 0
|
||||
|
||||
func _ready():
|
||||
Global.updatePusherNode = self
|
||||
set_process(false)
|
||||
|
||||
func pushUpdate(text):
|
||||
var label = Label.new()
|
||||
label.text = text
|
||||
label.add_theme_color_override("font_outline_color",Color.BLACK)
|
||||
label.add_theme_constant_override("outline_size",6)
|
||||
vbox.add_child(label)
|
||||
|
||||
var count = vbox.get_children().size()
|
||||
if count > 5:
|
||||
vbox.get_child(0).queue_free()
|
||||
|
||||
|
||||
modulate.a = 1.0
|
||||
tick = 0
|
||||
set_process(true)
|
||||
|
||||
|
||||
|
||||
func _process(delta):
|
||||
tick += 1
|
||||
if tick >= 240:
|
||||
modulate.a -= delta
|
||||
if modulate.a <= 0.0:
|
||||
|
||||
for child in vbox.get_children():
|
||||
child.queue_free()
|
||||
|
||||
set_process(false)
|
||||
|