#include "Recipie.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 ); } ShapedRecipie::~ShapedRecipie() { if( output ) output->release(); } void ShapedRecipie::setIngredient( int x, int y, ItemFilter* filter ) { filters.set( filter, width * x + y ); } 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, width, height ); ItemStack* stack = new ItemStack( output->zItemType()->cloneItem( output ), outputAmount ); zStorage->addCraftingResult( stack ); stack->release(); }