Beispiel #1
0
        public IEntity CreateEntity()
        {
            var components = new List <IComponent>();

            SystemReactor reactor = _executor.GetSystemReactor(components);

            var entity = EntityFactory.Create(this, _indexPool.GetId(), components, reactor);

            _entities.Add(entity);

            reactor.AddEntityToReactor(entity);

            EventSystem.Publish(new EntityAddedEvent(entity, this));

            return(entity);
        }
        public SystemReactor GetSystemReactor(HashSet <Type> targetTypes)
        {
            if (targetTypes.Count > 0)
            {
                SystemReactor reactor =
                    _systemReactors.FirstOrDefault(
                        x => x.TargetTypes.SetEquals(targetTypes));

                if (reactor == null)
                {
                    reactor = new SystemReactor(this, targetTypes);
                    _systemReactors.Add(reactor);
                }

                return(reactor);
            }
            return(EmptyReactor);
        }
Beispiel #3
0
        public IEntity CreateEntity(IEnumerable <IComponent> components)
        {
            SystemReactor reactor = _executor.GetSystemReactor(components);

            var sortedComponents = new IComponent[components.Count()];

            foreach (var component in components)
            {
                sortedComponents[reactor.GetComponentIdx(component.TypeId)] = component;
            }

            var entity = EntityFactory.Create(this, _indexPool.GetId(), sortedComponents, reactor);

            _entities.Add(entity);

            reactor.AddEntityToReactor(entity);

            EventSystem.Publish(new EntityAddedEvent(entity, this));

            return(entity);
        }
        public SystemReactor GetOrCreateConcreteSystemReactor(IList <Type> types)
        {
            SystemReactor reactor = null;

            foreach (var systemReactor in _systemReactors)
            {
                if (systemReactor.TargetTypesList.Count == types.Count)
                {
                    for (int i = 0; i < types.Count; i++)
                    {
                        if (systemReactor.TargetTypesList[i] == types[i] && i == types.Count)
                        {
                            reactor = systemReactor;
                        }
                    }
                }
            }
            if (reactor == null)
            {
                reactor = new SystemReactor(this, new HashSet <Type>(types));

                /*
                 * string typeNames = reactor.TargetTypesList.Select(x => x.Name).Aggregate(string.Empty,
                 *  (current, typeName) => current + string.Format("{0}; ", typeName));*/
                //Debug.Log(string.Format("created new reactor with types: {0}", typeNames));
                _systemReactors.Add(reactor);
            }

            /*
             * else
             * {
             *  string typeNames = reactor.TargetTypesList.Select(x => x.Name).Aggregate(string.Empty,
             *      (current, typeName) => current + string.Format("{0}; ", typeName));
             *  //Debug.Log(string.Format("Using existing reactor  with types: {0}", typeNames));
             * }*/
            return(reactor);
        }
 public IEntity Create(IPool pool, int entityId, IEnumerable <IComponent> components, SystemReactor systemReactor)
 {
     return(new Entity(entityId, components, pool, systemReactor));
 }