public ComponentID <TEntity, TComponent> RegisterComponentType <TComponent>() where TComponent : class { _threadAffinity.Validate(); Assert.Debug(_componentCount < _maxComponentsPerEntity, "max component count exceeded"); int component = _componentCount++; var id = new ComponentID <TEntity, TComponent>(component); return(id); }
public bool HasCommponent <TComponent>(Entity <TEntity> entity, ComponentID <TEntity, TComponent> id) where TComponent : class { _threadAffinity.Validate(); Assert.Debug((ushort)id.ComponentIndex < _maxComponentsPerEntity, "Component index out of range"); int entityIndex = entity.Index; int componentIndex = id.ComponentIndex; return(componentFlags[entityIndex][componentIndex]); }
public void AddComponent <TComponent>(Entity <TEntity> entity, ComponentID <TEntity, TComponent> id, TComponent component) where TComponent : class { _threadAffinity.Validate(); Assert.Debug(IsValid(entity), $"Invalid entity: Index: {entity.Index} CreationID: {entity.CreationIDCheck}"); Assert.Debug((ushort)id.ComponentIndex < _maxComponentsPerEntity, "Component index out of range"); Assert.Debug(!HasCommponent(entity, id), $"Entity already has component {Utility.Reflection.GetType<TComponent>.kFullName}"); int entityIndex = entity.Index; int componentIndex = id.ComponentIndex; int offset = entityIndex * _maxComponentsPerEntity + componentIndex; componentFlags[entityIndex][componentIndex] = true; }
public void RemoveComponent <TComponent>(Entity <TEntity> entity, ComponentID <TEntity, TComponent> id) where TComponent : class { _threadAffinity.Validate(); Assert.Debug(IsValid(entity), $"Invalid entity: Index: {entity.Index} CreationID: {entity.CreationIDCheck}"); Assert.Debug((ushort)id.ComponentIndex < _maxComponentsPerEntity, "Component index out of range"); int entityIndex = entity.Index; int componentIndex = id.ComponentIndex; int offset = entityIndex * _maxComponentsPerEntity + componentIndex; object component = _components[offset]; IReleasable releasableComponent = component as IReleasable; if (releasableComponent != null) { releasableComponent.Release(); } _components[offset] = null; componentFlags[entityIndex][componentIndex] = false; }
public EntityQuery <TEntity> HasNot <TComponent>(ComponentID <TEntity, TComponent> id) where TComponent : class { _hasNone[id.ComponentIndex] = true; return(this); }
public TComponent GetComponentNoAffinityCheck <TComponent>(Entity <TEntity> entity, ComponentID <TEntity, TComponent> id) where TComponent : class { Assert.Debug((ushort)id.ComponentIndex < _maxComponentsPerEntity, "Component index out of range"); Assert.Debug(IsValidNoAffinitCheck(entity), $"Invalid entity: Index: {entity.Index} CreationID: {entity.CreationIDCheck}"); int offset = entity.Index * _maxComponentsPerEntity + id.ComponentIndex; return((TComponent)_components[offset]); }
public TComponent GetComponent <TComponent>(Entity <TEntity> entity, ComponentID <TEntity, TComponent> id) where TComponent : class { _threadAffinity.Validate(); return(GetComponentNoAffinityCheck(entity, id)); }
public bool Equals(ComponentID <TEntity, TComponent> other) { return(ComponentIndex == other.ComponentIndex); }
public bool Equals <TOtherComponent>(ComponentID <TEntity, TOtherComponent> other) where TOtherComponent : class { return(ComponentIndex == other.ComponentIndex); }
protected static void ShutdownComponentID() { Assert.Debug(_componentID != ComponentID <TEntity, TComponent> .None, $"Non-initialized component type {Utility.Reflection.GetType<TComponent>.kFullName} is being shutdown!"); _componentID = ComponentID <TEntity, TComponent> .None; }
protected static void InitializeComponentID(EntityContext <TEntity> entityContext) { Assert.Debug(_componentID == ComponentID <TEntity, TComponent> .None, $"Component type {Utility.Reflection.GetType<TComponent>.kFullName}"); _componentID = entityContext.RegisterComponentType <TComponent>(); }
public static void HasComponent <TEntity, TComponent>(this Entity <TEntity> entity, ComponentID <TEntity, TComponent> componentID) where TEntity : EntityType where TComponent : class { EntityContext <TEntity> .Instance.HasCommponent(entity, componentID); }
public static void AddComponent <TEntity, TComponent>(this Entity <TEntity> entity, ComponentID <TEntity, TComponent> componentID, TComponent component) where TEntity : EntityType where TComponent : class { EntityContext <TEntity> .Instance.AddComponent(entity, componentID, component); }
public static TComponent GetComponent <TEntity, TComponent>(this Entity <TEntity> entity, ComponentID <TEntity, TComponent> componentID) where TEntity : EntityType where TComponent : class { return(EntityContext <TEntity> .Instance.GetComponent(entity, componentID)); }