示例#1
0
        //protected override void StartSystems()
        //{
        //    this.BindAllSystemsWithinApplicationScope();
        //    this.StartAllBoundSystems();
        //}

        protected override void ApplicationStarted()
        {
            defaultCollection = EntityCollectionManager.GetCollection();

            var levelBlueprint  = new LevelBlueprint();
            var levelEntity     = defaultCollection.CreateEntity(levelBlueprint);
            var player          = defaultCollection.CreateEntity(new PlayerBlueprint(_gameConfiguration.StartingFoodPoints));
            var playerView      = player.GetComponent <ViewComponent>();
            var playerComponent = player.GetComponent <PlayerComponent>();
            var levelComponent  = levelEntity.GetComponent <LevelComponent>();

            levelComponent.Level.DistinctUntilChanged()
            .Subscribe(x =>
            {
                var gameObject = playerView.View as GameObject;
                gameObject.transform.position = Vector3.zero;
                SetupLevel(levelComponent);
            });

            EventSystem.Receive <PlayerKilledEvent>()
            .Delay(TimeSpan.FromSeconds(_gameConfiguration.IntroLength))
            .Subscribe(x =>
            {
                levelBlueprint.UpdateLevel(levelComponent, 1);
                playerComponent.Food.Value = _gameConfiguration.StartingFoodPoints;
                SetupLevel(levelComponent);
            });
        }
示例#2
0
        protected override void ApplicationStarted()
        {
            _availableComponents = _groupFactory.GetComponentTypes
                                   .Select(x => Activator.CreateInstance(x) as IComponent)
                                   .ToArray();

            _availableComponentTypeIds = Enumerable.Range(0, _availableComponents.Length - 1).ToArray();

            var groups           = _groupFactory.CreateTestGroups(10).ToArray();
            var observableGroups = new List <IObservableGroup>();

            foreach (var group in groups)
            {
                var newGroup = EntityCollectionManager.GetObservableGroup(group);
                observableGroups.Add(newGroup);
            }

            var firstRun  = ProcessEntities(ProcessCount);
            var secondRun = ProcessEntities(ProcessCount);
            var thirdRun  = ProcessEntities(ProcessCount);

            Console.WriteLine($"Processing with {_availableComponents.Length} components and {observableGroups.Count} Observable groups");
            Console.WriteLine($"Finished In: {(firstRun + secondRun + thirdRun).TotalSeconds}s");
            Console.WriteLine($"First Took: {firstRun.TotalSeconds}s");
            Console.WriteLine($"Second Took: {secondRun.TotalSeconds}s");
            Console.WriteLine($"Third Took: {thirdRun.TotalSeconds}s");
        }
示例#3
0
        protected virtual void RegisterModules()
        {
            //   DependencyContainer.LoadModule<FrameworkModule>();
            var mess = new EcsRx.Reactive.MessageBroker();

            // DependencyContainer.Resolve<ISystemExecutor>();
            EventSystem = new EventSystem(mess);// DependencyContainer.Resolve<IEventSystem>();

            var factory  = new Entities.DefaultEntityFactory(EventSystem);
            var factory2 = new DefaultEntityCollectionFactory(factory, EventSystem);
            var ob       = new Groups.Observable.DefaultObservableObservableGroupFactory(EventSystem);

            EntityCollectionManager = new EntityCollectionManager(EventSystem, factory2, ob);
            var handler = new List <IConventionalSystemHandler>();

            handler.Add(new ReactToEntitySystemHandler(EntityCollectionManager));
            handler.Add(new ReactToGroupSystemHandler(EntityCollectionManager));
            handler.Add(new ReactToDataSystemHandler(EntityCollectionManager));
            handler.Add(new ManualSystemHandler(EntityCollectionManager));
            handler.Add(new SetupSystemHandler(EntityCollectionManager));
            handler.Add(new TeardownSystemHandler(EntityCollectionManager));



            //  var def = new EntityCollection();
            // DependencyContainer.Resolve<IEntityCollectionManager>();
        }
