2024-09-16 23:25:08 +03:00
|
|
|
class_name Box
|
|
|
|
extends PuzzleElement
|
|
|
|
|
|
|
|
@onready var raycast: RayCast2D = $RayCast2D
|
|
|
|
@onready var animation_player: AnimationPlayer = $AnimationPlayer
|
|
|
|
@onready var audio_player: AudioStreamPlayer2D = $AudioStreamPlayer2D
|
|
|
|
@onready var manager: BoxPuzzle = $"../"
|
2024-09-17 00:49:40 +03:00
|
|
|
@onready var tile_map: MainLevel = get_tree().root.get_child(0).get_node("TileMap")
|
2024-09-16 23:25:08 +03:00
|
|
|
|
|
|
|
const TILE_SIZE = 8
|
|
|
|
|
|
|
|
var is_finished = false
|
|
|
|
var is_moving = false
|
|
|
|
var input_dir: Vector2
|
|
|
|
|
|
|
|
func _ready():
|
|
|
|
pass
|
|
|
|
|
|
|
|
func _process(delta):
|
|
|
|
pass
|
|
|
|
|
|
|
|
func _physics_process(delta):
|
|
|
|
pass
|
|
|
|
|
|
|
|
func interact(player: Player):
|
|
|
|
if !is_finished and !is_moving:
|
|
|
|
input_dir = player.input_dir
|
|
|
|
raycast.target_position = player.input_dir * 8
|
|
|
|
raycast.force_raycast_update()
|
|
|
|
|
2024-09-17 00:49:40 +03:00
|
|
|
if tile_map.is_death_tile(global_position + raycast.target_position):
|
|
|
|
return
|
|
|
|
|
2024-09-16 23:25:08 +03:00
|
|
|
var collider = raycast.get_collider()
|
|
|
|
var is_switch = collider is BoxSwitch
|
|
|
|
if raycast.is_colliding() and not is_switch:
|
|
|
|
return
|
|
|
|
|
|
|
|
is_moving = true
|
|
|
|
audio_player.play()
|
|
|
|
var tween = create_tween()
|
|
|
|
tween.tween_property(self, "position", position + input_dir * TILE_SIZE, 0.45)
|
|
|
|
tween.tween_callback(func():
|
|
|
|
is_moving = false
|
|
|
|
if is_switch:
|
|
|
|
complete()
|
|
|
|
)
|
|
|
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
func _check_completion():
|
|
|
|
pass
|
|
|
|
|
|
|
|
func complete():
|
|
|
|
if is_finished:
|
|
|
|
return
|
|
|
|
|
|
|
|
animation_player.play(&"complete")
|
|
|
|
is_finished = true
|