diff --git a/assets/door.png b/assets/door.png new file mode 100644 index 0000000..1ed92b1 Binary files /dev/null and b/assets/door.png differ diff --git a/assets/door.png.import b/assets/door.png.import new file mode 100644 index 0000000..ee0b8eb --- /dev/null +++ b/assets/door.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cay1k1dp8yf12" +path="res://.godot/imported/door.png-b71998044d513d047c9b0091ee4a07ff.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/door.png" +dest_files=["res://.godot/imported/door.png-b71998044d513d047c9b0091ee4a07ff.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/prefabs/door.gd b/prefabs/door.gd new file mode 100644 index 0000000..f5a17b6 --- /dev/null +++ b/prefabs/door.gd @@ -0,0 +1,23 @@ +extends Node2D + +@export var this_seg : Node2D +@export var prev_seg : Node2D + +# Called when the node enters the scene tree for the first time. +func _ready() -> void: + pass # Replace with function body. + + +# Called every frame. 'delta' is the elapsed time since the previous frame. +func _process(delta: float) -> void: + if this_seg and prev_seg: + show() # would also need to enable/disable + look_at(prev_seg.position) + #position = curve.get_closest_point(lerp(this_seg.position,prev_seg.position,0.5)) + + #global_position = lerp(this_seg.global_position,next_seg.global_position,0.5) + else: + hide() + + +# rotate arm towards next seg diff --git a/prefabs/door.gd.uid b/prefabs/door.gd.uid new file mode 100644 index 0000000..775ca61 --- /dev/null +++ b/prefabs/door.gd.uid @@ -0,0 +1 @@ +uid://be6ituviy74ta diff --git a/prefabs/snake_segment.gd b/prefabs/snake_segment.gd index ee09def..f3a09b1 100644 --- a/prefabs/snake_segment.gd +++ b/prefabs/snake_segment.gd @@ -6,6 +6,7 @@ var direction : Vector2 = Vector2.RIGHT var want_direction : Vector2 = Vector2.RIGHT @export var next_segment : Node2D +@export var door : Node2D var start_pos : Vector2 var target_pos : Vector2 var move_progress : float diff --git a/prefabs/snake_segment.tscn b/prefabs/snake_segment.tscn index 97d5dbb..1738947 100644 --- a/prefabs/snake_segment.tscn +++ b/prefabs/snake_segment.tscn @@ -1,11 +1,17 @@ -[gd_scene load_steps=4 format=3 uid="uid://bwoeu7ask0fck"] +[gd_scene load_steps=7 format=3 uid="uid://bwoeu7ask0fck"] [ext_resource type="Script" uid="uid://b5cqo12km1nh3" path="res://prefabs/snake_segment.gd" id="1_3ulhv"] [ext_resource type="Texture2D" uid="uid://l8x3dp68yyxr" path="res://assets/segement.png" id="1_6uqch"] [ext_resource type="Script" uid="uid://deq18nev0kwbg" path="res://addons/godot-donut-collision-polygon-2d-7780d026ae3d4a37fe68f43cc1f97ba664dd775d/addons/donut_collision_polygon2D/donut_collision_polygon2D.gd" id="2_3ulhv"] +[ext_resource type="Script" uid="uid://be6ituviy74ta" path="res://prefabs/door.gd" id="4_08kyq"] +[ext_resource type="Texture2D" uid="uid://cay1k1dp8yf12" path="res://assets/door.png" id="4_34t3n"] -[node name="SnakeSegment" type="AnimatableBody2D"] +[sub_resource type="RectangleShape2D" id="RectangleShape2D_08kyq"] +size = Vector2(24, 64) + +[node name="SnakeSegment" type="AnimatableBody2D" node_paths=PackedStringArray("door")] script = ExtResource("1_3ulhv") +door = NodePath("DoorArm") [node name="Sprite2D" type="Sprite2D" parent="."] texture = ExtResource("1_6uqch") @@ -15,3 +21,29 @@ polygon = PackedVector2Array(9.85808e-15, -161, 31.4095, -157.906, 61.612, -148. script = ExtResource("2_3ulhv") radius = 160.0 metadata/_custom_type_script = "uid://deq18nev0kwbg" + +[node name="DoorArm" type="Node2D" parent="." node_paths=PackedStringArray("this_seg")] +script = ExtResource("4_08kyq") +this_seg = NodePath("..") + +[node name="Door" type="Node2D" parent="DoorArm"] +position = Vector2(160, 0) +scale = Vector2(1, 1) + +[node name="DoorIn" type="Area2D" parent="DoorArm/Door"] +position = Vector2(-16, 0) + +[node name="CollisionShape2D" type="CollisionShape2D" parent="DoorArm/Door/DoorIn"] +position = Vector2(32, 0) +shape = SubResource("RectangleShape2D_08kyq") + +[node name="DoorOut" type="Area2D" parent="DoorArm/Door"] +position = Vector2(16, 0) +rotation = 3.14159 + +[node name="CollisionShape2D" type="CollisionShape2D" parent="DoorArm/Door/DoorOut"] +position = Vector2(32, 0) +shape = SubResource("RectangleShape2D_08kyq") + +[node name="Sprite2D" type="Sprite2D" parent="DoorArm/Door"] +texture = ExtResource("4_34t3n") diff --git a/snakeManager.gd b/snakeManager.gd index c029d71..cb782d5 100644 --- a/snakeManager.gd +++ b/snakeManager.gd @@ -12,8 +12,11 @@ func _ready() -> void: for i in segements.size(): if i == 0: segements[i].is_head = true + else: segements[i].next_segment = segements[i-1] + if i < segements.size()-1: + segements[i].door.prev_seg = segements[i+1] segements[i].snake_speed = SNAKE_SPEED #segements[i].z_index = 100-i activate_segment(0)