diff --git a/Scenes/Maps/Level2.tscn b/Scenes/Maps/Level2.tscn index f09e9cc5..3e52f456 100644 --- a/Scenes/Maps/Level2.tscn +++ b/Scenes/Maps/Level2.tscn @@ -1,8 +1,7 @@ -[gd_scene load_steps=13 format=4 uid="uid://6a6tjohypmmb"] +[gd_scene load_steps=12 format=4 uid="uid://6a6tjohypmmb"] [ext_resource type="Script" uid="uid://doxmbokehw8ci" path="res://Scripts/GameManager.cs" id="1_t2k72"] [ext_resource type="PackedScene" uid="uid://bghghp5ep4w2j" path="res://Scenes/player.tscn" id="2_v2pdx"] -[ext_resource type="PackedScene" uid="uid://crry0rgk7a8sm" path="res://Scenes/Weapons/BaseWeapon.tscn" id="3_3pdf7"] [ext_resource type="Script" uid="uid://mja0rk7n2kln" path="res://Scripts/Resources/MapStartDataResource.cs" id="4_s1vkf"] [ext_resource type="TileSet" uid="uid://6k28roiljylj" path="res://Tilesets/factory_tileset.tres" id="5_06rc0"] [ext_resource type="Script" uid="uid://krean0uywtms" path="res://Scripts/TilemapAvoidance.cs" id="6_up0ka"] @@ -23,7 +22,6 @@ PlayerTemplate = ExtResource("2_v2pdx") SpawnMarkers = Dictionary[int, NodePath]({ 0: NodePath("PlayerStartPosition") }) -WeaponTemplate = ExtResource("3_3pdf7") MapStartData = SubResource("Resource_6wo78") [node name="Tilemaps" type="Node2D" parent="."] diff --git a/Scenes/Maps/PlayerFSMTest.tscn b/Scenes/Maps/PlayerFSMTest.tscn index 31296f0d..d47e51a0 100644 --- a/Scenes/Maps/PlayerFSMTest.tscn +++ b/Scenes/Maps/PlayerFSMTest.tscn @@ -1,8 +1,7 @@ -[gd_scene load_steps=19 format=4 uid="uid://dqyfnby0t7gu1"] +[gd_scene load_steps=18 format=4 uid="uid://dqyfnby0t7gu1"] [ext_resource type="Script" uid="uid://doxmbokehw8ci" path="res://Scripts/GameManager.cs" id="1_c3v4x"] [ext_resource type="PackedScene" uid="uid://bghghp5ep4w2j" path="res://Scenes/player.tscn" id="2_w1v1g"] -[ext_resource type="PackedScene" uid="uid://crry0rgk7a8sm" path="res://Scenes/Weapons/BaseWeapon.tscn" id="3_b3hxm"] [ext_resource type="Script" uid="uid://mja0rk7n2kln" path="res://Scripts/Resources/MapStartDataResource.cs" id="4_u1i8n"] [ext_resource type="TileSet" uid="uid://6k28roiljylj" path="res://Tilesets/factory_tileset.tres" id="5_6314l"] [ext_resource type="Script" uid="uid://krean0uywtms" path="res://Scripts/TilemapAvoidance.cs" id="6_yyg8m"] @@ -32,7 +31,6 @@ PlayerTemplate = ExtResource("2_w1v1g") SpawnMarkers = Dictionary[int, NodePath]({ 0: NodePath("PlayerStartPosition") }) -WeaponTemplate = ExtResource("3_b3hxm") MapStartData = SubResource("Resource_6wo78") [node name="Tilemaps" type="Node2D" parent="."] diff --git a/Scenes/player.tscn b/Scenes/player.tscn index 153acf45..9d5a8eca 100644 --- a/Scenes/player.tscn +++ b/Scenes/player.tscn @@ -170,6 +170,7 @@ process_material = SubResource("ParticleProcessMaterial_hmqi5") [node name="WeaponProvider" type="Node2D" parent="."] script = ExtResource("17_qqcod") +WeaponTemplate = ExtResource("9_wblq0") [connection signal="area_entered" from="InteractionController" to="." method="_on_interaction_controller_area_entered"] [connection signal="area_exited" from="InteractionController" to="." method="_on_interaction_controller_area_exited"] diff --git a/Scenes/test.tscn b/Scenes/test.tscn index ff25b415..989f3b99 100644 --- a/Scenes/test.tscn +++ b/Scenes/test.tscn @@ -1,8 +1,7 @@ -[gd_scene load_steps=121 format=4 uid="uid://bv451a8wgty4u"] +[gd_scene load_steps=120 format=4 uid="uid://bv451a8wgty4u"] [ext_resource type="Script" uid="uid://doxmbokehw8ci" path="res://Scripts/GameManager.cs" id="1_8tmoj"] [ext_resource type="PackedScene" uid="uid://bghghp5ep4w2j" path="res://Scenes/player.tscn" id="2_8mh54"] -[ext_resource type="PackedScene" uid="uid://crry0rgk7a8sm" path="res://Scenes/Weapons/BaseWeapon.tscn" id="3_2wlhc"] [ext_resource type="TileSet" uid="uid://6k28roiljylj" path="res://Tilesets/factory_tileset.tres" id="3_kgs2x"] [ext_resource type="Script" uid="uid://krean0uywtms" path="res://Scripts/TilemapAvoidance.cs" id="4_p1fl3"] [ext_resource type="PackedScene" uid="uid://rp4jhx0tuh24" path="res://Scenes/fragola.tscn" id="4_s7wq6"] @@ -89,7 +88,7 @@ script = ExtResource("7_l32kg") EggIndex = 0 StartingEquipment = Array[ExtResource("6_8tdlb")]([ExtResource("6_khabp")]) -[sub_resource type="Shader" id="Shader_jn1m0"] +[sub_resource type="Shader" id="Shader_ksslq"] resource_local_to_scene = true code = "shader_type canvas_item; @@ -113,9 +112,9 @@ void fragment() { COLOR = color; }" -[sub_resource type="ShaderMaterial" id="ShaderMaterial_usuub"] +[sub_resource type="ShaderMaterial" id="ShaderMaterial_jn1m0"] resource_local_to_scene = true -shader = SubResource("Shader_jn1m0") +shader = SubResource("Shader_ksslq") shader_parameter/blink_color = Color(0, 0, 0, 1) shader_parameter/blink_intensity = 0.0 shader_parameter/teleport_progress = 0.0 @@ -154,7 +153,7 @@ source = 5 [sub_resource type="VisualShaderNodeInput" id="VisualShaderNodeInput_81ys3"] input_name = "time" -[sub_resource type="VisualShader" id="VisualShader_h0jm4"] +[sub_resource type="VisualShader" id="VisualShader_usuub"] resource_local_to_scene = true code = "shader_type canvas_item; render_mode blend_mix; @@ -236,11 +235,11 @@ nodes/fragment/11/node = SubResource("VisualShaderNodeFloatOp_own43") nodes/fragment/11/position = Vector2(1360, 480) nodes/fragment/connections = PackedInt32Array(2, 0, 3, 0, 3, 1, 4, 0, 6, 0, 7, 2, 7, 4, 8, 0, 5, 0, 8, 1, 8, 0, 0, 1, 9, 0, 10, 0, 4, 0, 11, 0, 10, 0, 11, 1, 11, 0, 5, 0) -[sub_resource type="ShaderMaterial" id="ShaderMaterial_oy44o"] +[sub_resource type="ShaderMaterial" id="ShaderMaterial_h0jm4"] resource_local_to_scene = true -shader = SubResource("VisualShader_h0jm4") +shader = SubResource("VisualShader_usuub") -[sub_resource type="Shader" id="Shader_pniyx"] +[sub_resource type="Shader" id="Shader_oy44o"] resource_local_to_scene = true code = "shader_type canvas_item; @@ -264,15 +263,15 @@ void fragment() { COLOR = color; }" -[sub_resource type="ShaderMaterial" id="ShaderMaterial_5ews6"] +[sub_resource type="ShaderMaterial" id="ShaderMaterial_pniyx"] resource_local_to_scene = true -shader = SubResource("Shader_pniyx") +shader = SubResource("Shader_oy44o") shader_parameter/blink_color = Color(0, 0, 0, 1) shader_parameter/blink_intensity = 0.0 shader_parameter/teleport_progress = 0.0 shader_parameter/scanline_density = 50.0 -[sub_resource type="VisualShader" id="VisualShader_pqe7f"] +[sub_resource type="VisualShader" id="VisualShader_5ews6"] resource_local_to_scene = true code = "shader_type canvas_item; render_mode blend_mix; @@ -354,9 +353,9 @@ nodes/fragment/11/node = SubResource("VisualShaderNodeFloatOp_own43") nodes/fragment/11/position = Vector2(1360, 480) nodes/fragment/connections = PackedInt32Array(2, 0, 3, 0, 3, 1, 4, 0, 6, 0, 7, 2, 7, 4, 8, 0, 5, 0, 8, 1, 8, 0, 0, 1, 9, 0, 10, 0, 4, 0, 11, 0, 10, 0, 11, 1, 11, 0, 5, 0) -[sub_resource type="ShaderMaterial" id="ShaderMaterial_xof4a"] +[sub_resource type="ShaderMaterial" id="ShaderMaterial_pqe7f"] resource_local_to_scene = true -shader = SubResource("VisualShader_pqe7f") +shader = SubResource("VisualShader_5ews6") [sub_resource type="Resource" id="Resource_hppa0"] script = ExtResource("40_7qam0") @@ -441,7 +440,7 @@ ActivationType = 0 Targets = Array[NodePath]([NodePath("../Rumia")]) WaitForCompletion = true -[sub_resource type="Resource" id="Resource_ati1v"] +[sub_resource type="Resource" id="Resource_xof4a"] resource_local_to_scene = true script = ExtResource("49_0si7g") Target = NodePath(".") @@ -476,7 +475,6 @@ SpawnMarkers = Dictionary[int, NodePath]({ 2: NodePath("Factory Tilemaps/LevelProps/BossDebugTeleporterDestination"), 255: NodePath("Factory Tilemaps/Debug Room/DebugRoomStartPosition") }) -WeaponTemplate = ExtResource("3_2wlhc") StartingEquipment = [ExtResource("4_swym2"), ExtResource("5_nqier")] MapStartData = SubResource("Resource_6sau4") metadata/_edit_lock_ = true @@ -617,13 +615,13 @@ position = Vector2(-779, -550) [node name="HorizontalForceField" parent="Factory Tilemaps/Debug Room" instance=ExtResource("66_nxn3h")] position = Vector2(-749, -496) -TurnOffMaterial = SubResource("ShaderMaterial_usuub") -ActiveMaterial = SubResource("ShaderMaterial_oy44o") +TurnOffMaterial = SubResource("ShaderMaterial_jn1m0") +ActiveMaterial = SubResource("ShaderMaterial_h0jm4") [node name="HorizontalForceField2" parent="Factory Tilemaps/Debug Room" instance=ExtResource("66_nxn3h")] position = Vector2(-735, -532) -TurnOffMaterial = SubResource("ShaderMaterial_5ews6") -ActiveMaterial = SubResource("ShaderMaterial_xof4a") +TurnOffMaterial = SubResource("ShaderMaterial_pniyx") +ActiveMaterial = SubResource("ShaderMaterial_pqe7f") [node name="ControllabeFairyGuard" parent="Factory Tilemaps/Debug Room" instance=ExtResource("73_ier4h")] position = Vector2(-581, -346) @@ -998,7 +996,7 @@ Events = Array[Object]([SubResource("Resource_068l7"), SubResource("Resource_l3n [node name="BossBattleStartScript" parent="Factory Tilemaps/LevelProps" instance=ExtResource("43_kf3qc")] position = Vector2(-1487, -396) -Events = Array[Object]([SubResource("Resource_4f4id"), SubResource("Resource_s2o7m"), SubResource("Resource_b1dht"), SubResource("Resource_xrgpy"), SubResource("Resource_ati1v")]) +Events = Array[Object]([SubResource("Resource_4f4id"), SubResource("Resource_s2o7m"), SubResource("Resource_b1dht"), SubResource("Resource_xrgpy"), SubResource("Resource_xof4a")]) [node name="Enemy13" parent="Factory Tilemaps/LevelProps" instance=ExtResource("47_u1ve6")] position = Vector2(-1657, -788) diff --git a/Scripts/Components/Actors/PlayerWeaponProvider.cs b/Scripts/Components/Actors/PlayerWeaponProvider.cs index 94ef624f..6e957cd8 100644 --- a/Scripts/Components/Actors/PlayerWeaponProvider.cs +++ b/Scripts/Components/Actors/PlayerWeaponProvider.cs @@ -1,5 +1,6 @@ using System; using System.Linq; +using Cirno.Scripts.Resources; using Godot; using Godot.Collections; @@ -7,6 +8,7 @@ namespace Cirno.Scripts.Components.Actors; public partial class PlayerWeaponProvider : Node2D { + [Export] public PackedScene WeaponTemplate { get; private set; } public Array EquippedWeapons { get; set; } = new Array(); public int CurrentWeaponIndex { get; set; } = 0; @@ -21,6 +23,16 @@ public partial class PlayerWeaponProvider : Node2D public override void _Ready() { _inventoryManager = this.GetInventoryManager(); + + _inventoryManager.WeaponEquip += this.EquipWeapon; + + _inventoryManager.ItemAdded += (LootItem item, int amount) => + { + if (item.Item == ItemTypes.Weapon) + { + SpawnPlayerWeapon(item); + } + }; } public void Init(PlayerMovement parent) @@ -81,4 +93,23 @@ public partial class PlayerWeaponProvider : Node2D EquippedWeapon.Shoot(); } + private void SpawnPlayerWeapon(LootItem startingItem) + { + if (WeaponTemplate == null) + { + GD.Print("Could not spawn weapon because template is null"); + return; + } + + var weapon = this.CreateSibling(WeaponTemplate); + weapon.WeaponData = startingItem.WeaponData; + + this.AddWeapon(weapon); + + if (this.EquippedWeapon == null) + { + this.EquipWeapon(weapon); + } + } + } diff --git a/Scripts/GameManager.cs b/Scripts/GameManager.cs index ed26b8aa..609906d8 100644 --- a/Scripts/GameManager.cs +++ b/Scripts/GameManager.cs @@ -28,8 +28,6 @@ public partial class GameManager : Node2D //[Export] public Marker2D PlayerSpawnMarker { get; set; } - [Export] public PackedScene WeaponTemplate { get; private set; } - [Export] public Array StartingEquipment { get; private set; } = new(); private InventoryManager _inventoryManager { get; set; } @@ -150,21 +148,6 @@ public partial class GameManager : Node2D return; } - if (_inventoryManager is not null) - { - _inventoryManager.ItemAdded += (LootItem item, int amount) => - { - if (item.Item == ItemTypes.Weapon) - { - SpawnPlayerWeapon(item); - } - }; - - _inventoryManager.WeaponEquip += _player.EquipWeapon; - - _inventoryManager.ItemUsed += _player.UseItem; - } - // Wait before the player is fully initialized before spawning weapons on it CallDeferred(MethodName.SpawnWeapons); } @@ -252,25 +235,6 @@ public partial class GameManager : Node2D } } - private void SpawnPlayerWeapon(LootItem startingItem) - { - if (WeaponTemplate == null) - { - GD.Print("Could not spawn weapon because template is null"); - return; - } - - var weapon = _player.CreateChild(WeaponTemplate); - weapon.WeaponData = startingItem.WeaponData; - - _player.AddWeapon(weapon); - - if (_player.EquippedWeapon == null) - { - _player.EquipWeapon(weapon); - } - } - private void SpawnBulletsContainer() { _bulletsContainer = new Node2D(); diff --git a/Scripts/PlayerMovement.cs b/Scripts/PlayerMovement.cs index 424565df..9d2e9070 100644 --- a/Scripts/PlayerMovement.cs +++ b/Scripts/PlayerMovement.cs @@ -163,6 +163,8 @@ public partial class PlayerMovement : CharacterBody2D, IDestructible _selector.Visible = false; } + _inventoryManager.ItemUsed += this.UseItem; + _lastCheckPointPosition = GlobalPosition; _ = UnTeleport(); @@ -260,16 +262,6 @@ public partial class PlayerMovement : CharacterBody2D, IDestructible _weaponProvider.EquipWeapon(weapon); } - public void NextWeapon() - { - _weaponProvider.NextWeapon(); - } - - public void PreviousWeapon() - { - _weaponProvider.PreviousWeapon(); - } - private void FindInteractable() { var selected = _selector.SelectedInteractable; @@ -394,12 +386,12 @@ public partial class PlayerMovement : CharacterBody2D, IDestructible if (Input.IsActionJustPressed(_nextWeaponActionName)) { - NextWeapon(); + _weaponProvider.NextWeapon(); } if (Input.IsActionJustPressed(_previousWeaponActionName)) { - PreviousWeapon(); + _weaponProvider.PreviousWeapon(); } _crosshair.Position = CalculateCrosshairPosition();