예제 #1
0
    private void AfterUnload()
    {
        //TODO; this basically is the only stuff I have to change in this class

        //TODO; is this still allowed ?!?
        if (!CurrentExperiment.Started)
        {
            f_canvasRetest.SetActive(true);
            return;
        }

        CurrentExperiment.NextTry();

        if (CurrentExperiment.EndCounter == Experiment.TEST_AMOUNT + 1)
        {
            f_nextLevelNote.SetActive(true);
            f_nextLevelNote.GetComponent <RadioFeedback>().ShowAfterStage1();
            return;
        }


        if (CurrentExperiment.Finished)
        {
            f_nextLevelNote.SetActive(true);
            f_nextLevelNote.GetComponent <RadioFeedback>().ShowAfterStage2();
            return;
        }

        StartScene(false);
    }
예제 #2
0
    public void EndedScene(int frames, int characterHealth, int enemyHealthCombined, int restEnemies)
    {
        f_tryText.text = "";


        if (characterHealth > 0)
        {
            f_winLoseText.text = "You defeated all the enemies";
        }
        else
        {
            f_winLoseText.text = "You were killed";
        }


        CurrentExperiment.AddData(
            frames, characterHealth, enemyHealthCombined, restEnemies,
            Consts.Instance.Player.PlayerHittingSide.m_hitAmount, Consts.Instance.Player.PlayerHittingSide.m_hittedAmount,
            Consts.Instance.Player.PlayerHittingUp.m_hitAmount, Consts.Instance.Player.PlayerHittingUp.m_hittedAmount,
            Consts.Instance.Player.PlayerHittingDown.m_hitAmount, Consts.Instance.Player.PlayerHittingDown.m_hittedAmount,
            Consts.Instance.Player.m_playerMovement, Consts.Instance.Player.PlayerAir.m_jumpAmount, Consts.Instance.Player.PlayerGrounded.m_dashAmount
            );

        if (m_isQuitting)
        {
            return;
        }

        Scene currentScene = SceneManager.GetSceneByName(m_sceneName);

        if (currentScene != null)
        {
            AsyncOperation ao = SceneManager.UnloadSceneAsync(currentScene);
            ao.completed += (AsyncOperation a) => {
                if (m_isQuitting)
                {
                    return;
                }
                AfterUnload();
            };
            return;
        }
        else
        {
            AfterUnload();
        }
    }
예제 #3
0
        /// <summary>
        /// Assumes an Experiment is loaded, this initiates an Experiment run.
        /// This can be very long-running.
        /// </summary>
        /// <param name="explanation"></param>
        /// <returns></returns>
        public bool RunModelExperiment(out string explanation)
        {
            explanation = "";
            string marker = "Begin";

            if (CurrentProject == null)
            {
                explanation = $"Cannot run plan. No Project is currently loaded";
                return(false);
            }

            if (CurrentModel == null)
            {
                explanation = $"Cannot run plan. No Model is currently loaded";
                return(false);
            }

            // Check for Experiment
            if (CurrentExperiment == null)
            {
                explanation = $"Model={CurrentModel.Name} has no Experiment selected.";
                return(false);
            }

            try
            {
                // Run the experiment. Events will be thrown when replications start and end,
                // so you would have to handle those elsewhere.
                marker = "Starting Experiment (Experiment.Run)";
                CurrentExperiment.Run();

                marker = "End";
                return(true);
            }
            catch (Exception ex)
            {
                explanation = $"Project={CurrentProject.Name} Model={CurrentModel.Name} Marker={marker} Err={ex.Message} InnerEx={ex.InnerException}";
                return(false);
            }
        }
예제 #4
0
        /// <summary>
        /// Assumes an Experiment is loaded, this initiates an Experiment run.
        /// This can be very long-running.
        /// </summary>
        /// <param name="explanation"></param>
        /// <returns></returns>
        public bool RunModelExperiment(string resultFilepath, out string explanation)
        {
            explanation = "";
            string marker = "Begin";

            ExperimentResults experimentResults = new ExperimentResults();

            if (CurrentProject == null)
            {
                explanation = $"Cannot run plan. No Project is currently loaded";
                return(false);
            }

            if (CurrentModel == null)
            {
                explanation = $"Cannot run plan. No Model is currently loaded";
                return(false);
            }

            // Check for Experiment
            if (CurrentExperiment == null)
            {
                explanation = $"Model={CurrentModel.Name} has no Experiment selected.";
                return(false);
            }

            try
            {
                CurrentExperiment.ReplicationEnded += (s, e) =>
                {
                    int    repNumber = e.ReplicationNumber;
                    double runTime   = e.ActualRuntimeInSeconds;
                };

                CurrentExperiment.ScenarioEnded += (s, e) =>
                {
                    LogIt($"ScenarioEnded: Results:");

                    foreach (var result in e.Results)
                    {
                        // Log the results to get a feel for what is being returned.
                        LogIt($"ScenarioEnded: ObjType='{result.ObjectType}', ObjName='{result.ObjectName}', DS='{result.DataSource}', " +
                              $"Cat='{result.StatisticCategory}', DataItem='{result.DataItem}', Stat='{result.StatisticCategory}', " +
                              $"Avg='{result.Average:0.00}', Min='{result.Minimum:f0.00}', Max='{result.Maximum:f0.00}");

                        experimentResults.AddScenarioResults(e.Scenario, e.Results);
                    }
                };

                CurrentExperiment.RunCompleted += (s, e) =>
                {
                    LogIt($"RunCompleted:");
                };

                CurrentExperiment.RunProgressChanged += (s, e) =>
                {
                    LogIt($"ProgressChanged:");
                    string ss = e.ToString();
                };


                // Run the experiment. Events will be thrown when replications start and end,
                // so you would have to handle those elsewhere.
                marker = "Starting Experiment (Experiment.Run)";
                CurrentExperiment.Reset();

                CurrentExperiment.Run();

                if (string.IsNullOrEmpty(resultFilepath))
                {
                    LogIt($"Info: No result Filepath specified. Results not written.");
                }
                else
                {
                    string folder = Path.GetDirectoryName(resultFilepath);
                    if (Directory.Exists(folder))
                    {
                        StringBuilder sb = new StringBuilder();
                        // Build a tab-delimited file

                        if (!experimentResults.OutputCsv(resultFilepath, out explanation))
                        {
                            explanation = $"Cannot Write CSV results to={resultFilepath}";
                            return(false);
                        }
                    }
                }

                marker = "End";
                return(true);
            }
            catch (Exception ex)
            {
                explanation = $"Project={CurrentProject.Name} Model={CurrentModel.Name} Marker={marker} Err={ex.Message} InnerEx={ex.InnerException}";
                return(false);
            }
        }