This repository has been archived on 2024-09-30. You can view files and clone it, but cannot push or open issues/pull-requests.
gbjam12/entities/player/player.gd

80 lines
1.8 KiB
GDScript

class_name Player
extends CharacterBody2D
@onready var raycast: RayCast2D = $RayCast2D
@onready var tile_map: TileMapLayer = $"../TileMapLayer"
@export var speed: float = 40
@export var respawn_point: Marker2D
const TILE_SIZE = 8
var is_moving = false
var should_move = false
var input_dir: Vector2
func _ready():
print(tile_map)
_respawn()
pass
func _process(delta):
_try_interact()
pass
func _physics_process(delta):
_try_move()
func _respawn():
position = respawn_point.position
func _try_move():
should_move = false
if Input.is_action_pressed("move_up"):
input_dir = Vector2.UP
should_move = true
elif Input.is_action_pressed("move_right"):
input_dir = Vector2.RIGHT
should_move = true
elif Input.is_action_pressed("move_down"):
input_dir = Vector2.DOWN
should_move = true
elif Input.is_action_pressed("move_left"):
input_dir = Vector2.LEFT
should_move = true
if should_move and !is_moving:
raycast.target_position = input_dir * 8
raycast.force_raycast_update()
if raycast.is_colliding():
return
is_moving = true
var tween = create_tween()
tween.tween_property(self, "position", position + input_dir * TILE_SIZE, 0.25)
tween.tween_callback(func():
is_moving = false
_post_movement_check()
)
func _post_movement_check():
var current_tile: Vector2i = tile_map.local_to_map(tile_map.to_local(global_position))
var tile_data: TileData = tile_map.get_cell_tile_data(current_tile)
if tile_data and tile_data.get_custom_data("death"):
die()
func die():
_respawn()
func _try_interact():
raycast.target_position = input_dir * 8
raycast.force_raycast_update()
var collider = raycast.get_collider()
if Input.is_action_just_pressed("attack") and collider:
if collider is PuzzleElement:
(collider as PuzzleElement).interact(self)
pass
pass