public SveltoUECSEntitiesSubmissionGroup(SimpleEntitiesSubmissionScheduler submissionScheduler)
 {
     _submissionScheduler     = submissionScheduler;
     _engines                 = new FasterList <SubmissionEngine>();
     _afterSubmissionEngines  = new FasterList <IUpdateAfterSubmission>();
     _beforeSubmissionEngines = new FasterList <IUpdateBeforeSubmission>();
 }
Esempio n. 2
0
 public void Setup()
 {
     _simpleEntitiesSubmissionScheduler = new SimpleEntitiesSubmissionScheduler();
     _enginesRoot = new EnginesRoot(_simpleEntitiesSubmissionScheduler);
     _testEngine  = new TestEngine(@group);
     _enginesRoot.AddEngine(_testEngine);
 }
Esempio n. 3
0
        public CompositionRoot(IGraphics graphics)
        {
            _simpleSubmissionEntityViewScheduler = new SimpleEntitiesSubmissionScheduler();
            _graphics          = graphics;
            _schedulerReporter = new EngineSchedulerReporter();
            _scheduler         = new EngineScheduler(_schedulerReporter, _simpleSubmissionEntityViewScheduler);

            var enginesRoot   = new EnginesRoot(_simpleSubmissionEntityViewScheduler);
            var entityFactory = enginesRoot.GenerateEntityFactory();

            var debugPhysicsDrawEngine = new DebugPhysicsDrawEngine(_graphics);

            enginesRoot.AddEngine(debugPhysicsDrawEngine);
            scheduler.RegisterScheduledGraphicsEngine(debugPhysicsDrawEngine);

            var applyVelocityToRigidBodiesEngine                 = new ApplyVelocityToRigidBodiesEngine();
            var detectDynamicBoxVsBoxCollisionsEngine            = new DynamicBoxVsBoxCollisionsEngine();
            var detectDynamicVsKinematicBoxVsBoxCollisionsEngine = new DynamicVsKinematicBoxVsBoxCollisionsEngine();

            enginesRoot.AddEngine(applyVelocityToRigidBodiesEngine);
            enginesRoot.AddEngine(detectDynamicBoxVsBoxCollisionsEngine);
            enginesRoot.AddEngine(detectDynamicVsKinematicBoxVsBoxCollisionsEngine);

            ((IEngineScheduler)_scheduler).RegisterScheduledPhysicsEngine(applyVelocityToRigidBodiesEngine);
            ((IEngineScheduler)_scheduler).RegisterScheduledPhysicsEngine(detectDynamicBoxVsBoxCollisionsEngine);
            ((IEngineScheduler)_scheduler).RegisterScheduledPhysicsEngine(detectDynamicVsKinematicBoxVsBoxCollisionsEngine);

            //Entities can be created in the composition root, but it's a strategy ok only for simple scenarios.
            //Normally factory engines are used instead.
            AddEntities(entityFactory, _simpleSubmissionEntityViewScheduler);
        }
Esempio n. 4
0
        public SimpleContext()
        {
            //An EnginesRoot holds all the engines created. it needs a EntitySubmissionScheduler to know when to
            //add the EntityViews generated inside the EntityDB.
            var simpleSubmissionEntityViewScheduler = new SimpleEntitiesSubmissionScheduler();

            _enginesRoot = new EnginesRoot(simpleSubmissionEntityViewScheduler);

            //an EnginesRoot must never be injected inside other classes only IEntityFactory and IEntityFunctions
            //implementation can
            var entityFactory   = _enginesRoot.GenerateEntityFactory();
            var entityFunctions = _enginesRoot.GenerateEntityFunctions();

            //Add the Engine to manage the SimpleEntities
            var behaviourForEntityClassEngine = new BehaviourForEntityClassEngine(entityFunctions);

            _enginesRoot.AddEngine(behaviourForEntityClassEngine);

            //build Entity with ID 1 in group 0
            entityFactory.BuildEntity <SimpleEntityDescriptor>(new EGID(0, ExclusiveGroups.group0));

            //as we are using a basic scheduler, we need to schedule the entity submission ourselves
            simpleSubmissionEntityViewScheduler.SubmitEntities();

            //as we don't have any ticking system for this basic example, we tick explicitly
            behaviourForEntityClassEngine.Update();

            Console.Log("Done - click any button to quit");

            System.Console.ReadKey();

            Environment.Exit(0);
        }
Esempio n. 5
0
        public void OnContextInitialized <T>(T contextHolder)
        {
            // Create engine root.
            _submissionScheduler = new SimpleEntitiesSubmissionScheduler();
            _enginesRoot         = new EnginesRoot(_submissionScheduler);

            // Initialize UECS.
            _world = new World("SveltoWorld");
            var systems = DefaultWorldInitialization.GetAllSystems(WorldSystemFilterFlags.Default);

            DefaultWorldInitialization.AddSystemsToRootLevelSystemGroups(_world, systems);
            World.DefaultGameObjectInjectionWorld = _world;

            var syncGroup = new SyncSveltoToUECSGroup();

            _world.AddSystem(syncGroup);
            AddTickEngine(syncGroup);

            var uecsTickGroup = new PureUECSSystemsGroup(_world);

            AddTickEngine(uecsTickGroup);

            // Initialize SECS
            var entityFactory = _enginesRoot.GenerateEntityFactory();
        }
        void CreateUnityECSWorldForSvelto(SimpleEntitiesSubmissionScheduler scheduler, EnginesRoot enginesRoot)
        {
            world = new World("Svelto<>UECS world");

            var systems = DefaultWorldInitialization.GetAllSystems(WorldSystemFilterFlags.Default);

            DefaultWorldInitialization.AddSystemsToRootLevelSystemGroups(world, systems);
            World.DefaultGameObjectInjectionWorld = world;

            //This is the UECS group that takes care of all the UECS systems that creates entities
            //it also submits Svelto entities
            _sveltoUecsEntitiesSubmissionGroup = new SveltoUECSEntitiesSubmissionGroup(scheduler);
            //This is the group that handles the UECS sync systems that copy the svelto entities values to UECS entities
            enginesRoot.AddEngine(_sveltoUecsEntitiesSubmissionGroup);
            world.AddSystem(_sveltoUecsEntitiesSubmissionGroup);
            _syncSveltoToUecsGroup = new SyncSveltoToUECSGroup();
            enginesRoot.AddEngine(_syncSveltoToUecsGroup);
            _syncUecsToSveltoGroup = new SyncUECSToSveltoGroup();
            enginesRoot.AddEngine(_syncUecsToSveltoGroup);
            //This is the group that handles the UECS sync systems that copy the UECS entities values to svelto entities
            //enginesRoot.AddEngine(new SveltoUECSEntitiesSubmissionGroup(scheduler, world));
            enginesRoot.AddEngine(this);

            _enginesRoot = enginesRoot;
        }
