50 lines
1.2 KiB
GDScript3
50 lines
1.2 KiB
GDScript3
|
extends CharacterBody2D
|
||
|
|
||
|
@export var move_speed = 100 # Pixels per second
|
||
|
@export var tile_size = 32 # Size of each "space" in pixels
|
||
|
|
||
|
var is_moving = false
|
||
|
var target_position = Vector2.ZERO
|
||
|
|
||
|
# Called when the node is added to the scene
|
||
|
func _ready():
|
||
|
target_position = position
|
||
|
|
||
|
# Called every frame
|
||
|
func _process(delta):
|
||
|
if not is_moving:
|
||
|
handle_input()
|
||
|
|
||
|
if is_moving:
|
||
|
move_towards_target(delta)
|
||
|
|
||
|
# Handle player input for movement
|
||
|
func handle_input():
|
||
|
var direction = Vector2.ZERO
|
||
|
|
||
|
if Input.is_action_just_pressed("ui_right"):
|
||
|
direction.x += 1
|
||
|
elif Input.is_action_just_pressed("ui_left"):
|
||
|
direction.x -= 1
|
||
|
elif Input.is_action_just_pressed("ui_down"):
|
||
|
direction.y += 1
|
||
|
elif Input.is_action_just_pressed("ui_up"):
|
||
|
direction.y -= 1
|
||
|
|
||
|
if direction != Vector2.ZERO:
|
||
|
set_target_position(direction)
|
||
|
|
||
|
# Set the target position for movement
|
||
|
func set_target_position(direction: Vector2):
|
||
|
target_position = position + direction * tile_size
|
||
|
is_moving = true
|
||
|
|
||
|
# Move the player towards the target position
|
||
|
func move_towards_target(delta):
|
||
|
var distance = move_speed * delta
|
||
|
position = position.move_toward(target_position, distance)
|
||
|
|
||
|
if position.distance_to(target_position) < 1:
|
||
|
position = target_position
|
||
|
is_moving = false
|