Table of Contents
src / stages / gimmicks / pulley / pulley.gd
Attached Scenes
Code
extends Node2D
enum State { IDLE, MOVING, MOVED }
@export var state : State = State.IDLE
@export var force := Vector2(4000, 0)
@onready var player : Player = null
var prev_position : Vector2
func _ready() -> void:
set_prev_position()
func set_prev_position() -> void:
prev_position = %Platform.global_position
func _physics_process(_delta: float) -> void:
if player and player.state != Player.State.FAILED:
var diff = %Platform.global_position - prev_position
player.global_position += diff
set_prev_position()
func reset() -> void:
play(&'RESET')
unlaunchable()
func move() -> void:
play(&'move')
func rewind() -> void:
play(&'rewind')
func launchable() -> void:
if player: player.jump_boost = force
func unlaunchable() -> void:
if player: player.jump_boost = Vector2(0, 0)
func play(key: StringName) -> void:
%AnimationPlayer.play(key)
func _on_area_2d_area_entered(area: Area2D) -> void:
player = area.owner as Player
if state == State.IDLE: move()
func _on_area_2d_area_exited(_area: Area2D) -> void:
player = null
if state == State.MOVED: rewind()
func _on_animation_player_animation_finished(anim_name: StringName) -> void:
match anim_name:
&'move': rewind()
&'rewind': if player: move()