diff --git a/Zennysoft.Game.Ma/src/map/dungeon/code/Altar.cs b/Zennysoft.Game.Ma/src/map/dungeon/code/Altar.cs index 472d3d17..ec7a71f1 100644 --- a/Zennysoft.Game.Ma/src/map/dungeon/code/Altar.cs +++ b/Zennysoft.Game.Ma/src/map/dungeon/code/Altar.cs @@ -19,6 +19,8 @@ public partial class Altar : SpecialFloor [Node] private Marker3D PlayerSpawnPoint { get; set; } = default!; + [Node] public Node3D ItemSpawnPoints { get; set; } = default!; + [Node] private Area3D NoExitArea { get; set; } = default!; [Export] public Resource Dialogue { get; set; } = default!; @@ -29,6 +31,31 @@ public partial class Altar : SpecialFloor Exit.AreaEntered += Exit_AreaEntered; NoExitArea.AreaEntered += NoExitArea_AreaEntered; FloorIsLoaded = true; + SpawnItems(); + } + + private void SpawnItems() + { + if (ItemSpawnPoints == null) + return; + + var itemSpawnPoints = ItemSpawnPoints.GetChildren(); + var rng = new RandomNumberGenerator(); + rng.Randomize(); + var numberOfItemsToSpawn = rng.RandiRange(2, itemSpawnPoints.Count); + itemSpawnPoints.Shuffle(); + var database = ItemDatabase.Instance; + foreach (var spawnPoint in itemSpawnPoints.Cast()) + { + if (numberOfItemsToSpawn <= 0) + break; + numberOfItemsToSpawn--; + + var selectedItem = database.PickBasicItem() as Node3D; + var duplicated = selectedItem.Duplicate((int)DuplicateFlags.UseInstantiation) as Node3D; + AddChild(duplicated); + duplicated.Position = new Vector3(spawnPoint.Position.X, 0, spawnPoint.Position.Z); + } } private void NoExitArea_AreaEntered(Area3D area) diff --git a/Zennysoft.Game.Ma/src/map/dungeon/floors/Special Floors/00. Altar.tscn b/Zennysoft.Game.Ma/src/map/dungeon/floors/Special Floors/00. Altar.tscn index 5cd250fe..c482e9b8 100644 --- a/Zennysoft.Game.Ma/src/map/dungeon/floors/Special Floors/00. Altar.tscn +++ b/Zennysoft.Game.Ma/src/map/dungeon/floors/Special Floors/00. Altar.tscn @@ -162,6 +162,24 @@ transform = Transform3D(1.4, 0, 0, 0, 1.4, 0, 0, 0, 1.4, 0, 3.70806, 0) unique_name_in_owner = true transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, 39.3951, -2.89376, -1.035) +[node name="ItemSpawnPoints" type="Node3D" parent="Spawn Points"] +unique_name_in_owner = true + +[node name="Marker3D" type="Marker3D" parent="Spawn Points/ItemSpawnPoints"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.5546, -2.4089, -2.33621) + +[node name="Marker3D2" type="Marker3D" parent="Spawn Points/ItemSpawnPoints"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.30073, -2.4089, -7.21384) + +[node name="Marker3D3" type="Marker3D" parent="Spawn Points/ItemSpawnPoints"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -3.23559, -2.4089, 3.53153) + +[node name="Marker3D4" type="Marker3D" parent="Spawn Points/ItemSpawnPoints"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5.62001, -2.4089, 3.3162) + +[node name="Marker3D5" type="Marker3D" parent="Spawn Points/ItemSpawnPoints"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -3.67877, -2.4089, -5.30614) + [node name="Room" type="Node3D" parent="."] transform = Transform3D(1.4, 0, 0, 0, 1.4, 0, 0, 0, 1.4, 0, 4.31338, 0)