TowerDefense/Upgrades/Upgrade.gd
2025-09-05 19:33:56 +02:00

48 lines
1.3 KiB
GDScript

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(tower: Variant, property: String) -> void:
tower.set(property, getNextValue(tower.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)