beta-1.2/signal-refactor (#1)
Reviewed-on: #1
This commit was merged in pull request #1.
This commit is contained in:
@@ -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
|
||||
Reference in New Issue
Block a user