The_Dark_Side_of_Earth/statusses/status.gd

46 lines
1.3 KiB
GDScript

class_name Status extends Timer
var params = {}
const default_parameters = {
"Vulnerable": {},
"Slow": {
"slow_factor": 0.6
}
}
static func apply(status_name : String, target : Node, duration : float, params_in : Dictionary = {}):
if not target.has_node(status_name):
var child = Status.new()
child.name = status_name
child.params = params_in
child.params.merge(get_default_parameters(status_name))
target.add_child(child)
child.start(duration)
else:
var child : Status = target.get_node(status_name)
child.reapply(duration)
static func affects(status_name : String, target : Node) -> bool:
return target.has_node(status_name)
static func get_status(status_name : String, target : Node) -> Status:
if affects(status_name, target):
return target.get_node(status_name)
else:
return null
func _enter_tree() -> void:
timeout.connect(expire)
func reapply(duration_new : float, params_new : Dictionary = {}):
self.start(max(duration_new, time_left))
merge_params(params_new)
func merge_params(params_new):
if name == "Slow":
params.slow_factor = min(params.slow_factor, params_new.slow_factor)
func expire():
queue_free()
static func get_default_parameters(status_name : String) -> Dictionary:
return default_parameters.get(status_name) if default_parameters.has(status_name) else {}