Get midi sync working at all.

This commit is contained in:
iandoesallthethings 2024-05-04 20:22:25 -04:00
parent 439be5642d
commit 43b7c5b554
3 changed files with 415 additions and 322 deletions

View file

@ -25,7 +25,6 @@ var editMode = true
@onready var shadow = $shadowSprite @onready var shadow = $shadowSprite
#Scene Reference #Scene Reference
@onready var spriteObject = preload("res://ui_scenes/selectedSprite/spriteObject.tscn") @onready var spriteObject = preload("res://ui_scenes/selectedSprite/spriteObject.tscn")
@ -51,123 +50,128 @@ var fileSystemOpen = false
#background input capture #background input capture
signal emptiedCapture signal emptiedCapture
signal pressedKey signal pressedKey
var costumeKeys = ["1","2","3","4","5","6","7","8","9","0"] var costumeKeys = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0"]
signal spriteVisToggles(keysPressed:Array) signal spriteVisToggles(keysPressed: Array)
signal fatfuckingballs signal fatfuckingballs
func _ready(): func _ready():
Global.main = self Global.main = self
Global.fail = $Failed Global.fail = $Failed
Global.connect("startSpeaking", onSpeak)
Global.connect("startSpeaking",onSpeak)
ElgatoStreamDeck.on_key_down.connect(changeCostumeStreamDeck) ElgatoStreamDeck.on_key_down.connect(changeCostumeStreamDeck)
OS.open_midi_inputs()
print(OS.get_connected_midi_inputs())
if Saving.settings["newUser"]: if Saving.settings["newUser"]:
_on_load_dialog_file_selected("default") _on_load_dialog_file_selected("default")
Saving.settings["newUser"] = false Saving.settings["newUser"] = false
saveLoaded = true saveLoaded = true
else: else:
_on_load_dialog_file_selected(Saving.settings["lastAvatar"]) _on_load_dialog_file_selected(Saving.settings["lastAvatar"])
$ControlPanel/volumeSlider.value = Saving.settings["volume"] $ControlPanel/volumeSlider.value = Saving.settings["volume"]
$ControlPanel/sensitiveSlider.value = Saving.settings["sense"] $ControlPanel/sensitiveSlider.value = Saving.settings["sense"]
get_window().size = str_to_var(Saving.settings["windowSize"]) get_window().size = str_to_var(Saving.settings["windowSize"])
if Saving.settings.has("bounce"): if Saving.settings.has("bounce"):
bounceSlider = Saving.settings["bounce"] bounceSlider = Saving.settings["bounce"]
else: else:
Saving.settings["bounce"] = 250 Saving.settings["bounce"] = 250
if Saving.settings.has("maxFPS"): if Saving.settings.has("maxFPS"):
Engine.max_fps = Saving.settings["maxFPS"] Engine.max_fps = Saving.settings["maxFPS"]
else: else:
Saving.settings["maxFPS"] = 60 Saving.settings["maxFPS"] = 60
if Saving.settings.has("backgroundColor"): if Saving.settings.has("backgroundColor"):
Global.backgroundColor = str_to_var(Saving.settings["backgroundColor"]) Global.backgroundColor = str_to_var(Saving.settings["backgroundColor"])
else: else:
Saving.settings["backgroundColor"] = var_to_str(Color(0.0,0.0,0.0,0.0)) Saving.settings["backgroundColor"] = var_to_str(Color(0.0, 0.0, 0.0, 0.0))
if Saving.settings.has("filtering"): if Saving.settings.has("filtering"):
Global.filtering = Saving.settings["filtering"] Global.filtering = Saving.settings["filtering"]
else: else:
Saving.settings["filtering"] = false Saving.settings["filtering"] = false
if Saving.settings.has("gravity"): if Saving.settings.has("gravity"):
bounceGravity = Saving.settings["gravity"] bounceGravity = Saving.settings["gravity"]
else: else:
Saving.settings["gravity"] = 1000 Saving.settings["gravity"] = 1000
if Saving.settings.has("costumeKeys"): if Saving.settings.has("costumeKeys"):
costumeKeys = Saving.settings["costumeKeys"] costumeKeys = Saving.settings["costumeKeys"]
else: else:
Saving.settings["costumeKeys"] = costumeKeys Saving.settings["costumeKeys"] = costumeKeys
if Saving.settings.has("blinkSpeed"): if Saving.settings.has("blinkSpeed"):
Global.blinkSpeed = Saving.settings["blinkSpeed"] Global.blinkSpeed = Saving.settings["blinkSpeed"]
else: else:
Saving.settings["blinkSpeed"] = 1.0 Saving.settings["blinkSpeed"] = 1.0
if Saving.settings.has("blinkChance"): if Saving.settings.has("blinkChance"):
Global.blinkChance = Saving.settings["blinkChance"] Global.blinkChance = Saving.settings["blinkChance"]
else: else:
Saving.settings["blinkChance"] = 200 Saving.settings["blinkChance"] = 200
if Saving.settings.has("bounceOnCostumeChange"): if Saving.settings.has("bounceOnCostumeChange"):
bounceOnCostumeChange = Saving.settings["bounceOnCostumeChange"] bounceOnCostumeChange = Saving.settings["bounceOnCostumeChange"]
else: else:
Saving.settings["bounceOnCostumeChange"] = false Saving.settings["bounceOnCostumeChange"] = false
saveLoaded = true saveLoaded = true
RenderingServer.set_default_clear_color(Global.backgroundColor) RenderingServer.set_default_clear_color(Global.backgroundColor)
swapMode() swapMode()
settingsMenu.setvalues() settingsMenu.setvalues()
changeCostume(1) changeCostume(1)
var s = get_viewport().get_visible_rect().size var s = get_viewport().get_visible_rect().size
origin.position = s*0.5 origin.position = s * 0.5
camera.position = origin.position camera.position = origin.position
func _process(delta): func _process(delta):
var hold = origin.get_parent().position.y var hold = origin.get_parent().position.y
origin.get_parent().position.y += yVel * 0.0166 origin.get_parent().position.y += yVel * 0.0166
if origin.get_parent().position.y > 0: if origin.get_parent().position.y > 0:
origin.get_parent().position.y = 0 origin.get_parent().position.y = 0
bounceChange = hold - origin.get_parent().position.y bounceChange = hold - origin.get_parent().position.y
yVel += bounceGravity*0.0166 yVel += bounceGravity * 0.0166
if Input.is_action_just_pressed("openFolder"): if Input.is_action_just_pressed("openFolder"):
OS.shell_open(ProjectSettings.globalize_path("user://")) OS.shell_open(ProjectSettings.globalize_path("user://"))
moveSpriteMenu(delta) moveSpriteMenu(delta)
zoomScene() zoomScene()
fileSystemOpen = isFileSystemOpen() fileSystemOpen = isFileSystemOpen()
followShadow() followShadow()
func followShadow(): func followShadow():
shadow.visible = is_instance_valid(Global.heldSprite) shadow.visible = is_instance_valid(Global.heldSprite)
if !shadow.visible: if !shadow.visible:
return return
shadow.global_position = Global.heldSprite.sprite.global_position + Vector2(6,6) shadow.global_position = Global.heldSprite.sprite.global_position + Vector2(6, 6)
shadow.global_rotation = Global.heldSprite.sprite.global_rotation shadow.global_rotation = Global.heldSprite.sprite.global_rotation
shadow.offset = Global.heldSprite.sprite.offset shadow.offset = Global.heldSprite.sprite.offset
shadow.texture = Global.heldSprite.sprite.texture shadow.texture = Global.heldSprite.sprite.texture
shadow.hframes = Global.heldSprite.sprite.hframes shadow.hframes = Global.heldSprite.sprite.hframes
shadow.frame = Global.heldSprite.sprite.frame shadow.frame = Global.heldSprite.sprite.frame
func isFileSystemOpen(): func isFileSystemOpen():
for obj in [replaceDialog,fileDialog,saveDialog,loadDialog]: for obj in [replaceDialog, fileDialog, saveDialog, loadDialog]:
if obj.visible: if obj.visible:
if obj == replaceDialog: if obj == replaceDialog:
return true return true
@ -175,6 +179,7 @@ func isFileSystemOpen():
return true return true
return false return false
#Displays control panel whether or not application is focused #Displays control panel whether or not application is focused
func _notification(what): func _notification(what):
match what: match what:
@ -188,43 +193,46 @@ func _notification(what):
30: 30:
onWindowSizeChange() onWindowSizeChange()
func onWindowSizeChange(): func onWindowSizeChange():
if !saveLoaded: if !saveLoaded:
return return
Saving.settings["windowSize"] = var_to_str(get_window().size) Saving.settings["windowSize"] = var_to_str(get_window().size)
var s = get_viewport().get_visible_rect().size var s = get_viewport().get_visible_rect().size
origin.position = s*0.5 origin.position = s * 0.5
lines.position = s*0.5 lines.position = s * 0.5
lines.drawLine() lines.drawLine()
camera.position = origin.position camera.position = origin.position
controlPanel.position = camera.position + (s/(camera.zoom*2.0)) controlPanel.position = camera.position + (s / (camera.zoom * 2.0))
tutorial.position = controlPanel.position tutorial.position = controlPanel.position
editControls.position = camera.position - (s/(camera.zoom*2.0)) editControls.position = camera.position - (s / (camera.zoom * 2.0))
viewerArrows.position = editControls.position viewerArrows.position = editControls.position
spriteList.position.x = s.x - 233 spriteList.position.x = s.x - 233
pushUpdates.position.y = controlPanel.position.y pushUpdates.position.y = controlPanel.position.y
pushUpdates.position.x = editControls.position.x pushUpdates.position.x = editControls.position.x
func zoomScene(): func zoomScene():
#Handles Zooming #Handles Zooming
if Input.is_action_pressed("control"): if Input.is_action_pressed("control"):
if Input.is_action_just_pressed("scrollUp"): if Input.is_action_just_pressed("scrollUp"):
if scaleOverall < 400: if scaleOverall < 400:
camera.zoom += Vector2(0.1,0.1) camera.zoom += Vector2(0.1, 0.1)
scaleOverall += 10 scaleOverall += 10
changeZoom() changeZoom()
if Input.is_action_just_pressed("scrollDown"): if Input.is_action_just_pressed("scrollDown"):
if scaleOverall > 10: if scaleOverall > 10:
camera.zoom -= Vector2(0.1,0.1) camera.zoom -= Vector2(0.1, 0.1)
scaleOverall -= 10 scaleOverall -= 10
changeZoom() changeZoom()
$ControlPanel/ZoomLabel.modulate.a = lerp($ControlPanel/ZoomLabel.modulate.a,0.0,0.02) $ControlPanel/ZoomLabel.modulate.a = lerp($ControlPanel/ZoomLabel.modulate.a, 0.0, 0.02)
func changeZoom(): func changeZoom():
var newZoom = Vector2(1.0,1.0) / camera.zoom var newZoom = Vector2(1.0, 1.0) / camera.zoom
controlPanel.scale = newZoom controlPanel.scale = newZoom
tutorial.scale = newZoom tutorial.scale = newZoom
editControls.scale = newZoom editControls.scale = newZoom
@ -235,23 +243,24 @@ func changeZoom():
$ControlPanel/ZoomLabel.modulate.a = 6.0 $ControlPanel/ZoomLabel.modulate.a = 6.0
$ControlPanel/ZoomLabel.text = "Zoom : " + str(scaleOverall) + "%" $ControlPanel/ZoomLabel.text = "Zoom : " + str(scaleOverall) + "%"
Global.pushUpdate("Set zoom to " + str(scaleOverall) + "%") Global.pushUpdate("Set zoom to " + str(scaleOverall) + "%")
onWindowSizeChange() onWindowSizeChange()
#When the user speaks! #When the user speaks!
func onSpeak(): func onSpeak():
if origin.get_parent().position.y > -16: if origin.get_parent().position.y > -16:
yVel = bounceSlider * -1 yVel = bounceSlider * -1
#Swaps between edit mode and view mode #Swaps between edit mode and view mode
func swapMode(): func swapMode():
Global.heldSprite = null Global.heldSprite = null
editMode = !editMode editMode = !editMode
Global.pushUpdate("Toggled editing mode.") Global.pushUpdate("Toggled editing mode.")
get_viewport().transparent_bg = !editMode get_viewport().transparent_bg = !editMode
if Global.backgroundColor.a != 0.0: if Global.backgroundColor.a != 0.0:
get_viewport().transparent_bg = false get_viewport().transparent_bg = false
@ -265,75 +274,79 @@ func swapMode():
controlPanel.visible = !editMode controlPanel.visible = !editMode
lines.visible = editMode lines.visible = editMode
spriteList.visible = editMode spriteList.visible = editMode
#Adds sprite object to scene #Adds sprite object to scene
func add_image(path): func add_image(path):
var rand = RandomNumberGenerator.new() var rand = RandomNumberGenerator.new()
var id = rand.randi() var id = rand.randi()
var sprite = spriteObject.instantiate() var sprite = spriteObject.instantiate()
sprite.path = path sprite.path = path
sprite.id = id sprite.id = id
origin.add_child(sprite) origin.add_child(sprite)
sprite.position = Vector2.ZERO sprite.position = Vector2.ZERO
Global.spriteList.updateData() Global.spriteList.updateData()
Global.pushUpdate("Added new sprite.") Global.pushUpdate("Added new sprite.")
#Opens File Dialog #Opens File Dialog
func _on_add_button_pressed(): func _on_add_button_pressed():
fileDialog.visible = true fileDialog.visible = true
#Runs when selecting image in File Dialog #Runs when selecting image in File Dialog
func _on_file_dialog_file_selected(path): func _on_file_dialog_file_selected(path):
add_image(path) add_image(path)
func _on_save_button_pressed(): func _on_save_button_pressed():
$SaveDialog.visible = true $SaveDialog.visible = true
func _on_load_button_pressed(): func _on_load_button_pressed():
$LoadDialog.visible = true $LoadDialog.visible = true
#LOAD AVATAR #LOAD AVATAR
func _on_load_dialog_file_selected(path): func _on_load_dialog_file_selected(path):
var data = Saving.read_save(path) var data = Saving.read_save(path)
if data == null: if data == null:
return return
origin.queue_free() origin.queue_free()
var new = Node2D.new() var new = Node2D.new()
$OriginMotion.add_child(new) $OriginMotion.add_child(new)
origin = new origin = new
for item in data: for item in data:
var sprite = spriteObject.instantiate() var sprite = spriteObject.instantiate()
sprite.path = data[item]["path"] sprite.path = data[item]["path"]
sprite.id = data[item]["identification"] sprite.id = data[item]["identification"]
sprite.parentId = data[item]["parentId"] sprite.parentId = data[item]["parentId"]
sprite.offset = str_to_var(data[item]["offset"]) sprite.offset = str_to_var(data[item]["offset"])
sprite.z = data[item]["zindex"] sprite.z = data[item]["zindex"]
sprite.dragSpeed = data[item]["drag"] sprite.dragSpeed = data[item]["drag"]
sprite.xFrq = data[item]["xFrq"] sprite.xFrq = data[item]["xFrq"]
sprite.xAmp = data[item]["xAmp"] sprite.xAmp = data[item]["xAmp"]
sprite.yFrq = data[item]["yFrq"] sprite.yFrq = data[item]["yFrq"]
sprite.yAmp = data[item]["yAmp"] sprite.yAmp = data[item]["yAmp"]
sprite.rdragStr = data[item]["rotDrag"] sprite.rdragStr = data[item]["rotDrag"]
sprite.showOnTalk = data[item]["showTalk"] sprite.showOnTalk = data[item]["showTalk"]
sprite.showOnBlink = data[item]["showBlink"] sprite.showOnBlink = data[item]["showBlink"]
if data[item].has("rLimitMin"): if data[item].has("rLimitMin"):
sprite.rLimitMin = data[item]["rLimitMin"] sprite.rLimitMin = data[item]["rLimitMin"]
if data[item].has("rLimitMax"): if data[item].has("rLimitMax"):
sprite.rLimitMax = data[item]["rLimitMax"] sprite.rLimitMax = data[item]["rLimitMax"]
if data[item].has("costumeLayers"): if data[item].has("costumeLayers"):
sprite.costumeLayers = str_to_var(data[item]["costumeLayers"]).duplicate() sprite.costumeLayers = str_to_var(data[item]["costumeLayers"]).duplicate()
if sprite.costumeLayers.size() < 8: if sprite.costumeLayers.size() < 8:
@ -342,10 +355,10 @@ func _on_load_dialog_file_selected(path):
if data[item].has("stretchAmount"): if data[item].has("stretchAmount"):
sprite.stretchAmount = data[item]["stretchAmount"] sprite.stretchAmount = data[item]["stretchAmount"]
if data[item].has("ignoreBounce"): if data[item].has("ignoreBounce"):
sprite.ignoreBounce = data[item]["ignoreBounce"] sprite.ignoreBounce = data[item]["ignoreBounce"]
if data[item].has("frames"): if data[item].has("frames"):
sprite.frames = data[item]["frames"] sprite.frames = data[item]["frames"]
if data[item].has("animSpeed"): if data[item].has("animSpeed"):
@ -356,25 +369,25 @@ func _on_load_dialog_file_selected(path):
sprite.clipped = data[item]["clipped"] sprite.clipped = data[item]["clipped"]
if data[item].has("toggle"): if data[item].has("toggle"):
sprite.toggle = data[item]["toggle"] sprite.toggle = data[item]["toggle"]
origin.add_child(sprite) origin.add_child(sprite)
sprite.position = str_to_var(data[item]["pos"]) sprite.position = str_to_var(data[item]["pos"])
changeCostume(1) changeCostume(1)
Saving.settings["lastAvatar"] = path Saving.settings["lastAvatar"] = path
Global.spriteList.updateData() Global.spriteList.updateData()
Global.pushUpdate("Loaded avatar at: " + path) Global.pushUpdate("Loaded avatar at: " + path)
onWindowSizeChange() onWindowSizeChange()
#SAVE AVATAR #SAVE AVATAR
func _on_save_dialog_file_selected(path): func _on_save_dialog_file_selected(path):
var data = {} var data = {}
var nodes = get_tree().get_nodes_in_group("saved") var nodes = get_tree().get_nodes_in_group("saved")
var id = 0 var id = 0
for child in nodes: for child in nodes:
if child.type == "sprite": if child.type == "sprite":
data[id] = {} data[id] = {}
data[id]["type"] = "sprite" data[id]["type"] = "sprite"
@ -382,52 +395,53 @@ func _on_save_dialog_file_selected(path):
data[id]["imageData"] = Marshalls.raw_to_base64(child.imageData.save_png_to_buffer()) data[id]["imageData"] = Marshalls.raw_to_base64(child.imageData.save_png_to_buffer())
data[id]["identification"] = child.id data[id]["identification"] = child.id
data[id]["parentId"] = child.parentId data[id]["parentId"] = child.parentId
data[id]["pos"] = var_to_str(child.position) data[id]["pos"] = var_to_str(child.position)
data[id]["offset"] = var_to_str(child.offset) data[id]["offset"] = var_to_str(child.offset)
data[id]["zindex"] = child.z data[id]["zindex"] = child.z
data[id]["drag"] = child.dragSpeed data[id]["drag"] = child.dragSpeed
data[id]["xFrq"] = child.xFrq data[id]["xFrq"] = child.xFrq
data[id]["xAmp"] = child.xAmp data[id]["xAmp"] = child.xAmp
data[id]["yFrq"] = child.yFrq data[id]["yFrq"] = child.yFrq
data[id]["yAmp"] = child.yAmp data[id]["yAmp"] = child.yAmp
data[id]["rotDrag"] = child.rdragStr data[id]["rotDrag"] = child.rdragStr
data[id]["showTalk"] = child.showOnTalk data[id]["showTalk"] = child.showOnTalk
data[id]["showBlink"] = child.showOnBlink data[id]["showBlink"] = child.showOnBlink
data[id]["rLimitMin"] = child.rLimitMin data[id]["rLimitMin"] = child.rLimitMin
data[id]["rLimitMax"] = child.rLimitMax data[id]["rLimitMax"] = child.rLimitMax
data[id]["costumeLayers"] = var_to_str(child.costumeLayers) data[id]["costumeLayers"] = var_to_str(child.costumeLayers)
data[id]["stretchAmount"] = child.stretchAmount data[id]["stretchAmount"] = child.stretchAmount
data[id]["ignoreBounce"] = child.ignoreBounce data[id]["ignoreBounce"] = child.ignoreBounce
data[id]["frames"] = child.frames data[id]["frames"] = child.frames
data[id]["animSpeed"] = child.animSpeed data[id]["animSpeed"] = child.animSpeed
data[id]["clipped"] = child.clipped data[id]["clipped"] = child.clipped
data[id]["toggle"] = child.toggle data[id]["toggle"] = child.toggle
id += 1 id += 1
Saving.settings["lastAvatar"] = path Saving.settings["lastAvatar"] = path
Saving.data = data.duplicate() Saving.data = data.duplicate()
Saving.write_save(path) Saving.write_save(path)
Global.pushUpdate("Saved avatar at: " + path) Global.pushUpdate("Saved avatar at: " + path)
func _on_link_button_pressed(): func _on_link_button_pressed():
Global.reparentMode = true Global.reparentMode = true
Global.chain.enable(Global.reparentMode) Global.chain.enable(Global.reparentMode)
Global.pushUpdate("Linking sprite...") Global.pushUpdate("Linking sprite...")
@ -446,11 +460,13 @@ func _on_replace_button_pressed():
return return
$ReplaceDialog.visible = true $ReplaceDialog.visible = true
func _on_replace_dialog_file_selected(path): func _on_replace_dialog_file_selected(path):
Global.heldSprite.replaceSprite(path) Global.heldSprite.replaceSprite(path)
Global.spriteList.updateData() Global.spriteList.updateData()
Global.pushUpdate("Replacing sprite with: " + path) Global.pushUpdate("Replacing sprite with: " + path)
func _on_replace_dialog_visibility_changed(): func _on_replace_dialog_visibility_changed():
$EditControls/ScreenCover/CollisionShape2D.disabled = !$ReplaceDialog.visible $EditControls/ScreenCover/CollisionShape2D.disabled = !$ReplaceDialog.visible
@ -460,62 +476,74 @@ func _on_duplicate_button_pressed():
return return
var rand = RandomNumberGenerator.new() var rand = RandomNumberGenerator.new()
var id = rand.randi() var id = rand.randi()
var sprite = spriteObject.instantiate() var sprite = spriteObject.instantiate()
sprite.path = Global.heldSprite.path sprite.path = Global.heldSprite.path
sprite.id = id sprite.id = id
sprite.parentId = Global.heldSprite.parentId sprite.parentId = Global.heldSprite.parentId
sprite.dragSpeed = Global.heldSprite.dragSpeed sprite.dragSpeed = Global.heldSprite.dragSpeed
sprite.showOnTalk = Global.heldSprite.showOnTalk sprite.showOnTalk = Global.heldSprite.showOnTalk
sprite.showOnBlink = Global.heldSprite.showOnBlink sprite.showOnBlink = Global.heldSprite.showOnBlink
sprite.z = Global.heldSprite.z sprite.z = Global.heldSprite.z
sprite.xFrq = Global.heldSprite.xFrq sprite.xFrq = Global.heldSprite.xFrq
sprite.xAmp = Global.heldSprite.xAmp sprite.xAmp = Global.heldSprite.xAmp
sprite.yFrq = Global.heldSprite.yFrq sprite.yFrq = Global.heldSprite.yFrq
sprite.yAmp = Global.heldSprite.yAmp sprite.yAmp = Global.heldSprite.yAmp
sprite.rdragStr = Global.heldSprite.rdragStr sprite.rdragStr = Global.heldSprite.rdragStr
sprite.offset = Global.heldSprite.offset sprite.offset = Global.heldSprite.offset
sprite.rLimitMin = Global.heldSprite.rLimitMin sprite.rLimitMin = Global.heldSprite.rLimitMin
sprite.rLimitMax = Global.heldSprite.rLimitMax sprite.rLimitMax = Global.heldSprite.rLimitMax
sprite.frames = Global.heldSprite.frames sprite.frames = Global.heldSprite.frames
sprite.animSpeed = Global.heldSprite.animSpeed sprite.animSpeed = Global.heldSprite.animSpeed
sprite.costumeLayers = Global.heldSprite.costumeLayers sprite.costumeLayers = Global.heldSprite.costumeLayers
origin.add_child(sprite) origin.add_child(sprite)
sprite.position = Global.heldSprite.position + Vector2(16,16) sprite.position = Global.heldSprite.position + Vector2(16, 16)
Global.heldSprite = sprite Global.heldSprite = sprite
Global.spriteList.updateData() Global.spriteList.updateData()
Global.pushUpdate("Duplicated sprite.") Global.pushUpdate("Duplicated sprite.")
func changeCostumeStreamDeck(id: String): func changeCostumeStreamDeck(id: String):
match id: match id:
"1":changeCostume(1) "1":
"2":changeCostume(2) changeCostume(1)
"3":changeCostume(3) "2":
"4":changeCostume(4) changeCostume(2)
"5":changeCostume(5) "3":
"6":changeCostume(6) changeCostume(3)
"7":changeCostume(7) "4":
"8":changeCostume(8) changeCostume(4)
"9":changeCostume(9) "5":
"10":changeCostume(10) changeCostume(5)
"6":
changeCostume(6)
"7":
changeCostume(7)
"8":
changeCostume(8)
"9":
changeCostume(9)
"10":
changeCostume(10)
func changeCostume(newCostume): func changeCostume(newCostume):
costume = newCostume costume = newCostume
Global.heldSprite = null Global.heldSprite = null
var nodes = get_tree().get_nodes_in_group("saved") var nodes = get_tree().get_nodes_in_group("saved")
for sprite in nodes: for sprite in nodes:
if sprite.costumeLayers[newCostume-1] == 1: if sprite.costumeLayers[newCostume - 1] == 1:
sprite.visible = true sprite.visible = true
sprite.changeCollision(true) sprite.changeCollision(true)
else: else:
@ -523,57 +551,55 @@ func changeCostume(newCostume):
sprite.changeCollision(false) sprite.changeCollision(false)
Global.spriteEdit.layerSelected() Global.spriteEdit.layerSelected()
spriteList.updateAllVisible() spriteList.updateAllVisible()
if bounceOnCostumeChange: if bounceOnCostumeChange:
onSpeak() onSpeak()
Global.pushUpdate("Change costume: " + str(newCostume)) Global.pushUpdate("Change costume: " + str(newCostume))
func moveSpriteMenu(delta): func moveSpriteMenu(delta):
#moves sprite viewer editor thing around #moves sprite viewer editor thing around
var size = get_viewport().get_visible_rect().size var size = get_viewport().get_visible_rect().size
var windowLength = 1250 #1187 var windowLength = 1250 #1187
$ViewerArrows/Arrows.position.y = size.y - 25 $ViewerArrows/Arrows.position.y = size.y - 25
if !Global.spriteEdit.visible: if !Global.spriteEdit.visible:
$ViewerArrows/Arrows.visible = false $ViewerArrows/Arrows.visible = false
$ViewerArrows/Arrows2.visible = false $ViewerArrows/Arrows2.visible = false
return return
if size.y > windowLength+50: if size.y > windowLength + 50:
Global.spriteEdit.position.y = 66 Global.spriteEdit.position.y = 66
$ViewerArrows/Arrows.visible = false $ViewerArrows/Arrows.visible = false
$ViewerArrows/Arrows2.visible = false $ViewerArrows/Arrows2.visible = false
return return
if Global.spriteEdit.position.y < 16: if Global.spriteEdit.position.y < 16:
$ViewerArrows/Arrows2.visible = true $ViewerArrows/Arrows2.visible = true
else: else:
$ViewerArrows/Arrows2.visible = false $ViewerArrows/Arrows2.visible = false
if Global.spriteEdit.position.y > size.y-windowLength+2: if Global.spriteEdit.position.y > size.y - windowLength + 2:
$ViewerArrows/Arrows.visible = true $ViewerArrows/Arrows.visible = true
else: else:
$ViewerArrows/Arrows.visible = false $ViewerArrows/Arrows.visible = false
if $EditControls/MoveMenuUp.overlaps_area(Global.mouse.area): if $EditControls/MoveMenuUp.overlaps_area(Global.mouse.area):
Global.spriteEdit.position.y += (delta*432.0) Global.spriteEdit.position.y += (delta * 432.0)
elif $EditControls/MoveMenuDown.overlaps_area(Global.mouse.area): elif $EditControls/MoveMenuDown.overlaps_area(Global.mouse.area):
Global.spriteEdit.position.y -= (delta*432.0) Global.spriteEdit.position.y -= (delta * 432.0)
if Global.spriteEdit.position.y > 66: if Global.spriteEdit.position.y > 66:
Global.spriteEdit.position.y = 66 Global.spriteEdit.position.y = 66
elif Global.spriteEdit.position.y < size.y-windowLength: elif Global.spriteEdit.position.y < size.y - windowLength:
Global.spriteEdit.position.y = size.y-windowLength Global.spriteEdit.position.y = size.y - windowLength
#UNAMED BUT THIS IS THE MICROPHONE MENU BUTTON #UNAMED BUT THIS IS THE MICROPHONE MENU BUTTON
func _on_button_pressed(): func _on_button_pressed():
$ControlPanel/MicInputSelect.visible = !$ControlPanel/MicInputSelect.visible $ControlPanel/MicInputSelect.visible = !$ControlPanel/MicInputSelect.visible
@ -585,50 +611,72 @@ func _on_settings_buttons_pressed():
func _on_background_input_capture_bg_key_pressed(node, keys_pressed): func _on_background_input_capture_bg_key_pressed(node, keys_pressed):
print("background key pressed")
var keyStrings = [] var keyStrings = []
for i in keys_pressed: for i in keys_pressed:
if keys_pressed[i]: 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)) keyStrings.append(
(
OS.get_keycode_string(i)
if !OS.get_keycode_string(i).strip_edges().is_empty()
else "Keycode" + str(i)
)
)
if fileSystemOpen: if fileSystemOpen:
return return
if keyStrings.size() <= 0: if keyStrings.size() <= 0:
emit_signal("emptiedCapture") emit_signal("emptiedCapture")
return return
if settingsMenu.awaitingCostumeInput >= 0: if settingsMenu.awaitingCostumeInput >= 0:
if keyStrings[0] == "Keycode1": if keyStrings[0] == "Keycode1":
if !settingsMenu.hasMouse: if !settingsMenu.hasMouse:
emit_signal("pressedKey") emit_signal("pressedKey")
return return
var currentButton = costumeKeys[settingsMenu.awaitingCostumeInput] var currentButton = costumeKeys[settingsMenu.awaitingCostumeInput]
costumeKeys[settingsMenu.awaitingCostumeInput] = keyStrings[0] costumeKeys[settingsMenu.awaitingCostumeInput] = keyStrings[0]
Saving.settings["costumeKeys"] = costumeKeys Saving.settings["costumeKeys"] = costumeKeys
Global.pushUpdate("Changed costume " + str(settingsMenu.awaitingCostumeInput+1) + " hotkey from \"" + currentButton + "\" to \"" + keyStrings[0] + "\"") Global.pushUpdate(
(
"Changed costume "
+ str(settingsMenu.awaitingCostumeInput + 1)
+ ' hotkey from "'
+ currentButton
+ '" to "'
+ keyStrings[0]
+ '"'
)
)
emit_signal("pressedKey") emit_signal("pressedKey")
for key in keyStrings: for key in keyStrings:
var i = costumeKeys.find(key) var i = costumeKeys.find(key)
if i >= 0: if i >= 0:
changeCostume(i+1) changeCostume(i + 1)
func bgInputSprite(node, keys_pressed): func bgInputSprite(node, keys_pressed):
print("bgInputSprite")
if fileSystemOpen: if fileSystemOpen:
return return
var keyStrings = [] var keyStrings = []
for i in keys_pressed: for i in keys_pressed:
if keys_pressed[i]: 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)) keyStrings.append(
(
OS.get_keycode_string(i)
if !OS.get_keycode_string(i).strip_edges().is_empty()
else "Keycode" + str(i)
)
)
if keyStrings.size() <= 0: if keyStrings.size() <= 0:
emit_signal("fatfuckingballs") emit_signal("fatfuckingballs")
return return
spriteVisToggles.emit(keyStrings) spriteVisToggles.emit(keyStrings)

