Browse Source

:tada: Make the game pausable

Give you time to breath. Or to take a screenshot.
DricomDragon 1 year ago
parent
commit
0a2d93d666
3 changed files with 47 additions and 5 deletions
  1. 38 0
      godot/run/Freezer.gd
  2. 1 4
      godot/run/Main.gd
  3. 8 1
      godot/run/Main.tscn

+ 38 - 0
godot/run/Freezer.gd

@@ -0,0 +1,38 @@
+extends Node
+# Manage game state
+
+enum State {IDLE, GAMING}
+
+var _current_state = State.IDLE
+
+
+func _ready():
+	randomize() # Plant seed for random number generation
+
+
+func trigger_pause():
+	if _pausable():
+		_toggle_pause()
+
+
+func _unhandled_input(event: InputEvent):
+	if event.is_action_pressed("ui_accept"):
+		print("Trigger pause")
+		trigger_pause()
+
+
+func _pausable():
+	return _current_state == State.GAMING
+
+
+func _toggle_pause():
+	var previous := get_tree().is_paused()
+	get_tree().set_pause(!previous)
+
+
+func _on_Main_game_over():
+	_current_state = State.IDLE
+
+
+func _on_Main_game_started():
+	_current_state = State.GAMING

+ 1 - 4
godot/run/Main.gd

@@ -1,4 +1,5 @@
 extends Node2D
+# Manage game cycles
 
 
 signal game_started
@@ -28,10 +29,6 @@ func game_over():
 	emit_signal("game_over")
 
 
-func _ready():
-	randomize() # Plant seed for random number generation
-
-
 func _on_StartTimer_timeout():
 	$ScoreTimer.start()
 	emit_signal("game_started")

+ 8 - 1
godot/run/Main.tscn

@@ -1,9 +1,10 @@
-[gd_scene load_steps=8 format=2]
+[gd_scene load_steps=9 format=2]
 
 [ext_resource path="res://component/ui/hud/HUD.tscn" type="PackedScene" id=1]
 [ext_resource path="res://run/HouseInAForestLoop.ogg" type="AudioStream" id=2]
 [ext_resource path="res://component/ui/background/Background.tscn" type="PackedScene" id=3]
 [ext_resource path="res://component/entity/player/Player.tscn" type="PackedScene" id=4]
+[ext_resource path="res://run/Freezer.gd" type="Script" id=5]
 [ext_resource path="res://effect/loose/gameover.wav" type="AudioStream" id=6]
 [ext_resource path="res://run/Main.gd" type="Script" id=7]
 [ext_resource path="res://component/entity/spawner/MobSpawner.tscn" type="PackedScene" id=8]
@@ -41,8 +42,14 @@ stream = ExtResource( 2 )
 [node name="DeathSound" type="AudioStreamPlayer" parent="Main"]
 stream = ExtResource( 6 )
 
+[node name="Freezer" type="Node" parent="."]
+pause_mode = 2
+script = ExtResource( 5 )
+
 [connection signal="game_over" from="Main" to="Main/MobSpawner" method="_on_Main_game_over"]
+[connection signal="game_over" from="Main" to="Freezer" method="_on_Main_game_over"]
 [connection signal="game_started" from="Main" to="Main/MobSpawner" method="_on_Main_game_started"]
+[connection signal="game_started" from="Main" to="Freezer" method="_on_Main_game_started"]
 [connection signal="timeout" from="Main/ScoreTimer" to="Main" method="_on_ScoreTimer_timeout"]
 [connection signal="timeout" from="Main/StartTimer" to="Main" method="_on_StartTimer_timeout"]
 [connection signal="timeout" from="Main/StartTimer" to="Main/Player" method="spawn"]