|
|
|
@@ -12,39 +12,67 @@ signal chain_updated(count: int, bonus: float)
|
|
|
|
|
|
|
|
|
|
var machine: MovementStateMachine
|
|
|
|
|
var jump_buffered: bool = false
|
|
|
|
|
var _ready_ran: bool = false
|
|
|
|
|
var _machine: MovementStateMachine = null
|
|
|
|
|
|
|
|
|
|
# ── Helpers ───────────────────────────────────────────────────────────────────
|
|
|
|
|
func _ensure_machine() -> MovementStateMachine:
|
|
|
|
|
if typeof(_machine) != TYPE_NIL and is_instance_valid(_machine):
|
|
|
|
|
return _machine as MovementStateMachine
|
|
|
|
|
var candidates := [
|
|
|
|
|
get_node("MovementStateMachine") if has_node("MovementStateMachine") else null,
|
|
|
|
|
_machine if is_instance_valid(_machine) and _machine.has_method("register_chain_mechanic") else null,
|
|
|
|
|
]
|
|
|
|
|
for c in candidates:
|
|
|
|
|
if c and (c is MovementStateMachine or (c.has_method("switch_to") and c.has_method("register_chain_mechanic"))):
|
|
|
|
|
_machine = c
|
|
|
|
|
return _machine
|
|
|
|
|
return null
|
|
|
|
|
|
|
|
|
|
# ── Input references ─────────────────────────────────────────────────────────
|
|
|
|
|
func _unhandled_input(event: InputEvent) -> void:
|
|
|
|
|
if event.is_action_pressed("ui_accept"):
|
|
|
|
|
# Space / jump
|
|
|
|
|
pass
|
|
|
|
|
_machine.input_jump_just_pressed = Input.is_action_just_pressed("jump")
|
|
|
|
|
_machine.input_jump_pressed = Input.is_action_pressed("jump")
|
|
|
|
|
_machine.input_sprint = Input.is_action_pressed("sprint")
|
|
|
|
|
_machine.input_crouch = Input.is_action_pressed("crouch")
|
|
|
|
|
_machine.input_dash = Input.is_action_just_pressed("dash")
|
|
|
|
|
var node := _ensure_machine()
|
|
|
|
|
if not node:
|
|
|
|
|
return
|
|
|
|
|
node.input_jump_just_pressed = Input.is_action_just_pressed("jump")
|
|
|
|
|
node.input_jump_pressed = Input.is_action_pressed("jump")
|
|
|
|
|
node.input_sprint = Input.is_action_pressed("sprint")
|
|
|
|
|
node.input_crouch = Input.is_action_pressed("crouch")
|
|
|
|
|
node.input_dash = Input.is_action_just_pressed("dash")
|
|
|
|
|
var input_v := Input.get_vector("move_left", "move_right", "move_forward", "move_back")
|
|
|
|
|
_machine.input_dir = input_v
|
|
|
|
|
node.input_dir = input_v
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@onready var _machine = get_node("MovementStateMachine")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func _ready() -> void:
|
|
|
|
|
_machine.player = self
|
|
|
|
|
_machine.params = params
|
|
|
|
|
if _ready_ran:
|
|
|
|
|
return
|
|
|
|
|
_ready_ran = true
|
|
|
|
|
var node := _ensure_machine()
|
|
|
|
|
if node:
|
|
|
|
|
var sm := node
|
|
|
|
|
sm.player = self
|
|
|
|
|
sm.params = params
|
|
|
|
|
# Mirror signal up
|
|
|
|
|
_machine.movement_event.connect(func(ev, data):
|
|
|
|
|
sm.movement_event.connect(func(ev, data):
|
|
|
|
|
if ev == "chain_updated":
|
|
|
|
|
chain_updated.emit(data.count, data.bonus)
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func _process(_delta: float) -> void:
|
|
|
|
|
_machine.input_jump_just_pressed = Input.is_action_just_pressed("jump") and not _machine.input_jump_pressed
|
|
|
|
|
_machine.input_jump_pressed = Input.is_action_pressed("jump")
|
|
|
|
|
_machine.input_sprint = Input.is_action_pressed("sprint")
|
|
|
|
|
_machine.input_crouch = Input.is_action_pressed("crouch")
|
|
|
|
|
_machine.input_dash = Input.is_action_just_pressed("dash") and not _machine.input_dash
|
|
|
|
|
var input_v := Input.get_vector("move_left", "move_right", "move_forward", "move_back")
|
|
|
|
|
_machine.input_dir = input_v
|
|
|
|
|
var node := _ensure_machine()
|
|
|
|
|
if not node:
|
|
|
|
|
return
|
|
|
|
|
# Keep one consistent source of truth for inputs
|
|
|
|
|
node.input_jump_just_pressed = Input.is_action_just_pressed("jump") and not node.input_jump_pressed
|
|
|
|
|
node.input_jump_pressed = Input.is_action_pressed("jump")
|
|
|
|
|
node.input_sprint = Input.is_action_pressed("sprint")
|
|
|
|
|
node.input_crouch = Input.is_action_pressed("crouch")
|
|
|
|
|
node.input_dash = Input.is_action_just_pressed("dash") and not node.input_dash
|
|
|
|
|
node.input_dir = Input.get_vector("move_left", "move_right", "move_forward", "move_back")
|
|
|
|
|