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