Esempio n. 7
0
        public void Preallocation()
        {
            void BuildEntity(IEntityFactory entityFactory)
            {
                var init = entityFactory.BuildEntity <TestEntityDescriptor>(new EGID(0, @group));

                init.Init(new UnmanagedComponent()
                {
                    test = 2
                });
            }

            var generateEntityFactory = _enginesRoot.GenerateEntityFactory();

            generateEntityFactory.PreallocateEntitySpace <TestEntityDescriptor>(group, 100);
            generateEntityFactory.BuildEntity <TestEntityDescriptor>(new EGID(0, group));

            _simpleEntitiesSubmissionScheduler.SubmitEntities(); //warm up method

            _simpleEntitiesSubmissionScheduler = new SimpleEntitiesSubmissionScheduler();
            _enginesRoot = new EnginesRoot(_simpleEntitiesSubmissionScheduler);

            generateEntityFactory = _enginesRoot.GenerateEntityFactory();
            generateEntityFactory.PreallocateEntitySpace <TestEntityDescriptor>(group, 100);

            Assert.That(() => BuildEntity(generateEntityFactory), Is.Not.AllocatingGCMemory());
            Assert.That(_simpleEntitiesSubmissionScheduler.SubmitEntities, Is.Not.AllocatingGCMemory());

            _enginesRoot.Dispose();
        }
 public void Init()
 {
     _scheduler   = new SimpleEntitiesSubmissionScheduler();
     _enginesRoot = new EnginesRoot(_scheduler);
     _factory     = _enginesRoot.GenerateEntityFactory();
     _functions   = _enginesRoot.GenerateEntityFunctions();
     _entitiesDB  = _enginesRoot;
 }
 public void Init()
 {
     _scheduler = new SimpleEntitiesSubmissionScheduler();
     _root      = new EnginesRoot(_scheduler);
     _factory   = _root.GenerateEntityFactory();
     _engine    = new TestEngine();
     _root.AddEngine(_engine);
 }
        public void TestSerializingWithEntityViewStructsAndFactories()
        {
            var init = _entityFactory.BuildEntity <SerializableEntityDescriptorWithViews>(
                0, NamedGroup1.Group, new[] { new Implementor(1) });

            init.Init(new EntityStructSerialized()
            {
                value = 5
            });
            init.Init(new EntityStructSerialized2()
            {
                value = 4
            });
            init.Init(new EntityStructPartiallySerialized()
            {
                value1 = 3
            });

            _simpleSubmissionEntityViewScheduler.SubmitEntities();

            FasterList <byte> bytes      = new FasterList <byte>();
            var generateEntitySerializer = _enginesRoot.GenerateEntitySerializer();
            var simpleSerializationData  = new SimpleSerializationData(bytes);

            generateEntitySerializer.SerializeEntity(new EGID(0, NamedGroup1.Group), simpleSerializationData
                                                     , (int)SerializationType.Storage);

            SimpleEntitiesSubmissionScheduler simpleSubmissionEntityViewScheduler = new SimpleEntitiesSubmissionScheduler();
            var newEnginesRoot = new EnginesRoot(simpleSubmissionEntityViewScheduler);

            _neverDoThisIsJustForTheTest = new TestEngine();

            newEnginesRoot.AddEngine(_neverDoThisIsJustForTheTest);

            simpleSerializationData.Reset();
            generateEntitySerializer = newEnginesRoot.GenerateEntitySerializer();
            DeserializationFactory factory = new DeserializationFactory();

            generateEntitySerializer.RegisterSerializationFactory <SerializableEntityDescriptorWithViews>(factory);

            generateEntitySerializer.DeserializeNewEntity(new EGID(0, NamedGroup1.Group), simpleSerializationData
                                                          , (int)SerializationType.Storage);

            simpleSubmissionEntityViewScheduler.SubmitEntities();

            Assert.That(
                _neverDoThisIsJustForTheTest.entitiesDB.QueryEntity <EntityStructSerialized>(0, NamedGroup1.Group).value
                , Is.EqualTo(5));
            Assert.That(
                _neverDoThisIsJustForTheTest.entitiesDB.QueryEntity <EntityStructSerialized2>(0, NamedGroup1.Group).value
                , Is.EqualTo(4));
            Assert.That(_neverDoThisIsJustForTheTest
                        .entitiesDB.QueryEntity <EntityStructPartiallySerialized>(0, NamedGroup1.Group).value1
                        , Is.EqualTo(3));

            newEnginesRoot.Dispose();
        }
Esempio n. 11
0
 public EngineScheduler
     (IEngineSchedulerReporter reporter, SimpleEntitiesSubmissionScheduler submissionScheduler)
 {
     _reporter                = reporter;
     _submissionScheduler     = submissionScheduler;
     _scheduledPhysicsEngines = new List <IScheduledPhysicsEngine>();
     _scheduledGraphicsEngine = new List <IScheduledGraphicsEngine>();
     _stopwatch               = Stopwatch.StartNew();
 }
