extends Area2D var direction = Vector2() const DEG_UP = 0 const DEG_RIGHT = 90 const DEG_DOWN = 180 const DEG_LEFT = 270 const DEG_LIST = [DEG_UP, DEG_RIGHT, DEG_DOWN, DEG_LEFT] const DIR_UP = 0 const DIR_RIGHT = 1 const DIR_DOWN = 2 const DIR_LEFT = 3 var posix var posiy var dirx = 0 var diry = 0 var dire = DIR_UP var grid var is_moving = false var tween var target_pos = Vector2() var blocks = [] var is_blocked:bool = false var rayFront var rayLeft var rayRight func _ready(): grid = get_parent() posix = int (position.x / 64) posiy = int (position.y / 64) turn(DIR_UP) tween = $Tween tween.connect_into(self) rayFront = $RayFront rayLeft = $RayLeft rayRight = $RayRight func _physics_process(delta): if Input.is_action_pressed("ui_left"): if !is_moving: dire -= 1 if dire < 0: dire = 3 tween.rotate_char(self, rotation_degrees - 90) is_moving = true elif Input.is_action_pressed("ui_right"): if !is_moving: dire += 1 if dire > 3: dire = 0 tween.rotate_char(self, rotation_degrees + 90) is_moving = true if Input.is_action_pressed("ui_up"): turn(dire) if !is_moving and !rayFront.is_colliding(): posix += dirx posiy += diry target_pos = Vector2(posix * 64 + 32, posiy * 64 + 32) tween.move_char(self, target_pos) is_moving = true 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