eels reborn

This commit is contained in:
Haze Weathers 2023-06-22 18:01:24 -04:00
parent 7e460cc4e1
commit 04dec83275
6 changed files with 104 additions and 92 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 610 B

After

Width:  |  Height:  |  Size: 4.2 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 718 B

After

Width:  |  Height:  |  Size: 4.3 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 624 B

After

Width:  |  Height:  |  Size: 4.2 KiB

Before After
Before After

View file

@ -1,4 +1,4 @@
[gd_scene load_steps=32 format=2] [gd_scene load_steps=33 format=2]
[ext_resource path="res://objects/enemy/squig.tscn" type="PackedScene" id=1] [ext_resource path="res://objects/enemy/squig.tscn" type="PackedScene" id=1]
[ext_resource path="res://tilesets/t_cave.tres" type="TileSet" id=2] [ext_resource path="res://tilesets/t_cave.tres" type="TileSet" id=2]
@ -49,6 +49,11 @@ animations = [ {
"speed": 20.0 "speed": 20.0
} ] } ]
[sub_resource type="Curve2D" id=8]
_data = {
"points": PoolVector2Array( -8.02293, 7.78696, 8.02293, -7.78696, 152, 32, -3.00339, -17.0192, 3.00339, 17.0192, 184, 24, -7.90495, -7.66898, 7.90495, 7.66898, 200, 32, 7.81354, -7.68111, -7.81354, 7.68111, 200, 72, 7.68111, 7.81354, -7.68111, -7.81354, 152, 72, -7.66898, 8.02293, 7.66898, -8.02293, 152, 32 )
}
[node name="Map2" type="Node2D" groups=["map"]] [node name="Map2" type="Node2D" groups=["map"]]
script = ExtResource( 11 ) script = ExtResource( 11 )
@ -141,7 +146,6 @@ material = SubResource( 4 )
position = Vector2( 4, 4 ) position = Vector2( 4, 4 )
z_index = -3 z_index = -3
frames = SubResource( 5 ) frames = SubResource( 5 )
frame = 1
playing = true playing = true
[node name="Steam" parent="." instance=ExtResource( 23 )] [node name="Steam" parent="." instance=ExtResource( 23 )]
@ -213,7 +217,8 @@ right_down_boundary = 4.0
speed = 10 speed = 10
[node name="Eel" parent="." instance=ExtResource( 24 )] [node name="Eel" parent="." instance=ExtResource( 24 )]
position = Vector2( 120, 56 ) position = Vector2( -64, 104 )
curve = SubResource( 8 )
segments = 8
[editable path="RollingFiend"] [editable path="RollingFiend"]
[editable path="Eel"]

View file

@ -2,7 +2,7 @@ extends "res://objects/enemy/enemy.gd"
const SEGMENT_LENGTH: float = 4.0 const SEGMENT_LENGTH: float = 4.0
const BASE_LENGTH: float = 20.0 # combined length of head and tail const SEGMENT_OFFSET: float = 8.0
export var segments: int = 8 export var segments: int = 8
@ -11,46 +11,48 @@ export var wave_length: float = 8.0
export var wave_amplitude: float = 4.0 export var wave_amplitude: float = 4.0
onready var sector: Vector2 = Game.get_sector(global_position) var _segments: Array
onready var hitbox: Area2D = $Path2D/PathFollow2D/Hitbox onready var head: PathFollow2D = $Head
onready var first_segment: CollisionShape2D = $"%Segment" onready var tail: PathFollow2D = $Tail
onready var segment_start: Position2D = $"%SegmentStart"
onready var path_follow = $Path2D/PathFollow2D
func _ready() -> void: func _ready() -> void:
hitbox.remove_child(first_segment) var first_segment: PathFollow2D = $Segment
var first_segment_shape: CollisionShape2D = $"%SegmentShape"
_segments = []
_segments.resize(segments)
for i in segments: for i in segments:
var new_segment = first_segment.duplicate() var new_segment = first_segment.duplicate()
new_segment.position.x = segment_start.position.x + SEGMENT_LENGTH * float(i) add_child(new_segment)
hitbox.add_child(new_segment) _segments[i] = new_segment
$Path2D/PathFollow2D/Hitbox/TailShape.position.x = segment_start.position.x + SEGMENT_LENGTH * segments var new_segment_shape = first_segment_shape.duplicate()
_wave_segments() $Hitbox.add_child(new_segment_shape)
var new_shape_transform = new_segment.get_node("ShapeTransform")
new_shape_transform.remote_path = new_shape_transform.get_path_to(new_segment_shape)
first_segment.queue_free()
first_segment_shape.queue_free()
func _physics_process(delta: float) -> void: func _physics_process(delta: float) -> void:
# move head.offset += speed * delta
# global_position.x += speed * delta * sign(scale.x) _offset_segments()
path_follow.set_offset(path_follow.get_offset() + speed * delta) # _wave_segments()
# make segments wibble
_wave_segments() func _offset_segments() -> void:
# check for wrapping tail.offset = head.offset - SEGMENT_LENGTH * float(segments + 1)
var sector_rect = Rect2(sector * Game.resolution - Vector2(8.0, 0.0), Game.resolution + Vector2(16.0, 0.0)) for i in _segments.size():
var total_length = BASE_LENGTH + (SEGMENT_LENGTH * float(segments)) _segments[i].offset = head.offset - SEGMENT_LENGTH * float(i + 1)
var eel_rect = Rect2(global_position + Vector2(-2.0, 4.0), Vector2(total_length, 0.0))
if sign(scale.x) == 1.0:
eel_rect.position.x -= total_length
if not sector_rect.intersects(eel_rect):
global_position.x -= (sector_rect.size.x + total_length) * sign(scale.x)
func _wave_segments() -> void: func _wave_segments() -> void:
for segment in hitbox.get_children(): for segment in get_children():
if segment is Node2D: if segment is PathFollow2D:
segment.position.y = sin(segment.global_position.x / wave_length) * wave_amplitude segment.v_offset = sin(segment.offset / wave_length) * wave_amplitude
func die() -> void: func die() -> void:
for segment in hitbox.get_children(): for segment in _segments:
if segment is Node2D: if segment is Node2D:
var death_particles = DeathParticles.instance() var death_particles = DeathParticles.instance()
death_particles.global_position = segment.global_position death_particles.global_position = segment.global_position

