TowerDefense/Upgrades/Upgrade.gd

58 lines
1.6 KiB
GDScript3
Raw Normal View History

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
@export_range(0.001, 999, 0.001, "hide_slider") var value : float
2025-09-07 19:48:58 +02:00
@export_group("Restrictions")
2025-09-03 18:39:58 +02:00
@export_range(-1, 100, 1, "hide_slider") var maxLevel : int = -1 ##[param -1] for infinite leveling
2025-09-07 19:48:58 +02:00
@export var tierLock : Array[int]
2025-09-03 18:39:58 +02:00
@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 :
2025-09-07 19:48:58 +02:00
get(): return maxLevel == level && (tierLock.is_empty() || level == tierLock[Game.maxTier])
func upgrade(_subject = null) -> bool:
return false
2025-09-03 18:39:58 +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-07 19:48:58 +02:00
return not isLevelMax && Game.money >= cost && (tierLock.is_empty() || tierLock[Game.tier] > level)
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:
2025-09-07 19:48:58 +02:00
SCALE_TYPE.LINEAR: return oldValue + baseValue
2025-09-06 23:26:37 +02:00
_:
push_warning("Upgrade scale type not defined !")
return oldValue