Ejemplo n.º 1
0
    // Use this for initialization
    void Start()
    {
        currentReplayStep = new ReplayReader.ReplayStep();

        alreadyGenerateStatistic = false;
        matchResults             = new List <uint>();

        grid       = gameObject.GetComponent <Grid>();
        scenarioId = grid.scenarioId;
        academy    = FindObjectOfType(typeof(BombermanAcademy)) as BombermanAcademy;

        playerManager = ServiceLocator.getManager(scenarioId).GetPlayerManager();
        bombManager   = ServiceLocator.getManager(scenarioId).GetBombManager();
        blocksManager = ServiceLocator.getManager(scenarioId).GetBlocksManager();

        playerManager.initInitialPositions(grid);

        ServiceLocator.getManager(scenarioId).GetLogManager().episodePrint(playerManager.getEpisodeCount());

        playerManager.setRandomizeIterationOfAgents(randomizeIterationOfAgents);

        //Vector3 monitorPosition = transform.position + new Vector3(-3, 4, 1); // scene sem imitação
        Vector3 monitorPosition = transform.position + new Vector3(-6.72f, 4, -4.51f);

        myMonitor = Instantiate(monitorPrefab, monitorPosition, Quaternion.identity, transform.parent);
        Monitor.Log("Last Result:", "draw", myMonitor.transform);
        Monitor.Log("Iteration:", "0 / " + maxIterationString, myMonitor.transform);
        Monitor.Log("Episode:", "1", myMonitor.transform);
        Monitor.Log("Scenario:", transform.parent.gameObject.name, myMonitor.transform);

        iterationWhereWasCreatedBombs = 0;
        numberOfBombsByCreation       = 1;

        // replay
        if (saveReplay)
        {
            replayWriter = new ReplayWriter(scenarioId);
        }

        if (followReplayFile)
        {
            replayReader = new ReplayReader(replayFileName);
            ReplayReader.ReplayStep rStep = replayReader.readStep(ReplayCommandLine.RCL_Episode);
            if (rStep.command == ReplayCommandLine.RCL_Episode)
            {
                currentReplayStep.epId = rStep.epId;
            }
            else
            {
                Debug.Log("Nao e pra entrar aqui. Leitura de episódio errada");
            }
        }

        //Debug.Log("Criando MapController");
        createAgents();
        initBlocks();

        wasInitialized = true;
        reseting       = false;
    }
Ejemplo n.º 2
0
    private void myUpdate()
    {
        if (playerManager.updateAgents())
        {
            Monitor.Log("Iteration:", playerManager.getIterationCount().ToString() + " / " + maxIterationString, myMonitor.transform);
            bombManager.timeIterationUpdate();
            ServiceLocator.getManager(scenarioId).GetLogManager().globalStepPrint(playerManager.getIterationCount());

            bombManager.checkExplosions(grid);

            blocksManager.checkBlocksAndDestroy();

            if (followReplayFile)
            {
                ReplayReader.ReplayStep replayStep = replayReader.readStep(ReplayCommandLine.RCL_Actions);
                if (replayStep.command == ReplayCommandLine.RCL_Actions)
                {
                    currentReplayStep.agentActionMap = replayStep.agentActionMap;
                }

                /*else
                 *  Debug.Log("Nao eh pra entrar aqui. Acoes");*/

                replayStep = replayReader.readStep(ReplayCommandLine.RCL_BombPositions);
                if (replayStep.command == ReplayCommandLine.RCL_BombPositions)
                {
                    currentReplayStep.bombList       = replayStep.bombList;
                    currentReplayStep.bombIteration  = replayStep.bombIteration;
                    currentReplayStep.hasCreatedBomb = replayStep.hasCreatedBomb;
                }

                /*else
                 *  Debug.Log("Nao eh pra entrar aqui. Bombas");*/
            }

            //como request decision é assincrono, temos que testar se ultima ação do agente está vazia.
            if (saveReplayActionsStep())
            {
                verifyAndCreateBombs();
            }

            // usado no treinamento do BC. Se agente principal morre, reseta a fase

            /*if (onlyPlayerOneTrainning)
             *  playerManager.resetLevelIfPlayerOneDie();*/

            playerManager.setIsUpdating(false);
        }
        else
        {
            //Debug.Log("Resetando cenas");
            resetStage();
        }
    }
