generated from krampus/template-godot4
40 lines
1.1 KiB
GDScript
40 lines
1.1 KiB
GDScript
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 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)
|
|
|
|
|
|
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(clampf(World.instance.manager.grunk_vault / MAX_GRUNK, 0.0, 1.0))
|
|
|
|
grunk_pump_sfx.play()
|
|
|
|
|
|
func set_liquid_level(proportion: float) -> void:
|
|
(
|
|
create_tween()
|
|
. tween_property(grunk_liquid, "position:y", proportion * LIQUID_FACTOR, TANK_FILL_TIME)
|
|
. set_trans(Tween.TRANS_EXPO)
|
|
)
|