diff --git a/braincell.gd b/braincell.gd index bff5929..fb160e4 100644 --- a/braincell.gd +++ b/braincell.gd @@ -23,3 +23,15 @@ func _physics_process(delta: float) -> void: velocity = velocity.move_toward(Vector2(0,0), SPEED) move_and_slide() + + +func _on_door_box_area_entered(area: Area2D) -> void: + print(area.name) + if area.name == "DoorIn": + global_position = area.get_parent().get_parent().door_out_node.global_position + Router.activate_seg.emit(Router.cur_id + 1) + # +1 seg + elif area.name == "DoorOut": + global_position = area.get_parent().get_parent().door_in_node.global_position + Router.activate_seg.emit(Router.cur_id - 1) + # -1 seg diff --git a/prefabs/braincell.tscn b/prefabs/braincell.tscn index 159b45c..c2295b9 100644 --- a/prefabs/braincell.tscn +++ b/prefabs/braincell.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=4 format=3 uid="uid://cusdydgg4b1bo"] +[gd_scene load_steps=5 format=3 uid="uid://cusdydgg4b1bo"] [ext_resource type="Script" uid="uid://b48mlxrnte625" path="res://braincell.gd" id="1_q1ksn"] [ext_resource type="Texture2D" uid="uid://qyd5e7lb2esx" path="res://assets/braincell.png" id="2_wv6rk"] @@ -6,7 +6,11 @@ [sub_resource type="CircleShape2D" id="CircleShape2D_g14j6"] radius = 16.0 +[sub_resource type="CircleShape2D" id="CircleShape2D_q1ksn"] +radius = 7.07107 + [node name="Braincell" type="CharacterBody2D"] +z_index = 15 motion_mode = 1 script = ExtResource("1_q1ksn") @@ -15,3 +19,10 @@ texture = ExtResource("2_wv6rk") [node name="CollisionShape2D" type="CollisionShape2D" parent="."] shape = SubResource("CircleShape2D_g14j6") + +[node name="doorBox" type="Area2D" parent="."] + +[node name="CollisionShape2D" type="CollisionShape2D" parent="doorBox"] +shape = SubResource("CircleShape2D_q1ksn") + +[connection signal="area_entered" from="doorBox" to="." method="_on_door_box_area_entered"] diff --git a/prefabs/door.gd b/prefabs/door.gd index f5a17b6..054ddfc 100644 --- a/prefabs/door.gd +++ b/prefabs/door.gd @@ -2,6 +2,8 @@ extends Node2D @export var this_seg : Node2D @export var prev_seg : Node2D +@export var door_in_node : Node2D +@export var door_out_node : Node2D # Called when the node enters the scene tree for the first time. func _ready() -> void: diff --git a/prefabs/snake_segment.gd b/prefabs/snake_segment.gd index f3a09b1..a0f6a24 100644 --- a/prefabs/snake_segment.gd +++ b/prefabs/snake_segment.gd @@ -10,6 +10,7 @@ var want_direction : Vector2 = Vector2.RIGHT var start_pos : Vector2 var target_pos : Vector2 var move_progress : float +var seg_id : int var snake_speed : float = 1 # if snake is the head, it chooses where it goes diff --git a/prefabs/snake_segment.tscn b/prefabs/snake_segment.tscn index 1738947..e6ca39c 100644 --- a/prefabs/snake_segment.tscn +++ b/prefabs/snake_segment.tscn @@ -7,7 +7,7 @@ [ext_resource type="Texture2D" uid="uid://cay1k1dp8yf12" path="res://assets/door.png" id="4_34t3n"] [sub_resource type="RectangleShape2D" id="RectangleShape2D_08kyq"] -size = Vector2(24, 64) +size = Vector2(16, 64) [node name="SnakeSegment" type="AnimatableBody2D" node_paths=PackedStringArray("door")] script = ExtResource("1_3ulhv") @@ -22,27 +22,29 @@ script = ExtResource("2_3ulhv") radius = 160.0 metadata/_custom_type_script = "uid://deq18nev0kwbg" -[node name="DoorArm" type="Node2D" parent="." node_paths=PackedStringArray("this_seg")] +[node name="DoorArm" type="Node2D" parent="." node_paths=PackedStringArray("this_seg", "door_in_node", "door_out_node")] script = ExtResource("4_08kyq") this_seg = NodePath("..") +door_in_node = NodePath("Door/DoorIn") +door_out_node = NodePath("Door/DoorOut") [node name="Door" type="Node2D" parent="DoorArm"] +z_index = 11 position = Vector2(160, 0) -scale = Vector2(1, 1) [node name="DoorIn" type="Area2D" parent="DoorArm/Door"] -position = Vector2(-16, 0) +position = Vector2(-22, 0) [node name="CollisionShape2D" type="CollisionShape2D" parent="DoorArm/Door/DoorIn"] -position = Vector2(32, 0) +position = Vector2(14, 0) shape = SubResource("RectangleShape2D_08kyq") [node name="DoorOut" type="Area2D" parent="DoorArm/Door"] -position = Vector2(16, 0) +position = Vector2(22, 0) rotation = 3.14159 [node name="CollisionShape2D" type="CollisionShape2D" parent="DoorArm/Door/DoorOut"] -position = Vector2(32, 0) +position = Vector2(14, 3.54925e-05) shape = SubResource("RectangleShape2D_08kyq") [node name="Sprite2D" type="Sprite2D" parent="DoorArm/Door"] diff --git a/project.godot b/project.godot index 9b6fd7d..a7d64c6 100644 --- a/project.godot +++ b/project.godot @@ -15,6 +15,10 @@ run/main_scene="uid://daqqurdrnk61h" config/features=PackedStringArray("4.4", "GL Compatibility") config/icon="res://icon.svg" +[autoload] + +Router="*res://router.tscn" + [display] window/size/viewport_width=640 diff --git a/router.gd b/router.gd new file mode 100644 index 0000000..5eb25cd --- /dev/null +++ b/router.gd @@ -0,0 +1,15 @@ +extends Node + +signal activate_seg(int) + +var current_seg : Node2D +var cur_id : int = 0 + +# 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: + pass diff --git a/router.gd.uid b/router.gd.uid new file mode 100644 index 0000000..31d2657 --- /dev/null +++ b/router.gd.uid @@ -0,0 +1 @@ +uid://de1xqrlclscb3 diff --git a/router.tscn b/router.tscn new file mode 100644 index 0000000..00b34a7 --- /dev/null +++ b/router.tscn @@ -0,0 +1,6 @@ +[gd_scene load_steps=2 format=3 uid="uid://dm0mfe0g3y0wl"] + +[ext_resource type="Script" uid="uid://de1xqrlclscb3" path="res://router.gd" id="1_rxtgq"] + +[node name="Router" type="Node"] +script = ExtResource("1_rxtgq") diff --git a/snakeManager.gd b/snakeManager.gd index cb782d5..305f180 100644 --- a/snakeManager.gd +++ b/snakeManager.gd @@ -4,9 +4,11 @@ extends Node2D var segements : Array[snake_segment] @export var SNAKE_SPEED : float = 0.2 @export var snake_line : Line2D +@export var player : Node2D # Called when the node enters the scene tree for the first time. func _ready() -> void: + Router.activate_seg.connect(activate_segment) #segements = get_children() as Array[snake_segment] segements.assign(segements_holder.get_children()) for i in segements.size(): @@ -18,6 +20,7 @@ func _ready() -> void: if i < segements.size()-1: segements[i].door.prev_seg = segements[i+1] segements[i].snake_speed = SNAKE_SPEED + segements[i].seg_id = i #segements[i].z_index = 100-i activate_segment(0) @@ -28,6 +31,9 @@ func _process(delta: float) -> void: pass func activate_segment(act_segment : int): + Router.current_seg = segements[act_segment] + Router.cur_id = act_segment + player.reparent(Router.current_seg) for i in segements.size(): if act_segment == i: segements[i].become_real() diff --git a/test.tscn b/test.tscn index 3d1f732..0514489 100644 --- a/test.tscn +++ b/test.tscn @@ -13,11 +13,12 @@ position = Vector2(-160, -160) scale = Vector2(320, 320) texture = ExtResource("1_ppyta") -[node name="Snake" type="Node2D" parent="." node_paths=PackedStringArray("segements_holder", "snake_line")] +[node name="Snake" type="Node2D" parent="." node_paths=PackedStringArray("segements_holder", "snake_line", "player")] script = ExtResource("1_6uqi0") segements_holder = NodePath("SegementHolder") -SNAKE_SPEED = 1.0 +SNAKE_SPEED = 0.3 snake_line = NodePath("Line2D") +player = NodePath("SegementHolder/SnakeSegment/Braincell") [node name="SegementHolder" type="Node2D" parent="Snake"]