beta-1.2/signal-refactor (#1)
Reviewed-on: #1
This commit was merged in pull request #1.
This commit is contained in:
@@ -1,7 +1,8 @@
|
||||
extends BaseState
|
||||
class_name FiringArrowState
|
||||
|
||||
signal PlayerBeganFiringArrow
|
||||
signal PlayerFiredArrow(spawn_position: Vector2, direction: Vector2)
|
||||
signal ArrowFired(spawn_position: Vector2, direction: Vector2)
|
||||
|
||||
@export var direction_component: FacingDirectionComponent
|
||||
@export var arrow_spawn_marker: Marker2D
|
||||
@@ -23,7 +24,7 @@ func Enter(_extra_parameters: Dictionary) -> 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:
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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]
|
||||
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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)
|
||||
|
||||
2
Scripts/Maps/base_map.gd
Normal file
2
Scripts/Maps/base_map.gd
Normal file
@@ -0,0 +1,2 @@
|
||||
extends Node2D
|
||||
class_name BaseMap
|
||||
1
Scripts/Maps/base_map.gd.uid
Normal file
1
Scripts/Maps/base_map.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://da5dg36wink7x
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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))
|
||||
|
||||
Reference in New Issue
Block a user