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://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://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://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"]
 | 
					[node name="Main" type="Node2D"]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -34,5 +35,11 @@ position = Vector2(707, 325)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[node name="RestartTimer" type="Timer" parent="." groups=["GameClockPause"]]
 | 
					[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="area_exited" from="Level" to="SnakePart" method="_on_level_area_exited"]
 | 
				
			||||||
[connection signal="timeout" from="RestartTimer" to="Timer" method="start" binds= [0.3]]
 | 
					[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 next_part : SnakePart = null
 | 
				
			||||||
var skip_next_move_propagation : bool = false
 | 
					var skip_next_move_propagation : bool = false
 | 
				
			||||||
var queued_growth : int = 21
 | 
					var queued_growth : int = 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
signal on_movement(new_dir)
 | 
					signal on_movement(new_dir)
 | 
				
			||||||
signal on_death
 | 
					signal on_death
 | 
				
			||||||
| 
						 | 
					@ -238,6 +238,7 @@ func ouroboros() -> void:
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	# The head can spawn a new snake
 | 
						# The head can spawn a new snake
 | 
				
			||||||
	if part_type == PartTypes.HEAD:
 | 
						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("GameClockPause").start(1)
 | 
				
			||||||
		get_tree().get_first_node_in_group("GameClock").stop()
 | 
							get_tree().get_first_node_in_group("GameClock").stop()
 | 
				
			||||||
		spawn_new_snake()
 | 
							spawn_new_snake()
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -17,6 +17,7 @@ config/icon="res://icon.svg"
 | 
				
			||||||
[autoload]
 | 
					[autoload]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
GridManager="*res://Scripts/grid_manager.gd"
 | 
					GridManager="*res://Scripts/grid_manager.gd"
 | 
				
			||||||
 | 
					GameManager="*res://Scripts/game_manager.gd"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[global_group]
 | 
					[global_group]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue