#include "Recipie.h" #include "CraftingStorage.h" Recipie::Recipie() : ReferenceCounter() {} void Recipie::addIngredient(ItemFilter* filter, int amount) { filters.add(filter); inputAmount.add(amount); } void Recipie::addOutput(Item* item, int amount) { outputs.add(item); outputAmount.add(amount); } bool Recipie::testApplicability(CraftingStorage* zStorage) { for (int i = 0; i < outputs.getEintragAnzahl(); i++) { if (!zStorage->hasFreeSpace(outputs.z(i), outputAmount.get(i))) return 0; } return zStorage->isAllAvailable(filters, inputAmount); } void Recipie::apply(CraftingStorage* zStorage) { zStorage->consume(filters, inputAmount); for (int i = 0; i < outputs.getEintragAnzahl(); i++) { ItemStack* stack = new ItemStack(outputs.z(i)->zItemType()->cloneItem(outputs.z(i)), outputAmount.get(i)); zStorage->addCraftingResult(stack); stack->release(); } } ShapedRecipie::ShapedRecipie(int width, int height) : ReferenceCounter(), width(width), height(height), output(0), outputAmount(0) { for (int i = 0; i < width * height; i++) { filters.add(0); modifiers.add(0); } } ShapedRecipie::~ShapedRecipie() { if (output) output->release(); } void ShapedRecipie::setIngredient( int x, int y, ItemFilter* filter, ItemModifier* modifier) { filters.set(filter, width * y + x); modifiers.set(modifier, width * y + x); } void ShapedRecipie::setOutput(Item* item, int amount) { if (output) output->release(); output = item; outputAmount = amount; } bool ShapedRecipie::testApplicability(ShapedCraftingStorage* zStorage) { return zStorage->isAllAvailable(filters, width, height) && zStorage->hasFreeSpace(output, outputAmount); } void ShapedRecipie::apply(ShapedCraftingStorage* zStorage) { zStorage->consume(filters, modifiers, width, height); ItemStack* stack = new ItemStack(output->zItemType()->cloneItem(output), outputAmount); zStorage->addCraftingResult(stack); stack->release(); } Framework::Array ShapedRecipie::getOutput( ShapedCraftingStorage* zStorage) { Framework::Array result; ItemInfo info; info.count = outputAmount; info.type = output->zItemType()->getId(); info.hp = output->getHp(); info.durability = output->getDurability(); info.maxHp = output->getMaxHp(); info.maxDurability = output->getMaxDurability(); result.add(info); return result; }