door between segements are placed and rotated correctly :3

This commit is contained in:
Tabby 2025-08-08 20:12:11 +10:00
parent 1c0fbf3d69
commit 5197d10172
7 changed files with 96 additions and 2 deletions

BIN
assets/door.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 371 B

34
assets/door.png.import Normal file
View file

@ -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

23
prefabs/door.gd Normal file
View file

@ -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

1
prefabs/door.gd.uid Normal file
View file

@ -0,0 +1 @@
uid://be6ituviy74ta

View file

@ -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

View file

@ -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")

View file

@ -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)