diff --git a/Scenes/Actors/fsm_player.tscn b/Scenes/Actors/fsm_player.tscn index 97cdb24f..21431a7f 100644 --- a/Scenes/Actors/fsm_player.tscn +++ b/Scenes/Actors/fsm_player.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=39 format=3 uid="uid://c4pr2707hbeph"] +[gd_scene load_steps=41 format=3 uid="uid://c4pr2707hbeph"] [ext_resource type="Script" uid="uid://bw2hakslndaxm" path="res://Scripts/Components/FSM/PlayerStateMachine.cs" id="1_mpmil"] [ext_resource type="Script" uid="uid://chwqogny2v8t1" path="res://Scripts/Components/FSM/Player/Init.cs" id="2_i6wc8"] @@ -26,6 +26,7 @@ [ext_resource type="Script" uid="uid://dv205x8msohpv" path="res://Scripts/Components/Actors/ActivationProvider.cs" id="22_12cwd"] [ext_resource type="PackedScene" uid="uid://chkpk7erlqajg" path="res://Scenes/Selector.tscn" id="23_5tmtw"] [ext_resource type="AudioStream" uid="uid://myr6n2c1u503" path="res://SFX/581602__samsterbirdies__beep-error.mp3" id="24_5tmtw"] +[ext_resource type="Script" uid="uid://cem7a1agaqtrt" path="res://Scenes/InteractionController.cs" id="27_vwjki"] [sub_resource type="CircleShape2D" id="CircleShape2D_b3hxm"] radius = 5.0 @@ -105,12 +106,17 @@ radius = 2.23607 [sub_resource type="CircleShape2D" id="CircleShape2D_7n10g"] radius = 17.2627 +[sub_resource type="CircleShape2D" id="CircleShape2D_g3wua"] +radius = 9.0 + [node name="FSMPlayer" type="CharacterBody2D"] +process_mode = 1 collision_layer = 2 collision_mask = 97 platform_wall_layers = 97 script = ExtResource("1_mpmil") InitialState = 1 +metadata/_edit_group_ = true [node name="Init" type="Node2D" parent="."] script = ExtResource("2_i6wc8") @@ -245,6 +251,15 @@ shape = SubResource("CircleShape2D_7n10g") [node name="Error" type="AudioStreamPlayer2D" parent="InteractionProvider"] stream = ExtResource("24_5tmtw") +[node name="InteractionController" type="Area2D" parent="."] +visible = false +collision_layer = 2 +collision_mask = 0 +script = ExtResource("27_vwjki") + +[node name="CollisionShape2D2" type="CollisionShape2D" parent="InteractionController"] +shape = SubResource("CircleShape2D_g3wua") + [connection signal="area_entered" from="DamageReceiver" to="DamageReceiver" method="_on_damage_hitbox_area_entered"] [connection signal="area_entered" from="InteractionProvider" to="InteractionProvider" method="_on_interaction_controller_area_entered"] [connection signal="area_exited" from="InteractionProvider" to="InteractionProvider" method="_on_interaction_controller_area_exited"] diff --git a/Scenes/Interactable.cs b/Scenes/Interactable.cs index c67ff111..2fa6a6b1 100644 --- a/Scenes/Interactable.cs +++ b/Scenes/Interactable.cs @@ -10,18 +10,24 @@ public partial class Interactable : Area2D { [Export] public Array Requirements = []; - protected InventoryManager _inventoryManager; + //protected InventoryManager _inventoryManager; public override void _Ready() { - _inventoryManager = this.GetInventoryManager(); + //_inventoryManager = this.GetInventoryManager(); + //CallDeferred(MethodName.DeferredInitReferences); } + // private void DeferredInitReferences() + // { + // _inventoryManager = InventoryManager.Instance; + // } + protected bool MeetsRequirements() { if (Requirements.Any()) { - if (_inventoryManager.HasItems(Requirements.Select(x => x.ItemKey).ToList())) + if (InventoryManager.Instance.HasItems(Requirements.Select(x => x.ItemKey).ToList())) { GD.Print($"Requirements for activation of {this.Name} successfully met: {string.Join(",", Requirements.Select(x => x.Item))} "); return true; diff --git a/Scenes/test.tscn b/Scenes/test.tscn index a89d08d0..6b831705 100644 --- a/Scenes/test.tscn +++ b/Scenes/test.tscn @@ -533,6 +533,9 @@ position = Vector2(-912, -348) [node name="RedKeyCard2" parent="Factory Tilemaps/Debug Room" instance=ExtResource("19_8fb73")] position = Vector2(-904, -348) +[node name="RedKeyCard3" parent="Factory Tilemaps/Debug Room" instance=ExtResource("19_8fb73")] +position = Vector2(-700, -452) + [node name="IcicleGun" parent="Factory Tilemaps/Debug Room" instance=ExtResource("10_iihys")] position = Vector2(-952, -381) @@ -557,14 +560,14 @@ position = Vector2(-615, -565) CameraOffset = Vector2(-50, 0) [node name="ControlPad" parent="Factory Tilemaps/Debug Room" node_paths=PackedStringArray("Target") instance=ExtResource("12_hfkf1")] -position = Vector2(-666, -491) +position = Vector2(-615, -495) Target = NodePath("../Marisa") [node name="Label2" type="Label" parent="Factory Tilemaps/Debug Room"] -offset_left = -687.0 -offset_top = -485.0 -offset_right = -635.0 -offset_bottom = -462.0 +offset_left = -637.0 +offset_top = -486.0 +offset_right = -585.0 +offset_bottom = -463.0 text = "Start Marisa" label_settings = ExtResource("14_c4c20") @@ -631,6 +634,10 @@ StartingAiState = 1 [node name="HeartPickup" parent="Factory Tilemaps/Debug Room" instance=ExtResource("27_jn1m0")] position = Vector2(-767, -395) +[node name="RedKeycard_Switch_3" parent="Factory Tilemaps/Debug Room" node_paths=PackedStringArray("Targets") instance=ExtResource("17_e3v0b")] +position = Vector2(-701, -486) +Targets = [NodePath("../HorizontalForceField")] + [node name="Part2" type="Node2D" parent="Factory Tilemaps"] [node name="Mainframe" parent="Factory Tilemaps/Part2" instance=ExtResource("13_acrmt")] @@ -902,7 +909,8 @@ position = Vector2(-1506, -188) Events = Array[Object]([SubResource("Resource_hppa0")]) [node name="LevelStartTrigger" parent="Factory Tilemaps/LevelProps" instance=ExtResource("43_kf3qc")] -position = Vector2(-779, -159) +position = Vector2(-776, -160) +scale = Vector2(1.455, 1.455) Events = Array[Object]([SubResource("Resource_5er5x"), SubResource("Resource_b25hy")]) [node name="AreaTrigger2" parent="Factory Tilemaps/LevelProps" node_paths=PackedStringArray("Target") instance=ExtResource("28_6au4t")] diff --git a/Scripts/Chest.cs b/Scripts/Chest.cs index 5fdd17b1..cf8fb9d5 100644 --- a/Scripts/Chest.cs +++ b/Scripts/Chest.cs @@ -20,7 +20,7 @@ public partial class Chest : Interactable if (!MeetsRequirements()) return false; foreach (var item in LootTable) { - _inventoryManager.AddItem(item); + InventoryManager.Instance.AddItem(item); } _sprite.Play("Opening"); diff --git a/Scripts/Interactables/AreaTrigger.cs b/Scripts/Interactables/AreaTrigger.cs index 5a98226a..35ffa6c4 100644 --- a/Scripts/Interactables/AreaTrigger.cs +++ b/Scripts/Interactables/AreaTrigger.cs @@ -16,7 +16,7 @@ public partial class AreaTrigger : Area2D [Signal] public delegate void ActivatedEventHandler(); - public bool Activate(InteractionController player) + private bool Activate() { if (_activations == 0 && DoNotActivateOnFirst) { @@ -47,6 +47,6 @@ public partial class AreaTrigger : Area2D private void _on_area_entered(Area2D area) { if (area is not InteractionController player) return; - Activate(player); + Activate(); } } \ No newline at end of file diff --git a/Scripts/Interactables/ItemPickup.cs b/Scripts/Interactables/ItemPickup.cs index 856120bb..7c4fc232 100644 --- a/Scripts/Interactables/ItemPickup.cs +++ b/Scripts/Interactables/ItemPickup.cs @@ -15,7 +15,7 @@ public partial class ItemPickup : Interactable if (!MeetsRequirements()) return false; foreach (var item in LootTable) { - _inventoryManager.AddItem(item); + InventoryManager.Instance.AddItem(item); } // Delet This diff --git a/Scripts/InventoryManager.cs b/Scripts/InventoryManager.cs index fa23ec36..6a84ccf2 100644 --- a/Scripts/InventoryManager.cs +++ b/Scripts/InventoryManager.cs @@ -7,6 +7,7 @@ using Cirno.Scripts.Resources; public partial class InventoryManager : Node2D { + public static InventoryManager Instance { get; private set; } public bool RedKeycard { get; set; } private Dictionary _itemsDict = new Dictionary(); @@ -24,10 +25,10 @@ public partial class InventoryManager : Node2D [Signal] public delegate void ItemUsedEventHandler(LootItem itemKey, int totalCount); - - // Called when the node enters the scene tree for the first time. + public override void _Ready() { + Instance = this; } // Called every frame. 'delta' is the elapsed time since the previous frame.