Add checkbox for midi wobble.
This commit is contained in:
parent
ab9dfe47cb
commit
67eb441484
7 changed files with 586 additions and 392 deletions
|
@ -20,7 +20,7 @@ var i = 0
|
|||
var reparentMode = false
|
||||
var scrollSelection = 0
|
||||
|
||||
var backgroundColor = Color(0.0,0.0,0.0,0.0)
|
||||
var backgroundColor = Color(0.0, 0.0, 0.0, 0.0)
|
||||
|
||||
#Blink
|
||||
var blinkSpeed = 1.0
|
||||
|
@ -50,19 +50,21 @@ 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()
|
||||
|
@ -79,6 +81,7 @@ func createMicrophone():
|
|||
await get_tree().create_timer(0.25).timeout
|
||||
createMicrophone()
|
||||
|
||||
|
||||
func deleteAllMics():
|
||||
for child in get_children():
|
||||
child.queue_free()
|
||||
|
@ -86,23 +89,23 @@ func deleteAllMics():
|
|||
|
||||
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 = 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
|
||||
|
@ -116,180 +119,178 @@ func _process(delta):
|
|||
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 + "\"" + ".")
|
||||
|
||||
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)
|
||||
|
||||
linkSprite(prevSpr, heldSprite)
|
||||
Global.chain.enable(reparentMode)
|
||||
|
||||
|
||||
lastArray = areas.duplicate()
|
||||
|
||||
|
||||
spriteEdit.setImage()
|
||||
|
||||
func linkSprite(sprite,newParent):
|
||||
|
||||
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.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)
|
||||
|
||||
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 + "\".")
|
||||
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
|
||||
scroll -= 1
|
||||
if Input.is_action_just_pressed("scrollDown"):
|
||||
scroll+=1
|
||||
|
||||
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 + "\"" + ".")
|
||||
|
||||
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:
|
||||
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:
|
||||
|
@ -306,11 +307,12 @@ func epicFail(err):
|
|||
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:
|
||||
|
@ -319,39 +321,42 @@ func refresh():
|
|||
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))
|
||||
|
||||
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))
|
||||
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)
|
||||
|
|
|
@ -4,63 +4,202 @@ 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 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",
|
||||
"useMidiWobble": false,
|
||||
"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",
|
||||
"useMidiWobble": false,
|
||||
"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",
|
||||
"useMidiWobble": false,
|
||||
"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",
|
||||
"useMidiWobble": false,
|
||||
"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",
|
||||
"useMidiWobble": false,
|
||||
"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",
|
||||
"useMidiWobble": false,
|
||||
"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",
|
||||
"useMidiWobble": false,
|
||||
"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",
|
||||
"useMidiWobble": false,
|
||||
"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",
|
||||
"useMidiWobble": false,
|
||||
"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,
|
||||
"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:
|
||||
|
@ -68,19 +207,18 @@ func _ready():
|
|||
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'):
|
||||
|
||||
if OS.has_feature("web"):
|
||||
var JSONstr = JavaScriptBridge.eval("window.localStorage.getItem('" + key + "');")
|
||||
if (JSONstr):
|
||||
if JSONstr:
|
||||
return JSON.parse_string(JSONstr)
|
||||
else:
|
||||
return null
|
||||
|
@ -92,14 +230,18 @@ func read_save(path):
|
|||
file.close()
|
||||
return newData
|
||||
|
||||
|
||||
func write_save(path):
|
||||
if OS.has_feature('web'):
|
||||
JavaScriptBridge.eval("window.localStorage.setItem('" + key + "', '" + JSON.stringify(data) + "');")
|
||||
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))
|
||||
|
@ -107,10 +249,9 @@ func write_settings(path):
|
|||
|
||||
|
||||
func clearSave():
|
||||
|
||||
if OS.has_feature('web'):
|
||||
if OS.has_feature("web"):
|
||||
var JSONstr = JavaScriptBridge.eval("window.localStorage.getItem('" + key + "');")
|
||||
if (JSONstr):
|
||||
if JSONstr:
|
||||
JavaScriptBridge.eval("window.localStorage.removeItem('" + key + "');")
|
||||
else:
|
||||
return null
|
||||
|
@ -122,15 +263,17 @@ func clearSave():
|
|||
var dir = DirAccess.open("user://")
|
||||
dir.remove(key + ".save")
|
||||
data = {}
|
||||
|
||||
|
||||
|
||||
func open_site(url):
|
||||
if OS.has_feature('web'):
|
||||
JavaScriptBridge.eval("window.open(\"" + 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\");")
|
||||
if OS.has_feature("web"):
|
||||
JavaScriptBridge.eval('window.open("' + url + '", "_parent");')
|
||||
else:
|
||||
print("Could not switch to site " + url + " without an HTML5 build")
|
||||
|
|
|
@ -64,7 +64,7 @@ func _ready():
|
|||
ElgatoStreamDeck.on_key_down.connect(changeCostumeStreamDeck)
|
||||
|
||||
OS.open_midi_inputs()
|
||||
print(OS.get_connected_midi_inputs())
|
||||
# print(OS.get_connected_midi_inputs())
|
||||
|
||||
if Saving.settings["newUser"]:
|
||||
_on_load_dialog_file_selected("default")
|
||||
|
@ -332,6 +332,7 @@ func _on_load_dialog_file_selected(path):
|
|||
sprite.z = data[item]["zindex"]
|
||||
sprite.dragSpeed = data[item]["drag"]
|
||||
|
||||
sprite.useMidiWobble = data[item]["useMidiWobble"]
|
||||
sprite.xFrq = data[item]["xFrq"]
|
||||
sprite.xAmp = data[item]["xAmp"]
|
||||
sprite.yFrq = data[item]["yFrq"]
|
||||
|
@ -402,6 +403,7 @@ func _on_save_dialog_file_selected(path):
|
|||
|
||||
data[id]["drag"] = child.dragSpeed
|
||||
|
||||
data[id]["useMidiWobble"] = child.useMidiWobble
|
||||
data[id]["xFrq"] = child.xFrq
|
||||
data[id]["xAmp"] = child.xAmp
|
||||
data[id]["yFrq"] = child.yFrq
|
||||
|
@ -487,6 +489,7 @@ func _on_duplicate_button_pressed():
|
|||
sprite.showOnBlink = Global.heldSprite.showOnBlink
|
||||
sprite.z = Global.heldSprite.z
|
||||
|
||||
sprite.useMidiWobble = Global.heldSprite.useMidiWobble
|
||||
sprite.xFrq = Global.heldSprite.xFrq
|
||||
sprite.xAmp = Global.heldSprite.xAmp
|
||||
sprite.yFrq = Global.heldSprite.yFrq
|
||||
|
@ -563,7 +566,7 @@ func moveSpriteMenu(delta):
|
|||
|
||||
var size = get_viewport().get_visible_rect().size
|
||||
|
||||
var windowLength = 1250 #1187
|
||||
var windowLength = 1300 #1187
|
||||
|
||||
$ViewerArrows/Arrows.position.y = size.y - 25
|
||||
|
||||
|
@ -611,7 +614,6 @@ func _on_settings_buttons_pressed():
|
|||
|
||||
|
||||
func _on_background_input_capture_bg_key_pressed(node, keys_pressed):
|
||||
print("background key pressed")
|
||||
var keyStrings = []
|
||||
|
||||
for i in keys_pressed:
|
||||
|
@ -660,7 +662,6 @@ func _on_background_input_capture_bg_key_pressed(node, keys_pressed):
|
|||
|
||||
|
||||
func bgInputSprite(node, keys_pressed):
|
||||
print("bgInputSprite")
|
||||
if fileSystemOpen:
|
||||
return
|
||||
var keyStrings = []
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -48,8 +48,7 @@ var origTick = 0
|
|||
var offset = Vector2.ZERO
|
||||
|
||||
#Wobble
|
||||
var use_midi_wobble = true # TODO: Add to settings
|
||||
|
||||
var useMidiWobble = false
|
||||
var xFrq = 0.0
|
||||
var xAmp = 0.0
|
||||
|
||||
|
@ -163,7 +162,7 @@ func _ready():
|
|||
|
||||
|
||||
func _input(event):
|
||||
if use_midi_wobble and event is InputEventMIDI:
|
||||
if self.useMidiWobble and event is InputEventMIDI:
|
||||
match event.message:
|
||||
MIDIMessage.MIDI_MESSAGE_START:
|
||||
tick = 0
|
||||
|
@ -222,7 +221,7 @@ func replaceSprite(pathNew):
|
|||
|
||||
|
||||
func _process(delta):
|
||||
if not use_midi_wobble:
|
||||
if not self.useMidiWobble:
|
||||
tick += 1
|
||||
|
||||
if Global.heldSprite == self:
|
||||
|
@ -345,7 +344,7 @@ func drag(delta):
|
|||
|
||||
|
||||
func wobble():
|
||||
if use_midi_wobble:
|
||||
if self.useMidiWobble:
|
||||
midi_wobble()
|
||||
else:
|
||||
free_wobble()
|
||||
|
|
|
@ -7,110 +7,118 @@ extends Node2D
|
|||
|
||||
@onready var spriteRotDisplay = $RotationalLimits/RotBack/SpriteDisplay
|
||||
|
||||
|
||||
@onready var coverCollider = $Area2D/CollisionShape2D
|
||||
|
||||
|
||||
func _ready():
|
||||
Global.spriteEdit = self
|
||||
|
||||
|
||||
|
||||
func setImage():
|
||||
if Global.heldSprite == null:
|
||||
return
|
||||
|
||||
|
||||
spriteSpin.texture = Global.heldSprite.tex
|
||||
spriteSpin.pixel_size = 1.5 / Global.heldSprite.imageData.get_size().y
|
||||
spriteSpin.hframes = Global.heldSprite.frames
|
||||
|
||||
|
||||
spriteRotDisplay.texture = Global.heldSprite.tex
|
||||
spriteRotDisplay.offset = Global.heldSprite.offset
|
||||
var displaySize = Global.heldSprite.imageData.get_size().y
|
||||
spriteRotDisplay.scale = Vector2(1,1) * (150.0/displaySize)
|
||||
|
||||
spriteRotDisplay.scale = Vector2(1, 1) * (150.0 / displaySize)
|
||||
|
||||
$Slider/Label.text = "drag: " + str(Global.heldSprite.dragSpeed)
|
||||
$Slider/DragSlider.value = Global.heldSprite.dragSpeed
|
||||
|
||||
|
||||
$WobbleControl/UseMidi.button_pressed = Global.heldSprite.useMidiWobble
|
||||
|
||||
$WobbleControl/xFrqLabel.text = "x frequency: " + str(Global.heldSprite.xFrq)
|
||||
$WobbleControl/xAmpLabel.text = "x amplitude: " + str(Global.heldSprite.xAmp)
|
||||
|
||||
|
||||
$WobbleControl/xFrq.value = Global.heldSprite.xFrq
|
||||
$WobbleControl/xAmp.value = Global.heldSprite.xAmp
|
||||
|
||||
|
||||
$WobbleControl/yFrqLabel.text = "y frequency: " + str(Global.heldSprite.yFrq)
|
||||
$WobbleControl/yAmpLabel.text = "y amplitude: " + str(Global.heldSprite.yAmp)
|
||||
|
||||
|
||||
$WobbleControl/yFrq.value = Global.heldSprite.yFrq
|
||||
$WobbleControl/yAmp.value = Global.heldSprite.yAmp
|
||||
|
||||
|
||||
$Rotation/rDragLabel.text = "rotational drag: " + str(Global.heldSprite.rdragStr)
|
||||
$Rotation/rDrag.value = Global.heldSprite.rdragStr
|
||||
|
||||
|
||||
$Buttons/Speaking.frame = Global.heldSprite.showOnTalk
|
||||
$Buttons/Blinking.frame = Global.heldSprite.showOnBlink
|
||||
|
||||
|
||||
$RotationalLimits/rotLimitMin.value = Global.heldSprite.rLimitMin
|
||||
$RotationalLimits/RotLimitMin.text = "rotational limit min: " + str(Global.heldSprite.rLimitMin)
|
||||
$RotationalLimits/rotLimitMax.value = Global.heldSprite.rLimitMax
|
||||
$RotationalLimits/RotLimitMax.text = "rotational limit max: " + str(Global.heldSprite.rLimitMax)
|
||||
|
||||
|
||||
$Rotation/squashlabel.text = "squash: " + str(Global.heldSprite.stretchAmount)
|
||||
$Rotation/squash.value = Global.heldSprite.stretchAmount
|
||||
|
||||
|
||||
$Position/fileTitle.text = Global.heldSprite.path
|
||||
|
||||
|
||||
$Buttons/CheckBox.button_pressed = Global.heldSprite.ignoreBounce
|
||||
$Buttons/ClipLinked.button_pressed = Global.heldSprite.clipped
|
||||
|
||||
|
||||
$Animation/animSpeedLabel.text = "animation speed: " + str(Global.heldSprite.animSpeed)
|
||||
$Animation/animSpeed.value = Global.heldSprite.animSpeed
|
||||
|
||||
$Animation/animFramesLabel.text = "sprite frames: " + str(Global.heldSprite.frames)
|
||||
$Animation/animFrames.value = Global.heldSprite.frames
|
||||
|
||||
$VisToggle/setToggle/Label.text = "toggle: \"" + Global.heldSprite.toggle + "\""
|
||||
|
||||
|
||||
$VisToggle/setToggle/Label.text = 'toggle: "' + Global.heldSprite.toggle + '"'
|
||||
|
||||
changeRotLimit()
|
||||
|
||||
|
||||
setLayerButtons()
|
||||
|
||||
|
||||
if Global.heldSprite.parentId == null:
|
||||
$Buttons/Unlink.visible = false
|
||||
parentSpin.visible = false
|
||||
else:
|
||||
$Buttons/Unlink.visible = true
|
||||
|
||||
|
||||
var nodes = get_tree().get_nodes_in_group(str(Global.heldSprite.parentId))
|
||||
|
||||
if nodes.size()<=0:
|
||||
|
||||
if nodes.size() <= 0:
|
||||
return
|
||||
|
||||
|
||||
parentSpin.texture = nodes[0].tex
|
||||
parentSpin.pixel_size = 1.5 / nodes[0].imageData.get_size().y
|
||||
parentSpin.hframes = nodes[0].frames
|
||||
parentSpin.visible = true
|
||||
|
||||
func _process(delta):
|
||||
|
||||
|
||||
func _process(delta):
|
||||
visible = Global.heldSprite != null
|
||||
coverCollider.disabled = !visible
|
||||
|
||||
|
||||
if !visible:
|
||||
return
|
||||
|
||||
|
||||
var obj = Global.heldSprite
|
||||
spriteSpin.rotate_y(delta*4.0)
|
||||
parentSpin.rotate_y(delta*4.0)
|
||||
|
||||
$Position/Label.text = "position X : "+str(obj.position.x)+" Y: " + str(obj.position.y)
|
||||
$Position/Label2.text = "offset X : "+str(obj.offset.x)+" Y: " + str(obj.offset.y)
|
||||
$Position/Label3.text = "layer : "+str(obj.z)
|
||||
|
||||
spriteSpin.rotate_y(delta * 4.0)
|
||||
parentSpin.rotate_y(delta * 4.0)
|
||||
|
||||
$Position/Label.text = (
|
||||
"position X : " + str(obj.position.x) + " Y: " + str(obj.position.y)
|
||||
)
|
||||
$Position/Label2.text = (
|
||||
"offset X : " + str(obj.offset.x) + " Y: " + str(obj.offset.y)
|
||||
)
|
||||
$Position/Label3.text = "layer : " + str(obj.z)
|
||||
|
||||
#Sprite Rotational Limit Display
|
||||
|
||||
|
||||
var size = Global.heldSprite.rLimitMax - Global.heldSprite.rLimitMin
|
||||
var minimum = Global.heldSprite.rLimitMin
|
||||
|
||||
spriteRotDisplay.rotation_degrees = sin(Global.animationTick*0.05)*(size/2.0)+(minimum+(size/2.0))
|
||||
|
||||
spriteRotDisplay.rotation_degrees = (
|
||||
sin(Global.animationTick * 0.05) * (size / 2.0) + (minimum + (size / 2.0))
|
||||
)
|
||||
$RotationalLimits/RotBack/RotLineDisplay3.rotation_degrees = spriteRotDisplay.rotation_degrees
|
||||
|
||||
|
||||
|
@ -120,10 +128,15 @@ func _on_drag_slider_value_changed(value):
|
|||
Global.heldSprite.dragSpeed = value
|
||||
|
||||
|
||||
func _on_use_midi_toggled(value: bool):
|
||||
# $WobbleControl/useMidi.button_pressed = value
|
||||
Global.heldSprite.useMidiWobble = value
|
||||
|
||||
|
||||
func _on_x_frq_value_changed(value):
|
||||
$WobbleControl/xFrqLabel.text = "x frequency: " + str(value)
|
||||
Global.heldSprite.xFrq = value
|
||||
|
||||
|
||||
|
||||
func _on_x_amp_value_changed(value):
|
||||
$WobbleControl/xAmpLabel.text = "x amplitude: " + str(value)
|
||||
|
@ -134,6 +147,7 @@ func _on_y_frq_value_changed(value):
|
|||
$WobbleControl/yFrqLabel.text = "y frequency: " + str(value)
|
||||
Global.heldSprite.yFrq = value
|
||||
|
||||
|
||||
func _on_y_amp_value_changed(value):
|
||||
$WobbleControl/yAmpLabel.text = "y amplitude: " + str(value)
|
||||
Global.heldSprite.yAmp = value
|
||||
|
@ -146,16 +160,16 @@ func _on_r_drag_value_changed(value):
|
|||
|
||||
func _on_speaking_pressed():
|
||||
var f = $Buttons/Speaking.frame
|
||||
f = (f+1) % 3
|
||||
|
||||
f = (f + 1) % 3
|
||||
|
||||
$Buttons/Speaking.frame = f
|
||||
Global.heldSprite.showOnTalk = f
|
||||
|
||||
|
||||
func _on_blinking_pressed():
|
||||
var f = $Buttons/Blinking.frame
|
||||
f = (f+1) % 3
|
||||
|
||||
f = (f + 1) % 3
|
||||
|
||||
$Buttons/Blinking.frame = f
|
||||
Global.heldSprite.showOnBlink = f
|
||||
|
||||
|
@ -163,49 +177,55 @@ func _on_blinking_pressed():
|
|||
func _on_trash_pressed():
|
||||
Global.heldSprite.queue_free()
|
||||
Global.heldSprite = null
|
||||
|
||||
|
||||
Global.spriteList.updateData()
|
||||
|
||||
|
||||
func _on_unlink_pressed():
|
||||
if Global.heldSprite.parentId == null:
|
||||
return
|
||||
Global.unlinkSprite()
|
||||
setImage()
|
||||
|
||||
|
||||
|
||||
func _on_rot_limit_min_value_changed(value):
|
||||
$RotationalLimits/RotLimitMin.text = "rotational limit min: " + str(value)
|
||||
Global.heldSprite.rLimitMin = value
|
||||
|
||||
|
||||
changeRotLimit()
|
||||
|
||||
|
||||
func _on_rot_limit_max_value_changed(value):
|
||||
$RotationalLimits/RotLimitMax.text = "rotational limit max: " + str(value)
|
||||
Global.heldSprite.rLimitMax = value
|
||||
|
||||
|
||||
changeRotLimit()
|
||||
|
||||
|
||||
func changeRotLimit():
|
||||
$RotationalLimits/RotBack/rotLimitBar.value = Global.heldSprite.rLimitMax - Global.heldSprite.rLimitMin
|
||||
$RotationalLimits/RotBack/rotLimitBar.value = (
|
||||
Global.heldSprite.rLimitMax - Global.heldSprite.rLimitMin
|
||||
)
|
||||
$RotationalLimits/RotBack/rotLimitBar.rotation_degrees = Global.heldSprite.rLimitMin + 90
|
||||
|
||||
|
||||
$RotationalLimits/RotBack/RotLineDisplay.rotation_degrees = Global.heldSprite.rLimitMin
|
||||
$RotationalLimits/RotBack/RotLineDisplay2.rotation_degrees = Global.heldSprite.rLimitMax
|
||||
|
||||
|
||||
func setLayerButtons():
|
||||
var a = Global.heldSprite.costumeLayers.duplicate()
|
||||
|
||||
$Layers/Layer1.frame = 1-a[0]
|
||||
$Layers/Layer2.frame = 1-a[1]
|
||||
$Layers/Layer3.frame = 1-a[2]
|
||||
$Layers/Layer4.frame = 1-a[3]
|
||||
$Layers/Layer5.frame = 1-a[4]
|
||||
$Layers/Layer6.frame = 1-a[5]
|
||||
$Layers/Layer7.frame = 1-a[6]
|
||||
$Layers/Layer8.frame = 1-a[7]
|
||||
$Layers/Layer9.frame = 1-a[8]
|
||||
$Layers/Layer10.frame = 1-a[9]
|
||||
|
||||
|
||||
$Layers/Layer1.frame = 1 - a[0]
|
||||
$Layers/Layer2.frame = 1 - a[1]
|
||||
$Layers/Layer3.frame = 1 - a[2]
|
||||
$Layers/Layer4.frame = 1 - a[3]
|
||||
$Layers/Layer5.frame = 1 - a[4]
|
||||
$Layers/Layer6.frame = 1 - a[5]
|
||||
$Layers/Layer7.frame = 1 - a[6]
|
||||
$Layers/Layer8.frame = 1 - a[7]
|
||||
$Layers/Layer9.frame = 1 - a[8]
|
||||
$Layers/Layer10.frame = 1 - a[9]
|
||||
|
||||
var nodes = get_tree().get_nodes_in_group("saved")
|
||||
for sprite in nodes:
|
||||
if sprite.costumeLayers[Global.main.costume - 1] == 1:
|
||||
|
@ -214,7 +234,6 @@ func setLayerButtons():
|
|||
else:
|
||||
sprite.visible = false
|
||||
sprite.changeCollision(false)
|
||||
|
||||
|
||||
|
||||
func _on_layer_button_1_pressed():
|
||||
|
@ -256,6 +275,7 @@ func _on_layer_button_5_pressed():
|
|||
Global.heldSprite.costumeLayers[4] = 0
|
||||
setLayerButtons()
|
||||
|
||||
|
||||
func _on_layer_button_6_pressed():
|
||||
if Global.heldSprite.costumeLayers[5] == 0:
|
||||
Global.heldSprite.costumeLayers[5] = 1
|
||||
|
@ -263,6 +283,7 @@ func _on_layer_button_6_pressed():
|
|||
Global.heldSprite.costumeLayers[5] = 0
|
||||
setLayerButtons()
|
||||
|
||||
|
||||
func _on_layer_button_7_pressed():
|
||||
if Global.heldSprite.costumeLayers[6] == 0:
|
||||
Global.heldSprite.costumeLayers[6] = 1
|
||||
|
@ -270,6 +291,7 @@ func _on_layer_button_7_pressed():
|
|||
Global.heldSprite.costumeLayers[6] = 0
|
||||
setLayerButtons()
|
||||
|
||||
|
||||
func _on_layer_button_8_pressed():
|
||||
if Global.heldSprite.costumeLayers[7] == 0:
|
||||
Global.heldSprite.costumeLayers[7] = 1
|
||||
|
@ -277,6 +299,7 @@ func _on_layer_button_8_pressed():
|
|||
Global.heldSprite.costumeLayers[7] = 0
|
||||
setLayerButtons()
|
||||
|
||||
|
||||
func _on_layer_button_9_pressed():
|
||||
if Global.heldSprite.costumeLayers[8] == 0:
|
||||
Global.heldSprite.costumeLayers[8] = 1
|
||||
|
@ -284,6 +307,7 @@ func _on_layer_button_9_pressed():
|
|||
Global.heldSprite.costumeLayers[8] = 0
|
||||
setLayerButtons()
|
||||
|
||||
|
||||
func _on_layer_button_10_pressed():
|
||||
if Global.heldSprite.costumeLayers[9] == 0:
|
||||
Global.heldSprite.costumeLayers[9] = 1
|
||||
|
@ -291,6 +315,7 @@ func _on_layer_button_10_pressed():
|
|||
Global.heldSprite.costumeLayers[9] = 0
|
||||
setLayerButtons()
|
||||
|
||||
|
||||
func layerSelected():
|
||||
var newPos = Vector2.ZERO
|
||||
match Global.main.costume:
|
||||
|
@ -330,6 +355,7 @@ func _on_anim_speed_value_changed(value):
|
|||
$Animation/animSpeedLabel.text = "animation speed: " + str(value)
|
||||
Global.heldSprite.animSpeed = value
|
||||
|
||||
|
||||
func _on_anim_frames_value_changed(value):
|
||||
$Animation/animFramesLabel.text = "sprite frames: " + str(value)
|
||||
Global.heldSprite.frames = value
|
||||
|
@ -343,14 +369,15 @@ func _on_clip_linked_toggled(button_pressed):
|
|||
|
||||
func _on_delete_pressed():
|
||||
Global.heldSprite.toggle = "null"
|
||||
$VisToggle/setToggle/Label.text = "toggle: \"" + Global.heldSprite.toggle + "\""
|
||||
$VisToggle/setToggle/Label.text = 'toggle: "' + Global.heldSprite.toggle + '"'
|
||||
Global.heldSprite.makeVis()
|
||||
|
||||
|
||||
func _on_set_toggle_pressed():
|
||||
$VisToggle/setToggle/Label.text = "toggle: AWAITING INPUT"
|
||||
await Global.main.fatfuckingballs
|
||||
|
||||
|
||||
var keys = await Global.main.spriteVisToggles
|
||||
var key = keys[0]
|
||||
Global.heldSprite.toggle = key
|
||||
$VisToggle/setToggle/Label.text = "toggle: \"" + Global.heldSprite.toggle + "\""
|
||||
$VisToggle/setToggle/Label.text = 'toggle: "' + Global.heldSprite.toggle + '"'
|
||||
|
|
File diff suppressed because one or more lines are too long
Loading…
Add table
Add a link
Reference in a new issue