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); }
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)); }