Ejemplo n.º 3
0
    private void createAgents()
    {
        // sorteando para ver quantos agentes serão criados para o cenário
        int numberOfAgents = maxNumberOfAgentIfNoRandom;
        Dictionary <string, Vector2Int> agentInitPositionMap = new Dictionary <string, Vector2Int>();

        if (!followReplayFile)
        {
            if (randomizeNumberOfAgents)
            {
                numberOfAgents = UnityEngine.Random.Range(2, 5);
            }
        }
        else
        {
            ReplayReader.ReplayStep replayStep = replayReader.readStep(ReplayCommandLine.RCL_NumberOfAgents);
            if (replayStep.command == ReplayCommandLine.RCL_NumberOfAgents)
            {
                numberOfAgents = replayStep.numberOfAgents;
            }
            else
            {
                Debug.Log("Entrei erradamente aqui. Na hora de recuperar número de jogadores.");
            }

            replayStep = replayReader.readStep(ReplayCommandLine.RCL_InitialPositions);
            if (replayStep.command == ReplayCommandLine.RCL_InitialPositions)
            {
                agentInitPositionMap = replayStep.agentInitPositionMap;
            }
            else
            {
                Debug.Log("Entrei erradamente aqui. Na hora de recuperar posições iniciais.");
            }
        }

        if (saveReplay)
        {
            replayWriter.printEpisode(playerManager.getEpisodeCount());
            replayWriter.printNumberOfAgents(numberOfAgents);
        }

        for (int i = 0; i < numberOfAgents; ++i)
        {
            if (!playerManager.containsPlayer(i + 1))
            {
                createAgent(playerPrefabs[i], i + 1, agentInitPositionMap);
            }
        }

        playerManager.createDistanceStructuresForReward();

        saveReplayInitPositions();
    }
Ejemplo n.º 4
0
    private void initBlocks()
    {
        if (followReplayFile)
        {
            ReplayReader.ReplayStep replayStep = replayReader.readStep(ReplayCommandLine.RCL_Blocks);
            if (replayStep.command == ReplayCommandLine.RCL_Blocks)
            {
                currentReplayStep.blockMap = replayStep.blockMap;

                blocksManager.loadReplaySetup(currentReplayStep.blockMap);
            }
        }

        if (saveReplay)
        {
            replayWriter.printDestructibleBlocks(blocksManager.generateBlocksStatusList());
        }
    }
Ejemplo n.º 5
0
    private void resetStage()
    {
        if (!reseting)
        {
            reseting = true;

            //Debug.Log("Cenário resetado");
            playerManager.clear();
            bombManager.clearBombs();

            if (followReplayFile)
            {
                ReplayReader.ReplayStep rStep = replayReader.nextReplayStepEpisodeOrReopen();
                if (rStep.command == ReplayCommandLine.RCL_Episode)
                {
                    currentReplayStep.epId = rStep.epId;
                }
            }

            createAgents();
            blocksManager.resetBlocks();
            initBlocks();

            // gerando informações para estatística
            if (generateStatistic == true)
            {
                //+1 porque a verificação de ultimo homem vivo acontece uma iteração após o fim do ep
                if (playerManager.getEpisodeCount() <= matchMaxQuant + 1)
                {
                    matchResults.Add(playerManager.lastManAgentResult);
                }
                else
                {
                    if (!alreadyGenerateStatistic)
                    {
                        //gravar em arquivo
                        Debug.Log("Estatisticas do cenario: " + transform.parent.gameObject.name + " foram geradas");
                        createStatisticFiles();
                        MapController.countCreatedStatistics++;

                        alreadyGenerateStatistic = true;

                        if (MapController.countCreatedStatistics == 10) // 10 cenários
                        {
                            #if UNITY_EDITOR
                            UnityEditor.EditorApplication.isPlaying = false;
                            #else
                            Application.Quit();
                            #endif
                        }
                    }
                }
            }

            ServiceLocator.getManager(scenarioId).GetLogManager().episodePrint(playerManager.getEpisodeCount());
            Monitor.Log("Episode:", playerManager.getEpisodeCount().ToString(), myMonitor.transform);
            Monitor.Log("Last Result:", playerManager.lastManAgent, myMonitor.transform);
            iterationWhereWasCreatedBombs = 0;
            numberOfBombsByCreation       = 1;

            if (followReplayFile)
            {
                if (stopToSendSpecialistExperienceInEpsode < playerManager.getEpisodeCount() /* && !stoToSendAlreadyCalled*/)
                {
                    playerManager.stopToSendExperienceToAllPlayers();
                    //stoToSendAlreadyCalled = true;
                }
            }

            reseting = false;
            playerManager.setIsUpdating(false);
        }
    }