Adds score tracking to level
							parent
							
								
									d405ab5846
								
							
						
					
					
						commit
						f1054637ed
					
				| 
						 | 
				
			
			@ -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]]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,3 @@
 | 
			
		|||
extends Node
 | 
			
		||||
 | 
			
		||||
var score : int = 0
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1 @@
 | 
			
		|||
uid://ce6w51wxkuq4l
 | 
			
		||||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1 @@
 | 
			
		|||
uid://bwiflwp3hufyu
 | 
			
		||||
| 
						 | 
				
			
			@ -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()
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -17,6 +17,7 @@ config/icon="res://icon.svg"
 | 
			
		|||
[autoload]
 | 
			
		||||
 | 
			
		||||
GridManager="*res://Scripts/grid_manager.gd"
 | 
			
		||||
GameManager="*res://Scripts/game_manager.gd"
 | 
			
		||||
 | 
			
		||||
[global_group]
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue