diff --git a/graphics/enemy/roller_fiend.png b/graphics/enemy/roller_fiend.png index 7562809..5a929ad 100644 Binary files a/graphics/enemy/roller_fiend.png and b/graphics/enemy/roller_fiend.png differ diff --git a/maps/cave.tscn b/maps/cave.tscn index 7bb31ca..2baeccd 100644 --- a/maps/cave.tscn +++ b/maps/cave.tscn @@ -305,28 +305,28 @@ right_down_boundry = 3.0 speed = 60 [node name="RollingFiend" parent="Enemies" instance=ExtResource( 13 )] -position = Vector2( 144, 96 ) +position = Vector2( 144, 100 ) [node name="RollingFiend3" parent="Enemies" instance=ExtResource( 13 )] -position = Vector2( 136, 24 ) +position = Vector2( 128, 28 ) [node name="RollingFiend4" parent="Enemies" instance=ExtResource( 13 )] -position = Vector2( 168, 40 ) +position = Vector2( 168, 42 ) [node name="RollingFiend6" parent="Enemies" instance=ExtResource( 13 )] -position = Vector2( 384, 40 ) +position = Vector2( 384, 44 ) [node name="RollingFiend7" parent="Enemies" instance=ExtResource( 13 )] -position = Vector2( 440, 88 ) +position = Vector2( 440, 92 ) [node name="RollingFiend8" parent="Enemies" instance=ExtResource( 13 )] -position = Vector2( 584, 24 ) +position = Vector2( 584, 28 ) [node name="RollingFiend10" parent="Enemies" instance=ExtResource( 13 )] -position = Vector2( 608, 120 ) +position = Vector2( 608, 124 ) [node name="RollingFiend2" parent="Enemies" instance=ExtResource( 13 )] -position = Vector2( 80, 144 ) +position = Vector2( 80, 148 ) [node name="Tentacle2" parent="Enemies" instance=ExtResource( 16 )] position = Vector2( 176, 104 ) diff --git a/objects/enemy/rolling_fiend.gd b/objects/enemy/rolling_fiend.gd index ca34a78..41c772d 100644 --- a/objects/enemy/rolling_fiend.gd +++ b/objects/enemy/rolling_fiend.gd @@ -1,22 +1,22 @@ extends "res://objects/enemy/enemy.gd" export var move_speed: float = 0.0 +export var clockwise: bool = false -var move_dir: Vector2 = Vector2(-1.0, 0.0) +onready var floor_test = Physics2DShapeQueryParameters.new() -onready var casts = $Raycasts -onready var wall_cast = $Raycasts/WallCast -onready var floor_cast = $Raycasts/FloorCast +var floor_direction = Vector2.DOWN + +func _ready(): + if clockwise: + $AnimatedSprite.flip_h = true + floor_test.set_shape($FloorTestShape.shape) + floor_test.collision_layer = 1 func _physics_process(delta): - position += move_dir * move_speed * delta - - var rotation_change = -1.5708 - if not floor_cast.is_colliding(): - casts.rotation += rotation_change - position -= move_dir - move_dir = move_dir.rotated(rotation_change) - position += move_dir - elif wall_cast.is_colliding(): - casts.rotation -= rotation_change - move_dir = move_dir.rotated(-rotation_change) + var rot_dir = -1.5708 if clockwise else 1.5708 + var space_state = get_world_2d().direct_space_state + floor_test.transform = global_transform.translated(floor_direction) + if space_state.collide_shape(floor_test, 1).empty(): + floor_direction = floor_direction.rotated(-rot_dir) + position += floor_direction.rotated(rot_dir) * move_speed * delta diff --git a/objects/enemy/rolling_fiend.tscn b/objects/enemy/rolling_fiend.tscn index 23fb04b..ab3a1c9 100644 --- a/objects/enemy/rolling_fiend.tscn +++ b/objects/enemy/rolling_fiend.tscn @@ -1,9 +1,12 @@ -[gd_scene load_steps=9 format=2] +[gd_scene load_steps=10 format=2] [ext_resource path="res://graphics/enemy/roller_fiend.png" type="Texture" id=2] [ext_resource path="res://objects/enemy/rolling_fiend.gd" type="Script" id=3] [ext_resource path="res://scripts/1px_border.gdshader" type="Shader" id=4] +[sub_resource type="RectangleShape2D" id=8] +extents = Vector2( 4, 4 ) + [sub_resource type="ShaderMaterial" id=5] shader = ExtResource( 4 ) shader_param/border_color = Color( 0, 0, 0, 1 ) @@ -26,38 +29,25 @@ animations = [ { } ] [sub_resource type="RectangleShape2D" id=4] -extents = Vector2( 4.0094, 4.0094 ) +extents = Vector2( 4, 4 ) [node name="RollingFiend" type="Node2D" groups=["enemy"]] script = ExtResource( 3 ) score_for_killing = 40 move_speed = 50.0 +[node name="FloorTestShape" type="CollisionShape2D" parent="."] +shape = SubResource( 8 ) + [node name="AnimatedSprite" type="AnimatedSprite" parent="."] material = SubResource( 5 ) -position = Vector2( 0, 1 ) frames = SubResource( 3 ) +frame = 1 playing = true [node name="Hitbox" type="Area2D" parent="."] -position = Vector2( 0, 1 ) [node name="CollisionShape2D" type="CollisionShape2D" parent="Hitbox"] -position = Vector2( -0.010025, 0.0104442 ) -rotation = -0.020475 shape = SubResource( 4 ) -[node name="Raycasts" type="Node2D" parent="."] -position = Vector2( 0, 1 ) - -[node name="WallCast" type="RayCast2D" parent="Raycasts"] -position = Vector2( -7, 7 ) -enabled = true -cast_to = Vector2( 0, -10 ) - -[node name="FloorCast" type="RayCast2D" parent="Raycasts"] -position = Vector2( -7, 8 ) -enabled = true -cast_to = Vector2( 10, 0 ) - [connection signal="area_entered" from="Hitbox" to="." method="_on_Area2D_area_entered"]