diff --git a/src/bee.js b/src/bee.js index 2fd200a..75a8d01 100644 --- a/src/bee.js +++ b/src/bee.js @@ -13,15 +13,12 @@ const HONEY_SOUND = 'honey'; const NECTAR_SOUND = 'nectar'; module.exports = class Bee extends Gatherer { - constructor(maze, config) { + constructor(maze, config = {}) { super(maze, config); + const {level} = config; - this.defaultFlowerColor_ = (config.level.flowerType === 'redWithNectar' ? - 'red' : 'purple'); - if (this.defaultFlowerColor_ === 'purple' && - config.level.flowerType !== 'purpleNectarHidden') { - throw new Error(`bad flowerType for Bee: ${config.level.flowerType}`); - } + this.defaultFlowerColor_ = level && level.flowerType === 'redWithNectar' ? + 'red' : 'purple'; // at each location, tracks whether user checked to see if it was a flower or // honeycomb using an if block diff --git a/src/subtype.js b/src/subtype.js index 05f290c..14a9c31 100644 --- a/src/subtype.js +++ b/src/subtype.js @@ -34,13 +34,12 @@ const TILE_SHAPES = { const RANDOM_TILE_RATE = 0.2; module.exports = class Subtype extends EventEmitter { - constructor(maze, config) { + constructor(maze, {skin, level} = {}) { super(); this.maze_ = maze; - this.skin_ = config.skin; - this.level_ = config.level; - this.startDirection = config.level.startDirection; + this.skin_ = skin; + this.startDirection = level ? level.startDirection : 0; } /** diff --git a/test/unit/bee.test.js b/test/unit/bee.test.js index be1ad5a..d802764 100644 --- a/test/unit/bee.test.js +++ b/test/unit/bee.test.js @@ -1,8 +1,10 @@ +/* global jest, describe, it, expect */ + import Bee from '../../src/bee'; -import BeeCell from '../../src/beeCell'; +import BeeCell, {FeatureType} from '../../src/beeCell'; import MazeMap from '../../src/mazeMap'; -var baseLevel = { +const baseLevel = { honeyGoal: 1, map: [ [0] @@ -15,30 +17,6 @@ var baseLevel = { }; describe("Bee", function () { - it("fails if no flowerType", function () { - var maze = {}; - var config = { - level: baseLevel - }; - delete config.level.flowerType; - expect(() => { - new Bee(maze, config); - }).toThrowError(/bad flowerType for Bee/); - }); - - - it("fails if invalid flowerType", function () { - var maze = {}; - var config = { - level: Object.assign(baseLevel, { - flowerType: 'invalid' - }) - }; - expect(() => { - new Bee(maze, config); - }).toThrowError(/bad flowerType for Bee/); - }); - describe("isRedFlower", function () { /** * Shim a 1x1 maze with the given values and validate that we get the @@ -77,4 +55,33 @@ describe("Bee", function () { validate('purpleNectarHidden', 'FC', 1, false, 'overriden cloud'); }); }); + + describe('getting nectar', () => { + let bee; + + it('builds the map', () => { + const map = new MazeMap([ + [new BeeCell(1, FeatureType.FLOWER, 2)], + ]); + + bee = new Bee({ + map, + pegmanX: 0, + pegmanY: 0, + }); + + const flowerEmptySpy = jest.fn(); + bee.on('flowerEmpty', flowerEmptySpy); + bee.reset(); + expect(bee.getCell(0, 0).isFlower()).toEqual(true); + + // Can get nectar twice. + expect(bee.tryGetNectar()).toEqual(true); + expect(bee.tryGetNectar()).toEqual(true); + + // Getting nectar again returns false, and emits a "flowerEmpty" event. + expect(bee.tryGetNectar()).toEqual(false); + expect(flowerEmptySpy).toHaveBeenCalledTimes(1); + }) + }); });