Karma Complete

Week-long test coverage montage Right into the danger zone Risin’ up to the challenge of our rival Oh darlin’ my heart’s on fire Lose your blues, everybody cut footloose Key takeaways beforeEach does not reset any spy that it sets. Will need to find another approach if this is needed. I think setting testObj from a copy of the target object, then spying on that is enough to avoid problems, but there are instances where spy is being set on the nested test objects directly, which will likely affect the tests for those objects at some point....

March 29, 2018

Stabilizing Tests for Karma Coverage

Loading the canvas libs Now that Karma is all wired up, I can start poking at the tests. The first problem I need to fix involves canvas-libs. knobsAndLevers uses the supporting object in canvas-libs to set a randomized initial spawn interval for the creatures. The usage is: 1 this.spider.initialInterval = supporting.getRandom(this.spider.interval.min, this.spider.interval.max); But knobsAndLevers.init() fails, because supporting is not available: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 $ node_modules/....

March 28, 2018

Test Coverage with Karma

Adding the Karma Test Coverage Tool I got tired of flailing around in the dark, so after turning on the lights, I started looking into test coverage tools. A few sources recommended Karma, so I went for it. It’s good (sorry). Code Coverage of Jasmine Tests using Istanbul and Karma Capturing browser with Karma 1 npm install karma karma-coverage My config: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 module....

March 27, 2018

Canvas Tech Debt

Addressing some of the technical debt. Not very exciting. So bullet lists. DID: Set up Jasmine tests in Robotron (8 specs, 0 failures) Set up Jasmine tests in canvas-libs (4 specs, 0 failures) Moved supporting.js stuff to canvas-libs for both Centipede and Robotron Moved the Sound object from sound.js to canvas-libs for both Centipede and Robotron Commits Centipede 6fbcfff e5fab76 2155216 Robotron 4c0c571 58f992f Canvas Libs...

March 15, 2018

Twinstick Firing in Robotron

Planning More gamepad updates today. This time, specifically for Robotron. I plan to integrate the controls pausing and twinstick shooting. Pause updates Updated pause to handle both spacebar and the + key. I should probably find an XBox controller and see if the indices of those buttons are the same as the X-input (they should be; the indices don’t change between D- and X-input, only the dPad location does, and X-input includes a few extra buttons....

March 14, 2018

Gamepad Controls Library Updates

Updating the gamepad library Today, I’m focusing on the controls library. Goal: add right stick capturing without breaking Centipede or Robotron. Robotron needs the right stick to handle firing. I could just leave controls.js alone and update it’s functionality in the game itself, like this: 1 2 3 var theControls = controls; Then add stuff to controls like this: 1 2 3 theControls.aNewThing = newStuff; Or override stuff like this:...

March 13, 2018

Nerding Out on Robotron

Pre-Feature Cleanup of Joust and Robotron Over the weekend, I made a serious dent in the technical debt for the other canvas games, Joust and Robotron. Before I did any of that, I poked at Joust and attempted to find the upper limit on the number of simultaneous player objects (it’s about 200 before the slowdown is noticeable)! Added more colors to make it fun! Then I spent the better part of Saturday converting the mess of functions of both games into objects....

March 12, 2018

Fly Droppings and Pausing

Demo Planning Adding: mushroom drops to the fly creature, and pause toggling with the gamepad. Fly Droppings Added mushroom generation to the falling bugs (the flies). This was straightforward. First, I set up an interval, and added a new function to intervalCreatures: dropMushrooms. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 dropMushrooms(creature) { if (creature != 'flies' || !everyinterval(knobsAndLevers[creature].mushroomCreateInterval)) { return; }; this.flies.forEach(fly => { if (fly....

March 9, 2018

HTML5 Canvas Gamepad Movement

Planning Yesterday, I left off with the gamepad controls working, but only in a way that basically broke all of the challenge of the game. The change allowed the player to move outside the defined player boundaries, which meant they could shoot from below the canvas with impunity. Hurray! Today, I’m going to fix that. Adding a Layer of Abstraction First, directional control functions were moved from gamePiece to controls. Another layer of abstraction was added to handle getActiveDirection checking....

March 8, 2018

Canvas Gamepad Movement

Session Planning I see a potential problem in the controls if more than one controller button is needed simultaneously. The isFiring returns a boolean on the FIRST button push it detects, and would ignore any additional entries in that list. This means if I press A, it will do the action for A, but then if I keep pressing A, and also press B, the action for A+B would not get executed; only the action for A would....

March 7, 2018