From fb30f07f2e86762e3f1f3676dab8d82b59cedb57 Mon Sep 17 00:00:00 2001 From: Scott Erickson Date: Wed, 24 Sep 2014 18:42:04 -0700 Subject: [PATCH] Re-enabled effect marks. --- app/lib/surface/CocoSprite.coffee | 85 +++++++++++---------- app/lib/surface/LayerAdapter.coffee | 3 +- app/lib/surface/Mark.coffee | 17 ++++- app/lib/surface/SingularSprite.coffee | 2 +- test/app/fixtures/curse.thang.type.js | 1 + test/app/lib/surface/SpriteBoss.spec.coffee | 4 +- 6 files changed, 63 insertions(+), 49 deletions(-) create mode 100644 test/app/fixtures/curse.thang.type.js diff --git a/app/lib/surface/CocoSprite.coffee b/app/lib/surface/CocoSprite.coffee index 9c20eb630..2f5f9724f 100644 --- a/app/lib/surface/CocoSprite.coffee +++ b/app/lib/surface/CocoSprite.coffee @@ -31,7 +31,6 @@ module.exports = CocoSprite = class CocoSprite extends CocoClass thang: null camera: null showInvisible: false - async: true possessed: false flipped: false @@ -109,6 +108,7 @@ module.exports = CocoSprite = class CocoSprite extends CocoClass @imageObject = newImageObject @configureMouse() @imageObject.on 'animationend', @playNextAction + @trigger 'new-image-object', @imageObject ################################################## # QUEUEING AND PLAYING ACTIONS @@ -513,24 +513,26 @@ module.exports = CocoSprite = class CocoSprite extends CocoClass createMarks: -> return unless @options.camera if @thang - allProps = [] - allProps = allProps.concat (@thang.hudProperties ? []) - allProps = allProps.concat (@thang.programmableProperties ? []) - allProps = allProps.concat (@thang.moreProgrammableProperties ? []) + # TODO: Add back ranges +# allProps = [] +# allProps = allProps.concat (@thang.hudProperties ? []) +# allProps = allProps.concat (@thang.programmableProperties ? []) +# allProps = allProps.concat (@thang.moreProgrammableProperties ? []) +# +# for property in allProps +# if m = property.match /.*(Range|Distance|Radius)$/ +# if @thang[m[0]]? and @thang[m[0]] < 9001 +# @ranges.push +# name: m[0] +# radius: @thang[m[0]] +# +# @ranges = _.sortBy @ranges, 'radius' +# @ranges.reverse() +# +# @addMark range.name for range in @ranges - for property in allProps - if m = property.match /.*(Range|Distance|Radius)$/ - if @thang[m[0]]? and @thang[m[0]] < 9001 - @ranges.push - name: m[0] - radius: @thang[m[0]] - - @ranges = _.sortBy @ranges, 'radius' - @ranges.reverse() - - @addMark range.name for range in @ranges - - @addMark('bounds').toggle true if @thang?.drawsBounds + # TODO: add back bounds +# @addMark('bounds').toggle true if @thang?.drawsBounds @addMark('shadow').toggle true unless @thangType.get('shadow') is 0 updateMarks: -> @@ -550,30 +552,29 @@ module.exports = CocoSprite = class CocoSprite extends CocoClass @updateEffectMarks() if @thang?.effectNames?.length or @previousEffectNames?.length updateEffectMarks: -> - # TODO: get effect marks working again -# return if _.isEqual @thang.effectNames, @previousEffectNames -# return if @stopped -# for effect in @thang.effectNames -# mark = @addMark effect, @options.floatingLayer, effect -# mark.statusEffect = true -# mark.toggle 'on' -# mark.show() -# -# if @previousEffectNames -# for effect in @previousEffectNames -# continue if effect in @thang.effectNames -# mark = @marks[effect] -# mark.toggle false -# -# if @thang.effectNames.length > 1 and not @effectInterval -# @rotateEffect() -# @effectInterval = setInterval @rotateEffect, 1500 -# -# else if @effectInterval and @thang.effectNames.length <= 1 -# clearInterval @effectInterval -# @effectInterval = null -# -# @previousEffectNames = @thang.effectNames + return if _.isEqual @thang.effectNames, @previousEffectNames + return if @stopped + for effect in @thang.effectNames + mark = @addMark effect, @options.floatingLayer, effect + mark.statusEffect = true + mark.toggle 'on' + mark.show() + + if @previousEffectNames + for effect in @previousEffectNames + continue if effect in @thang.effectNames + mark = @marks[effect] + mark.toggle false + + if @thang.effectNames.length > 1 and not @effectInterval + @rotateEffect() + @effectInterval = setInterval @rotateEffect, 1500 + + else if @effectInterval and @thang.effectNames.length <= 1 + clearInterval @effectInterval + @effectInterval = null + + @previousEffectNames = @thang.effectNames rotateEffect: => effects = (m.name for m in _.values(@marks) when m.on and m.statusEffect and m.mark) diff --git a/app/lib/surface/LayerAdapter.coffee b/app/lib/surface/LayerAdapter.coffee index fd003cd4d..336104885 100644 --- a/app/lib/surface/LayerAdapter.coffee +++ b/app/lib/surface/LayerAdapter.coffee @@ -57,6 +57,7 @@ module.exports = LayerAdapter = class LayerAdapter extends CocoClass super() options ?= {} @name = options.name ? 'Unnamed' + @defaultSpriteType = if @name is 'Default' then 'segmented' else 'singular' @customGraphics = {} @layerPriority = options.layerPriority ? 0 @transformStyle = options.transform ? LayerAdapter.TRANSFORM_CHILD @@ -248,7 +249,7 @@ module.exports = LayerAdapter = class LayerAdapter extends CocoClass actionNames = (bundle.actionName for bundle in bundleGrouping) args = [thangType, colorConfig, actionNames, builder] if thangType.get('raw') - if thangType.get('spriteType') is 'segmented' + if (thangType.get('spriteType') or @defaultSpriteType) is 'segmented' @renderSegmentedThangType(args...) else @renderSingularThangType(args...) diff --git a/app/lib/surface/Mark.coffee b/app/lib/surface/Mark.coffee index 43113586e..f53349bad 100644 --- a/app/lib/surface/Mark.coffee +++ b/app/lib/surface/Mark.coffee @@ -32,6 +32,8 @@ module.exports = class Mark extends CocoClass onLayerMadeSpriteSheet: -> return unless @mark + return @update() if @markSprite + # need to update the mark display object manually... @mark = null @build() @layer.addChild @mark @@ -43,10 +45,16 @@ module.exports = class Mark extends CocoClass @on = to delete @toggleTo if @on - @layer.addChild @mark - @layer.updateLayerOrder() + if @markSprite + @layer.addCocoSprite(@markSprite) + else + @layer.addChild @mark + @layer.updateLayerOrder() else - @layer.removeChild @mark + if @markSprite + @layer.removeCocoSprite(@markSprite) + else + @layer.removeChild @mark if @highlightTween @highlightDelay = @highlightTween = null createjs.Tween.removeTweens @mark @@ -221,10 +229,11 @@ module.exports = class Mark extends CocoClass return @listenToOnce(@thangType, 'sync', @onLoadedThangType) if not @thangType.loaded CocoSprite = require './CocoSprite' # don't bother with making these render async for now, but maybe later for fun and more complexity of code - markSprite = new CocoSprite @thangType, {async: false} + markSprite = new CocoSprite @thangType markSprite.queueAction 'idle' @mark = markSprite.imageObject @markSprite = markSprite + @listenTo @markSprite, 'new-image-object', (@mark) -> loadThangType: -> name = @thangType diff --git a/app/lib/surface/SingularSprite.coffee b/app/lib/surface/SingularSprite.coffee index 3bbb19928..bfa7a9d38 100644 --- a/app/lib/surface/SingularSprite.coffee +++ b/app/lib/surface/SingularSprite.coffee @@ -2,7 +2,7 @@ SpriteBuilder = require 'lib/sprites/SpriteBuilder' floors = ['Dungeon Floor', 'Indoor Floor', 'Grass', 'Grass01', 'Grass02', 'Grass03', 'Grass04', 'Grass05', 'Goal Trigger', 'Obstacle'] -module.exports = class WebGLSprite extends createjs.Sprite +module.exports = class SingularSprite extends createjs.Sprite childMovieClips: null constructor: (@spriteSheet, @thangType, @spriteSheetPrefix, @resolutionFactor=SPRITE_RESOLUTION_FACTOR) -> diff --git a/test/app/fixtures/curse.thang.type.js b/test/app/fixtures/curse.thang.type.js new file mode 100644 index 000000000..377e211a7 --- /dev/null +++ b/test/app/fixtures/curse.thang.type.js @@ -0,0 +1 @@ +module.exports = {"_id":"53190ce07fe055000063e031","index":true,"slug":"curse","kind":"Mark","name":"Curse","creator":"5162fab9c92b4c751e000274","original":"53024d18a6efdd32359c5365","__v":0,"raw":{"shapes":{"0":{"t":[23.7,14.2],"p":"AgwC4QgIAAgFgEQgGgCgHgJQgKgMgTgiQgcgDgRgIQgUgJgGgOQgGgJAAgKQABgUAPgUIAAgZQAAg6ARgrQAPgkAbgWQAlgdA6AAIASABQAqAAAcALQAwATAXA0QARAqAAA7IgBAfQAPATAAAUQAAALgEAIQgFAKgLAHQgTANglADQgMAWgJANQgJAMgHAHQgGADgHAAIgFAAIgHgDIgCgFIgEgIQgDgIgBgLIgCgQIg4AAIAAADIgDAaQgBAJgEAHQgCAFgEADQgEACgDAAgAhIiXQgmASgTAsQgQApAAA1IABAbIABACIAAACIgDADQgLAOgCAMIgBAFQAAAFADAEQADAGAGAEQAGAEAJADQAPAFAWADIAFAAIADAEIAKASIAOAYQAGAHAEAEIADACIABAAIACgNIABgQIABgKIAAgDIAAgNIBeABIABAJIAAAEIABAJQAAAJADANIADAGIABAAIAEgGQAIgIASggIACgEIABgDIACgBIAEAAQAagDAQgGIADgBQAMgGAFgIQADgFgBgFIAAAAQAAgOgNgQIgDgEIABgJIABgbQAAg2gQgnQgOgfgXgSQgfgVg2gBIgSAAQgjAAgbAMg","fc":"#343A3C"},"1":{"t":[24.2,11.3],"p":"AAqAcQgDgLgGgYQgGgbACgCQABgCAVgBQAWgCAEADQAKAFAOAiQAOAmgRABIgSABQghAAgFgNgAhiAoQgQgBAOgmQAOgiAKgFQAEgDAWACQAVABABACQACACgGAbQgGAYgDALQgFANgiAAIgSgBg","fc":"#272B2D"},"2":{"t":[23.9,22.3],"p":"AhcAXIgGAAQgWgDgPgFIAQgBQAugGApghIACgCIAAADIgBAQIgCABIg5AigAAjgHIgCgBIgBgTIADADQApAgAtAGIAPABQgQAGgZADIgFAAIgBABg","fc":"#5F686D"},"3":{"t":[24.1,12.9],"p":"AANBQQgKgLgDgIQgEAIgKALIgHAHIgEADIgEACQgFAAgBgHIAAAAIACgBIABgQIAHgVQALgcANgDIAAgBIABABIAAgBIAAABQANADALAcIAGASIABATIACABQAAAHgFAAQgFAAgKgMgABAAdQgYgFgDgHQgKgVgGgZQgDgOgBgLQgBgaAPgDQAegIAQABQAUABAKARQAOAbAGAjQADALgBAKQgBAUgPABIgNABQgSAAgSgEgAA0g3QgVABgBACQgCACAGAbQAGAYADALQAGAQAygEQARgBgOgkQgOgkgKgFQgDgCgJAAIgOABgAhwAgQgPgBgBgVQgBgJADgLQAGgjAOgbQAKgRAVgBQAPgBAeAIQAPADgBAaQgBALgDAOQgGAZgKAVQgDAHgYAFQgTAEgRAAIgNgBgAhLg2QgKAFgOAkQgOAkAQABQAzAEAGgQQADgLAGgYQAGgbgCgCQgBgCgVgBIgOgBQgKAAgCACg","fc":"#42484C"},"4":{"t":[23.7,14],"p":"AhACXIgPgYIgDgMQAEgTAPAGQAQAFABAMIAAAHIgBAKIgCAMQgDAMgCACQgEgDgGgIgAA1CUQgDgRABgMQABgMAPgFQAQgFAEARQgTAggHAJIgEAFIgEgMgAgpBkIgEgLIANgDIALgIIAEgDIAOgMIADAAQAGAAAHAIQALANAUADIACAPgAifBCQACgMALgOIADgDIgBgCIAIgHIAGgDQAGgCADABIADAAQgHgHAAgRQABAUAPABQAYACAZgGQAZgFADgHQAKgVAFgYQAEgPAAgKQABAMgFAUQgFAYgKAWQgDAFgPAFIALgBQAPgBgOATQgkAUgYAHQgWAIgSAAIgBAAQgSAAgCgJgACRBLQgSAAgWgIQgPgEgYgMIgVgLQgEgFgBgEQgDgKAJABIAMABQgPgFgDgFQgKgWgFgYQgFgUABgMQAAAKAEAPQAFAYAKAVQADAHAZAFQAZAGAYgCQAPgBABgUQABARgHAHIABAAQAEgBALAFIACACIgBAJIADADQANARAAAOQgFACgJAAIgBAAgAAhA2IgGgTQgKgbgOgDIAAgBIgBAAIgBAAIAAABQgMADgLAbIgGAWIAAgDIgCACQgBgPAHgeIAMgnQALgSAKALQAHAGAJAWQAHAMADAdQACAPAAAIIgEgDgAhuhcQAAgIAHgRQAOghAvgJQAXgEATACQA0gBAgAVQAVANAKATQAEAJgNgDIgWgHQgHgCgnAGIglAHQg6gLgRABQgWACgKAPQgCAEgBAAQgBAAAAAAQAAgBAAAAQAAgBAAAAQAAgBAAgBg","fc":"#9FB6C1"},"5":{"t":[23.7,14.1],"p":"AgzCkIgDgCQADgDACgMIACgMIgBAPIgCAOgAA1CaQgDgOAAgJIgBgJIAAgDIgBgJIhegBIAAAMIAAAEIAAgHQgBgMgQgFQgPgFgEASIAEANIgKgSIA5gkIAAAAQAAAHAFAAIAFgDIgKAIIgOADIAFAMIBWABIgCgPQgUgDgLgMQgHgJgGAAIgCABIgPAMIAHgIQAKgKACgJQAEAJAKAKQALANAFAAQAFAAAAgHIA1AiIgBADIgCADQgEgRgQAFQgPAFgBAMQgBAMADARIAEAMIgBABgAB7BfQgtgGgpghQAAgIgCgPQgDgdgHgMQgJgVgHgHQgJgLgLASIgMAoQgIAdABAPQgpAigvAGIgPACQgJgDgGgEQgGgEgDgGQgDgFAAgEIABgGQACAJAUAAQARAAAWgIQAYgHAkgUQAOgTgOABIgMABQAQgFACgFQAKgVAFgZQAFgUAAgMQABgagQgDQgdgJgQABQgUACgKARQgPAagFAjQgDAOABAJQgBAQAHAHIgDAAQgDAAgFABIgHADIgHAHIgBgCIgBgbQAAg1AQgoQATgtAmgRQAbgNAjAAIASABQA2AAAfAWQAXASAOAeQAQAnAAA3IgBAbIgCgCQgLgFgDABIgCAAQAHgHgBgQQABgJgDgOQgGgjgOgaQgKgRgVgCQgQgBgdAJQgPADABAaQgBAMAFAUQAFAZALAVQACAFAQAFIgNgBQgJAAADAJQACAFADAEIAVALQAYAMAPAEQAWAIASAAQAKAAAFgCIAAAAQABAFgDAFQgFAIgMAFIgDACIgPgCgAgqifQguAIgPAhQgGARgBAIQgBAIAFgIQAKgPAWgCQASgBA5ALIAmgGQAngHAGACIAWAHQAOADgFgJQgKgTgUgNQghgVg0ACIgNgBQgOAAgPADg","fc":"#788187"},"6":{"t":[25.2,16.2],"p":"AjjCgIgGgeIgWgUIgDgEIgBgIIACgYIAFgWIBjgWIEWiXIAigyIAHAAQAUAAAMADQAHABAGADQAEADACADQAGAIADAPIABAKIAhArIgqAnIgEADIgFABIgHAAIgWABIgsABIj0CCIhEBPgACPhuIgBADIkgCcIhZAUIgBAIQgDANAAAIIAZAWIADAQIABAHIAaAHIA9hHIABgBID8iHIADAAIBAgBIAKgBIADgCIAOgNIAKgKIgagiIgBgDIAAgDIgBgHQgCgLgDgEIgDgCIgLgCIgRgBg","fc":"#343A3C"},"7":{"t":[24.7,14.9],"p":"AjICGQgFgGAKgLIALgKQAggNADAHQACAEgMAMQgKAKgLAGQgHAEgFAAQgFAAgDgDgAjfBwQgEgBAAgJQgBgJACgFQACgDAsgLIAsgJQAGgEAKAAQALAAgGAGQgDAEgOAGQgPAIgHAFQgJAHgdAIQgYAHgGAAIgBAAgACYhbQABgFAMgSIAOgVQAMgCAHAHQAGAIgBANQgBALgYAGIgIACIgYATQgIAGhrA5IhwA7QgNAIgdABgADMg6IgTgCQgTgCgHgDQgHgEAEgEQADgEAHgCIAvgLQANAAACASQABAIgJAEIgDABQgFABgFAAIgDAAg","fc":"#9FB6C1"},"8":{"t":[25.8,19.9],"p":"AjYBqIgBgHIAGADQAMACAMgKQASgQAggtIEKiMIAvAAIARgBIADAAQAFAAAFgBIAMgDIgOAOIgDACIgLABIhAABIgCAAIj8CHIgBABIg9BHg","fc":"#5F686D"},"9":{"t":[24.9,15.5],"p":"AjKCRIgGgCIgDgRIgZgWQAAgIADgNIABgIIBZgTIEgidIABgDIAbgpIARABIALADIADABQADAFACAKIABAIIAAADIABACIAaAjIgKAJIgLACIACgBQAJgDAAgIQgCgTgOAAIgvAMQgGACgDADQgEAFAGADQAIADASADIATACIgRABIgvAAIkKCLQggAtgSAQQgKAJgKAAIgEgBgAi5BkIgLAKQgLALAFAGQAGAHAOgHQALgGALgLQALgLgCgFQgBgCgEAAQgJAAgUAIgAiKA6IgsAKQgsAKgCAEQgCAFABAIQABAKADAAQAFABAbgIQAdgIAIgHQAHgFAQgHQANgHAEgEQAFgFgLgBQgKAAgGAEgACxiOIgOAWQgLASgCAFIkTCXQAdgCANgHIBwg8QBrg5AIgGIAYgSIAIgCQAYgHABgLQABgNgFgHQgGgGgJAAIgFAAg","fc":"#788187"},"10":{"t":[24.8,16.6],"p":"ABrBrIkZiWIg7AAIgDgFQgKgPgFgOQgEgIAAgHQAAgFACgDQADgJALgKIAHgGIATg0IAJACIAjAIIAMADIAGAEIACACIAqA+IDzCEIBmANIASAyIgWAUIgEAeQgBAEgCACIgDACIgFAEIgnARgAB3BbIBBBAIATgJIAHgDIAFgiIASgQIgJgaIhdgMIgBAAIj7iJIgmg2IgGgJIABAAIgCgBIABABIgDgBIgggIIgPApIgCABIgCACIgGAFQgGAGgDAEIgBADIACAHIAFALIAGALIAxAAIADgBg","fc":"#343A3C"},"11":{"t":[24.3,15.5],"p":"AC3CGQgIgEgPgQIgTgUQgEgFALADQAJADAGADIAQAJQAQAKABAGQABAJgDADQgBABAAAAQgBAAAAAAQgBABAAAAQgBAAAAAAQgDAAgEgDgAC2BmIlAijQgRgKABgEQABgEgOgQQgTgLgFgHQgFgFABgJIADgHQAEgDAMACQAMACAEAEQAFAEASAlIAHAOIEMCQIBMAOQANACgGAWQgBADgGAAQgKAAgWgJgAjThDQgFgCgCgCQgDgEAAgIQgBgHALgEIALgDQAKgBATAZQAFAHgUABIgKAAQgKAAgFgCg","fc":"#9FB6C1"},"12":{"t":[23.2,19.6],"p":"ACHA9IkhibIgDABIgwAAIgHgKIgFgMIgBgHIABgDIACAIQAFAMAPAEQAXAHAcgJIEhCdIAjAhQAZAVAOAJIgSAIg","fc":"#5F686D"},"13":{"t":[24.7,16.2],"p":"AClB5IgjghIkiieQgcAKgXgHQgOgEgFgMIgDgIQADgEAGgGIAGgFIACgCIACgBIAPgpIAgAIIADABIgBgBIACABIgBAAIAGAJIAmA2ID7CJIABAAIBdAMIAJAaIgSAQIgFAiIgIAEQgOgJgYgVgACIBXIATAUQAQAQAHAEQAIAFADgEQADgDgBgJQgBgGgQgKIgQgJQgFgDgKgDIgGgBQgBAAAAAAQgBABAAAAQAAAAAAABQABAAAAABgAjFiNIgCAHQgBAJAEAFQAGAHASALQAPAQgBAEQgBAEARAKIE/CjQAlAQACgKQAGgWgMgCIhMgOIkMiQIgIgOQgSglgEgEQgFgEgLgCIgJgBQgFAAgDACgAjNhoIgLADQgKAEAAAHQABAIACAEQACACAFACQAHADATgBQATgBgFgHQgSgYgKAAIgBAAg","fc":"#788187"}},"containers":{"Boot":{"c":["5","4","3","2","1","0"],"b":[5.6,-4.2,36.2,36.9]},"Bone_1":{"c":["9","8","7","6"],"b":[-0.8,-1,52.1,34.6]},"Bone":{"c":["13","12","11","10"],"b":[-0.7,-1.2,51.3,35.8]}},"animations":{"Cursed_JSCC":{"shapes":[],"containers":[{"bn":"instance","t":[29.1,47.3,1,1,0,0,0,24.7,16.7],"gn":"Bone"},{"bn":"instance_1","t":[33.4,47.3,1,1,0,0,0,25.1,16.4],"gn":"Bone_1"},{"bn":"instance_2","t":[30.9,33.5,1,1,0,0,0,24.2,26.6],"gn":"Boot"}],"animations":[],"tweens":[[{"n":"get","a":["instance"]},{"n":"wait","a":[1]},{"n":"to","a":[{"y":47.8},0]},{"n":"wait","a":[1]},{"n":"to","a":[{"y":48.3},0]},{"n":"wait","a":[1]},{"n":"to","a":[{"y":48.8},0]},{"n":"wait","a":[1]},{"n":"to","a":[{"y":49.3},0]},{"n":"wait","a":[1]},{"n":"to","a":[{"y":49.8},0]},{"n":"wait","a":[1]},{"n":"to","a":[{"regY":16.8,"rotation":-0.8,"x":29.2},0]},{"n":"wait","a":[1]},{"n":"to","a":[{"regY":16.7,"rotation":-1.9},0]},{"n":"wait","a":[1]},{"n":"to","a":[{"rotation":-3.1,"x":29.3},0]},{"n":"wait","a":[1]},{"n":"to","a":[{"regX":24.9,"regY":16.6,"rotation":-4.3,"y":49.7},0]},{"n":"wait","a":[1]},{"n":"to","a":[{"rotation":-3.6,"x":29.4,"y":49.4},0]},{"n":"wait","a":[1]},{"n":"to","a":[{"rotation":-3.1,"x":29.3,"y":49.1},0]},{"n":"wait","a":[1]},{"n":"to","a":[{"rotation":-2.6,"y":48.8},0]},{"n":"wait","a":[1]},{"n":"to","a":[{"rotation":-1.9,"y":48.5},0]},{"n":"wait","a":[1]},{"n":"to","a":[{"regY":16.7,"rotation":-1.3,"y":48.3},0]},{"n":"wait","a":[1]},{"n":"to","a":[{"regY":16.6,"rotation":-0.8,"x":29.2,"y":47.9},0]},{"n":"wait","a":[1]},{"n":"to","a":[{"regY":16.8,"rotation":-0.3,"y":47.7},0]},{"n":"wait","a":[1]},{"n":"to","a":[{"regX":24.7,"regY":16.7,"rotation":0,"x":29.1,"y":47.3},0]},{"n":"wait","a":[1]}],[{"n":"get","a":["instance_1"]},{"n":"wait","a":[1]},{"n":"to","a":[{"y":47.8},0]},{"n":"wait","a":[1]},{"n":"to","a":[{"y":48.3},0]},{"n":"wait","a":[1]},{"n":"to","a":[{"y":48.8},0]},{"n":"wait","a":[1]},{"n":"to","a":[{"y":49.3},0]},{"n":"wait","a":[1]},{"n":"to","a":[{"y":49.8},0]},{"n":"wait","a":[1]},{"n":"to","a":[{"rotation":0.8},0]},{"n":"wait","a":[1]},{"n":"to","a":[{"rotation":1.8},0]},{"n":"wait","a":[1]},{"n":"to","a":[{"rotation":2.8},0]},{"n":"wait","a":[1]},{"n":"to","a":[{"regX":24.9,"rotation":4,"x":33.3},0]},{"n":"wait","a":[1]},{"n":"to","a":[{"rotation":3.3,"y":49.5},0]},{"n":"wait","a":[1]},{"n":"to","a":[{"regX":25,"rotation":2.8,"x":33.4,"y":49.2},0]},{"n":"wait","a":[1]},{"n":"to","a":[{"regX":24.9,"rotation":2.3,"y":48.8},0]},{"n":"wait","a":[1]},{"n":"to","a":[{"rotation":1.8,"x":33.3,"y":48.5},0]},{"n":"wait","a":[1]},{"n":"to","a":[{"rotation":1.3,"y":48.1},0]},{"n":"wait","a":[1]},{"n":"to","a":[{"rotation":0.8,"y":47.9},0]},{"n":"wait","a":[1]},{"n":"to","a":[{"rotation":0.3,"y":47.6},0]},{"n":"wait","a":[1]},{"n":"to","a":[{"regX":25.1,"rotation":0,"x":33.4,"y":47.3},0]},{"n":"wait","a":[1]}],[{"n":"get","a":["instance_2"]},{"n":"wait","a":[1]},{"n":"to","a":[{"y":33.9},0]},{"n":"wait","a":[1]},{"n":"to","a":[{"y":34.3},0]},{"n":"wait","a":[1]},{"n":"to","a":[{"y":34.7},0]},{"n":"wait","a":[1]},{"n":"to","a":[{"y":35.1},0]},{"n":"wait","a":[1]},{"n":"to","a":[{"y":35.5},0]},{"n":"wait","a":[1]},{"n":"to","a":[{"scaleY":0.99,"y":35.6},0]},{"n":"wait","a":[1]},{"n":"to","a":[{"scaleY":0.98},0]},{"n":"wait","a":[1]},{"n":"to","a":[{"scaleY":0.97,"y":35.7},0]},{"n":"wait","a":[1]},{"n":"to","a":[{"regY":26.7,"scaleY":0.96,"y":35.8},0]},{"n":"wait","a":[1]},{"n":"to","a":[{"scaleY":0.96,"y":35.5},0]},{"n":"wait","a":[1]},{"n":"to","a":[{"scaleY":0.97,"y":35.2},0]},{"n":"wait","a":[1]},{"n":"to","a":[{"scaleY":0.97,"y":34.9},0]},{"n":"wait","a":[1]},{"n":"to","a":[{"scaleY":0.98,"y":34.6},0]},{"n":"wait","a":[1]},{"n":"to","a":[{"scaleY":0.98,"y":34.3},0]},{"n":"wait","a":[1]},{"n":"to","a":[{"scaleY":0.99,"y":34.1},0]},{"n":"wait","a":[1]},{"n":"to","a":[{"scaleY":1,"y":33.8},0]},{"n":"wait","a":[1]},{"n":"to","a":[{"regY":26.6,"scaleY":1,"y":33.5},0]},{"n":"wait","a":[1]}]],"graphics":[],"bounds":[3.6,2.5,55.9,62.5],"frameBounds":[[3.6,2.5,55.9,62.5],[3.6,3,55.9,62.6],[3.6,3.4,55.9,62.7],[3.6,3.8,55.9,62.8],[3.6,4.1,55.9,62.9],[3.6,4.5,55.9,63],[3.4,5,56.4,62.9],[3.1,5.4,57,63],[2.8,5.8,57.6,63.2],[2.3,6.1,58.5,63.4],[2.5,5.6,58.1,63.3],[2.6,5.3,57.8,63.2],[2.8,4.8,57.6,63.1],[2.9,4.3,57.3,62.9],[3.1,3.8,57.1,62.9],[3.2,3.4,56.7,62.8],[3.4,2.9,56.4,62.7],[3.6,2.5,55.9,62.5]]}}},"actions":{"idle":{"animation":"Cursed_JSCC","framerate":20},"portrait":{"animation":"Cursed_JSCC","scale":1.5,"positions":{"registration":{"x":-5,"y":0}}}},"scale":0.3,"positions":{"registration":{"x":-30,"y":-70},"aboveHead":{"x":0,"y":-80},"mouth":{"x":0,"y":-30},"torso":{"x":0,"y":-50}},"commitMessage":"Renamed to curse.","parent":"5302534027471514685d5433","created":"2014-03-07T00:03:44.450Z","version":{"isLatestMinor":true,"isLatestMajor":true,"minor":3,"major":0}} diff --git a/test/app/lib/surface/SpriteBoss.spec.coffee b/test/app/lib/surface/SpriteBoss.spec.coffee index a92bd9b7b..755e89cb6 100644 --- a/test/app/lib/surface/SpriteBoss.spec.coffee +++ b/test/app/lib/surface/SpriteBoss.spec.coffee @@ -6,6 +6,7 @@ ThangType = require 'models/ThangType' treeData = require 'test/app/fixtures/tree1.thang.type' munchkinData = require 'test/app/fixtures/ogre-munchkin-m.thang.type' fangriderData = require 'test/app/fixtures/ogre-fangrider.thang.type' +curseData = require 'test/app/fixtures/curse.thang.type' describe 'SpriteBoss', -> spriteBoss = null @@ -82,7 +83,7 @@ describe 'SpriteBoss', -> {id: 'Ogre N', spriteName: 'Segmented Munchkin', exists: true, shape: 'disc', depth: 2, pos: {x:0, y:8, z: 1}, action: 'move', health: 10, maxHealth: 10, rotation: -Math.PI/2, acts: true, scaleFactorX: 1.5, hudProperties: ['health'] } {id: 'Ogre W', spriteName: 'Segmented Munchkin', exists: true, shape: 'disc', depth: 2, pos: {x:-8, y:0, z: 1}, action: 'move', health: 8, maxHealth: 10, rotation: 0, acts: true, scaleFactorY: 1.5, hudProperties: ['health'] } {id: 'Ogre E', spriteName: 'Segmented Munchkin', exists: true, shape: 'disc', depth: 2, pos: {x:8, y:0, z: 1}, action: 'move', health: 5, maxHealth: 10, rotation: Math.PI, acts: true, alpha: 0.5, hudProperties: ['health'] } - {id: 'Ogre S', spriteName: 'Segmented Munchkin', exists: true, shape: 'disc', depth: 2, pos: {x:0, y:-8, z: 1}, action: 'move', health: 2, maxHealth: 10, rotation: Math.PI/2, acts: true, hudProperties: ['health'] } + {id: 'Ogre S', spriteName: 'Segmented Munchkin', exists: true, shape: 'disc', depth: 2, pos: {x:0, y:-8, z: 1}, action: 'move', health: 2, maxHealth: 10, rotation: Math.PI/2, acts: true, hudProperties: ['health'], effectNames: ['curse'] } # Set ogres side by side with different render strategies {id: 'Singular Ogre', spriteName: 'Singular Munchkin', exists: true, shape: 'disc', depth: 2, pos: {x:-10, y:-8, z: 1}, action: 'move', health: 10, maxHealth: 10, rotation: -Math.PI/2, acts: true, alpha: 0.5 } @@ -101,6 +102,7 @@ describe 'SpriteBoss', -> _.find(world.thangs, {id: 'Disappearing Tree'}).exists = false world.thangMap[thang.id] = thang for thang in world.thangs spriteBoss.update(true) + jasmine.Ajax.requests.sendResponses({'/db/thang.type/curse': curseData}) # Test that the unrendered, animated sprites aren't showing anything midRenderExpectations.push([spriteBoss.sprites['Segmented Ogre'].imageObject.children.length,10,'animated segmented action'])