示例#4
0
        protected override void ApplicationStarted()
        {
            var defaultPool = EntityCollectionManager.GetCollection();

            defaultPool.CreateEntity(new PlayerBlueprint("Player One"));
            defaultPool.CreateEntity(new PlayerBlueprint("Player Two", 150.0f));
        }
示例#5
0
        protected override void ApplicationStarted()
        {
            var defaultPool = EntityCollectionManager.GetCollection();
            var viewEntity  = defaultPool.CreateEntity();

            viewEntity.AddComponents(new CustomViewComponent(), new PlayerControlledComponent(), new CameraFollowsComponent());
        }
示例#6
0
        protected override void ApplicationStarted()
        {
            var defaultPool = EntityCollectionManager.GetCollection();
            var entity      = defaultPool.CreateEntity();

            entity.AddComponent <SayHelloWorldComponent>();
        }
        protected override void ApplicationStarted()
        {
            _availableComponentTypeIds = Enumerable.Range(0, 20).ToArray();

            var componentNamespace = typeof(Component1).Namespace;

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

            var groups = _groupFactory.CreateTestGroups().ToArray();

            foreach (var group in groups)
            {
                EntityCollectionManager.GetObservableGroup(group);
            }

            var firstRun  = ProcessEntities(10000);
            var secondRun = ProcessEntities(10000);
            var thirdRun  = ProcessEntities(10000);

            Console.WriteLine($"Finished In: {(firstRun + secondRun + thirdRun).TotalSeconds}s");
            Console.WriteLine($"First Took: {firstRun.TotalSeconds}s");
            Console.WriteLine($"Second Took: {secondRun.TotalSeconds}s");
            Console.WriteLine($"Third Took: {thirdRun.TotalSeconds}s");
        }
示例#8
0
        protected override void ApplicationStarted()
        {
            _componentTypeLookup          = Container.Resolve <IComponentTypeLookup>();
            _componentDatabase            = Container.Resolve <IComponentDatabase>();
            _batchBuilderFactory          = Container.Resolve <IBatchBuilderFactory>();
            _referenceBatchBuilderFactory = Container.Resolve <IReferenceBatchBuilderFactory>();
            _collection = EntityCollectionManager.GetCollection();

            ClassComponent1TypeId  = _componentTypeLookup.GetComponentType(typeof(ClassComponent));
            ClassComponent2TypeId  = _componentTypeLookup.GetComponentType(typeof(ClassComponent2));
            StructComponent1TypeId = _componentTypeLookup.GetComponentType(typeof(StructComponent));
            StructComponent2TypeId = _componentTypeLookup.GetComponentType(typeof(StructComponent2));

            var name = GetType().Name;

            Console.WriteLine($"{name} - {Description}");
            var timer = Stopwatch.StartNew();

            SetupEntities();
            timer.Stop();
            Console.WriteLine($"{name} - Setting up {EntityCount} entities in {timer.ElapsedMilliseconds}ms");

            timer.Reset();
            timer.Start();
            for (var update = 0; update < SimulatedUpdates; update++)
            {
                RunProcess();
            }
            timer.Stop();
            var totalProcessTime = TimeSpan.FromMilliseconds(timer.ElapsedMilliseconds);

            Console.WriteLine($"{name} - Simulating {SimulatedUpdates} updates - Processing {EntityCount} entities in {totalProcessTime.TotalMilliseconds}ms");
            Console.WriteLine();
        }
示例#9
0
        protected override void ApplicationStarted()
        {
            var defaultPool = EntityCollectionManager.GetCollection();
            var entity      = defaultPool.CreateEntity();

            entity.AddComponents(new ViewComponent());
        }
