revo-jailbreak/objects/enemy/rolling_fiend.gd
2023-04-20 04:06:29 -04:00

39 lines
1.2 KiB
GDScript

extends "res://objects/enemy/enemy.gd"
const DIRS = [Vector2.DOWN, Vector2.RIGHT, Vector2.UP, Vector2.LEFT]
export var move_speed: float = 0.0
export var clockwise: bool = false
onready var floor_test = Physics2DShapeQueryParameters.new()
onready var test_shape = $FloorTestShape
var floor_direction = 0
func _ready():
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
#Easy mode
if Game.is_easy_mode:
move_speed *= Game.easy_mode_speed_factor
func _physics_process(delta):
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
if Engine.time_scale > 0.5: #fixes stuttering when slowing down time
position += DIRS[posmod(floor_direction + offset, DIRS.size())] * move_speed * delta
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