/* | lightning struck $x $y , $something is at $x $y? , $something has inventory $inventory? , $inventory has item $item? , $item is $class? , $class is conductive? | $something is struck by lightning */ plans._lightning_struck_x_y = function (match, patterns) { for(let [_x, _y] of patterns._lightning_struck_x_y) { match.state._lightning_struck_x_y = true; match.vars._x = _x; match.vars._y = _y; if ( match.state._something_is_at_x_y || plans._something_is_at_x_y(match, patterns) && ) { return true; } else { return false; } } } plans._something_is_at_x_y = function (match, patterns) { for(let [_something, _x, _y] of patterns._something_is_at_x_y) { match.state._something_is_at_x_y = true; match.vars._something = _something; match.vars._x = _x; match.vars._y = _y; if ( match.state._something_has_inventory_inventory || plans._something_has_inventory_inventory(match, patterns) && match.state._lightning_struck_x_y || plans._lightning_struck_x_y(match, patterns) && ) { return true; } else { return false; } } } plans._something_has_inventory_inventory = function (match, patterns) { for(let [_something, _inventory] of patterns._something_has_inventory_inventory) { match.state._something_has_inventory_inventory = true; match.vars._something = _something; match.vars._inventory = _inventory; if ( match.state._something_is_at_x_y || plans._something_is_at_x_y(match, patterns) && match.state._inventory_has_item_item || plans._inventory_has_item_item(match, patterns) && ) { return true; } else { return false; } } } plans._inventory_has_item_item = function (match, patterns) { for(let [_inventory, _item] of patterns._inventory_has_item_item) { match.state._inventory_has_item_item = true; match.vars._inventory = _inventory; match.vars._item = _item; if ( match.state._something_has_inventory_inventory || plans._something_has_inventory_inventory(match, patterns) && match.state._item_is_class || plans._item_is_class(match, patterns) && ) { return true; } else { return false; } } } plans._item_is_class = function (match, patterns) { for(let [_item, _class] of patterns._item_is_class) { match.state._item_is_class = true; match.vars._item = _item; match.vars._class = _class; if ( match.state._inventory_has_item_item || plans._inventory_has_item_item(match, patterns) && match.state._class_is_conductive || plans._class_is_conductive(match, patterns) && ) { return true; } else { return false; } } } plans._class_is_conductive = function (match, patterns) { for(let [_class] of patterns._class_is_conductive) { match.state._class_is_conductive = true; match.vars._class = _class; if ( match.state._item_is_class || plans._item_is_class(match, patterns) && ) { return true; } else { return false; } } }