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);
        }
    }
Exemple #2
0
    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);
        }
    }
Exemple #3
0
    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;
        }
    }
Exemple #4
0
    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);
        }
    }