straywild/progression/player_cooler_capacity.gd

88 lines
2.3 KiB
GDScript

class_name PlayerCoolerCapacity
extends Node
const PlayerWalletType = preload("res://economy/player_wallet.gd")
const PlayerHomeStateType = preload("res://homes/player_home_state.gd")
signal capacity_changed(level: int, capacity: int)
## Compatibility adapter for saves and systems that still refer to the old
## cooler-capacity object. Storage is now derived exclusively from the player's
## home tier; this object is not independently purchasable.
const CAPACITIES: Array[int] = [9, 18, 27, 36, 45, 54, 63, 72]
const EXPANSION_COSTS: Array[int] = [75, 175, 400, 850, 1500, 2500, 4000]
const MAX_LEVEL: int = 7
const MAX_CAPACITY: int = 72
var _home_state: PlayerHomeStateType
var _legacy_capacity_level: int = 0
func bind_home_state(home_state: PlayerHomeStateType) -> void:
if _home_state == home_state:
return
if (
_home_state != null
and _home_state.changed.is_connected(_on_home_changed)
):
_home_state.changed.disconnect(_on_home_changed)
_home_state = home_state
if (
_home_state != null
and not _home_state.changed.is_connected(_on_home_changed)
):
_home_state.changed.connect(_on_home_changed)
_on_home_changed()
func get_level() -> int:
return _legacy_capacity_level
func get_capacity() -> int:
if _home_state != null:
# A new home upgrade grants its authored capacity. Older saves retain any
# separately purchased storage level so reducing the first RV tier cannot
# hide or discard items that were already placed in later slots.
return maxi(
_home_state.get_storage_capacity(),
CAPACITIES[clampi(_legacy_capacity_level, 0, MAX_LEVEL)],
)
return CAPACITIES[clampi(_legacy_capacity_level, 0, MAX_LEVEL)]
func get_next_capacity() -> int:
return -1
func get_next_cost() -> int:
return -1
func can_purchase(_wallet: PlayerWalletType) -> bool:
return false
func purchase(_wallet: PlayerWalletType) -> bool:
return false
func restore_level(level: int) -> bool:
var validated: int = clampi(level, 0, MAX_LEVEL)
var changed: bool = _legacy_capacity_level != validated
_legacy_capacity_level = validated
if changed:
capacity_changed.emit(get_level(), get_capacity())
return true
func reset_to_defaults() -> void:
restore_level(0)
func to_save_data() -> Dictionary:
return {"capacity_level": get_level()}
func _on_home_changed() -> void:
capacity_changed.emit(get_level(), get_capacity())