public Simulation(BufferPool bufferPool, SimulationAllocationSizes initialAllocationSizes, int solverIterationCount, int solverFallbackBatchThreshold, ITimestepper timestepper) { BufferPool = bufferPool; Shapes = new Shapes(bufferPool, initialAllocationSizes.ShapesPerType); BroadPhase = new BroadPhase(bufferPool, initialAllocationSizes.Bodies, initialAllocationSizes.Bodies + initialAllocationSizes.Statics); Bodies = new Bodies(bufferPool, Shapes, BroadPhase, initialAllocationSizes.Bodies, initialAllocationSizes.Islands, initialAllocationSizes.ConstraintCountPerBodyEstimate); Statics = new Statics(bufferPool, Shapes, Bodies, BroadPhase, initialAllocationSizes.Statics); Solver = new Solver(Bodies, BufferPool, solverIterationCount, solverFallbackBatchThreshold, initialCapacity: initialAllocationSizes.Constraints, initialIslandCapacity: initialAllocationSizes.Islands, minimumCapacityPerTypeBatch: initialAllocationSizes.ConstraintsPerTypeBatch); constraintRemover = new ConstraintRemover(BufferPool, Bodies, Solver); Sleeper = new IslandSleeper(Bodies, Solver, BroadPhase, constraintRemover, BufferPool); Awakener = new IslandAwakener(Bodies, Statics, Solver, BroadPhase, Sleeper, bufferPool); Statics.awakener = Awakener; Solver.awakener = Awakener; Bodies.Initialize(Solver, Awakener); SolverBatchCompressor = new BatchCompressor(Solver, Bodies); BodyLayoutOptimizer = new BodyLayoutOptimizer(Bodies, BroadPhase, Solver, bufferPool); ConstraintLayoutOptimizer = new ConstraintLayoutOptimizer(Bodies, Solver); Timestepper = timestepper; }
protected Simulation(BufferPool bufferPool, SimulationAllocationSizes initialAllocationSizes) { BufferPool = bufferPool; Shapes = new Shapes(bufferPool, initialAllocationSizes.ShapesPerType); BroadPhase = new BroadPhase(bufferPool, initialAllocationSizes.Bodies, initialAllocationSizes.Bodies + initialAllocationSizes.Statics); Bodies = new Bodies(bufferPool, Shapes, BroadPhase, initialAllocationSizes.Bodies, initialAllocationSizes.Islands, initialAllocationSizes.ConstraintCountPerBodyEstimate); Statics = new Statics(bufferPool, Shapes, Bodies, BroadPhase, initialAllocationSizes.Statics); Solver = new Solver(Bodies, BufferPool, 8, initialCapacity: initialAllocationSizes.Constraints, initialIslandCapacity: initialAllocationSizes.Islands, minimumCapacityPerTypeBatch: initialAllocationSizes.ConstraintsPerTypeBatch); constraintRemover = new ConstraintRemover(BufferPool, Bodies, Solver); Sleeper = new IslandSleeper(Bodies, Solver, BroadPhase, constraintRemover, BufferPool); Awakener = new IslandAwakener(Bodies, Statics, Solver, BroadPhase, Sleeper, bufferPool); Statics.awakener = Awakener; Solver.awakener = Awakener; Bodies.Initialize(Solver, Awakener); PoseIntegrator = new PoseIntegrator(Bodies, Shapes, BroadPhase); SolverBatchCompressor = new BatchCompressor(Solver, Bodies); BodyLayoutOptimizer = new BodyLayoutOptimizer(Bodies, BroadPhase, Solver, bufferPool); ConstraintLayoutOptimizer = new ConstraintLayoutOptimizer(Bodies, Solver); }
/// <summary> /// Initializes the bodies set. Used to complete bidirectional dependencies. /// </summary> /// <param name="solver">Solver responsible for the constraints connected to the collection's bodies.</param> /// <param name="awakener">Island awakener to use when bodies undergo transitions requiring that they exist in the active set.</param> public void Initialize(Solver solver, IslandAwakener awakener) { this.solver = solver; this.awakener = awakener; }