3d-printing-simulator-textb.../Scenes/Global/player_data.gd

66 lines
1.3 KiB
GDScript

extends Node
var xp: float = 0:
set(value):
xp = value
var money: float = 500:
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 = 10:
set(value):
max_order_amount = value
max_order_amount_changed.emit(max_order_amount)
var sell_multiplier: float = 0.5
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 - 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
xp_changed.emit(xp)
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