Example #1
0
        /// <summary>
        /// initializes a new simulation using the level provided
        /// </summary>
        /// <param name="level"></param>
        public void LoadLevel(
            string simulationLevel,
            string rendererLevel
            )
        {
            if (simulationThread != null)
            {
                if (!paused)
                {
                    simulationThread.Join();
                }
            }

            if (simulationThread == null)
            {
                simulationThread = new SimulationThread();
            }

            // reset old simulation
            if (simulation != null)
            {
                RendererUpdateQueue q1 = simulation.Close();
                renderer.AddUpdateQueue(q1);
            }

            // init simulation
            simulation = new ProjectMagma.Simulation.Simulation();
            RendererUpdateQueue q = simulation.Initialize(ContentManager, simulationLevel, rendererLevel, globalClock.PausableMilliseconds);

            renderer.AddUpdateQueue(q);

#if !XBOX
            Debug.Assert(
                simulationThread == null || simulationThread.Thread == null ||
                simulationThread.Thread.ThreadState == System.Threading.ThreadState.WaitSleepJoin
                );
#endif

            simulationThread.Reinitialize(this.simulation, this.renderer);

            // set camera
            //currentCamera = simulation.EntityManager["camera1"];

            if (!paused)
            {
                simulationThread.Start();
            }
        }