Cleanup
This commit is contained in:
@@ -12,21 +12,59 @@ const HUGE_COST_EXPONENT: int = 1000000
|
||||
@export var is_automatic: bool = true
|
||||
@export var press_buys_generator: bool = true
|
||||
@export var run_multiplier: float = 1.0
|
||||
@export var starts_unlocked: bool = true
|
||||
@export var starts_available: bool = true
|
||||
|
||||
## Manual click fallback when no data is assigned.
|
||||
@export var click_mantissa: float = 1.0
|
||||
@export var click_exponent: int = 0
|
||||
|
||||
var owned: int = 0
|
||||
var purchased_count: int = 0
|
||||
var owned: int:
|
||||
get:
|
||||
_ensure_registered()
|
||||
return GameState.get_generator_owned(_generator_id)
|
||||
set(value):
|
||||
_ensure_registered()
|
||||
GameState.set_generator_owned(_generator_id, value)
|
||||
|
||||
var purchased_count: int:
|
||||
get:
|
||||
_ensure_registered()
|
||||
return GameState.get_generator_purchased_count(_generator_id)
|
||||
set(value):
|
||||
_ensure_registered()
|
||||
GameState.set_generator_purchased_count(_generator_id, value)
|
||||
|
||||
var is_unlocked: bool:
|
||||
get:
|
||||
_ensure_registered()
|
||||
return GameState.is_generator_unlocked(_generator_id)
|
||||
set(value):
|
||||
_ensure_registered()
|
||||
GameState.set_generator_unlocked(_generator_id, value)
|
||||
|
||||
var is_available: bool:
|
||||
get:
|
||||
_ensure_registered()
|
||||
return GameState.is_generator_available(_generator_id)
|
||||
set(value):
|
||||
_ensure_registered()
|
||||
GameState.set_generator_available(_generator_id, value)
|
||||
|
||||
var cycle_progress_seconds: float = 0.0
|
||||
var _generator_id: StringName = &""
|
||||
var _is_registered: bool = false
|
||||
|
||||
func _ready() -> void:
|
||||
_generator_id = _resolve_generator_id()
|
||||
_ensure_registered()
|
||||
cycle_progress_seconds = 0.0
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
if not is_automatic:
|
||||
return
|
||||
if not is_available_to_player():
|
||||
return
|
||||
if data == null or owned <= 0:
|
||||
return
|
||||
|
||||
@@ -63,6 +101,9 @@ func get_cost_for_amount(amount: int = 1) -> BigNumber:
|
||||
return _float_to_big_number(raw_cost)
|
||||
|
||||
func can_buy(amount: int = 1) -> bool:
|
||||
if not is_available_to_player():
|
||||
return false
|
||||
|
||||
var cost: BigNumber = get_cost_for_amount(amount)
|
||||
var current: BigNumber = _get_currency_amount()
|
||||
return current.is_greater_than(cost) or current.is_equal_to(cost)
|
||||
@@ -70,6 +111,8 @@ func can_buy(amount: int = 1) -> bool:
|
||||
func buy(amount: int = 1) -> bool:
|
||||
if data == null:
|
||||
return false
|
||||
if not is_available_to_player():
|
||||
return false
|
||||
|
||||
var safe_amount: int = maxi(amount, 1)
|
||||
var total_cost: BigNumber = get_cost_for_amount(safe_amount)
|
||||
@@ -85,6 +128,8 @@ func buy(amount: int = 1) -> bool:
|
||||
func buy_max() -> int:
|
||||
if data == null:
|
||||
return 0
|
||||
if not is_available_to_player():
|
||||
return 0
|
||||
|
||||
var available_currency: float = _big_number_to_float(_get_currency_amount())
|
||||
var estimated_max: int = data.max_affordable(owned, available_currency)
|
||||
@@ -108,6 +153,9 @@ func buy_max() -> int:
|
||||
return best if buy(best) else 0
|
||||
|
||||
func _on_pressed() -> void:
|
||||
if not is_available_to_player():
|
||||
return
|
||||
|
||||
if data != null and press_buys_generator:
|
||||
buy(1)
|
||||
return
|
||||
@@ -117,6 +165,13 @@ func _on_pressed() -> void:
|
||||
func grant_currency(amount: BigNumber) -> void:
|
||||
_add_currency(amount)
|
||||
|
||||
func get_generator_id() -> StringName:
|
||||
_ensure_registered()
|
||||
return _generator_id
|
||||
|
||||
func is_available_to_player() -> bool:
|
||||
return is_unlocked and is_available
|
||||
|
||||
func _add_currency(amount: BigNumber) -> void:
|
||||
match currency:
|
||||
GameState.CurrencyType.gold:
|
||||
@@ -160,3 +215,36 @@ func _big_number_to_float(value: BigNumber) -> float:
|
||||
if value.exponent < -308:
|
||||
return 0.0
|
||||
return value.mantissa * pow(10.0, float(value.exponent))
|
||||
|
||||
func _resolve_generator_id() -> StringName:
|
||||
if data != null:
|
||||
var data_id: String = String(data.id)
|
||||
if not data_id.is_empty():
|
||||
return StringName(data_id)
|
||||
|
||||
if not String(name).is_empty():
|
||||
return StringName(String(name))
|
||||
|
||||
return &"generator"
|
||||
|
||||
func _ensure_registered() -> void:
|
||||
if _is_registered:
|
||||
return
|
||||
|
||||
if _generator_id == &"":
|
||||
_generator_id = _resolve_generator_id()
|
||||
if _generator_id == &"":
|
||||
return
|
||||
|
||||
GameState.register_generator(_generator_id, _default_unlocked_state(), _default_available_state())
|
||||
_is_registered = true
|
||||
|
||||
func _default_unlocked_state() -> bool:
|
||||
if data != null:
|
||||
return data.starts_unlocked
|
||||
return starts_unlocked
|
||||
|
||||
func _default_available_state() -> bool:
|
||||
if data != null:
|
||||
return data.starts_available
|
||||
return starts_available
|
||||
|
||||
@@ -3,6 +3,8 @@ extends Resource
|
||||
|
||||
@export var id: StringName = &""
|
||||
@export var name: String = ""
|
||||
@export var starts_unlocked: bool = true
|
||||
@export var starts_available: bool = true
|
||||
|
||||
## Base cost and exponential growth (part I): cost_next = b * r^owned
|
||||
@export var initial_cost: float = 10.0
|
||||
|
||||
13
generator/secondary_generator.tres
Normal file
13
generator/secondary_generator.tres
Normal file
@@ -0,0 +1,13 @@
|
||||
[gd_resource type="Resource" script_class="CurrencyGeneratorData" format=3 uid="uid://04pmc034qupd"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://b00tqsuhxdy0d" path="res://generator/currency_generator_data.gd" id="1_s3g28"]
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_s3g28")
|
||||
id = &"Gems"
|
||||
name = "Gems Mine"
|
||||
initial_cost = 60.0
|
||||
initial_time = 3.0
|
||||
initial_revenue = 60.0
|
||||
initial_productivity = 20.0
|
||||
metadata/_custom_type_script = "uid://b00tqsuhxdy0d"
|
||||
Reference in New Issue
Block a user