From 86e31986456333b5e99e8e9966b94fd6d57bd2fd Mon Sep 17 00:00:00 2001 From: cgandeg Date: Sun, 15 Mar 2026 12:19:12 -0600 Subject: [PATCH] beta-1.2/signal-refactor (#1) Reviewed-on: https://gitea.39062.top/cgandeg/Archipelago-Game/pulls/1 --- .../Home_01_Overlay_01.aseprite | Bin 0 -> 32859 bytes Scenes/Characters/Player/player.tscn | 6 +- .../bench_interaction_connector.tscn | 3 +- .../Interiors/Home_01_Overlay_01.png | Bin 0 -> 6711 bytes .../Interiors/Home_01_Overlay_01.png.import | 40 +++++++++ .../Interiors/home_01.tscn | 22 +++-- .../path_to_dungeon_01.tscn | 11 ++- Scenes/Maps/base_map.tscn | 8 ++ Scenes/main.tscn | 3 +- .../Player/States/firing_arrow_state.gd | 5 +- Scripts/Characters/Player/player.gd | 55 ++---------- Scripts/Characters/Player/sprite.gd | 42 ++++----- Scripts/Entity Spawners/arrow_spawner.gd | 28 +++--- .../Connectors/bench_interaction_connector.gd | 52 ++++++------ .../Connectors/chest_interaction_connector.gd | 80 +++++++++--------- .../interactive_loading_zone_connector.gd | 32 +++---- Scripts/Maps/base_map.gd | 2 + Scripts/Maps/base_map.gd.uid | 1 + Scripts/UI/dialogue_box.gd | 2 +- Scripts/dialogue_trigger_connector.gd | 61 +++++++------ Scripts/map_transitioner.gd | 4 - project.godot | 2 +- 22 files changed, 235 insertions(+), 224 deletions(-) create mode 100644 Assets/Aseprite Files/Home_01_Overlay_01.aseprite create mode 100644 Scenes/Maps/Forest Dungeon Entrance/Interiors/Home_01_Overlay_01.png create mode 100644 Scenes/Maps/Forest Dungeon Entrance/Interiors/Home_01_Overlay_01.png.import create mode 100644 Scenes/Maps/base_map.tscn create mode 100644 Scripts/Maps/base_map.gd create mode 100644 Scripts/Maps/base_map.gd.uid diff --git a/Assets/Aseprite Files/Home_01_Overlay_01.aseprite b/Assets/Aseprite Files/Home_01_Overlay_01.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..03ecd70f1a023a59f66e269551d6159df1609b08 GIT binary patch literal 32859 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 b)dd9?B33t4w&&jADLUWI=vH1Q!j1k9k~ID` literal 0 HcmV?d00001 diff --git a/Scenes/Characters/Player/player.tscn b/Scenes/Characters/Player/player.tscn index 09c9fef..2ebbd39 100644 --- a/Scenes/Characters/Player/player.tscn +++ b/Scenes/Characters/Player/player.tscn @@ -24,11 +24,12 @@ radius = 12.0 [sub_resource type="RectangleShape2D" id="RectangleShape2D_fu1fx"] size = Vector2(6, 5) -[node name="Player" type="CharacterBody2D" unique_id=1502234578 node_paths=PackedStringArray("player_sprite", "state_machine") groups=["Player Group"]] +[node name="Player" type="CharacterBody2D" unique_id=1502234578 node_paths=PackedStringArray("player_sprite", "state_machine", "interact_scanner") groups=["Player Group"]] y_sort_enabled = true script = ExtResource("1_qqvsf") player_sprite = NodePath("Player Sprite") state_machine = NodePath("State Machine") +interact_scanner = NodePath("Marker2D/InteractScanner") [node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=495465356] position = Vector2(0, 4.5) @@ -116,8 +117,6 @@ position = Vector2(0, 9.5) shape = SubResource("RectangleShape2D_fu1fx") debug_color = Color(0.79959095, 0.41617078, 0.18507844, 0.41960785) -[connection signal="CutsceneEnded" from="." to="State Machine/States/Cutscene State" method="OnCutsceneEnded"] -[connection signal="CutsceneStarted" from="." to="State Machine/States/Idle State" method="OnCutsceneStarted"] [connection signal="SitOnFurnitureTriggered" from="." to="State Machine/States/Idle State" method="OnSitOnFurnitureTriggered"] [connection signal="DirectionChanged" from="Components/FacingDirectionComponent" to="Player Sprite" method="UpdateSprite"] [connection signal="DirectionChanged" from="Components/FacingDirectionComponent" to="Marker2D/InteractScanner" method="OnDirectionChanged"] @@ -125,7 +124,6 @@ debug_color = Color(0.79959095, 0.41617078, 0.18507844, 0.41960785) [connection signal="StartedWalking" from="State Machine/States/Walking State" to="Player Sprite" method="UpdateSprite"] [connection signal="PlayerBeganDrawingBow" from="State Machine/States/Drawing Bow State" to="Player Sprite" method="UpdateSprite"] [connection signal="PlayerBeganFiringArrow" from="State Machine/States/Firing Arrow State" to="Player Sprite" method="UpdateSprite"] -[connection signal="PlayerFiredArrow" from="State Machine/States/Firing Arrow State" to="." method="_on_using_item_a_state_arrow_fired"] [connection signal="PlayAnimation" from="State Machine/States/Play Animation State" to="Player Sprite" method="PlaySpecifiedAnimation"] [connection signal="AnimationFinished" from="Player Sprite" to="State Machine/States/Play Animation State" method="OnAnimationFinished"] [connection signal="DrawingBowAnimationFinished" from="Player Sprite" to="State Machine/States/Drawing Bow State" method="OnDrawingBowAnimationFinished"] diff --git a/Scenes/Maps/Connectors/bench_interaction_connector.tscn b/Scenes/Maps/Connectors/bench_interaction_connector.tscn index c045818..a23ddb0 100644 --- a/Scenes/Maps/Connectors/bench_interaction_connector.tscn +++ b/Scenes/Maps/Connectors/bench_interaction_connector.tscn @@ -2,6 +2,5 @@ [ext_resource type="Script" uid="uid://c5yjcjk51l4bd" path="res://Scripts/Maps/Connectors/bench_interaction_connector.gd" id="1_34r4h"] -[node name="Bench Interaction Connector" type="Node" unique_id=541204437 node_paths=PackedStringArray("player")] +[node name="Bench Interaction Connector" type="Node" unique_id=541204437] script = ExtResource("1_34r4h") -player = NodePath("") diff --git a/Scenes/Maps/Forest Dungeon Entrance/Interiors/Home_01_Overlay_01.png b/Scenes/Maps/Forest Dungeon Entrance/Interiors/Home_01_Overlay_01.png new file mode 100644 index 0000000000000000000000000000000000000000..74e60b6d392558df1b5b7cd8b3e916a64610db67 GIT binary patch literal 6711 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 j`Jdh`{IC4JjKPRM void: direction = Vector2.UP elif direction_component.current_direction == Enums.Directions.DOWN: direction = Vector2.DOWN - PlayerFiredArrow.emit(position, direction) + ArrowFired.emit(position, direction) func OnFiringArrowAnimationFinished() -> void: diff --git a/Scripts/Characters/Player/player.gd b/Scripts/Characters/Player/player.gd index 8b1effb..2b40e02 100644 --- a/Scripts/Characters/Player/player.gd +++ b/Scripts/Characters/Player/player.gd @@ -1,57 +1,18 @@ extends CharacterBody2D class_name PlayerCharacter -signal InteractScannerAreaEntered(area: Area2D) -signal InteractScannerAreaExited(area: Area2D) - -signal InteractScannerBodyEntered(body: Node2D) -signal InteractScannerBodyExited(body: Node2D) - -signal InteractionActionTriggered() - -signal ArrowFired(fire_position: Vector2, direction: Vector2) +# Signals signal SitOnFurnitureTriggered(sitting_position: Vector2, sitting_direction: Enums.Directions) -signal CutsceneStarted() -signal CutsceneEnded() - -@export var player_sprite: Node2D +# Exports +@export var player_sprite: PlayerSprite @export var state_machine: PlayerStateMachine +@export var interact_scanner: InteractScanner # Public Methods -func OnSitOnFurnitureTriggered(sitting_position: Vector2, sitting_direction: Enums.Directions): - SitOnFurnitureTriggered.emit(sitting_position, sitting_direction) +func QueueCutsceneState() -> void: + state_machine.QueueStateChange(PlayerStateMachine.States.CUTSCENE) -func OnCutsceneStarted() -> void: - CutsceneStarted.emit() - - -func OnCutsceneEnded() -> void: - CutsceneEnded.emit() - - -# Private Methods -func _on_interact_scanner_area_entered(area: Area2D) -> void: - InteractScannerAreaEntered.emit(area) - - -func _on_interact_scanner_area_exited(area: Area2D) -> void: - InteractScannerAreaExited.emit(area) - - -func _on_interact_scanner_body_entered(body: Node2D) -> void: - InteractScannerBodyEntered.emit(body) - - -func _on_interact_scanner_body_exited(body: Node2D) -> void: - InteractScannerBodyExited.emit(body) - - -func _on_interaction_action_triggered() -> void: - if state_machine.current_state.IsStateActionable(): - InteractionActionTriggered.emit() - - -func _on_using_item_a_state_arrow_fired(fire_position: Vector2, direction: Vector2) -> void: - ArrowFired.emit(fire_position, direction) +func QueueEndCutsceneState() -> void: + state_machine.QueueStateChange(PlayerStateMachine.States.IDLE) diff --git a/Scripts/Characters/Player/sprite.gd b/Scripts/Characters/Player/sprite.gd index df5e006..dc91347 100644 --- a/Scripts/Characters/Player/sprite.gd +++ b/Scripts/Characters/Player/sprite.gd @@ -1,22 +1,22 @@ extends Node2D +class_name PlayerSprite +# Signals signal DrawingBowAnimationFinished signal FiringArrowAnimationFinished signal AnimationFinished(animation_name: String) +# Exports @export var state_machine: PlayerStateMachine @export var direction_component: FacingDirectionComponent +# OnReady Variables @onready var full: AnimatedSprite2D = $Full -@onready var base: AnimatedSprite2D = $Base -@onready var hair: AnimatedSprite2D = $Hair -@onready var pants: AnimatedSprite2D = $Pants -@onready var hands: AnimatedSprite2D = $Hands -@onready var shoes: AnimatedSprite2D = $Shoes -var all_parts: Array[AnimatedSprite2D] -var current_animation := "idle-down" -var is_flipped := false +# Private Variables +var _all_parts: Array[AnimatedSprite2D] +var _current_animation := "idle-down" +var _is_flipped := false # Public Methods func UpdateSprite() -> void: @@ -25,37 +25,37 @@ func UpdateSprite() -> void: var animation := _build_animation_name(current_state, current_direction) var should_flip := _should_flip_horizontal() - if animation == current_animation and should_flip == is_flipped: + if animation == _current_animation and should_flip == _is_flipped: return - current_animation = animation - is_flipped = should_flip + _current_animation = animation + _is_flipped = should_flip - for part in all_parts: + for part in _all_parts: part.animation = animation part.play() part.flip_h = should_flip func OnAnimationFinished() -> void: - if current_animation.begins_with("drawing-bow-"): + if _current_animation.begins_with("drawing-bow-"): DrawingBowAnimationFinished.emit() - elif current_animation.begins_with("firing-arrow-"): + elif _current_animation.begins_with("firing-arrow-"): FiringArrowAnimationFinished.emit() - AnimationFinished.emit(current_animation) + AnimationFinished.emit(_current_animation) func PlaySpecifiedAnimation(animation_name: String) -> void: - current_animation = animation_name - for part in all_parts: + _current_animation = animation_name + for part in _all_parts: part.animation = animation_name part.play() # Called when the node enters the scene tree for the first time. func _ready() -> void: - all_parts = [ - full, #base, hair, pants, hands, shoes + _all_parts = [ + full ] UpdateSprite() @@ -63,8 +63,8 @@ func _ready() -> void: func _build_animation_name(state: BaseState, direction: Enums.Directions) -> String: # e.g. "idle-down", "walking-up" - var state_str = state.GetAnimationBaseName().replace("_", "-") - var direction_str = _direction_to_animation_state(direction) + var state_str := state.GetAnimationBaseName().replace("_", "-") + var direction_str := _direction_to_animation_state(direction) return "%s-%s" % [state_str, direction_str] diff --git a/Scripts/Entity Spawners/arrow_spawner.gd b/Scripts/Entity Spawners/arrow_spawner.gd index 2776b74..a3c4e9b 100644 --- a/Scripts/Entity Spawners/arrow_spawner.gd +++ b/Scripts/Entity Spawners/arrow_spawner.gd @@ -1,24 +1,22 @@ extends Node +# Exports +@export var player: PlayerCharacter @export var arrow_parent: Node2D +# Preloads const wooden_arrow_scene: PackedScene = preload("uid://b2wq5m01b68rx") -# Public Methods -func OnArrowFired(fire_position: Vector2, direction: Vector2) -> void: - var wooden_arrow := wooden_arrow_scene.instantiate() as BaseProjectile - wooden_arrow.SetProjectileStartAndDirection(fire_position, direction) - - if arrow_parent == null: - return - arrow_parent.add_child(wooden_arrow) - - # Private Methods func _ready() -> void: - var players := get_tree().get_nodes_in_group("Player Group") - if players == null or players.is_empty() or players[0] is not PlayerCharacter: + var firing_arrow_state: FiringArrowState = player.get_node("State Machine/States/Firing Arrow State") + firing_arrow_state.ArrowFired.connect(_on_arrow_fired) + + +func _on_arrow_fired(fire_position: Vector2, direction: Vector2) -> void: + var wooden_arrow := wooden_arrow_scene.instantiate() as BaseProjectile + wooden_arrow.SetProjectileStartAndDirection(fire_position, direction) + + if arrow_parent == null: return - - var player := players[0] as PlayerCharacter - player.ArrowFired.connect(OnArrowFired) + arrow_parent.add_child(wooden_arrow) diff --git a/Scripts/Maps/Connectors/bench_interaction_connector.gd b/Scripts/Maps/Connectors/bench_interaction_connector.gd index dd17d2c..55f3a37 100644 --- a/Scripts/Maps/Connectors/bench_interaction_connector.gd +++ b/Scripts/Maps/Connectors/bench_interaction_connector.gd @@ -1,31 +1,41 @@ extends Node +class_name BenchInteractionConnector +# Signals signal SitOnBenchTriggered(position: Vector2, sitting_direction: Enums.Directions) -@export var player: CharacterBody2D +# Exports +@export var player: PlayerCharacter -var benches_in_range: Array[WoodenBench] = [] +# Private Variables +var _benches_in_range: Array[WoodenBench] = [] -# Public Methods -func OnPlayerInteractScannerAreaEntered(area: Area2D) -> void: +# Private Methods +func _ready() -> void: + player.interact_scanner.area_entered.connect(_on_interact_scanned) + player.interact_scanner.area_exited.connect(_on_interact_unscanned) + player.interact_scanner.InteractionActionTriggered.connect(_on_interact_triggered) + + +func _on_interact_scanned(area: Area2D) -> void: var parent := area.get_parent() - if parent == null or parent is not WoodenBench or benches_in_range.has(parent): + if parent == null or parent is not WoodenBench or _benches_in_range.has(parent): return - benches_in_range.append(parent) + _benches_in_range.append(parent) -func OnPlayerInteractScannerAreaExited(area: Area2D) -> void: - var parent = area.get_parent() - if parent == null or parent is not WoodenBench or !benches_in_range.has(parent): +func _on_interact_unscanned(area: Area2D) -> void: + var parent: Node = area.get_parent() + if parent == null or parent is not WoodenBench or !_benches_in_range.has(parent): return - benches_in_range.erase(parent) + _benches_in_range.erase(parent) -func OnPlayerInteractionActionTriggered() -> void: - if benches_in_range.is_empty(): +func _on_interact_triggered() -> void: + if _benches_in_range.is_empty(): return - var bench := benches_in_range[0] + var bench := _benches_in_range[0] var sitting_spots_container := bench.get_node("Sitting Spots") as Node2D var sitting_spot_markers := sitting_spots_container.get_children() @@ -41,18 +51,4 @@ func OnPlayerInteractionActionTriggered() -> void: if !closest_marker: return - SitOnBenchTriggered.emit(closest_marker.global_position, Enums.Directions.DOWN) - - -# Private Methods -func _ready() -> void: - var all_players := get_tree().get_nodes_in_group("Player Group") - if all_players == null or all_players.is_empty(): - return - - for player_node in all_players: - var player := player_node as PlayerCharacter - - player.InteractScannerAreaEntered.connect(OnPlayerInteractScannerAreaEntered) - player.InteractScannerAreaExited.connect(OnPlayerInteractScannerAreaExited) - player.InteractionActionTriggered.connect(OnPlayerInteractionActionTriggered) + player.SitOnFurnitureTriggered.emit(closest_marker.global_position, Enums.Directions.DOWN) diff --git a/Scripts/Maps/Connectors/chest_interaction_connector.gd b/Scripts/Maps/Connectors/chest_interaction_connector.gd index afdbea9..ee180ca 100644 --- a/Scripts/Maps/Connectors/chest_interaction_connector.gd +++ b/Scripts/Maps/Connectors/chest_interaction_connector.gd @@ -1,53 +1,20 @@ extends Node -# Drop-in that automatically connects signals from player to chest objects -signal ChestInteractedWith(chest: BaseChest) +# Signals signal OpeningOfOpenedChestAttempted +# Exports +@export var player: PlayerCharacter @export var auto_connect_all_chests := true -var chests_in_range: Array[BaseChest] = [] - -# Public Methods -func OnPlayerInteractScannerAreaEntered(area: Area2D) -> void: - var chest = area.get_parent() - if chest == null or chest is not BaseChest: - return - if chests_in_range.has(chest): - return - chests_in_range.append(chest) - - -func OnPlayerInteractScannerAreaExited(area: Area2D) -> void: - var chest = area.get_parent() - if chest == null or chest is not BaseChest: - return - if !chests_in_range.has(chest): - return - chests_in_range.erase(chest) - - -func OnPlayerInteractionActionTriggered() -> void: - if chests_in_range.is_empty(): - return - - var chest := chests_in_range[0] - if !chest.is_open: - chest.Open() - else: - chest.OpenAlreadyOpened() - OpeningOfOpenedChestAttempted.emit() - +# Private Variables +var _chests_in_range: Array[BaseChest] = [] # Private Methods func _ready() -> void: - var player := GroupUtils.GetPlayer() - if player == null: - return - - player.InteractScannerAreaEntered.connect(OnPlayerInteractScannerAreaEntered) - player.InteractScannerAreaExited.connect(OnPlayerInteractScannerAreaExited) - player.InteractionActionTriggered.connect(OnPlayerInteractionActionTriggered) + player.interact_scanner.area_entered.connect(_on_interact_scanned) + player.interact_scanner.area_exited.connect(_on_interact_unscanned) + player.interact_scanner.InteractionActionTriggered.connect(_on_interact_triggered) var chests := GroupUtils.GetAllTreasureChests() for chest in chests: @@ -58,7 +25,7 @@ func _on_chest_opening_animation_started() -> void: var player := GroupUtils.GetPlayer() var children := player.get_children() - player.OnCutsceneStarted() + player.QueueCutsceneState() var camera_idx := children.find_custom(func(x): return x is Camera2D) if camera_idx == -1: return @@ -77,4 +44,33 @@ func _on_chest_opening_animation_started() -> void: # Zoom back out await get_tree().create_tween().tween_property(camera, "zoom", current_zoom, 0.5).finished + + +func _on_interact_scanned(area: Area2D) -> void: + var chest = area.get_parent() + if chest == null or chest is not BaseChest: + return + if _chests_in_range.has(chest): + return + _chests_in_range.append(chest) + + +func _on_interact_unscanned(area: Area2D) -> void: + var chest = area.get_parent() + if chest == null or chest is not BaseChest: + return + if !_chests_in_range.has(chest): + return + _chests_in_range.erase(chest) + + +func _on_interact_triggered() -> void: + if _chests_in_range.is_empty(): + return + var chest := _chests_in_range[0] + if !chest.is_open: + chest.Open() + else: + chest.OpenAlreadyOpened() + OpeningOfOpenedChestAttempted.emit() diff --git a/Scripts/Maps/Connectors/interactive_loading_zone_connector.gd b/Scripts/Maps/Connectors/interactive_loading_zone_connector.gd index 61ee1ec..8c901fe 100644 --- a/Scripts/Maps/Connectors/interactive_loading_zone_connector.gd +++ b/Scripts/Maps/Connectors/interactive_loading_zone_connector.gd @@ -1,39 +1,35 @@ extends Node +# Exports +@export var player: PlayerCharacter + +# Private Variables var _zones_in_range: Array[InteractiveLoadingZone] = [] -# Public Methods -func OnPlayerInteractScannerAreaEntered(area: Area2D) -> void: +# Private Methods +func _ready() -> void: + player.interact_scanner.area_entered.connect(_on_interact_scanned) + player.interact_scanner.area_exited.connect(_on_interact_unscanned) + player.interact_scanner.InteractionActionTriggered.connect(_on_interact_triggered) + + +func _on_interact_scanned(area: Area2D) -> void: if area is not InteractiveLoadingZone or _zones_in_range.has(area): return _zones_in_range.append(area) -func OnPlayerInteractScannerAreaExited(area: Area2D) -> void: +func _on_interact_unscanned(area: Area2D) -> void: if area is not InteractiveLoadingZone or !_zones_in_range.has(area): return _zones_in_range.erase(area) -func OnPlayerInteractionActionTriggered() -> void: +func _on_interact_triggered() -> void: if _zones_in_range.is_empty(): return var zone := _zones_in_range[0] zone.Activate() - - -# Private Methods -func _ready() -> void: - var all_players := get_tree().get_nodes_in_group("Player Group") - if all_players == null or all_players.is_empty(): - return - - for player_node in all_players: - var player := player_node as PlayerCharacter - - player.InteractScannerAreaEntered.connect(OnPlayerInteractScannerAreaEntered) - player.InteractScannerAreaExited.connect(OnPlayerInteractScannerAreaExited) - player.InteractionActionTriggered.connect(OnPlayerInteractionActionTriggered) diff --git a/Scripts/Maps/base_map.gd b/Scripts/Maps/base_map.gd new file mode 100644 index 0000000..ab001fd --- /dev/null +++ b/Scripts/Maps/base_map.gd @@ -0,0 +1,2 @@ +extends Node2D +class_name BaseMap diff --git a/Scripts/Maps/base_map.gd.uid b/Scripts/Maps/base_map.gd.uid new file mode 100644 index 0000000..6622dee --- /dev/null +++ b/Scripts/Maps/base_map.gd.uid @@ -0,0 +1 @@ +uid://da5dg36wink7x diff --git a/Scripts/UI/dialogue_box.gd b/Scripts/UI/dialogue_box.gd index 25f1ae5..21268ee 100644 --- a/Scripts/UI/dialogue_box.gd +++ b/Scripts/UI/dialogue_box.gd @@ -39,7 +39,7 @@ func _process(_delta: float) -> void: if !visible: return - if Input.is_action_just_pressed("player_interact") and !InputManager.ShouldIgnoreAction("player_interact"): + if Input.is_action_just_pressed("player_interact"): var finished := _proceed_dialogue() if finished: visible = false diff --git a/Scripts/dialogue_trigger_connector.gd b/Scripts/dialogue_trigger_connector.gd index aced2ee..b76d92c 100644 --- a/Scripts/dialogue_trigger_connector.gd +++ b/Scripts/dialogue_trigger_connector.gd @@ -1,30 +1,13 @@ extends Node +# Signals signal DialogueTriggered(dialogue_name: String) -@onready var dialogue_box: DialogueBox = $"../Gui/Dialogue Box" - -var dialogue_triggers_in_area: Array[DialogueTrigger] = [] - -# Public Methods -func OnPlayerInteractScannerAreaEntered(area: Area2D) -> void: - if area is not DialogueTrigger or dialogue_triggers_in_area.has(area): - return - dialogue_triggers_in_area.append(area) - - -func OnPlayerInteractScannerAreaExited(area: Area2D) -> void: - if area is not DialogueTrigger or !dialogue_triggers_in_area.has(area): return - dialogue_triggers_in_area.erase(area) - - -func OnPlayerInteractionActionTriggered() -> void: - if dialogue_triggers_in_area.is_empty(): - return - - var trigger := dialogue_triggers_in_area[0] - trigger.Trigger() +# Exports +@export var dialogue_box: DialogueBox +# Private Variables +var _dialogue_triggers_in_area: Array[DialogueTrigger] = [] # Private Methods func _on_map_changed(map_id: Enums.MapIds) -> void: @@ -32,19 +15,41 @@ func _on_map_changed(map_id: Enums.MapIds) -> void: if !player: return - player.InteractScannerAreaEntered.connect(OnPlayerInteractScannerAreaEntered) - player.InteractScannerAreaExited.connect(OnPlayerInteractScannerAreaExited) - player.InteractionActionTriggered.connect(OnPlayerInteractionActionTriggered) + player.interact_scanner.area_entered.connect(_on_interact_scanned) + player.interact_scanner.area_exited.connect(_on_interact_unscanned) + player.interact_scanner.InteractionActionTriggered.connect(_on_interact_triggered) - dialogue_box.DialogueStarted.connect(player.OnCutsceneStarted) - dialogue_box.DialogueEnded.connect(player.OnCutsceneEnded) + dialogue_box.DialogueStarted.connect(player.QueueCutsceneState) + dialogue_box.DialogueEnded.connect(player.QueueEndCutsceneState) var dialogue_triggers := GroupUtils.GetAllDialogueTriggers() - print("Dialogue Triggers on map [%s]: [%d]" % [Enums.MapIds.keys()[map_id], len(dialogue_triggers)]) for trigger in dialogue_triggers: trigger.DialogueTriggered.connect(_on_dialogue_triggered) func _on_dialogue_triggered(dialogue_name: String) -> void: + # Wait one frame so we don't immediately close dialogue box + # TODO This is stupid + await get_tree().process_frame DialogueTriggered.emit(dialogue_name) + + +func _on_interact_scanned(area: Area2D) -> void: + if area is not DialogueTrigger or _dialogue_triggers_in_area.has(area): + return + _dialogue_triggers_in_area.append(area) + + +func _on_interact_unscanned(area: Area2D) -> void: + if area is not DialogueTrigger or !_dialogue_triggers_in_area.has(area): + return + _dialogue_triggers_in_area.erase(area) + + +func _on_interact_triggered() -> void: + if _dialogue_triggers_in_area.is_empty(): + return + + var trigger := _dialogue_triggers_in_area[0] + trigger.Trigger() diff --git a/Scripts/map_transitioner.gd b/Scripts/map_transitioner.gd index 71fa259..45c8829 100644 --- a/Scripts/map_transitioner.gd +++ b/Scripts/map_transitioner.gd @@ -34,10 +34,6 @@ func _on_map_transition_queued(map_id: Enums.MapIds, marker_name: String) -> voi MapChanged.emit(map_id) -func _connect_signals() -> void: - _connect_loading_zone_transporters() - - func _connect_loading_zone_transporters() -> void: var loading_zone_transporters := GroupUtils.GetAllLoadingZoneTransporters() print("Loading Zones: %d" % len(loading_zone_transporters)) diff --git a/project.godot b/project.godot index 906935b..9fcbd78 100644 --- a/project.godot +++ b/project.godot @@ -11,7 +11,7 @@ config_version=5 [application] config/name="Archipelago Game" -config/version="beta-1.1" +config/version="beta-1.2" run/main_scene="uid://dqgxg3i307lvr" config/features=PackedStringArray("4.6", "Forward Plus") config/icon="res://icon.svg"