Esempio n. 1
0
    void Start()
    {
        GameObject CurrentTile = ColorTile[Random.Range(0, 5)];

        player.transform.position = new Vector2(2, 2);

        for (int i = 0; i <= 11; i++)
        {
            walls.Add(Instantiate(CurrentTile, new Vector2(20, i), Quaternion.identity));
        }
        for (float i = 0; i <= 11; i++)
        {
            walls.Add(Instantiate(CurrentTile, new Vector2(0, i), Quaternion.identity));
        }
        for (int i = 0; i <= 20; i++)
        {
            walls.Add(Instantiate(CurrentTile, new Vector2(i, 11), Quaternion.identity));
        }
        for (int i = 0; i <= 20; i++)
        {
            walls.Add(Instantiate(CurrentTile, new Vector2(i, 0), Quaternion.identity));
        }
        for (int i = 0; i <= 3; i++)
        {
            // walls.Add(Instantiate(Platform, new Vector2(i+9, 5), Quaternion.identity));
            walls.Add(Instantiate(Platform, new Vector2(i + 13, 3), Quaternion.identity));
            walls.Add(Instantiate(Platform, new Vector2(i + 4, 3), Quaternion.identity));
        }
        walls.Add(Instantiate(CurrentTile, new Vector2(10, 1), Quaternion.identity));
        walls.Add(Instantiate(CurrentTile, new Vector2(10, 2), Quaternion.identity));
        walls.Add(Instantiate(Platform, new Vector2(1, 2), Quaternion.identity));
        walls.Add(Instantiate(Platform, new Vector2(19, 2), Quaternion.identity));

        // Generate bool array of the map
        bottomLeft = new Vector2(walls.Select(w => w.transform.position.x).Min(), walls.Select(w => w.transform.position.y).Min());
        topRight   = new Vector2(walls.Select(w => w.transform.position.x).Max(), walls.Select(w => w.transform.position.y).Max());
        mapSize    = new Vector2(topRight.x - bottomLeft.x + 1, topRight.y - bottomLeft.y + 1);

        bool[,] map = new bool[(int)mapSize.x, (int)mapSize.y];
        foreach (GameObject w in walls)
        {
            Vector2 pos = (Vector2)w.transform.position - bottomLeft;
            map[(int)pos.x, (int)pos.y] = true;
        }

        // Generate NavMesh
        NavMeshGenerator.Offset = bottomLeft;
        Nodes = NavMeshGenerator.GenerateNavMesh(map);
        GameController.Nodes = Nodes;

        Vector3 spawn = SpawnPoint.transform.position;

        for (int i = 0; i < Bosses; i++)
        {
            var boss = Instantiate(KingMeowster, spawn, Quaternion.identity);
            boss.GetComponent <KingMeowster>().Target = player;
        }
        GameController.AliveBosses = Bosses;
    }
