beta-1.3/restructure-files (#2)

Reviewed-on: #2
This commit was merged in pull request #2.
This commit is contained in:
2026-03-17 13:45:35 -06:00
parent 86e3198645
commit bfe4f7d6a9
156 changed files with 369 additions and 163 deletions

View File

@@ -0,0 +1,54 @@
extends Node
class_name BenchInteractionConnector
# Signals
signal SitOnBenchTriggered(position: Vector2, sitting_direction: Enums.Directions)
# Exports
@export var player: PlayerCharacter
# Private Variables
var _benches_in_range: Array[WoodenBench] = []
# 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):
return
_benches_in_range.append(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)
func _on_interact_triggered() -> void:
if _benches_in_range.is_empty():
return
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()
var closest_marker: Marker2D
var distance_to_player := 9999.0
for node in sitting_spot_markers:
var marker := node as Marker2D
var distance := marker.global_position.distance_to(player.global_position)
if distance < distance_to_player:
closest_marker = marker
distance_to_player = distance
if !closest_marker:
return
player.SitOnFurnitureTriggered.emit(closest_marker.global_position, Enums.Directions.DOWN)

View File

@@ -0,0 +1 @@
uid://c5yjcjk51l4bd

View File

@@ -0,0 +1,26 @@
extends Area2D
@export var camera_to_limit: Camera2D
@export var auto_limit := true
func _ready() -> void:
if camera_to_limit == null or !auto_limit or get_child_count() == 0:
return
var collision_shape: CollisionShape2D = get_children()[0]
if collision_shape.shape is not RectangleShape2D:
return
var limits := _get_normalized_limits(collision_shape)
camera_to_limit.limit_left = limits.position.x
camera_to_limit.limit_top = limits.position.y
camera_to_limit.limit_right = limits.end.x
camera_to_limit.limit_bottom = limits.end.y
func _get_normalized_limits(collision_shape: CollisionShape2D) -> Rect2i:
var rectangle_shape := collision_shape.shape as RectangleShape2D
var rect_position := collision_shape.position
var size := rectangle_shape.size
var begin := rect_position - size / 2
return Rect2(begin.x, begin.y, size.x, size.y)

View File

@@ -0,0 +1 @@
uid://kfupww4frb1r

View File

@@ -0,0 +1,76 @@
extends Node
# Signals
signal OpeningOfOpenedChestAttempted
# Exports
@export var player: PlayerCharacter
@export var auto_connect_all_chests := true
# Private Variables
var _chests_in_range: Array[BaseChest] = []
# 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)
var chests := GroupUtils.GetAllTreasureChests()
for chest in chests:
chest.OpeningAnimationStarted.connect(_on_chest_opening_animation_started)
func _on_chest_opening_animation_started() -> void:
var player := GroupUtils.GetPlayer()
var children := player.get_children()
player.QueueCutsceneState()
var camera_idx := children.find_custom(func(x): return x is Camera2D)
if camera_idx == -1: return
# Zoom In
var camera := children[camera_idx] as Camera2D
var current_zoom := camera.zoom
await get_tree().create_tween().tween_property(camera, "zoom", current_zoom + Vector2(2, 2), 0.5).finished
# Player the player's chest opening animation
player.state_machine.QueueStateChange(PlayerStateMachine.States.PLAY_ANIMATION, { "animation_name": "opening-chest-down" })
await player.state_machine.StateChanged
var play_animation_state := player.state_machine.current_state as PlayerPlayAnimationState
await play_animation_state.AnimationFinished
player.state_machine.QueueStateChange(PlayerStateMachine.States.IDLE)
# 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()

View File

@@ -0,0 +1 @@
uid://dw76slp457s1v

View File

@@ -0,0 +1,12 @@
extends Node
@export var player: PlayerCharacter
# Public Methods
func OnPlayerAreaEntered(area: Area2D) -> void:
pass
# Private Methods
func _ready() -> void:
pass

View File

@@ -0,0 +1 @@
uid://dbscr0b7k3rtp

View File

@@ -0,0 +1,35 @@
extends Node
# Exports
@export var player: PlayerCharacter
# Private Variables
var _zones_in_range: Array[InteractiveLoadingZone] = []
# 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 _on_interact_unscanned(area: Area2D) -> void:
if area is not InteractiveLoadingZone or !_zones_in_range.has(area):
return
_zones_in_range.erase(area)
func _on_interact_triggered() -> void:
if _zones_in_range.is_empty():
return
var zone := _zones_in_range[0]
zone.Activate()

View File

@@ -0,0 +1 @@
uid://d3hhbegfxdnqq

View File

@@ -0,0 +1,27 @@
extends Node
@onready var item_notification: Label = $"../CanvasLayer/Item Notification"
var current_shop_item: ShopItem = null
# Public Methods
func OnPlayerInteractScannerAreaEntered(area: Area2D) -> void:
if area is not ShopItem:
return
var shop_item := area as ShopItem
if shop_item != current_shop_item:
current_shop_item = shop_item
var check_location := shop_item.check_location
var item := GameManager.location_items.CheckItemAtLocation(check_location)
var item_name: String = Enums.Items.keys()[item]
item_notification.text = item_name
func OnPlayerInteractScannerAreaExited(area: Area2D) -> void:
if area is not ShopItem:
return
if area == current_shop_item:
item_notification.text = ""
current_shop_item = null

View File

@@ -0,0 +1 @@
uid://cpr710p4wdgx

View File

@@ -0,0 +1,16 @@
extends Node
@export var player: CharacterBody2D
@export var markers: Node2D
# Public Methods
func _ready() -> void:
var marker_name := MapLoader.GetSpawnMarker()
if !marker_name:
return
for child in markers.get_children():
if child.name == marker_name:
var marker := child as Marker2D
var position := marker.global_position
player.position = position

View File

@@ -0,0 +1 @@
uid://dkcsftcdqtmg

View File

@@ -0,0 +1,7 @@
[gd_scene format=3 uid="uid://303hbhqetdhy"]
[ext_resource type="Script" uid="uid://dvgd5ejerauqm" path="res://Entities/Map Objects/Entity Spawners/arrow_spawner.gd" id="1_dsltu"]
[node name="Arrow Spawner" type="Node" unique_id=627092886 node_paths=PackedStringArray("arrow_parent")]
script = ExtResource("1_dsltu")
arrow_parent = NodePath("")

View File

@@ -0,0 +1,6 @@
[gd_scene format=3 uid="uid://divmfeqf10ri1"]
[ext_resource type="Script" uid="uid://c5yjcjk51l4bd" path="res://Maps/Connectors/Scripts/bench_interaction_connector.gd" id="1_34r4h"]
[node name="Bench Interaction Connector" type="Node" unique_id=541204437]
script = ExtResource("1_34r4h")

View File

@@ -0,0 +1,6 @@
[gd_scene format=3 uid="uid://dl2jpjtbiju34"]
[ext_resource type="Script" uid="uid://dw76slp457s1v" path="res://Maps/Connectors/Scripts/chest_interaction_connector.gd" id="1_aitih"]
[node name="Chest Interaction Connector" type="Node" unique_id=625804018]
script = ExtResource("1_aitih")

View File

@@ -0,0 +1,6 @@
[gd_scene format=3 uid="uid://b03s7fw8bxdxs"]
[ext_resource type="Script" uid="uid://d3hhbegfxdnqq" path="res://Maps/Connectors/Scripts/interactive_loading_zone_connector.gd" id="1_2sjeq"]
[node name="Interactive Loading Zone Connector" type="Node" unique_id=833475826]
script = ExtResource("1_2sjeq")

View File

@@ -0,0 +1,8 @@
[gd_scene format=3 uid="uid://did853bh5xeic"]
[ext_resource type="Script" uid="uid://dkcsftcdqtmg" path="res://Maps/Connectors/Scripts/spawn_marker_connector.gd" id="1_kb3a7"]
[node name="Spawn Marker Connector" type="Node" unique_id=807187299 node_paths=PackedStringArray("player", "markers")]
script = ExtResource("1_kb3a7")
player = NodePath("")
markers = NodePath("")