Пример #1
0
        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);
        }
Пример #2
0
        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;
            }
        }