Improve NPC spawning logic to prioritize stable tiles and ensure valid spawn positions

This commit is contained in:
2025-12-13 00:06:11 +01:00
parent d8b0583fac
commit 6c15935b02

View File

@@ -213,9 +213,22 @@ namespace Infrastructure.Unity
private void SpawnNpc() private void SpawnNpc()
{ {
var spawnPos = new Vector3(levelGenerator.GridSizeX / 2f, 7f, levelGenerator.GridSizeY / 2f); var validTiles = _allTiles.FindAll(t => t.Floor == 0 && t.CurrentState == TileState.Stable);
if (validTiles.Count == 0)
{
validTiles = _allTiles.FindAll(t => t.CurrentState == TileState.Stable);
}
if (validTiles.Count == 0) return;
var randomTile = validTiles[Random.Range(0, validTiles.Count)];
if (!_tileViews.TryGetValue(randomTile.Id, out var tileView)) return;
if (!tileView) return;
var spawnPos = tileView.transform.position + Vector3.up * 5f;
// 30% chance for Hunter if player available
if (_playerInstance && hunterNpcPrefab && Random.value < 0.3f) if (_playerInstance && hunterNpcPrefab && Random.value < 0.3f)
{ {
var hunter = Instantiate(hunterNpcPrefab, spawnPos, Quaternion.identity); var hunter = Instantiate(hunterNpcPrefab, spawnPos, Quaternion.identity);