43 lines
1.1 KiB
GDScript
43 lines
1.1 KiB
GDScript
|
class_name Plan
|
||
|
|
||
|
const TURN_TIME : float = 5.0
|
||
|
|
||
|
var elements = [] # All elements of the plan thus far
|
||
|
var current_elements = [] # All elements of the next 5 seconds
|
||
|
|
||
|
func current_time() -> float:
|
||
|
var total_time : float = 0.0
|
||
|
for current_element in current_elements:
|
||
|
var _element : PlanElement = (current_element as PlanElement)
|
||
|
total_time += _element.time
|
||
|
return total_time
|
||
|
|
||
|
func add_element(element : PlanElement) -> bool:
|
||
|
var total_time : float = self.current_time()
|
||
|
if total_time + element.time > TURN_TIME:
|
||
|
return false
|
||
|
current_elements.append(element)
|
||
|
return true
|
||
|
|
||
|
func remove_last_element() -> void:
|
||
|
current_elements.pop_back()
|
||
|
|
||
|
func remove_all_elements() -> void:
|
||
|
current_elements.clear()
|
||
|
|
||
|
func new_turn() -> void:
|
||
|
for current_element in current_elements:
|
||
|
elements.push_back(current_elements.pop_back())
|
||
|
|
||
|
func sanity_check() -> bool:
|
||
|
# Returns true if sane and false if insane
|
||
|
var total_time : float = 0.0
|
||
|
for current_element in current_elements:
|
||
|
var element : PlanElement = (current_element as PlanElement)
|
||
|
total_time += element.time
|
||
|
if !element.sanity_check():
|
||
|
return false
|
||
|
if total_time > TURN_TIME:
|
||
|
return false
|
||
|
return true
|