From f2765e05b052dd0638373b80bc4e7b1d11bef879 Mon Sep 17 00:00:00 2001 From: Scott Erickson Date: Thu, 18 Sep 2014 11:04:16 -0700 Subject: [PATCH] Added some explanations for the SpriteBoss test setup. --- test/app/lib/surface/SpriteBoss.spec.coffee | 51 +++++++++++++++------ 1 file changed, 38 insertions(+), 13 deletions(-) diff --git a/test/app/lib/surface/SpriteBoss.spec.coffee b/test/app/lib/surface/SpriteBoss.spec.coffee index dede862b2..e6abea2c3 100644 --- a/test/app/lib/surface/SpriteBoss.spec.coffee +++ b/test/app/lib/surface/SpriteBoss.spec.coffee @@ -21,21 +21,31 @@ describe 'SpriteBoss', -> canvas = $('') camera = new Camera(canvas) + # Create an initial, simple world with just trees world = new World() world.thangs = [ - {id: 'Tree 1', spriteName: 'Tree 1', exists: true, pos: {x:4, y:0}, action: 'idle', health: 20, maxHealth: 20, rotation: Math.PI/2, acts: true } - {id: 'Tree Will Disappear', spriteName: 'Tree 1', exists: true, pos: {x:2, y:0}, action: 'idle', health: 20, maxHealth: 20, rotation: Math.PI/2, acts: true } + # Set trees side by side with different render strategies + {id: 'Tree 1', spriteName: 'Tree 1', exists: true, pos: {x:10, y:-8}, action: 'idle', health: 20, maxHealth: 20, rotation: Math.PI/2, acts: true } + {id: 'Tree 2', spriteName: 'Full Render Tree', exists: true, pos: {x:8, y:-8}, action: 'idle', health: 20, maxHealth: 20, rotation: Math.PI/2, acts: true } + + # Include a tree whose existence will change so we can test removing sprites + {id: 'Tree Will Disappear', spriteName: 'Tree 1', exists: true, pos: {x:0, y:0}, action: 'idle', health: 20, maxHealth: 20, rotation: Math.PI/2, acts: true } ] world.thangMap = {} world.thangMap[thang.id] = thang for thang in world.thangs - thangTypes = [treeThangType, ogreMunchkinThangType, ogreFangriderThangType] + # Set up thang types. Mix renderStrategies. + fullRenderOgreMunchkinThangType = ogreMunchkinThangType.clone() + fullRenderOgreMunchkinThangType.set({name:'Full Render Ogre', slug:'full-render-ogre'}) + fullRenderTreeThangType = treeThangType.clone() + fullRenderTreeThangType.set({name:'Full Render Tree', slug:'full-render-tree'}) ogreMunchkinThangType.set('renderStrategy', 'container') ogreFangriderThangType.set('renderStrategy', 'container') treeThangType.set('renderStrategy', 'container') + thangTypes = [treeThangType, ogreMunchkinThangType, ogreFangriderThangType, fullRenderOgreMunchkinThangType, fullRenderTreeThangType] + # Build the Stage and SpriteBoss. window.stage = stage = new createjs.Stage(canvas[0]) - options = { camera: camera surfaceLayer: stage @@ -45,32 +55,47 @@ describe 'SpriteBoss', -> } window.spriteBoss = spriteBoss = new SpriteBoss(options) + defaultLayer = spriteBoss.spriteLayers.Default defaultLayer.buildAsync = false # cause faster + + # Don't have the layer automatically draw for move_fore, instead have it notified from WebGLSprites that + # this animation or its containers are needed. +# defaultLayer.setDefaultActions(_.without defaultLayer.defaultActions, 'move_fore') + + # Render the simple world with just trees spriteBoss.update(true) - defaultLayer.once 'new-spritesheet', -> + + # Now make the world a little more complicated. world.thangs = world.thangs.concat [ - # four cardinal ogres - {id: 'Ogre N', spriteName: 'Ogre Munchkin M', exists: true, pos: {x:0, y:8}, action: 'move', health: 10, maxHealth: 10, rotation: -Math.PI/2, acts: true, scaleFactorX: 2 } - {id: 'Ogre W', spriteName: 'Ogre Munchkin M', exists: true, pos: {x:-8, y:0}, action: 'move', health: 5, maxHealth: 10, rotation: 0, acts: true, scaleFactorY: 2 } - {id: 'Ogre E', spriteName: 'Ogre Munchkin M', exists: true, pos: {x:8, y:0}, action: 'move', health: 5, maxHealth: 10, rotation: Math.PI, acts: true, alpha: 0.5, scaleFactorY: 3, scaleFactorX: 3 } + # four cardinal ogres, to test movement rotation and placement around a center point. + {id: 'Ogre N', spriteName: 'Ogre Munchkin M', exists: true, pos: {x:0, y:8}, action: 'move', health: 10, maxHealth: 10, rotation: -Math.PI/2, acts: true, scaleFactorX: 1.5 } + {id: 'Ogre W', spriteName: 'Ogre Munchkin M', exists: true, pos: {x:-8, y:0}, action: 'move', health: 5, maxHealth: 10, rotation: 0, acts: true, scaleFactorY: 1.5 } + {id: 'Ogre E', spriteName: 'Ogre Munchkin M', exists: true, pos: {x:8, y:0}, action: 'move', health: 5, maxHealth: 10, rotation: Math.PI, acts: true, alpha: 0.5 } {id: 'Ogre S', spriteName: 'Ogre Munchkin M', exists: true, pos: {x:0, y:-8}, action: 'move', health: 5, maxHealth: 10, rotation: Math.PI/2, acts: true } - # ogres overlapping + # Set ogres side by side with different render strategies + {id: 'FROgre', spriteName: 'Full Render Ogre', exists: true, pos: {x:-10, y:-8}, action: 'idle', health: 10, maxHealth: 10, rotation: 0, acts: true } + {id: 'NotFROgre', spriteName: 'Ogre Munchkin M', exists: true, pos: {x:-8, y:-8}, action: 'idle', health: 10, maxHealth: 10, rotation: 0, acts: true } + + # A line of ogres overlapping to test child ordering {id: 'Ogre 1', spriteName: 'Ogre Munchkin M', exists: true, pos: {x:-14, y:0}, action: 'die', health: 5, maxHealth: 10, rotation: 0, acts: true } {id: 'Ogre 2', spriteName: 'Ogre Munchkin M', exists: true, pos: {x:-13.5, y:1}, action: 'die', health: 5, maxHealth: 10, rotation: 0, acts: true } {id: 'Ogre 3', spriteName: 'Ogre Munchkin M', exists: true, pos: {x:-13, y:2}, action: 'die', health: 5, maxHealth: 10, rotation: 0, acts: true } {id: 'Ogre 4', spriteName: 'Ogre Munchkin M', exists: true, pos: {x:-12.5, y:3}, action: 'die', health: 5, maxHealth: 10, rotation: 0, acts: true } - + + # Throw in a ThangType that contains nested MovieClips {id: 'Fangrider 1', spriteName: 'Ogre Fangrider', exists: true, pos: {x:8, y:8}, action: 'move', health: 20, maxHealth: 20, rotation: 0, acts: true } ] - _.find(world.thangs, {id: 'Tree Will Disappear'}).exists = false + + _.find(world.thangs, {id: 'Tree Will Disappear'}).exists = false world.thangMap[thang.id] = thang for thang in world.thangs spriteBoss.update(true) defaultLayer.once 'new-spritesheet', -> done() -# showMe() + + showMe() # Uncomment to display this world when you run any of these tests. beforeEach (done) -> init(done)