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