rolling fiend mark 3....

This commit is contained in:
Haze Weathers 2023-02-24 17:37:29 -05:00
parent 58eae4a8f7
commit 153f11aea2

View file

@ -1,30 +1,33 @@
extends "res://objects/enemy/enemy.gd" 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 move_speed: float = 0.0
export var clockwise: bool = false export var clockwise: bool = false
onready var floor_test = Physics2DShapeQueryParameters.new() onready var floor_test = Physics2DShapeQueryParameters.new()
onready var test_shape = $FloorTestShape onready var test_shape = $FloorTestShape
var floor_direction = Vector2.ZERO var floor_direction = 0
func _ready(): func _ready():
if clockwise: if clockwise:
$AnimatedSprite.flip_h = true $AnimatedSprite.flip_h = true
floor_test.set_shape(test_shape.shape) floor_test.set_shape(test_shape.shape)
floor_test.collision_layer = 1 floor_test.collision_layer = 1
for dir in [Vector2.DOWN, Vector2.UP, Vector2.LEFT, Vector2.RIGHT]: for i in DIRS.size():
if is_on_surface(dir): if is_on_surface(DIRS[i]):
floor_direction = dir floor_direction = i
break break
func _physics_process(delta): func _physics_process(delta):
var rot_dir = -1.5708 if clockwise else 1.5708 var offset = -1 if clockwise else 1
if !is_on_surface(floor_direction): var move_dir = posmod(floor_direction + offset, DIRS.size())
floor_direction = floor_direction.rotated(-rot_dir) if !is_on_surface(DIRS[floor_direction]):
elif is_on_surface(floor_direction.rotated(rot_dir)): floor_direction = posmod(floor_direction - offset, DIRS.size())
floor_direction = floor_direction.rotated(rot_dir) elif is_on_surface(DIRS[move_dir]):
position += floor_direction.rotated(rot_dir) * move_speed * delta floor_direction = move_dir
position += DIRS[posmod(floor_direction + offset, DIRS.size())] * move_speed * delta
func is_on_surface(dir): func is_on_surface(dir):
var space_state = get_world_2d().direct_space_state var space_state = get_world_2d().direct_space_state