generated from krampus/template-godot4
Game state management & grunk counter
This commit is contained in:
parent
faaf48d6a7
commit
143f35e761
@ -15,6 +15,10 @@ run/main_scene="res://levels/sandbox/sandbox.tscn"
|
|||||||
config/features=PackedStringArray("4.4", "Forward Plus")
|
config/features=PackedStringArray("4.4", "Forward Plus")
|
||||||
run/max_fps=60
|
run/max_fps=60
|
||||||
|
|
||||||
|
[autoload]
|
||||||
|
|
||||||
|
GameManager="*res://src/game/game_manager.tscn"
|
||||||
|
|
||||||
[debug]
|
[debug]
|
||||||
|
|
||||||
gdscript/warnings/untyped_declaration=2
|
gdscript/warnings/untyped_declaration=2
|
||||||
|
7
src/game/game.gd
Normal file
7
src/game/game.gd
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
class_name Game extends Node
|
||||||
|
## Interface to the game as an application.
|
||||||
|
|
||||||
|
## Handy typed singleton access.
|
||||||
|
static var manager: GameManagerType:
|
||||||
|
get():
|
||||||
|
return GameManager
|
1
src/game/game.gd.uid
Normal file
1
src/game/game.gd.uid
Normal file
@ -0,0 +1 @@
|
|||||||
|
uid://dxl25lkyped4
|
6
src/game/game.tscn
Normal file
6
src/game/game.tscn
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
[gd_scene load_steps=2 format=3 uid="uid://qpq2cm1hgeha"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" uid="uid://dxl25lkyped4" path="res://src/game/game.gd" id="1_qnjlk"]
|
||||||
|
|
||||||
|
[node name="Game" type="Node"]
|
||||||
|
script = ExtResource("1_qnjlk")
|
13
src/game/game_manager.gd
Normal file
13
src/game/game_manager.gd
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
class_name GameManagerType extends Node
|
||||||
|
## Autoloaded singleton encapsulating game state.
|
||||||
|
|
||||||
|
signal grunk_collected(delta: float)
|
||||||
|
|
||||||
|
var grunk_tank := 0.0
|
||||||
|
|
||||||
|
var alert_level := 0
|
||||||
|
|
||||||
|
|
||||||
|
func collect_grunk(delta: float) -> void:
|
||||||
|
grunk_tank += delta
|
||||||
|
grunk_collected.emit(delta)
|
1
src/game/game_manager.gd.uid
Normal file
1
src/game/game_manager.gd.uid
Normal file
@ -0,0 +1 @@
|
|||||||
|
uid://c1i5gnht15x0e
|
6
src/game/game_manager.tscn
Normal file
6
src/game/game_manager.tscn
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
[gd_scene load_steps=2 format=3 uid="uid://cnrtgmanw40ei"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" uid="uid://c1i5gnht15x0e" path="res://src/game/game_manager.gd" id="1_08e4a"]
|
||||||
|
|
||||||
|
[node name="GameManager" type="Node"]
|
||||||
|
script = ExtResource("1_08e4a")
|
20
src/ui/hud/grunk_counter/grunk_counter.gd
Normal file
20
src/ui/hud/grunk_counter/grunk_counter.gd
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
extends HBoxContainer
|
||||||
|
## Does a funky lil bump when you collect tha grunk
|
||||||
|
|
||||||
|
const COUNTER_BUMP_RATE := 0.3
|
||||||
|
|
||||||
|
@onready var counter: Label = %Counter
|
||||||
|
|
||||||
|
|
||||||
|
func _ready() -> void:
|
||||||
|
Game.manager.grunk_collected.connect(on_grunk_collected)
|
||||||
|
counter.pivot_offset = Vector2(0, counter.size.y)
|
||||||
|
|
||||||
|
|
||||||
|
func on_grunk_collected(delta: float) -> void:
|
||||||
|
counter.text = str(int(Game.manager.grunk_tank))
|
||||||
|
counter.scale = Vector2.ONE + Vector2.ONE * clampf(delta / 128.0, 0.1, 1.0)
|
||||||
|
|
||||||
|
|
||||||
|
func _process(_delta: float) -> void:
|
||||||
|
counter.scale = counter.scale.lerp(Vector2.ONE, COUNTER_BUMP_RATE)
|
1
src/ui/hud/grunk_counter/grunk_counter.gd.uid
Normal file
1
src/ui/hud/grunk_counter/grunk_counter.gd.uid
Normal file
@ -0,0 +1 @@
|
|||||||
|
uid://dspsijt4ysg4x
|
30
src/ui/hud/grunk_counter/grunk_counter.tscn
Normal file
30
src/ui/hud/grunk_counter/grunk_counter.tscn
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
[gd_scene load_steps=3 format=3 uid="uid://cq8qcp5xg41e0"]
|
||||||
|
|
||||||
|
[ext_resource type="Theme" uid="uid://b07fevr214mmr" path="res://src/ui/hud/hud_theme.tres" id="1_fwos1"]
|
||||||
|
[ext_resource type="Script" uid="uid://dspsijt4ysg4x" path="res://src/ui/hud/grunk_counter/grunk_counter.gd" id="2_jfqlp"]
|
||||||
|
|
||||||
|
[node name="GrunkCounter" type="HBoxContainer"]
|
||||||
|
anchors_preset = 2
|
||||||
|
anchor_top = 1.0
|
||||||
|
anchor_bottom = 1.0
|
||||||
|
offset_top = -45.0
|
||||||
|
offset_right = 134.0
|
||||||
|
grow_vertical = 0
|
||||||
|
theme = ExtResource("1_fwos1")
|
||||||
|
alignment = 2
|
||||||
|
script = ExtResource("2_jfqlp")
|
||||||
|
|
||||||
|
[node name="Label" type="Label" parent="."]
|
||||||
|
texture_filter = 6
|
||||||
|
layout_mode = 2
|
||||||
|
size_flags_horizontal = 0
|
||||||
|
text = "GRUNK: "
|
||||||
|
|
||||||
|
[node name="Counter" type="Label" parent="."]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
texture_filter = 6
|
||||||
|
layout_mode = 2
|
||||||
|
size_flags_horizontal = 4
|
||||||
|
size_flags_vertical = 8
|
||||||
|
text = " 0"
|
||||||
|
horizontal_alignment = 2
|
@ -1,7 +1,8 @@
|
|||||||
[gd_scene load_steps=3 format=3 uid="uid://dq1x21tq06dud"]
|
[gd_scene load_steps=4 format=3 uid="uid://dq1x21tq06dud"]
|
||||||
|
|
||||||
[ext_resource type="Theme" uid="uid://b07fevr214mmr" path="res://src/ui/hud/hud_theme.tres" id="1_lirk3"]
|
[ext_resource type="Theme" uid="uid://b07fevr214mmr" path="res://src/ui/hud/hud_theme.tres" id="1_lirk3"]
|
||||||
[ext_resource type="Script" uid="uid://lrsv0185bfu" path="res://src/ui/hud/player_hud.gd" id="2_j6lpx"]
|
[ext_resource type="Script" uid="uid://lrsv0185bfu" path="res://src/ui/hud/player_hud.gd" id="2_j6lpx"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://cq8qcp5xg41e0" path="res://src/ui/hud/grunk_counter/grunk_counter.tscn" id="3_5be8f"]
|
||||||
|
|
||||||
[node name="PlayerHUD" type="Control"]
|
[node name="PlayerHUD" type="Control"]
|
||||||
layout_mode = 3
|
layout_mode = 3
|
||||||
@ -45,3 +46,21 @@ offset_right = 20.0
|
|||||||
grow_horizontal = 2
|
grow_horizontal = 2
|
||||||
grow_vertical = 0
|
grow_vertical = 0
|
||||||
text = "Press [E] to use"
|
text = "Press [E] to use"
|
||||||
|
|
||||||
|
[node name="MarginContainer" type="MarginContainer" parent="."]
|
||||||
|
layout_mode = 1
|
||||||
|
anchors_preset = 2
|
||||||
|
anchor_top = 1.0
|
||||||
|
anchor_bottom = 1.0
|
||||||
|
offset_top = -77.0
|
||||||
|
offset_right = 123.0
|
||||||
|
grow_vertical = 0
|
||||||
|
theme_override_constants/margin_left = 32
|
||||||
|
theme_override_constants/margin_top = 32
|
||||||
|
theme_override_constants/margin_right = 32
|
||||||
|
theme_override_constants/margin_bottom = 32
|
||||||
|
|
||||||
|
[node name="GrunkCounter" parent="MarginContainer" instance=ExtResource("3_5be8f")]
|
||||||
|
layout_mode = 2
|
||||||
|
size_flags_horizontal = 0
|
||||||
|
size_flags_vertical = 8
|
||||||
|
@ -218,8 +218,12 @@ func _process(_delta: float) -> void:
|
|||||||
_mutex.lock()
|
_mutex.lock()
|
||||||
var new_total := _clear_total
|
var new_total := _clear_total
|
||||||
_mutex.unlock()
|
_mutex.unlock()
|
||||||
if abs(new_total - _prev_clear_total) > CLEAR_TOTAL_EPSILON:
|
var delta := new_total - _prev_clear_total
|
||||||
|
if abs(delta) > CLEAR_TOTAL_EPSILON:
|
||||||
clear_total_updated.emit(new_total)
|
clear_total_updated.emit(new_total)
|
||||||
|
# XXX due to fp error, this will drift from the "true count" over time
|
||||||
|
# but it probably won't matter :shrug:
|
||||||
|
Game.manager.collect_grunk(delta)
|
||||||
_prev_clear_total = new_total
|
_prev_clear_total = new_total
|
||||||
|
|
||||||
# If paint_continuous wasn't called last frame, stop the current polyline.
|
# If paint_continuous wasn't called last frame, stop the current polyline.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user