Get midi sync working at all.
This commit is contained in:
parent
439be5642d
commit
43b7c5b554
3 changed files with 415 additions and 322 deletions
|
@ -25,7 +25,6 @@ var editMode = true
|
|||
|
||||
@onready var shadow = $shadowSprite
|
||||
|
||||
|
||||
#Scene Reference
|
||||
@onready var spriteObject = preload("res://ui_scenes/selectedSprite/spriteObject.tscn")
|
||||
|
||||
|
@ -55,15 +54,18 @@ var costumeKeys = ["1","2","3","4","5","6","7","8","9","0"]
|
|||
signal spriteVisToggles(keysPressed: Array)
|
||||
signal fatfuckingballs
|
||||
|
||||
|
||||
func _ready():
|
||||
Global.main = self
|
||||
Global.fail = $Failed
|
||||
|
||||
|
||||
Global.connect("startSpeaking", onSpeak)
|
||||
|
||||
ElgatoStreamDeck.on_key_down.connect(changeCostumeStreamDeck)
|
||||
|
||||
OS.open_midi_inputs()
|
||||
print(OS.get_connected_midi_inputs())
|
||||
|
||||
if Saving.settings["newUser"]:
|
||||
_on_load_dialog_file_selected("default")
|
||||
Saving.settings["newUser"] = false
|
||||
|
@ -132,6 +134,7 @@ func _ready():
|
|||
origin.position = s * 0.5
|
||||
camera.position = origin.position
|
||||
|
||||
|
||||
func _process(delta):
|
||||
var hold = origin.get_parent().position.y
|
||||
|
||||
|
@ -152,6 +155,7 @@ func _process(delta):
|
|||
|
||||
followShadow()
|
||||
|
||||
|
||||
func followShadow():
|
||||
shadow.visible = is_instance_valid(Global.heldSprite)
|
||||
if !shadow.visible:
|
||||
|
@ -175,6 +179,7 @@ func isFileSystemOpen():
|
|||
return true
|
||||
return false
|
||||
|
||||
|
||||
#Displays control panel whether or not application is focused
|
||||
func _notification(what):
|
||||
match what:
|
||||
|
@ -188,6 +193,7 @@ func _notification(what):
|
|||
30:
|
||||
onWindowSizeChange()
|
||||
|
||||
|
||||
func onWindowSizeChange():
|
||||
if !saveLoaded:
|
||||
return
|
||||
|
@ -207,6 +213,7 @@ func onWindowSizeChange():
|
|||
pushUpdates.position.y = controlPanel.position.y
|
||||
pushUpdates.position.x = editControls.position.x
|
||||
|
||||
|
||||
func zoomScene():
|
||||
#Handles Zooming
|
||||
if Input.is_action_pressed("control"):
|
||||
|
@ -223,6 +230,7 @@ func zoomScene():
|
|||
|
||||
$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
|
||||
|
@ -239,14 +247,15 @@ func changeZoom():
|
|||
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
|
||||
|
@ -266,9 +275,9 @@ func swapMode():
|
|||
lines.visible = editMode
|
||||
spriteList.visible = editMode
|
||||
|
||||
|
||||
#Adds sprite object to scene
|
||||
func add_image(path):
|
||||
|
||||
var rand = RandomNumberGenerator.new()
|
||||
var id = rand.randi()
|
||||
|
||||
|
@ -282,14 +291,17 @@ func add_image(path):
|
|||
|
||||
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
|
||||
|
||||
|
@ -297,6 +309,7 @@ func _on_save_button_pressed():
|
|||
func _on_load_button_pressed():
|
||||
$LoadDialog.visible = true
|
||||
|
||||
|
||||
#LOAD AVATAR
|
||||
func _on_load_dialog_file_selected(path):
|
||||
var data = Saving.read_save(path)
|
||||
|
@ -368,13 +381,13 @@ func _on_load_dialog_file_selected(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"
|
||||
|
@ -424,6 +437,7 @@ func _on_save_dialog_file_selected(path):
|
|||
|
||||
Global.pushUpdate("Saved avatar at: " + path)
|
||||
|
||||
|
||||
func _on_link_button_pressed():
|
||||
Global.reparentMode = true
|
||||
Global.chain.enable(Global.reparentMode)
|
||||
|
@ -446,11 +460,13 @@ func _on_replace_button_pressed():
|
|||
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
|
||||
|
||||
|
@ -497,18 +513,30 @@ func _on_duplicate_button_pressed():
|
|||
|
||||
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)
|
||||
"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
|
||||
|
@ -529,8 +557,8 @@ func changeCostume(newCostume):
|
|||
|
||||
Global.pushUpdate("Change costume: " + str(newCostume))
|
||||
|
||||
func moveSpriteMenu(delta):
|
||||
|
||||
func moveSpriteMenu(delta):
|
||||
#moves sprite viewer editor thing around
|
||||
|
||||
var size = get_viewport().get_visible_rect().size
|
||||
|
@ -561,7 +589,6 @@ func moveSpriteMenu(delta):
|
|||
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):
|
||||
|
@ -573,7 +600,6 @@ func moveSpriteMenu(delta):
|
|||
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
|
||||
|
@ -585,11 +611,18 @@ 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:
|
||||
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:
|
||||
return
|
||||
|
@ -599,7 +632,6 @@ func _on_background_input_capture_bg_key_pressed(node, keys_pressed):
|
|||
return
|
||||
|
||||
if settingsMenu.awaitingCostumeInput >= 0:
|
||||
|
||||
if keyStrings[0] == "Keycode1":
|
||||
if !settingsMenu.hasMouse:
|
||||
emit_signal("pressedKey")
|
||||
|
@ -608,7 +640,17 @@ func _on_background_input_capture_bg_key_pressed(node, keys_pressed):
|
|||
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] + "\"")
|
||||
Global.pushUpdate(
|
||||
(
|
||||
"Changed costume "
|
||||
+ str(settingsMenu.awaitingCostumeInput + 1)
|
||||
+ ' hotkey from "'
|
||||
+ currentButton
|
||||
+ '" to "'
|
||||
+ keyStrings[0]
|
||||
+ '"'
|
||||
)
|
||||
)
|
||||
emit_signal("pressedKey")
|
||||
|
||||
for key in keyStrings:
|
||||
|
@ -617,15 +659,21 @@ func _on_background_input_capture_bg_key_pressed(node, keys_pressed):
|
|||
changeCostume(i + 1)
|
||||
|
||||
|
||||
|
||||
func bgInputSprite(node, keys_pressed):
|
||||
print("bgInputSprite")
|
||||
if fileSystemOpen:
|
||||
return
|
||||
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))
|
||||
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:
|
||||
emit_signal("fatfuckingballs")
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -43,12 +43,13 @@ var z = 0
|
|||
var heldTicks = 0
|
||||
var dragSpeed = 0
|
||||
|
||||
|
||||
#Origin
|
||||
var origTick = 0
|
||||
var offset = Vector2.ZERO
|
||||
|
||||
#Wobble
|
||||
var use_midi_wobble = true # TODO: Add to settings
|
||||
|
||||
var xFrq = 0.0
|
||||
var xAmp = 0.0
|
||||
|
||||
|
@ -82,8 +83,8 @@ var tick = 0
|
|||
#Vis toggle
|
||||
var toggle = "null"
|
||||
|
||||
func _ready():
|
||||
|
||||
func _ready():
|
||||
Global.main.spriteVisToggles.connect(visToggle)
|
||||
|
||||
var img = Image.new()
|
||||
|
@ -107,7 +108,6 @@ func _ready():
|
|||
var texture = ImageTexture.new()
|
||||
texture = ImageTexture.create_from_image(img)
|
||||
|
||||
|
||||
tex = texture
|
||||
imageData = img
|
||||
|
||||
|
@ -147,7 +147,6 @@ func _ready():
|
|||
if !b:
|
||||
remakePolygon()
|
||||
|
||||
|
||||
add_to_group(str(id))
|
||||
await get_tree().create_timer(0.1).timeout
|
||||
if parentId != null:
|
||||
|
@ -159,10 +158,21 @@ func _ready():
|
|||
|
||||
setClip(clipped)
|
||||
|
||||
|
||||
if Global.filtering:
|
||||
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):
|
||||
var img = Image.new()
|
||||
var err = img.load(pathNew)
|
||||
|
@ -177,11 +187,9 @@ func replaceSprite(pathNew):
|
|||
var texture = ImageTexture.new()
|
||||
texture = ImageTexture.create_from_image(img)
|
||||
|
||||
|
||||
tex = texture
|
||||
imageData = img
|
||||
|
||||
|
||||
sprite.texture = tex
|
||||
|
||||
var bitmap = BitMap.new()
|
||||
|
@ -212,10 +220,12 @@ func replaceSprite(pathNew):
|
|||
if !b:
|
||||
remakePolygon()
|
||||
|
||||
func _process(delta):
|
||||
tick += 1
|
||||
if Global.heldSprite == self:
|
||||
|
||||
func _process(delta):
|
||||
if not use_midi_wobble:
|
||||
tick += 1
|
||||
|
||||
if Global.heldSprite == self:
|
||||
grabArea.visible = true
|
||||
originSprite.visible = true
|
||||
|
||||
|
@ -230,7 +240,7 @@ func _process(delta):
|
|||
drag(delta)
|
||||
wobble()
|
||||
|
||||
var length = (glob.y - dragger.global_position.y)
|
||||
var length = glob.y - dragger.global_position.y
|
||||
|
||||
rotationalDrag(length, delta)
|
||||
stretch(length, delta)
|
||||
|
@ -242,8 +252,8 @@ func _process(delta):
|
|||
|
||||
animation()
|
||||
|
||||
func animation():
|
||||
|
||||
func animation():
|
||||
var speed = max(float(animSpeed), Engine.max_fps * 6.0)
|
||||
if animSpeed > 0 and frames > 1:
|
||||
if Global.animationTick % int((speed) / float(animSpeed)) == 0:
|
||||
|
@ -254,18 +264,24 @@ func animation():
|
|||
if frames > 1:
|
||||
remakePolygon()
|
||||
|
||||
|
||||
func setZIndex():
|
||||
sprite.z_index = z
|
||||
|
||||
|
||||
func talkBlink():
|
||||
var faded = 0.2 * int(Global.main.editMode)
|
||||
var value = (showOnTalk + (showOnBlink*3)) + (int(Global.speaking)*10) + (int(Global.blink)*20)
|
||||
var value = (
|
||||
(showOnTalk + (showOnBlink * 3)) + (int(Global.speaking) * 10) + (int(Global.blink) * 20)
|
||||
)
|
||||
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():
|
||||
queue_free()
|
||||
|
||||
|
||||
func _physics_process(delta):
|
||||
if Global.heldSprite == self:
|
||||
var dir = pressingDirection()
|
||||
|
@ -276,6 +292,7 @@ func _physics_process(delta):
|
|||
else:
|
||||
set_physics_process(false)
|
||||
|
||||
|
||||
func pressingDirection():
|
||||
var dir = Vector2.ZERO
|
||||
|
||||
|
@ -283,6 +300,7 @@ func pressingDirection():
|
|||
dir.y = Input.get_action_strength("move_up") - Input.get_action_strength("move_down")
|
||||
return dir
|
||||
|
||||
|
||||
func moveSprite(dir):
|
||||
if dir != Vector2.ZERO:
|
||||
heldTicks += 1
|
||||
|
@ -297,6 +315,7 @@ func moveSprite(dir):
|
|||
|
||||
position = Vector2(int(position.x), int(position.y))
|
||||
|
||||
|
||||
func moveOrigin(dir):
|
||||
if dir != Vector2.ZERO:
|
||||
origTick += 1
|
||||
|
@ -316,6 +335,7 @@ func moveOrigin(dir):
|
|||
sprite.offset = offset
|
||||
grabArea.position = (size * -0.5) + offset
|
||||
|
||||
|
||||
func drag(delta):
|
||||
if dragSpeed == 0:
|
||||
dragger.global_position = wob.global_position
|
||||
|
@ -323,12 +343,29 @@ func drag(delta):
|
|||
dragger.global_position = lerp(dragger.global_position, wob.global_position, 1 / dragSpeed)
|
||||
dragOrigin.global_position = dragger.global_position
|
||||
|
||||
|
||||
func wobble():
|
||||
if use_midi_wobble:
|
||||
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)
|
||||
var yvel = length * rdragStr
|
||||
|
||||
#Calculate Max angle
|
||||
|
||||
|
@ -336,20 +373,24 @@ func rotationalDrag(length,delta):
|
|||
|
||||
sprite.rotation = lerp_angle(sprite.rotation, deg_to_rad(yvel), 0.25)
|
||||
|
||||
|
||||
func stretch(length, delta):
|
||||
var yvel = (length * stretchAmount * 0.01)
|
||||
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):
|
||||
grabArea.monitorable = enable
|
||||
grabArea.monitorable = enable
|
||||
|
||||
|
||||
func changeFrames():
|
||||
sprite.hframes = frames
|
||||
sprite.frame = 0
|
||||
|
||||
|
||||
func remakePolygon():
|
||||
if remadePolygon:
|
||||
return
|
||||
|
@ -374,8 +415,9 @@ func remakePolygon():
|
|||
|
||||
remadePolygon = true
|
||||
|
||||
func setClip(toggle):
|
||||
if toggle:
|
||||
|
||||
func setClip(should_clip):
|
||||
if should_clip:
|
||||
sprite.clip_children = CLIP_CHILDREN_AND_DRAW
|
||||
|
||||
for node in getAllLinkedSprites():
|
||||
|
@ -385,7 +427,8 @@ func setClip(toggle):
|
|||
else:
|
||||
sprite.clip_children = CLIP_CHILDREN_DISABLED
|
||||
|
||||
clipped = toggle
|
||||
clipped = should_clip
|
||||
|
||||
|
||||
func getAllLinkedSprites():
|
||||
var nodes = get_tree().get_nodes_in_group("saved")
|
||||
|
@ -395,9 +438,11 @@ func getAllLinkedSprites():
|
|||
linkedSprites.append(node)
|
||||
return linkedSprites
|
||||
|
||||
|
||||
func visToggle(keys):
|
||||
if keys.has(toggle):
|
||||
$WobbleOrigin/DragOrigin.visible = !$WobbleOrigin/DragOrigin.visible
|
||||
|
||||
|
||||
func makeVis():
|
||||
$WobbleOrigin/DragOrigin.visible = true
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue