From b0d91067728a8bc60f787f26f49d33313086993c Mon Sep 17 00:00:00 2001 From: Dominic Masters Date: Tue, 6 May 2025 11:41:55 -0500 Subject: [PATCH] Made extra events more generic. --- scenes/Maps/TestMap/TestMap.tscn | 14 ++--- scripts/Events/EventConversation.gd | 65 ++++++++---------------- scripts/Events/EventTextbox.gd | 2 +- scripts/Events/Flow/EventGroup.gd | 6 ++- scripts/Events/Flow/EventWithChildren.gd | 35 +++++++++++-- 5 files changed, 62 insertions(+), 60 deletions(-) diff --git a/scenes/Maps/TestMap/TestMap.tscn b/scenes/Maps/TestMap/TestMap.tscn index 5bdaac7..1a1d8f3 100644 --- a/scenes/Maps/TestMap/TestMap.tscn +++ b/scenes/Maps/TestMap/TestMap.tscn @@ -5,7 +5,7 @@ [ext_resource type="PackedScene" uid="uid://lh713g04d3bg" path="res://scenes/Maps/TestMap/TestMapGround.tscn" id="3_gxq5o"] [ext_resource type="PackedScene" uid="uid://boj5o4fx41rv8" path="res://scenes/Maps/TestMap/TestMapBuilding.tscn" id="4_brp0k"] [ext_resource type="Script" uid="uid://tkfc88q8m86f" path="res://scripts/Events/EventConversation.gd" id="5_cg1ph"] -[ext_resource type="Script" path="res://scripts/Events/EventTextbox.gd" id="6_gxq5o"] +[ext_resource type="Script" uid="uid://y7ckj1tn5cro" path="res://scripts/Events/EventTextbox.gd" id="6_gxq5o"] [sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_e1h75"] sky_horizon_color = Color(0.59625, 0.6135, 0.6375, 1) @@ -30,7 +30,7 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.19857, 0.684572, 0.968477) [node name="Green" parent="." node_paths=PackedStringArray("interactEvent") instance=ExtResource("2_cg1ph")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.68747, 0.459578, -0.399262) -interactEvent = NodePath("../Events/TestGroup") +interactEvent = NodePath("../Events/TestConversation") moveType = 1 direction = 1 @@ -54,13 +54,9 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.92766, 2.37929, -4.38178) [node name="Events" type="Node" parent="."] -[node name="TestGroup" type="Node" parent="Events"] +[node name="TestConversation" type="Node" parent="Events"] script = ExtResource("5_cg1ph") -[node name="Text 0" type="Node" parent="Events/TestGroup"] +[node name="Text 0" type="Node" parent="Events/TestConversation"] script = ExtResource("6_gxq5o") -text = "Text 0" - -[node name="Text 1" type="Node" parent="Events/TestGroup"] -script = ExtResource("6_gxq5o") -text = "Text 1" +text = "I am giving you a quest to gather some ingredients." diff --git a/scripts/Events/EventConversation.gd b/scripts/Events/EventConversation.gd index 2ca177a..ce2829d 100644 --- a/scripts/Events/EventConversation.gd +++ b/scripts/Events/EventConversation.gd @@ -5,64 +5,41 @@ class_name EventConversation extends "res://scripts/Events/Flow/EventGroup.gd" @export var entities:Array[OverworldEntity] = [] -@export var includeInteractee:bool = true -@export var includeInteractor:bool = true - -var extraEvents:Array[Event] = [] +@export var pauseInteractee:bool = true +@export var pauseInteractor:bool = true +@export var turnInteractee:bool = true +@export var turnInteractor:bool = true func start() -> void: - # Turn events if interactee != null && interactor != null: - if includeInteractee: - var turninteractee = EventEntityTurn.new() - turninteractee.entity = interactee - turninteractee.direction = interactee.getDirectionToFace(interactor.position) - self.add_child(turninteractee) - extraEvents.append(turninteractee) - self.move_child(turninteractee, 0) + if pauseInteractee && turnInteractee: + var turn = EventEntityTurn.new() + turn.entity = interactee + turn.direction = interactee.getDirectionToFace(interactor.position) + addExtraEvent(turn, 0) - if includeInteractor: - var turninteractor = EventEntityTurn.new() - turninteractor.entity = interactor - turninteractor.direction = interactor.getDirectionToFace(interactee.position) - self.add_child(turninteractor) - extraEvents.append(turninteractor) - self.move_child(turninteractor, 0) + if pauseInteractor && turnInteractor: + var turn = EventEntityTurn.new() + turn.entity = interactor + turn.direction = interactor.getDirectionToFace(interactee.position) + addExtraEvent(turn, 0) # Create start pause event var startPause = EventPause.new() startPause.pauseType = startPauseType startPause.entities = entities - self.add_child(startPause) - extraEvents.append(startPause) - self.move_child(startPause, 0) + startPause.includeInteractee = pauseInteractee + startPause.includeInteractor = pauseInteractor + addExtraEvent(startPause, 0) # Create end pause event. var endPause = EventPause.new() endPause.pauseType = endPauseType endPause.entities = entities - self.add_child(endPause) - extraEvents.append(endPause) - self.move_child(endPause, get_child_count() - 1) + endPause.includeInteractee = pauseInteractee + endPause.includeInteractor = pauseInteractor + addExtraEvent(endPause, -1) # Pass off to event group - super.start() - -func reset() -> void: - # Let event group reset normally - super.reset() - - # Remove the events we created. - cleanupExtraEvents() - -func end() -> void: - # Let event group end normally - super.end() - # Remove the events we created. - cleanupExtraEvents() - -func cleanupExtraEvents(): - for event in extraEvents: - event.queue_free() - extraEvents = [] + super.start() \ No newline at end of file diff --git a/scripts/Events/EventTextbox.gd b/scripts/Events/EventTextbox.gd index 5a0c9a0..75e2d61 100644 --- a/scripts/Events/EventTextbox.gd +++ b/scripts/Events/EventTextbox.gd @@ -1,7 +1,7 @@ class_name EventTextbox extends "res://scripts/Events/Event.gd" # @export var text:Array[String] = [ "Hello Text" ]; -@export var text:String = "Hello Text" +@export_multiline var text:String = "Hello Text" func start() -> void: super.start() diff --git a/scripts/Events/Flow/EventGroup.gd b/scripts/Events/Flow/EventGroup.gd index 1f79c6c..46dbdfc 100644 --- a/scripts/Events/Flow/EventGroup.gd +++ b/scripts/Events/Flow/EventGroup.gd @@ -57,17 +57,19 @@ func isDone() -> bool: return false func end() -> void: - super.end() 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: - super.reset() 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. diff --git a/scripts/Events/Flow/EventWithChildren.gd b/scripts/Events/Flow/EventWithChildren.gd index bcff12b..3413274 100644 --- a/scripts/Events/Flow/EventWithChildren.gd +++ b/scripts/Events/Flow/EventWithChildren.gd @@ -1,14 +1,18 @@ class_name EventWithChildren extends "res://scripts/Events/Event.gd" var childEvents:Array[Event] = [] +var extraEvents:Array[Event] = [] func _init() -> void: super._init() + # _updateChildEvents() + # self.child_entered_tree.connect(onChildEntered) + # self.child_exiting_tree.connect(onChildExited) + # self.child_order_changed.connect(onChildOrderChanged) + +func start(): + super.start() _updateChildEvents() - _updateChildEvents() - self.child_entered_tree.connect(onChildEntered) - self.child_exiting_tree.connect(onChildExited) - self.child_order_changed.connect(onChildOrderChanged) func _updateChildEvents() -> void: childEvents = [] @@ -24,3 +28,26 @@ func onChildExited(child:Node) -> void: func onChildOrderChanged() -> void: _updateChildEvents() + +func reset() -> void: + super.reset() + _cleanupExtraEvents() + +func end() -> void: + super.end() + _cleanupExtraEvents() + +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() \ No newline at end of file