sokoban
Diffstat (limited to 'Player.gd')
| -rw-r--r-- | Player.gd | 159 |
1 files changed, 0 insertions, 159 deletions
diff --git a/Player.gd b/Player.gd deleted file mode 100644 index 6514c08..0000000 --- a/Player.gd +++ /dev/null @@ -1,159 +0,0 @@ -extends CollisionObject2D - -signal level_reset_requested - -const GRID_SIZE = 16 - -var moves = 0 setget set_moves - -var last_move = null -var last_move_crate = null -var world: Node2D -var count = 0 -var started = false -var won := false - -signal won - -onready var cam = $Camera2D -onready var tween = $Tween -onready var ray = $RayCast2D -onready var dir = $Direction -onready var anitree: AnimationTree = $AnimationTree -onready var anistate = anitree.get("parameters/playback") - - -func _ready(): - anitree.active = true - - -func initialize(): - won = false - set_physics_process(false) - yield(get_tree().create_timer(2), "timeout") - set_physics_process(true) - - -func _physics_process(_delta): - if Input.is_action_just_pressed("level_reload"): - emit_signal("level_reset_requested") - anistate.travel("Idle") - set_moves(0) - last_move = null - last_move_crate = null - return - - if not world: - return - - if Utils.stop_input: - return - - if get_parent().get_parent().just_started: - return - - if world.over: - anistate.travel("Idle") - return - - if tween.is_active(): - return - - var move_intent = Vector2.ZERO - - move_intent = Input.get_vector("ui_left", "ui_right", "ui_up", "ui_down") - - if Input.is_action_just_pressed("undo_last_move"): - if last_move != null: - self.position -= last_move * GRID_SIZE - if last_move_crate != null: - last_move_crate.position -= last_move * GRID_SIZE - set_moves(moves - 1) - last_move = null - last_move_crate = null - return - - if move_intent.x != 0 && move_intent.y != 0: - move_intent = Vector2.ZERO - - if move_intent != Vector2.ZERO: - if not started: - get_parent().get_parent().start_stopwatch() - started = true - var offset = move_intent * GRID_SIZE - - apply_rotation(offset) - - if ray.is_colliding(): - var collider = ray.get_collider() - if collider.is_in_group("crates"): - if !collider.push(offset): - anistate.travel("Idle") - return - - last_move_crate = collider - - else: - anistate.travel("Idle") - return - - else: - last_move_crate = null - - set_moves(moves + 1) - last_move = move_intent - - tween.interpolate_property( - self, - "position", - self.position, - self.position + offset, - 0.35, - Tween.TRANS_LINEAR, - Tween.EASE_IN_OUT - ) - tween.start() - - SoundFx.play("walk", -10, rand_range(.9, 1.1)) - anistate.travel("Run") - anitree.set("parameters/Run/blend_position", move_intent) - else: - anistate.travel("Idle") - - -func set_moves(new_moves: int): - moves = new_moves - $"../../CanvasLayer/HUD/MovesLabel".text = "Moves: " + str(moves) - - -func apply_rotation(offset: Vector2): - ray.cast_to = offset - - var new_rot := offset.angle() - - ray.force_raycast_update() - - var future_rot := lerp_angle(dir.rotation, new_rot, 1) - - if future_rot != dir.rotation: - tween.interpolate_property( - dir, "rotation", dir.rotation, future_rot, 0.3, Tween.TRANS_LINEAR, Tween.EASE_IN_OUT - ) - tween.start() - - -func _over(): - if won: - return - emit_signal("won") - won = true - - -func _on_Player_body_exited(_body): - pass - # if not body.name == "Player" and not body.is_in_group("crates"): - # print("emitting won") - # if won: - # return - # emit_signal("won") - # won = true |