extends Area2D # Nodes var grid var tween var rayFront var rayLeft var rayRight # Enum const DIR_UP = 0 const DIR_RIGHT = 1 const DIR_DOWN = 2 const DIR_LEFT = 3 # Movement var posix var posiy var dirx = 0 var diry = 0 export var dire = DIR_UP var is_moving = false var target_pos func _ready(): grid = get_parent() posix = int (position.x / 64) posiy = int (position.y / 64) turn(dire) tween = $Tween tween.connect_into(self) rayFront = $RayFront rayLeft = $RayLeft rayRight = $RayRight func _physics_process(delta): if is_moving: return if Input.is_action_pressed("ui_left"): dire -= 1 if dire < 0: dire = 3 tween.rotate_char(self, rotation_degrees - 90) elif Input.is_action_pressed("ui_right"): dire += 1 if dire > 3: dire = 0 tween.rotate_char(self, rotation_degrees + 90) turn(dire) posix += dirx posiy += diry target_pos = Vector2(posix * 64 + 32, posiy * 64 + 32) tween.move_char(self, target_pos) is_moving = true tween.start() func _on_tween_completed(o, k): is_moving = false func turn(dir:int): dirx = 0 diry = 0 if dir == DIR_UP: diry -= 1 elif dir == DIR_RIGHT: dirx += 1 elif dir == DIR_DOWN: diry += 1 else: dirx -= 1