/// <summary> /// Checks if the spy can spawn based on the training scenario /// </summary> /// <param name="inputTrainingScenario"></param> /// <returns></returns> private bool SpyCanSpawn(TrainingScenario inputTrainingScenario) { return(inputTrainingScenario == TrainingScenario.SpyEvade || inputTrainingScenario == TrainingScenario.GuardAlert || inputTrainingScenario == TrainingScenario.SpyPathFinding || inputTrainingScenario == TrainingScenario.GuardPatrolWithSpy); }
protected TrainingInstanceController GetDebugSetup(TrainingScenario trainingScenario) { var trainingInstance = Object.Instantiate(_trainingInstancePrefab, new Vector3(0, 0, 0), Quaternion.identity); var trainingInstanceController = trainingInstance.GetComponent <TrainingInstanceController>(); trainingInstanceController.waitForTestSetup = true; trainingInstanceController.trainingScenario = trainingScenario; trainingInstanceController.debugSetup = true; return(trainingInstanceController); }
protected TrainingInstanceController GetCurriculumSetup(TrainingScenario inputTrainingScenario, CurriculumEnum curriculum) { var trainingInstance = Object.Instantiate(_trainingInstancePrefab, new Vector3(0, 0, 0), Quaternion.identity); var trainingInstanceController = trainingInstance.GetComponent <TrainingInstanceController>(); trainingInstanceController.waitForTestSetup = true; trainingInstanceController.trainingScenario = inputTrainingScenario; trainingInstanceController.curriculum = curriculum; trainingInstanceController.debugSetup = false; trainingInstanceController.waitForTestSetup = false; return(trainingInstanceController); }
private void Init() { OpenKspInstallFolderCommand = new DelegateCommand( () => { var dlg = new FolderBrowserDialog(); System.Windows.Forms.DialogResult result = dlg.ShowDialog(); if (result.ToString() == "OK") { InstallPath = dlg.SelectedPath; } }); SaveCommand = new DelegateCommand <string>( (arg) => { switch (arg) { case "Save": Save.Save(); break; case "Scenario": Scenario.Save(); break; case "TrainingScenario": TrainingScenario.Save(); break; case "VabCraft": VabCraft.Save(); break; case "SphCraft": SphCraft.Save(); break; case "Part": Part.Save(); break; } }); }
/// <summary> /// Used to get the possible number of agents in each training scenario /// three possible combinations, both spy and guard, just spy, just guards /// </summary> /// <param name="inputTrainingScenario"></param> /// <param name="guardCount"></param> /// <returns></returns> private static int NumberOfAgentsIn(TrainingScenario inputTrainingScenario, int guardCount) { switch (inputTrainingScenario) { case TrainingScenario.GuardAlert: case TrainingScenario.GuardPatrolWithSpy: return(1 + guardCount); case TrainingScenario.SpyPathFinding: return(1); case TrainingScenario.GuardPatrol: return(guardCount); case TrainingScenario.SpyEvade: return(1 + guardCount * 2); default: return(guardCount + 1); } }
/// <summary> /// Adds guards to the list of guards property, will only spawn up to the number of exits - 1 /// </summary> /// <param name="numberOfGuards"></param> /// <param name="inputExitCount"></param> /// <param name="inputTrainingScenario"></param> public void SpawnGuardAgent(int numberOfGuards, int inputExitCount, TrainingScenario inputTrainingScenario) { if (TileDict[TileType.GuardTiles].Count < numberOfGuards) { throw new MapCreationException("Number of guards has exceeded the number of spawn places"); } var maxNumOfGuard = MaxNumberOfGuards(numberOfGuards, inputExitCount); var indexes = RandomHelper.GetUniqueRandomList(maxNumOfGuard, TileDict[TileType.GuardTiles].Count); for (var i = 0; i < maxNumOfGuard; i++) { if (inputTrainingScenario != TrainingScenario.SpyEvade) { if (TrainingScenarioWantsPatrol(inputTrainingScenario)) { var instantiatedPatrolPrefab = Instantiate(guardPatrolPrefab, TileDict[TileType.GuardTiles][indexes[i]].Position, Quaternion.identity, transform); Guards.Add(instantiatedPatrolPrefab); GuardObservations.Add(instantiatedPatrolPrefab, new float[6]); } if (TrainingScenarioWantsAlert(inputTrainingScenario)) { var freeTiles = TileDict[TileType.GuardTiles] .Concat(TileDict[TileType.FreeTiles]) .Where(tile => tile.OnPath) .ToList(); var agentIndex = RandomHelper.GetUniqueRandomList(maxNumOfGuard, freeTiles.Count); var instantiatedAlertPrefab = Instantiate(guardAlertPrefab, freeTiles[agentIndex[i]].Position, Quaternion.identity, transform); Guards.Add(instantiatedAlertPrefab); GuardObservations.Add(instantiatedAlertPrefab, new float[6]); } } else { { var instantiatedPatrolPrefab = Instantiate(guardPatrolPrefab, TileDict[TileType.GuardTiles][indexes[i]].Position, Quaternion.identity, transform); Guards.Add(instantiatedPatrolPrefab); GuardObservations.Add(instantiatedPatrolPrefab, new float[6]); GuardsSwap.Add(Instantiate( guardAlertPrefab, TileDict[TileType.GuardTiles][indexes[i]].Position - new Vector3(0, 100, 0), Quaternion.identity, transform ) ); } } } }
/// <summary> /// Checks if training scenario wants an alert /// </summary> /// <param name="inputTrainingScenario"></param> /// <returns></returns> private bool TrainingScenarioWantsAlert(TrainingScenario inputTrainingScenario) { return(inputTrainingScenario == TrainingScenario.GuardAlert); }
/// <summary> /// Checks if training scenario wants a patrol guard /// </summary> /// <param name="inputTrainingScenario"></param> /// <returns></returns> private bool TrainingScenarioWantsPatrol(TrainingScenario inputTrainingScenario) { return(inputTrainingScenario == TrainingScenario.GuardPatrolWithSpy || inputTrainingScenario == TrainingScenario.GuardPatrol || inputTrainingScenario == TrainingScenario.SpyEvade); }