public void GlobalSetup()
        {
            var componentTypeAssigner = new DefaultComponentTypeAssigner();
            var allComponents         = componentTypeAssigner.GenerateComponentLookups();
            var componentLookup       = new ComponentTypeLookup(allComponents);

            _availableComponents = allComponents.Keys
                                   .Select(x => Activator.CreateInstance(x) as IComponent)
                                   .ToArray();

            var componentDatabase   = new ComponentDatabase(componentLookup);
            var componentRepository = new ComponentRepository(componentLookup, componentDatabase);

            var entityFactory          = new DefaultEntityFactory(new IdPool(), componentRepository);
            var poolFactory            = new DefaultEntityCollectionFactory(entityFactory);
            var observableGroupFactory = new DefaultObservableObservableGroupFactory();

            _entityCollectionManager = new EntityCollectionManager(poolFactory, observableGroupFactory, componentLookup);

            _availableComponents = _groupFactory.GetComponentTypes
                                   .Select(x => Activator.CreateInstance(x) as IComponent)
                                   .ToArray();

            _testGroups = _groupFactory.CreateTestGroups().ToArray();

            foreach (var group in _testGroups)
            {
                _entityCollectionManager.GetObservableGroup(group);
            }

            _defaultEntityCollection = _entityCollectionManager.GetCollection();
        }
示例#2
0
        public void ThrowsOnInsertingWorkOlderThanLatest()
        {
            var factory = new DefaultEntityFactory(
                new FakeEntities(),
                new FakeFormula()
                );

            var moment1      = DateTimeOffset.UtcNow;
            var momentBefore = moment1 - TimeSpan.FromHours(1);

            factory.InsertedWork(
                "organization",
                "repository",
                "start",
                "end",
                null,
                "author",
                0u,
                null,
                moment1);

            Assert.Throws <InvalidOperationException>(() =>
            {
                factory.InsertedWork(
                    "organization",
                    "repository",
                    "another start",
                    "another end",
                    null,
                    "another author",
                    0u,
                    null,
                    momentBefore);
            });
        }
示例#3
0
        private IEntityCollectionManager CreateCollectionManager()
        {
            var messageBroker        = new EventSystem(new MessageBroker());
            var entityFactory        = new DefaultEntityFactory(messageBroker);
            var collectionFactory    = new DefaultEntityCollectionFactory(entityFactory, messageBroker);
            var groupAccessorFactory = new DefaultObservableObservableGroupFactory(messageBroker);

            return(new EntityCollectionManager(messageBroker, collectionFactory, groupAccessorFactory));
        }
示例#4
0
        private SystemExecutor CreateExecutor()
        {
            var messageBroker         = new EventSystem(new MessageBroker());
            var entityFactory         = new DefaultEntityFactory(messageBroker);
            var poolFactory           = new DefaultPoolFactory(entityFactory, messageBroker);
            var groupAccessorFactory  = new DefaultGroupAccessorFactory(messageBroker);
            var poolManager           = new PoolManager(messageBroker, poolFactory, groupAccessorFactory);
            var reactsToEntityHandler = new ReactToEntitySystemHandler(poolManager);
            var reactsToGroupHandler  = new ReactToGroupSystemHandler(poolManager);
            var reactsToDataHandler   = new ReactToDataSystemHandler(poolManager);
            var manualSystemHandler   = new ManualSystemHandler(poolManager);
            var setupHandler          = new SetupSystemHandler(poolManager);

            return(new SystemExecutor(poolManager, messageBroker, reactsToEntityHandler,
                                      reactsToGroupHandler, setupHandler, reactsToDataHandler, manualSystemHandler));
        }
示例#5
0
        private IEntityCollectionManager CreateCollectionManager()
        {
            var componentLookups = new Dictionary <Type, int>
            {
                { typeof(TestComponentOne), 0 },
                { typeof(TestComponentTwo), 1 },
                { typeof(TestComponentThree), 2 }
            };
            var componentLookupType    = new ComponentTypeLookup(componentLookups);
            var componentDatabase      = new ComponentDatabase(componentLookupType);
            var componentRepository    = new ComponentRepository(componentLookupType, componentDatabase);
            var entityFactory          = new DefaultEntityFactory(new IdPool(), componentRepository);
            var collectionFactory      = new DefaultEntityCollectionFactory(entityFactory);
            var observableGroupFactory = new DefaultObservableObservableGroupFactory();

            return(new EntityCollectionManager(collectionFactory, observableGroupFactory, componentLookupType));
        }