View file

@ -1,90 +1,95 @@
[gd_scene load_steps=9 format=2] [gd_scene load_steps=10 format=2]
[ext_resource path="res://objects/enemy/eel.gd" type="Script" id=1] [ext_resource path="res://objects/enemy/eel.gd" type="Script" id=1]
[ext_resource path="res://graphics/enemy/eel_head.png" type="Texture" id=2] [ext_resource path="res://graphics/enemy/eel_head.png" type="Texture" id=2]
[ext_resource path="res://graphics/enemy/eel_body.png" type="Texture" id=3] [ext_resource path="res://graphics/enemy/eel_body.png" type="Texture" id=3]
[ext_resource path="res://graphics/enemy/eel_tail.png" type="Texture" id=4] [ext_resource path="res://graphics/enemy/eel_tail.png" type="Texture" id=4]
[ext_resource path="res://graphics/enemy/eel_inner_border.png" type="Texture" id=5] [ext_resource path="res://shaders/1px_border.gdshader" type="Shader" id=6]
[sub_resource type="Curve2D" id=4] [sub_resource type="RectangleShape2D" id=8]
_data = {
"points": PoolVector2Array( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, -24, 0, 0, 0, 0, -8, -48, 0, 0, 0, 0, 24, -72, 0, 0, 0, 0, -8, -96, 0, 0, 0, 0, -8, -96, 0, 0, 0, 0, 24, -72, 0, 0, 0, 0, -8, -48, 0, 0, 0, 0, 24, -24, 0, 0, 0, 0, 0, 0 )
}
[sub_resource type="RectangleShape2D" id=3]
extents = Vector2( 2, 2 ) extents = Vector2( 2, 2 )
[sub_resource type="RectangleShape2D" id=2] [sub_resource type="RectangleShape2D" id=7]
extents = Vector2( 4.5, 2 )
[sub_resource type="RectangleShape2D" id=9]
extents = Vector2( 2, 2 ) extents = Vector2( 2, 2 )
[node name="Eel" type="Node2D" groups=["enemy"]] [sub_resource type="ShaderMaterial" id=6]
shader = ExtResource( 6 )
shader_param/border_color = Color( 0, 0, 0, 1 )
shader_param/border_corners = false
[node name="Eel" type="Path2D" groups=["enemy"]]
curve = null
script = ExtResource( 1 ) script = ExtResource( 1 )
segments = 2 segments = 2
wave_amplitude = 6.0
[node name="Path2D" type="Path2D" parent="."] [node name="Hitbox" type="Area2D" parent="." groups=["enemy_hitbox"]]
curve = SubResource( 4 ) position = Vector2( 4, 0 )
z_index = 1
[node name="PathFollow2D" type="PathFollow2D" parent="Path2D"] [node name="TailShape" type="CollisionShape2D" parent="Hitbox"]
position = Vector2( 8, 0 )
[node name="Hitbox" type="Area2D" parent="Path2D/PathFollow2D" groups=["enemy_hitbox"]]
position = Vector2( 7.99424, 0.405511 )
rotation = 3.14159
scale = Vector2( 1, -1 )
[node name="SegmentStart" type="Position2D" parent="Path2D/PathFollow2D/Hitbox"]
unique_name_in_owner = true
position = Vector2( 12, 0 )
__meta__ = {
"_gizmo_extents_": 5.0
}
[node name="HeadShape" type="CollisionPolygon2D" parent="Path2D/PathFollow2D/Hitbox"]
position = Vector2( 8, 0 )
polygon = PoolVector2Array( -7, -2, 2, -2, 2, 2, -7, 2 )
[node name="HeadSprite" type="Sprite" parent="Path2D/PathFollow2D/Hitbox/HeadShape"]
show_behind_parent = true
position = Vector2( -4, 0 ) position = Vector2( -4, 0 )
shape = SubResource( 8 )
[node name="HeadShape" type="CollisionShape2D" parent="Hitbox"]
position = Vector2( -1.5, 0 )
shape = SubResource( 7 )
[node name="SegmentShape" type="CollisionShape2D" parent="Hitbox"]
unique_name_in_owner = true
position = Vector2( -4, 0 )
shape = SubResource( 9 )
[node name="Head" type="PathFollow2D" parent="." groups=["eel_segment"]]
offset = 8.0
cubic_interp = false
lookahead = 0.001
[node name="Sprite" type="Sprite" parent="Head"]
position = Vector2( 4, 0 )
texture = ExtResource( 2 ) texture = ExtResource( 2 )
[node name="InnerBorder" type="Sprite" parent="Path2D/PathFollow2D/Hitbox/HeadShape"] [node name="Border" type="Sprite" parent="Head/Sprite"]
position = Vector2( 3, 0 ) material = SubResource( 6 )
z_index = -1 z_index = -1
texture = ExtResource( 5 ) texture = ExtResource( 2 )
[node name="TailShape" type="CollisionShape2D" parent="Path2D/PathFollow2D/Hitbox"] [node name="ShapeTransform" type="RemoteTransform2D" parent="Head"]
position = Vector2( 16, 0 ) position = Vector2( 2.5, 0 )
shape = SubResource( 3 ) remote_path = NodePath("../../Hitbox/HeadShape")
[node name="TailSprite" type="Sprite" parent="Path2D/PathFollow2D/Hitbox/TailShape"] [node name="Tail" type="PathFollow2D" parent="."]
show_behind_parent = true cubic_interp = false
position = Vector2( 2, 0 ) lookahead = 0.001
[node name="Sprite" type="Sprite" parent="Tail"]
position = Vector2( -2, 0 )
texture = ExtResource( 4 ) texture = ExtResource( 4 )
[node name="InnerBorder" type="Sprite" parent="Path2D/PathFollow2D/Hitbox/TailShape"] [node name="Border" type="Sprite" parent="Tail/Sprite"]
position = Vector2( -2, 0 ) material = SubResource( 6 )
z_index = -1 z_index = -1
texture = ExtResource( 5 ) texture = ExtResource( 4 )
[node name="Segment" type="CollisionShape2D" parent="Path2D/PathFollow2D/Hitbox"] [node name="ShapeTransform" type="RemoteTransform2D" parent="Tail"]
unique_name_in_owner = true remote_path = NodePath("../../Hitbox/TailShape")
position = Vector2( 12, 0 )
shape = SubResource( 2 )
[node name="SegmentSprite" type="Sprite" parent="Path2D/PathFollow2D/Hitbox/Segment"] [node name="Segment" type="PathFollow2D" parent="."]
show_behind_parent = true offset = 4.0
cubic_interp = false
lookahead = 0.001
[node name="Sprite" type="Sprite" parent="Segment"]
texture = ExtResource( 3 ) texture = ExtResource( 3 )
[node name="InnerBorder" type="Sprite" parent="Path2D/PathFollow2D/Hitbox/Segment"] [node name="Border" type="Sprite" parent="Segment/Sprite"]
position = Vector2( -2, 0 ) material = SubResource( 6 )
z_index = -1 z_index = -1
texture = ExtResource( 5 ) texture = ExtResource( 3 )
[node name="InnerBorder2" type="Sprite" parent="Path2D/PathFollow2D/Hitbox/Segment"] [node name="ShapeTransform" type="RemoteTransform2D" parent="Segment"]
position = Vector2( 3, 0 ) remote_path = NodePath("../../Hitbox/SegmentShape")
z_index = -1
texture = ExtResource( 5 )
[connection signal="area_entered" from="Path2D/PathFollow2D/Hitbox" to="." method="_on_Hitbox_area_entered"] [connection signal="area_entered" from="Hitbox" to="." method="_on_Hitbox_area_entered"]