78 lines
1.6 KiB
GDScript
78 lines
1.6 KiB
GDScript
extends Node
|
|
|
|
var xp: float = 0:
|
|
set(value):
|
|
xp = value
|
|
xp_changed.emit(xp)
|
|
|
|
var money: float = 200:
|
|
set(value):
|
|
money = value
|
|
money_changed.emit(money)
|
|
|
|
var level: int = 1:
|
|
set(value):
|
|
level = value
|
|
level_changed.emit(level)
|
|
|
|
var max_order_amount: int = 3:
|
|
set(value):
|
|
max_order_amount = value
|
|
max_order_amount_changed.emit(max_order_amount)
|
|
|
|
var owned_printers: int = 0:
|
|
set(value):
|
|
owned_printers = value
|
|
owned_printers_changed.emit(value)
|
|
|
|
var sell_multiplier: float = 0.5:
|
|
set(value):
|
|
sell_multiplier = value
|
|
|
|
var failure_chance: float = 0.2:
|
|
set(value):
|
|
failure_chance = value
|
|
|
|
var jobs: Array[JobData]
|
|
|
|
# Signal - player stats
|
|
signal xp_changed(new_xp)
|
|
signal money_changed(new_money)
|
|
signal level_changed(new_level)
|
|
signal max_order_amount_changed(new_max_order_amount)
|
|
signal owned_printers_changed(new_amount)
|
|
|
|
# Signal - functions
|
|
signal give_experience(xp_amount)
|
|
signal give_money(money_amount)
|
|
|
|
func _ready() -> void:
|
|
give_experience.connect(_on_give_experience)
|
|
give_money.connect(_on_give_money)
|
|
|
|
func _on_give_experience(amount: float) -> void:
|
|
print('Gave: %.0f xp' % amount)
|
|
xp += amount
|
|
|
|
while xp >= xp_required_for_level(level):
|
|
xp -= xp_required_for_level(level)
|
|
level += 1
|
|
|
|
func _on_give_money(amount: float) -> void:
|
|
money += amount
|
|
|
|
func xp_required_for_level(player_level: int) -> float:
|
|
if player_level == 1:
|
|
return 100.0
|
|
|
|
var base_xp = 100 * (player_level - 1)
|
|
var exponent_xp = pow(player_level - 1, 1.8) * 25
|
|
|
|
return float(base_xp + exponent_xp)
|
|
|
|
func try_purchase(amount) -> bool:
|
|
if amount <= money:
|
|
money -= amount
|
|
return true
|
|
else:
|
|
return false
|