示例#6
0
        protected EcsRxApplication()
        {
            // For sending events around
            EventSystem = new EventSystem(new MessageBroker());

            // For mapping component types to underlying indexes
            var componentTypeAssigner = new DefaultComponentTypeAssigner();
            var allComponents         = componentTypeAssigner.GenerateComponentLookups();

            var componentLookup = new ComponentTypeLookup(allComponents);
            // For interacting with the component databases
            var componentDatabase   = new ComponentDatabase(componentLookup);
            var componentRepository = new ComponentRepository(componentLookup, componentDatabase);

            // For creating entities, collections, observable groups and managing Ids
            var entityFactory           = new DefaultEntityFactory(new IdPool(), componentRepository);
            var entityCollectionFactory = new DefaultEntityCollectionFactory(entityFactory);
            var observableGroupFactory  = new DefaultObservableObservableGroupFactory();

            EntityCollectionManager = new EntityCollectionManager(entityCollectionFactory, observableGroupFactory, componentLookup);

            // All system handlers for the system types you want to support
            var reactsToEntityHandler = new ReactToEntitySystemHandler(EntityCollectionManager);
            var reactsToGroupHandler  = new ReactToGroupSystemHandler(EntityCollectionManager);
            var reactsToDataHandler   = new ReactToDataSystemHandler(EntityCollectionManager);
            var manualSystemHandler   = new ManualSystemHandler(EntityCollectionManager);
            var setupHandler          = new SetupSystemHandler(EntityCollectionManager);
            var teardownHandler       = new TeardownSystemHandler(EntityCollectionManager);

            var conventionalSystems = new List <IConventionalSystemHandler>
            {
                setupHandler,
                teardownHandler,
                reactsToEntityHandler,
                reactsToGroupHandler,
                reactsToDataHandler,
                manualSystemHandler
            };

            // The main executor which manages how systems are given information
            SystemExecutor = new SystemExecutor(conventionalSystems);
        }
示例#7
0
        private (IEntityCollectionManager, IComponentDatabase, IComponentTypeLookup) CreateFramework()
        {
            var componentLookups = new Dictionary <Type, int>
            {
                { typeof(TestComponentOne), 0 },
                { typeof(TestComponentTwo), 1 },
                { typeof(TestComponentThree), 2 },
                { typeof(ViewComponent), 3 },
                { typeof(TestStructComponentOne), 4 },
                { typeof(TestStructComponentTwo), 5 }
            };
            var componentLookupType    = new ComponentTypeLookup(componentLookups);
            var componentDatabase      = new ComponentDatabase(componentLookupType);
            var entityFactory          = new DefaultEntityFactory(new IdPool(), componentDatabase, componentLookupType);
            var collectionFactory      = new DefaultEntityCollectionFactory(entityFactory);
            var observableGroupFactory = new DefaultObservableObservableGroupFactory();
            var collectionManager      = new EntityCollectionManager(collectionFactory, observableGroupFactory, componentLookupType);

            return(collectionManager, componentDatabase, componentLookupType);
        }
        public void GlobalSetup()
        {
            _eventSystem = new EventSystem(new MessageBroker());

            var entityFactory        = new DefaultEntityFactory(_eventSystem);
            var poolFactory          = new DefaultEntityCollectionFactory(entityFactory, _eventSystem);
            var groupAccessorFactory = new DefaultObservableObservableGroupFactory(_eventSystem);

            _entityCollectionManager = new EntityCollectionManager(_eventSystem, poolFactory, groupAccessorFactory);

            _availableComponents = _groupFactory.GetComponentTypes
                                   .Select(x => Activator.CreateInstance(x) as IComponent)
                                   .ToArray();

            _testGroups = _groupFactory.CreateTestGroups().ToArray();

            foreach (var group in _testGroups)
            {
                _entityCollectionManager.CreateObservableGroup(group);
            }

            _defaultEntityCollection = _entityCollectionManager.GetCollection();
        }
        protected ReactorApplication()
        {
            var messageBroker = new MessageBroker();

            EventSystem    = new EventSystem(messageBroker);
            SystemExecutor = new SystemExecutor(EventSystem);

            var entityFactory        = new DefaultEntityFactory();
            var entityIndexPool      = new EntityIndexPool();
            var poolFactory          = new DefaultPoolFactory(entityFactory, EventSystem, entityIndexPool, SystemExecutor);
            var groupAccessorFactory = new DefaultGroupAccessorFactory(EventSystem);

            PoolManager = new PoolManager(EventSystem, poolFactory, groupAccessorFactory);

            var entitySytemHandler    = new EntityReactionSystemHandler(PoolManager);
            var groupSystemHandler    = new GroupReactionSystemHandler(PoolManager);
            var setupSystemHandler    = new SetupSystemHandler(PoolManager);
            var interactSystemHandler = new InteractReactionSystemHandler(PoolManager);
            var manualSystemHandler   = new ManualSystemHandler(PoolManager);
            var systemHandlerManager  = new SystemHandlerManager(entitySytemHandler, groupSystemHandler, setupSystemHandler, interactSystemHandler, manualSystemHandler);

            CoreManager = new CoreManager(PoolManager, systemHandlerManager, SystemExecutor);
        }