2025-09-03 18:39:58 +02:00
|
|
|
extends Resource
|
|
|
|
|
class_name Upgrade
|
|
|
|
|
|
|
|
|
|
|
2025-09-06 23:26:37 +02:00
|
|
|
enum SCALE_TYPE { LINEAR, EXP, LOG }
|
2025-09-03 18:39:58 +02:00
|
|
|
enum UPGRADE_DIRECTION { INCREASE = 1, DECREASE = -1 }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@export var icon : Texture2D = preload("res://Assets/Icones/medal2.png")
|
2025-09-05 19:33:56 +02:00
|
|
|
@export var text : String
|
|
|
|
|
@export var baseCost : int :
|
|
|
|
|
set(value):
|
|
|
|
|
baseCost = value
|
|
|
|
|
cost = value
|
2025-09-05 04:07:17 +02:00
|
|
|
@export_range(0.001, 999, 0.001, "hide_slider") var value : float
|
2025-09-03 18:39:58 +02:00
|
|
|
@export_range(-1, 100, 1, "hide_slider") var maxLevel : int = -1 ##[param -1] for infinite leveling
|
|
|
|
|
|
|
|
|
|
@export_group("Upgrade Scaling")
|
|
|
|
|
@export var upgradeDirection : UPGRADE_DIRECTION = UPGRADE_DIRECTION.INCREASE
|
2025-09-06 23:26:37 +02:00
|
|
|
@export var upgradeScaleType : SCALE_TYPE = SCALE_TYPE.LINEAR
|
2025-09-03 18:39:58 +02:00
|
|
|
@export var costScaleType : SCALE_TYPE = SCALE_TYPE.LINEAR
|
|
|
|
|
@export var costModificator : float
|
|
|
|
|
|
|
|
|
|
|
2025-09-05 19:33:56 +02:00
|
|
|
var cost : int
|
2025-09-03 18:39:58 +02:00
|
|
|
var level : int = 0
|
|
|
|
|
var isLevelMax : bool :
|
|
|
|
|
get(): return maxLevel == level
|
|
|
|
|
|
|
|
|
|
|
2025-09-06 15:16:48 +02:00
|
|
|
func upgradeProperty(subject: Variant, property: String) -> void:
|
2025-09-06 23:26:37 +02:00
|
|
|
subject.set(property, getNextValue(subject.get(property), value, upgradeScaleType))
|
2025-09-03 18:39:58 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
func upgradeUpgrade() -> void:
|
2025-09-05 19:33:56 +02:00
|
|
|
level += 1
|
|
|
|
|
Game.money -= cost
|
2025-09-06 23:26:37 +02:00
|
|
|
cost = getNextValue(cost, costModificator, costScaleType)
|
2025-09-03 18:39:58 +02:00
|
|
|
|
|
|
|
|
|
2025-09-04 02:54:37 +02:00
|
|
|
func canUpgrade():
|
2025-09-06 17:32:46 +02:00
|
|
|
return not isLevelMax && Game.money >= cost
|
2025-09-03 18:39:58 +02:00
|
|
|
|
|
|
|
|
|
2025-09-06 23:26:37 +02:00
|
|
|
func getNextValue(oldValue, baseValue, scaleType : SCALE_TYPE):
|
|
|
|
|
match scaleType:
|
|
|
|
|
SCALE_TYPE.LINEAR: return oldValue + value
|
|
|
|
|
_:
|
|
|
|
|
push_warning("Upgrade scale type not defined !")
|
|
|
|
|
return oldValue
|