extends "res://objects/enemy/enemy.gd" const DIRS = [Vector2.DOWN, Vector2.RIGHT, Vector2.UP, Vector2.LEFT] export var move_speed: float = 50.0 export var clockwise: bool = false onready var floor_test = Physics2DShapeQueryParameters.new() onready var test_shape = $FloorTestShape var floor_direction: int = 0 var movement_accumulator: float = 0.0 func _ready(): # scale animation to move speed $AnimatedSprite.speed_scale = inverse_lerp(0.0, 50.0, move_speed) if clockwise: $AnimatedSprite.flip_h = true floor_test.set_shape(test_shape.shape) floor_test.collision_layer = 1 for i in DIRS.size(): if is_on_surface(DIRS[i]): floor_direction = i break # adjust to difficulty move_speed *= Game.enemy_speed_factor func _physics_process(delta): movement_accumulator += move_speed * delta while movement_accumulator >= 1.0: var offset = 1 if clockwise else -1 var move_dir = posmod(floor_direction + offset, DIRS.size()) if !is_on_surface(DIRS[floor_direction]): floor_direction = posmod(floor_direction - offset, DIRS.size()) elif is_on_surface(DIRS[move_dir]): floor_direction = move_dir position += DIRS[posmod(floor_direction + offset, DIRS.size())] movement_accumulator -= 1.0 func is_on_surface(dir): var space_state = get_world_2d().direct_space_state floor_test.transform = test_shape.global_transform.translated(dir) return space_state.collide_shape(floor_test, 1).size() > 0