예제 #1
0
        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);
        }