private SlotRecipesBuilding FindRecipeBuildingSlotForItemAtPosition(Vector2 pos, Item itemData, out Recipe recipeData) { recipeData = null; foreach (var building in ActiveRecipeBuildings) { SlotRecipesBuilding slot = building.FindSlotAtWithRequirement(pos, itemData, out recipeData); if (slot != null) { return(slot); } } return(null); }
public SlotRecipesBuilding FindSlotAtWithRequirement(Vector2 pos, Item item, out Recipe recipeData) { recipeData = null; SlotRecipesBuilding slotAtPos = _activeSlots.Find(x => x.ContainsPosition(pos)); if (slotAtPos != null) { recipeData = slotAtPos.FindRecipeUsingItem(item); if (recipeData == null) { slotAtPos = null; } } return(slotAtPos); }
public void DragItemEnd(IItemGenerator slotResourceBuilding, Item itemData, Vector2 pos) { _dragging = false; _elapsedSinceLastDragFinished = 0; // Valid resource generator? Recipe recipeData; bool clear = true; SlotRecipesBuilding buildingSlot = FindRecipeBuildingSlotForItemAtPosition(pos, itemData, out recipeData); if (buildingSlot != null) { if (buildingSlot.MissingRecipe) { clear = buildingSlot.SetActiveRecipe(recipeData, itemData); } else { buildingSlot.AddRequirement(itemData); } if (clear) { slotResourceBuilding.ClearContents(); } else { slotResourceBuilding.ResetSlot(); } return; } foreach (var slot in ActiveClientRequestSlots) { if (!slot.Active) { continue; } if (!slot.ContainsPosition(pos)) { continue; } if (slot.IsRequestedItem(itemData)) { slot.GiveItem(itemData.ItemID); slotResourceBuilding.ClearContents(); } } foreach (var wasteland in ActiveDisposalFacilities) { if (wasteland.OverlapsPoint(pos)) { slotResourceBuilding.ClearContents(); return; } } // Otherwise: slotResourceBuilding.ResetSlot(); }