generated from Nekojimi/GodotTemplate
52 lines
1.4 KiB
GDScript3
52 lines
1.4 KiB
GDScript3
extends Node2D
|
|
|
|
|
|
# Declare member variables here. Examples:
|
|
# var a: int = 2
|
|
# var b: String = "text"
|
|
|
|
var gridPos: Vector2 = Vector2(0,0)
|
|
var lastPos: Vector2 = Vector2(0,0)
|
|
var anim : float = 0.0
|
|
|
|
const ANIM_SPEED : float = 0.02
|
|
|
|
# Called when the node enters the scene tree for the first time.
|
|
func _ready() -> void:
|
|
gridPos = get_parent().world_to_map(position)
|
|
|
|
|
|
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
|
func _process(delta: float) -> void:
|
|
var duration: float = (lastPos - gridPos).length() * ANIM_SPEED
|
|
if (duration <= 0):
|
|
anim = 1.0
|
|
if (anim < 1.0):
|
|
anim = min(anim + delta / duration, 1.0)
|
|
|
|
position = get_parent().map_pos(lerp(lastPos,gridPos,anim))
|
|
|
|
func _input(event: InputEvent) -> void:
|
|
if event.is_action_pressed("game_up"):
|
|
move(Vector2(0,-1))
|
|
elif event.is_action_pressed("game_up_left"):
|
|
move(Vector2(-1,-1))
|
|
elif event.is_action_pressed("game_left"):
|
|
move(Vector2(-1,0))
|
|
elif event.is_action_pressed("game_down_left"):
|
|
move(Vector2(-1,1))
|
|
elif event.is_action_pressed("game_down"):
|
|
move(Vector2(0,1))
|
|
elif event.is_action_pressed("game_down_right"):
|
|
move(Vector2(1,1))
|
|
elif event.is_action_pressed("game_right"):
|
|
move(Vector2(1,0))
|
|
elif event.is_action_pressed("game_up_right"):
|
|
move(Vector2(1,-1))
|
|
|
|
func move(dir: Vector2):
|
|
lastPos = gridPos
|
|
gridPos = get_parent().find_move(gridPos,dir)
|
|
anim = 0
|
|
|