Exemple #1
0
 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);
 }
Exemple #2
0
    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);
    }
Exemple #3
0
    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();
    }