// WADE (Web App Development Engine) - version 3.6.1 - Copyright Clockwork Chilli ltd 2012-2017 - all rights reserved function Animation(a,b,c,d,e,f,g,i,h){if("object"==typeof a&&a){if(this.name=a.name,this._numCells={x:a.numCells&&a.numCells.x||1,y:a.numCells&&a.numCells.y||1},this._startFrame=a.startFrame||0,this._endFrame="undefined"!=typeof a.endFrame&&!isNaN(a.endFrame)?a.endFrame:this._numCells.x*this._numCells.y-1,this._imageName=a.image,this._speed="undefined"!=typeof a.speed?a.speed:20,this._looping=!!a.looping,this._blending=!!a.blending,this._playMode=a.playMode||"forward",this._autoResize="undefined"!= typeof a.autoResize?a.autoResize:!0,this._offset={x:a.offset&&a.offset.x||0,y:a.offset&&a.offset.y||0},this._image=wade.getImage(this._imageName),this._stopped=!!a.stopped,this._imageArea=a.imageArea||{minX:0,minY:0,maxX:1,maxY:1},a.properties)for(var k in a.properties)if(a.properties.hasOwnProperty(k))try{this[k]=JSON.parse(JSON.stringify(a.properties[k]))}catch(j){}}else this._image=wade.getImage(a),this._imageName=wade.getFullPathAndFileName(a),this._numCells={x:b?b:1,y:c?c:1},this._startFrame= f?f:0,this._endFrame="undefined"!=typeof g&&!isNaN(g)?g:b*c-1,this._speed="undefined"!=typeof d?d:20,this._looping=e,this._blending=!1,this._playMode="forward",this._stopped=!1,this._autoResize="undefined"!=typeof i?i:!0,this._offset=h||{x:0,y:0},this._offset.x=this._offset.x||0,this._offset.y=this._offset.y||0,this._imageArea={minX:0,minY:0,maxX:1,maxY:1};this._currentFrame=this._startFrame;this._playing=!1;this._time=0;this._direction=1;this._frameFraction=0;this._frameSize={x:this._image.width* (this._imageArea.maxX-this._imageArea.minX)/this._numCells.x,y:this._image.height*(this._imageArea.maxY-this._imageArea.minY)/this._numCells.y};this._frameCorner={};try{this._f32AnimFrameInfo=new Float32Array([0,0,this._frameSize.x/this._image.width,this._frameSize.y/this._image.height])}catch(m){}this._updateFrameCorner()}Animation.prototype.getImageSize=function(){return{x:this._image.width,y:this._image.height}};Animation.prototype.getFrameSize=function(){return{x:this._frameSize.x,y:this._frameSize.y}}; Animation.prototype.getFrameCorner=function(){return{x:this._frameCorner.x,y:this._frameCorner.y}};Animation.prototype.getImageName=function(){return wade.getFullPathAndFileName(this._imageName)};Animation.prototype.getRelativeImageName=function(){return this._imageName};Animation.prototype.getNumCells=function(){return{x:this._numCells.x,y:this._numCells.y}}; Animation.prototype.play=function(a){if(this._autoResize&&this.sprite&&!this.isDefault){var b=this.sprite.getScaleFactor();this.sprite.setSize(this._frameSize.x*b.x,this._frameSize.y*b.y)}this._time=0;this._direction=a&&"reverse"==a?-1:1;this._playMode=a;a=this._currentFrame;this._currentFrame=1==this._direction?this._startFrame:this._endFrame;a!=this._currentFrame&&this._updateFrameCorner();a=this._playing;this._playing=!0;this._stopped=!1;if(this.sprite&&this.name)this.sprite.onAnimationStart(this.name, a)};Animation.prototype.stop=function(){this._playing=!1;this._stopped=!0};Animation.prototype.resume=function(){this._playing||(this._stopped?(this._playing=!0,this._stopped=!1):this.play())}; Animation.prototype.step=function(){this._time+=wade.c_timeStep*this._speed;var a=this._currentFrame,b=this._time+wade.c_epsilon-0.5,c=Math.round(b);this._frameFraction=b-c+0.5;this._currentFrame=1==this._direction?c+this._startFrame:this._endFrame-c;if(a!=this._currentFrame){if(1==this._direction){if(this._currentFrame>this._endFrame)if("ping-pong"==this._playMode)this._currentFrame=this._endFrame,this._direction=-1,this._time=0;else if(this._looping)this._currentFrame=this._startFrame,this._time-= this._endFrame-this._startFrame+1;else if(this._currentFrame=this._endFrame,this._playing=!1,this._time=0,this.sprite&&this.name)this.sprite.onAnimationEnd(this.name)}else if(this._currentFramethis._endFrame){if("ping-pong"==this._playMode||!this._looping){this._drawSingle(a,b,c);return}d=this._startFrame}var e=d%this._numCells.x*this._frameSize.x+this._image.width*this._imageArea.minX,d=Math.floor(d/this._numCells.x)* this._frameSize.y+this._image.height*this._imageArea.minY;wade.numDrawCalls+=2;var f=b.x-c.x/2+this._offset.x,b=b.y-c.y/2+this._offset.y,g=a.globalAlpha,i=a.globalCompositeOperation;a.globalAlpha=g*(1-this._frameFraction);a.drawImage(this._image,this._frameCorner.x,this._frameCorner.y,this._frameSize.x,this._frameSize.y,f,b,c.x,c.y);a.globalCompositeOperation="lighter";a.globalAlpha=g*this._frameFraction;a.drawImage(this._image,e,d,this._frameSize.x,this._frameSize.y,f,b,c.x,c.y);a.globalAlpha=g; a.globalCompositeOperation=i;this.sprite&&this.sprite.isVisible()&&this.sprite.getSceneObject()&&this.sprite.getSceneObject().isInScene()&&this.sprite.setDirtyArea()};Animation.prototype.draw=Animation.prototype._drawSingle; Animation.prototype.draw_gl=function(a,b,c){a.isWebGl?(wade.numDrawCalls++,a.uniform4fv(a.currentShader.uniforms.uPositionAndSize,b),a.uniform4fv(a.currentShader.uniforms.uAnimFrameInfo,this._f32AnimFrameInfo),a.uniform2fv(a.currentShader.uniforms.uRotationAlpha,c),a.setTextureImage(this._image),a.drawArrays(a.TRIANGLE_STRIP,0,4)):this.draw(a,{x:b[0],y:b[1]},{x:b[2],y:b[3]})}; Animation.prototype._updateFrameCorner=function(){var a=this._currentFrame%this._numCells.x,b=Math.floor(this._currentFrame/this._numCells.x);this._frameCorner.x=a*this._frameSize.x+this._image.width*this._imageArea.minX;this._frameCorner.y=b*this._frameSize.y+this._image.height*this._imageArea.minY;this._f32AnimFrameInfo&&(this._f32AnimFrameInfo[0]=a/this._numCells.x*(this._imageArea.maxX-this._imageArea.minX)+this._imageArea.minX,this._f32AnimFrameInfo[1]=b/this._numCells.y*(this._imageArea.maxY- this._imageArea.minY)+this._imageArea.minY)};Animation.prototype.mirror=function(){this._f32AnimFrameInfo&&(this._f32AnimFrameInfo[2]*=-1)};Animation.prototype.flip=function(){this._f32AnimFrameInfo&&(this._f32AnimFrameInfo[3]*=-1)}; function AssetLoader(){var a=this;this.loadingStatus={};this.loadedImages={};this.loadedAudio={};this.loadedJson={};this.loadedText={};this.loadedScripts={};this.loadedFonts={};this.attemptsCount={};this.pendingCallbacks={};this.maxAttempts=5;this.loadingRequests={scripts:0,json:0,text:0,images:0,audio:0,fonts:0};this.loadingSuccess={scripts:0,json:0,text:0,images:0,audio:0,fonts:0};this.loadingErrors={scripts:0,json:0,text:0,images:0,audio:0,fonts:0};this.loadingFailed={scripts:0,json:0,text:0,images:0, audio:0,fonts:0};this.init=function(a){this.audioContext=wade.getWebAudioContext();var c;window.Audio&&(c=new Audio)?this.audioExtension=c.canPlayType("audio/ogg; codecs=vorbis")?"ogg":"aac":a||wade.log("Warning: Unable to initialise audio.")};this.updateAttempts=function(a,c){this.attemptsCount[a]?this.attemptsCount[a]++:(this.attemptsCount[a]=1,this.loadingRequests[c]++)};this.loadScript=function(b,c,d,e,f){if("loading"!=this.loadingStatus[b]||d){if("ok"==this.loadingStatus[b]||"loading"==this.loadingStatus[b]){if(!d){"ok"== this.loadingStatus[b]&&setTimeout(function(){!f&&eval.call(window,a.loadedScripts[b]);c&&c(a.loadedScripts[b],b)},0);return}this.attemptsCount[b]=0}this.loadingStatus[b]="loading";this.updateAttempts(b,"scripts");d={cache:d?!1:!0,type:"GET",url:b,dataType:"script",timeout:15E3,success:this.scriptLoaded(b,c,!f),error:this.scriptLoadingError(b,c,d,e)};wade.ajax(d)}};this.loadJson=function(b,c,d,e,f){if("ok"==this.loadingStatus[b]||"loading"==this.loadingStatus[b]){if(!e){"ok"==this.loadingStatus[b]? setTimeout(function(){c&&(c.data=a.loadedJson[b]);d&&d(a.loadedJson[b],b)},0):this.pendingCallbacks[b]?(d&&this.pendingCallbacks[b].success.push(d),f&&this.pendingCallbacks[b].error.push(f)):this.pendingCallbacks[b]={success:[d],error:[f]};return}this.attemptsCount[b]=0}this.loadingStatus[b]="loading";this.updateAttempts(b,"json");wade.ajax({cache:e?!1:!0,type:"GET",url:b,dataType:"json",timeout:15E3,success:this.jsonLoaded(b,c,d),error:this.jsonLoadingError(b,c,d,e,f)})};this.loadText=function(b, c,d,e,f){if("ok"==this.loadingStatus[b]||"loading"==this.loadingStatus[b]){if(!e){"ok"==this.loadingStatus[b]?setTimeout(function(){c&&(c.data=a.loadedText[b]);d&&d(a.loadedText[b],b)},0):this.pendingCallbacks[b]?(d&&this.pendingCallbacks[b].success.push(d),f&&this.pendingCallbacks[b].error.push(f)):this.pendingCallbacks[b]={success:[d],error:[f]};return}this.attemptsCount[b]=0}this.loadingStatus[b]="loading";this.updateAttempts(b,"text");wade.ajax({cache:e?!1:!0,type:"GET",url:b,dataType:"text", timeout:15E3,success:this.textLoaded(b,c,d),error:this.textLoadingError(b,c,d,e,f)})};this.loadAppScript=function(a,c){this.updateAttempts(a,"scripts");var d=this;wade.ajax({cache:c?!1:!0,type:"GET",url:a,dataType:"script",timeout:15E3,success:function(c){try{eval.call(window,c)}catch(f){wade.error("Main app script "+a+" is not a valid JavaScript file: "+f);d.appLoadingError(a);return}d.appLoaded(a)()},error:this.appLoadingError(a)})};this.loadImage=function(b,c,d){if("ok"==this.loadingStatus[b])c&& setTimeout(function(){c(a.loadedImages[b],b)},0);else if("loading"==this.loadingStatus[b])this.loadedImages[b]&&this.loadedImages[b].callbackIsSet&&c&&wade.warn("Warning: conflicting callbacks for the load event of image "+b);else{this.loadingStatus[b]="loading";this.updateAttempts(b,"images");var e=new Image;this.loadedImages[b]=e;e.loadListener=this.imageLoaded(b,c);e.errorListener=this.imageLoadingError(b,c,d);e.addEventListener("load",e.loadListener,!1);e.addEventListener("error",e.errorListener, !1);e.callbackIsSet=c?1:0;e.src=b}};this.unloadImage=function(a){if("ok"!=this.loadingStatus[a])return!1;var c=this.loadedImages[a];c.removeEventListener("load",c.loadListener);c.removeEventListener("error",c.errorListener);c.src?c.src="data:image/gif;base64,R0lGODlhAQABAIAAAP7//wAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==":c.width=c.height=1;if(c=wade.getImageUsers(a))for(var d=0;dwade.getScreenWidth()/2||Math.abs(l.screenPosition.y)>wade.getScreenHeight()/2)return!1;a._setLastMousePosition(l.screenPosition.x,l.screenPosition.y);var g=(new Date).getTime();if(!t&&f.mouseDown&&e.mouseDown&&g-e.mouseDownwade.getScreenWidth()/2||Math.abs(l.screenPosition.y)>wade.getScreenHeight()/2)return!1;a._setLastMousePosition(l.screenPosition.x,l.screenPosition.y);var g=(new Date).getTime();if(!t&&f.mouseUp&&e.mouseUp&&g-e.mouseUpwade.getScreenWidth()/2||Math.abs(c.screenPosition.y)>wade.getScreenHeight()/2)return!1;a._setLastMousePosition(c.screenPosition.x,c.screenPosition.y);var l=(new Date).getTime();if(!t&&f.mouseMove&&e.mouseMove&&l-e.mouseMovewade.getScreenWidth()/2||Math.abs(c.screenPosition.y)>wade.getScreenHeight()/2)return!1;a._setLastMousePosition(c.screenPosition.x,c.screenPosition.y);var l=(new Date).getTime();if(t||!f.mouseWheel||!(e.mouseWheel&&l-e.mouseWheelwade.c_epsilon&&(l=-30*l/Math.max(wade.getScreenWidth(),wade.getScreenHeight()),a.event_mouseWheel({clientX:d[0].pageX, clientY:d[0].pageY,detail:-l}));c=e;if(t&&b.changedTouches)for(d=0;dk&&Math.abs(l)<=r&&++a==y&&!b&&!c&&!d?v="onSwipeLeft":1l&&Math.abs(k)<=r&&++c==y&&!a&&!b&&!d?v="onSwipeUp": 1this._sprites.length)this._sprites.sort(this._sortingFunction);else for(a=0;athis._sortingFunction(k,this._sprites[c]))this._sprites[c].setDirtyArea(),this._sprites[c+1]=this._sprites[c],this._sprites[c]=k,h++;else break}}this._needsFullSorting=!1;this._movingSprites.length=0;h="webgl"==this._renderMode?"draw_gl":"draw";"webgl"==this._renderMode&&d.bindFramebuffer(d.FRAMEBUFFER,this._useOffScreenTarget? d.mainRenderTarget:null);if(this._useQuadtree){a=this.canvasBoxToWorld({minX:-g,minY:-i,maxX:g,maxY:i});this._needsFullRedraw?(c=this._scaleConversionFactor,b=g-this._cameraPosition.x*this._transform.translate*c,k=i-this._cameraPosition.y*this._transform.translate*c,"2d"==this._renderMode?(d.restore(),d.save(),d.setTransform(c,0,0,c,Math.round(b),Math.round(k))):"webgl"==this._renderMode&&(this._f32CameraScaleTranslateTime[0]=c,this._f32CameraScaleTranslateTime[1]=this._cameraPosition.x*this._transform.translate* c,this._f32CameraScaleTranslateTime[2]=this._cameraPosition.y*this._transform.translate*c,this._f32CameraScaleTranslateTime[3]=wade.getAppTime(),d.uniform4fv(d.currentShader.uniforms.uCameraScaleTranslateTime,this._f32CameraScaleTranslateTime)),k=wade.cloneObject(a)):k=this._joinDirtyAreas();if(!k){this.clearDirtyAreas();return}for(c=0;cc)for(var d=c+1;d<=b;d++)this._sprites[d].id--;else for(d=b;db)return this._sprites.splice(b,0,a),a.id=b+1,b;a.id=this._sprites.length+1;return this._sprites.push(a)-1}return-1}; Layer.prototype.getPixelShader=function(a,b,c){if("webgl"!=this._renderMode)wade.log("cannot use pixel shaders in canvas mode");else{var d=a.pixelShaders[b];if(d)return d;d="";if(c)for(var e in c)c.hasOwnProperty(e)&&(d+="uniform "+c[e]+" "+e+";\n");e="precision mediump int; precision mediump float;\n\tvarying vec4 uvAlphaTime;\n\tuniform sampler2D uDiffuseSampler;\n\tuniform vec4 uCustomPsParameters;\n"+d+"void main(void) {\n"+b+"\n}";d=a.createShader(a.FRAGMENT_SHADER);a.shaderSource(d,e);a.compileShader(d); d.hash=wade.hashString(b).toString();d.customUniforms=c;if(a.getShaderParameter(d,a.COMPILE_STATUS))return a.pixelShaders[b]=d;wade.log("An error occurred compiling a pixel shader: "+a.getShaderInfoLog(d))}}; Layer.prototype.getVertexShader=function(a,b){if("webgl"!=this._renderMode)wade.log("cannot use vertex shaders in canvas mode");else{var c=a.vertexShaders[b];if(c)return c;c=a.createShader(a.VERTEX_SHADER);a.shaderSource(c,b);a.compileShader(c);c.hash=wade.hashString(b).toString();if(a.getShaderParameter(c,a.COMPILE_STATUS))return a.vertexShaders[b]=c;wade.log("An error occurred compiling a vertex shader: "+a.getShaderInfoLog(c))}}; Layer.prototype.getShaderProgram=function(a,b,c){if("webgl"!=this._renderMode)wade.log("cannot use shader programs in canvas mode");else{var b=b||a.defaultVertexShader,c=c||a.defaultPixelShader,d=a.shaderPrograms[b.hash+c.hash];if(d)return d;d=a.createProgram();a.attachShader(d,b);a.attachShader(d,c);a.linkProgram(d);if(a.getProgramParameter(d,a.LINK_STATUS)){d.vertexPositionAttribute=a.getAttribLocation(d,"aVertexPosition");d.uniforms={};d.uniforms.uCameraScaleTranslateTime=a.getUniformLocation(d, "uCameraScaleTranslateTime");d.uniforms.uViewportSize=a.getUniformLocation(d,"uViewportSize");d.uniforms.uPositionAndSize=a.getUniformLocation(d,"uPositionAndSize");d.uniforms.uAnimFrameInfo=a.getUniformLocation(d,"uAnimFrameInfo");d.uniforms.uRotationAlpha=a.getUniformLocation(d,"uRotationAlpha");d.uniforms.uDiffuseSampler=a.getUniformLocation(d,"uDiffuseSampler");if(c.customUniforms)for(var e in c.customUniforms)d.uniforms[e]=a.getUniformLocation(d,e);return a.shaderPrograms[b.hash+c.hash]=d}wade.log("Unable to link a WebGl shader program")}}; Layer.prototype.getDefaultPixelShaderSource=function(){return"highp vec4 color = texture2D(uDiffuseSampler, uvAlphaTime.xy); \ncolor.w *= uvAlphaTime.z; \ngl_FragColor = color;"}; Layer.prototype._setupWebGl=function(a,b){a.clearColor(0,0,0,0);a.clear(a.COLOR_BUFFER_BIT);a.vertexShaders={};a.pixelShaders={};a.shaderPrograms={};var c=a.defaultVertexShader=this.getVertexShader(a,"attribute vec3 aVertexPosition;\nuniform vec4 uCameraScaleTranslateTime;\nuniform vec2 uViewportSize;\nuniform vec4 uPositionAndSize;\nuniform vec4 uAnimFrameInfo;\nuniform vec2 uRotationAlpha;\nvarying highp vec4 uvAlphaTime;\nvoid main(void) {\nfloat s = sin(uRotationAlpha.x);\nfloat c = cos(uRotationAlpha.x);\nvec2 pos = aVertexPosition.xy * uPositionAndSize.zw;\npos = vec2(pos.x * c - pos.y * s, pos.y * c + pos.x * s);\npos += uPositionAndSize.xy * 2.0;\npos *= uCameraScaleTranslateTime.x;\npos -= uCameraScaleTranslateTime.yz * 2.0;\npos /= uViewportSize;\npos.y *= -1.0;\nuvAlphaTime.xy = (aVertexPosition.xy + 1.0) * 0.5;\nuvAlphaTime.x = (uAnimFrameInfo.z < 0.0)? 1.0 - uvAlphaTime.x : uvAlphaTime.x;\nuvAlphaTime.y = (uAnimFrameInfo.w < 0.0)? 1.0 - uvAlphaTime.y : uvAlphaTime.y;\nuvAlphaTime.xy *= abs(uAnimFrameInfo.zw);\nuvAlphaTime.xy += uAnimFrameInfo.xy;\nuvAlphaTime.z = uRotationAlpha.y;\nuvAlphaTime.w = uCameraScaleTranslateTime.w;\ngl_Position = vec4(pos, 0.0, 1.0);\n}"),d= this.getDefaultPixelShaderSource(),d=a.defaultPixelShader=this.getPixelShader(a,d);if(c=this.getShaderProgram(a,c,d)){a.defaultShaderProgram=a.postProcessShaderProgram=c;var e=this;a.setShaderProgram=function(a){this.currentShader!=a&&(this.useProgram(this.currentShader=a),this.uniform2fv(this.currentShader.uniforms.uViewportSize,e._f32ViewportSize),this.uniform4fv(this.currentShader.uniforms.uCameraScaleTranslateTime,e._f32CameraScaleTranslateTime))};a.setShaderProgram(c);d=a.createBuffer();a.enableVertexAttribArray(c.vertexPositionAttribute); a.bindBuffer(a.ARRAY_BUFFER,d);a.bufferData(a.ARRAY_BUFFER,new Float32Array([1,1,0,-1,1,0,1,-1,0,-1,-1,0]),a.STATIC_DRAW);a.vertexAttribPointer(c.vertexPositionAttribute,3,a.FLOAT,!1,0,0);a.activeTexture(a.TEXTURE0);a.uniform1i(c.uniforms.uDiffuseSampler,0);a.disable(a.DEPTH_TEST);a.enable(a.BLEND);a.blendFuncSeparate(a.SRC_ALPHA,a.ONE_MINUS_SRC_ALPHA,a.ONE,a.ONE_MINUS_SRC_ALPHA);a.pixelStorei(a.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!1);a.textures={};a.setTextureImage=function(b,c,d){var e=b&&b.imageName|| "",d=d||0;if(a.currentImage[d]!=e){if(a.textures[e])c||a.bindTexture(a.TEXTURE_2D,a.textures[e]);else if(b){var k=a.createTexture();a.bindTexture(a.TEXTURE_2D,k);wade.texImage2D(a,{width:b&&b.width||0,height:b&&b.height||0,image:b});a.textures[e]=k;wade.addImageUser(e,this);c&&(a.bindTexture(a.TEXTURE_2D,null),a.currentImage[d]=null)}else a.currentImage[d]=null;c||(a.currentImage[d]=e)}};a.setActiveImage=function(b){a.bindTexture(a.TEXTURE_2D,a.textures[b]);b=wade.getImage(b);wade.texImage2D(a,{width:b.width, height:b.height,image:b})};a.onImageUnloaded=function(b){a.deleteTexture(a.textures[b]);delete a.textures[b]};a.currentImage=[];a.mainRenderTarget=a.createFramebuffer();a.bindFramebuffer(a.FRAMEBUFFER,a.mainRenderTarget);a.disable(a.DEPTH_TEST);a.mainRenderTarget.texture=a.createTexture();a.bindTexture(a.TEXTURE_2D,a.mainRenderTarget.texture);a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MIN_FILTER,a.LINEAR);a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MAG_FILTER,a.LINEAR);a.texParameteri(a.TEXTURE_2D,a.TEXTURE_WRAP_S, a.CLAMP_TO_EDGE);a.texParameteri(a.TEXTURE_2D,a.TEXTURE_WRAP_T,a.CLAMP_TO_EDGE);a.texImage2D(a.TEXTURE_2D,0,a.RGBA,b.width,b.height,0,a.RGBA,a.UNSIGNED_BYTE,null);a.framebufferTexture2D(a.FRAMEBUFFER,a.COLOR_ATTACHMENT0,a.TEXTURE_2D,a.mainRenderTarget.texture,0);a.bindTexture(a.TEXTURE_2D,null);a.bindFramebuffer(a.FRAMEBUFFER,null);a.mainRenderTarget.uniformValues={positionAndSize:new Float32Array([0,0,b.width,b.height]),animFrameInfo:new Float32Array([0,0,1,-1]),rotationAlpha:new Float32Array([0, 1]),imageArea:new Float32Array([0,0,1,1])};a.globalAlpha=1;this._f32ViewportSize[0]=this._canvas.width;this._f32ViewportSize[1]=this._canvas.height;a.viewport(0,0,b.width,b.height);a.uniform2fv(c.uniforms.uViewportSize,this._f32ViewportSize)}else wade.error("Unable to compile default shader")}; var resetContext=function(a){var b=a.getParameter(a.MAX_VERTEX_ATTRIBS),c=a.createBuffer();a.bindBuffer(a.ARRAY_BUFFER,c);for(var d=0;d=b){var i=g;c=this._nodes[g];d=this._nodes[g+1];break}if(!c||!d)return this._nodes.length-1;e=(b-f)/c.duration;g=this._getInterpolationFunction(g);"undefined"!=typeof c.position&&a.setPosition(this._evaluateProperty("position",g,e,c,d));"undefined"!=typeof c.rotation&&a.setRotation(this._evaluateProperty("rotation",g,e,c,d));if("undefined"!=typeof c.size)for(var h=this._evaluateProperty("size", g,e,c,d),f=0;fa)return c/2*a*a+b;a--;return-c/2*(a*(a-2)-1)+b};Path.prototype._interpolate_cubic10=function(a,b,c){return c*a*a*a+b};Path.prototype._interpolate_cubic01=function(a,b,c){a--;return c*(a*a*a+1)+b}; Path.prototype._interpolate_cubic11=function(a,b,c){a*=2;if(1>a)return c*a*a*a/2+b;a-=2;return c/2*(a*a*a+2)+b};Path.prototype._interpolate_quartic10=function(a,b,c){return c*a*a*a*a+b};Path.prototype._interpolate_quartic01=function(a,b,c){a--;return-c*(a*a*a*a-1)+b};Path.prototype._interpolate_quartic11=function(a,b,c){a*=2;if(1>a)return c*a*a*a*a/2+b;a-=2;return-c/2*(a*a*a*a-2)+b};Path.prototype._interpolate_quintic10=function(a,b,c){return c*a*a*a*a*a+b}; Path.prototype._interpolate_quintic01=function(a,b,c){a--;return c*(a*a*a*a*a+1)+b};Path.prototype._interpolate_quintic11=function(a,b,c){a*=2;if(1>a)return c*a*a*a*a*a/2+b;a-=2;return c/2*(a*a*a*a*a+2)+b};Path.prototype._interpolate_sinusoidal10=function(a,b,c){return-c*Math.cos(a*Math.PI/2)+c+b};Path.prototype._interpolate_sinusoidal01=function(a,b,c){return c*Math.sin(a*Math.PI/2)+b};Path.prototype._interpolate_sinusoidal11=function(a,b,c){return-c/2*(Math.cos(a*Math.PI)-1)+b}; Path.prototype._interpolate_exponential10=function(a,b,c){return c*Math.pow(2,10*(a-1))+b};Path.prototype._interpolate_exponential01=function(a,b,c){return c*(-Math.pow(2,-10*a)+1)+b};Path.prototype._interpolate_exponential11=function(a,b,c){a*=2;if(1>a)return c/2*Math.pow(2,10*(a-1))+b;a--;return c/2*(-Math.pow(2,-10*a)+2)+b};Path.prototype._interpolate_circular10=function(a,b,c){return-c*(Math.sqrt(1-a*a)-1)+b}; Path.prototype._interpolate_circular01=function(a,b,c){a--;return c*Math.sqrt(1-a*a)+b};Path.prototype._interpolate_circular11=function(a,b,c){a*=2;if(1>a)return-c/2*(Math.sqrt(1-a*a)-1)+b;a-=2;return c/2*(Math.sqrt(1-a*a)+1)+b};function QuadTreeNode(a,b,c,d,e){this._level=a;this.minX=b;this.minY=c;this.maxX=d;this.maxY=e;this._children=[];this._objects=[]}QuadTreeNode.prototype.c_idealObjectCountPerLevel=1;QuadTreeNode.prototype.c_maxLevels=8; QuadTreeNode.prototype.addObject=function(a){if(!this._insertInChild(a)&&(a.quadTreeNode=this,this._objects.push(a),this._objects.length>this.c_idealObjectCountPerLevel&&!this._children.length&&this._levelMath.random();m&&console.time("Draw");var n=document.getElementById(wade.getContainerName()),z=wade.getForcedOrientation();l=wade.getContainerWidth(); j=wade.getContainerHeight();var D=p;switch(z){case "landscape":j>l&&(p=!p);break;case "portrait":l>j&&(p=!p);break;default:p=!1}if(p!=D){var B=p?"rotateZ(90deg)":"translate3d(0, 0, 0)";n.style.MozTransform=B;n.style.msTransform=B;n.style.OTransform=B;n.style.webkitTransform=B;n.style.transform=B}B=!1;l=wade.getContainerWidth();j=wade.getContainerHeight();var F=s!=l||v!=j;if(F){var C={width:l,height:j};e.processEvent("onContainerResize",C)||wade.app.onContainerResize&&wade.app.onContainerResize(C)}var q, x;if("full"==f){var C=c,G=d;c=Math.max(Math.min(l,g),h);d=Math.max(Math.min(j,i),k);c>l||d>j?c/l>d/j?(d=Math.max(Math.min(Math.min(d,j)*c/l,i),k),q=l+"px",x=Math.floor(l*d/c)+"px"):(c=Math.max(Math.min(Math.min(c,l)*d/j,g),h),q=Math.floor(j*c/d)+"px",x=j+"px"):cd/j?(x=Math.floor(l*d/c)+"px",q=l+"px"):(x=j+"px",q=Math.floor(j*c/d)+"px"):(x=d+"px",q=c+"px");if(C!=c||G!=d)n.setAttribute("width",c.toString()),n.setAttribute("height",d.toString()),e.onResize(C,G,c,d),B=!0}else"stretch to fit"== f?l/c>j/d?(q=Math.floor(j*c/d)+"px",x=l+"px"):(q=l+"px",x=Math.floor(l*d/c)+"px"):"container"==f&&(C=c,G=d,c=n.getAttribute("width"),d=n.getAttribute("height"),B=C!=c||G!=d,q=c+"px",x=d+"px",B&&(r=!0,e.onResize(C,G,c,d)));if(r=r||q&&x&&(q!=n.style.width||x!=n.style.height)||p!=D||p&&F)n.style.width=q,n.style.height=x,p?"landscape"==z?(z=getComputedStyle(n),z=(parseInt(z.marginLeft)+parseInt(z.marginRight))/2,n.style.marginLeft=z+"px",n.style.marginTop="auto"):"portrait"==z&&(z=getComputedStyle(n), z=(parseInt(z.marginTop)+parseInt(z.marginBottom))/2,n.style.marginTop=z+"px",n.style.marginLeft="auto"):n.style.margin="auto";v=j;s=l;for(l=0;lg||d>i)e.setSimulationDirtyState(),this.draw()};this.getMinScreenWidth=function(){return h}; this.getMinScreenHeight=function(){return k};this.setMinScreenSize=function(a,b){h=a;k=b;if(cMath.random();a&&console.time("Simulation");for(var b=c.onSimulationStep,d=0;db?(c.splice(b,0,a),b):c.push(a)-1):-1};this.setSceneObjectIndex=function(b,c){return this.setObjectIndex(b,c,a)};this.setPathIndex=function(a,c){return this.setObjectIndex(a,c,b)}} function SceneObject(a,b,c,d,e){this._behaviors=[];this._spriteOffsets=[];this._moving=!1;this._linearVelocity={x:0,y:0};this._animationsPlaying=this._targetPosition=0;this._inScene=!1;this._pathTime=this._angularVelocity=this._renderer=0;this._pathSpeed=1;this._pathNodeIndex=-1;this._isTemplate=!1;this._rotationTarget={valid:!1,value:0};this._timeouts=[];this.addToSceneParams=this._flowChart=null;this.autoListen=!1;var f="object"==typeof a&&!wade.isArray(a)&&!(a instanceof Sprite)&&!(a instanceof TextSprite)&&a;if(f){this._position={x:a.position&&a.position.x||0,y:a.position&&a.position.y||0};this._rotation=a.rotation||0;this._alignment={x:a.alignment&&a.alignment.x||0,y:a.alignment&&a.alignment.y||0};this._name=a.name;this._isTemplate=a.isTemplate;this._behaviorClasses=[];this._sprites=[];this._flowChart=a.flowChart||null;if(this._path=a.path)this._path=wade.getPath(this._path);wade.isDebugMode()&&!this._name&&(wade.unnamedSceneObjectsCount=(wade.unnamedSceneObjectsCount||0)+1,this._name= "Unnamed_Scene_Object_"+wade.unnamedSceneObjectsCount);if(a.behaviors)for(b=0;bc*wade.c_timeStep?(this._linearVelocity={x:d*c/f,y:e*c/f},!this._animationsPlaying&&(!this._moving&&!this._angularVelocity&&!this._path&&!this._timeouts.length)&&wade.simulateSceneObject(this,!0),this._moving=!0):(this.setPosition(a,b),this.stopMoving())}; SceneObject.prototype.rotateTo=function(a,b){this._rotation%=6.28318530718;a%=6.28318530718;0>a&&(a+=6.28318530718);var c=(a-this._rotation)%6.28318530718;0>c&&(c+=6.28318530718);c>b*wade.c_timeStep?(this.setAngularVelocity(b),this._rotationTarget.value=a,this._rotationTarget.valid=!0):(this.setRotation(a),this.setAngularVelocity(0))}; SceneObject.prototype.stopMoving=function(){!this._animationsPlaying&&(!this._angularVelocity&&!this._path&&!this._timeouts.length&&this._moving)&&wade.simulateSceneObject(this,!1);var a=this._moving;this._moving=!1;this._targetPosition=0;this._linearVelocity.x=this._linearVelocity.y=0;a&&this.processEvent("onMoveComplete")}; SceneObject.prototype.step=function(){if(this._moving)if(this._targetPosition){var a=this._position.x-this._targetPosition.x,b=this._position.y-this._targetPosition.y;(this._linearVelocity.x*this._linearVelocity.x+this._linearVelocity.y*this._linearVelocity.y)*wade.c_timeStep*wade.c_timeStepc&&(c+=6.28318530718);Math.abs(c)b&&(b+=6.28318530718),this.setRotation(b))}else b%=6.28318530718,0>b&&(b+=6.28318530718),this.setRotation(b)}if(this._animationsPlaying)for(a= 0;a(b.time-=1E3*wade.c_timeStep))wade.removeObjectFromArrayByIndex(a,this._timeouts),!this._animationsPlaying&&(!this._moving&&!this._angularVelocity&&!this._path&&!this._timeouts.length)&& wade.simulateSceneObject(this,!1),b.callback&&b.callback()};SceneObject.prototype.playAnimation=function(a,b){for(var c=0;cthis._sprites.length&&(c=this._sprites.length);a.setSceneObject(this);this._sprites.splice(c,0,a);b=b?{x:b.x||0,y:b.y||0,angle:b.angle||0,originalX:b.x||0,originalY:b.y||0}:{x:0,y:0,angle:0,originalX:0,originalY:0};this._rotation&&wade.vec2.rotateInPlace(b,this._rotation);this._spriteOffsets.splice(c,0,b);a.setPosition(this._position.x+b.x,this._position.y+b.y);a.setRotation(this._rotation+b.angle);this._inScene&& this._renderer.addSprite(a);return c};SceneObject.prototype.removeSpriteByIndex=function(a){this._renderer.removeSprite(this._sprites[a]);wade.removeObjectFromArrayByIndex(a,this._sprites);wade.removeObjectFromArrayByIndex(a,this._spriteOffsets)};SceneObject.prototype.removeSprite=function(a){for(var b=0;b=b.position.x-b.extents.x&&a.x<=d&&a.y>=c&&a.y<=e}if(!b||!this.isUsingPixelPerfectMouseEvents||!this.isUsingPixelPerfectMouseEvents()||!this._image)return b;b=this._animations[this._currentAnimation]; c=b.getFrameCorner();d=b.getFrameSize();e=b.getOffset_ref();a=wade.screenPositionToWorld(this.getLayerId(),a);wade.vec2.subInPlace(a,this.getPosition());wade.vec2.subInPlace(a,e);this._rotation&&wade.vec2.rotateInPlace(a,-this._rotation);wade.vec2.addInPlace(a,wade.vec2.scale(this._size,0.5));a.x=Math.floor(a.x*d.x/this._size.x+c.x);a.y=Math.floor(a.y*d.y/this._size.y+c.y);b=wade.getImageData(b.getRelativeImageName());return!!b.data[4*(a.y*b.width+a.x)+3]}; Sprite.prototype.getWorldOffset=function(a){a=this._layer.screenPositionToWorld(a);return{x:a.x-this._position.x,y:a.y-this._position.y}};Sprite.prototype.setDirtyArea=function(){this._layer&&this._layer.isUsingQuadtree()&&this._layer.addDirtyArea(this.boundingBox)};Sprite.prototype.setVisible=function(a){a!=this._visible&&(this._visible=a,this.setDirtyArea())};Sprite.prototype.isVisible=function(){return this._visible}; Sprite.prototype.setImageFile=function(a,b){this.setDirtyArea();this._animations[this._currentAnimation]=new Animation(a,1,1,0);if(b||!this._sizeWasSet){var c=this._animations[this._currentAnimation].getFrameSize();this.setSize(c.x,c.y)}this._staticImageName=a;this.setActiveImage(wade.getFullPathAndFileName(a));this.setDirtyArea()}; Sprite.prototype.bringToFront=function(){!this._sceneObject||!this._sceneObject.isInScene()?wade.log("Cannot change the order of sprites before they are added to the scene"):this._layer.bringSpriteToFront(this)};Sprite.prototype.pushToBack=function(){!this._sceneObject||!this._sceneObject.isInScene()?wade.log("Cannot change the order of sprites before they are added to the scene"):this._layer.pushSpriteToBack(this)}; Sprite.prototype.putBehindSprite=function(a){this._layer!=a._layer?wade.log("Cannot put a sprite behind another sprite that is on a different layer"):!this._sceneObject||!this._sceneObject.isInScene()||!a._sceneObject||!a._sceneObject.isInScene()?wade.log("Cannot change the order of sprites before they are added to the scene"):this._layer.putSpriteBehindSprite(this,a)};Sprite.prototype.getCurrentAnimation=function(){return this._animations[this._currentAnimation]}; Sprite.prototype.getCurrentAnimationName=function(){return this._currentAnimation};Sprite.prototype.hasAnimation=function(a){return this._animations[a]?!0:!1};Sprite.prototype.setDrawFunction=function(a){this.draw=this.draw_gl=a;this.setDirtyArea()};Sprite.prototype.getDrawFunction=function(){return"webgl"==this.getLayer().getRenderMode()?this.draw_gl:this.draw}; Sprite.prototype.setDrawModifiers=function(a){var b=this instanceof TextSprite?TextSprite.prototype:Sprite.prototype,b="webgl"==this._layer.getRenderMode()?b.draw_gl:b.draw;if(a)for(b=this._drawModifiers.length=0;bthis._text.indexOf("\n"))a&&(c.fillText(this._text,this._position.x,this._position.y),this._outlineWidth&&c.strokeText(this._text,this._position.x,this._position.y)),b&&b.push({width:c.measureText(this._text).width+this._outlineWidth,text:this._text});else{for(var f=0,g=this._text.split("\n"),i=0;ithis._maxWidth&&0=c&&(this.pause(),this.ended=!0,d&&d())},!1),a.alreadyPlayed=!0,a.play(),u.push(a);return u.length-1};this.loadFont=function(a,b,d){a=this.getFullPathAndFileName(a);c.loadFont(a,b,d)};this.preloadFont=function(a,b,c){a=this.getFullPathAndFileName(a);d.loadFont(a,b,c)};this.getFont=function(a){a=this.getFullPathAndFileName(a);return c.getFont(a)};this.setFont=function(a,b,e){a=this.getFullPathAndFileName(a);c.setFont(a, b);e&&d.setFont(a,b)};this.getLoadingStatus=function(a){a=this.getFullPathAndFileName(a);return c.getLoadingStatus(a)};this.instanceApp=function(){this.app=new App;this.app.appData=this._appData;this.app.load&&this.app.load();i=!1;h=!0};this.initializeApp=function(){i=!0;var a=0<=navigator.userAgent.indexOf("Android")&&-1==navigator.userAgent.indexOf("Firefox")&&!(window.chrome&&window.chrome.app)&&!this.isWebGlSupported();this.enableDoubleBuffering(a);this.app.init?this.app.init():wade.warn("Warning: Unable to initialize app. App.init function is missing."); g=setTimeout(function(){wade.event_appTimerEvent()},1E3*j)};this.processEvent=function(a,c){return b.processEvent(a,c)};this.addEventListener=function(a,c){b.addEventListener(a,c)};this.removeEventListener=function(a,c){b.removeEventListener(a,c)};this.isEventListener=function(a,c){return b.isObjectListeneningForEvent(a,c)};this.addGlobalEventListener=function(a,c){b.addGlobalEventListener(a,c)};this.removeGlobalEventListener=function(a,c){b.removeGlobalEventListener(a,c)};this.getCameraPosition= function(){return b.renderer.getCameraPosition()};this.setCameraPosition=function(a){b.renderer.setCameraPosition(a)};this.getAppTime=function(){return b.getAppTime()};this.getClockTime=function(){return window.performance&&window.performance.now?window.performance.now():(new Date).getTime()};this.setAppTimerInterval=function(a){j=a};this.removeObjectFromArrayByIndex=function(a,b){if(0<=a){var c=b.slice(a+1||b.length);b.length=a;return b.push.apply(b,c)}return b};this.removeObjectFromArray=function(a, b){var c=b.lastIndexOf(a);return-1!=c?this.removeObjectFromArrayByIndex(c,b):b};this.addSceneObject=function(a,c,d){"undefined"==typeof c&&(c=!0);b.addSceneObject(a,c,d);return a};this.removeSceneObject=function(a){b.removeSceneObject("string"==typeof a?this.getSceneObject(a):a)};this.removeSceneObjects=function(a){for(var c=0;cb.maxX&&a.minYb.maxY};this.boxIntersectsBox=function(a,b){return!(a.maxXb.maxX||a.maxYb.maxY)}; this.boxContainsPoint=function(a,b){return b.x>=a.minX&&b.x<=a.maxX&&b.y>=a.minY&&b.y<=a.maxY};this.orientedBoxContainsPoint=function(a,b){var c=Math.sin(a.rotation),d=Math.cos(a.rotation),e=b.x-a.centerX,f=b.y-a.centerY,l=d*e+c*f,c=d*f-c*e;return l>=-a.halfWidth&&l<=a.halfWidth&&c>=-a.halfHeight&&c<=a.halfHeight};this.orientedBoxIntersectsOrientedBox=function(a,b){var c=b.centerX-a.centerX,d=b.centerY-a.centerY,e=a.axisXx,f=a.axisXy,l=a.axisYx,g=a.axisYy,h=b.axisXx,i=b.axisXy,r=b.axisYx,j=b.axisYy; return!(Math.abs(c*e+d*f)>e*e+f*f+Math.abs(h*e+i*f)+Math.abs(r*e+j*f)||Math.abs(c*l+d*g)>l*l+g*g+Math.abs(h*l+i*g)+Math.abs(r*l+j*g)||Math.abs(c*h+d*i)>h*h+i*i+Math.abs(h*e+i*f)+Math.abs(h*l+i*g)||Math.abs(c*r+d*j)>r*r+j*j+Math.abs(r*e+j*f)+Math.abs(r*l+j*g))};this.boxIntersectsOrientedBox=function(a,b){var c=(a.minX+a.maxX)/2-b.centerX,d=(a.minY+a.maxY)/2-b.centerY,e=(a.maxX-a.minX)/2,f=(a.maxY-a.minY)/2,l=b.axisXx,g=b.axisXy,h=b.axisYx,i=b.axisYy;return!(Math.abs(c*e)>e*e+Math.abs(l*e)+Math.abs(h* e)||Math.abs(d*f)>f*f+Math.abs(g*f)+Math.abs(i*f)||Math.abs(c*l+d*g)>l*l+g*g+Math.abs(l*e)+Math.abs(g*f)||Math.abs(c*h+d*i)>h*h+i*i+Math.abs(h*e)+Math.abs(i*f))};this.orientedBoxIntersectsBox=function(a,b){return this.boxIntersectsOrientedBox(b,a)};this.expandBox=function(a,b){a.minX=Math.min(a.minX,b.minX);a.minY=Math.min(a.minY,b.minY);a.maxX=Math.max(a.maxX,b.maxX);a.maxY=Math.max(a.maxY,b.maxY)};this.clampBoxToBox=function(a,b){a.minX=Math.min(b.maxX,Math.max(a.minX,b.minX));a.minY=Math.min(b.maxY, Math.max(a.minY,b.minY));a.maxX=Math.max(b.minX,Math.min(a.maxX,b.maxX));a.maxY=Math.max(a.minY,Math.min(a.maxY,b.maxY))};this.postObject=function(a,b,c,d){b={data:JSON.stringify(b)};d&&wade.extend(b,d);b=JSON.stringify(b);this.ajax({type:"POST",url:a,data:b,success:c,dataType:"json"})};this.setGlobalLoadingCallback=function(a){c.setGlobalCallback(a)};this.setMainLoop=function(a,b,c){for(var b=b||"_wade_default",d=0;db*b&&(d=e)}wade.setCameraPosition(d)}},"_wade_cameraTarget")):this.setMainLoop(0, "_wade_cameraTarget")};this.getObjectsInArea=function(a,c){var d=[];b.renderer.addObjectsInAreaToArray(a,d,c);return d};this.getObjectsInScreenArea=function(a){var c=[];b.renderer.addObjectsInScreenAreaToArray(a,c);return c};this.getSpritesInArea=function(a,c,d){var e=[];b.renderer.addSpritesInAreaToArray(a,e,c,d);return e};this.getSpritesInScreenArea=function(a){var c=[];b.renderer.addSpritesInScreenAreaToArray(a,c);return c};this.getSceneObject=function(a){return(a=b.getObjectByName(a))&&a instanceof SceneObject?a:null};this.getSceneObjects=function(a,c){return b.getSceneObjects(a,c)};this.getImageData=function(a,b,d,e,f){var l=this.getFullPathAndFileName(a);if(E[l]&&!b&&!d&&!e&&!f)return E[l];var g=c.getImage(l),h;if(g.getContext)h=g.getContext("2d");else{var i=g,g=document.createElement("canvas");g.width=i.width;g.height=i.height;h=g.getContext("2d");h.drawImage(i,0,0);wade.setImage(a,g)}b=b||0;d=d||0;e=e||g.width;f=f||g.height;a=!b&&!d&&e==g.width&&f==g.height;if(E[l]&&a)return E[l];b=h.getImageData(b, d,e,f);E[l]=a?b:h.getImageData(0,0,g.width,g.height);return b};this.putImageData=function(a,d,e,f,l,g,h,i){var e=e||0,f=f||0,l=l||0,g=g||0,h=h||d.width,i=i||d.height,r=this.getFullPathAndFileName(a),j,k;if("ok"==c.getLoadingStatus(r))if(j=c.getImage(r),j.getContext)k=j.getContext("2d");else{var u=j;j=document.createElement("canvas");j.width=u.width;j.height=u.height;k=j.getContext("2d");k.drawImage(u,0,0);wade.setImage(a,j)}else j=document.createElement("canvas"),j.width=h,j.height=i,k=j.getContext("2d"), wade.setImage(a,j);k.putImageData(d,l,g,e,f,h,i);E[r]=k.getImageData(0,0,j.width,j.height);b.renderer.updateImageUsers(r)};this.enableMultitouch=function(a){"undefined"==typeof a&&(a=!0);e.enableMultitouch(a)};this.isMultitouchEnabled=function(){return e.isMultitouchEnabled()};this.getVersion=function(){return"3.6.1"};this.requireVersion=function(a,b,c){for(var d=["3","6","1"],e=a.split("."),f=0;fe[f])break;else if(l=c.length;c[a]=d;b(a,d,e)},get:function(){return c[a]}})})(e);Object.defineProperty(d,"length",{enumerable:!0,set:function(a){for(var d=c.length-1;d>=a;d--)b(d);c.length=a},get:function(){return c.length}});d.push=function(){for(var a=0;a=b.events[g].time)){b.events[g].processed=!0;var h="(function(){"+b.events[g].code+"})()";if(q){var i=y.length;y.push({time:b.events[g].time,code:b.events[g].code});h+="\n//# sourceURL=timeline_event_"+i+"_"+b.events[g].time+"s.js"}eval.call(window,h)}l||a.setMainLoop(null,d)};this.setMainLoop(f,d);f();return d};this.stopTimeline=function(a){r[a]&&(r[a].active=!1);this.setMainLoop(null, a)};this.resumeTimeline=function(a){r[a].active=!0;this.startTimeline(r[a].timeline,r[a].time,a)};this.getProcessedTimelineEvent=function(a){return!q?(wade.error("Cannot call wade.getProcessedTimelineEvent when not in debug mode"),{time:0,code:""}):y[a||0]};this.clearTimelines=function(){for(var a in r)this.stopTimeline(a);r={}};this.createTransparentImage=function(a,b,c){var d=new Sprite;d.setDrawFunction(wade.doNothing);d.setSize(b,c);d.drawToImage(a,!0,null,null,"","2d")};this.getTimelines=function(){return r}; this.setPostProcessShader=function(a,b,c){this.getLayer(a).setPostProcessShader(b,c)};this.getPostProcessShader=function(a){return this.getLayer(a).getPostProcessShader()};this.getPostProcessShaderUniforms=function(a){return this.getLayer(a).getPostProcessShaderUniforms()};this.setLayerCustomProperty=function(a,b,c){this.getLayer(a).setCustomProperty(b,c)};this.setLayerCustomProperties=function(a,b){this.getLayer(a).setCustomProperties(b)};this.getLayerCustomProperty=function(a,b){return this.getLayer(a).getCustomProperty(b)}; this.getLayerCustomProperties=function(a){return this.getLayer(a).getCustomProperties()};this.setTimeout=function(b,c){if("function"==typeof c&&"number"==typeof b)var d=c,c=b,b=d;A.push({f:b,time:1E3*a.getAppTime()+c,uid:++H});return H};this.setInterval=function(b,c){if("function"==typeof c&&"number"==typeof b)var d=c,c=b,b=d;A.push({f:b,time:1E3*a.getAppTime()+c,repeat:c,uid:++H});return H};this.clearTimeout=function(a){for(var b=0;bK/wade.c_timeStep?(e=1,p=d):p+=1E3*e*wade.c_timeStep);for(d=0;d=A[g].time&&(A[g].f(),A[g].repeat?A[g].time+=A[g].repeat:a.removeObjectFromArrayByIndex(g,A));for(g=0;g(e-=wade.c_timeStep))e=d?b:a,d=!d;d&&c.call(this,f);this.setDirtyArea()}}};this.additive_=function(a){a=a||Sprite.prototype.draw;return function(b){var c= b.globalCompositeOperation;b.globalCompositeOperation="lighter";a.call(this,b);b.globalCompositeOperation=c}};this.fadeOpacity_=function(a,b,c,d,e){var f=(b-a)*wade.c_timeStep/c,g=a,d=d||Sprite.prototype.draw,i=function(c){if(this._visible){var k=g;g=Math[b>a?"min":"max"](b,g+f);var j=c.globalAlpha;c.globalAlpha=g;d.call(this,c);c.globalAlpha=j;g==b&&1==g?this.getDrawFunction()==i&&this.setDrawFunction(d):g!=k&&this.setDirtyArea();g==b&&(e&&e(),e=null)}};return i};this.resizeOverTime_=function(a, b,c,d,e,f,g){var i=(c-a)*wade.c_timeStep/e,h=a,k=(d-b)*wade.c_timeStep/e,j=b,f=f||Sprite.prototype.draw,m=function(e){this._visible&&(h=Math[c>a?"min":"max"](c,h+i),j=Math[d>b?"min":"max"](d,j+k),this.setSize(h,j),f.call(this,e),h==c&&j==d&&(m==this.getDrawFunction()&&this.setDrawFunction(f),g&&g(),g=null))};return m};this.resizePeriodically_=function(a,b,c,d,e,f){var g=1,i=(c-a)*wade.c_timeStep/e,h=a,k=(d-b)*wade.c_timeStep/e,j=b,f=f||Sprite.prototype.draw;return function(e){if(this._visible){var n= 1==g?c:a,p=1==g?b:d,s=1==g?d:b;h=Math[n>(1==g?a:c)?"min":"max"](n,h+i*g);j=Math[s>p?"min":"max"](s,j+k*g);this.setSize(h,j);f.call(this,e);h==n&&j==s&&(g*=-1)}}};this.mirror_=function(a){a=a||Sprite.prototype.draw;return function(b){b.isWebGl?(this._f32AnimFrameInfo[2]*=-1,this._animations[this._currentAnimation].mirror()):b.scale(-1,1);var c=this._position.x,d=this._cornerX;this._position.x*=-1;this._cornerX=this._position.x-this._size.x/2;a.call(this,b);this._position.x=c;this._cornerX=d;b.isWebGl? (this._f32AnimFrameInfo[2]*=-1,this._animations[this._currentAnimation].mirror()):b.scale(-1,1)}};this.flip_=function(a){a=a||Sprite.prototype.draw;return function(b){b.isWebGl?(this._f32AnimFrameInfo[3]*=-1,this._animations[this._currentAnimation].flip()):b.scale(1,-1);var c=this._position.y,d=this._cornerY;this._position.y*=-1;this._cornerY=this._position.y-this._size.y/2;a.call(this,b);this._position.y=c;this._cornerY=d;b.isWebGl?(this._f32AnimFrameInfo[3]*=-1,this._animations[this._currentAnimation].flip()): b.scale(1,-1)}};this.composite_=function(a,b){b=b||Sprite.prototype.draw;return function(c){if(a!=c.globalCompositeOperation){var d=c.globalCompositeOperation;c.globalCompositeOperation=a;b.call(this,c);c.globalCompositeOperation=d}else b.call(this,c)}};this.boundingBox_=function(a,b,c){a=a||"red";b=b||"blue";c=c||Sprite.prototype.draw;return function(d){if(this._visible)if(d.isWebGl)wade.error("wade.drawFunctions.boundingBox_ is not available in webgl mode");else{d.save();d.lineWidth=1;var e=this._layer? 0.5*wade.screenUnitToWorld(this._layer.id):0.5;if(this._rotation){d.strokeStyle=b;d.lineJoin="round";d.lineCap="round";d.beginPath();var f=-this.orientedBoundingBox.axisXx-this.orientedBoundingBox.axisYx,g=-this.orientedBoundingBox.axisXx+this.orientedBoundingBox.axisYx,i=this.orientedBoundingBox.axisXx+this.orientedBoundingBox.axisYx,h=this.orientedBoundingBox.axisXx-this.orientedBoundingBox.axisYx,k=-this.orientedBoundingBox.axisXy-this.orientedBoundingBox.axisYy,j=-this.orientedBoundingBox.axisXy+ this.orientedBoundingBox.axisYy,m=this.orientedBoundingBox.axisXy+this.orientedBoundingBox.axisYy,n=this.orientedBoundingBox.axisXy-this.orientedBoundingBox.axisYy,f=f+(0=wade.c_epsilon&&(a.x/=b,a.y/=b)};this.scaleInPlace=function(a,b){a.x*=b;a.y*=b};this.clampInPlace=function(a,b,c){a.x=Math.min(Math.max(a.x,b),c);a.y=Math.min(Math.max(a.y,b),c)};this.rotateInPlace=function(a,b){var c=Math.sin(b),d=Math.cos(b),e=c*a.x+d*a.y;a.x=d*a.x-c*a.y;a.y=e};this.minComponent=function(a){return Math.min(a.x, a.y)};this.maxComponent=function(a){return Math.max(a.x,a.y)}}wade.vec2=new Wade_vec2; wade.proceduralImages=new function(){var a=[];this.init=function(){var b=new Sprite(null,null);b.setSize(32,32);b.setDrawFunction(wade.drawFunctions.solidFill_("white"));b.drawToImage("procedural_square",!0);a.push("procedural_square");b.setDrawFunction(function(a){var b=this.getPosition();a.closePath();a.beginPath();a.fillStyle="white";a.arc(b.x,b.y,16,0,2*Math.PI,!1);a.fill()});b.drawToImage("procedural_circle",!0);a.push("procedural_circle");b.setDrawFunction(wade.drawFunctions.radialGradientCircle_(["white"], "rgba(255, 255, 255, 0)"));b.drawToImage("procedural_fadingCircle",!0);a.push("procedural_fadingCircle");b.setDrawFunction(function(a){var b=this.getPosition();a.closePath();a.beginPath();a.fillStyle="white";a.moveTo(-32/6+b.x,-32/6+b.y);a.lineTo(0+b.x,-16+b.y);a.lineTo(32/6+b.x,-32/6+b.y);a.lineTo(16+b.x,0+b.y);a.lineTo(32/6+b.x,32/6+b.y);a.lineTo(0+b.x,16+b.y);a.lineTo(-32/6+b.x,32/6+b.y);a.lineTo(-16+b.x,0+b.y);a.lineTo(-32/6+b.x,-32/6+b.y);a.fill()});b.drawToImage("procedural_star",!0);a.push("procedural_star")}; this.list=function(){return wade.cloneArray(a)}}; Wade_iso=function(){var a=this,b=1.018,c=30,d=25,e={},f=[],g,i,h,k,j,m,n=function(){g||a.init()};this.init=function(a){g=!0;a=a||{};"number"==typeof a.tileScaleFactor&&(b=a.tileScaleFactor);"number"==typeof a.terrainLayerId&&(c=a.terrainLayerId);"number"==typeof a.objectsLayerId&&(d=a.objectsLayerId);a.dontClearCanvas&&wade.setCanvasClearing(c,!1);wade.setLayerSorting(d,"bottomToTop");i=new SceneObject(0,TerrainBehavior,0,0,"iso_terrain");i.iso={};h=i.getBehavior();"object"==typeof a.tileSize&&(h.c_tileSize= wade.cloneObject(a.tileSize));if("object"==typeof a.numTiles)var u=a.numTiles.x,r=a.numTiles.z;u=u||0;r=r||0;u&&r&&wade.addSceneObject(i,!1);this.gameObjects=[];this.gridObjects=[];this.collisionMap=[];f=[];j=a.movementDirection||"diagonal";m=v(j);var y=new Sprite(0,c);y.setSize(h.c_tileSize.x,h.c_tileSize.x);y.setDrawFunction(wade.drawFunctions.solidFill_("white"));y.setRotation(Math.PI/4);var w=new Sprite(0,c);w.setSize(h.c_tileSize.x,h.c_tileSize.x);w.setDrawFunction(wade.drawFunctions.grid_(1, 1,"black",2));w.setRotation(Math.PI/4);var n=new Sprite(0,c);n.setDrawFunction(function(){});var D=Math.ceil(h.c_tileSize.x*Math.sqrt(2));n.setSize(D,D);n.drawToImage("_wade_isoDefault",!0);y.drawToImage("_wade_isoDefault",!1,null,null,"","2d");y=new Sprite("_wade_isoDefault",c);y.setSize(h.c_tileSize.x,h.c_tileSize.y);y.drawToImage("_wade_isoDefault",!0,null,null,"","2d");n.drawToImage("_wade_isoGrid",!0,null,null,"","2d");w.drawToImage("_wade_isoGrid",!1,null,null,"","2d");y=new Sprite("_wade_isoGrid", c);y.setSize(h.c_tileSize.x,h.c_tileSize.y);y.drawToImage("_wade_isoGrid",!0,null,null,"","2d");a.map?(e={},"string"==typeof a.map?wade.loadJson(a.map,null,function(b){k={data:b};h.loadData_begin(k.data,s("terrain",a.callback));t(k.data,a.callback)}):(k=a.map,h.loadData_begin(k.data,s("terrain",a.callback)),t(k.data,a.callback))):h.setNumTiles(u,r);wade.setMainLoop(function(){for(var a=f.length-1;0<=a;a--){var b=f[a],c=b.getPosition(),d=h.getFlatTileCoordinates(c.x,c.y),e=h.getFlatWorldCoordinates(d.x, d.z),g=c.x-e.x,e=c.y-e.y,l=h.c_tileSize.x/2,i=h.c_tileSize.y/2,r=wade.c_epsilon;("both"==j||"straight"==j)&&Math.abs(g)=i*i-r||Math.abs(e)=l*l-r||(p(b,d.x,d.z)?(b.iso.previousPosition.x=c.x,b.iso.previousPosition.y=c.y):(b.setPosition(b.iso.previousPosition),b.processEvent("onStuck",{})),b.iso.targetCoords&&(b.iso.targetCoords.x==d.x&&b.iso.targetCoords.z==d.z)&&(b.iso.targetCoords=0,wade.removeObjectFromArray(b,f)))}},"_wade_isoMovingObjects");!a.map&&a.callback&&a.callback()};this.importScene= function(a,b){n();k={data:a};h.loadData_begin(k.data,s("terrain",b));t(k.data,b)};this.getTileSize=function(){n();return wade.cloneObject(h.c_tileSize)};this.getValidMovementDirections=function(){n();return wade.cloneArray(m)};this.getTileScaleFactor=function(){n();return b};this.setTileHeight=function(a,b,c){h.setTileHeight(a,b,c||0)};this.getTileHeight=function(a,b){return h.getTileHeight(a,b)};this.getNumTiles=function(){return h?{x:h.numTilesX,z:h.numTilesZ}:{x:0,z:0}};this.getTileSprite=function(a, b){return h&&h.tileSprites[a]&&h.tileSprites[a][b]};this.getTileData=function(a,b){return h&&h.getTileData(a,b)};this.getTransitionSprite=function(a,b){return h&&h.transitionSprites[a]&&h.transitionSprites[a][b]};this.getTransitionData=function(a,b){return h&&h.getTransitionData(a,b)};this.getDetailSprite=function(a,b){return h&&h.detailSprites[a]&&h.detailSprites[a][b]};this.getDetailData=function(a,b){return h&&h.getDetailData(a,b)};this.getTerrainLayerId=function(){return c};this.getTerrain=function(){n(); return i};this.getObjectsLayerId=function(){return d};this.checkCollisionsAtTile=function(a,b){return!(!this.collisionMap||!this.collisionMap[a]||!this.collisionMap[a][b])};this.clearCollisions=function(a,b){var c=this.getNumTiles();if("undefined"==typeof a)for(var d=0;d-a/2?i.y=-a/2-b:i.y-b=e))for(c=0;cq.x||0>q.z||q.x>=h.numTilesX||q.z>=h.numTilesZ)&&!(f&&Math.abs(this.getTileHeight(q.x,q.z)-this.getTileHeight(p.x,p.z))>d)&&(!this.collisionMap[q.x]||!this.collisionMap[q.x][q.z])){t=!1;for(g=0;ge*j)continue;m.y+=(n.y-e)/2}if(Math.abs(m.x)*g+Math.abs(m.y)*f<=i)return{x:k.gridCoords.x,z:k.gridCoords.z,valid:!0}}}d=a/this.c_tileSize.x-c/this.c_tileSize.y;e=-(a/this.c_tileSize.x+c/this.c_tileSize.y);d=Math.floor(d);e=Math.floor(e);return{x:d,z:e,valid:0<=d&&0<=e&&dwade.c_epsilon||Math.abs(b.y-n.z)>wade.c_epsilon){if(d.x==a.x&&d.z==a.z)return!1;g(c);this._goToNextDestination()}if(c.x==a.x&&c.z==a.z)return!1;for(b=1;bMath.random()&&0>(f.gridCoords.x-a.x)*d&&(d*=-1),0.5>Math.random()&&0>(f.gridCoords.z-a.z)*e&&(e*=-1))}if(d||e)a.x+=d,a.z+=e,!wade.iso.checkCollisionsAtTile(a.x,a.z)&&!this.setDestination(a)&&(a.x-=d,this.setDestination(a)||(a.z-=e,a.x+=d,this.setDestination(a)))}};this._goToNextDestination=function(){var a=this.owner.iso.gridCoords,c=b[0];this._nextDestination= b[0];e=b[0].object;wade.removeObjectFromArrayByIndex(0,b);wade.iso.moveObjectToTile(this.owner,c.x,c.z,this.movementSpeed);var d=c.x-a.x,a=c.z-a.z;d&&(d/=Math.abs(d));a&&(a/=Math.abs(a));var f;switch(d.toString()+a){case "-1-1":f="s";break;case "-10":f="sw";break;case "-11":f="w";break;case "0-1":f="se";break;case "01":f="nw";break;case "1-1":f="e";break;case "10":f="ne";break;case "11":f="n"}f!=this.lastDirection&&(this.lastDirection=f,this.owner.playAnimation("Walk_iso_"+this.lastDirection))};var g= function(c){b.push(c);a.owner.isMoving()||a._goToNextDestination()}};