Adds score tracking to level

master
TechieDamien 2025-07-31 15:15:06 +01:00
parent d405ab5846
commit f1054637ed
Signed by: TechieDamien
GPG Key ID: 2ACE3574E164B780
8 changed files with 85 additions and 2 deletions

View File

@ -1,8 +1,9 @@
[gd_scene load_steps=4 format=3 uid="uid://bs6an72avch86"]
[gd_scene load_steps=5 format=3 uid="uid://bs6an72avch86"]
[ext_resource type="PackedScene" uid="uid://gkqku38yb2ng" path="res://Scenes/level.tscn" id="1_bo1nx"]
[ext_resource type="PackedScene" uid="uid://d0okbjqyaoe0w" path="res://Scenes/snake_part.tscn" id="2_8gbba"]
[ext_resource type="PackedScene" uid="uid://bldekmt1rakjl" path="res://Scenes/fruit.tscn" id="3_8gbba"]
[ext_resource type="PackedScene" uid="uid://mp03fsd536be" path="res://Scenes/score_display.tscn" id="4_jjvhh"]
[node name="Main" type="Node2D"]
@ -34,5 +35,11 @@ position = Vector2(707, 325)
[node name="RestartTimer" type="Timer" parent="." groups=["GameClockPause"]]
[node name="ScoreDisplay" parent="." instance=ExtResource("4_jjvhh")]
offset_left = 4.0
offset_top = 42.0
offset_right = 156.0
offset_bottom = 197.0
[connection signal="area_exited" from="Level" to="SnakePart" method="_on_level_area_exited"]
[connection signal="timeout" from="RestartTimer" to="Timer" method="start" binds= [0.3]]

35
Scenes/score_display.tscn Normal file
View File

@ -0,0 +1,35 @@
[gd_scene load_steps=2 format=3 uid="uid://mp03fsd536be"]
[ext_resource type="Script" uid="uid://bwiflwp3hufyu" path="res://Scripts/score_display.gd" id="1_abl27"]
[node name="ScoreDisplay" type="VBoxContainer"]
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
script = ExtResource("1_abl27")
[node name="ScoreLabel" type="Label" parent="."]
layout_mode = 2
text = "Score
0"
horizontal_alignment = 1
[node name="LengthLabel" type="Label" parent="."]
layout_mode = 2
text = "Length
3"
horizontal_alignment = 1
[node name="PendingLengthLabel" type="Label" parent="."]
layout_mode = 2
text = "Length
3"
horizontal_alignment = 1
[node name="OuroborosPossibleLabel" type="Label" parent="."]
layout_mode = 2
text = "Ouroboros Possible
No"
horizontal_alignment = 1

3
Scripts/game_manager.gd Normal file
View File

@ -0,0 +1,3 @@
extends Node
var score : int = 0

View File

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

34
Scripts/score_display.gd Normal file
View File

@ -0,0 +1,34 @@
extends VBoxContainer
@onready
var score_label : Label = $ScoreLabel
@onready
var length_label : Label = $LengthLabel
@onready
var pending_length_label : Label = $PendingLengthLabel
@onready
var ouroboros_label : Label = $OuroborosPossibleLabel
var ouroboros_possible : bool = false
func _process(delta: float) -> void:
score_label.text = "Score\n{score}".format(GameManager)
length_label.text = "Length\n{0}".format([get_snake_length()])
var head : Node = get_tree().get_first_node_in_group("Head")
if head is SnakePart:
pending_length_label.text = "Eventual Length\n{0}".format([get_snake_length() + head.queued_growth])
if ouroboros_possible:
ouroboros_label.text = "Ouroboros Possible\nYes"
else:
ouroboros_label.text = "Ouroboros Possible\nNo"
func get_snake_length() -> int:
var length : int = 0
var obstacles : Array = get_tree().get_nodes_in_group("BlocksSpawn")
for obstacle in obstacles:
if obstacle is SnakePart:
if obstacle.state == obstacle.States.ALIVE:
length += 1
ouroboros_possible = !length % 2
return length

View File

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

View File

@ -33,7 +33,7 @@ var timer_ref : Timer = $"../Timer"
var next_part : SnakePart = null
var skip_next_move_propagation : bool = false
var queued_growth : int = 21
var queued_growth : int = 0
signal on_movement(new_dir)
signal on_death
@ -238,6 +238,7 @@ func ouroboros() -> void:
# The head can spawn a new snake
if part_type == PartTypes.HEAD:
GameManager.score += 1
get_tree().get_first_node_in_group("GameClockPause").start(1)
get_tree().get_first_node_in_group("GameClock").stop()
spawn_new_snake()

View File

@ -17,6 +17,7 @@ config/icon="res://icon.svg"
[autoload]
GridManager="*res://Scripts/grid_manager.gd"
GameManager="*res://Scripts/game_manager.gd"
[global_group]