extends Resource class_name Upgrade enum SCALE_TYPE { NONE, LINEAR, EXP, LOG } enum UPGRADE_DIRECTION { INCREASE = 1, DECREASE = -1 } @export var icon : Texture2D = preload("res://Assets/Icones/medal2.png") @export var text : String @export var baseCost : int : set(value): baseCost = value cost = value @export_range(0.001, 999, 0.001, "hide_slider") var value : float @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 @export var upgradeScaleType : SCALE_TYPE = SCALE_TYPE.NONE @export var costScaleType : SCALE_TYPE = SCALE_TYPE.LINEAR @export var costModificator : float var cost : int var level : int = 0 var isLevelMax : bool : get(): return maxLevel == level func upgradeProperty(subject: Variant, property: String) -> void: subject.set(property, getNextValue(subject.get(property))) func upgradeUpgrade() -> void: level += 1 Game.money -= cost cost += costModificator func canUpgrade(): return not isLevelMax && Game.money > cost func getNextValue(oldValue): match upgradeScaleType: SCALE_TYPE.NONE: return oldValue + value SCALE_TYPE.LINEAR: return oldValue + (value * upgradeDirection * level)