public ParticleCollisionSolver(ComputeShader compute, VelocityService v, PositionService p, LifeService l, BroadPhase b) { _kernel = compute.FindKernel(ShaderConst.KERNEL_SOLVE_PARTICLE_COLLISION); _compute = compute; _velocities = v; _positions = p; _lifes = l; _broadphase = b; }
void Start() { Positions = new PositionService(compute, capacity); Velocities = new VelocityService(compute, capacity); Lifes = new LifeService(compute, capacity); Constants = new ConstantService(constants); VelSimulation = new VelocitySimulation(compute, Velocities); PosSimulation = new PositionSimulation(compute, Velocities, Positions); Broadphase = new BroadPhase(compute, computeSort, Lifes, Positions); ParticleSolver = new ParticleCollisionSolver(compute, Velocities, Positions, Lifes, Broadphase); BoundsChecker = new BoundsChecker(compute, Lifes, Positions); Walls = BuildWalls(wallColliders); WallSolver = new WallCollisionSolver(compute, Velocities, Positions, Walls); var particles = new GameObject[capacity]; foreach (var p in particlefabs) p.transform.localScale = 2f * constants.radius * Vector3.one; for (var i = 0; i < capacity; i++) particles[i] = particlefabs[Random.Range(0, particlefabs.Length)]; Combiner = new MeshCombiner(containerfab); Combiner.Rebuild(particles); Combiner.SetParent(transform, false); UpdateConstantData(); }