示例#1
0
        private unsafe void AddToItemList(List <MyBlueprintDefinitionBase.Item> items, MyBlueprintDefinitionBase.Item toAdd)
        {
            int num = 0;

            MyBlueprintDefinitionBase.Item item = new MyBlueprintDefinitionBase.Item();
            num = 0;
            while (true)
            {
                if (num < items.Count)
                {
                    item = items[num];
                    if (item.Id != toAdd.Id)
                    {
                        num++;
                        continue;
                    }
                }
                if (num >= items.Count)
                {
                    items.Add(toAdd);
                    return;
                }
                MyFixedPoint *pointPtr1 = (MyFixedPoint *)ref item.Amount;
                pointPtr1[0] += toAdd.Amount;
                items[num]    = item;
                return;
            }
        }
示例#2
0
        public override unsafe int GetBlueprints(List <MyBlueprintDefinitionBase.ProductionInfo> blueprints)
        {
            int num   = 0;
            int index = 0;

            while (index < this.m_blueprints.Length)
            {
                int num3  = this.m_blueprints[index].GetBlueprints(blueprints);
                int count = blueprints.Count;
                int num5  = count - 1;
                while (true)
                {
                    if (num5 < (count - num3))
                    {
                        num += num3;
                        index++;
                        break;
                    }
                    MyBlueprintDefinitionBase.ProductionInfo info = blueprints[num5];
                    MyFixedPoint *pointPtr1 = (MyFixedPoint *)ref info.Amount;
                    pointPtr1[0]    *= this.m_items[index].Amount;
                    blueprints[num5] = info;
                    num5--;
                }
            }
            return(num);
        }
示例#3
0
        public static unsafe void AddFloatingObjectAmount(MyFloatingObject obj, MyFixedPoint amount)
        {
            MyPhysicalInventoryItem item      = obj.Item;
            MyFixedPoint *          pointPtr1 = (MyFixedPoint *)ref item.Amount;

            pointPtr1[0]    += amount;
            obj.Item         = item;
            obj.Amount.Value = item.Amount;
            obj.UpdateInternalState();
        }
示例#4
0
 protected virtual unsafe void InsertQueueItem(int idx, MyBlueprintDefinitionBase blueprint, MyFixedPoint amount)
 {
     if (this.CanUseBlueprint(blueprint))
     {
         QueueItem item = new QueueItem {
             Amount    = amount,
             Blueprint = blueprint
         };
         if (this.m_queue.IsValidIndex <QueueItem>(idx) && ReferenceEquals(this.m_queue[idx].Blueprint, item.Blueprint))
         {
             MyFixedPoint *pointPtr1 = (MyFixedPoint *)ref item.Amount;
             pointPtr1[0] += this.m_queue[idx].Amount;
             item.ItemId   = this.m_queue[idx].ItemId;
             if ((this.m_currentQueueItem != null) && (this.m_queue[idx].ItemId == this.m_currentQueueItem.Value.ItemId))
             {
                 this.m_currentQueueItem = new QueueItem?(item);
             }
             this.m_queue[idx] = item;
         }
         else if (((this.m_queue.Count > 0) && ((idx >= this.m_queue.Count) || (idx == -1))) && ReferenceEquals(this.m_queue[this.m_queue.Count - 1].Blueprint, item.Blueprint))
         {
             MyFixedPoint *pointPtr2 = (MyFixedPoint *)ref item.Amount;
             pointPtr2[0] += this.m_queue[this.m_queue.Count - 1].Amount;
             item.ItemId   = this.m_queue[this.m_queue.Count - 1].ItemId;
             if ((this.m_currentQueueItem != null) && (this.m_queue[this.m_queue.Count - 1].ItemId == this.m_currentQueueItem.Value.ItemId))
             {
                 this.m_currentQueueItem = new QueueItem?(item);
             }
             this.m_queue[this.m_queue.Count - 1] = item;
         }
         else
         {
             if (idx == -1)
             {
                 idx = this.m_queue.Count;
             }
             if (idx > this.m_queue.Count)
             {
                 MyLog.Default.WriteLine("Production block.InsertQueueItem: Index out of bounds, desync!");
                 idx = this.m_queue.Count;
             }
             if (this.m_queue.Count == 0)
             {
                 this.m_lastUpdateTime = MySandboxGame.TotalGamePlayTimeInMilliseconds;
             }
             item.ItemId = this.NextItemId;
             this.m_queue.Insert(idx, item);
         }
         this.UpdatePower();
         this.OnQueueChanged();
     }
 }
