Improve NPC spawning logic to prioritize stable tiles and ensure valid spawn positions
This commit is contained in:
@@ -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);
|
||||||
|
|
||||||
// 30% chance for Hunter if player available
|
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;
|
||||||
|
|
||||||
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);
|
||||||
|
|||||||
Reference in New Issue
Block a user