Esempio n. 2
0
    void Start()
    {
        int        size        = Random.Range(MinRoomSize, MaxRoomSize);
        GameObject CurrentTile = WallTiles[Random.Range(0, 5)];

        GameController.RespawnPoint = new Vector2(Mathf.Round((-1 * size) / 2) + 1, 3);
        player.transform.position   = GameController.RespawnPoint;
        float tracker   = 0f;
        int   sizeSides = Random.Range(MinSideSize, MaxSideSize);

        // Generate floor
        for (float i = Mathf.Round((-1 * size) / 2); i <= Mathf.Round(size / 2); i++)
        {
            float Percentage = Random.value;
            if (tracker == -2f)
            {
                walls.Add(Instantiate(Platform, new Vector2(i - 1, 1), Quaternion.identity));
            }
            if (Percentage <= Straight)
            {
                walls.Add(Instantiate(CurrentTile, new Vector2(i, tracker), Quaternion.identity));
            }
            else if (Percentage <= Straight + ONE && Percentage > Straight && tracker <= 1)
            {
                tracker += 1f;
                walls.Add(Instantiate(CurrentTile, new Vector2(i, tracker), Quaternion.identity));
                walls.Add(Instantiate(CurrentTile, new Vector2(i, tracker - 1), Quaternion.identity));
            }
            else if (Percentage <= Straight + ONE + ONE && Percentage > Straight + ONE && tracker >= -1)
            {
                tracker -= 1f;
                walls.Add(Instantiate(CurrentTile, new Vector2(i, tracker), Quaternion.identity));
                walls.Add(Instantiate(CurrentTile, new Vector2(i - 1, tracker), Quaternion.identity));
            }
            else if (Percentage < 1 && Straight + ONE + ONE < Percentage && tracker >= 0)
            {
                tracker -= 2f;
                walls.Add(Instantiate(CurrentTile, new Vector2(i - 1, tracker + 1f), Quaternion.identity));
                walls.Add(Instantiate(CurrentTile, new Vector2(i - 1, tracker), Quaternion.identity));
                walls.Add(Instantiate(CurrentTile, new Vector2(i, tracker), Quaternion.identity));
            }
            else if (Percentage < 1 && Straight + ONE + ONE < Percentage && tracker < 0)
            {
                tracker += 2f;
                walls.Add(Instantiate(CurrentTile, new Vector2(i - 1, tracker - 1f), Quaternion.identity));
                walls.Add(Instantiate(CurrentTile, new Vector2(i - 1, tracker), Quaternion.identity));
                walls.Add(Instantiate(CurrentTile, new Vector2(i, tracker), Quaternion.identity));
            }
        }

        // Generate walls
        for (int i = 0; i <= sizeSides; i++)
        {
            walls.Add(Instantiate(CurrentTile, new Vector2(Mathf.Round((-1 * size) / 2) - 1, i), Quaternion.identity));
        }
        for (float i = tracker; i <= sizeSides; i++)
        {
            walls.Add(Instantiate(CurrentTile, new Vector2(Mathf.Round(size / 2) + 1, i), Quaternion.identity));
        }
        for (int i = 1; i <= Mathf.Round(size / 2); i++)
        {
            walls.Add(Instantiate(CurrentTile, new Vector2(i, sizeSides), Quaternion.identity));
        }
        for (int i = 1; i >= Mathf.Round((-1 * size) / 2); i--)
        {
            walls.Add(Instantiate(CurrentTile, new Vector2(i, sizeSides), Quaternion.identity));
        }

        // Generate bool array of the map
        bottomLeft = new Vector2(walls.Select(w => w.transform.position.x).Min(), walls.Select(w => w.transform.position.y).Min());
        topRight   = new Vector2(walls.Select(w => w.transform.position.x).Max(), walls.Select(w => w.transform.position.y).Max());
        mapSize    = new Vector2(topRight.x - bottomLeft.x + 1, topRight.y - bottomLeft.y + 1);

        bool[,] map = new bool[(int)mapSize.x, (int)mapSize.y];
        foreach (GameObject w in walls)
        {
            Vector2 pos = (Vector2)w.transform.position - bottomLeft;
            map[(int)pos.x, (int)pos.y] = true;
        }

        // Generate NavMesh
        NavMeshGenerator.Offset = bottomLeft;
        Nodes = NavMeshGenerator.GenerateNavMesh(map);
        GameController.Nodes = Nodes;

        // Spawn enemies
        var SpawnPoints = Nodes.Cast <Node>().Where(n => n.IsWalkable).Select(n => n.pos + NavMeshGenerator.Offset);

        for (int i = 0; i < Enemies; i++)
        {
            int CurrentPoint = Random.Range(0, SpawnPoints.Count());
            var enemy        = Instantiate(BolsjeDreng, new Vector2(SpawnPoints.ElementAt(CurrentPoint).x, SpawnPoints.ElementAt(CurrentPoint).y), Quaternion.identity);
            enemy.GetComponent <BolsjeDreng>().Target = player;
        }
        GameController.AliveEnemies = Enemies;
    }