Esempio n. 12
0
        public void OnContextCreated <T>(T contextHolder)
        {
            QualitySettings.vSyncCount = -1;
            Cursor.lockState           = CursorLockMode.Locked;
            Cursor.visible             = false;

            _simpleSubmitScheduler = new SimpleEntitiesSubmissionScheduler();
            _enginesRoot           = new EnginesRoot(_simpleSubmitScheduler);
            _mainLoop = new MainLoop(_enginesToTick);
        }
        public void Init()
        {
            _scheduler         = new SimpleEntitiesSubmissionScheduler();
            _enginesRoot       = new EnginesRoot(_scheduler);
            _factory           = _enginesRoot.GenerateEntityFactory();
            _functions         = _enginesRoot.GenerateEntityFunctions();
            _neverdoThisEngine = new TestEngine();

            _enginesRoot.AddEngine(_neverdoThisEngine);
        }
Esempio n. 14
0
        public void Init()
        {
            _simpleSubmissionEntityViewScheduler = new SimpleEntitiesSubmissionScheduler();
            _enginesRoot = new EnginesRoot(_simpleSubmissionEntityViewScheduler);
            _testEngine  = new TestEngine();

            _enginesRoot.AddEngine(_testEngine);

            _entityFactory = _enginesRoot.GenerateEntityFactory();
            _enginesRoot.GenerateEntityFunctions();

            var id = _idStart;

            for (uint i = 0; i < _groupCount; i++)
            {
                for (int j = 0; j < _entityCountPerGroup; j++)
                {
                    _entityFactory.BuildEntity <EntityDescriptorWithComponentAndViewComponent>(
                        new EGID(id++, _group + i), new object[] { new TestFloatValue(1f), new TestIntValue(1) });

                    _entityFactory.BuildEntity <EntityDescriptorViewComponentWithString>(
                        new EGID(id++, _group + i), new object[] { new TestStringValue("test") });
                }
            }

            _simpleSubmissionEntityViewScheduler.SubmitEntities();

            foreach (var((buffer, count), _) in _testEngine.entitiesDB.QueryEntities <TestEntityViewComponent>())
            {
                for (int i = 0; i < count; i++)
                {
                    buffer[i].TestFloatValue.Value += buffer[i].ID.entityID;
                    buffer[i].TestIntValue.Value   += (int)buffer[i].ID.entityID;
                }
            }

            foreach (var((buffer, count), _) in _testEngine
                     .entitiesDB.QueryEntities <TestEntityComponent>())
            {
                for (int i = 0; i < count; i++)
                {
                    buffer[i].floatValue = 1 + buffer[i].ID.entityID;
                    buffer[i].intValue   = 1 + (int)buffer[i].ID.entityID;
                }
            }

            foreach (var((buffer, count), _) in _testEngine
                     .entitiesDB.QueryEntities <TestEntityViewComponentString>())
            {
                for (int i = 0; i < count; i++)
                {
                    buffer[i].TestStringValue.Value = (1 + buffer[i].ID.entityID).ToString();
                }
            }
        }
        public void Init()
        {
            _simpleSubmissionEntityViewScheduler = new SimpleEntitiesSubmissionScheduler();
            _enginesRoot = new EnginesRoot(_simpleSubmissionEntityViewScheduler);
            _neverDoThisIsJustForTheTest = new TestEngine();

            _enginesRoot.AddEngine(_neverDoThisIsJustForTheTest);

            _entityFactory   = _enginesRoot.GenerateEntityFactory();
            _entityFunctions = _enginesRoot.GenerateEntityFunctions();
        }
        public void Setup()
        {
            _defaultWorld                      = new DefaultWorld(EntityCount);
            _defaultEntitySet                  = _defaultWorld.GetEntities().With <DefaultComponent>().AsSet();
            _defaultRunner                     = new DefaultParallelRunner(Environment.ProcessorCount);
            _defaultSystem                     = new DefaultEcsSystem(_defaultWorld);
            _defaultMultiSystem                = new DefaultEcsSystem(_defaultWorld, _defaultRunner);
            _defaultEntityComponentSystem      = new DefaultEcsEntityComponentSystem(_defaultWorld);
            _defaultMultiEntityComponentSystem = new DefaultEcsEntityComponentSystem(_defaultWorld, _defaultRunner);
            _defaultComponentSystem            = new DefaultEcsComponentSystem(_defaultWorld);
            _defaultComponentMultiSystem       = new DefaultEcsComponentSystem(_defaultWorld, _defaultRunner);
            _defaultGeneratorSystem            = new DefaultEcsGeneratorSystem(_defaultWorld);
            _defaultGeneratorMultiSystem       = new DefaultEcsGeneratorSystem(_defaultWorld, _defaultRunner);

            _entitasWorld       = new Context <EntitasEntity>(1, () => new EntitasEntity());
            _entitasSystem      = new EntitasSystem(_entitasWorld);
            _entitasMultiSystem = new EntitasSystem(_entitasWorld, Environment.ProcessorCount);

            _monoWorld = new WorldBuilder().AddSystem(new MonoSystem()).Build();
            _time      = new GameTime();

            _leoWorld   = new LeoWorld();
            _leoSystem  = new LeoSystem();
            _leoSystems = new LeoSystems(_leoWorld).Add(_leoSystem);
            _leoSystems.ProcessInjects().Init();

            SimpleEntitiesSubmissionScheduler sveltoScheduler = new SimpleEntitiesSubmissionScheduler();

            _sveltoWorld  = new EnginesRoot(sveltoScheduler);
            _sveltoSystem = new SveltoSystem();
            _sveltoWorld.AddEngine(_sveltoSystem);
            IEntityFactory sveltoFactory = _sveltoWorld.GenerateEntityFactory();

            for (int i = 0; i < EntityCount; ++i)
            {
                DefaultEntity defaultEntity = _defaultWorld.CreateEntity();
                defaultEntity.Set <DefaultComponent>();

                EntitasEntity entitasEntity = _entitasWorld.CreateEntity();
                entitasEntity.AddComponent(0, new EntitasComponent());

                MonoEntity monoEntity = _monoWorld.CreateEntity();
                monoEntity.Attach(new MonoComponent());

                LeoEntity leoEntity = _leoWorld.NewEntity();
                leoEntity.Get <LeoComponent>();

                sveltoFactory.BuildEntity <SveltoEntity>((uint)i, _sveltoGroup);
            }

            sveltoScheduler.SubmitEntities();
        }
        public SveltoOnDOTSEntitiesSubmissionGroup(SimpleEntitiesSubmissionScheduler submissionScheduler,
                                                   EnginesRoot enginesRoot)
        {
            _submissionScheduler = submissionScheduler;
            _submissionEngines   = new FasterList <SveltoOnDOTSHandleCreationEngine>();
            _cachedList          = new List <DOTSEntityToSetup>();
            _sveltoOnDotsHandleLifeTimeEngines = new FasterList <ISveltoOnDOTSHandleLifeTimeEngine>();

            var defaultSveltoOnDotsHandleLifeTimeEngine = new SveltoOnDOTSHandleLifeTimeEngine <DOTSEntityComponent>();

            enginesRoot.AddEngine(defaultSveltoOnDotsHandleLifeTimeEngine);
            _sveltoOnDotsHandleLifeTimeEngines.Add(defaultSveltoOnDotsHandleLifeTimeEngine);
        }
