Beispiel #1
0
        public Aspect(SparseComponentArray sparseComponents, TypeIndexer typeIndexer, int maxEntities, int maxComponentTypes, Type[] types)
        {
            Debug.Assert(maxEntities > 0);
            Debug.Assert(maxComponentTypes > 0);

            this.maxEntities      = maxEntities;
            this.typeIndexer      = typeIndexer;
            this.sparseComponents = sparseComponents;

            typeMap = new IntMap(maxComponentTypes);

            entities   = new PackedArray <Entity>(maxEntities);
            components = new IArrayWrapper[types.Length];

            addedEntities   = new Entity[maxEntities];
            removedEntities = new Entity[maxEntities];

            foreach (Type type in types)
            {
                int typeIndex   = typeIndexer.GetIndex(type);
                int packedIndex = typeMap.Add(typeIndex);

                Type          genericArrayWrapper = typeof(ArrayWrapper <>).MakeGenericType(type);
                IArrayWrapper array = (IArrayWrapper)Activator.CreateInstance(genericArrayWrapper, maxEntities);
                components[packedIndex] = array;

                Bitmask = Bitmask.Set(typeIndex);
            }
        }
        public void AddFrom(int thisIndex, IArrayWrapper other, int otherIndex)
        {
            Debug.Assert(thisIndex >= 0 && thisIndex < data.Length);
            Debug.Assert(other is ArrayWrapper <T>);

            data[thisIndex] = (other as ArrayWrapper <T>)[otherIndex];
        }
Beispiel #3
0
 /// <summary>
 /// Creates a new ArrayWrapperEnumerator from the ArrayWrapper it is to enumerate over
 /// </summary>
 /// <param name="wrapper"></param>
 public ArrayWrapperEnumerator(IArrayWrapper <T, K> wrapper)
 {
     if (wrapper == null)
     {
         throw new ArgumentNullException("wrapper");
     }
     logger.Debug("Creating new ArrayWrapper<T, K>. T : " + typeof(T).FullName + "; K : " + typeof(K).FullName);
     this._wrapper = wrapper;
     this.index    = -1;
 }
Beispiel #4
0
        public void Add(Entity entity)
        {
            int sparseIndex = entity.Index;
            int packedIndex = entities.Add(entity, sparseIndex);

            for (int i = 0; i < components.Length; ++i)
            {
                int           typeIndex   = typeMap.GetSparse(i);
                IArrayWrapper array       = components[i];
                IArrayWrapper sparseArray = sparseComponents.GetArrayWrapper(typeIndex);
                array.AddFrom(packedIndex, sparseArray, entity.Index);
            }

            addedEntities[addedEntitiesCount++] = entity;
        }
Beispiel #5
0
        public void Remove(Entity entity)
        {
            int index = entity.Index;

            if (!entities.Contains(index))
            {
                return;
            }

            entities.Remove(index, out int lastPackedIndex, out int packedIndex);

            for (int i = 0; i < components.Length; ++i)
            {
                IArrayWrapper array = components[i];
                if (packedIndex != lastPackedIndex)
                {
                    array.Swap(packedIndex, lastPackedIndex);
                }
                array.RemoveElementAt(lastPackedIndex);
            }

            removedEntities[removedEntitiesCount++] = entity;
        }
Beispiel #6
0
 /// <summary>
 /// Disposes of the enumerator
 /// </summary>
 public void Dispose()
 {
     this._wrapper = null;
 }