示例#10
0
        protected override void ApplicationStarted()
        {
            var defaultPool = EntityCollectionManager.GetCollection();

            _enemy = defaultPool.CreateEntity(new EnemyBlueprint(100));

            HandleInput();
        }
示例#11
0
        protected override void ApplicationStarted()
        {
            var defaultPool = EntityCollectionManager.GetCollection();
            var entity      = defaultPool.CreateEntity();

            var existingGameObject = GameObject.Find("ExistingGameObject");

            existingGameObject.LinkEntity(entity, defaultPool);
        }
示例#12
0
        protected override void ApplicationStarted()
        {
            var collection = EntityCollectionManager.GetCollection();

            for (var i = 0; i < _cubeCount; i++)
            {
                var viewEntity = collection.CreateEntity();
                viewEntity.AddComponents(new ViewComponent(), new RandomColorComponent());
            }
        }
示例#13
0
        protected override void ApplicationStarted()
        {
            var defaultPool = EntityCollectionManager.GetCollection();

            // create 5k entities
            for (var i = 0; i < 4000; i++)
            {
                var entity = defaultPool.CreateEntity();

                entity.AddComponents(new Component1(), new Component2(), new Component3());
            }
        }
示例#14
0
        protected override void ApplicationStarted()
        {
            var collection = EntityCollectionManager.GetCollection();
            var entity     = collection.CreateEntity();

            var helloComponent = new SayHelloComponent
            {
                Name = "Bob"
            };

            entity.AddComponent(helloComponent);
        }
        protected override void ApplicationStarted()
        {
            var blueprint = new MoveableBlueprint();

            var defaultPool = EntityCollectionManager.GetCollection();

            for (var i = 0; i < _entityCount; i++)
            {
                defaultPool.CreateEntity(blueprint);
            }

            HandleInput();
        }
示例#16
0
        public void Setup(IEntity entity)
        {
            var gameBoardEntity    = EntityCollectionManager.GetEntitiesFor(_gameBoardGroup).First();
            var gameBoardComponent = gameBoardEntity.GetComponent <GameBoardComponent>();

            var viewComponent           = entity.GetGameObject();
            var randomlyPlacedComponent = entity.GetComponent <RandomlyPlacedComponent>();
            var randomPosition          = gameBoardComponent.OpenTiles.TakeRandom();

            randomlyPlacedComponent.RandomPosition = randomPosition;
            viewComponent.transform.localPosition  = randomPosition;
            gameBoardComponent.OpenTiles.Remove(randomPosition);
        }
示例#17
0
        public void SetupSystem(ISystem system)
        {
            var disposer = new CompositeDisposable();

            Subscriptions.Add(system, disposer);

            var castSystem = (ITeardownSystem)system;
            var accessor   = EntityCollectionManager.GetObservableGroup(system.Group);

            disposer.Add(
                accessor.EntityRemoved.Subscribe(castSystem.Teardown)
                );
        }
        protected override void ApplicationStarted()
        {
            var defaultPool = EntityCollectionManager.GetCollection();
            var entity      = defaultPool.CreateEntity();

            var canTalkComponent = new CanTalkComponent {
                Message = "Hello world"
            };

            entity.AddComponents(canTalkComponent);

            HandleInput();
        }
        protected override void ApplicationStarted()
        {
            var defaultPool = EntityCollectionManager.GetCollection();

            defaultPool.CreateEntity(new CharacterBlueprint("Bob", 200));
            defaultPool.CreateEntity(new CharacterBlueprint("Tom", 150));
            defaultPool.CreateEntity(new CharacterBlueprint("Rolf", 150));
            defaultPool.CreateEntity(new CharacterBlueprint("Mez", 100));
            defaultPool.CreateEntity(new CharacterBlueprint("TP", 1000));
            defaultPool.CreateEntity(new CharacterBlueprint("MasterChief", 100));
            defaultPool.CreateEntity(new CharacterBlueprint("Weakling", 20));

            HandleInput();
        }
