This commit is contained in:
Tabby 2025-09-03 12:14:08 +10:00
parent 077a53d911
commit 6ce339b430
9 changed files with 252 additions and 21 deletions

View file

@ -8,6 +8,7 @@ extends Camera2D
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
Router.die.connect(panic_zoomout)
pass # Replace with function body.
@ -31,3 +32,10 @@ func _process(delta: float) -> void:
snake_line.modulate = Color(1,1,1,1)
snake_line.z_index = 11
z_index = 1
func panic_zoomout():
position = Vector2(0,0)
zoom = Vector2(0.1,0.1)
snake_line.modulate = Color(1,1,1,1)
snake_line.z_index = 11
z_index = 1

View file

@ -11,7 +11,7 @@ config_version=5
[application]
config/name="Snake"
run/main_scene="uid://daqqurdrnk61h"
run/main_scene="uid://bgnfwdpk48u51"
config/features=PackedStringArray("4.4", "GL Compatibility")
config/icon="res://icon.svg"
@ -84,3 +84,4 @@ action={
textures/canvas_textures/default_texture_filter=0
renderer/rendering_method="gl_compatibility"
renderer/rendering_method.mobile="gl_compatibility"
environment/defaults/default_clear_color=Color(0, 0.278688, 0.624722, 1)

View file

@ -13,6 +13,7 @@ var player_mode : bool = false
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
die.connect(end_game)
player_mode = false
pass # Replace with function body.
@ -22,5 +23,6 @@ func _process(delta: float) -> void:
player_mode = !player_mode
func end_game():
player_mode = false
print("i die")
get_tree().get_root().process_mode = Node.PROCESS_MODE_DISABLED

15
scenes/menu.gd Normal file
View file

@ -0,0 +1,15 @@
extends Control
# 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
func _on_play_button_pressed() -> void:
get_tree().change_scene_to_file("res://test.tscn")

1
scenes/menu.gd.uid Normal file
View file

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

98
scenes/menu.tscn Normal file
View file

@ -0,0 +1,98 @@
[gd_scene load_steps=3 format=3 uid="uid://bgnfwdpk48u51"]
[ext_resource type="Script" uid="uid://cxggjpnb3uys7" path="res://scenes/menu.gd" id="1_vjb58"]
[ext_resource type="Texture2D" uid="uid://b1sese4p8sck3" path="res://assets/smallMap.png" id="1_yqeox"]
[node name="Menu" type="Control"]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
script = ExtResource("1_vjb58")
[node name="TextureRect" type="TextureRect" parent="."]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
texture = ExtResource("1_yqeox")
stretch_mode = 6
[node name="MarginContainer" type="MarginContainer" parent="."]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
theme_override_constants/margin_left = 100
theme_override_constants/margin_top = 20
theme_override_constants/margin_right = 100
theme_override_constants/margin_bottom = 20
[node name="VBoxContainer" type="VBoxContainer" parent="MarginContainer"]
layout_mode = 2
[node name="RichTextLabel" type="RichTextLabel" parent="MarginContainer/VBoxContainer"]
layout_mode = 2
bbcode_enabled = true
text = "[wave][font_size=50][outline_size=8][outline_color=darkgreen][color=green]Snake's Braincell"
fit_content = true
horizontal_alignment = 1
[node name="RichTextLabel2" type="RichTextLabel" parent="MarginContainer/VBoxContainer"]
layout_mode = 2
bbcode_enabled = true
text = "[font_size=15][outline_size=2][outline_color=darkred][color=red]Made by Tabby :3"
fit_content = true
horizontal_alignment = 1
[node name="PanelContainer" type="PanelContainer" parent="MarginContainer/VBoxContainer"]
layout_mode = 2
size_flags_vertical = 3
[node name="VBoxContainer" type="VBoxContainer" parent="MarginContainer/VBoxContainer/PanelContainer"]
layout_mode = 2
[node name="Instructions" type="RichTextLabel" parent="MarginContainer/VBoxContainer/PanelContainer/VBoxContainer"]
layout_mode = 2
size_flags_vertical = 3
bbcode_enabled = true
text = "You are a snake, or rather, you are it's sincle braincell. press [color=green]Enter[/color] to switch between [i]controlling the snake[/i] and [i]controlling the braincell[/i].
In snake form, Use the [color=green]Arrow Keys[/color] to direct the snake into apples. Then in braincell view, use the [color=green]Space[/color] key to pickup collected apples and put them in the [i]furnace[/i] - this will replenish your food, if you run of food you die!"
fit_content = true
[node name="HBoxContainer" type="HBoxContainer" parent="MarginContainer/VBoxContainer/PanelContainer/VBoxContainer"]
layout_mode = 2
[node name="CreditsButton" type="Button" parent="MarginContainer/VBoxContainer/PanelContainer/VBoxContainer/HBoxContainer"]
visible = false
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 8
text = "View Credits"
[node name="PlayButton" type="Button" parent="MarginContainer/VBoxContainer/PanelContainer/VBoxContainer/HBoxContainer"]
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 8
text = "Play"
[node name="Label" type="Label" parent="."]
layout_mode = 1
anchors_preset = 3
anchor_left = 1.0
anchor_top = 1.0
anchor_right = 1.0
anchor_bottom = 1.0
offset_left = -40.0
offset_top = -23.0
grow_horizontal = 0
grow_vertical = 0
text = "V 0.2"
[connection signal="pressed" from="MarginContainer/VBoxContainer/PanelContainer/VBoxContainer/HBoxContainer/PlayButton" to="." method="_on_play_button_pressed"]

View file

@ -3,11 +3,13 @@ extends Node2D
@export var segements_holder : Node2D
var segements : Array[snake_segment]
@export var SNAKE_SPEED : float = 0.2
@export var max_snake_speed : float = 1
@export var snake_line : Line2D
@export var player : Node2D
var food : float = 5
@export var max_food = 5
var food : float = 8
@export var max_food = 8
@export var food_drain = 0.1
@export var food_gain = 0.2
var pit_apples : int = 0
var burn_apples : float = 0
var score : int = 0
@ -43,16 +45,21 @@ func _process(delta: float) -> void:
add_segment()
burn_apples -= 0.2 * delta
burn_apples -= 0.3 * delta
if burn_apples <= 0:
burn_apples = 0
else:
food += 0.3 * delta
food += food_gain * delta
if food > max_food:
food = max_food
food -= food_drain * delta
if food <= 0:
Router.die.emit()
if SNAKE_SPEED > max_snake_speed:
SNAKE_SPEED = max_snake_speed
pass

108
test.tscn
View file

@ -1,4 +1,4 @@
[gd_scene load_steps=19 format=3 uid="uid://daqqurdrnk61h"]
[gd_scene load_steps=20 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"]
@ -35,7 +35,12 @@ outline_color = Color(0.87451, 0, 0, 1)
radius = 50.0
[sub_resource type="LabelSettings" id="LabelSettings_5tkv4"]
font_size = 8
[sub_resource type="LabelSettings" id="LabelSettings_0m0f1"]
font_size = 31
font_color = Color(0.84956, 3.29696e-06, 1.54018e-06, 1)
outline_size = 3
outline_color = Color(0, 0, 0, 1)
[node name="Node2D" type="Node2D" node_paths=PackedStringArray("test_area")]
script = ExtResource("1_ehkex")
@ -165,7 +170,8 @@ shape = SubResource("CircleShape2D_ehkex")
[node name="CanvasLayer" type="CanvasLayer" parent="."]
[node name="Control" type="Control" parent="CanvasLayer" node_paths=PackedStringArray("food_bar", "snake_manager", "score_label")]
[node name="Control" type="Control" parent="CanvasLayer" node_paths=PackedStringArray("food_bar", "snake_manager", "score_label", "speed_label", "gameover_score_label", "gameover_screen")]
process_mode = 3
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
@ -175,7 +181,10 @@ grow_vertical = 2
script = ExtResource("9_xersf")
food_bar = NodePath("PanelContainer/HBoxContainer/ProgressBar")
snake_manager = NodePath("../../Snake")
score_label = NodePath("PanelContainer2/VBoxContainer/score_label")
score_label = NodePath("Score Panel/VBoxContainer/score_label")
speed_label = NodePath("Speed Panel/VBoxContainer/speed_label")
gameover_score_label = NodePath("game over screen/PanelContainer/VBoxContainer/gameoverscorelabel")
gameover_screen = NodePath("game over screen")
[node name="PanelContainer" type="PanelContainer" parent="CanvasLayer/Control"]
layout_mode = 1
@ -198,35 +207,102 @@ layout_mode = 2
size_flags_horizontal = 3
step = 0.0
[node name="PanelContainer2" type="PanelContainer" parent="CanvasLayer/Control"]
[node name="Score Panel" type="PanelContainer" parent="CanvasLayer/Control"]
layout_mode = 0
offset_right = 40.0
offset_bottom = 40.0
offset_right = 50.0
offset_bottom = 50.0
[node name="VBoxContainer" type="VBoxContainer" parent="CanvasLayer/Control/PanelContainer2"]
[node name="VBoxContainer" type="VBoxContainer" parent="CanvasLayer/Control/Score Panel"]
layout_mode = 2
[node name="Label" type="Label" parent="CanvasLayer/Control/PanelContainer2/VBoxContainer"]
[node name="Label" type="Label" parent="CanvasLayer/Control/Score Panel/VBoxContainer"]
layout_mode = 2
text = "Score"
horizontal_alignment = 1
[node name="score_label" type="Label" parent="CanvasLayer/Control/PanelContainer2/VBoxContainer"]
[node name="score_label" type="Label" parent="CanvasLayer/Control/Score Panel/VBoxContainer"]
layout_mode = 2
text = "0"
horizontal_alignment = 1
[node name="PanelContainer3" type="PanelContainer" parent="CanvasLayer/Control"]
[node name="Speed Panel" type="PanelContainer" parent="CanvasLayer/Control"]
layout_mode = 1
anchors_preset = 1
anchor_left = 1.0
anchor_right = 1.0
offset_left = -80.0
offset_bottom = 65.0
offset_left = -50.0
offset_bottom = 50.0
grow_horizontal = 0
[node name="Label" type="Label" parent="CanvasLayer/Control/PanelContainer3"]
[node name="VBoxContainer" type="VBoxContainer" parent="CanvasLayer/Control/Speed Panel"]
layout_mode = 2
text = "Press enter to switch between inside and outside view"
[node name="Label2" type="Label" parent="CanvasLayer/Control/Speed Panel/VBoxContainer"]
layout_mode = 2
text = "Speed"
horizontal_alignment = 1
[node name="speed_label" type="Label" parent="CanvasLayer/Control/Speed Panel/VBoxContainer"]
layout_mode = 2
text = "0.3"
label_settings = SubResource("LabelSettings_5tkv4")
horizontal_alignment = 1
autowrap_mode = 2
[node name="game over screen" type="MarginContainer" parent="CanvasLayer/Control"]
visible = false
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
theme_override_constants/margin_left = 200
theme_override_constants/margin_top = 90
theme_override_constants/margin_right = 200
theme_override_constants/margin_bottom = 90
[node name="PanelContainer" type="PanelContainer" parent="CanvasLayer/Control/game over screen"]
layout_mode = 2
[node name="VBoxContainer" type="VBoxContainer" parent="CanvasLayer/Control/game over screen/PanelContainer"]
layout_mode = 2
[node name="Label" type="Label" parent="CanvasLayer/Control/game over screen/PanelContainer/VBoxContainer"]
layout_mode = 2
text = "Game Over"
label_settings = SubResource("LabelSettings_0m0f1")
horizontal_alignment = 1
[node name="HSeparator" type="HSeparator" parent="CanvasLayer/Control/game over screen/PanelContainer/VBoxContainer"]
layout_mode = 2
[node name="Label2" type="Label" parent="CanvasLayer/Control/game over screen/PanelContainer/VBoxContainer"]
layout_mode = 2
text = "Score:"
horizontal_alignment = 1
[node name="gameoverscorelabel" type="RichTextLabel" parent="CanvasLayer/Control/game over screen/PanelContainer/VBoxContainer"]
layout_mode = 2
size_flags_vertical = 3
theme_override_font_sizes/normal_font_size = 40
bbcode_enabled = true
text = "[wave]200"
fit_content = true
horizontal_alignment = 1
vertical_alignment = 1
[node name="HBoxContainer" type="HBoxContainer" parent="CanvasLayer/Control/game over screen/PanelContainer/VBoxContainer"]
layout_mode = 2
[node name="MenuButton" type="Button" parent="CanvasLayer/Control/game over screen/PanelContainer/VBoxContainer/HBoxContainer"]
layout_mode = 2
size_flags_horizontal = 3
text = "Menu"
[node name="AgainButton" type="Button" parent="CanvasLayer/Control/game over screen/PanelContainer/VBoxContainer/HBoxContainer"]
layout_mode = 2
size_flags_horizontal = 3
text = "Play Again!"
[connection signal="pressed" from="CanvasLayer/Control/game over screen/PanelContainer/VBoxContainer/HBoxContainer/MenuButton" to="CanvasLayer/Control" method="_on_menu_button_pressed"]
[connection signal="pressed" from="CanvasLayer/Control/game over screen/PanelContainer/VBoxContainer/HBoxContainer/AgainButton" to="CanvasLayer/Control" method="_on_again_button_pressed"]

View file

@ -3,10 +3,14 @@ extends Control
@export var food_bar : ProgressBar
@export var snake_manager : Node2D
@export var score_label : Label
@export var speed_label : Label
@export var gameover_score_label : RichTextLabel
@export var gameover_screen : MarginContainer
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
Router.die.connect(show_gameover)
pass # Replace with function body.
@ -15,3 +19,22 @@ func _process(delta: float) -> void:
food_bar.max_value = snake_manager.max_food
food_bar.value = snake_manager.food
score_label.text = str(snake_manager.score)
gameover_score_label.text = str(snake_manager.score)
if snake_manager.SNAKE_SPEED < snake_manager.max_snake_speed:
speed_label.text = str(round(snake_manager.SNAKE_SPEED*100)/100)
else:
speed_label.text = str(round(snake_manager.max_snake_speed*100)/100) + " MAX"
speed_label.label_settings.font_color = Color.RED
func show_gameover():
gameover_screen.show()
func _on_again_button_pressed() -> void:
get_tree().get_root().process_mode = Node.PROCESS_MODE_ALWAYS
get_tree().change_scene_to_file("res://test.tscn")
func _on_menu_button_pressed() -> void:
get_tree().get_root().process_mode = Node.PROCESS_MODE_ALWAYS
get_tree().change_scene_to_file("res://scenes/menu.tscn")