File diff suppressed because one or more lines are too long

View file

@ -32,7 +32,7 @@ var imageSize = Vector2.ZERO
#Visuals #Visuals
var mouseOffset = Vector2.ZERO var mouseOffset = Vector2.ZERO
var grabDelay = 0 var grabDelay = 0
var size = Vector2(1,1) var size = Vector2(1, 1)
var showOnTalk = 0 var showOnTalk = 0
var showOnBlink = 0 var showOnBlink = 0
@ -43,12 +43,13 @@ var z = 0
var heldTicks = 0 var heldTicks = 0
var dragSpeed = 0 var dragSpeed = 0
#Origin #Origin
var origTick = 0 var origTick = 0
var offset = Vector2.ZERO var offset = Vector2.ZERO
#Wobble #Wobble
var use_midi_wobble = true # TODO: Add to settings
var xFrq = 0.0 var xFrq = 0.0
var xAmp = 0.0 var xAmp = 0.0
@ -61,7 +62,7 @@ var rLimitMax = 180
var rLimitMin = -180 var rLimitMin = -180
#Layer #Layer
var costumeLayers = [1,1,1,1,1,1,1,1,1,1] var costumeLayers = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
#Stretch #Stretch
var stretchAmount = 0.0 var stretchAmount = 0.0
@ -82,10 +83,10 @@ var tick = 0
#Vis toggle #Vis toggle
var toggle = "null" var toggle = "null"
func _ready(): func _ready():
Global.main.spriteVisToggles.connect(visToggle) Global.main.spriteVisToggles.connect(visToggle)
var img = Image.new() var img = Image.new()
var err = img.load(path) var err = img.load(path)
if err != OK: if err != OK:
@ -103,22 +104,21 @@ func _ready():
print_debug("Failed to load image.") print_debug("Failed to load image.")
queue_free() queue_free()
return return
var texture = ImageTexture.new() var texture = ImageTexture.new()
texture = ImageTexture.create_from_image(img) texture = ImageTexture.create_from_image(img)
tex = texture tex = texture
imageData = img imageData = img
imageSize = img.get_size() imageSize = img.get_size()
sprite.texture = tex sprite.texture = tex
var bitmap = BitMap.new() var bitmap = BitMap.new()
bitmap.create_from_image_alpha(imageData) bitmap.create_from_image_alpha(imageData)
var polygons = bitmap.opaque_to_polygons(Rect2(Vector2(0, 0), bitmap.get_size()),4.0) #bitmap.get_size() var polygons = bitmap.opaque_to_polygons(Rect2(Vector2(0, 0), bitmap.get_size()), 4.0) #bitmap.get_size()
var b = false var b = false
for polygon in polygons: for polygon in polygons:
@ -126,28 +126,27 @@ func _ready():
var collider = CollisionPolygon2D.new() var collider = CollisionPolygon2D.new()
collider.polygon = polygon collider.polygon = polygon
grabArea.add_child(collider) grabArea.add_child(collider)
var outline = outlineScene.instantiate() var outline = outlineScene.instantiate()
outline.points = polygon outline.points = polygon
outline.add_point(outline.points[0]) outline.add_point(outline.points[0])
grabArea.add_child(outline) grabArea.add_child(outline)
size = imageData.get_size() size = imageData.get_size()
grabArea.position = size*-0.5 grabArea.position = size * -0.5
sprite.offset = offset sprite.offset = offset
grabArea.position = (size*-0.5) + offset grabArea.position = (size * -0.5) + offset
changeFrames() changeFrames()
setZIndex() setZIndex()
if frames > 1: if frames > 1:
remakePolygon() remakePolygon()
if !b: if !b:
remakePolygon() remakePolygon()
add_to_group(str(id)) add_to_group(str(id))
await get_tree().create_timer(0.1).timeout await get_tree().create_timer(0.1).timeout
if parentId != null: if parentId != null:
@ -156,49 +155,58 @@ func _ready():
nodes[0].sprite.add_child(self) nodes[0].sprite.add_child(self)
parentSprite = nodes[0] parentSprite = nodes[0]
set_owner(nodes[0].sprite) set_owner(nodes[0].sprite)
setClip(clipped) setClip(clipped)
if Global.filtering: if Global.filtering:
sprite.texture_filter = 2 sprite.texture_filter = 2
func _input(event):
if use_midi_wobble and event is InputEventMIDI:
match event.message:
MIDIMessage.MIDI_MESSAGE_START:
tick = 0
MIDIMessage.MIDI_MESSAGE_STOP:
tick = 0
MIDIMessage.MIDI_MESSAGE_TIMING_CLOCK:
tick += 1
func replaceSprite(pathNew): func replaceSprite(pathNew):
var img = Image.new() var img = Image.new()
var err = img.load(pathNew) var err = img.load(pathNew)
if err != OK: if err != OK:
#Runs if image import fails. #Runs if image import fails.
Global.epicFail(err) Global.epicFail(err)
print_debug("Failed to load image.") print_debug("Failed to load image.")
return return
path = pathNew path = pathNew
var texture = ImageTexture.new() var texture = ImageTexture.new()
texture = ImageTexture.create_from_image(img) texture = ImageTexture.create_from_image(img)
tex = texture tex = texture
imageData = img imageData = img
sprite.texture = tex sprite.texture = tex
var bitmap = BitMap.new() var bitmap = BitMap.new()
bitmap.create_from_image_alpha(imageData) bitmap.create_from_image_alpha(imageData)
var polygons = bitmap.opaque_to_polygons(Rect2(Vector2(0, 0), bitmap.get_size())) var polygons = bitmap.opaque_to_polygons(Rect2(Vector2(0, 0), bitmap.get_size()))
for i in grabArea.get_children(): for i in grabArea.get_children():
i.queue_free() i.queue_free()
var b = false var b = false
for polygon in polygons: for polygon in polygons:
b = true b = true
var collider = CollisionPolygon2D.new() var collider = CollisionPolygon2D.new()
collider.polygon = polygon collider.polygon = polygon
grabArea.add_child(collider) grabArea.add_child(collider)
var outline = outlineScene.instantiate() var outline = outlineScene.instantiate()
outline.points = polygon outline.points = polygon
outline.add_point(outline.points[0]) outline.add_point(outline.points[0])
@ -206,47 +214,49 @@ func replaceSprite(pathNew):
size = imageData.get_size() size = imageData.get_size()
sprite.offset = offset sprite.offset = offset
grabArea.position = (size*-0.5) + offset grabArea.position = (size * -0.5) + offset
if !b: if !b:
remakePolygon() remakePolygon()
func _process(delta): func _process(delta):
tick += 1 if not use_midi_wobble:
tick += 1
if Global.heldSprite == self: if Global.heldSprite == self:
grabArea.visible = true grabArea.visible = true
originSprite.visible = true originSprite.visible = true
else: else:
grabArea.visible = false grabArea.visible = false
originSprite.visible = false originSprite.visible = false
var glob = dragger.global_position var glob = dragger.global_position
if ignoreBounce: if ignoreBounce:
glob.y -= Global.main.bounceChange glob.y -= Global.main.bounceChange
drag(delta) drag(delta)
wobble() wobble()
var length = (glob.y - dragger.global_position.y) var length = glob.y - dragger.global_position.y
rotationalDrag(length,delta) rotationalDrag(length, delta)
stretch(length,delta) stretch(length, delta)
if grabDelay > 0: if grabDelay > 0:
grabDelay -= 1 grabDelay -= 1
talkBlink() talkBlink()
animation() animation()
func animation(): func animation():
var speed = max(float(animSpeed), Engine.max_fps * 6.0)
var speed = max(float(animSpeed),Engine.max_fps*6.0)
if animSpeed > 0 and frames > 1: if animSpeed > 0 and frames > 1:
if Global.animationTick % int((speed)/float(animSpeed)) == 0: if Global.animationTick % int((speed) / float(animSpeed)) == 0:
if sprite.frame == frames - 1: if sprite.frame == frames - 1:
sprite.frame = 0 sprite.frame = 0
else: else:
@ -254,18 +264,24 @@ func animation():
if frames > 1: if frames > 1:
remakePolygon() remakePolygon()
func setZIndex(): func setZIndex():
sprite.z_index = z sprite.z_index = z
func talkBlink(): func talkBlink():
var faded = 0.2 * int(Global.main.editMode) var faded = 0.2 * int(Global.main.editMode)
var value = (showOnTalk + (showOnBlink*3)) + (int(Global.speaking)*10) + (int(Global.blink)*20) var value = (
var yes = [0,10,20,30,1,21,12,32,3,13,4,15,26,36,27,38].has(int(value)) (showOnTalk + (showOnBlink * 3)) + (int(Global.speaking) * 10) + (int(Global.blink) * 20)
sprite.self_modulate.a = max(int(yes),faded) )
var yes = [0, 10, 20, 30, 1, 21, 12, 32, 3, 13, 4, 15, 26, 36, 27, 38].has(int(value))
sprite.self_modulate.a = max(int(yes), faded)
func delete(): func delete():
queue_free() queue_free()
func _physics_process(delta): func _physics_process(delta):
if Global.heldSprite == self: if Global.heldSprite == self:
var dir = pressingDirection() var dir = pressingDirection()
@ -276,33 +292,36 @@ func _physics_process(delta):
else: else:
set_physics_process(false) set_physics_process(false)
func pressingDirection(): func pressingDirection():
var dir = Vector2.ZERO var dir = Vector2.ZERO
dir.x = Input.get_action_strength("move_left") - Input.get_action_strength("move_right") dir.x = Input.get_action_strength("move_left") - Input.get_action_strength("move_right")
dir.y = Input.get_action_strength("move_up") - Input.get_action_strength("move_down") dir.y = Input.get_action_strength("move_up") - Input.get_action_strength("move_down")
return dir return dir
func moveSprite(dir): func moveSprite(dir):
if dir != Vector2.ZERO: if dir != Vector2.ZERO:
heldTicks += 1 heldTicks += 1
else: else:
heldTicks = 0 heldTicks = 0
if heldTicks > 30 or heldTicks == 1: if heldTicks > 30 or heldTicks == 1:
var multiplier = 2 var multiplier = 2
if heldTicks == 1: if heldTicks == 1:
multiplier = 1 multiplier = 1
position -= dir * multiplier position -= dir * multiplier
position = Vector2(int(position.x),int(position.y)) position = Vector2(int(position.x), int(position.y))
func moveOrigin(dir): func moveOrigin(dir):
if dir != Vector2.ZERO: if dir != Vector2.ZERO:
origTick += 1 origTick += 1
else: else:
origTick = 0 origTick = 0
if origTick > 30 or origTick == 1: if origTick > 30 or origTick == 1:
var multiplier = 2 var multiplier = 2
if origTick == 1: if origTick == 1:
@ -310,46 +329,68 @@ func moveOrigin(dir):
offset += dir * multiplier offset += dir * multiplier
position -= dir * multiplier position -= dir * multiplier
offset = Vector2(int(offset.x),int(offset.y)) offset = Vector2(int(offset.x), int(offset.y))
sprite.offset = offset sprite.offset = offset
grabArea.position = (size*-0.5) + offset grabArea.position = (size * -0.5) + offset
func drag(delta): func drag(delta):
if dragSpeed == 0: if dragSpeed == 0:
dragger.global_position = wob.global_position dragger.global_position = wob.global_position
else: else:
dragger.global_position = lerp(dragger.global_position,wob.global_position,1/dragSpeed) dragger.global_position = lerp(dragger.global_position, wob.global_position, 1 / dragSpeed)
dragOrigin.global_position = dragger.global_position dragOrigin.global_position = dragger.global_position
func wobble(): func wobble():
wob.position.x = sin(tick*xFrq)*xAmp if use_midi_wobble:
wob.position.y = sin(tick*yFrq)*yAmp midi_wobble()
else:
free_wobble()
func free_wobble():
wob.position.x = sin(tick * xFrq) * xAmp
wob.position.y = sin(tick * yFrq) * yAmp
func midi_wobble():
var ppqn = 24
var progress = float(tick) / ppqn
var rads = progress * 2 * PI
wob.position.x = cos(rads * xFrq * 10) * xAmp
wob.position.y = cos(rads * yFrq * 10) * yAmp
func rotationalDrag(length, delta):
var yvel = length * rdragStr
func rotationalDrag(length,delta):
var yvel = (length * rdragStr)
#Calculate Max angle #Calculate Max angle
yvel = clamp(yvel,rLimitMin,rLimitMax)
sprite.rotation = lerp_angle(sprite.rotation,deg_to_rad(yvel),0.25)
func stretch(length,delta): yvel = clamp(yvel, rLimitMin, rLimitMax)
var yvel = (length * stretchAmount * 0.01)
var target = Vector2(1.0-yvel,1.0+yvel) sprite.rotation = lerp_angle(sprite.rotation, deg_to_rad(yvel), 0.25)
sprite.scale = lerp(sprite.scale,target,0.5)
func stretch(length, delta):
var yvel = length * stretchAmount * 0.01
var target = Vector2(1.0 - yvel, 1.0 + yvel)
sprite.scale = lerp(sprite.scale, target, 0.5)
func changeCollision(enable): func changeCollision(enable):
grabArea.monitorable = enable grabArea.monitorable = enable
grabArea.monitorable = enable grabArea.monitorable = enable
func changeFrames(): func changeFrames():
sprite.hframes = frames sprite.hframes = frames
sprite.frame = 0 sprite.frame = 0
func remakePolygon(): func remakePolygon():
if remadePolygon: if remadePolygon:
return return
@ -357,35 +398,37 @@ func remakePolygon():
c.queue_free() c.queue_free()
var collider = CollisionShape2D.new() var collider = CollisionShape2D.new()
var shape = RectangleShape2D.new() var shape = RectangleShape2D.new()
shape.size = Vector2(imageSize.y,imageSize.y) shape.size = Vector2(imageSize.y, imageSize.y)
collider.shape = shape collider.shape = shape
collider.position = Vector2(imageSize.x,imageSize.y) * Vector2(0.5,0.5) collider.position = Vector2(imageSize.x, imageSize.y) * Vector2(0.5, 0.5)
grabArea.add_child(collider) grabArea.add_child(collider)
var p = imageSize.y * 0.5 var p = imageSize.y * 0.5
var outline = outlineScene.instantiate() var outline = outlineScene.instantiate()
outline.add_point(Vector2(-p,-p)) outline.add_point(Vector2(-p, -p))
outline.add_point(Vector2(p,-p)) outline.add_point(Vector2(p, -p))
outline.add_point(Vector2(p,p)) outline.add_point(Vector2(p, p))
outline.add_point(Vector2(-p,p)) outline.add_point(Vector2(-p, p))
outline.add_point(Vector2(-p,-p)) outline.add_point(Vector2(-p, -p))
outline.position = collider.position outline.position = collider.position
grabArea.add_child(outline) grabArea.add_child(outline)
remadePolygon = true remadePolygon = true
func setClip(toggle):
if toggle: func setClip(should_clip):
if should_clip:
sprite.clip_children = CLIP_CHILDREN_AND_DRAW sprite.clip_children = CLIP_CHILDREN_AND_DRAW
for node in getAllLinkedSprites(): for node in getAllLinkedSprites():
node.z = z node.z = z
node.setZIndex() node.setZIndex()
else: else:
sprite.clip_children = CLIP_CHILDREN_DISABLED sprite.clip_children = CLIP_CHILDREN_DISABLED
clipped = toggle clipped = should_clip
func getAllLinkedSprites(): func getAllLinkedSprites():
var nodes = get_tree().get_nodes_in_group("saved") var nodes = get_tree().get_nodes_in_group("saved")
@ -395,9 +438,11 @@ func getAllLinkedSprites():
linkedSprites.append(node) linkedSprites.append(node)
return linkedSprites return linkedSprites
func visToggle(keys): func visToggle(keys):
if keys.has(toggle): if keys.has(toggle):
$WobbleOrigin/DragOrigin.visible = !$WobbleOrigin/DragOrigin.visible $WobbleOrigin/DragOrigin.visible = !$WobbleOrigin/DragOrigin.visible
func makeVis(): func makeVis():
$WobbleOrigin/DragOrigin.visible = true $WobbleOrigin/DragOrigin.visible = true