extends Node3D # The player's ship, a safe zone where they can deposit grunk, save their game, and relax. # TODO figure out whatever this is lol const MAX_GRUNK := 6400000.0 const MIN_LIQUID_PCT := 0.001 const LIQUID_FACTOR := 2.8 const TANK_FILL_TIME := 1.0 @onready var tank_interactor: Interactive = %TankInteractor @onready var grunk_liquid: MeshInstance3D = %GrunkLiquid @onready var grunk_pump_sfx: AudioStreamPlayer3D = %GrunkPumpSFX func _ready() -> void: World.instance.manager.grunk_collected.connect(_enable_tank) _deferred_init.call_deferred() func _deferred_init() -> void: set_liquid_level(vault_fill_pct()) func _enable_tank(_delta: float) -> void: tank_interactor.enabled = true ## Called when the player interacts with the grunk tank. func deposit_grunk() -> void: # Tank is disabled until the player collects more grunk. tank_interactor.enabled = false World.instance.manager.deposit_tank() set_liquid_level(vault_fill_pct()) grunk_pump_sfx.play() func vault_fill_pct() -> float: return clampf(World.instance.manager.grunk_vault / MAX_GRUNK, 0.0, 1.0) func set_liquid_level(proportion: float) -> void: if proportion > MIN_LIQUID_PCT: ( create_tween() . tween_property(grunk_liquid, "position:y", proportion * LIQUID_FACTOR, TANK_FILL_TIME) . set_trans(Tween.TRANS_EXPO) )