diff --git a/graphics/enemy/roller_fiend.png b/graphics/enemy/roller_fiend.png new file mode 100644 index 0000000..37c0410 Binary files /dev/null and b/graphics/enemy/roller_fiend.png differ diff --git a/graphics/enemy/roller_fiend.png.import b/graphics/enemy/roller_fiend.png.import new file mode 100644 index 0000000..22de4d8 --- /dev/null +++ b/graphics/enemy/roller_fiend.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/roller_fiend.png-2f4ff517749815b6378d9070bb47d63f.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://graphics/enemy/roller_fiend.png" +dest_files=[ "res://.import/roller_fiend.png-2f4ff517749815b6378d9070bb47d63f.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +process/normal_map_invert_y=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/objects/enemy/rolling_fiend.gd b/objects/enemy/rolling_fiend.gd new file mode 100644 index 0000000..ca34a78 --- /dev/null +++ b/objects/enemy/rolling_fiend.gd @@ -0,0 +1,22 @@ +extends "res://objects/enemy/enemy.gd" + +export var move_speed: float = 0.0 + +var move_dir: Vector2 = Vector2(-1.0, 0.0) + +onready var casts = $Raycasts +onready var wall_cast = $Raycasts/WallCast +onready var floor_cast = $Raycasts/FloorCast + +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) diff --git a/objects/enemy/rolling_fiend.tscn b/objects/enemy/rolling_fiend.tscn new file mode 100644 index 0000000..2d0f13c --- /dev/null +++ b/objects/enemy/rolling_fiend.tscn @@ -0,0 +1,53 @@ +[gd_scene load_steps=8 format=2] + +[ext_resource path="res://objects/enemy/enemy.tscn" type="PackedScene" id=1] +[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] + +[sub_resource type="AtlasTexture" id=1] +atlas = ExtResource( 2 ) +region = Rect2( 0, 0, 16, 16 ) + +[sub_resource type="AtlasTexture" id=2] +atlas = ExtResource( 2 ) +region = Rect2( 16, 0, 16, 16 ) + +[sub_resource type="SpriteFrames" id=3] +animations = [ { +"frames": [ SubResource( 1 ), SubResource( 2 ) ], +"loop": true, +"name": "default", +"speed": 10.0 +} ] + +[sub_resource type="RectangleShape2D" id=4] +extents = Vector2( 4, 4 ) + +[node name="RollingFiend" instance=ExtResource( 1 )] +script = ExtResource( 3 ) +move_speed = 50.0 + +[node name="AnimatedSprite" type="AnimatedSprite" parent="." index="0"] +frames = SubResource( 3 ) +frame = 1 +playing = true + +[node name="Hitbox" type="Area2D" parent="." index="1"] + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Hitbox" index="0"] +rotation = -0.020475 +shape = SubResource( 4 ) + +[node name="Raycasts" type="Node2D" parent="." index="2"] + +[node name="WallCast" type="RayCast2D" parent="Raycasts" index="0"] +position = Vector2( -8, 8 ) +enabled = true +cast_to = Vector2( 0, -16 ) + +[node name="FloorCast" type="RayCast2D" parent="Raycasts" index="1"] +position = Vector2( -8, 9 ) +enabled = true +cast_to = Vector2( 16, 0 ) + +[connection signal="area_entered" from="Hitbox" to="." method="_on_Area2D_area_entered"]