예제 #1
0
    private void GenerateMap()
    {
        //setando custo
        int costForEnemies = globalMapSettings.totalEntitiesCost;

        //limpar mapa antigo se houver
        if (roomParent != null)
        {
            Destroy(roomParent);
        }
        roomParent = new GameObject("RoomRoot");
        roomParent.transform.position = Vector3.zero;
        MapRoom targetRoom = null;

        //colocando base
        if (currentRoomIndex < (float)(globalMapSettings.numberOfRooms) / 2.00f)
        {
            targetRoom = globalMapSettings.startRoomSet.GetRandomRoom();
        }
        else
        {
            targetRoom = globalMapSettings.endRoomSet.GetRandomRoom();
        }
        //se currentIndex = 2, usar sala quest[0], se quest.count = 10, ultima quest fica em quest[9], valor maximo pro curIndex de quest seria entao 11
        if (currentRoomIndex >= 2 && currentRoomIndex <= questRooms.Count + 1)
        {
            targetRoom = questRooms[currentRoomIndex - 2];
        }

        GameObject roomBase = Instantiate(targetRoom.roomBase, Vector3.zero, Quaternion.identity, roomParent.transform);

        //escolhendo e colocando decoracao
        MapDecoration decoration = Instantiate <MapDecoration>(targetRoom.GetRandomDecoration(), Vector3.zero, Quaternion.identity, roomParent.transform);

        decoration.ClearPointers();
        currentDeco = decoration;
        //configurando portas
        if (decoration.doors == null)
        {
            decoration.doors = new MapDoor[0];
        }
        for (int i = 0; i < decoration.doors.Length; i++)
        {
            decoration.doors[i].SetLocked(true);
            decoration.doors[i].SetupDoor(this, GetRandomReward());
        }

        //spawn de inimigos
        MapEnemySet targetSet = currentRoomIndex <= (float)globalMapSettings.numberOfRooms / 2 ?
                                globalMapSettings.startEnemySet : globalMapSettings.endEnemySet;

        if (decoration.pointers == null)
        {
            decoration.pointers = new MapPointer[0];
        }
        for (int i = 0; i < decoration.pointers.Length; i++)
        {
            MapPointer randomPointer = decoration.GetRandomAvailablePointer();
            //verifica todos inimigos possiveis para esse ponto e pega um aleatorio
            if (randomPointer == null)
            {
                break; //sair do for por falta de pontos
            }
            MapEntity targetEntity = targetSet.GetRandomEntity(globalMapSettings.mapDifficulty,
                                                               randomPointer.pointSize, costForEnemies);
            if (targetEntity != null)
            {
                costForEnemies -= targetEntity.entityCost;
                MapEntity spawnedEntity = Instantiate <MapEntity>(targetEntity,
                                                                  randomPointer.transform.position,
                                                                  Quaternion.identity, roomParent.transform);
                randomPointer.used = true;
            }
        }

        playerObject.transform.position = decoration.playerSpawn.position;
        UpdateRoomCounter();
        path.Scan();
    }
예제 #2
0
 private void Start() => mapDecorator = GetComponent <MapDecoration>();