/// <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);
 }
Example #2
0
        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);
        }
Example #3
0
        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);
        }
Example #4
0
        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);
 }