2025-03-07 19:26:12 -07:00
|
|
|
class_name GameManagerType extends Node
|
|
|
|
## Autoloaded singleton encapsulating game state.
|
|
|
|
|
2025-03-13 13:34:35 -06:00
|
|
|
## Emitted just after `delta` is added to the player's grunk tank.
|
2025-03-07 19:26:12 -07:00
|
|
|
signal grunk_collected(delta: float)
|
|
|
|
|
2025-03-19 17:27:50 -06:00
|
|
|
## Emitted just after the grunk tank is emptied, where `amount` is how much had been collected.
|
|
|
|
signal grunk_emptied(amount: float)
|
|
|
|
|
2025-03-13 13:34:35 -06:00
|
|
|
## Emitted just before the alert level is raised to `new_value`.
|
|
|
|
signal alert_raised(new_value: int)
|
|
|
|
|
|
|
|
## Emitted just before the alert level is reset to zero.
|
|
|
|
signal alert_cleared
|
|
|
|
|
|
|
|
const MAX_ALERT := 6
|
|
|
|
|
2025-03-20 22:45:19 -06:00
|
|
|
## Maximum amount of grunk the player can carry in their tank.
|
|
|
|
@export var grunk_tank_limit := 120000
|
|
|
|
|
2025-03-19 17:27:50 -06:00
|
|
|
## Amount of grunk the player is currently carrying.
|
2025-03-07 19:26:12 -07:00
|
|
|
var grunk_tank := 0.0
|
|
|
|
|
2025-03-19 17:27:50 -06:00
|
|
|
## Total amount of grunk that has been deposited by the player.
|
|
|
|
var grunk_vault := 0.0
|
|
|
|
|
|
|
|
## Level of grunk agressiveness, raised whenever the player messes up.
|
2025-03-07 19:26:12 -07:00
|
|
|
var alert_level := 0
|
|
|
|
|
|
|
|
|
2025-03-13 13:34:35 -06:00
|
|
|
## Add to the player's grunk tank.
|
2025-03-07 19:26:12 -07:00
|
|
|
func collect_grunk(delta: float) -> void:
|
|
|
|
grunk_tank += delta
|
|
|
|
grunk_collected.emit(delta)
|
2025-03-13 13:34:35 -06:00
|
|
|
|
|
|
|
|
2025-03-19 17:27:50 -06:00
|
|
|
## Empty the player's grunk tank, e.g. when depositing grunk.
|
|
|
|
func empty_tank() -> void:
|
|
|
|
var amount := grunk_tank
|
|
|
|
grunk_tank = 0.0
|
|
|
|
grunk_emptied.emit(amount)
|
|
|
|
|
|
|
|
|
|
|
|
## Deposit the player's grunk in the vault, emptying the player's tank.
|
|
|
|
func deposit_tank() -> void:
|
|
|
|
grunk_vault += grunk_tank
|
|
|
|
empty_tank()
|
|
|
|
|
|
|
|
|
2025-03-20 22:45:19 -06:00
|
|
|
func is_tank_full() -> bool:
|
|
|
|
return grunk_tank >= grunk_tank_limit
|
|
|
|
|
|
|
|
|
|
|
|
func get_tank_fill_pct() -> float:
|
|
|
|
return grunk_tank / grunk_tank_limit
|
|
|
|
|
|
|
|
|
2025-03-13 13:34:35 -06:00
|
|
|
## Raise the alert level, if possible.
|
|
|
|
func raise_alert(delta: int) -> void:
|
|
|
|
var new_value := clampi(alert_level + delta, 0, MAX_ALERT)
|
|
|
|
if new_value != alert_level:
|
|
|
|
alert_raised.emit(new_value)
|
|
|
|
alert_level = new_value
|
|
|
|
|
|
|
|
|
|
|
|
## Reset the alert level to zero.
|
|
|
|
func clear_alert() -> void:
|
|
|
|
alert_cleared.emit()
|
|
|
|
alert_level = 0
|