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