示例#20
0
        protected override void ApplicationStarted()
        {
            var entityCollection = EntityCollectionManager.GetCollection();

            var cubeEntity = entityCollection.CreateEntity();

            cubeEntity.AddComponent <ViewComponent>();
            cubeEntity.AddComponent <CubeComponent>();

            var sphereEntity = entityCollection.CreateEntity();

            sphereEntity.AddComponent <ViewComponent>();
            sphereEntity.AddComponent <SphereComponent>();
        }
示例#21
0
        protected override void ApplicationStarted()
        {
            _collection = EntityCollectionManager.GetCollection();
            _system     = new ExampleReactToGroupSystem();

            for (var i = 0; i < EntityCount; i++)
            {
                var entity = _collection.CreateEntity();
                entity.AddComponents(new SimpleReadComponent(), new SimpleWriteComponent());
            }

            RunSingleThread();
            RunMultiThreaded();
        }
示例#22
0
        protected override void ApplicationStarted()
        {
            var collection = EntityCollectionManager.GetCollection();

            for (var i = 0; i < _cubeCount; i++)
            {
                var viewEntity = collection.CreateEntity();
                viewEntity.AddComponents(new ViewComponent(), new RandomColorComponent());
            }

            var group = EntityCollectionManager.GetObservableGroup(new Group(typeof(ViewComponent), typeof(RandomColorComponent)));

            Debug.Log($"There are {group.Count} entities out of {collection.Count} matching");
        }
示例#23
0
        protected override void ApplicationStarted()
        {
            Observable.Start(() =>
            {
                var defaultPool = EntityCollectionManager.GetCollection();

                // create 5k entities
                for (var i = 0; i < 50000; i++)
                {
                    var entity = defaultPool.CreateEntity();

                    entity.AddComponents(new Component1(), new Component2(), new Component3());
                }
            }, EcsScheduler.EventLoopScheduler);
        }
示例#24
0
        protected override void ApplicationStarted()
        {
            var collection = EntityCollectionManager.GetCollection();


            var stopwatch = new Stopwatch();

            stopwatch.Start();
            for (var i = 0; i < EntityCount; i++)
            {
                var entity = collection.CreateEntity();
                entity.AddComponents(new SimpleReadComponent(), new SimpleWriteComponent());
            }
            stopwatch.Stop();
            Console.WriteLine($"Finished In: {stopwatch.ElapsedMilliseconds}ms");
        }
示例#25
0
        protected override IDependencyContainer DependencyContainer => new NinjectDependencyContainer();//throw new NotImplementedException();

        protected override void ApplicationStarted()
        {
            RegisterAllBoundSystems();
            var defaultPool = EntityCollectionManager.GetCollection();
            var _enemy      = defaultPool.CreateEntity();

            _enemy.AddComponent <mjsg.CS_Script>();

            ReadAllSettings();

            Console.Title = ConfigurationManager.AppSettings["Name"];

            //LogManager.Configuration = new XmlLoggingConfiguration("NLog.config");

            ////            var config = LogManager.Configuration;// new LoggingConfiguration();



            //var consoleTarget = new ColoredConsoleTarget("target12")
            //{
            //    Layout = @"${date:format=HH\:mm\:ss} ${level} ${message} ${exception}"
            //};
            //LogManager.Configuration.AddTarget(consoleTarget);
            ////var fileTarget = new FileTarget("target2")
            ////{
            ////    FileName = "${basedir}/file.txt",
            ////    Layout = "${longdate} ${level} ${message}  ${exception}"
            ////};
            ////config.AddTarget(fileTarget);

            ////config.AddRuleForOneLevel(LogLevel.Error, fileTarget); // only errors to file
            //LogManager.Configuration.AddRuleForAllLevels(consoleTarget); // all to console
            ////LogManager.Configuration = config;
            //Logger logger = LogManager.GetLogger("Name.Space.Class2");
            //logger.Trace("trace log message");
            //logger.Debug("debug log message");
            //logger.Info("info log message");
            //logger.Warn("warn log message");
            //logger.Error(CharFormat);
            //logger.Fatal(fas);
            // TNet.Log.TraceLog.WriteError("fafa");
            TNet.Log.TraceLog.WriteInfo(CharFormat);
            ConsoleColor currentForeColor = Console.BackgroundColor;
            //  SetColor(ConsoleColor.Cyan);

            //    SetColor(currentForeColor);
        }
