public LogicController(SpaceConfig spaceConfig) { InitSingleton(this); CurrentConfig = spaceConfig; IPhysicsUpdater physicsUpdater; switch (spaceConfig) { case ParticleLifeConfig c: ParticleController = new ParticleLifeParticleController(spaceConfig); physicsUpdater = new ParticleLifePhysicsUpdater(c); break; case GravityConfig c: ParticleController = new GravityParticleController(spaceConfig); physicsUpdater = new GravityPhysicsUpdater(c); break; default: throw new System.Exception("Unknown config type: " + spaceConfig.GetType().Name); } SpaceController = new SpaceController(spaceConfig); PhysicsController = new PhysicsController(spaceConfig, physicsUpdater); TaskController = new TaskController(spaceConfig.BatchCount); }
public void UpdateLogic(Space space) { space.CurrentSpaceSnapshot = SpaceController.CreateSpaceSnapshot(space.Particles); var schedules = space.Particles.Select(x => PhysicsController.ScheduleParticleJob(x, space)).ToList(); // Generate schedules for each particle TaskController.RunSchedules(schedules); // Run those schedules foreach (var particle in space.Particles) { if (particle.ScheduledPosition.IsNaN()) { continue; } particle.Position = particle.ScheduledPosition; // Update particle positions particle.Velocity = particle.ScheduledVelocity; } }
public Space StartLogic() { return(SpaceController.CreateSpace()); }