/// <summary> /// Manages the switch to a new physics engine simulation. /// </summary> /// <param name="sim">Index of the simulation to switch to.</param> public void SwitchSimulation(int sim) { currentSimulationIndex = sim; //Clear out any old rendering stuff. ModelDrawer.Clear(); ConstraintDrawer.Clear(); //Tell the previous simulation it's done. if (currentSimulation != null) { currentSimulation.CleanUp(); } //Create the new demo. Type demoType = demoTypes[currentSimulationIndex - 1]; #if !WINDOWS currentSimulation = (Demo)demoType.GetConstructor(new[] { typeof(DemosGame) }).Invoke(new object[] { this }); #else currentSimulation = (Demo)Activator.CreateInstance(demoType, new object[] { this }); #endif #region DisplayObject creation foreach (Entity e in currentSimulation.Space.Entities) { if ((string)e.Tag != "noDisplayObject") { ModelDrawer.Add(e); } else //Remove the now unnecessary tag. { e.Tag = null; } } for (int i = 0; i < currentSimulation.Space.Solver.SolverUpdateables.Count; i++) { //Add the solver updateable and match up the activity setting. LineDisplayObjectBase objectAdded = ConstraintDrawer.Add(currentSimulation.Space.Solver.SolverUpdateables[i]); if (objectAdded != null) { objectAdded.IsDrawing = currentSimulation.Space.Solver.SolverUpdateables[i].IsActive; } } #endregion GC.Collect(); }
public void Unload() { ModelDrawer.Clear(); }