Fixed UI system
This commit is contained in:
78
scripts/Event/Flow/EventGroup.gd
Normal file
78
scripts/Event/Flow/EventGroup.gd
Normal file
@@ -0,0 +1,78 @@
|
||||
class_name EventGroup extends "res://scripts/Event/Flow/EventWithChildren.gd"
|
||||
|
||||
enum ProcessType {
|
||||
SEQUENTIAL,
|
||||
PARALLEL,
|
||||
}
|
||||
|
||||
@export var processType:ProcessType = ProcessType.SEQUENTIAL;
|
||||
|
||||
var childIndex:int = 0
|
||||
|
||||
func start() -> void:
|
||||
super.start()
|
||||
|
||||
# If sequential, start first child
|
||||
if processType == ProcessType.SEQUENTIAL:
|
||||
childIndex = -1
|
||||
nextChild()
|
||||
|
||||
# If parallel, start all children
|
||||
elif processType == ProcessType.PARALLEL:
|
||||
for child in childEvents:
|
||||
startChild(child)
|
||||
|
||||
|
||||
func update(delta:float) -> void:
|
||||
super.update(delta)
|
||||
|
||||
# If sequential, see if the current child is done, if so go to next child
|
||||
if processType == ProcessType.SEQUENTIAL:
|
||||
if childIndex < 0 || childIndex >= childEvents.size():
|
||||
return
|
||||
if childEvents[childIndex].isDone():
|
||||
nextChild()
|
||||
|
||||
func nextChild() -> void:
|
||||
childIndex += 1
|
||||
if childIndex >= childEvents.size():
|
||||
return
|
||||
startChild(childEvents[childIndex])
|
||||
|
||||
func isDone() -> bool:
|
||||
if !super.isDone():
|
||||
return false
|
||||
|
||||
# If sequential, check if we've reached the end of the children
|
||||
if processType == ProcessType.SEQUENTIAL:
|
||||
return childIndex >= childEvents.size()
|
||||
|
||||
# If parallel, check if all children are done
|
||||
elif processType == ProcessType.PARALLEL:
|
||||
for child in childEvents:
|
||||
if !child.isDone():
|
||||
return false
|
||||
return true
|
||||
|
||||
return false
|
||||
|
||||
func end() -> void:
|
||||
for child in childEvents:
|
||||
if child.ended || !child.started:
|
||||
continue
|
||||
child.end()
|
||||
# Send to the parent to end the extra events
|
||||
super.end()
|
||||
|
||||
func reset() -> void:
|
||||
childIndex = -1
|
||||
for child in childEvents:
|
||||
child.reset()
|
||||
# Send to the parent to reset the extra events
|
||||
super.reset()
|
||||
|
||||
func startChild(child:Event) -> void:
|
||||
# Inherits some properties from this event.
|
||||
child.interactee = self.interactee
|
||||
child.interactor = self.interactor
|
||||
child.start()
|
1
scripts/Event/Flow/EventGroup.gd.uid
Normal file
1
scripts/Event/Flow/EventGroup.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://bb1qpptyr1rec
|
37
scripts/Event/Flow/EventWithChildren.gd
Normal file
37
scripts/Event/Flow/EventWithChildren.gd
Normal file
@@ -0,0 +1,37 @@
|
||||
class_name EventWithChildren extends "res://scripts/Event/Event.gd"
|
||||
|
||||
var childEvents:Array[Event] = []
|
||||
var extraEvents:Array[Event] = []
|
||||
|
||||
func start():
|
||||
super.start()
|
||||
_updateChildEvents()
|
||||
|
||||
func reset() -> void:
|
||||
super.reset()
|
||||
_cleanupExtraEvents()
|
||||
|
||||
func end() -> void:
|
||||
super.end()
|
||||
_cleanupExtraEvents()
|
||||
|
||||
func _updateChildEvents() -> void:
|
||||
childEvents = []
|
||||
for child in get_children():
|
||||
if child is Event:
|
||||
childEvents.append(child)
|
||||
|
||||
func _cleanupExtraEvents():
|
||||
for event in extraEvents:
|
||||
remove_child(event)
|
||||
event.queue_free()
|
||||
extraEvents = []
|
||||
_updateChildEvents()
|
||||
|
||||
func addExtraEvent(child:Event, position:int) -> void:
|
||||
assert(started == false || ended == true)
|
||||
# Add the child to the extra events list
|
||||
extraEvents.append(child)
|
||||
add_child(child)
|
||||
move_child(child, position)
|
||||
_updateChildEvents()
|
1
scripts/Event/Flow/EventWithChildren.gd.uid
Normal file
1
scripts/Event/Flow/EventWithChildren.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://bs78jtft61ro6
|
Reference in New Issue
Block a user