Random rooms

This commit is contained in:
Marco 2025-04-11 15:53:59 +02:00
commit 59f98ebf0e
13 changed files with 121 additions and 29 deletions

View file

@ -1,9 +1,31 @@
using Cirno.Scripts.Resources.Roguelite;
using System.Linq;
using Cirno.Scripts.Resources;
using Cirno.Scripts.Resources.Roguelite;
using Godot;
using Godot.Collections;
namespace Cirno.Scripts.Controllers;
public partial class RogueliteRoom : Node2D
{
[Export] public RogueliteRoomResource RoomResource { get; set; }
private Array<EnemyResource> SpawnableEnemies => RoomResource.SpawnableEnemies;
public void Spawn()
{
var enemySpawners = this.GetNode("EnemySpawners").GetChildren().Cast<Marker2D>();
foreach (var spawner in enemySpawners)
{
var index = GD.RandRange(0, SpawnableEnemies.Count - 1);
var e = SpawnableEnemies[index];
var enemyScene = GD.Load<PackedScene>(e.PrefabPath);
var spawnedEnemy = spawner.CreateChild<Node2D>(enemyScene);
}
}
}

View file

@ -19,7 +19,7 @@ public partial class RogueliteRoomManager : Node2D
private void SpawnRoomsGrid()
{
var firstRoom = Rooms.FirstOrDefault();
//var firstRoom = Rooms.FirstOrDefault();
var origin = Vector2.Zero;
var tileSize = new Vector2(16, 16);
@ -28,11 +28,13 @@ public partial class RogueliteRoomManager : Node2D
{
for (int j = 0; j < 10; j++)
{
SpawnRoom(firstRoom, origin + (firstRoom.Size * new Vector2(i, j) * tileSize));
var roomIndex = GD.RandRange(0, Rooms.Count - 1);
var room = Rooms[roomIndex];
SpawnRoom(room, origin + (room.Size * new Vector2(i, j) * tileSize));
}
}
CallDeferred(MethodName.RebakeNavigationDeferred);
//CallDeferred(MethodName.RebakeNavigationDeferred);
}
@ -46,5 +48,7 @@ public partial class RogueliteRoomManager : Node2D
var roomScene = GD.Load<PackedScene>(room.ScenePath);
var spawnedScene = this.CreateChild<RogueliteRoom>(roomScene, position);
spawnedScene.Spawn();
}
}