예제 #1
0
 public ItemIterator(Item *ptr, int count)
 {
     _ptr     = ptr;
     _index   = -1;
     _current = 0;
     _count   = count;
 }
예제 #2
0
 private unsafe void VerifyInputItemType(MyObjectBuilderType inputType)
 {
     Item[] prerequisites = this.Prerequisites;
     for (int i = 0; i < prerequisites.Length; i++)
     {
         Item *itemPtr1 = (Item *)ref prerequisites[i];
     }
 }
예제 #3
0
 public MurmurHash3 GetHash()
 {
     unsafe
     {
         Item  i = this;
         Item *p = &i;
         return(MurmurHash3.Create((byte *)p, (uint)sizeof(Item), 0));
     }
 }
예제 #4
0
        public void Clear()
        {
            if (!IsEmpty())
            {
                Item *pItem = m_pBack;

                while (pItem != null)
                {
                    Item *pPrevItem = pItem->pPrev;
                    m_ItemAllocator.Free(pItem);
                    pItem = pPrevItem;
                }

                m_pFront = null;
                m_pBack  = null;
                m_Count  = 0;
            }
        }
예제 #5
0
        public Item *PushFront()
        {
            Item *pNewItem = m_ItemAllocator.Alloc();

            pNewItem->pPrev = null;

            if (IsEmpty())
            {
                pNewItem->pNext = null;
                m_pFront        = pNewItem;
                m_pBack         = pNewItem;
                m_Count         = 1;
            }
            else
            {
                pNewItem->pNext = m_pFront;
                m_pFront->pPrev = pNewItem;
                m_pFront        = pNewItem;
                ++m_Count;
            }

            return(pNewItem);
        }
 public void OnItemDestroy(Context context, Item *entity)
 {
 }
 public void OnItemCreated(Context context, Item *entity)
 {
 }
예제 #8
0
 private unsafe void ThreadProc()
 {
     Thread.CurrentThread.Name = "Entity creation thread";
     HkBaseSystem.InitThread("Entity creation thread");
     MyEntityIdentifier.InEntityCreationBlock = true;
     MyEntityIdentifier.InitPerThreadStorage(0x800);
     while (!this.m_exitting)
     {
         Item item;
         if (!this.ConsumeWork(out item))
         {
             continue;
         }
         if (item.ReleaseMatrices != null)
         {
             foreach (Item item2 in this.m_waitingItems)
             {
                 if (item2.WaitGroup == item.WaitGroup)
                 {
                     MatrixD xd;
                     if (item.ReleaseMatrices.TryGetValue(item2.Result.EntityId, out xd))
                     {
                         item2.Result.PositionComp.WorldMatrix = xd;
                     }
                     this.m_waitingItems.Remove(item2, false);
                     this.m_resultQueue.Enqueue(item2);
                 }
             }
             this.m_waitingItems.ApplyRemovals();
             continue;
         }
         if (item.ObjectBuilder == null)
         {
             if (item.Result != null)
             {
                 item.Result.DebugAsyncLoading = true;
             }
             if (item.WaitGroup == 0)
             {
                 this.m_resultQueue.Enqueue(item);
             }
             else
             {
                 this.m_waitingItems.Add(item);
                 this.m_waitingItems.ApplyAdditions();
             }
             continue;
         }
         if (item.Result == null)
         {
             Item *itemPtr1 = (Item *)ref item;
             itemPtr1->Result = MyEntities.CreateFromObjectBuilderNoinit(item.ObjectBuilder);
         }
         Item *itemPtr2 = (Item *)ref item;
         itemPtr2->InScene = (item.ObjectBuilder.PersistentFlags & MyPersistentEntityFlags2.InScene) == MyPersistentEntityFlags2.InScene;
         item.ObjectBuilder.PersistentFlags &= ~MyPersistentEntityFlags2.InScene;
         item.Result.DebugAsyncLoading       = true;
         MyEntities.InitEntity(item.ObjectBuilder, ref item.Result);
         if (item.Result != null)
         {
             item.Result.Render.FadeIn = item.FadeIn;
             item.EntityIds            = new List <IMyEntity>();
             MyEntityIdentifier.GetPerThreadEntities(item.EntityIds);
             MyEntityIdentifier.ClearPerThreadEntities();
             if (item.WaitGroup == 0)
             {
                 this.m_resultQueue.Enqueue(item);
             }
             else
             {
                 this.m_waitingItems.Add(item);
                 this.m_waitingItems.ApplyAdditions();
             }
         }
     }
     MyEntityIdentifier.DestroyPerThreadStorage();
     HkBaseSystem.QuitThread();
 }
예제 #9
0
 public static extern Int8 DeserializeItemFromStream(CIO.StreamHandle stream, Item *item, Uint32 size);
예제 #10
0
 public static extern Int8 SerializeItemToStream(CIO.StreamHandle stream, Item *item, Uint32 size);
예제 #11
0
 public static extern Uint32 GetSerializedItemSize(Item *item);
예제 #12
0
 public static extern Item *ItemCreate(CIO.StorageHandle storage, Item *item);