public static ExchangeRecipeBufferElement GetRecipe(this DynamicBuffer <ExchangeRecipeBufferElement> buffer,
                                                        FixedList128 <FixedString32> sourceResources, FixedList128 <FixedString32> resultResources)
    {
        ExchangeRecipeBufferElement output = default;

        for (int i = 0; i < buffer.Length; i++)
        {
            var recipe = buffer[i];
            if (sourceResources.Length != recipe.SourceResourcesNames.Length ||
                resultResources.Length != recipe.ResultResourcesNames.Length)
            {
                continue;
            }
            var flag = true;
            for (int j = 0; j < sourceResources.Length && flag; j++)
            {
                flag &= recipe.SourceResourcesNames.Contains(sourceResources[j]);
            }
            for (int j = 0; j < resultResources.Length && flag; j++)
            {
                flag &= recipe.ResultResourcesNames.Contains(resultResources[j]);
            }
            if (flag)
            {
                output = recipe;
                break;
            }
        }
        return(output);
    }
 public static int OrderIndex(this DynamicBuffer <OrderBufferElement> buffer, Entity requester, FixedString32 requestedResource,
                              ExchangeRecipeBufferElement recipe, float requestedAmount)
 {
     for (int i = 0; i < buffer.Length; i++)
     {
         {
             var order = buffer[i];
             if (order.Requester == requester && order.RequestedResourceName == requestedResource &&
                 order.Recipe.SourceResourcesNames == recipe.SourceResourcesNames &&
                 order.Recipe.ResultResourcesNames == recipe.ResultResourcesNames &&
                 order.Recipe.SourceResourcesMultipliers == recipe.SourceResourcesMultipliers &&
                 order.Recipe.ResultResourcesMultipliers == recipe.ResultResourcesMultipliers &&
                 order.RequestedAmount == requestedAmount)
             {
                 return(i);
             }
         }
     }
     return(-1);
 }
    public static void ExchangeAsBuyer(this DynamicBuffer <InventoryBufferElement> buffer, DynamicBuffer <InventoryBufferElement> otherInventory, ExchangeRecipeBufferElement recipe,
                                       FixedString32 requestedResourceName, float requestedAmount, bool IsWorkplaceTask)
    {
        var requestedResourceMultiplier = recipe.GetResultMultiplier(requestedResourceName);
        var commonMultiplier            = requestedAmount / requestedResourceMultiplier;

        for (int i = 0; i < recipe.SourceResourcesNames.Length; i++)
        {
            var name       = recipe.SourceResourcesNames[i];
            var multiplier = recipe.SourceResourcesMultipliers[i];
            if (IsWorkplaceTask)
            {
                otherInventory.TransferTo(buffer, name, commonMultiplier * multiplier);
            }
            else
            {
                buffer.TransferTo(otherInventory, name, commonMultiplier * multiplier);
            }
        }

        for (int i = 0; i < recipe.ResultResourcesNames.Length; i++)
        {
            var name       = recipe.ResultResourcesNames[i];
            var multiplier = recipe.ResultResourcesMultipliers[i];
            if (IsWorkplaceTask)
            {
                buffer.TransferTo(otherInventory, name, commonMultiplier * multiplier);
            }
            else
            {
                otherInventory.TransferTo(buffer, name, commonMultiplier * multiplier);
            }
        }
    }