PneumaticPlaything/Scripts/MovementRow.gd

79 lines
2.3 KiB
GDScript

extends Panel
@export var movement_bit : int = 0;
@export var movement_name : String = "Name"
@export var flow_path : String = "../../../../../../HelenHouseFlyout/FlowControls/"
@export var recording : bool = false
@export var current_index : int = 0;
var in_flow : float = 1.0
var out_flow : float = 1.0
var key_binding : InputEventKey = InputEventKey.new()
var binding : bool = false
var held_on_previous_frame : bool = false
signal movement_in(movement, rate)
signal movement_out(movement, rate)
func update_text() -> void:
$Button.text = "%d - %s (%s)" % [movement_bit, movement_name, key_binding.as_text() if key_binding.keycode != 0 else "Unbound"]
func _update_in_flow(new_value: float) -> void:
in_flow = new_value
func _update_out_flow(new_value: float) -> void:
out_flow = new_value
func _ready() -> void:
var animatronic = get_node("../../../../../../SubViewport/HelenHouse/3stHelen")
if (flow_path != "None"):
var if_node = get_node(flow_path + "InFlows/" + movement_name.replace(" ", "") + "Flow")
var of_node = get_node(flow_path + "OutFlows/" + movement_name.replace(" ", "") + "Flow")
if_node.value_updated.connect(self._update_in_flow)
of_node.value_updated.connect(self._update_out_flow)
in_flow = if_node.value
out_flow = of_node.value
movement_in.connect(animatronic._movement_in)
movement_out.connect(animatronic._movement_out)
movement_in.connect(self._movement_in)
movement_out.connect(self._movement_out)
update_text()
func _process(delta: float) -> void:
if (binding): return
if (Input.is_key_pressed(key_binding.keycode)):
if (!held_on_previous_frame):
movement_in.emit(movement_name, in_flow)
held_on_previous_frame = true;
else:
if (held_on_previous_frame):
movement_out.emit(movement_name, out_flow)
held_on_previous_frame = false;
func _movement_in(movement, rate):
$ActiveBG.visible = true
func _movement_out(movement, rate):
$ActiveBG.visible = false
func _on_button_pressed() -> void:
if (recording): return
if (binding):
update_text()
binding = false
return
if (key_binding.keycode == 0):
$Button.text = "Press a key to bind."
binding = true
else:
key_binding.keycode = 0
update_text()
func _input(event: InputEvent) -> void:
if (event is InputEventKey && binding):
if (event.keycode != KEY_ESCAPE):
key_binding = event
binding = false
update_text()
return