void DoTimeStep() { #if PROFILE start = Stopwatch.GetTimestamp(); #endif SpaceObjectBuffer.Update(); EntityStateWriteBuffer.Update(); DeactivationManager.Update(); ForceUpdater.Update(); DuringForcesUpdateables.Update(); BoundingBoxUpdater.Update(); BroadPhase.Update(); BeforeNarrowPhaseUpdateables.Update(); NarrowPhase.Update(); BeforeSolverUpdateables.Update(); Solver.Update(); BeforePositionUpdateUpdateables.Update(); PositionUpdater.Update(); BufferedStates.ReadBuffers.Update(); DeferredEventDispatcher.Update(); EndOfTimeStepUpdateables.Update(); #if PROFILE end = Stopwatch.GetTimestamp(); #endif }
///<summary> /// Constructs a new space for things to live in. ///</summary> ///<param name="parallelLooper">Used by the space to perform multithreaded updates. Pass null if multithreading is not required.</param> public Space(IParallelLooper parallelLooper) { timeStepSettings = new TimeStepSettings(); this.parallelLooper = parallelLooper; SpaceObjectBuffer = new SpaceObjectBuffer(this); EntityStateWriteBuffer = new EntityStateWriteBuffer(); DeactivationManager = new DeactivationManager(TimeStepSettings, ParallelLooper); ForceUpdater = new ForceUpdater(TimeStepSettings, ParallelLooper); BoundingBoxUpdater = new BoundingBoxUpdater(TimeStepSettings, ParallelLooper); BroadPhase = new DynamicHierarchy(ParallelLooper); NarrowPhase = new NarrowPhase(TimeStepSettings, BroadPhase.Overlaps, ParallelLooper); Solver = new Solver(TimeStepSettings, DeactivationManager, ParallelLooper); NarrowPhase.Solver = Solver; PositionUpdater = new ContinuousPositionUpdater(TimeStepSettings, ParallelLooper); BufferedStates = new BufferedStatesManager(ParallelLooper); DeferredEventDispatcher = new DeferredEventDispatcher(); DuringForcesUpdateables = new DuringForcesUpdateableManager(timeStepSettings, ParallelLooper); BeforeNarrowPhaseUpdateables = new BeforeNarrowPhaseUpdateableManager(timeStepSettings, ParallelLooper); BeforeSolverUpdateables = new BeforeSolverUpdateableManager(timeStepSettings, ParallelLooper); BeforePositionUpdateUpdateables = new BeforePositionUpdateUpdateableManager(timeStepSettings, ParallelLooper); EndOfTimeStepUpdateables = new EndOfTimeStepUpdateableManager(timeStepSettings, ParallelLooper); EndOfFrameUpdateables = new EndOfFrameUpdateableManager(timeStepSettings, ParallelLooper); }
void IPairHandlerParent.AddSolverUpdateable(SolverUpdateable addedItem) { manifoldConstraintGroup.Add(addedItem); //If this is the first child solver item to be added, we need to add ourselves to our parent too. if (manifoldConstraintGroup.SolverUpdateables.Count == 1) { if (Parent != null) { Parent.AddSolverUpdateable(manifoldConstraintGroup); } else if (NarrowPhase != null) { NarrowPhase.NotifyUpdateableAdded(manifoldConstraintGroup); } } }
void IPairHandlerParent.RemoveSolverUpdateable(SolverUpdateable removedItem) { manifoldConstraintGroup.Remove(removedItem); //If this is the last child solver item, we need to remove ourselves from our parent too. if (manifoldConstraintGroup.SolverUpdateables.Count == 0) { if (Parent != null) { Parent.RemoveSolverUpdateable(manifoldConstraintGroup); } else if (NarrowPhase != null) { NarrowPhase.NotifyUpdateableRemoved(manifoldConstraintGroup); } } }