Esempio n. 18
0
        public void SetUp()
        {
            _scheduler   = new SimpleEntitiesSubmissionScheduler();
            _enginesRoot = new EnginesRoot(_scheduler);
            _factory     = _enginesRoot.GenerateEntityFactory();
            _functions   = _enginesRoot.GenerateEntityFunctions();
            _entitiesDB  = ((IUnitTestingInterface)_enginesRoot).entitiesForTesting;

            // Create entities.
            _factory.BuildEntity <EntityDescriptorWithComponents>(EgidA0);
            _factory.BuildEntity <EntityDescriptorWithComponents>(EgidA1);
            _factory.BuildEntity <EntityDescriptorWithComponents>(EgidA2);
            _factory.BuildEntity <EntityDescriptorWithComponents>(EgidA3);
            _factory.BuildEntity <EntityDescriptorWithComponents>(EgidA4);

            _factory.BuildEntity <EntityDescriptorWithComponents>(EgidB0);
            _factory.BuildEntity <EntityDescriptorWithComponents>(EgidB1);
            _factory.BuildEntity <EntityDescriptorWithComponents>(EgidB2);
            _factory.BuildEntity <EntityDescriptorWithComponents>(EgidB3);
            _factory.BuildEntity <EntityDescriptorWithComponents>(EgidB4);

            _scheduler.SubmitEntities();
        }
 public SveltoUECSEntitiesSubmissionGroup(SimpleEntitiesSubmissionScheduler submissionScheduler, World UECSWorld)
 {
     _submissionScheduler = submissionScheduler;
     _ECBSystem           = UECSWorld.CreateSystem <SubmissionEntitiesCommandBufferSystem>();
     _engines             = new FasterList <SubmissionEngine>();
 }
