// 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; }
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(); } }
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(); }
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()); } }
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); } }