示例#26
0
        public void SetupSystem(ISystem system)
        {
            var entitySubscriptions = new Dictionary <int, IDisposable>();

            EntitySubscriptions.Add(system, entitySubscriptions);

            var entityChangeSubscriptions = new CompositeDisposable();

            SystemSubscriptions.Add(system, entityChangeSubscriptions);

            var castSystem      = (ISetupSystem)system;
            var observableGroup = EntityCollectionManager.GetObservableGroup(system.Group);

            entityChangeSubscriptions.Add(
                observableGroup.EntityAdded.Subscribe(entity =>
            {
                var possibleSubscription = ProcessEntity(castSystem, entity);

                if (possibleSubscription != null)
                {
                    entitySubscriptions.Add(entity.Id, possibleSubscription);
                }
            })
                );

            entityChangeSubscriptions.Add(
                observableGroup.EntityRemoved
                .Subscribe(entity =>
            {
                if (entitySubscriptions.ContainsKey(entity.Id))
                {
                    entitySubscriptions.RemoveAndDispose(entity.Id);
                }
            })
                );

            foreach (var entity in observableGroup)
            {
                var possibleSubscription = ProcessEntity(castSystem, entity);

                if (null != possibleSubscription)
                {
                    entitySubscriptions.Add(entity.Id, possibleSubscription);
                }
            }
        }
        private TimeSpan ProcesEntities(int amount)
        {
            var defaultPool = EntityCollectionManager.GetCollection();

            EntityCollectionManager.Pools.ForEachRun(x => x.RemoveAllEntities());
            var startTime = DateTime.Now;

            for (var i = 0; i < amount; i++)
            {
                var entity = defaultPool.CreateEntity();
                entity.AddComponents(_availableComponents);
                entity.RemoveComponents(_availableComponents);
            }

            var endTime = DateTime.Now;

            return(endTime - startTime);
        }
        private TimeSpan ProcessEntities(int amount)
        {
            var defaultPool = EntityCollectionManager.GetCollection();

            EntityCollectionManager.Collections.ForEachRun(x => x.RemoveAllEntities());
            GC.Collect();

            var timer = Stopwatch.StartNew();

            for (var i = 0; i < amount; i++)
            {
                var entity = defaultPool.CreateEntity();
                entity.AddComponents(_availableComponents);
                entity.RemoveComponents(_availableComponentTypeIds);
            }

            timer.Stop();
            return(TimeSpan.FromMilliseconds(timer.ElapsedMilliseconds));
        }
示例#29
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);
        }
示例#30
0
        public void SetupSystem(ISystem system)
        {
            var observableGroup    = EntityCollectionManager.GetObservableGroup(system.Group);
            var hasEntityPredicate = system.Group is IHasPredicate;
            var castSystem         = (IReactToGroupSystem)system;
            var reactObservable    = castSystem.ReactToGroup(observableGroup);

            if (false == hasEntityPredicate)
            {
                var noPredicateSub = reactObservable.Subscribe(x => ExecuteForGroup(x, castSystem));
                SystemSubscriptions.Add(system, noPredicateSub);

                return;
            }

            var groupPredicate = system.Group as IHasPredicate;
            var subscription   = reactObservable.Subscribe(
                x => ExecuteForGroup(x.Where(groupPredicate.CanProcessEntity), castSystem)
                );

            SystemSubscriptions.Add(system, subscription);
        }