Esempio n. 20
0
 public Context()
 {
     Scheduler     = new SimpleEntitiesSubmissionScheduler();
     EnginesRoot   = new EnginesRoot(Scheduler);
     EntityFactory = EnginesRoot.GenerateEntityFactory();
 }
Esempio n. 21
0
 public MainLoop(FasterList <IJobifiedEngine> enginesToTick, SimpleEntitiesSubmissionScheduler scheduler)
 {
     _enginesToTick = enginesToTick;
     _scheduler     = scheduler;
 }
        public bool Initialize(string defaultWorldName)
        {
            //            Physics.autoSimulation = false;
            QualitySettings.vSyncCount = -1;

            _simpleSubmitScheduler = new SimpleEntitiesSubmissionScheduler();
            _enginesRoot           = new EnginesRoot(_simpleSubmitScheduler);
            _enginesToTick         = new FasterList <IJobifiedEngine>();

            _world = new World("Custom world");

            var systems = DefaultWorldInitialization.GetAllSystems(WorldSystemFilterFlags.Default);

            DefaultWorldInitialization.AddSystemsToRootLevelSystemGroups(_world, systems);

            World.DefaultGameObjectInjectionWorld = _world;

            var copySveltoToUecsEnginesGroup = new SyncSveltoToUECSGroup();

            _world.AddSystem(copySveltoToUecsEnginesGroup);
            AddSveltoEngineToTick(copySveltoToUecsEnginesGroup);

            var tickUECSSystemsGroup = new PureUECSSystemsGroup(_world);

            AddSveltoEngineToTick(tickUECSSystemsGroup);

            ///Svelto will tick the UECS engines, We need control over everything
            //ScriptBehaviourUpdateOrder.UpdatePlayerLoop(_world);

            //add the engines we are going to use
            var generateEntityFactory = _enginesRoot.GenerateEntityFactory();

            var redfoodEntity =
                GameObjectConversionUtility.ConvertGameObjectHierarchy(Resources.Load("Sphere") as GameObject,
                                                                       new GameObjectConversionSettings()
            {
                DestinationWorld = _world
            });
            var bluefoodEntity =
                GameObjectConversionUtility.ConvertGameObjectHierarchy(Resources.Load("Sphereblue") as GameObject,
                                                                       new GameObjectConversionSettings()
            {
                DestinationWorld = _world
            });
            var redDoofusEntity =
                GameObjectConversionUtility.ConvertGameObjectHierarchy(Resources.Load("RedCapsule") as GameObject,
                                                                       new GameObjectConversionSettings()
            {
                DestinationWorld = _world
            });
            var blueDoofusEntity =
                GameObjectConversionUtility.ConvertGameObjectHierarchy(Resources.Load("BlueCapsule") as GameObject,
                                                                       new GameObjectConversionSettings()
            {
                DestinationWorld = _world
            });

            AddSveltoEngineToTick(new PlaceFoodOnClickEngine(redfoodEntity, bluefoodEntity, generateEntityFactory));
            AddSveltoEngineToTick(new SpawningDoofusEngine(redDoofusEntity, blueDoofusEntity, generateEntityFactory));
            var generateEntityFunctions = _enginesRoot.GenerateEntityFunctions();

            AddSveltoEngineToTick(new ConsumingFoodEngine(generateEntityFunctions));
            AddSveltoEngineToTick(new LookingForFoodDoofusesEngine(generateEntityFunctions));
            AddSveltoEngineToTick(new VelocityToPositionDoofusesEngine());

            AddSveltoCallbackEngine(new SpawnUnityEntityOnSveltoEntityEngine(_world));

            AddSveltoUECSEngine(new RenderingUECSDataSynchronizationEngine());

            StartTicking(_enginesToTick);

            return(true);
        }
        public void TestSerializingToByteArrayNewEnginesRoot()
        {
            var init = _entityFactory.BuildEntity <SerializableEntityDescriptor>(0, NamedGroup1.Group);

            init.Init(new EntityStructSerialized()
            {
                value = 5
            });
            init.Init(new EntityStructSerialized2()
            {
                value = 4
            });
            init.Init(new EntityStructPartiallySerialized()
            {
                value1 = 3
            });
            init = _entityFactory.BuildEntity <SerializableEntityDescriptor>(1, NamedGroup1.Group);
            init.Init(new EntityStructSerialized()
            {
                value = 4
            });
            init.Init(new EntityStructSerialized2()
            {
                value = 3
            });
            init.Init(new EntityStructPartiallySerialized()
            {
                value1 = 2
            });

            _simpleSubmissionEntityViewScheduler.SubmitEntities();

            var generateEntitySerializer = _enginesRoot.GenerateEntitySerializer();
            var simpleSerializationData  = new SimpleSerializationData(new FasterList <byte>());

            generateEntitySerializer.SerializeEntity(new EGID(0, NamedGroup1.Group), simpleSerializationData
                                                     , (int)SerializationType.Storage);
            generateEntitySerializer.SerializeEntity(new EGID(1, NamedGroup1.Group), simpleSerializationData
                                                     , (int)SerializationType.Storage);

            var serializerSubmissionScheduler = new SimpleEntitiesSubmissionScheduler();

            var newEnginesRoot = new EnginesRoot(serializerSubmissionScheduler);

            _neverDoThisIsJustForTheTest = new TestEngine();
            newEnginesRoot.AddEngine(_neverDoThisIsJustForTheTest);

            simpleSerializationData.Reset();
            generateEntitySerializer = newEnginesRoot.GenerateEntitySerializer();

            generateEntitySerializer.DeserializeNewEntity(new EGID(0, NamedGroup1.Group), simpleSerializationData
                                                          , (int)SerializationType.Storage);
            generateEntitySerializer.DeserializeNewEntity(new EGID(1, NamedGroup1.Group), simpleSerializationData
                                                          , (int)SerializationType.Storage);
            serializerSubmissionScheduler.SubmitEntities();

            Assert.That(
                _neverDoThisIsJustForTheTest.entitiesDB.QueryEntity <EntityStructSerialized>(0, NamedGroup1.Group).value
                , Is.EqualTo(5));
            Assert.That(
                _neverDoThisIsJustForTheTest.entitiesDB.QueryEntity <EntityStructSerialized2>(0, NamedGroup1.Group).value
                , Is.EqualTo(4));
            Assert.That(
                _neverDoThisIsJustForTheTest
                .entitiesDB.QueryEntity <EntityStructPartiallySerialized>(0, NamedGroup1.Group).value1
                , Is.EqualTo(3));

            Assert.That(
                _neverDoThisIsJustForTheTest.entitiesDB.QueryEntity <EntityStructSerialized>(1, NamedGroup1.Group).value
                , Is.EqualTo(4));
            Assert.That(
                _neverDoThisIsJustForTheTest.entitiesDB.QueryEntity <EntityStructSerialized2>(1, NamedGroup1.Group).value
                , Is.EqualTo(3));
            Assert.That(
                _neverDoThisIsJustForTheTest
                .entitiesDB.QueryEntity <EntityStructPartiallySerialized>(1, NamedGroup1.Group).value1
                , Is.EqualTo(2));

            newEnginesRoot.Dispose();
        }