示例#5
0
 private unsafe void PostprocessAddSubblueprint(MyBlueprintDefinitionBase blueprint, MyFixedPoint blueprintAmount)
 {
     for (int i = 0; i < blueprint.Prerequisites.Length; i++)
     {
         MyBlueprintDefinitionBase.Item toAdd = blueprint.Prerequisites[i];
         MyFixedPoint *pointPtr1 = (MyFixedPoint *)ref toAdd.Amount;
         pointPtr1[0] *= blueprintAmount;
         this.AddToItemList(m_tmpPrerequisiteList, toAdd);
     }
     for (int j = 0; j < blueprint.Results.Length; j++)
     {
         MyBlueprintDefinitionBase.Item toAdd = blueprint.Results[j];
         MyFixedPoint *pointPtr2 = (MyFixedPoint *)ref toAdd.Amount;
         pointPtr2[0] *= blueprintAmount;
         this.AddToItemList(m_tmpResultList, toAdd);
     }
 }
示例#6
0
        protected virtual unsafe void MoveQueueItem(uint queueItemId, int targetIdx)
        {
            int index = 0;

            while (true)
            {
                if (index < this.m_queue.Count)
                {
                    if (this.m_queue[index].ItemId != queueItemId)
                    {
                        index++;
                        continue;
                    }
                    QueueItem item = this.m_queue[index];
                    int       num1 = Math.Min(this.m_queue.Count - 1, targetIdx);
                    targetIdx = num1;
                    if (index == targetIdx)
                    {
                        return;
                    }
                    this.m_queue.RemoveAt(index);
                    int num2 = -1;
                    if (this.m_queue.IsValidIndex <QueueItem>((targetIdx - 1)) && ReferenceEquals(this.m_queue[targetIdx - 1].Blueprint, item.Blueprint))
                    {
                        num2 = targetIdx - 1;
                    }
                    if (this.m_queue.IsValidIndex <QueueItem>(targetIdx) && ReferenceEquals(this.m_queue[targetIdx].Blueprint, item.Blueprint))
                    {
                        num2 = targetIdx;
                    }
                    if (num2 == -1)
                    {
                        this.m_queue.Insert(targetIdx, item);
                    }
                    else
                    {
                        QueueItem     item2     = this.m_queue[num2];
                        MyFixedPoint *pointPtr1 = (MyFixedPoint *)ref item2.Amount;
                        pointPtr1[0]      += item.Amount;
                        this.m_queue[num2] = item2;
                    }
                }
                this.OnQueueChanged();
                return;
            }
        }
示例#7
0
 protected virtual unsafe void RemoveFirstQueueItem(int index, MyFixedPoint amount, float progress = 0f)
 {
     if (this.m_queue.IsValidIndex <QueueItem>(index))
     {
         QueueItem    item   = this.m_queue[index];
         MyFixedPoint point1 = MathHelper.Clamp(amount, 0, item.Amount);
         amount = point1;
         MyFixedPoint *pointPtr1 = (MyFixedPoint *)ref item.Amount;
         pointPtr1[0]       -= amount;
         this.m_queue[index] = item;
         if (item.Amount <= 0)
         {
             MyAssembler assembler = this as MyAssembler;
             if (assembler != null)
             {
                 assembler.CurrentProgress = 0f;
             }
             this.m_queue.RemoveAt(index);
         }
         this.UpdatePower();
         this.OnQueueChanged();
     }
 }