private void PlaceEnemies() { List <Vector2Int> walkablePositions = mCollisionMap.EmptyPositions(); // Remove any walkable positions too close to the avatar walkablePositions.RemoveAll((pos) => VectorHelper.OrthogonalDistance(pos, mAvatarStartPosition) < 10); DungeonFloorData data = CurrentDungeonFloorData(); int numEnemies = Random.Range(data.enemyData.minEnemies, data.enemyData.maxEnemies); numEnemies = WantedQuirk.ApplyQuirkIfPresent(numEnemies); for (int i = 0; i < numEnemies; ++i) { if (walkablePositions.Count == 0) { return; } Vector2Int pos2 = walkablePositions[Random.Range(0, walkablePositions.Count)]; walkablePositions.Remove(pos2); PlaceEnemy(data, pos2); } }
public void SpawnCops(RandomDungeon dungeon, CollisionMap collisionMap, Vector2 avatarStartPosition) { List <Vector2Int> walkablePositions = collisionMap.EmptyPositions(); walkablePositions.RemoveAll((pos) => VectorHelper.OrthogonalDistance(pos, avatarStartPosition) < 10); // Spawn a few cops in the level int numCops = Random.Range(3, 6); for (int i = 0; i < numCops; ++i) { if (walkablePositions.Count == 0) { return; } string enemy = (Random.Range(0, 2) == 0 ? "CopRanged" : "CopMelee"); GameObject newEnemy = GameObject.Instantiate(PrefabManager.instance.PrefabByName(enemy)); Vector2Int pos2 = walkablePositions[Random.Range(0, walkablePositions.Count)]; walkablePositions.Remove(pos2); Vector3 pos = MapCoordinateHelper.MapToWorldCoords(pos2); newEnemy.transform.position = pos; collisionMap.MarkSpace(pos2.x, pos2.y, newEnemy.GetComponent <SimpleMovement>().uniqueCollisionIdentity); } }
public void SpawnGhosts(RandomDungeon dungeon, CollisionMap collisionMap, Vector2Int avatarStartPosition) { List <Vector2Int> walkablePositions = collisionMap.EmptyPositions(); walkablePositions.RemoveAll((pos) => VectorHelper.OrthogonalDistance(pos, avatarStartPosition) < 10); // Spawn a few cops in the level int numGhosts = Random.Range(10, 20); for (int i = 0; i < numGhosts; ++i) { if (walkablePositions.Count == 0) { return; } GameObject newGhost = GameObject.Instantiate(PrefabManager.instance.PrefabByName("Ghost")); Vector2Int pos2 = walkablePositions[Random.Range(0, walkablePositions.Count)]; walkablePositions.Remove(pos2); Vector3 pos = MapCoordinateHelper.MapToWorldCoords(pos2); newGhost.transform.position = pos; } }
public void SpawnDebris(RandomDungeon dungeon, CollisionMap collisionMap, Vector2 avatarStartPosition) { List <Vector2Int> positions = collisionMap.EmptyPositions(); positions.RemoveAll((pos) => VectorHelper.OrthogonalDistance(pos, avatarStartPosition) < 3); int numDebris = Random.Range(positions.Count / 5, positions.Count / 4); for (int i = 0; i < numDebris; ++i) { if (positions.Count == 0) { return; } Vector2Int pos = positions.Sample(); // todo bdsowers - ensure that this position is valid GameObject newDebris = PrefabManager.instance.InstantiatePrefabByName(PrefabManager.instance.debrisPrefabs.Sample().name); newDebris.transform.position = MapCoordinateHelper.MapToWorldCoords(pos); collisionMap.MarkSpace(pos.x, pos.y, newDebris.GetComponent <SimpleMovement>().uniqueCollisionIdentity); positions.Remove(pos); } }