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

78 lines
1.6 KiB
GDScript
Raw Normal View History

2024-09-16 23:25:08 +03:00
class_name Player
extends CharacterBody2D
@onready var raycast: RayCast2D = $RayCast2D
@onready var tile_map: MainLevel = $"../TileMap"
2024-09-16 23:25:08 +03:00
@export var speed: float = 40
@export var respawn_point: Marker2D
2024-09-16 00:32:56 +03:00
const TILE_SIZE = 8
var is_moving = false
2024-09-16 23:25:08 +03:00
var should_move = false
2024-09-16 00:32:56 +03:00
var input_dir: Vector2
func _ready():
2024-09-16 23:25:08 +03:00
_respawn()
pass
2024-09-16 00:32:56 +03:00
func _process(delta):
_try_interact()
pass
func _physics_process(delta):
_try_move()
2024-09-16 23:25:08 +03:00
func _respawn():
position = respawn_point.position
2024-09-16 00:32:56 +03:00
func _try_move():
2024-09-16 23:25:08 +03:00
should_move = false
if Input.is_action_pressed("move_up"):
2024-09-16 00:32:56 +03:00
input_dir = Vector2.UP
2024-09-16 23:25:08 +03:00
should_move = true
elif Input.is_action_pressed("move_right"):
2024-09-16 00:32:56 +03:00
input_dir = Vector2.RIGHT
2024-09-16 23:25:08 +03:00
should_move = true
elif Input.is_action_pressed("move_down"):
2024-09-16 00:32:56 +03:00
input_dir = Vector2.DOWN
2024-09-16 23:25:08 +03:00
should_move = true
elif Input.is_action_pressed("move_left"):
2024-09-16 00:32:56 +03:00
input_dir = Vector2.LEFT
2024-09-16 23:25:08 +03:00
should_move = true
2024-09-16 23:25:08 +03:00
if should_move and !is_moving:
2024-09-16 00:32:56 +03:00
raycast.target_position = input_dir * 8
2024-09-16 23:25:08 +03:00
raycast.force_raycast_update()
2024-09-16 00:32:56 +03:00
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
2024-09-16 23:25:08 +03:00
_post_movement_check()
2024-09-16 00:32:56 +03:00
)
2024-09-16 23:25:08 +03:00
func _post_movement_check():
var is_death_tile = tile_map.is_death_tile(global_position)
if is_death_tile:
2024-09-16 23:25:08 +03:00
die()
func die():
_respawn()
func _try_interact():
2024-09-16 23:25:08 +03:00
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