private SceneNode CreateSceneFromInput(Scene scene, SceneNode node) { // ------------------------------------------------------------------------------------- // TODO: IMPORTANT, PLEASE IMPLEMENT BEFORE DEADLINE // ------------------------------------------------------------------------------------- // Time limit needs fetching from the API settings and pushing to the time controller. _timeLimit += (float)((scene.SceneLength) / 1000); TimeController timeController = Controller.GetSimulationComponent <TimeController>(); timeController.SetTimeLimit(_timeLimit); // ------------------------------------------------------------------------------------- node.AddAttribute("VIDEO_URL", scene.SceneFile); //TODO: hardcoded at the moment node.AddAttribute("GENERAL_SETTINGS_TEXT", scene.GeneralSettings.Text); node.AddAttribute("GENERAL_SETTINGS_SCENE_BRIGHTNESS", scene.GeneralSettings.SceneBrightness.ToString()); node.AddAttribute("GENERAL_SETTINGS_SOUND_VOLUME", scene.GeneralSettings.SoundVolume.ToString()); node.AddAttribute("GENERAL_SETTINGS_ALARM_VOLUME", scene.GeneralSettings.AlarmVolume.ToString()); if (scene.GeneralSettings.AlarmSoundPath != null) { node.AddAttribute("GENERAL_SETTINGS_ALARM_FILE", scene.GeneralSettings.AlarmSoundPath.ToString()); } if (scene.GeneralSettings.ActionElements != null) { ParticleAction particleAction = new ParticleAction(); foreach (var actionElement in scene.GeneralSettings.ActionElements) { particleAction.AddParticleAction(actionElement); } particleAction.SetTimeOfAction(0.0f); node.AddAction(particleAction); } foreach (SceneBuilderWpf.DataModels.Decision decision in scene.DecisionList) { DecisionSet decisionSet = new DecisionSet(); DecisionTimelineAction decisionAction = new DecisionTimelineAction(); decisionSet.Time = decision.DecisionTime / 1000; bool transitionSet = false; foreach (SceneBuilderWpf.DataModels.ScenceChoice choice in decision.Choice) { nextId++; DecisionResult result = choice.Score < 0 ? DecisionResult.Incorrect : DecisionResult.Correct; if (result == DecisionResult.Correct && !transitionSet && choice.Whereyougo != null) { TransitionTimelineAction transitionAction = new TransitionTimelineAction(nextId); node.AddAttribute("DURATION", ((decision.DecisionTime + 20) / 1000).ToString()); transitionAction.SetTimeOfAction((decision.DecisionTime + 20) / 1000); node.AddAction(transitionAction); transitionSet = true; } decisionSet.AddDecision(new Decision(result, choice.Decision, choice.Feedback)); if (choice.Whereyougo != null) { SceneNode nextNode = CreateSceneNode(nextId); nextNode.SetIdentifier(nextId); CreateSceneFromInput(choice.Whereyougo, nextNode); } } decisionAction.SetDecisionSet(decisionSet); node.AddAction(decisionAction); } return(node); }