44 lines
1.3 KiB
GDScript
44 lines
1.3 KiB
GDScript
class_name P91BattleClock
|
|
extends RefCounted
|
|
|
|
var elapsed := 0.0
|
|
var result_elapsed := 0.0
|
|
var second_elapsed := 0.0
|
|
var second_result_time := 0.0
|
|
var third_elapsed := 0.0
|
|
var third_result_time := 0.0
|
|
var fourth_elapsed := 0.0
|
|
var fourth_result_time := 0.0
|
|
var fifth_elapsed := 0.0
|
|
var fifth_result_time := 0.0
|
|
|
|
func reset() -> void:
|
|
elapsed = 0.0
|
|
result_elapsed = 0.0
|
|
second_elapsed = 0.0
|
|
second_result_time = 0.0
|
|
third_elapsed = 0.0
|
|
third_result_time = 0.0
|
|
fourth_elapsed = 0.0
|
|
fourth_result_time = 0.0
|
|
fifth_elapsed = 0.0
|
|
fifth_result_time = 0.0
|
|
|
|
func advance(delta: float, encounter: Dictionary, impact_at: float, duration: float, paused: bool) -> Dictionary:
|
|
if paused or not encounter.get("playing", false):
|
|
return {"impact_requests": [], "phase_complete": false, "phase_progress": 0.0}
|
|
var previous := elapsed
|
|
elapsed += delta
|
|
var requests: Array[Dictionary] = []
|
|
if impact_at >= 0.0 and previous < impact_at and elapsed >= impact_at:
|
|
requests.append({
|
|
"encounter_id": encounter.get("id", &""),
|
|
"phase": encounter.get("phase", 0),
|
|
"impact_id": StringName("%s:phase_%d" % [encounter.get("id", &""), encounter.get("phase", 0)]),
|
|
})
|
|
return {
|
|
"impact_requests": requests,
|
|
"phase_complete": duration > 0.0 and elapsed >= duration,
|
|
"phase_progress": clampf(elapsed / duration, 0.0, 1.0) if duration > 0.0 else 0.0,
|
|
}
|