4 * Copyright 2020 Elias Fleckenstein <eliasfleckenstein@web.de>
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
24 dragonblocks.Recipe = class
28 if (! def || ! def.result || ! def.recipe instanceof Array || ! def.recipe[0] instanceof Array)
31 this.recipe = def.recipe;
32 this.result = def.result;
34 this.height = this.recipe.length;
35 this.width = this.recipe[0].length;
37 dragonblocks.recipes.push(this);
42 if (craftfield.width < this.width || craftfield.height < this.height)
45 for (let ydiff = 0; ydiff <= craftfield.height - this.height; ydiff++) {
46 for (let xdiff = 0; xdiff <= craftfield.width - this.width; xdiff++) {
49 for (let y = 0; y < craftfield.height; y++) {
50 for (let x = 0; x < craftfield.width; x++) {
51 if (! this.recipe[y - ydiff] || ! this.recipe[y - ydiff][x - xdiff]) {
52 if (craftfield.list[y * craftfield.width + x].item)
54 } else if (! dragonblocks.itemMatch(craftfield.list[y * craftfield.width + x].item, this.recipe[y - ydiff][x - xdiff])) {
69 dragonblocks.recipes = [];
70 dragonblocks.registerRecipe = def => {
71 let recipeDef = new dragonblocks.Recipe(def);
72 dragonblocks.recipes.push(recipeDef);