class_name GameManagerType extends Node ## Autoloaded singleton encapsulating game state. ## Emitted just after `delta` is added to the player's grunk tank. signal grunk_collected(delta: float) ## Emitted just after the grunk tank is emptied, where `amount` is how much had been collected. signal grunk_emptied(amount: float) ## 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 ## Emitted just after the player collects an item. signal item_collected(item: Item) const MAX_ALERT := 6 ## Maximum amount of grunk the player can carry in their tank. @export var grunk_tank_limit := 120000 ## Amount of grunk the player is currently carrying. var grunk_tank := 0.0 ## 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. var alert_level := 0 ## Add to the player's grunk tank. func collect_grunk(delta: float) -> void: grunk_tank += delta grunk_collected.emit(delta) ## 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() func is_tank_full() -> bool: return grunk_tank >= grunk_tank_limit func get_tank_fill_pct() -> float: return grunk_tank / grunk_tank_limit ## 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