From f0f173ee0629ba807f689eb3be9d273bc0f7fb5d Mon Sep 17 00:00:00 2001 From: Tabby <41929769+tabby-cat-nya@users.noreply.github.com> Date: Fri, 8 Aug 2025 15:02:44 +1000 Subject: [PATCH] snake gaming --- README.md | 4 ++++ camera_2d.gd | 24 ++++++++++++++++++++++++ camera_2d.gd.uid | 1 + prefabs/snake_segment.gd | 11 +++++++++++ project.godot | 5 +++++ snakeManager.gd | 22 ++++++++++++++++++++-- test.tscn | 25 ++++++++++++++++++------- 7 files changed, 83 insertions(+), 9 deletions(-) create mode 100644 camera_2d.gd create mode 100644 camera_2d.gd.uid diff --git a/README.md b/README.md index 6998e38..d3e61aa 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,6 @@ # Snake Snake jam for SXSW Jam 2025 + + +- make the z-order of the current room higher +- disable colliders (and maybe darken?) the non-active rooms diff --git a/camera_2d.gd b/camera_2d.gd new file mode 100644 index 0000000..6f46fc0 --- /dev/null +++ b/camera_2d.gd @@ -0,0 +1,24 @@ +extends Camera2D + +var target : Node2D +@export var temp_segment : 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 (Input.is_action_just_pressed("test_switch_cam")): + if(target): + target = null + else: + target = temp_segment + + if target: + position = lerp(position, target.position, 0.1 * delta) + zoom = lerp(zoom, Vector2(1,1),0.1 * delta) + else: + position = Vector2(0,0) + zoom = Vector2(0.05,0.05) diff --git a/camera_2d.gd.uid b/camera_2d.gd.uid new file mode 100644 index 0000000..d738ae0 --- /dev/null +++ b/camera_2d.gd.uid @@ -0,0 +1 @@ +uid://b0djy8fmq4qjq diff --git a/prefabs/snake_segment.gd b/prefabs/snake_segment.gd index 2d024a1..e362944 100644 --- a/prefabs/snake_segment.gd +++ b/prefabs/snake_segment.gd @@ -39,3 +39,14 @@ func get_new_target(): else: target_pos = next_segment.position move_progress = 0 + +func become_real(): + #activate colliders + z_index = 10 + modulate = Color.WHITE + pass + +func become_fake(): + z_index = 0 + modulate = Color.DIM_GRAY + pass diff --git a/project.godot b/project.godot index 26befe0..9b6fd7d 100644 --- a/project.godot +++ b/project.godot @@ -51,6 +51,11 @@ down={ , Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194322,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) ] } +test_switch_cam={ +"deadzone": 0.2, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194309,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +] +} [rendering] diff --git a/snakeManager.gd b/snakeManager.gd index 08857a4..c029d71 100644 --- a/snakeManager.gd +++ b/snakeManager.gd @@ -1,21 +1,39 @@ extends Node2D +@export var segements_holder : Node2D var segements : Array[snake_segment] @export var SNAKE_SPEED : float = 0.2 +@export var snake_line : Line2D # Called when the node enters the scene tree for the first time. func _ready() -> void: #segements = get_children() as Array[snake_segment] - segements.assign(get_children()) + segements.assign(segements_holder.get_children()) for i in segements.size(): if i == 0: segements[i].is_head = true else: segements[i].next_segment = segements[i-1] segements[i].snake_speed = SNAKE_SPEED - segements[i].z_index = 100-i + #segements[i].z_index = 100-i + activate_segment(0) # Called every frame. 'delta' is the elapsed time since the previous frame. func _process(delta: float) -> void: + redraw_line() pass + +func activate_segment(act_segment : int): + for i in segements.size(): + if act_segment == i: + segements[i].become_real() + + else: + segements[i].become_fake() + + +func redraw_line(): + snake_line.clear_points() + for segment in segements: + snake_line.add_point(segment.global_position) diff --git a/test.tscn b/test.tscn index 762027d..6445efb 100644 --- a/test.tscn +++ b/test.tscn @@ -1,9 +1,10 @@ -[gd_scene load_steps=5 format=3 uid="uid://daqqurdrnk61h"] +[gd_scene load_steps=6 format=3 uid="uid://daqqurdrnk61h"] [ext_resource type="Script" uid="uid://bue4xxejdsmqh" path="res://snakeManager.gd" id="1_6uqi0"] [ext_resource type="PackedScene" uid="uid://bwoeu7ask0fck" path="res://prefabs/snake_segment.tscn" id="1_8uh7m"] [ext_resource type="Texture2D" uid="uid://byibhn8fi6ve0" path="res://assets/bg.png" id="1_ppyta"] [ext_resource type="PackedScene" uid="uid://cusdydgg4b1bo" path="res://prefabs/braincell.tscn" id="2_6uqi0"] +[ext_resource type="Script" uid="uid://b0djy8fmq4qjq" path="res://camera_2d.gd" id="5_ykrsh"] [node name="Node2D" type="Node2D"] @@ -12,22 +13,32 @@ position = Vector2(-160, -160) scale = Vector2(320, 320) texture = ExtResource("1_ppyta") -[node name="Snake" type="Node2D" parent="."] +[node name="Snake" type="Node2D" parent="." node_paths=PackedStringArray("segements_holder", "snake_line")] script = ExtResource("1_6uqi0") +segements_holder = NodePath("SegementHolder") SNAKE_SPEED = 1.0 +snake_line = NodePath("Line2D") -[node name="SnakeSegment" parent="Snake" instance=ExtResource("1_8uh7m")] +[node name="SegementHolder" type="Node2D" parent="Snake"] + +[node name="SnakeSegment" parent="Snake/SegementHolder" instance=ExtResource("1_8uh7m")] is_head = true -[node name="Braincell" parent="Snake/SnakeSegment" instance=ExtResource("2_6uqi0")] +[node name="Braincell" parent="Snake/SegementHolder/SnakeSegment" instance=ExtResource("2_6uqi0")] -[node name="SnakeSegment2" parent="Snake" node_paths=PackedStringArray("next_segment") instance=ExtResource("1_8uh7m")] +[node name="SnakeSegment2" parent="Snake/SegementHolder" node_paths=PackedStringArray("next_segment") instance=ExtResource("1_8uh7m")] position = Vector2(-320, 0) next_segment = NodePath("../SnakeSegment") -[node name="SnakeSegment3" parent="Snake" node_paths=PackedStringArray("next_segment") instance=ExtResource("1_8uh7m")] +[node name="SnakeSegment3" parent="Snake/SegementHolder" node_paths=PackedStringArray("next_segment") instance=ExtResource("1_8uh7m")] position = Vector2(-640, 0) next_segment = NodePath("../SnakeSegment2") -[node name="Camera2D" type="Camera2D" parent="."] +[node name="Line2D" type="Line2D" parent="Snake"] +width = 320.0 +default_color = Color(0, 0.662728, 1.54018e-06, 1) + +[node name="Camera2D" type="Camera2D" parent="." node_paths=PackedStringArray("temp_segment")] zoom = Vector2(0.05, 0.05) +script = ExtResource("5_ykrsh") +temp_segment = NodePath("../Snake/SegementHolder/SnakeSegment")