/* Platform.js Copyright 2014-2018 Benjamin Tan Copyright 2011-2013 John-David Dalton Available under MIT license */ (function(){function k(b){b=String(b);return b.charAt(0).toUpperCase()+b.slice(1)}function c(b,a){var e=-1,c=b?b.length:0;if("number"==typeof c&&-1y?1:532>y?2:532.05>y?3:533>y?4:534.03>y?5:534.07>y?6:534.1>y?7:534.13>y?8:534.16>y?9:534.24>y?10:534.3>y?11:535.01>y?12:535.02>y?"13+":535.07>y?15:535.11>y?16:535.19>y?17:536.05>y?18:536.1>y?19:537.01>y?20:537.11>y?"21+":537.13>y?23:537.18>y?24:537.24>y?25:537.36>y?26:"Blink"!= R?"27":"28")):(R&&(R[1]="like Safari"),y=(y=y[0],400>y?1:500>y?2:526>y?3:533>y?4:534>y?"4+":535>y?5:537>y?6:538>y?7:601>y?8:"8"));R&&(R[1]+=" "+(y+="number"==typeof y?".x":/[.+]/.test(y)?"":"+"));"Safari"==G&&(!k||45O.indexOf(T)&&p.push("on "+T);O&&p.push((/^on /.test(p[p.length- 1])?"":"on ")+O);if(M){var S=(y=/ ([\d.+]+)$/.exec(M))&&"/"==M.charAt(M.length-y[0].length-1);M={architecture:32,family:y&&!S?M.replace(y[0],""):M,version:y?y[1]:null,toString:function(){var b=this.version;return this.family+(b&&!S?" "+b:"")+(64==this.architecture?" 64-bit":"")}}}(y=/\b(?:AMD|IA|Win|WOW|x86_|x)64\b/i.exec(J))&&!/\bi686\b/i.test(J)?(M&&(M.architecture=64,M.family=M.family.replace(RegExp(" *"+y),"")),G&&(/\bWOW64\b/i.test(e)||U&&/\w(?:86|32)$/.test(u.cpuClass||u.platform)&&!/\bWin64; x64\b/i.test(e))&& p.unshift("32-bit")):M&&/^OS X/.test(M.family)&&"Chrome"==G&&39<=parseFloat(k)&&(M.architecture=64);e||(e=null);l={};l.description=e;l.layout=R&&R[0];l.manufacturer=T;l.name=G;l.prerelease=V;l.product=O;l.ua=e;l.version=G&&k;l.os=M||{architecture:null,family:null,version:null,toString:function(){return"null"}};l.parse=n;l.toString=function(){return this.description||""};l.version&&p.unshift(k);l.name&&p.unshift(G);M&&G&&(M!=String(M).split(" ")[0]||M!=G.split(" ")[0]&&!O)&&p.push(O?"("+M+")":"on "+ M);p.length&&(l.description=p.join(" "));return l}var l={"function":!0,object:!0},r=l[typeof window]&&window||this,p=l[typeof exports]&&exports;l=l[typeof module]&&module&&!module.nodeType&&module;var e=p&&l&&"object"==typeof global&&global;!e||e.global!==e&&e.window!==e&&e.self!==e||(r=e);var h=Math.pow(2,53)-1,q=/\bOpera/;e=Object.prototype;var u=e.hasOwnProperty,t=e.toString,w=n();"function"==typeof define&&"object"==typeof define.amd&&define.amd?(r.platform=w,define(function(){return w})):p&& l?g(w,function(b,a){p[a]=b}):r.platform=w}).call(this); function buildIOSMeta(){for(var k=[{name:"viewport",content:"width=device-width, height=device-height, initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no"},{name:"apple-mobile-web-app-capable",content:"yes"},{name:"apple-mobile-web-app-status-bar-style",content:"black"}],c=0;c
')} function showIOSFullscreenPanel(){jQuery(".xxx-ios-fullscreen-message").css("display","block");jQuery(".xxx-ios-fullscreen-scroll").css("display","block")} function __iosResize(){window.scrollTo(0,0);if("iPhone"===platform.product)switch(window.devicePixelRatio){case 2:switch(window.innerWidth){case 568:320!==window.innerHeight&&jQuery(".xxx-game-iframe-full").addClass("xxx-game-iframe-iphone-se");break;case 667:375===window.innerHeight?hideIOSFullscreenPanel():showIOSFullscreenPanel();break;default:hideIOSFullscreenPanel()}break;case 3:switch(window.innerWidth){case 736:414===window.innerHeight?hideIOSFullscreenPanel():showIOSFullscreenPanel();break; case 724:375===window.innerHeight?hideIOSFullscreenPanel():showIOSFullscreenPanel();break;default:hideIOSFullscreenPanel()}break;default:hideIOSFullscreenPanel()}}function iosResize(){__iosResize();setTimeout(function(){__iosResize()},500)}$(document).ready(function(){platform&&"iPhone"===platform.product&&"Safari"===platform.name&&(buildIOSFullscreenPanel(),buildIOSMeta())});jQuery(window).resize(function(){platform&&"iPhone"===platform.product&&"Safari"===platform.name&&iosResize()}); (function(){var k="undefined"!==typeof window&&"undefined"!==typeof window.document?window.document:{},c="undefined"!==typeof module&&module.exports,d="undefined"!==typeof Element&&"ALLOW_KEYBOARD_INPUT"in Element,g=function(){for(var b,a=["requestFullscreen exitFullscreen fullscreenElement fullscreenEnabled fullscreenchange fullscreenerror".split(" "),"webkitRequestFullscreen webkitExitFullscreen webkitFullscreenElement webkitFullscreenEnabled webkitfullscreenchange webkitfullscreenerror".split(" "), "webkitRequestFullScreen webkitCancelFullScreen webkitCurrentFullScreenElement webkitCancelFullScreen webkitfullscreenchange webkitfullscreenerror".split(" "),"mozRequestFullScreen mozCancelFullScreen mozFullScreenElement mozFullScreenEnabled mozfullscreenchange mozfullscreenerror".split(" "),"msRequestFullscreen msExitFullscreen msFullscreenElement msFullscreenEnabled MSFullscreenChange MSFullscreenError".split(" ")],c=0,l=a.length,f={};c@media("+c+":"+g["client"+k]+"px){body#vpw-test-b div#vpw-test-d{"+c+":7px!important}}";a.appendChild(f);g.insertBefore(a,d.head); k=7==f["offset"+k]?g["client"+k]:window["inner"+k];g.removeChild(a)}else k=window["inner"+k];return k}function getIOSWindowHeight(){return document.documentElement.clientWidth/window.innerWidth*window.innerHeight}function getHeightOfIOSToolbars(){var k=(0===window.orientation?screen.height:screen.width)-getIOSWindowHeight();return 1a||(a=(k-d)/2);$("#canvas").css("top",a+"px");s_iCanvasOffsetHeight=a;$("#canvas").css("left",f+"px");resizeCanvas3D();s_iCanvasResizeWidth=g;s_iCanvasResizeHeight=d;s_iCanvasOffsetWidth=f;fullscreenHandler()}} function _checkOrientation(k,c){s_bMobile&&ENABLE_CHECK_ORIENTATION&&(k>c?"landscape"===$(".orientation-msg-container").attr("data-orientation")?($(".orientation-msg-container").css("display","none"),s_oMain.startUpdate()):($(".orientation-msg-container").css("display","block"),s_oMain.stopUpdate()):"portrait"===$(".orientation-msg-container").attr("data-orientation")?($(".orientation-msg-container").css("display","none"),s_oMain.startUpdate()):($(".orientation-msg-container").css("display","block"), s_oMain.stopUpdate()))}function createBitmap(k,c,d){var g=new createjs.Bitmap(k),a=new createjs.Shape;c&&d?a.graphics.beginFill("#fff").drawRect(-c/2,-d/2,c,d):a.graphics.beginFill("#ff0").drawRect(0,0,k.width,k.height);g.hitArea=a;return g}function createSprite(k,c,d,g,a,f){k=null!==c?new createjs.Sprite(k,c):new createjs.Sprite(k);c=new createjs.Shape;c.graphics.beginFill("#000000").drawRect(-d,-g,a,f);k.hitArea=c;return k} function randomFloatBetween(k,c,d){"undefined"===typeof d&&(d=2);return parseFloat(Math.min(k+Math.random()*(c-k),c).toFixed(d))}function shuffle(k){for(var c=k.length,d,g;0!==c;)g=Math.floor(Math.random()*c),--c,d=k[c],k[c]=k[g],k[g]=d;return k}function formatTime(k){k/=1E3;var c=Math.floor(k/60);k=parseFloat(k-60*c).toFixed(1);var d="";d=10>c?d+("0"+c+":"):d+(c+":");return 10>k?d+("0"+k):d+k}function degreesToRadians(k){return k*Math.PI/180} function checkRectCollision(k,c){var d=getBounds(k,.9);var g=getBounds(c,.98);return calculateIntersection(d,g)}function calculateIntersection(k,c){var d,g,a,f;var b=k.x+(d=k.width/2);var m=k.y+(g=k.height/2);var n=c.x+(a=c.width/2);var l=c.y+(f=c.height/2);b=Math.abs(b-n)-(d+a);m=Math.abs(m-l)-(g+f);return 0>b&&0>m?(b=Math.min(Math.min(k.width,c.width),-b),m=Math.min(Math.min(k.height,c.height),-m),{x:Math.max(k.x,c.x),y:Math.max(k.y,c.y),width:b,height:m,rect1:k,rect2:c}):null} function getBounds(k,c){var d={x:Infinity,y:Infinity,width:0,height:0};if(k instanceof createjs.Container){d.x2=-Infinity;d.y2=-Infinity;var g=k.children,a=g.length,f;for(f=0;fd.x2&&(d.x2=b.x+b.width);b.y+b.height>d.y2&&(d.y2=b.y+b.height)}Infinity==d.x&&(d.x=0);Infinity==d.y&&(d.y=0);Infinity==d.x2&&(d.x2=0);Infinity==d.y2&&(d.y2=0);d.width=d.x2-d.x;d.height=d.y2-d.y;delete d.x2;delete d.y2}else{if(k instanceof createjs.Bitmap){a= k.sourceRect||k.image;f=a.width*c;var m=a.height*c}else if(k instanceof createjs.Sprite)if(k.spriteSheet._frames&&k.spriteSheet._frames[k.currentFrame]&&k.spriteSheet._frames[k.currentFrame].image){a=k.spriteSheet.getFrame(k.currentFrame);f=a.rect.width;m=a.rect.height;g=a.regX;var n=a.regY}else d.x=k.x||0,d.y=k.y||0;else d.x=k.x||0,d.y=k.y||0;g=g||0;f=f||0;n=n||0;m=m||0;d.regX=g;d.regY=n;a=k.localToGlobal(0-g,0-n);b=k.localToGlobal(f-g,m-n);f=k.localToGlobal(f-g,0-n);g=k.localToGlobal(0-g,m-n);d.x= Math.min(Math.min(Math.min(a.x,b.x),f.x),g.x);d.y=Math.min(Math.min(Math.min(a.y,b.y),f.y),g.y);d.width=Math.max(Math.max(Math.max(a.x,b.x),f.x),g.x)-d.x;d.height=Math.max(Math.max(Math.max(a.y,b.y),f.y),g.y)-d.y}return d}function NoClickDelay(k){this.element=k;window.Touch&&this.element.addEventListener("touchstart",this,!1)} NoClickDelay.prototype={handleEvent:function(k){switch(k.type){case "touchstart":this.onTouchStart(k);break;case "touchmove":this.onTouchMove(k);break;case "touchend":this.onTouchEnd(k)}},onTouchStart:function(k){k.preventDefault();this.moved=!1;this.element.addEventListener("touchmove",this,!1);this.element.addEventListener("touchend",this,!1)},onTouchMove:function(k){this.moved=!0},onTouchEnd:function(k){this.element.removeEventListener("touchmove",this,!1);this.element.removeEventListener("touchend", this,!1);if(!this.moved){k=document.elementFromPoint(k.changedTouches[0].clientX,k.changedTouches[0].clientY);3==k.nodeType&&(k=k.parentNode);var c=document.createEvent("MouseEvents");c.initEvent("click",!0,!0);k.dispatchEvent(c)}}}; (function(){function k(d){var k={focus:"visible",focusin:"visible",pageshow:"visible",blur:"hidden",focusout:"hidden",pagehide:"hidden"};d=d||window.event;d.type in k?document.body.className=k[d.type]:(document.body.className=this[c]?"hidden":"visible","hidden"===document.body.className?s_oMain.stopUpdate():s_oMain.startUpdate())}var c="hidden";c in document?document.addEventListener("visibilitychange",k):(c="mozHidden")in document?document.addEventListener("mozvisibilitychange",k):(c="webkitHidden")in document?document.addEventListener("webkitvisibilitychange",k):(c="msHidden")in document?document.addEventListener("msvisibilitychange",k):"onfocusin"in document?document.onfocusin=document.onfocusout=k:window.onpageshow=window.onpagehide=window.onfocus=window.onblur=k})();function playSound(k,c,d){return!1===DISABLE_SOUND_MOBILE||!1===s_bMobile?(s_aSounds[k].play(),s_aSounds[k].volume(c),s_aSounds[k].loop(d),s_aSounds[k]):null} function stopSound(k){!1!==DISABLE_SOUND_MOBILE&&!1!==s_bMobile||s_aSounds[k].stop()}function setVolume(k,c){!1!==DISABLE_SOUND_MOBILE&&!1!==s_bMobile||s_aSounds[k].volume(c)}function setMute(k,c){!1!==DISABLE_SOUND_MOBILE&&!1!==s_bMobile||s_aSounds[k].mute(c)}function ctlArcadeResume(){null!==s_oMain&&s_oMain.startUpdate()}function ctlArcadePause(){null!==s_oMain&&s_oMain.stopUpdate()} function getParamValue(k){for(var c=window.location.search.substring(1).split("&"),d=0;dwindow.innerHeight-3?!0:!1,null!==s_oInterface&&s_oInterface.resetFullscreenBut(),null!==s_oMenu&&s_oMenu.resetFullscreenBut(),null!==s_oLevelMenu&&s_oLevelMenu.resetFullscreenBut())} if(screenfull.enabled)screenfull.on("change",function(){s_bFullscreen=screenfull.isFullscreen;null!==s_oInterface&&s_oInterface.resetFullscreenBut();null!==s_oMenu&&s_oMenu.resetFullscreenBut();null!==s_oLevelMenu&&s_oLevelMenu.resetFullscreenBut()}); function CSpriteLibrary(){var k={},c,d,g,a,f,b;this.init=function(m,n,l){c={};g=d=0;a=m;f=n;b=l};this.addSprite=function(b,a){k.hasOwnProperty(b)||(k[b]=c[b]={szPath:a,oSprite:new Image,bLoaded:!1},d++)};this.getSprite=function(b){return k.hasOwnProperty(b)?k[b].oSprite:null};this._onSpritesLoaded=function(){d=0;f.call(b)};this._onSpriteLoaded=function(c){a.call(b,c);++g===d&&this._onSpritesLoaded()};this.loadSprites=function(){for(var b in c)c[b].oSprite.oSpriteLibrary=this,c[b].oSprite.szKey=b, c[b].oSprite.onload=function(){this.oSpriteLibrary.setLoaded(this.szKey);this.oSpriteLibrary._onSpriteLoaded(this.szKey)},c[b].oSprite.src=c[b].szPath};this.setLoaded=function(b){k[b].bLoaded=!0};this.isLoaded=function(b){return k[b].bLoaded};this.getNumSprites=function(){return d}} var CANVAS_WIDTH=1600,CANVAS_HEIGHT=968,EDGEBOARD_X=150,EDGEBOARD_Y=150,DISABLE_SOUND_MOBILE=!1,PRIMARY_FONT="space_comics",FPS=60,FPS_TIME=1E3/FPS,STATE_LOADING=0,STATE_MENU=1,STATE_HELP=1,STATE_GAME=3,ON_MOUSE_DOWN=0,ON_MOUSE_UP=1,ON_MOUSE_OVER=2,ON_MOUSE_OUT=3,ON_DRAG_START=4,ON_DRAG_END=5,ON_CONTROLLER_END=8,ON_CONTROLLER_REMOVE=9,ON_CONTROLLER_ROLL=10,RESTART_WATER_DEPTH_VALUE=5,HOLE_DEPTH_VALUE=3,MIN_MOUSE_DISTANCE_POWER_ACTIVATED=30,MIN_MOUSE_DISTANCE_POWER_ACTIVATED_MOBILE=100,MAX_MOUSE_DISTANCE_POWER_ACTIVATED= 300,BALL_MASS=1,BALL_RADIUS=2,BALL_FRICTION=.5,BALL_RESTITUTION=.5,BALL_LINEAR_DAMPING=.5,BALL_LINEAR_DAMPING_SAND=.95,BALL_LINEAR_DAMPING_WATER=.99,BALL_LINEAR_DAMPING_HOLE=3.8,MIN_VELOCITY_FOR_LAUNCH=1.5,ARROW_DISTANCE=75,RATIO_ARROW_DISTANCE=4,TIME_FOR_LAUNCH=.2,OFFSET_ANGLE_ARROW=90,HIT_BALL_MAX_FORCE=200,HIT_BALL_MIN_FORCE=.01,SHOW_3D_RENDER=!1,CAMERA_TEST=!1,START_CAMERA_POSITION={x:-240,y:-290,z:280},NEAR=-30,FAR=2E3,FORCE_MULTIPLIER=2,PAR_POINTS,ADDED_POINTS,MAX_SHOT_POWER,ENABLE_FULLSCREEN, ENABLE_CHECK_ORIENTATION,NUM_HOLES=18,PAR=[],FLAGS_POS=[[{x:424,y:-488},{x:655,y:-340}],[{x:660,y:102},{x:924,y:-54}],[{x:816,y:-1212},{x:1580,y:-704}],[{x:64,y:-588},{x:464,y:-816}],[{x:693,y:-1307},{x:1308,y:-912}],[{x:175,y:-1252},{x:480,y:-1052}],[{x:-432,y:852},{x:-204,y:1010}],[{x:-1430,y:632},{x:-1200,y:788}],[{x:-856,y:1220},{x:-628,y:1372}],[{x:-2140,y:1042},{x:-1910,y:1196}],[{x:-1612,y:736},{x:-1380,y:892}],[{x:-112,y:-136},{x:125,y:20}],[{x:-1618,y:236},{x:-1390,y:392}],[{x:-1860,y:735}, {x:-1396,y:1048}],[{x:692,y:-588},{x:924,y:-440}],[{x:1930,y:-484},{x:2088,y:-384}],[{x:-1740,y:-30},{x:-1276,y:276}],[{x:960,y:-764},{x:1216,y:-590}]],CAUSTICS_POS=[null,null,{x:1148,y:-750,scale:1},null,null,null,{x:904,y:-730,scale:1},{x:468,y:-328,scale:1},{x:1392,y:108,scale:.3},{x:508,y:-272,scale:1},null,{x:-838,y:-386,scale:.7},{x:514,y:-60,scale:1},null,{x:688,y:-60,scale:.4},null,null,{x:846,y:-496,scale:1}],LOCALSTORAGE_SCORE="score"; function CLocalStorage(k){this.init=function(){var c=window.localStorage.getItem(k);null!==c&&void 0!==c&&!1!==s_bStorageAvailable||this.resetAllData()};this.setItem=function(c,d){s_bStorageAvailable&&(_bDirty=!0,window.localStorage.setItem(k+"_"+c,d))};this.getItem=function(c){return window.localStorage.getItem(k+"_"+c)};this.setItemJson=function(c,d){s_bStorageAvailable&&localStorage.setItem(k+"_"+c,JSON.stringify(d))};this.getItemJson=function(c){c=JSON.parse(localStorage.getItem(k+"_"+c));if(null=== c){c=[];for(var d=0;d(k/=g/2)?d/2*k*k*k+c:d/2*((k-=2)*k*k+2)+c};this.easeOutQuint=function(k,c,d,g){return d*((k=k/g-1)*k*k*k*k+1)+c}} function CRollingTextController(k,c,d,g,a){var f,b,m,n,l,r,p,e,h,q,u,t;this._init=function(b,a,c,f,r){e=[];h=[];l=f;this.setUpdateInfo(c);p=r;u=b;t=a;q=[]};this.unload=function(){clearInterval(r)};this.setUpdateInfo=function(a){m=parseFloat(k.text);n=m+a;f=0;b=Math.round(l/FPS);var e=this;r=setInterval(function(){e.update()},FPS_TIME)};this.addEventListener=function(b,a,c){e[b]=a;h[b]=c};this.addRollingListener=function(b,a,c){e[ON_CONTROLLER_ROLL]=b;h[ON_CONTROLLER_ROLL]=a;q=[];for(b=0;bb)f=0,u.text=n.toFixed(0),null!==t&&(t.text=n.toFixed(0)),clearInterval(r);else{switch(p){case EASE_BACKIN:var a=s_oTweenController.easeInBack(f,0,1,b);break;case EASE_BACKOUT:a=s_oTweenController.easeOutBack(f,0,1,b);break;case EASE_CUBIC_IN:a=s_oTweenController.easeInCubic(f,0,1,b);break;case EASE_CUBIC_OUT:a=s_oTweenController.easeOutCubic(f,0,1,b);break;case EASE_ELASTIC_OUT:a= s_oTweenController.easeOutElastic(f,0,1,b);break;case EASE_LINEAR:a=s_oTweenController.easeLinear(f,0,1,b);break;case EASE_QUART_BACKIN:a=s_oTweenController.easeBackInQuart(f,0,1,b);break;default:a=s_oTweenController.easeLinear(f,0,1,b)}a=s_oTweenController.tweenValue(m,n,a);for(var c=0;c=q[c].step&&!q[c].flag&&(q[c].flag=!0,null!==e[ON_CONTROLLER_ROLL]&&e[ON_CONTROLLER_ROLL].call(h[ON_CONTROLLER_ROLL],c));u.text=a.toFixed(0);null!==t&&(t.text=a.toFixed(0))}};this._init(k,c,d,g,a)} var TEXT_PRELOADER_CONTINUE="START",TEXT_GAMEOVER="GAME OVER",TEXT_ARE_SURE="ARE YOU SURE YOU WANT TO QUIT THE GAME?",TEXT_SAVE_REMOVE="THIS WILL REMOVE ALL YOUR ACHIEVEMENTS! DO YOU WANT TO PROCEED?",TEXT_TOTAL_SCORE="TOTAL SCORE",TEXT_LAUNCH="LAUNCH",TEXT_HOLE="HOLE",TEXT_LOADING="LOADING...",TEXT_ALL_COMPLETE="ALL LEVEL COMPLETED",TEXT_SELECT_A_LEVEL="SELECT A LEVEL",TEXT_HELP1_PC="CLICK THE BALL AND DRAG TO SET POWER AND DIRECTION",TEXT_HELP1_MOBILE="TOUCH THE BALL AND DRAG THE FINGER TO SET POWER AND DIRECTION", TEXT_HELP2="CLICK AND DRAG TO HAVE A PAN VIEW",TEXT_ERR_LS="YOUR WEB BROWSER DOES NOT SUPPORT STORING SETTING LOCALLY. IN SAFARI, THE MOST COMMON CAUSE OF THIS IS USING 'PRIVATE BROWSING MODE'. SOME INFO MAY NOT SAVE OR SOME FEATURE MAY NOT WORK PROPERLY.",TEXT_SCORE="SCORE",TEXT_COMPLETE="COMPLETE",TEXT_DEVELOPED="DEVELOPED BY",TEXT_DOUBLE_BOGEY="DOUBLE BOGEY",TEXT_BOGEY="BOGEY",TEXT_PAR="PAR",TEXT_BIRDIE="BIRDIE",TEXT_EAGLE="EAGLE",TEXT_ALBATROSS="ALBATROSS",TEXT_CONDOR="CONDOR",TEXT_PHOENIX="PHOENIX", TEXT_HOLEINONE="HOLE IN ONE",TEXT_SHARE_IMAGE="200x200.jpg",TEXT_SHARE_TITLE="Congratulations!",TEXT_SHARE_MSG1="You collected ",TEXT_SHARE_MSG2=" points!

Share your score with your friends!",TEXT_SHARE_SHARE1="My score is ",TEXT_SHARE_SHARE2=" points! Can you do better?"; function CPreloader(){var k,c,d,g,a,f,b,m,n,l;this._init=function(){s_oSpriteLibrary.init(this._onImagesLoaded,this._onAllImagesLoaded,this);s_oSpriteLibrary.addSprite("progress_bar","./sprites/progress_bar.png");s_oSpriteLibrary.addSprite("200x200","./sprites/200x200.jpg");s_oSpriteLibrary.addSprite("but_start","./sprites/but_start.png");s_oSpriteLibrary.loadSprites();l=new createjs.Container;s_oStage.addChild(l)};this.unload=function(){n.unload();l.removeAllChildren()};this._onImagesLoaded=function(){}; this._onAllImagesLoaded=function(){this.attachSprites();s_oMain.preloaderReady()};this.attachSprites=function(){var r=new createjs.Shape;r.graphics.beginFill("black").drawRect(0,0,CANVAS_WIDTH,CANVAS_HEIGHT);l.addChild(r);r=s_oSpriteLibrary.getSprite("200x200");b=createBitmap(r);b.regX=.5*r.width;b.regY=.5*r.height;b.x=CANVAS_WIDTH/2;b.y=CANVAS_HEIGHT/2-80;l.addChild(b);m=new createjs.Shape;m.graphics.beginFill("rgba(0,0,0,0.01)").drawRoundRect(b.x-100,b.y-100,200,200,10);l.addChild(m);b.mask=m;r= s_oSpriteLibrary.getSprite("progress_bar");g=createBitmap(r);g.x=CANVAS_WIDTH/2-r.width/2;g.y=CANVAS_HEIGHT/2+70;l.addChild(g);k=r.width;c=r.height;a=new createjs.Shape;a.graphics.beginFill("rgba(0,0,0,0.01)").drawRect(g.x,g.y,1,c);l.addChild(a);g.mask=a;d=new createjs.Text("","30px "+PRIMARY_FONT,"#fff");d.x=CANVAS_WIDTH/2;d.y=CANVAS_HEIGHT/2+120;d.textBaseline="alphabetic";d.textAlign="center";l.addChild(d);r=s_oSpriteLibrary.getSprite("but_start");n=new CTextButton(CANVAS_WIDTH/2,CANVAS_HEIGHT/ 2+100,r,TEXT_PRELOADER_CONTINUE,"Arial","#000",36,l);n.addEventListener(ON_MOUSE_UP,this._onButStartRelease,this);n.setVisible(!1);f=new createjs.Shape;f.graphics.beginFill("black").drawRect(0,0,CANVAS_WIDTH,CANVAS_HEIGHT);l.addChild(f);createjs.Tween.get(f).to({alpha:0},500).call(function(){createjs.Tween.removeTweens(f);l.removeChild(f)})};this._onButStartRelease=function(){s_oMain._allResourcesLoaded()};this.refreshLoader=function(b){d.text=b+"%";100===b&&(n.setVisible(!0),d.visible=!1,g.visible= !1);a.graphics.clear();b=Math.floor(b*k/100);a.graphics.beginFill("rgba(0,0,0,0.01)").drawRect(g.x,g.y,b,c)};this._init()} function CLoadingScreen(k){var c=null,d,g,a;this._init=function(){a=new createjs.Container;k.addChild(a);c=new createjs.Shape;c.graphics.beginFill("black").drawRect(0,0,CANVAS_WIDTH,CANVAS_HEIGHT);c.on("click",function(){});a.addChild(c);d=new createjs.Text(TEXT_LOADING,"30px "+PRIMARY_FONT,"#ffffff");d.x=CANVAS_WIDTH/2;d.y=CANVAS_HEIGHT/2;d.textAlign="center";d.textBaseline="alphabetic";d.alpha=0;a.addChild(d);var f=s_oSpriteLibrary.getSprite("preloader_anim");g=createBitmap(f);g.x=CANVAS_WIDTH/ 2;g.y=CANVAS_HEIGHT/2+40;g.regX=.5*f.width;g.regY=.5*f.height;g.alpha=0;a.addChild(g);createjs.Tween.get(g).to({alpha:1},500);createjs.Tween.get(d).to({alpha:1},500);this.animLoad()};this.animLoad=function(){var a=this;createjs.Tween.get(g).to({rotation:g.rotation+360},1E3).call(function(){a.animLoad()})};this.unload=function(){c.removeAllEventListeners();createjs.Tween.get(a).to({alpha:0},500).call(function(){k.removeChild(a)})};this._init();return this} function CMain(k){var c,d=0,g=0,a=STATE_LOADING,f,b,m,n;this.initContainer=function(){var a=document.getElementById("canvas");s_oStage=new createjs.Stage(a);createjs.Touch.enable(s_oStage);s_oStage.preventSelection=!1;s_bMobile=jQuery.browser.mobile;!1===s_bMobile&&(s_oStage.enableMouseOver(20),$("body").on("contextmenu","#canvas",function(b){return!1}));s_iPrevTime=(new Date).getTime();createjs.Ticker.addEventListener("tick",this._update);createjs.Ticker.framerate=FPS;navigator.userAgent.match(/Windows Phone/i)&& (DISABLE_SOUND_MOBILE=!0);f=[];s_oSpriteLibrary=new CSpriteLibrary;s_oTweenController=new CTweenController;b=new CPreloader;c=!0};this.soundLoaded=function(){d++;b.refreshLoader(Math.floor(d/g*100))};this._initSounds=function(){var b=[];b.push({path:"./sounds/",filename:"win_level",loop:!1,volume:1,ingamename:"win_level"});b.push({path:"./sounds/",filename:"click",loop:!1,volume:1,ingamename:"click"});b.push({path:"./sounds/",filename:"ambience",loop:!1,volume:1,ingamename:"ambience"});b.push({path:"./sounds/", filename:"hit_ball",loop:!1,volume:1,ingamename:"hit_ball"});b.push({path:"./sounds/",filename:"soundtrack",loop:!0,volume:1,ingamename:"soundtrack"});b.push({path:"./sounds/",filename:"hole",loop:!1,volume:1,ingamename:"hole"});b.push({path:"./sounds/",filename:"sand",loop:!1,volume:1,ingamename:"sand"});b.push({path:"./sounds/",filename:"water",loop:!1,volume:1,ingamename:"water"});b.push({path:"./sounds/",filename:"star",loop:!1,volume:1,ingamename:"star"});g+=b.length;s_aSounds=[];for(var a=0;a< b.length;a++)s_aSounds[b[a].ingamename]=new Howl({src:[b[a].path+b[a].filename+".mp3"],autoplay:!1,preload:!0,loop:b[a].loop,volume:b[a].volume,onload:s_oMain.soundLoaded})};this._loadImages=function(){s_oSpriteLibrary.init(this._onImagesLoaded,this._onAllImagesLoaded,this);s_oSpriteLibrary.addSprite("preloader_anim","./sprites/preloader_anim.png");s_oSpriteLibrary.addSprite("but_play","./sprites/but_play.png");s_oSpriteLibrary.addSprite("but_continue","./sprites/but_continue.png");s_oSpriteLibrary.addSprite("but_continue_big", "./sprites/but_continue_big.png");s_oSpriteLibrary.addSprite("but_info","./sprites/but_info.png");s_oSpriteLibrary.addSprite("ctl_logo","./sprites/ctl_logo.png");s_oSpriteLibrary.addSprite("but_yes","./sprites/but_yes.png");s_oSpriteLibrary.addSprite("but_not","./sprites/but_not.png");s_oSpriteLibrary.addSprite("but_exit","./sprites/but_exit.png");s_oSpriteLibrary.addSprite("but_restart_small","./sprites/but_restart_small.png");s_oSpriteLibrary.addSprite("but_restart_big","./sprites/but_restart_big.png"); s_oSpriteLibrary.addSprite("help_touch","./sprites/help_touch.png");s_oSpriteLibrary.addSprite("star","./sprites/star.png");s_oSpriteLibrary.addSprite("bg_menu","./sprites/bg_menu.jpg");s_oSpriteLibrary.addSprite("msg_box","./sprites/msg_box.png");s_oSpriteLibrary.addSprite("audio_icon","./sprites/audio_icon.png");s_oSpriteLibrary.addSprite("but_home","./sprites/but_home.png");s_oSpriteLibrary.addSprite("ball","./sprites/ball.png");s_oSpriteLibrary.addSprite("arrow","./sprites/arrow.png");s_oSpriteLibrary.addSprite("but_level", "./sprites/but_level.png");s_oSpriteLibrary.addSprite("flag","./sprites/flag.png");s_oSpriteLibrary.addSprite("ball_shadow","./sprites/ball_shadow.png");s_oSpriteLibrary.addSprite("caustics","./sprites/caustics.png");s_oSpriteLibrary.addSprite("but_center_view","./sprites/but_center_view.png");s_oSpriteLibrary.addSprite("ball_water","./sprites/ball_water.png");s_oSpriteLibrary.addSprite("press_indicator","./sprites/press_indicator.png");s_oSpriteLibrary.addSprite("menu_text_minigolf","./sprites/menu_text_minigolf.png"); s_oSpriteLibrary.addSprite("menu_text_world","./sprites/menu_text_world.png");s_oSpriteLibrary.addSprite("but_fullscreen","./sprites/but_fullscreen.png");s_oSpriteLibrary.addSprite("arrow","./sprites/arrow.png");s_oSpriteLibrary.addSprite("arrow_fill","./sprites/arrow_fill.png");s_oSpriteLibrary.addSprite("arrow_frame","./sprites/arrow_frame.png");g+=s_oSpriteLibrary.getNumSprites();s_oSpriteLibrary.loadSprites()};this._onImagesLoaded=function(){d++;b.refreshLoader(Math.floor(d/g*100))};this._onAllImagesLoaded= function(){};this._allResourcesLoaded=function(){s_oLocalStorage=new CLocalStorage("minigolf_world");try{s_oLocalStorage.init()}catch(r){s_bStorageAvailable=!1}b.unload();s_oSoundTrack=playSound("soundtrack",1,!0);this.gotoMenu()};this.loadSelectedLevel=function(b){s_iCurLevel=b;g=d=0;if(f[b])this.gotoGame(s_iCurLevel);else{n=new CLoadingScreen(s_oStage);s_oSpriteLibrary.init(this._onLevelLoaded,this._onAllImagesLoaded,this);b+=1;for(var a,e=1;18>=e;e++)a=e-1,10>e?s_oSpriteLibrary.addSprite("level_"+ b+"_bg_"+a,"./sprites/bg_levels/level_"+b+"/bg_piece_"+("0"+e)+".jpg"):s_oSpriteLibrary.addSprite("level_"+b+"_bg_"+a,"./sprites/bg_levels/level_"+b+"/bg_piece_"+e+".jpg");g+=s_oSpriteLibrary.getNumSprites();s_oSpriteLibrary.loadSprites()}};this._onLevelLoaded=function(){d++;d===g&&(f[s_iCurLevel]=!0,n.unload(),this.gotoGame(s_iCurLevel),this.loadInBackgroundLevel(s_iCurLevel+1))};this.loadInBackgroundLevel=function(b){s_iBackgroundLevel=b;g=d=0;if(!f[b]){s_oSpriteLibrary.init(this._onBackgroundLevelLoaded, this._onAllImagesLoaded,this);b+=1;for(var a,e=1;18>=e;e++)a=e-1,10>e?s_oSpriteLibrary.addSprite("level_"+b+"_bg_"+a,"./sprites/bg_levels/level_"+b+"/bg_piece_"+("0"+e)+".jpg"):s_oSpriteLibrary.addSprite("level_"+b+"_bg_"+a,"./sprites/bg_levels/level_"+b+"/bg_piece_"+e+".jpg");g+=s_oSpriteLibrary.getNumSprites();s_oSpriteLibrary.loadSprites()}};this._onBackgroundLevelLoaded=function(){d++;if(d===g){for(var b=f[s_iBackgroundLevel]=!0,a=0;aHIT_BALL_MIN_FORCE&&(a>HIT_BALL_MAX_FORCE&&(b.normalize(),b.scalarProduct(HIT_BALL_MAX_FORCE)),b.set(b.getX(),-b.getY()),b.rotate(Math.radians(45)),s_oGame.launchBall({x:b.getX(),y:b.getY()}), F++,p.refreshLaunch(F));H.x=0;H.y=0;s_oGame.clickBall(!1)}};this.onDragPoint=function(b){!P&&D&&z&&(H={x:b.clientX,y:b.clientY},C=!0)};this.onClickPoint=function(b){50>distance(b.clientX,b.clientY,N.x,N.y)&&(z={x:v.getX(),y:v.getY()},s_oGame.clickBall(!0))};this.unload=function(){l=!1;w&&(w.unload(),w=null);t&&(t.unload(),t=null);s_oStage.removeAllChildren();p.unload();v.unload();null!==u&&u.unload();stopSound("ambience")};this.nextLevel=function(){q++;var b=s_oSpriteLibrary.getSprite("msg_box"); q>=NUM_HOLES?(u=new CEndPanel(b,F),u.show(F,Math.floor(I),q)):(this.unload(),s_oMain.loadSelectedLevel(q))};this.angleArrow=function(){SHOW_3D_RENDER||(v.getX(),v.getY())};this.clickBall=function(b){D=b};this.launchBall=function(a){if(0===q&&0===F)v.setMoving(!0),(new CHelpPanel(X)).stage2Help(a);else{this.setBallSleep(!1);P=!0;var e=A.ballBody();b=e.position.x;m=e.position.y;n=e.position.z;A.addImpulse(e,a);F++;p.refreshLaunch(F)}};this.onExit=function(){fa.unload();fa.unloadLevel();$(s_oMain).trigger("share_event", r);$(s_oMain).trigger("end_level",q);$(s_oMain).trigger("end_session");setVolume("soundtrack",1);s_oMain.gotoMenu()};this._onExitHelp=function(){v.setVisible(!0);v.setMoving(!1);setVolume("soundtrack",0)};this._onExitHelp2=function(a){this.setBallSleep(!1);P=!0;var e=A.ballBody();b=e.position.x;m=e.position.y;n=e.position.z;A.addImpulse(e,a);F++;p.refreshLaunch(F)};this.moveBall=function(){var b=N;v.setPosition(b.x,b.y)};this.levelComplete=function(){l=!1;$(s_oMain).trigger("end_level",q);var b=s_oSpriteLibrary.getSprite("msg_box"); K=new CLevelCompletePanel(b);K.show(F,Math.floor(I),q)};this.unloadLevel=function(){P=!1};this.restartLevel=function(){$(s_oMain).trigger("restart_level",q);this.unload();this._init(q)};this.detectBallVelocityForLaunch=function(){if(!0===P)B.x-MIN_VELOCITY_FOR_LAUNCH&&B.y-MIN_VELOCITY_FOR_LAUNCH&&B.z-MIN_VELOCITY_FOR_LAUNCH?0>Q?(P=!1,v.setMoving(!1),E||v.pressIndicatorAnim(),A.setElementVelocity(A.ballBody(), {x:0,y:0,z:0}),A.ballBody().angularVelocity.setZero(),E||this.setBallSleep(!0)):Q-=1/createjs.Ticker.framerate:Q=TIME_FOR_LAUNCH;else if(B.x>MIN_VELOCITY_FOR_LAUNCH||B.x<-MIN_VELOCITY_FOR_LAUNCH)P=!0,Q=TIME_FOR_LAUNCH};this.getBall=function(){return v};this.getBallVelocity=function(){return B};this.getBallPhysics=function(){return _oBallPhysics};this.getBallInSand=function(){return L};this.ballCollideWithTerrain=function(b){R=A.ballBody().position.z;!J&&b&&(J=!0,(new createjs.Tween.get(T,{override:!0})).to({alpha:1}, 100));J&&!b&&(J=!1,U||(new createjs.Tween.get(T,{override:!0})).to({alpha:0},100))};this.ballCollideWithSand=function(b){b&&!L?(playSound("sand",1,!1),A.setElementLinearDamping(A.ballBody(),BALL_LINEAR_DAMPING_SAND)):!b&&L&&A.setElementLinearDamping(A.ballBody(),BALL_LINEAR_DAMPING);L=b};this.ballCollideWithWater=function(b){E||(G=A.ballBody().position.z);(E=b)?(A.setElementLinearDamping(A.ballBody(),BALL_LINEAR_DAMPING_WATER),A.setGravity(-49.81),b=G-A.ballBody().position.z,v.setWaterMask(-(b/RESTART_WATER_DEPTH_VALUE)+ 1),b>RESTART_WATER_DEPTH_VALUE&&(A.setGravity(0),A.setElementVelocity(A.ballBody(),{x:0,y:0,z:0}),A.ballBody().force.setZero(),A.ballBody().torque.setZero(),A.ballBody().angularVelocity.setZero(),O+=1,60HOLE_DEPTH_VALUE&&(A.setGravity(0),A.setElementVelocity(A.ballBody(),{x:0,y:0,z:0}),playSound("hole",1,!1),this.levelComplete())):(T.visible=!0,3.5=A.ballBody().position.z&&!V){V=!0;var b=new createjs.Shape;b.graphics.beginFill("rgba(0,0,0,1)").r(0,0,CANVAS_WIDTH,CANVAS_HEIGHT);b.alpha=0;s_oStage.addChild(b);(new createjs.Tween.get(b)).to({alpha:1}, 500).call(function(){(new createjs.Tween.get(b)).to({alpha:0},500).call(function(){s_oStage.removeChild(b)});fa.repeatLastLaunch()})}};this.repeatLastLaunch=function(){V=!1;v.blink();v.resetMask();O=0;v.pressIndicatorAnim();this.centerBallView();p.setCenterBallViewVisible(!1);A.ballBody().force.setZero();A.ballBody().torque.setZero();A.ballBody().angularVelocity.setZero();A.setElementVelocity(A.ballBody(),{x:0,y:0,z:0});A.ballBody().position.set(b,m,n+15);this._updateBall2DPosition()};this._updateInit= function(){A.update();if(A.ballBody()){this._init2DBall();this._initFlags();p=new CInterface(Z);p.refreshHoleNum(q+1);p.setParText(PAR[q]);var b=new THREE.Vector3(START_CAMERA_POSITION.x+A.ballBody().position.x,START_CAMERA_POSITION.y+A.ballBody().position.y,START_CAMERA_POSITION.z+A.ballBody().position.z);y.position.set(b.x,b.y,b.z);W=1;var c=convert3dPosTo2dScreen({x:START_CAMERA_POSITION.x,y:START_CAMERA_POSITION.y,z:START_CAMERA_POSITION.z},y),l=convert3dPosTo2dScreen(y.position,y);b=c.x-l.x; c=c.y-l.y;e.setPos(CANVAS_WIDTH/2+b,CANVAS_HEIGHT/2+c);h.x=e.getPos().x;h.y=e.getPos().y;y.updateProjectionMatrix();y.updateMatrixWorld();d=e.getSize().width/2-CANVAS_WIDTH/2-b;g=-(e.getSize().width/2-CANVAS_WIDTH/2)-b;a=e.getSize().height/2-CANVAS_HEIGHT/2-c;f=-(e.getSize().height/2-CANVAS_HEIGHT/2)-c;createjs.Tween.get(ba).wait(800).to({alpha:0},1300).call(function(){da=.05;ba.visible=!1});0===q&&(new CHelpPanel(X)).stage1Help()}};this._updatePlay=function(){l&&(A.update(),this._updateBall2DPosition(), this.moveBall(),this.angleArrow(),B=A.getBodyVelocity(A.ballBody()),this.detectBallVelocityForLaunch(),this._checkBallOutOfBorder())};this.update=function(){switch(W){case 0:this._updateInit();break;case 1:this._updatePlay()}};this.setPanPoint=function(b,e){var h=-N.x+CANVAS_WIDTH/2+M.x+b-S.x;S.x+hg&&(M.x+=b);h=-N.y+CANVAS_HEIGHT/2+M.y+e-S.y;S.y+hf&&(M.y+=e)};this.centerBallView=function(){M.x=0;M.y=0};this._updateBall2DPosition=function(){N=convert3dPosTo2dScreen(A.ballBody().position, y);var b={x:A.ballBody().position.x,y:A.ballBody().position.y,z:R};b=convert3dPosTo2dScreen(b,y);T.x=b.x;T.y=b.y;S.x+=(-N.x+CANVAS_WIDTH/2+M.x-S.x)*da;S.x>d?S.x=d:S.xa?S.y=a:S.y=a&&(a=this._findMinimumScore(),a=Math.floor(a.score/(b-a.iter+1)));return a};this._sendScore=function(b,a){var e=s_oLocalStorage.getItemJson(LOCALSTORAGE_SCORE);e[b] (http://steffe.se)",keywords:["cannon.js","cannon","physics","engine","3d"],main:"./build/cannon.js",engines:{node:"*"},repository:{type:"git",url:"https://github.com/schteppe/cannon.js.git"}, bugs:{url:"https://github.com/schteppe/cannon.js/issues"},licenses:[{type:"MIT"}],devDependencies:{jshint:"latest","uglify-js":"latest",nodeunit:"^0.9.0",grunt:"~0.4.0","grunt-contrib-jshint":"~0.1.1","grunt-contrib-nodeunit":"^0.4.1","grunt-contrib-concat":"~0.1.3","grunt-contrib-uglify":"^0.5.1","grunt-browserify":"^2.1.4","grunt-contrib-yuidoc":"^0.5.2",browserify:"*"},dependencies:{}}},{}],2:[function(c,d,g){d.exports={version:c("../package.json").version,AABB:c("./collision/AABB"),ArrayCollisionMatrix:c("./collision/ArrayCollisionMatrix"), Body:c("./objects/Body"),Box:c("./shapes/Box"),Broadphase:c("./collision/Broadphase"),Constraint:c("./constraints/Constraint"),ContactEquation:c("./equations/ContactEquation"),Narrowphase:c("./world/Narrowphase"),ConeTwistConstraint:c("./constraints/ConeTwistConstraint"),ContactMaterial:c("./material/ContactMaterial"),ConvexPolyhedron:c("./shapes/ConvexPolyhedron"),Cylinder:c("./shapes/Cylinder"),DistanceConstraint:c("./constraints/DistanceConstraint"),Equation:c("./equations/Equation"),EventTarget:c("./utils/EventTarget"), FrictionEquation:c("./equations/FrictionEquation"),GSSolver:c("./solver/GSSolver"),GridBroadphase:c("./collision/GridBroadphase"),Heightfield:c("./shapes/Heightfield"),HingeConstraint:c("./constraints/HingeConstraint"),LockConstraint:c("./constraints/LockConstraint"),Mat3:c("./math/Mat3"),Material:c("./material/Material"),NaiveBroadphase:c("./collision/NaiveBroadphase"),ObjectCollisionMatrix:c("./collision/ObjectCollisionMatrix"),Pool:c("./utils/Pool"),Particle:c("./shapes/Particle"),Plane:c("./shapes/Plane"), PointToPointConstraint:c("./constraints/PointToPointConstraint"),Quaternion:c("./math/Quaternion"),Ray:c("./collision/Ray"),RaycastVehicle:c("./objects/RaycastVehicle"),RaycastResult:c("./collision/RaycastResult"),RigidVehicle:c("./objects/RigidVehicle"),RotationalEquation:c("./equations/RotationalEquation"),RotationalMotorEquation:c("./equations/RotationalMotorEquation"),SAPBroadphase:c("./collision/SAPBroadphase"),SPHSystem:c("./objects/SPHSystem"),Shape:c("./shapes/Shape"),Solver:c("./solver/Solver"), Sphere:c("./shapes/Sphere"),SplitSolver:c("./solver/SplitSolver"),Spring:c("./objects/Spring"),Trimesh:c("./shapes/Trimesh"),Vec3:c("./math/Vec3"),Vec3Pool:c("./utils/Vec3Pool"),World:c("./world/World")}},{"../package.json":1,"./collision/AABB":3,"./collision/ArrayCollisionMatrix":4,"./collision/Broadphase":5,"./collision/GridBroadphase":6,"./collision/NaiveBroadphase":7,"./collision/ObjectCollisionMatrix":8,"./collision/Ray":9,"./collision/RaycastResult":10,"./collision/SAPBroadphase":11,"./constraints/ConeTwistConstraint":12, "./constraints/Constraint":13,"./constraints/DistanceConstraint":14,"./constraints/HingeConstraint":15,"./constraints/LockConstraint":16,"./constraints/PointToPointConstraint":17,"./equations/ContactEquation":19,"./equations/Equation":20,"./equations/FrictionEquation":21,"./equations/RotationalEquation":22,"./equations/RotationalMotorEquation":23,"./material/ContactMaterial":24,"./material/Material":25,"./math/Mat3":27,"./math/Quaternion":28,"./math/Vec3":30,"./objects/Body":31,"./objects/RaycastVehicle":32, "./objects/RigidVehicle":33,"./objects/SPHSystem":34,"./objects/Spring":35,"./shapes/Box":37,"./shapes/ConvexPolyhedron":38,"./shapes/Cylinder":39,"./shapes/Heightfield":40,"./shapes/Particle":41,"./shapes/Plane":42,"./shapes/Shape":43,"./shapes/Sphere":44,"./shapes/Trimesh":45,"./solver/GSSolver":46,"./solver/Solver":47,"./solver/SplitSolver":48,"./utils/EventTarget":49,"./utils/Pool":51,"./utils/Vec3Pool":54,"./world/Narrowphase":55,"./world/World":56}],3:[function(c,d,g){function a(b){b=b||{}; this.lowerBound=new f;b.lowerBound&&this.lowerBound.copy(b.lowerBound);this.upperBound=new f;b.upperBound&&this.upperBound.copy(b.upperBound)}var f=c("../math/Vec3");c("../utils/Utils");d.exports=a;var b=new f;a.prototype.setFromPoints=function(a,c,f,p){var e=this.lowerBound,h=this.upperBound;e.copy(a[0]);f&&f.vmult(e,e);h.copy(e);for(var l=1;lh.x&&(h.x=d.x);d.xh.y&&(h.y=d.y);d.yh.z&&(h.z=d.z);d.za&&(this.lowerBound.x=a);a=b.upperBound.x;this.upperBound.xa&&(this.lowerBound.y=a);a=b.upperBound.y;this.upperBound.y< a&&(this.upperBound.y=a);a=b.lowerBound.z;this.lowerBound.z>a&&(this.lowerBound.z=a);a=b.upperBound.z;this.upperBound.z=b.x&&a.y<=f.y&&c.y>=b.y&&a.z<=f.z&&c.z>=b.z};a.prototype.getCorners=function(b,a,c,f,e,h,q,d){var l=this.lowerBound,p=this.upperBound;b.copy(l);a.set(p.x,l.y,l.z);c.set(p.x,p.y,l.z);f.set(l.x,p.y,p.z);e.set(p.x,l.y,l.z);h.set(l.x,p.y,l.z);q.set(l.x,l.y,p.z);d.copy(p)};var m=[new f,new f,new f,new f,new f,new f,new f,new f];a.prototype.toLocalFrame=function(b,a){this.getCorners(m[0],m[1],m[2],m[3],m[4],m[5],m[6],m[7]);for(var c=0;8!==c;c++){var f=m[c];b.pointToLocal(f,f)}return a.setFromPoints(m)}; a.prototype.toWorldFrame=function(b,a){this.getCorners(m[0],m[1],m[2],m[3],m[4],m[5],m[6],m[7]);for(var c=0;8!==c;c++){var f=m[c];b.pointToWorld(f,f)}return a.setFromPoints(m)}},{"../math/Vec3":30,"../utils/Utils":53}],4:[function(c,d,g){function a(){this.matrix=[]}d.exports=a;a.prototype.get=function(a,b){a=a.index;b=b.index;if(b>a){var c=b;b=a;a=c}return this.matrix[(a*(a+1)>>1)+b-1]};a.prototype.set=function(a,b,c){a=a.index;b=b.index;if(b>a){var f=b;b=a;a=f}this.matrix[(a*(a+1)>>1)+b-1]=c?1:0}; a.prototype.reset=function(){for(var a=0,b=this.matrix.length;a!==b;a++)this.matrix[a]=0};a.prototype.setNumObjects=function(a){this.matrix.length=a*(a-1)>>1}},{}],5:[function(c,d,g){function a(){this.world=null;this.useBoundingBoxes=!1;this.dirty=!0}var f=c("../objects/Body");g=c("../math/Vec3");var b=c("../math/Quaternion");c("../shapes/Shape");c("../shapes/Plane");d.exports=a;a.prototype.collisionPairs=function(b,a,e){throw Error("collisionPairs not implemented for this BroadPhase class!");};var m= f.STATIC|f.KINEMATIC;a.prototype.needBroadphaseCollision=function(b,a){return 0!==(b.collisionFilterGroup&a.collisionFilterMask)&&0!==(a.collisionFilterGroup&b.collisionFilterMask)&&(0===(b.type&m)&&b.sleepState!==f.SLEEPING||0===(a.type&m)&&a.sleepState!==f.SLEEPING)?!0:!1};a.prototype.intersectionTest=function(b,a,e,c){this.useBoundingBoxes?this.doBoundingBoxBroadphase(b,a,e,c):this.doBoundingSphereBroadphase(b,a,e,c)};var n=new g;new g;new b;new g;a.prototype.doBoundingSphereBroadphase=function(b, a,e,c){a.position.vsub(b.position,n);var h=Math.pow(b.boundingRadius+a.boundingRadius,2);n.norm2()e.norm2()};a.prototype.aabbQuery=function(b,a,e){console.warn(".aabbQuery is not implemented in this Broadphase subclass.");return[]}},{"../math/Quaternion":28,"../math/Vec3":30,"../objects/Body":31, "../shapes/Plane":42,"../shapes/Shape":43}],6:[function(c,d,g){function a(a,c,d,e,h){f.apply(this);this.nx=d||10;this.ny=e||10;this.nz=h||10;this.aabbMin=a||new b(100,100,100);this.aabbMax=c||new b(-100,-100,-100);a=this.nx*this.ny*this.nz;if(0>=a)throw"GridBroadphase: Each dimension's n must be >0";this.bins=[];this.binLengths=[];this.bins.length=a;this.binLengths.length=a;for(c=0;cb?b=0:b>=d&&(b=d-1);0>a?a=0:a>=p&&(a=p-1);0>e?e=0:e>=r&&(e=r-1);0>c?c=0:c>=d&&(c=d-1);0>h?h=0:h>=p&&(h=p-1);0>f?f=0:f>=r&&(f=r-1);b*=g;a*=C;e*=1;c*=g;h*=C;for(f*=1;b<=c;b+=g)for(var q=a;q<=h;q+=C)for(var m=e;m<=f;m+=1){var n=b+q+m;W[n][y[n]++]=l}}var h=b.numObjects();b=b.bodies;var f=this.aabbMax, l=this.aabbMin,d=this.nx,p=this.ny,r=this.nz,g=p*r,C=r,x=f.x,D=f.y,F=f.z,K=l.x,B=l.y,P=l.z,Q=d/(x-K),H=p/(D-B),E=r/(F-P);x=(x-K)/d;var I=(D-B)/p;F=(F-P)/r;var A=.5*Math.sqrt(x*x+I*I+F*F);D=m.types;var N=D.SPHERE,L=D.PLANE,W=this.bins,y=this.binLengths;D=this.bins.length;for(l=0;l!==D;l++)y[l]=0;var J=Math.ceil;l=Math.min;f=Math.max;for(l=0;l!==h;l++){f=b[l];var V=f.shape;switch(V.type){case N:var U=f.position.x,R=f.position.y,G=f.position.z;V=V.radius;e(U-V,R-V,G-V,U+V,R+V,G+V,f);break;case L:V.worldNormalNeedsUpdate&& V.computeWorldNormal(f.quaternion);G=V.worldNormal;V=B+.5*I-f.position.y;var O=P+.5*F-f.position.z,T=n;T.set(K+.5*x-f.position.x,V,O);for(var M=U=0;U!==d;U++,M+=g,T.y=V,T.x+=x)for(var S=R=0;R!==p;R++,S+=C,T.z=O,T.y+=I)for(var Z=0,X=0;Z!==r;Z++,X+=1,T.z+=F)if(T.dot(G)a){var c=b;b=a;a=c}return a+"-"+b in this.matrix};a.prototype.set=function(a,b,c){a=a.id;b=b.id;if(b>a){var f=b;b=a;a=f}c?this.matrix[a+"-"+b]=!0: delete this.matrix[a+"-"+b]};a.prototype.reset=function(){this.matrix={}};a.prototype.setNumObjects=function(a){}},{}],9:[function(c,d,g){function a(e,c){this.from=e?e.clone():new b;this.to=c?c.clone():new b;this._direction=new b;this.precision=1E-4;this.checkCollisionResponse=!0;this.skipBackfaces=!1;this.collisionFilterGroup=this.collisionFilterMask=-1;this.mode=a.ANY;this.result=new n;this.hasHit=!1;this.callback=function(b){}}function f(b,a,c,h){h.vsub(a,N);c.vsub(a,p);b.vsub(a,e);b=N.dot(N); a=N.dot(p);c=N.dot(e);h=p.dot(p);var f=p.dot(e),l,d;return 0<=(l=h*c-a*f)&&0<=(d=b*f-a*c)&&l+db.boundingSphereRadius||(h=this[b.type])&&h.call(this,b,a,e,c)};new b;new b;var u= new b,t=new b,w=new b,v=new b;new b;new n;a.prototype.intersectBox=function(b,a,e,c){return this.intersectConvex(b.convexPolyhedronRepresentation,a,e,c)};a.prototype[g.types.BOX]=a.prototype.intersectBox;a.prototype.intersectPlane=function(a,e,c,h){var f=this.from,l=this.to,d=this._direction,q=new b(0,0,1);e.vmult(q,q);var p=new b;f.vsub(c,p);e=p.dot(q);l.vsub(c,p);p=p.dot(q);if(!(0n)n=q[0];if(null===r||q[1]u)u=q[1]}if(null!==p)for(e.getRectMinMax(p,r,n,u,[]),d=p;d<=n;d++)for(q=r;q<=u;q++){if(this.result._shouldStop)return;e.getConvexTrianglePillar(d,q,!1);m.pointToWorldFrame(h,c,e.pillarOffset, l);this.intersectConvex(e.pillarConvex,c,l,f,z);if(this.result._shouldStop)return;e.getConvexTrianglePillar(d,q,!0);m.pointToWorldFrame(h,c,e.pillarOffset,l);this.intersectConvex(e.pillarConvex,c,l,f,z)}};a.prototype[g.types.HEIGHTFIELD]=a.prototype.intersectHeightfield;var C=new b,x=new b;a.prototype.intersectSphere=function(b,a,e,c){a=this.from;var h=this.to,f=Math.pow(h.x-a.x,2)+Math.pow(h.y-a.y,2)+Math.pow(h.z-a.z,2),l=2*((h.x-a.x)*(a.x-e.x)+(h.y-a.y)*(a.y-e.y)+(h.z-a.z)*(a.z-e.z)),d=Math.pow(l, 2)-4*f*(Math.pow(a.x-e.x,2)+Math.pow(a.y-e.y,2)+Math.pow(a.z-e.z,2)-Math.pow(b.radius,2));if(!(0>d))if(0===d)a.lerp(h,d,C),C.vsub(e,x),x.normalize(),this.reportIntersection(x,C,b,c,-1);else{var q=(-l-Math.sqrt(d))/(2*f);f=(-l+Math.sqrt(d))/(2*f);0<=q&&1>=q&&(a.lerp(h,q,C),C.vsub(e,x),x.normalize(),this.reportIntersection(x,C,b,c,-1));!this.result._shouldStop&&0<=f&&1>=f&&(a.lerp(h,f,C),C.vsub(e,x),x.normalize(),this.reportIntersection(x,C,b,c,-1))}};a.prototype[g.types.SPHERE]=a.prototype.intersectSphere; var D=new b;new b;new b;var F=new b;a.prototype.intersectConvex=function(b,a,e,c,h){h=h&&h.faceList||null;for(var l=b.faces,d=b.vertices,q=b.faceNormals,p=this._direction,m=this.from,r=m.distanceTo(this.to),n=h?h.length:l.length,g=this.result,y=0;!g._shouldStop&&yB)))for(p.mult(B,u),u.vadd(m,u),t.copy(d[L[0]]),A.vmult(t,t),J.vadd(t, t),B=1;!g._shouldStop&&Br||this.reportIntersection(D,u,b,c,x)}}};a.prototype[g.types.CONVEXPOLYHEDRON]=a.prototype.intersectConvex;var K=new b,B=new b,P=new b,Q=new b,H=new b,E=new b;new c;var I=[],A=new m;a.prototype.intersectTrimesh=function(b,a,e,c,h){h=b.indices;var l=this.from,d=this.to,q=this._direction;A.position.copy(e);A.quaternion.copy(a); m.vectorToLocalFrame(e,a,q,B);m.pointToLocalFrame(e,a,l,P);m.pointToLocalFrame(e,a,d,Q);l=P.distanceSquared(Q);b.tree.rayQuery(this,A,I);d=0;for(q=I.length;!this.result._shouldStop&&d!==q;d++){var p=I[d];b.getNormal(p,K);b.getVertex(h[3*p],t);t.vsub(P,F);var r=B.dot(K);r=K.dot(F)/r;0>r||(B.scale(r,u),u.vadd(P,u),b.getVertex(h[3*p+1],w),b.getVertex(h[3*p+2],v),r=u.distanceSquared(P),!f(u,w,t,v)&&!f(u,t,w,v)||r>l||(m.vectorToWorldFrame(a,K,H),m.pointToWorldFrame(e,a,u,E),this.reportIntersection(H,E, b,c,p)))}I.length=0};a.prototype[g.types.TRIMESH]=a.prototype.intersectTrimesh;a.prototype.reportIntersection=function(b,e,c,h,f){var l=this.from,d=this.to,q=l.distanceTo(e),p=this.result;if(!(this.skipBackfaces&&0c?b>d?0:2:c>d?1:2};a.prototype.aabbQuery=function(b,a,c){c=c||[];this.dirty&&(this.sortList(),this.dirty=!1);b=this.axisList;for(var f=0;ff;f++)for(var m=0;3>m;m++){for(var p=0,e=0;3>e;e++)p+=b.elements[f+3*e]*this.elements[e+3*m];d.elements[f+3*m]=p}return d};a.prototype.scale=function(b,c){c=c||new a;for(var d= this.elements,f=c.elements,m=0;3!==m;m++)f[3*m]=b.x*d[3*m],f[3*m+1]=b.y*d[3*m+1],f[3*m+2]=b.z*d[3*m+2];return c};a.prototype.solve=function(b,a){a=a||new f;for(var c=[],d=0;12>d;d++)c.push(0);var g;for(d=0;3>d;d++)for(g=0;3>g;g++)c[d+4*g]=this.elements[d+3*g];c[3]=b.x;c[7]=b.y;c[11]=b.z;var p=3,e=p;do{d=e-p;if(0===c[d+4*d])for(g=d+1;gc;c++)a+=this.elements[c]+",";return a};a.prototype.reverse=function(b){b=b||new a;for(var c=[],d=0;18>d;d++)c.push(0);var f;for(d=0;3>d;d++)for(f=0;3>f;f++)c[d+6*f]=this.elements[d+3*f];c[3]=1;c[9]=0;c[15]=0;c[4]=0;c[10]=1;c[16]=0;c[5]=0;c[11]=0;c[17]=1;var g=3,p=g;do{d=p-g;if(0===c[d+6*d])for(f=d+1;fc?(a.x=this.x,a.y=this.y,a.z=this.z):(a.x=this.x/ c,a.y=this.y/c,a.z=this.z/c);return[a,b]};var b=new f,m=new f;a.prototype.setFromVectors=function(a,c){if(a.isAntiparallelTo(c))a.tangents(b,m),this.setFromAxisAngle(b,Math.PI);else{var e=a.cross(c);this.x=e.x;this.y=e.y;this.z=e.z;this.w=Math.sqrt(Math.pow(a.norm(),2)*Math.pow(c.norm(),2))+a.dot(c);this.normalize()}};var n=new f,l=new f,r=new f;a.prototype.mult=function(b,c){c=c||new a;var e=this.w;n.set(this.x,this.y,this.z);l.set(b.x,b.y,b.z);c.w=e*b.w-n.dot(l);n.cross(l,r);c.x=e*l.x+b.w*n.x+r.x; c.y=e*l.y+b.w*n.y+r.y;c.z=e*l.z+b.w*n.z+r.z;return c};a.prototype.inverse=function(b){var c=this.x,d=this.y,f=this.z,l=this.w;b=b||new a;this.conjugate(b);c=1/(c*c+d*d+f*f+l*l);b.x*=c;b.y*=c;b.z*=c;b.w*=c;return b};a.prototype.conjugate=function(b){b=b||new a;b.x=-this.x;b.y=-this.y;b.z=-this.z;b.w=this.w;return b};a.prototype.normalize=function(){var a=Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w);0===a?this.w=this.z=this.y=this.x=0:(a=1/a,this.x*=a,this.y*=a,this.z*=a,this.w*= a)};a.prototype.normalizeFast=function(){var a=(3-(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w))/2;0===a?this.w=this.z=this.y=this.x=0:(this.x*=a,this.y*=a,this.z*=a,this.w*=a)};a.prototype.vmult=function(a,b){b=b||new f;var c=a.x,e=a.y,d=a.z,l=this.x,g=this.y,p=this.z,m=this.w,r=m*c+g*d-p*e,n=m*e+p*c-l*d,D=m*d+l*e-g*c;c=-l*c-g*e-p*d;b.x=r*m+c*-l+n*-p-D*-g;b.y=n*m+c*-g+D*-l-r*-p;b.z=D*m+c*-p+r*-g-n*-l;return b};a.prototype.copy=function(a){this.x=a.x;this.y=a.y;this.z=a.z;this.w=a.w;return this}; a.prototype.toEuler=function(a,b){b=b||"YZX";var c=this.x,e=this.y,d=this.z,f=this.w;switch(b){case "YZX":var l=c*e+d*f;if(.499l&&(g=-2*Math.atan2(c,f),p=-Math.PI/2,m=0);isNaN(g)&&(m=d*d,g=Math.atan2(2*e*f-2*c*d,1-2*e*e-2*m),p=Math.asin(2*l),m=Math.atan2(2*c*f-2*e*d,1-2*c*c-2*m));break;default:throw Error("Euler order "+b+" not supported yet.");}a.y=g;a.z=p;a.x=m};a.prototype.setFromEuler=function(a,b,c,d){d=d||"XYZ";var e=Math.cos(a/2),f= Math.cos(b/2),h=Math.cos(c/2);a=Math.sin(a/2);b=Math.sin(b/2);c=Math.sin(c/2);"XYZ"===d?(this.x=a*f*h+e*b*c,this.y=e*b*h-a*f*c,this.z=e*f*c+a*b*h,this.w=e*f*h-a*b*c):"YXZ"===d?(this.x=a*f*h+e*b*c,this.y=e*b*h-a*f*c,this.z=e*f*c-a*b*h,this.w=e*f*h+a*b*c):"ZXY"===d?(this.x=a*f*h-e*b*c,this.y=e*b*h+a*f*c,this.z=e*f*c+a*b*h,this.w=e*f*h-a*b*c):"ZYX"===d?(this.x=a*f*h-e*b*c,this.y=e*b*h+a*f*c,this.z=e*f*c-a*b*h,this.w=e*f*h+a*b*c):"YZX"===d?(this.x=a*f*h+e*b*c,this.y=e*b*h+a*f*c,this.z=e*f*c-a*b*h,this.w= e*f*h-a*b*c):"XZY"===d&&(this.x=a*f*h-e*b*c,this.y=e*b*h-a*f*c,this.z=e*f*c+a*b*h,this.w=e*f*h+a*b*c);return this};a.prototype.clone=function(){return new a(this.x,this.y,this.z,this.w)}},{"./Vec3":30}],29:[function(c,d,g){function a(a){a=a||{};this.position=new f;a.position&&this.position.copy(a.position);this.quaternion=new b;a.quaternion&&this.quaternion.copy(a.quaternion)}var f=c("./Vec3"),b=c("./Quaternion");d.exports=a;var m=new b;a.pointToLocalFrame=function(a,b,c,d){d=d||new f;c.vsub(a,d); b.conjugate(m);m.vmult(d,d);return d};a.prototype.pointToLocal=function(b,c){return a.pointToLocalFrame(this.position,this.quaternion,b,c)};a.pointToWorldFrame=function(a,b,c,d){d=d||new f;b.vmult(c,d);d.vadd(a,d);return d};a.prototype.pointToWorld=function(b,c){return a.pointToWorldFrame(this.position,this.quaternion,b,c)};a.prototype.vectorToWorldFrame=function(a,b){b=b||new f;this.quaternion.vmult(a,b);return b};a.vectorToWorldFrame=function(a,b,c){a.vmult(b,c);return c};a.vectorToLocalFrame=function(a, b,c,d){d=d||new f;b.w*=-1;b.vmult(c,d);b.w*=-1;return d}},{"./Quaternion":28,"./Vec3":30}],30:[function(c,d,g){function a(a,b,c){this.x=a||0;this.y=b||0;this.z=c||0}d.exports=a;var f=c("./Mat3");a.ZERO=new a(0,0,0);a.UNIT_X=new a(1,0,0);a.UNIT_Y=new a(0,1,0);a.UNIT_Z=new a(0,0,1);a.prototype.cross=function(b,c){var d=b.x,e=b.y,f=b.z,q=this.x,l=this.y,g=this.z;c=c||new a;c.x=l*f-g*e;c.y=g*d-q*f;c.z=q*e-l*d;return c};a.prototype.set=function(a,b,c){this.x=a;this.y=b;this.z=c;return this};a.prototype.setZero= function(){this.x=this.y=this.z=0};a.prototype.vadd=function(b,c){if(c)c.x=b.x+this.x,c.y=b.y+this.y,c.z=b.z+this.z;else return new a(this.x+b.x,this.y+b.y,this.z+b.z)};a.prototype.vsub=function(b,c){if(c)c.x=this.x-b.x,c.y=this.y-b.y,c.z=this.z-b.z;else return new a(this.x-b.x,this.y-b.y,this.z-b.z)};a.prototype.crossmat=function(){return new f([0,-this.z,this.y,this.z,0,-this.x,-this.y,this.x,0])};a.prototype.normalize=function(){var a=this.x,b=this.y,c=this.z;a=Math.sqrt(a*a+b*b+c*c);0Math.abs(b.x)?m.set(1,0,0):m.set(0,1,0),b.cross(m,a),b.cross(a,c)):(a.set(1,0,0),c.set(0,1,0))};a.prototype.toString=function(){return this.x+","+this.y+","+this.z};a.prototype.toArray=function(){return[this.x,this.y,this.z]};a.prototype.copy=function(b){this.x=b.x;this.y=b.y;this.z=b.z;return this};a.prototype.lerp= function(b,a,c){var e=this.x,d=this.y,f=this.z;c.x=e+(b.x-e)*a;c.y=d+(b.y-d)*a;c.z=f+(b.z-f)*a};a.prototype.almostEquals=function(b,a){void 0===a&&(a=1E-6);return Math.abs(this.x-b.x)>a||Math.abs(this.y-b.y)>a||Math.abs(this.z-b.z)>a?!1:!0};a.prototype.almostZero=function(b){void 0===b&&(b=1E-6);return Math.abs(this.x)>b||Math.abs(this.y)>b||Math.abs(this.z)>b?!1:!0};var n=new a;a.prototype.isAntiparallelTo=function(b,a){this.negate(n);return n.almostEquals(b,a)};a.prototype.clone=function(){return new a(this.x, this.y,this.z)}},{"./Mat3":27}],31:[function(c,d,g){function a(c){c=c||{};f.apply(this);this.id=a.idCounter++;this.postStep=this.preStep=this.world=null;this.vlambda=new b;this.collisionFilterGroup="number"===typeof c.collisionFilterGroup?c.collisionFilterGroup:1;this.collisionFilterMask="number"===typeof c.collisionFilterMask?c.collisionFilterMask:1;this.collisionResponse=!0;this.position=new b;c.position&&this.position.copy(c.position);this.previousPosition=new b;this.initPosition=new b;this.velocity= new b;c.velocity&&this.velocity.copy(c.velocity);this.initVelocity=new b;this.force=new b;var e="number"===typeof c.mass?c.mass:0;this.mass=e;this.invMass=0=e?a.STATIC:a.DYNAMIC;typeof c.type===typeof a.STATIC&&(this.type=c.type);this.allowSleep="undefined"!==typeof c.allowSleep?c.allowSleep:!0;this.sleepState=0;this.sleepSpeedLimit="undefined"!==typeof c.sleepSpeedLimit?c.sleepSpeedLimit: .1;this.sleepTimeLimit="undefined"!==typeof c.sleepTimeLimit?c.sleepTimeLimit:1;this.timeLastSleepy=0;this._wakeUpAfterNarrowphase=!1;this.torque=new b;this.quaternion=new n;c.quaternion&&this.quaternion.copy(c.quaternion);this.initQuaternion=new n;this.angularVelocity=new b;c.angularVelocity&&this.angularVelocity.copy(c.angularVelocity);this.initAngularVelocity=new b;this.interpolatedPosition=new b;this.interpolatedQuaternion=new n;this.shapes=[];this.shapeOffsets=[];this.shapeOrientations=[];this.inertia= new b;this.invInertia=new b;this.invInertiaWorld=new m;this.invMassSolve=0;this.invInertiaSolve=new b;this.invInertiaWorldSolve=new m;this.fixedRotation="undefined"!==typeof c.fixedRotation?c.fixedRotation:!1;this.angularDamping="undefined"!==typeof c.angularDamping?c.angularDamping:.01;this.aabb=new l;this.aabbNeedsUpdate=!0;this.wlambda=new b;c.shape&&this.addShape(c.shape);this.updateMassProperties()}d.exports=a;var f=c("../utils/EventTarget");c("../shapes/Shape");var b=c("../math/Vec3"),m=c("../math/Mat3"), n=c("../math/Quaternion");c("../material/Material");var l=c("../collision/AABB"),r=c("../shapes/Box");a.prototype=new f;a.prototype.constructor=a;a.DYNAMIC=1;a.STATIC=2;a.KINEMATIC=4;a.AWAKE=0;a.SLEEPY=1;a.SLEEPING=2;a.idCounter=0;a.prototype.wakeUp=function(){var b=this.sleepState;this.sleepState=0;b===a.SLEEPING&&this.dispatchEvent({type:"wakeup"})};a.prototype.sleep=function(){this.sleepState=a.SLEEPING;this.velocity.set(0,0,0);this.angularVelocity.set(0,0,0)};a.sleepyEvent={type:"sleepy"};a.sleepEvent= {type:"sleep"};a.prototype.sleepTick=function(b){if(this.allowSleep){var c=this.sleepState,e=this.velocity.norm2()+this.angularVelocity.norm2(),d=Math.pow(this.sleepSpeedLimit,2);c===a.AWAKE&&ed?this.wakeUp():c===a.SLEEPY&&b-this.timeLastSleepy>this.sleepTimeLimit&&(this.sleep(),this.dispatchEvent(a.sleepEvent))}};a.prototype.updateSolveMassProperties=function(){this.sleepState===a.SLEEPING||this.type=== a.KINEMATIC?(this.invMassSolve=0,this.invInertiaSolve.setZero(),this.invInertiaWorldSolve.setZero()):(this.invMassSolve=this.invMass,this.invInertiaSolve.copy(this.invInertia),this.invInertiaWorldSolve.copy(this.invInertiaWorld))};a.prototype.pointToLocalFrame=function(a,c){c=c||new b;a.vsub(this.position,c);this.quaternion.conjugate().vmult(c,c);return c};a.prototype.vectorToLocalFrame=function(a,c){c=c||new b;this.quaternion.conjugate().vmult(a,c);return c};a.prototype.pointToWorldFrame=function(a, c){c=c||new b;this.quaternion.vmult(a,c);c.vadd(this.position,c);return c};a.prototype.vectorToWorldFrame=function(a,c){c=c||new b;this.quaternion.vmult(a,c);return c};var p=new b,e=new n;a.prototype.addShape=function(a,c,e){var d=new b,f=new n;c&&d.copy(c);e&&f.copy(e);this.shapes.push(a);this.shapeOffsets.push(d);this.shapeOrientations.push(f);this.updateMassProperties();this.updateBoundingRadius();this.aabbNeedsUpdate=!0;return this};a.prototype.updateBoundingRadius=function(){for(var b=this.shapes, a=this.shapeOffsets,c=b.length,e=0,d=0;d!==c;d++){var f=b[d];f.updateBoundingSphereRadius();var h=a[d].norm();f=f.boundingSphereRadius;h+f>e&&(e=h+f)}this.boundingRadius=e};var h=new l;a.prototype.computeAABB=function(){for(var b=this.shapes,a=this.shapeOffsets,c=this.shapeOrientations,d=b.length,f=this.quaternion,q=this.aabb,g=0;g!==d;g++){var l=b[g];c[g].mult(f,e);e.vmult(a[g],p);p.vadd(this.position,p);l.calculateWorldAABB(p,e,h.lowerBound,h.upperBound);0===g?q.copy(h):q.extend(h)}this.aabbNeedsUpdate= !1};var q=new m,u=new m;new m;a.prototype.updateInertiaWorld=function(b){var a=this.invInertia;if(a.x!==a.y||a.y!==a.z||b)q.setRotationFromQuaternion(this.quaternion),q.transpose(u),q.scale(a,q),q.mmult(u,this.invInertiaWorld)};var t=new b,w=new b;a.prototype.applyForce=function(b,c){this.type===a.DYNAMIC&&(c.vsub(this.position,t),t.cross(b,w),this.force.vadd(b,this.force),this.torque.vadd(w,this.torque))};var v=new b,z=new b;a.prototype.applyLocalForce=function(b,c){this.type===a.DYNAMIC&&(this.vectorToWorldFrame(b, v),this.pointToWorldFrame(c,z),this.applyForce(v,z))};var C=new b,x=new b,D=new b;a.prototype.applyImpulse=function(b,c){this.type===a.DYNAMIC&&(c.vsub(this.position,C),x.copy(b),x.mult(this.invMass,x),this.velocity.vadd(x,this.velocity),C.cross(b,D),this.invInertiaWorld.vmult(D,D),this.angularVelocity.vadd(D,this.angularVelocity))};var F=new b,K=new b;a.prototype.applyLocalImpulse=function(b,c){this.type===a.DYNAMIC&&(this.vectorToWorldFrame(b,F),this.pointToWorldFrame(c,K),this.applyImpulse(F,K))}; var B=new b;a.prototype.updateMassProperties=function(){this.invMass=0f.dot(d.velocity)&&(this.currentVehicleSpeedKmHour*=-1);for(f=0;fg.maxSuspensionForce&&(l=g.maxSuspensionForce);g.raycastResult.hitNormalWorld.scale(l*a,h);g.raycastResult.hitPointWorld.vsub(d.position,q);d.applyImpulse(h,g.raycastResult.hitPointWorld)}this.updateFriction(a);h=new b;q=new b;l=new b;for(f=0;fMath.abs(g.engineForce)&&(g.deltaRotation=0);g.rotation+=g.deltaRotation;g.deltaRotation*=.99}};a.prototype.updateSuspension=function(b){b=this.chassisBody.mass;for(var a=this.wheelInfos,c=a.length,e=0;eh?d.dampingCompression:d.dampingRelaxation)*h;d.suspensionForce=f*b;0>d.suspensionForce&&(d.suspensionForce=0)}else d.suspensionForce=0}};a.prototype.removeFromWorld=function(b){b.remove(this.chassisBody);b.removeEventListener("preStep",this.preStepCallback);this.world=null};var e=new b,h=new b;a.prototype.castRay=function(a){this.updateWheelTransformWorld(a);var c=this.chassisBody,d=-1;a.directionWorld.scale(a.suspensionRestLength+ a.radius,e);var f=a.chassisConnectionPointWorld;f.vadd(e,h);var q=a.raycastResult;q.reset();var g=c.collisionResponse;c.collisionResponse=!1;this.world.rayTest(f,h,q);c.collisionResponse=g;f=q.body;a.raycastResult.groundObject=0;f?(d=q.distance,a.raycastResult.hitNormalWorld=q.hitNormalWorld,a.isInContact=!0,a.suspensionLength=q.distance-a.radius,q=a.suspensionRestLength-a.maxSuspensionTravel,f=a.suspensionRestLength+a.maxSuspensionTravel,a.suspensionLength f&&(a.suspensionLength=f,a.raycastResult.reset()),q=a.raycastResult.hitNormalWorld.dot(a.directionWorld),f=new b,c.getVelocityAtWorldPoint(a.raycastResult.hitPointWorld,f),c=a.raycastResult.hitNormalWorld.dot(f),-.1<=q?(a.suspensionRelativeVelocity=0,a.clippedInvContactDotSuspension=10):(q=-1/q,a.suspensionRelativeVelocity=c*q,a.clippedInvContactDotSuspension=q)):(a.suspensionLength=a.suspensionRestLength+0*a.maxSuspensionTravel,a.suspensionRelativeVelocity=0,a.directionWorld.scale(-1,a.raycastResult.hitNormalWorld), a.clippedInvContactDotSuspension=1);return d};a.prototype.updateWheelTransformWorld=function(b){b.isInContact=!1;var a=this.chassisBody;a.pointToWorldFrame(b.chassisConnectionPointLocal,b.chassisConnectionPointWorld);a.vectorToWorldFrame(b.directionLocal,b.directionWorld);a.vectorToWorldFrame(b.axleLocal,b.axleWorld)};a.prototype.updateWheelTransform=function(b){b=this.wheelInfos[b];this.updateWheelTransformWorld(b);b.directionLocal.scale(-1,l);r.copy(b.axleLocal);l.cross(r,p);p.normalize();r.normalize(); var a=b.steering,c=new m;c.setFromAxisAngle(l,a);a=new m;a.setFromAxisAngle(r,b.rotation);var e=b.worldTransform.quaternion;this.chassisBody.quaternion.mult(c,e);e.mult(a,e);e.normalize();c=b.worldTransform.position;c.copy(b.directionWorld);c.scale(b.suspensionLength,c);c.vadd(b.chassisConnectionPointWorld,c)};var q=[new b(1,0,0),new b(0,1,0),new b(0,0,1)];a.prototype.getWheelTransformWorld=function(b){return this.wheelInfos[b].worldTransform};var u=new b,t=[],w=[];a.prototype.updateFriction=function(a){for(var c= this.wheelInfos,e=c.length,d=this.chassisBody,h=0,g=0;gh&&(this.sliding=!0,l.sliding=!0,h=m/Math.sqrt(r),l.skidInfo*=h))}if(this.sliding)for(g=0;gl.skidInfo&&(l.forwardImpulse*=l.skidInfo,l.sideImpulse*=l.skidInfo);for(g=0;gthis.particles.length&&this.neighbors.pop())};var f=new d;a.prototype.getNeighbors=function(b,a){for(var c=this.particles.length, e=b.id,d=this.smoothingRadius*this.smoothingRadius,h=0;h!==c;h++){var g=this.particles[h];g.position.vsub(b.position,f);e!==g.id&&f.norm2()e;e++){f=l[e];b.vmult(f,f);a.vadd(f,f);var h=f.x,g=f.y;f=f.z;h>d.x&&(d.x=h);g>d.y&&(d.y=g);f>d.z&&(d.z=f);hc.dot(this.vertices[this.faces[a][0]]))for(console.error(".faceNormals["+a+"] = Vec3("+c.toString()+") looks like it points into the shape? The vertices follow. Make sure they are ordered CCW around the normal, using the right hand rule."),c=0;cu&&(u=n,m=r)}u=[];r=e.faces[m];n=r.length;for(var t=0;tq)){a=this.faces[q];a.connectedFaces= [];for(l=0;l=b&&h.push({point:c,normal:E,depth:b}))}};a.prototype.clipFaceAgainstPlane=function(a,c,e,d){var f=a.length;if(2>f)return c;var h=a[a.length-1];var g=e.dot(h)+d;for(var q= 0;qg){if(0>m){var p=new b;p.copy(l)}else p=new b,h.lerp(l,g/(g-m),p);c.push(p)}else 0>m&&(p=new b,h.lerp(l,g/(g-m),p),c.push(p),c.push(l));h=l;g=m}return c};a.prototype.computeWorldVertices=function(a,c){for(var e=this.vertices.length;this.worldVertices.lengthb.x&&(b.x=f.x);f.yb.y&&(b.y=f.y);f.zb.z&&(b.z=f.z)}};a.prototype.computeWorldFaceNormals=function(a){for(var c=this.faceNormals.length;this.worldFaceNormals.lengtha&&(a=d)}this.boundingSphereRadius=Math.sqrt(a)};var I=new b;a.prototype.calculateWorldAABB=function(a,b,c,e){for(var d=this.vertices.length,f=this.vertices,h,g,q,l,m,p,r=0;rl||void 0===l)l=u.x;if(u.ym||void 0===m)m=u.y;if(u.zp||void 0===p)p=u.z}c.set(h,g,q);e.set(l,m,p)};a.prototype.volume=function(){return 4*Math.PI*this.boundingSphereRadius/3};a.prototype.getAveragePointLocal=function(a){a=a||new b;for(var c=this.vertices.length,e=this.vertices,d=0;dq&&0h)return!1}return-1};new b;var W=new b,y=new b;a.project=function(a,b,c,e,d){var f=a.vertices.length; a=a.vertices;y.setZero();m.vectorToLocalFrame(c,e,b,W);m.pointToLocalFrame(c,e,y,y);e=y.dot(W);c=b=a[0].dot(W);for(var h=1;hb&&(b=g);gb&&(f=c,c=b,b=f);d[0]=b;d[1]=c}},{"../math/Quaternion":28,"../math/Transform":29,"../math/Vec3":30,"./Shape":43}],39:[function(c,d,g){function a(a,c,d,g){var e=[],h=[],q=[],l=[],p=[],r=Math.cos,n=Math.sin;e.push(new b(c*r(0),c*n(0),.5*-d));l.push(0);e.push(new b(a*r(0),a*n(0),.5*d));p.push(1);for(var z=0;zb&&(b= d)}this.maxValue=b};a.prototype.setHeightValueAtIndex=function(a,b,c){this.data[a][b]=c;this.clearCachedConvexTrianglePillar(a,b,!1);0h&&(h=l)}d[0]=this.minValue;d[1]=h};a.prototype.getIndexOfPosition=function(a,b,c,e){var d=this.elementSize,f=this.data;a=Math.floor(a/d);b=Math.floor(b/d);c[0]=a;c[1]=b;e&&(0>a&&(a=0),0>b&&(b=0),a>=f.length-1&&(a=f.length-1),b>=f[0].length-1&&(b=f[0].length-1));return 0>a||0>b||a>=f.length-1||b>=f[0].length-1?!1:!0};a.prototype.getHeightAt=function(a,b,c){var e=[];this.getIndexOfPosition(a,b,e,c);a=[];this.getRectMinMax(e[0],e[1]+1,e[0],e[1]+1,a);return(a[0]+a[1])/2}; a.prototype.getCacheConvexTrianglePillarKey=function(a,b,c){return a+"_"+b+"_"+(c?1:0)};a.prototype.getCachedConvexTrianglePillar=function(a,b,c){return this._cachedPillars[this.getCacheConvexTrianglePillarKey(a,b,c)]};a.prototype.setCachedConvexTrianglePillar=function(a,b,c,e,d){this._cachedPillars[this.getCacheConvexTrianglePillarKey(a,b,c)]={convex:e,offset:d}};a.prototype.clearCachedConvexTrianglePillar=function(a,b,c){delete this._cachedPillars[this.getCacheConvexTrianglePillarKey(a,b,c)]};a.prototype.getConvexTrianglePillar= function(a,c,d){var e=this.pillarConvex,f=this.pillarOffset;if(this.cacheEnabled){var g=this.getCachedConvexTrianglePillar(a,c,d);if(g){this.pillarConvex=g.convex;this.pillarOffset=g.offset;return}e=new b;f=new m;this.pillarConvex=e;this.pillarOffset=f}g=this.data;var l=this.elementSize,p=e.faces;e.vertices.length=6;for(var n=0;6>n;n++)e.vertices[n]||(e.vertices[n]=new m);p.length=5;for(n=0;5>n;n++)p[n]||(p[n]=[]);n=e.vertices;var r=(Math.min(g[a][c],g[a+1][c],g[a][c+1],g[a+1][c+1])-this.minValue)/ 2+this.minValue;d?(f.set((a+.75)*l,(c+.75)*l,r),n[0].set(.25*l,.25*l,g[a+1][c+1]-r),n[1].set(-.75*l,.25*l,g[a][c+1]-r),n[2].set(.25*l,-.75*l,g[a+1][c]-r),n[3].set(.25*l,.25*l,-r-1),n[4].set(-.75*l,.25*l,-r-1),n[5].set(.25*l,-.75*l,-r-1),p[0][0]=0,p[0][1]=1,p[0][2]=2,p[1][0]=5,p[1][1]=4,p[1][2]=3,p[2][0]=2,p[2][1]=5,p[2][2]=3,p[2][3]=0,p[3][0]=3,p[3][1]=4,p[3][2]=1,p[3][3]=0,p[4][0]=1,p[4][1]=4,p[4][2]=5,p[4][3]=2):(f.set((a+.25)*l,(c+.25)*l,r),n[0].set(-.25*l,-.25*l,g[a][c]-r),n[1].set(.75*l,-.25* l,g[a+1][c]-r),n[2].set(-.25*l,.75*l,g[a][c+1]-r),n[3].set(-.25*l,-.25*l,-r-1),n[4].set(.75*l,-.25*l,-r-1),n[5].set(-.25*l,.75*l,-r-1),p[0][0]=0,p[0][1]=1,p[0][2]=2,p[1][0]=5,p[1][1]=4,p[1][2]=3,p[2][0]=0,p[2][1]=2,p[2][2]=5,p[2][3]=3,p[3][0]=1,p[3][1]=0,p[3][2]=3,p[3][3]=4,p[4][0]=4,p[4][1]=5,p[4][2]=2,p[4][3]=1);e.computeNormals();e.computeEdges();e.updateBoundingSphereRadius();this.setCachedConvexTrianglePillar(a,c,d,e,f)};a.prototype.calculateLocalInertia=function(a,b){b=b||new m;b.set(0,0,0); return b};a.prototype.volume=function(){return Number.MAX_VALUE};a.prototype.calculateWorldAABB=function(a,b,c,e){c.set(-Number.MAX_VALUE,-Number.MAX_VALUE,-Number.MAX_VALUE);e.set(Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE)};a.prototype.updateBoundingSphereRadius=function(){var a=this.data,b=this.elementSize;this.boundingSphereRadius=(new m(a.length*b,a[0].length*b,Math.max(Math.abs(this.maxValue),Math.abs(this.minValue)))).norm()}},{"../math/Vec3":30,"../utils/Utils":53,"./ConvexPolyhedron":38, "./Shape":43}],41:[function(c,d,g){function a(){f.call(this);this.type=f.types.PARTICLE}d.exports=a;var f=c("./Shape"),b=c("../math/Vec3");a.prototype=new f;a.prototype.constructor=a;a.prototype.calculateLocalInertia=function(a,c){c=c||new b;c.set(0,0,0);return c};a.prototype.volume=function(){return 0};a.prototype.updateBoundingSphereRadius=function(){this.boundingSphereRadius=0};a.prototype.calculateWorldAABB=function(a,b,c,d){c.copy(a);d.copy(a)}},{"../math/Vec3":30,"./Shape":43}],42:[function(c, d,g){function a(){f.call(this);this.type=f.types.PLANE;this.worldNormal=new b;this.worldNormalNeedsUpdate=!0;this.boundingSphereRadius=Number.MAX_VALUE}d.exports=a;var f=c("./Shape"),b=c("../math/Vec3");a.prototype=new f;a.prototype.constructor=a;a.prototype.computeWorldNormal=function(a){var b=this.worldNormal;b.set(0,0,1);a.vmult(b,b);this.worldNormalNeedsUpdate=!1};a.prototype.calculateLocalInertia=function(a,c){return c=c||new b};a.prototype.volume=function(){return Number.MAX_VALUE};var m=new b; a.prototype.calculateWorldAABB=function(a,b,c,d){m.set(0,0,1);b.vmult(m,m);b=Number.MAX_VALUE;c.set(-b,-b,-b);d.set(b,b,b);1===m.x&&(d.x=a.x);1===m.y&&(d.y=a.y);1===m.z&&(d.z=a.z);-1===m.x&&(c.x=a.x);-1===m.y&&(c.y=a.y);-1===m.z&&(c.z=a.z)};a.prototype.updateBoundingSphereRadius=function(){this.boundingSphereRadius=Number.MAX_VALUE}},{"../math/Vec3":30,"./Shape":43}],43:[function(c,d,g){function a(){this.id=a.idCounter++;this.boundingSphereRadius=this.type=0;this.collisionResponse=!0;this.material= null}d.exports=a;a=c("./Shape");c("../math/Vec3");c("../math/Quaternion");c("../material/Material");a.prototype.constructor=a;a.prototype.updateBoundingSphereRadius=function(){throw"computeBoundingSphereRadius() not implemented for shape type "+this.type;};a.prototype.volume=function(){throw"volume() not implemented for shape type "+this.type;};a.prototype.calculateLocalInertia=function(a,b){throw"calculateLocalInertia() not implemented for shape type "+this.type;};a.idCounter=0;a.types={SPHERE:1, PLANE:2,BOX:4,COMPOUND:8,CONVEXPOLYHEDRON:16,HEIGHTFIELD:32,PARTICLE:64,CYLINDER:128,TRIMESH:256}},{"../material/Material":25,"../math/Quaternion":28,"../math/Vec3":30,"./Shape":43}],44:[function(c,d,g){function a(a){f.call(this);this.radius=void 0!==a?Number(a):1;this.type=f.types.SPHERE;if(0>this.radius)throw Error("The sphere radius cannot be negative.");this.updateBoundingSphereRadius()}d.exports=a;var f=c("./Shape"),b=c("../math/Vec3");a.prototype=new f;a.prototype.constructor=a;a.prototype.calculateLocalInertia= function(a,c){c=c||new b;var d=2*a*this.radius*this.radius/5;c.x=d;c.y=d;c.z=d;return c};a.prototype.volume=function(){return 4*Math.PI*this.radius/3};a.prototype.updateBoundingSphereRadius=function(){this.boundingSphereRadius=this.radius};a.prototype.calculateWorldAABB=function(a,b,c,d){b=this.radius;for(var f=["x","y","z"],e=0;ea.x&&(a.x=C.x),C.y< b.y?b.y=C.y:C.y>a.y&&(a.y=C.y),C.za.z&&(a.z=C.z)};a.prototype.updateAABB=function(){this.computeLocalAABB(this.aabb)};a.prototype.updateBoundingSphereRadius=function(){var a=0,c=this.vertices,e=new b,d=0;for(c=c.length/3;d!==c;d++){this.getVertex(d,e);var f=e.norm2();f>a&&(a=f)}this.boundingSphereRadius=Math.sqrt(a)};new b;var x=new m,D=new n;a.prototype.calculateWorldAABB=function(a,b,c,e){x.position=a;x.quaternion=b;this.aabb.toWorldFrame(x,D);c.copy(D.lowerBound);e.copy(D.upperBound)}; a.prototype.volume=function(){return 4*Math.PI*this.boundingSphereRadius/3};a.createTorus=function(b,c,e,d,f){b=b||1;c=c||.5;e=e||8;d=d||6;f=f||2*Math.PI;for(var h=[],g=[],q=0;q<=e;q++)for(var l=0;l<=d;l++){var m=l/d*f,p=q/e*Math.PI*2;h.push((b+c*Math.cos(p))*Math.cos(m),(b+c*Math.cos(p))*Math.sin(m),c*Math.sin(p))}for(q=1;q<=e;q++)for(l=1;l<=d;l++)b=(d+1)*(q-1)+l-1,c=(d+1)*(q-1)+l,f=(d+1)*q+l,g.push((d+1)*q+l-1,b,f),g.push(b,c,f);return new a(h,g)}},{"../collision/AABB":3,"../math/Quaternion":28, "../math/Transform":29,"../math/Vec3":30,"../utils/Octree":50,"./Shape":43}],46:[function(c,d,g){function a(){f.call(this);this.iterations=10;this.tolerance=1E-7}d.exports=a;c("../math/Vec3");c("../math/Quaternion");var f=c("./Solver");a.prototype=new f;var b=[],m=[],n=[];a.prototype.solve=function(a,c){var d=0,e=this.iterations,f=this.tolerance*this.tolerance,g=this.equations,l=g.length,r=c.bodies,w=r.length,v;if(0!==l)for(v=0;v!==w;v++)r[v].updateSolveMassProperties();m.length=l;n.length=l;b.length= l;for(v=0;v!==l;v++){var z=g[v];b[v]=0;n[v]=z.computeB(a);m[v]=1/z.computeC()}if(0!==l){for(v=0;v!==w;v++)z=r[v],d=z.wlambda,z.vlambda.set(0,0,0),d&&d.set(0,0,0);for(d=0;d!==e;d++){for(var C=v=0;C!==l;C++){z=g[C];var x=n[C];var D=m[C];var F=b[C];var K=z.computeGWlambda();x=D*(x-K-z.eps*F);F+xz.maxForce&&(x=z.maxForce-F);b[C]+=x;v+=0this.nodePool.length;)this.nodePool.push(this.createNode())}function f(a){for(var b=a.length,c=0;c!==b;c++){var d=a[c];if(!(d.visited||d.body.type&e))return d}return!1}function b(a,b,c){b.push(a.body);b=a.eqs.length;for(var e=0;e!==b;e++){var d=a.eqs[e];-1===c.indexOf(d)&&c.push(d)}}function m(a,b){return b.id-a.id}d.exports=a;c("../math/Vec3");c("../math/Quaternion");var n=c("./Solver");c=c("../objects/Body");a.prototype=new n;var l=[],r=[], p={bodies:[]},e=c.STATIC,h=[];a.prototype.createNode=function(){return{body:null,children:[],eqs:[],visited:!1}};a.prototype.solve=function(a,c){for(var e=this.nodePool,d=c.bodies,g=this.equations,q=g.length,n=d.length,u=this.subsolver;e.lengthb){var c=b;b=a;a=c}return this.data[a+"-"+b]};a.prototype.set=function(a,b,c){if(a>b){var d=b;b=a;a=d}d=a+"-"+b;this.get(a,b)||this.data.keys.push(d);this.data[d]=c};a.prototype.reset=function(){for(var a=this.data,b=a.keys;0l.boundingSphereRadius+p.boundingSphereRadius)){var n=null;l.material&&p.material&&(n=c.getContactMaterial(l.material,p.material)||null);this.currentContactMaterial=n||g||c.defaultContactMaterial;(n=this[l.type|p.type])&&(l.type=z.dot(p)){var n=this.createContactEquation(g,q,a,c);n.ni.copy(z);var u=x;z.scale(p.dot(z),u);l.vsub(u,u);n.ri.copy(u);n.ri.vsub(g.position,n.ri);n.rj.copy(l);n.rj.vsub(q.position,n.rj);this.result.push(n);this.createFrictionEquationsFromContact(n,this.frictionResult)}}};var D=new b,F=new b;new b;var K=new b,B=new b, P=new b,Q=new b,H=new b,E=new b,I=new b,A=new b,N=new b,L=new b,W=new b,y=new d,J=[];a.prototype[g.types.SPHERE|g.types.TRIMESH]=a.prototype.sphereTrimesh=function(a,b,c,d,e,h,g,q){m.pointToLocalFrame(d,h,c,I);e=a.radius;y.lowerBound.set(I.x-e,I.y-e,I.z-e);y.upperBound.set(I.x+e,I.y+e,I.z+e);b.getTrianglesInAABB(y,J);var l=a.radius*a.radius;for(e=0;ep;p++)if(b.getVertex(b.indices[3*J[e]+p],K),K.vsub(I,F),F.norm2()<=l){B.copy(K);m.pointToWorldFrame(d,h,B,K);K.vsub(c,F); var n=this.createContactEquation(g,q,a,b);n.ni.copy(F);n.ni.normalize();n.ri.copy(n.ni);n.ri.scale(a.radius,n.ri);n.ri.vadd(c,n.ri);n.ri.vsub(g.position,n.ri);n.rj.copy(K);n.rj.vsub(q.position,n.rj);this.result.push(n);this.createFrictionEquationsFromContact(n,this.frictionResult)}for(e=0;ep;p++)b.getVertex(b.indices[3*J[e]+p],P),b.getVertex(b.indices[3*J[e]+(p+1)%3],Q),Q.vsub(P,H),I.vsub(Q,A),c=A.dot(H),I.vsub(P,A),n=A.dot(H),0c&&(I.vsub(P,A),E.copy(H),E.normalize(), n=A.dot(E),E.scale(n,A),A.vadd(P,A),c=A.distanceTo(I),c-D&&z-B&&(v=Math.abs(v-t-f),null===u||vv&&0=z&&!1===D)null===D&&(D=0=aa.dot(pa)){var l=this.createContactEquation(h,g,a,b),m=Sa;aa.mult(aa.dot(pa),m);ia.vsub(m,m);m.vsub(c,l.ri);l.ni.copy(aa);ia.vsub(d,l.rj);l.ri.vadd(c,l.ri);l.ri.vsub(h.position,l.ri);l.rj.vadd(d,l.rj);l.rj.vsub(g.position,l.rj);this.result.push(l);e++;this.enableFrictionReduction||this.createFrictionEquationsFromContact(l,this.frictionResult)}this.enableFrictionReduction&&e&&this.createFrictionFromAverage(e)};var ab=new b,Ta=new b;a.prototype[g.types.CONVEXPOLYHEDRON]= a.prototype.convexConvex=function(a,b,c,e,d,f,h,g,l,q,m,p){if(!(c.distanceTo(e)>a.boundingSphereRadius+b.boundingSphereRadius)&&a.findSeparatingAxis(b,c,d,e,f,ab,m,p)){m=[];a.clipAgainstHull(c,d,b,e,f,ab,-100,100,m);for(f=d=0;f!==m.length;f++){p=this.createContactEquation(h,g,a,b,l,q);var n=p.ri,u=p.rj;ab.negate(p.ni);m[f].normal.negate(Ta);Ta.mult(m[f].depth,Ta);m[f].point.vadd(Ta,n);u.copy(m[f].point);n.vsub(c,n);u.vsub(e,u);n.vadd(c,n);n.vsub(h.position,n);u.vadd(e,u);u.vsub(g.position,u);this.result.push(p); d++;this.enableFrictionReduction||this.createFrictionEquationsFromContact(p,this.frictionResult)}this.enableFrictionReduction&&d&&this.createFrictionFromAverage(d)}};var Fa=new b,eb=new b,ea=new b;a.prototype[g.types.PLANE|g.types.PARTICLE]=a.prototype.planeParticle=function(a,b,c,d,e,f,h,g){Fa.set(0,0,1);h.quaternion.vmult(Fa,Fa);d.vsub(h.position,eb);0>=Fa.dot(eb)&&(a=this.createContactEquation(g,h,b,a),a.ni.copy(Fa),a.ni.negate(a.ni),a.ri.set(0,0,0),Fa.mult(Fa.dot(d),ea),d.vsub(ea,ea),a.rj.copy(ea), this.result.push(a),this.createFrictionEquationsFromContact(a,this.frictionResult))};var Ba=new b;a.prototype[g.types.PARTICLE|g.types.SPHERE]=a.prototype.sphereParticle=function(a,b,c,d,e,f,h,g){Ba.set(0,0,1);d.vsub(c,Ba);Ba.norm2()<=a.radius*a.radius&&(b=this.createContactEquation(g,h,b,a),Ba.normalize(),b.rj.copy(Ba),b.rj.mult(a.radius,b.rj),b.ni.copy(Ba),b.ni.negate(b.ni),b.ri.set(0,0,0),this.result.push(b),this.createFrictionEquationsFromContact(b,this.frictionResult))};var Ua=new n,qa=new b; new b;var Ia=new b,Ma=new b,Ca=new b;a.prototype[g.types.PARTICLE|g.types.CONVEXPOLYHEDRON]=a.prototype.convexParticle=function(a,b,c,d,e,f,h,g){var l=-1;f=null;var q=0;qa.copy(d);qa.vsub(c,qa);e.conjugate(Ua);Ua.vmult(qa,qa);if(a.pointIsInside(qa)){a.worldVerticesNeedsUpdate&&a.computeWorldVertices(c,e);a.worldFaceNormalsNeedsUpdate&&a.computeWorldFaceNormals(e);e=0;for(var m=a.faces.length;e!==m;e++){var p=a.worldFaceNormals[e];d.vsub(a.worldVertices[a.faces[e][0]],Ma);var n=-p.dot(Ma);if(null=== f||Math.abs(n)u||0>q||n>l.length||r>l[0].length)){0>n&&(n=0);0>u&&(u=0);0>r&&(r=0);0>q&&(q=0);n>=l.length&&(n=l.length-1);u>=l.length&&(u=l.length-1);q>=l[0].length&&(q=l[0].length-1);r>=l[0].length&&(r=l[0].length-1);l=[];b.getRectMinMax(n,r,u,q,l);var y=l[0];if(!(Da.z-p>l[1]||Da.z+pu||0>p||n>l.length||p>l[0].length)){0>n&&(n=0);0>u&&(u=0);0>r&&(r=0);0>p&&(p=0);n>=l.length&&(n=l.length-1);u>=l.length&&(u=l.length-1);p>=l[0].length&&(p=l[0].length-1);r>=l[0].length&&(r=l[0].length-1);l=[];b.getRectMinMax(n,r,u,p,l);var y=l[0];if(!(Ea.z-q>l[1]||Ea.z+q1E3*a);f++);this.time+=b;a=this.time%a/ a;b=this.bodies;for(d=0;d!==b.length;d++)c=b[d],c.type!==e.STATIC&&c.sleepState!==e.SLEEPING?(c.position.vsub(c.previousPosition,z),z.scale(a,z),c.position.vadd(z,c.interpolatedPosition)):(c.interpolatedPosition.copy(c.position),c.interpolatedQuaternion.copy(c.quaternion))}};var C={type:"postStep"},x={type:"preStep"},D={type:"collide",body:null,contact:null},F=[],K=[],B=[],P=[];new f;new f;new f;new f;new f;new f;new f;new f;new f;new d;var Q=new d,H=new d,E=new f;a.prototype.internalStep=function(a){this.dt= a;var b=this.contacts,c=this.numObjects(),d=this.bodies,f=this.solver,h=this.gravity,g=this.doProfiling,l=this.profile,q=e.DYNAMIC,m,p=this.constraints;h.norm();var n=h.x,u=h.y,r=h.z;g&&(m=performance.now());for(h=0;h!==c;h++){var t=d[h];if(t.type&q){var v=t.force;t=t.mass;v.x+=t*n;v.y+=t*u;v.z+=t*r}}h=0;for(t=this.subsystems.length;h!==t;h++)this.subsystems[h].update();g&&(m=performance.now());B.length=0;P.length=0;this.broadphase.collisionPairs(this,B,P);g&&(l.broadphase=performance.now()-m);t= p.length;for(h=0;h!==t;h++)if(n=p[h],!n.collideConnected)for(u=B.length-1;0<=u;--u)if(n.bodyA===B[u]&&n.bodyB===P[u]||n.bodyB===B[u]&&n.bodyA===P[u])B.splice(u,1),P.splice(u,1);this.collisionMatrixTick();g&&(m=performance.now());t=b.length;for(h=0;h!==t;h++)F.push(b[h]);b.length=0;t=this.frictionEquations.length;for(h=0;h!==t;h++)K.push(this.frictionEquations[h]);this.frictionEquations.length=0;this.narrowphase.getContacts(B,P,this,b,F,this.frictionEquations,K);g&&(l.narrowphase=performance.now()- m);g&&(m=performance.now());for(h=0;h=2*Math.pow(r.sleepSpeedLimit,2)&&(t._wakeUpAfterNarrowphase=!0),r.allowSleep&&r.type===e.DYNAMIC&&r.sleepState===e.SLEEPING&&t.sleepState===e.AWAKE&&t.type!==e.STATIC&&t.velocity.norm2()+t.angularVelocity.norm2()>=2*Math.pow(t.sleepSpeedLimit,2)&&(r._wakeUpAfterNarrowphase=!0),this.collisionMatrix.set(t,r,!0),this.collisionMatrixPrevious.get(t,r)||(D.body=r,D.contact=n,t.dispatchEvent(D),D.body=t,r.dispatchEvent(D));g&&(l.makeContactConstraints=performance.now()-m,m=performance.now()); for(h=0;h!==c;h++)t=d[h],t._wakeUpAfterNarrowphase&&(t.wakeUp(),t._wakeUpAfterNarrowphase=!1);t=p.length;for(h=0;h!==t;h++)for(n=p[h],n.update(),u=0,b=n.equations.length;u!==b;u++)f.addEquation(n.equations[u]);f.solve(a,this);g&&(l.solve=performance.now()-m);f.removeAllEquations();f=Math.pow;for(h=0;h!==c;h++)if(t=d[h],t.type&q&&(p=f(1-t.linearDamping,a),b=t.velocity,b.mult(p,b),p=t.angularVelocity))b=f(1-t.angularDamping,a),p.mult(b,p);this.dispatchEvent(x);for(h=0;h!==c;h++)t=d[h],t.preStep&&t.preStep.call(t); g&&(m=performance.now());q=e.DYNAMIC|e.KINEMATIC;f=0===this.stepnumber%(this.quatNormalizeSkip+1);p=this.quatNormalizeFast;b=.5*a;for(h=0;h!==c;h++)if(t=d[h],n=t.force,u=t.torque,t.type&q&&t.sleepState!==e.SLEEPING){r=t.velocity;v=t.angularVelocity;var w=t.position,z=t.quaternion,I=t.invMass,Y=t.invInertiaWorld;r.x+=n.x*I*a;r.y+=n.y*I*a;r.z+=n.z*I*a;t.angularVelocity&&(Y.vmult(u,E),E.mult(a,E),E.vadd(v,v));w.x+=r.x*a;w.y+=r.y*a;w.z+=r.z*a;t.angularVelocity&&(Q.set(v.x,v.y,v.z,0),Q.mult(z,H),z.x+= b*H.x,z.y+=b*H.y,z.z+=b*H.z,z.w+=b*H.w,f&&(p?z.normalizeFast():z.normalize()));t.aabb&&(t.aabbNeedsUpdate=!0);t.updateInertiaWorld&&t.updateInertiaWorld()}this.clearForces();this.broadphase.dirty=!0;g&&(l.integrate=performance.now()-m);this.time+=a;this.stepnumber+=1;this.dispatchEvent(C);for(h=0;h!==c;h++)t=d[h],(a=t.postStep)&&a.call(t);if(this.allowSleep)for(h=0;h!==c;h++)d[h].sleepTick(this.time)};a.prototype.clearForces=function(){for(var a=this.bodies,b=a.length,c=0;c!==b;c++){var e=a[c];e.force.set(0, 0,0);e.torque.set(0,0,0)}}},{"../collision/AABB":3,"../collision/ArrayCollisionMatrix":4,"../collision/NaiveBroadphase":7,"../collision/Ray":9,"../collision/RaycastResult":10,"../equations/ContactEquation":19,"../equations/FrictionEquation":21,"../material/ContactMaterial":24,"../material/Material":25,"../math/Quaternion":28,"../math/Vec3":30,"../objects/Body":31,"../shapes/Shape":43,"../solver/GSSolver":46,"../utils/EventTarget":49,"../utils/TupleDictionary":52,"../utils/Vec3Pool":54,"./Narrowphase":55}]}, {},[2])(2)});CANNON=CANNON||{};var camera,scene,s_oRayCasterMesh; CANNON.Demo=function(k){function c(){if(z){for(var a in z.__controllers)z.__controllers[a].updateDisplay();for(var b in z.__folders)for(a in z.__folders[b].__controllers)z.__folders[b].__controllers[a].updateDisplay()}}function d(a){function b(a,c){a.material&&(a.material=c);for(var e=0;eb;b++){d=Q.request();var f=J.contacts[c];e=0===b?f.bi:f.bj;var h=0===b?f.ri:f.rj;d.position.set(e.position.x+h.x,e.position.y+h.y,e.position.z+h.z)}Q.hideCached();H.restart();if(q.cm2contact)for(c=0;cb;b++)d=H.request(),f=J.contacts[c],e=0===b?f.bi:f.bj,h=0===b?f.ri:f.rj,d.scale.set(h.x,h.y,h.z),a(d.scale),d.position.copy(e.position);H.hideCached();N.restart(); L.restart();if(q.constraints){for(c=0;ccannon.js - javascript 3d physics';X.appendChild(O);document.addEventListener("mousemove",m);window.addEventListener("resize",n);Z.setClearColor(scene.fog.color, 1);Z.autoClear=!1;x=document.createElement("canvas");x.width=T;x.height=M;x.style.opacity=.5;x.style.position="absolute";x.style.top="0px";x.style.zIndex=90;X.appendChild(x);C=new SmoothieChart({labelOffsetY:50,maxDataSetLength:100,millisPerPixel:2,grid:{strokeStyle:"none",fillStyle:"none",lineWidth:1,millisPerLine:250,verticalSections:6},labels:{fillStyle:"rgb(180, 180, 180)"}});C.streamTo(x);var b={};a=[[255,0,0],[0,255,0],[0,0,255],[255,255,0],[255,0,255],[0,255,255]];var c=0;for(g in J.profile){var f= a[c%a.length];b[g]=new TimeSeries({label:g,fillStyle:"rgb("+f[0]+","+f[1]+","+f[2]+")",maxDataLength:500});c++}J.addEventListener("postStep",function(a){for(var c in J.profile)b[c].append(1E3*J.time,J.profile[c])});c=0;for(g in J.profile)f=a[c%a.length],C.addTimeSeries(b[g],{strokeStyle:"rgb("+f[0]+","+f[1]+","+f[2]+")",lineWidth:2}),c++;J.doProfiling=!1;C.stop();x.style.display="none";G=new Stats;G.domElement.style.position="absolute";G.domElement.style.top="0px";G.domElement.style.zIndex=100;X.appendChild(G.domElement); if(void 0!=window.dat){z=new dat.GUI;z.domElement.parentNode.style.zIndex=120;var g=z.addFolder("Rendering");g.add(q,"rendermode",{Solid:"solid",Wireframe:"wireframe"}).onChange(function(a){d(a)});g.add(q,"contacts");g.add(q,"cm2contact");g.add(q,"normals");g.add(q,"constraints");g.add(q,"axes");g.add(q,"particleSize").min(0).max(1).onChange(function(a){for(var b=0;ba.keyCode-49&&!document.activeElement.localName.match(/input/)&& l(a.keyCode-49)}})};CANNON.Demo.prototype=new CANNON.EventTarget;CANNON.Demo.constructor=CANNON.Demo; CANNON.Demo.prototype.setGlobalSpookParams=function(k,c,d){for(var g=this.world,a=0;af?m-1:m,c[b]=g[m],d[b]=a[m],c[b].visualref=g[m].visualref,c[b].visualref.visualId=b);k.visualref.visualId=null;this.scene.remove(k.visualref);k.visualref=null}};CANNON.Demo.prototype.removeAllVisuals=function(){for(;this.bodies.length;)this.removeVisual(this.bodies[0])}; CANNON.Demo.prototype.shape2mesh=function(k,c){for(var d=new THREE.Object3D,g=0;ge;e++)a.getConvexTrianglePillar(m,p,0===e),n.copy(a.pillarConvex.vertices[0]),l.copy(a.pillarConvex.vertices[1]),r.copy(a.pillarConvex.vertices[2]), n.vadd(a.pillarOffset,n),l.vadd(a.pillarOffset,l),r.vadd(a.pillarOffset,r),b.vertices.push(new THREE.Vector3(n.x,n.y,n.z),new THREE.Vector3(l.x,l.y,l.z),new THREE.Vector3(r.x,r.y,r.z)),f=b.vertices.length-3,b.faces.push(new THREE.Face3(f,f+1,f+2));b.computeBoundingSphere();b.computeFaceNormals();a=new THREE.Mesh(b,this.currentMaterial);break;case CANNON.Shape.types.TRIMESH:b=new THREE.Geometry;n=new CANNON.Vec3;l=new CANNON.Vec3;r=new CANNON.Vec3;for(f=0;f=PAR_POINTS-ADDED_POINTS&&l[a]=q?13*-q/33+150:0>q&&-114<=q?13*q/56+150:66=r||(r>MAX_SHOT_POWER&&(r=MAX_SHOT_POWER),a=new CVector2(b,m),a.normalize(),a.scalarProduct(r),s_oGame.launchBall({x:a.getX(), y:-a.getY()}),I.setMoving(!0),I.pressIndicatorStop(),r=0,playSound("hit_ball",1,!1)))};this._drawLine=function(a,b){w.graphics.clear();w.graphics.setStrokeDash([14,14],2);w.graphics.setStrokeStyle(5);w.graphics.beginStroke("rgba(61,34,11,1)");w.graphics.moveTo(0,q);w.graphics.lineTo(a,b)};this._drawArrow=function(){var b=new CVector2(a-u.x,f-u.y);b=Math.degrees(angleBetweenVectors(E,b));z.rotation=b;C.scaleX=r/MAX_SHOT_POWER*.83+.17};this.unload=function(){u.removeAllEventListeners();g.removeChild(u); u.off("mousedown",P);u.off("mousemove",Q);u.off("mouseup",H)};this.removeHelpAnim=function(){new createjs.Tween.removeTweens(B);new createjs.Tween.removeTweens(C)};this.setHelpAnim=function(){var a=s_oSpriteLibrary.getSprite("help_touch");B=createBitmap(a);B.regX=.33*a.width;B.regY=.1*a.height;u.addChild(B);this._helpCursorAnim(1E3);this._helpArrowAnim(1E3)};this._helpCursorAnim=function(a){createjs.Tween.get(B).to({x:-200,y:120},a,createjs.Ease.cubicInOut).call(function(){createjs.Tween.get(B).to({x:0, y:0},a,createjs.Ease.cubicInOut).call(function(){I._helpCursorAnim(a)})})};this._helpArrowAnim=function(a){z.visible=!0;z.rotation=180;createjs.Tween.get(C).to({scaleX:1},a,createjs.Ease.cubicInOut).call(function(){createjs.Tween.get(C).to({scaleX:0},a,createjs.Ease.cubicInOut).call(function(){I._helpArrowAnim(a)})})};this.blink=function(){createjs.Tween.get(u).to({alpha:0},100-15*e).to({alpha:1},300-45*e).wait(100-20*e).call(function(){e--;0WebGL.
\nFind out how to get it here.':'Your browser does not seem to support WebGL.
\nFind out how to get it here.'); return k},addGetWebGLMessage:function(k){k=k||{};var c=void 0!==k.parent?k.parent:document.body;k=void 0!==k.id?k.id:"oldie";var d=Detector.getWebGLErrorMessage();d.id=k;c.appendChild(d)}}; function TimeSeries(k){k=k||{};k.resetBoundsInterval=k.resetBoundsInterval||3E3;k.resetBounds=void 0===k.resetBounds?!0:k.resetBounds;this.options=k;this.data=[];this.label=k.label||"";this.maxDataLength=k.maxDataLength||1E3;this.dataPool=[];this.minValue=this.maxValue=Number.NaN;k.resetBounds&&(this.boundsTimer=setInterval(function(c){return function(){c.resetBounds()}}(this),k.resetBoundsInterval))} TimeSeries.prototype.resetBounds=function(){this.minValue=this.maxValue=Number.NaN;for(var k=0;kthis.maxDataLength;)this.dataPool.push(this.data.shift())}; function SmoothieChart(k){k=k||{};k.grid=k.grid||{fillStyle:"#000000",strokeStyle:"#777777",lineWidth:1,millisPerLine:1E3,verticalSections:2};k.millisPerPixel=k.millisPerPixel||20;k.fps=k.fps||50;k.maxValueScale=k.maxValueScale||1;k.minValue=k.minValue;k.maxValue=k.maxValue;k.labels=k.labels||{fillStyle:"#ffffff"};k.interpolation=k.interpolation||"bezier";k.scaleSmoothing=k.scaleSmoothing||.125;k.maxDataSetLength=k.maxDataSetLength||2;k.timestampFormatter=k.timestampFormatter||null;this.options=k; this.seriesSet=[];this.currentValueRange=1;this.currentVisMinValue=0}SmoothieChart.prototype.addTimeSeries=function(k,c){this.seriesSet.push({timeSeries:k,options:c||{}})};SmoothieChart.prototype.removeTimeSeries=function(k){this.seriesSet.splice(this.seriesSet.indexOf(k),1)};SmoothieChart.prototype.streamTo=function(k,c){var d=this;this.render_on_tick=function(){d.render(k,d.seriesSet[0].timeSeries.lastTimeStamp)};this.start()}; SmoothieChart.prototype.start=function(){this.timer||(this.timer=setInterval(this.render_on_tick,1E3/this.options.fps))};SmoothieChart.prototype.stop=function(){this.timer&&(clearInterval(this.timer),this.timer=void 0)};SmoothieChart.timeFormatter=function(k){function c(c){return(10>c?"0":"")+c}return c(k.getHours())+":"+c(k.getMinutes())+":"+c(k.getSeconds())}; SmoothieChart.prototype.render=function(k,c){var d=k.getContext("2d"),g=this.options,a=k.clientWidth,f=k.clientHeight;d.save();c-=c%g.millisPerPixel;d.translate(0,0);d.beginPath();d.rect(0,0,a,f);d.clip();d.save();d.fillStyle=g.grid.fillStyle;d.clearRect(0,0,a,f);d.fillRect(0,0,a,f);d.restore();d.save();d.lineWidth=g.grid.lineWidth||1;d.strokeStyle=g.grid.strokeStyle||"#ffffff";if(0=c-a*g.millisPerPixel;b-=g.grid.millisPerLine){d.beginPath(); var m=Math.round(a-(c-b)/g.millisPerPixel);d.moveTo(m,0);d.lineTo(m,f);d.stroke();if(g.timestampFormatter){var n=g.timestampFormatter(new Date(b)),l=d.measureText(n).width/2+d.measureText(v).width+4;m=g.maxDataSetLength&&r[1][0]t.children.length;){var w=document.createElement("span");w.style.width="1px";w.style.height="30px";w.style.cssFloat="left";w.style.backgroundColor="rgb("+n[0][0]+","+n[0][1]+","+n[0][2]+")";t.appendChild(w)}var v=document.createElement("div");v.style.textAlign="left";v.style.lineHeight="1.2em";v.style.backgroundColor="rgb("+Math.floor(e[0][0]/2)+","+Math.floor(e[0][1]/2)+","+Math.floor(e[0][2]/2)+")"; v.style.padding="0 0 3px 3px";v.style.display="none";h.appendChild(v);var z=document.createElement("div");z.style.fontFamily="Helvetica, Arial, sans-serif";z.style.fontSize="9px";z.style.color="rgb("+e[1][0]+","+e[1][1]+","+e[1][2]+")";z.style.fontWeight="bold";z.innerHTML="MS";v.appendChild(z);var C=document.createElement("div");C.style.position="relative";C.style.width="74px";C.style.height="30px";C.style.backgroundColor="rgb("+e[1][0]+","+e[1][1]+","+e[1][2]+")";for(v.appendChild(C);74>C.children.length;)w= document.createElement("span"),w.style.width="1px",w.style.height=30*Math.random()+"px",w.style.cssFloat="left",w.style.backgroundColor="rgb("+e[0][0]+","+e[0][1]+","+e[0][2]+")",C.appendChild(w);return{domElement:h,update:function(){d=Date.now();l=d-g;r=Math.min(r,l);p=Math.max(p,l);z.textContent=l+" MS ("+r+"-"+p+")";var e=Math.min(30,30-l/200*30);C.appendChild(C.firstChild).style.height=e+"px";g=d;c++;d>a+1E3&&(f=Math.round(1E3*c/(d-a)),b=Math.min(b,f),m=Math.max(m,f),u.textContent=f+" FPS ("+ b+"-"+m+")",e=Math.min(30,30-f/100*30),t.appendChild(t.firstChild).style.height=e+"px",a=d,c=0)}}}; THREE.TrackballControls=function(k,c){function d(a){!1!==b.enabled&&(window.removeEventListener("keydown",d),r=l,l===m.NONE)&&(a.keyCode!==b.keys[m.ROTATE]||b.noRotate?a.keyCode!==b.keys[m.ZOOM]||b.noZoom?a.keyCode!==b.keys[m.PAN]||b.noPan||(l=m.PAN):l=m.ZOOM:l=m.ROTATE)}function g(a){!1!==b.enabled&&(a.preventDefault(),a.stopPropagation(),l!==m.ROTATE||b.noRotate?l!==m.ZOOM||b.noZoom?l!==m.PAN||b.noPan||z.copy(F(a.pageX,a.pageY)):u.copy(F(a.pageX,a.pageY)):h.copy(K(a.pageX,a.pageY)))}function a(c){!1!== b.enabled&&(c.preventDefault(),c.stopPropagation(),l=m.NONE,document.removeEventListener("mousemove",g),document.removeEventListener("mouseup",a),b.dispatchEvent(D))}function f(a){if(!1!==b.enabled){a.preventDefault();a.stopPropagation();var c=0;a.wheelDelta?c=a.wheelDelta/40:a.detail&&(c=-a.detail/3);q.y+=.01*c;b.dispatchEvent(x);b.dispatchEvent(D)}}var b=this,m={NONE:-1,ROTATE:0,ZOOM:1,PAN:2,TOUCH_ROTATE:3,TOUCH_ZOOM_PAN:4};this.object=k;this.domElement=void 0!==c?c:document;this.enabled=!0;this.screen= {left:0,top:0,width:0,height:0};this.rotateSpeed=1;this.zoomSpeed=1.2;this.panSpeed=.3;this.staticMoving=this.noRoll=this.noPan=this.noZoom=this.noRotate=!1;this.dynamicDampingFactor=.2;this.minDistance=0;this.maxDistance=Infinity;this.keys=[65,83,68];this.target=new THREE.Vector3;var n=new THREE.Vector3,l=m.NONE,r=m.NONE,p=new THREE.Vector3,e=new THREE.Vector3,h=new THREE.Vector3,q=new THREE.Vector2,u=new THREE.Vector2,t=0,w=0,v=new THREE.Vector2,z=new THREE.Vector2;this.target0=this.target.clone(); this.position0=this.object.position.clone();this.up0=this.object.up.clone();var C={type:"change"},x={type:"start"},D={type:"end"};this.handleResize=function(){if(this.domElement===document)this.screen.left=0,this.screen.top=0,this.screen.width=window.innerWidth,this.screen.height=window.innerHeight;else{var a=this.domElement.getBoundingClientRect(),b=this.domElement.ownerDocument.documentElement;this.screen.left=a.left+window.pageXOffset-b.clientLeft;this.screen.top=a.top+window.pageYOffset-b.clientTop; this.screen.width=a.width;this.screen.height=a.height}};this.handleEvent=function(a){if("function"==typeof this[a.type])this[a.type](a)};var F=function(){var a=new THREE.Vector2;return function(c,e){a.set((c-b.screen.left)/b.screen.width,(e-b.screen.top)/b.screen.height);return a}}(),K=function(){var a=new THREE.Vector3,c=new THREE.Vector3,e=new THREE.Vector3;return function(d,f){e.set((d-.5*b.screen.width-b.screen.left)/(.5*b.screen.width),(.5*b.screen.height+b.screen.top-f)/(.5*b.screen.height), 0);var h=e.length();b.noRoll?e.z=hb.maxDistance*b.maxDistance&&b.object.position.addVectors(b.target,p.setLength(b.maxDistance)),p.lengthSq()this.__max&&(c=this.__max);void 0!==this.__step&&0!=c%this.__step&&(c=Math.round(c/this.__step)*this.__step);return d.superclass.prototype.setValue.call(this,c)},min:function(c){this.__min=c;return this},max:function(c){this.__max=c;return this},step:function(c){this.__step=c;return this}});return d}(dat.controllers.Controller,dat.utils.common); dat.controllers.NumberControllerBox=function(k,c,d){var g=function(a,f,b){function k(){var a=parseFloat(r.__input.value);d.isNaN(a)||r.setValue(a)}function n(a){var b=p-a.clientY;r.setValue(r.getValue()+b*r.__impliedStep);p=a.clientY}function l(){c.unbind(window,"mousemove",n);c.unbind(window,"mouseup",l)}this.__truncationSuspended=!1;g.superclass.call(this,a,f,b);var r=this,p;this.__input=document.createElement("input");this.__input.setAttribute("type","text");c.bind(this.__input,"change",k);c.bind(this.__input, "blur",function(){k();r.__onFinishChange&&r.__onFinishChange.call(r,r.getValue())});c.bind(this.__input,"mousedown",function(a){c.bind(window,"mousemove",n);c.bind(window,"mouseup",l);p=a.clientY});c.bind(this.__input,"keydown",function(a){13===a.keyCode&&(r.__truncationSuspended=!0,this.blur(),r.__truncationSuspended=!1)});this.updateDisplay();this.domElement.appendChild(this.__input)};g.superclass=k;d.extend(g.prototype,k.prototype,{updateDisplay:function(){var a=this.__input;if(this.__truncationSuspended)var c= this.getValue();else{c=this.getValue();var b=Math.pow(10,this.__precision);c=Math.round(c*b)/b}a.value=c;return g.superclass.prototype.updateDisplay.call(this)}});return g}(dat.controllers.NumberController,dat.dom.dom,dat.utils.common); dat.controllers.NumberControllerSlider=function(k,c,d,g,a){function f(a,b,c,d,f){return d+(a-b)/(c-b)*(f-d)}var b=function(a,d,g,k,p){function e(a){a.preventDefault();var b=c.getOffset(q.__background),e=c.getWidth(q.__background);q.setValue(f(a.clientX,b.left,b.left+e,q.__min,q.__max));return!1}function h(){c.unbind(window,"mousemove",e);c.unbind(window,"mouseup",h);q.__onFinishChange&&q.__onFinishChange.call(q,q.getValue())}b.superclass.call(this,a,d,{min:g,max:k,step:p});var q=this;this.__background= document.createElement("div");this.__foreground=document.createElement("div");c.bind(this.__background,"mousedown",function(a){c.bind(window,"mousemove",e);c.bind(window,"mouseup",h);e(a)});c.addClass(this.__background,"slider");c.addClass(this.__foreground,"slider-fg");this.updateDisplay();this.__background.appendChild(this.__foreground);this.domElement.appendChild(this.__background)};b.superclass=k;b.useDefaultStyles=function(){d.inject(a)};g.extend(b.prototype,k.prototype,{updateDisplay:function(){var a= (this.getValue()-this.__min)/(this.__max-this.__min);this.__foreground.style.width=100*a+"%";return b.superclass.prototype.updateDisplay.call(this)}});return b}(dat.controllers.NumberController,dat.dom.dom,dat.utils.css,dat.utils.common,".slider {\n box-shadow: inset 0 2px 4px rgba(0,0,0,0.15);\n height: 1em;\n border-radius: 1em;\n background-color: #eee;\n padding: 0 0.5em;\n overflow: hidden;\n}\n\n.slider-fg {\n padding: 1px 0 2px 0;\n background-color: #aaa;\n height: 1em;\n margin-left: -0.5em;\n padding-right: 0.5em;\n border-radius: 1em 0 0 1em;\n}\n\n.slider-fg:after {\n display: inline-block;\n border-radius: 1em;\n background-color: #fff;\n border: 1px solid #aaa;\n content: '';\n float: right;\n margin-right: -1em;\n margin-top: -1px;\n height: 0.9em;\n width: 0.9em;\n}"); dat.controllers.FunctionController=function(k,c,d){var g=function(a,d,b){g.superclass.call(this,a,d);var f=this;this.__button=document.createElement("div");this.__button.innerHTML=void 0===b?"Fire":b;c.bind(this.__button,"click",function(a){a.preventDefault();f.fire();return!1});c.addClass(this.__button,"button");this.domElement.appendChild(this.__button)};g.superclass=k;d.extend(g.prototype,k.prototype,{fire:function(){this.__onChange&&this.__onChange.call(this);this.__onFinishChange&&this.__onFinishChange.call(this, this.getValue());this.getValue().call(this.object)}});return g}(dat.controllers.Controller,dat.dom.dom,dat.utils.common); dat.controllers.BooleanController=function(k,c,d){var g=function(a,d){g.superclass.call(this,a,d);var b=this;this.__prev=this.getValue();this.__checkbox=document.createElement("input");this.__checkbox.setAttribute("type","checkbox");c.bind(this.__checkbox,"change",function(){b.setValue(!b.__prev)},!1);this.domElement.appendChild(this.__checkbox);this.updateDisplay()};g.superclass=k;d.extend(g.prototype,k.prototype,{setValue:function(a){a=g.superclass.prototype.setValue.call(this,a);this.__onFinishChange&& this.__onFinishChange.call(this,this.getValue());this.__prev=this.getValue();return a},updateDisplay:function(){!0===this.getValue()?(this.__checkbox.setAttribute("checked","checked"),this.__checkbox.checked=!0):this.__checkbox.checked=!1;return g.superclass.prototype.updateDisplay.call(this)}});return g}(dat.controllers.Controller,dat.dom.dom,dat.utils.common); dat.color.toString=function(k){return function(c){if(1==c.a||k.isUndefined(c.a)){for(c=c.hex.toString(16);6>c.length;)c="0"+c;return"#"+c}return"rgba("+Math.round(c.r)+","+Math.round(c.g)+","+Math.round(c.b)+","+c.a+")"}}(dat.utils.common); dat.color.interpret=function(k,c){var d,g,a=[{litmus:c.isString,conversions:{THREE_CHAR_HEX:{read:function(a){a=a.match(/^#([A-F0-9])([A-F0-9])([A-F0-9])$/i);return null===a?!1:{space:"HEX",hex:parseInt("0x"+a[1].toString()+a[1].toString()+a[2].toString()+a[2].toString()+a[3].toString()+a[3].toString())}},write:k},SIX_CHAR_HEX:{read:function(a){a=a.match(/^#([A-F0-9]{6})$/i);return null===a?!1:{space:"HEX",hex:parseInt("0x"+a[1].toString())}},write:k},CSS_RGB:{read:function(a){a=a.match(/^rgb\(\s*(.+)\s*,\s*(.+)\s*,\s*(.+)\s*\)/); return null===a?!1:{space:"RGB",r:parseFloat(a[1]),g:parseFloat(a[2]),b:parseFloat(a[3])}},write:k},CSS_RGBA:{read:function(a){a=a.match(/^rgba\(\s*(.+)\s*,\s*(.+)\s*,\s*(.+)\s*,\s*(.+)\s*\)/);return null===a?!1:{space:"RGB",r:parseFloat(a[1]),g:parseFloat(a[2]),b:parseFloat(a[3]),a:parseFloat(a[4])}},write:k}}},{litmus:c.isNumber,conversions:{HEX:{read:function(a){return{space:"HEX",hex:a,conversionName:"HEX"}},write:function(a){return a.hex}}}},{litmus:c.isArray,conversions:{RGB_ARRAY:{read:function(a){return 3!= a.length?!1:{space:"RGB",r:a[0],g:a[1],b:a[2]}},write:function(a){return[a.r,a.g,a.b]}},RGBA_ARRAY:{read:function(a){return 4!=a.length?!1:{space:"RGB",r:a[0],g:a[1],b:a[2],a:a[3]}},write:function(a){return[a.r,a.g,a.b,a.a]}}}},{litmus:c.isObject,conversions:{RGBA_OBJ:{read:function(a){return c.isNumber(a.r)&&c.isNumber(a.g)&&c.isNumber(a.b)&&c.isNumber(a.a)?{space:"RGB",r:a.r,g:a.g,b:a.b,a:a.a}:!1},write:function(a){return{r:a.r,g:a.g,b:a.b,a:a.a}}},RGB_OBJ:{read:function(a){return c.isNumber(a.r)&& c.isNumber(a.g)&&c.isNumber(a.b)?{space:"RGB",r:a.r,g:a.g,b:a.b}:!1},write:function(a){return{r:a.r,g:a.g,b:a.b}}},HSVA_OBJ:{read:function(a){return c.isNumber(a.h)&&c.isNumber(a.s)&&c.isNumber(a.v)&&c.isNumber(a.a)?{space:"HSV",h:a.h,s:a.s,v:a.v,a:a.a}:!1},write:function(a){return{h:a.h,s:a.s,v:a.v,a:a.a}}},HSV_OBJ:{read:function(a){return c.isNumber(a.h)&&c.isNumber(a.s)&&c.isNumber(a.v)?{space:"HSV",h:a.h,s:a.s,v:a.v}:!1},write:function(a){return{h:a.h,s:a.s,v:a.v}}}}}];return function(){g=!1; var f=1\n\n Here\'s the new load parameter for your GUI\'s constructor:\n\n \n\n
\n\n Automatically save\n values to localStorage on exit.\n\n
The values saved to localStorage will\n override those passed to dat.GUI\'s constructor. This makes it\n easier to work incrementally, but localStorage is fragile,\n and your friends may not see the same values you do.\n \n
\n \n
\n\n', ".dg ul{list-style:none;margin:0;padding:0;width:100%;clear:both}.dg.ac{position:fixed;top:0;left:0;right:0;height:0;z-index:0}.dg:not(.ac) .main{overflow:hidden}.dg.main{-webkit-transition:opacity 0.1s linear;-o-transition:opacity 0.1s linear;-moz-transition:opacity 0.1s linear;transition:opacity 0.1s linear}.dg.main.taller-than-window{overflow-y:auto}.dg.main.taller-than-window .close-button{opacity:1;margin-top:-1px;border-top:1px solid #2c2c2c}.dg.main ul.closed .close-button{opacity:1 !important}.dg.main:hover .close-button,.dg.main .close-button.drag{opacity:1}.dg.main .close-button{-webkit-transition:opacity 0.1s linear;-o-transition:opacity 0.1s linear;-moz-transition:opacity 0.1s linear;transition:opacity 0.1s linear;border:0;position:absolute;line-height:19px;height:20px;cursor:pointer;text-align:center;background-color:#000}.dg.main .close-button:hover{background-color:#111}.dg.a{float:right;margin-right:15px;overflow-x:hidden}.dg.a.has-save ul{margin-top:27px}.dg.a.has-save ul.closed{margin-top:0}.dg.a .save-row{position:fixed;top:0;z-index:1002}.dg li{-webkit-transition:height 0.1s ease-out;-o-transition:height 0.1s ease-out;-moz-transition:height 0.1s ease-out;transition:height 0.1s ease-out}.dg li:not(.folder){cursor:auto;height:27px;line-height:27px;overflow:hidden;padding:0 4px 0 5px}.dg li.folder{padding:0;border-left:4px solid rgba(0,0,0,0)}.dg li.title{cursor:pointer;margin-left:-4px}.dg .closed li:not(.title),.dg .closed ul li,.dg .closed ul li > *{height:0;overflow:hidden;border:0}.dg .cr{clear:both;padding-left:3px;height:27px}.dg .property-name{cursor:default;float:left;clear:left;width:40%;overflow:hidden;text-overflow:ellipsis}.dg .c{float:left;width:60%}.dg .c input[type=text]{border:0;margin-top:4px;padding:3px;width:100%;float:right}.dg .has-slider input[type=text]{width:30%;margin-left:0}.dg .slider{float:left;width:66%;margin-left:-5px;margin-right:0;height:19px;margin-top:4px}.dg .slider-fg{height:100%}.dg .c input[type=checkbox]{margin-top:9px}.dg .c select{margin-top:5px}.dg .cr.function,.dg .cr.function .property-name,.dg .cr.function *,.dg .cr.boolean,.dg .cr.boolean *{cursor:pointer}.dg .selector{display:none;position:absolute;margin-left:-9px;margin-top:23px;z-index:10}.dg .c:hover .selector,.dg .selector.drag{display:block}.dg li.save-row{padding:0}.dg li.save-row .button{display:inline-block;padding:0px 6px}.dg.dialogue{background-color:#222;width:460px;padding:15px;font-size:13px;line-height:15px}#dg-new-constructor{padding:10px;color:#222;font-family:Monaco, monospace;font-size:10px;border:0;resize:none;box-shadow:inset 1px 1px 1px #888;word-wrap:break-word;margin:12px 0;display:block;width:440px;overflow-y:scroll;height:100px;position:relative}#dg-local-explain{display:none;font-size:11px;line-height:17px;border-radius:3px;background-color:#333;padding:8px;margin-top:10px}#dg-local-explain code{font-size:10px}#dat-gui-save-locally{display:none}.dg{color:#eee;font:11px 'Lucida Grande', sans-serif;text-shadow:0 -1px 0 #111}.dg.main::-webkit-scrollbar{width:5px;background:#1a1a1a}.dg.main::-webkit-scrollbar-corner{height:0;display:none}.dg.main::-webkit-scrollbar-thumb{border-radius:5px;background:#676767}.dg li:not(.folder){background:#1a1a1a;border-bottom:1px solid #2c2c2c}.dg li.save-row{line-height:25px;background:#dad5cb;border:0}.dg li.save-row select{margin-left:5px;width:108px}.dg li.save-row .button{margin-left:5px;margin-top:1px;border-radius:2px;font-size:9px;line-height:7px;padding:4px 4px 5px 4px;background:#c5bdad;color:#fff;text-shadow:0 1px 0 #b0a58f;box-shadow:0 -1px 0 #b0a58f;cursor:pointer}.dg li.save-row .button.gears{background:#c5bdad url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAANCAYAAAB/9ZQ7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQJJREFUeNpiYKAU/P//PwGIC/ApCABiBSAW+I8AClAcgKxQ4T9hoMAEUrxx2QSGN6+egDX+/vWT4e7N82AMYoPAx/evwWoYoSYbACX2s7KxCxzcsezDh3evFoDEBYTEEqycggWAzA9AuUSQQgeYPa9fPv6/YWm/Acx5IPb7ty/fw+QZblw67vDs8R0YHyQhgObx+yAJkBqmG5dPPDh1aPOGR/eugW0G4vlIoTIfyFcA+QekhhHJhPdQxbiAIguMBTQZrPD7108M6roWYDFQiIAAv6Aow/1bFwXgis+f2LUAynwoIaNcz8XNx3Dl7MEJUDGQpx9gtQ8YCueB+D26OECAAQDadt7e46D42QAAAABJRU5ErkJggg==) 2px 1px no-repeat;height:7px;width:8px}.dg li.save-row .button:hover{background-color:#bab19e;box-shadow:0 -1px 0 #b0a58f}.dg li.folder{border-bottom:0}.dg li.title{padding-left:16px;background:#000 url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlI+hKgFxoCgAOw==) 6px 10px no-repeat;cursor:pointer;border-bottom:1px solid rgba(255,255,255,0.2)}.dg .closed li.title{background-image:url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlGIWqMCbWAEAOw==)}.dg .cr.boolean{border-left:3px solid #806787}.dg .cr.function{border-left:3px solid #e61d5f}.dg .cr.number{border-left:3px solid #2fa1d6}.dg .cr.number input[type=text]{color:#2fa1d6}.dg .cr.string{border-left:3px solid #1ed36f}.dg .cr.string input[type=text]{color:#1ed36f}.dg .cr.function:hover,.dg .cr.boolean:hover{background:#111}.dg .c input[type=text]{background:#303030;outline:none}.dg .c input[type=text]:hover{background:#3c3c3c}.dg .c input[type=text]:focus{background:#494949;color:#fff}.dg .c .slider{background:#303030;cursor:ew-resize}.dg .c .slider-fg{background:#2fa1d6}.dg .c .slider:hover{background:#3c3c3c}.dg .c .slider:hover .slider-fg{background:#44abda}\n", dat.controllers.factory=function(k,c,d,g,a,f,b){return function(m,n,l,r){var p=m[n];if(b.isArray(l)||b.isObject(l))return new k(m,n,l);if(b.isNumber(p))return b.isNumber(l)&&b.isNumber(r)?new d(m,n,l,r):new c(m,n,{min:l,max:r});if(b.isString(p))return new g(m,n);if(b.isFunction(p))return new a(m,n,"");if(b.isBoolean(p))return new f(m,n)}}(dat.controllers.OptionController,dat.controllers.NumberControllerBox,dat.controllers.NumberControllerSlider,dat.controllers.StringController=function(k,c,d){var g= function(a,d){function b(){f.setValue(f.__input.value)}g.superclass.call(this,a,d);var f=this;this.__input=document.createElement("input");this.__input.setAttribute("type","text");c.bind(this.__input,"keyup",b);c.bind(this.__input,"change",b);c.bind(this.__input,"blur",function(){f.__onFinishChange&&f.__onFinishChange.call(f,f.getValue())});c.bind(this.__input,"keydown",function(a){13===a.keyCode&&this.blur()});this.updateDisplay();this.domElement.appendChild(this.__input)};g.superclass=k;d.extend(g.prototype, k.prototype,{updateDisplay:function(){c.isActive(this.__input)||(this.__input.value=this.getValue());return g.superclass.prototype.updateDisplay.call(this)}});return g}(dat.controllers.Controller,dat.dom.dom,dat.utils.common),dat.controllers.FunctionController,dat.controllers.BooleanController,dat.utils.common),dat.controllers.Controller,dat.controllers.BooleanController,dat.controllers.FunctionController,dat.controllers.NumberControllerBox,dat.controllers.NumberControllerSlider,dat.controllers.OptionController, dat.controllers.ColorController=function(k,c,d,g,a){function f(b,c,d,e){b.style.background="";a.each(n,function(a){b.style.cssText+="background: "+a+"linear-gradient("+c+", "+d+" 0%, "+e+" 100%); "})}function b(a){a.style.background="";a.style.cssText+="background: -moz-linear-gradient(top, #ff0000 0%, #ff00ff 17%, #0000ff 34%, #00ffff 50%, #00ff00 67%, #ffff00 84%, #ff0000 100%);";a.style.cssText+="background: -webkit-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);"; a.style.cssText+="background: -o-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);";a.style.cssText+="background: -ms-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);";a.style.cssText+="background: linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);"}var m=function(l,k){function p(a){n(a);c.bind(window,"mousemove",n);c.bind(window, "mouseup",e)}function e(){c.unbind(window,"mousemove",n);c.unbind(window,"mouseup",e)}function h(){var a=g(this.value);!1!==a?(w.__color.__state=a,w.setValue(w.__color.toOriginal())):this.value=w.__color.toString()}function q(){c.unbind(window,"mousemove",r);c.unbind(window,"mouseup",q)}function n(a){a.preventDefault();var b=c.getWidth(w.__saturation_field),e=c.getOffset(w.__saturation_field),d=(a.clientX-e.left+document.body.scrollLeft)/b;a=1-(a.clientY-e.top+document.body.scrollTop)/b;1 a&&(a=0);1d&&(d=0);w.__color.v=a;w.__color.s=d;w.setValue(w.__color.toOriginal());return!1}function r(a){a.preventDefault();var b=c.getHeight(w.__hue_field),e=c.getOffset(w.__hue_field);a=1-(a.clientY-e.top+document.body.scrollTop)/b;1a&&(a=0);w.__color.h=360*a;w.setValue(w.__color.toOriginal());return!1}m.superclass.call(this,l,k);this.__color=new d(this.getValue());this.__temp=new d(0);var w=this;this.domElement=document.createElement("div");c.makeSelectable(this.domElement,!1); this.__selector=document.createElement("div");this.__selector.className="selector";this.__saturation_field=document.createElement("div");this.__saturation_field.className="saturation-field";this.__field_knob=document.createElement("div");this.__field_knob.className="field-knob";this.__field_knob_border="2px solid ";this.__hue_knob=document.createElement("div");this.__hue_knob.className="hue-knob";this.__hue_field=document.createElement("div");this.__hue_field.className="hue-field";this.__input=document.createElement("input"); this.__input.type="text";this.__input_textShadow="0 1px 1px ";c.bind(this.__input,"keydown",function(a){13===a.keyCode&&h.call(this)});c.bind(this.__input,"blur",h);c.bind(this.__selector,"mousedown",function(a){c.addClass(this,"drag").bind(window,"mouseup",function(a){c.removeClass(w.__selector,"drag")})});var v=document.createElement("div");a.extend(this.__selector.style,{width:"122px",height:"102px",padding:"3px",backgroundColor:"#222",boxShadow:"0px 1px 3px rgba(0,0,0,0.3)"});a.extend(this.__field_knob.style, {position:"absolute",width:"12px",height:"12px",border:this.__field_knob_border+(.5>this.__color.v?"#fff":"#000"),boxShadow:"0px 1px 3px rgba(0,0,0,0.5)",borderRadius:"12px",zIndex:1});a.extend(this.__hue_knob.style,{position:"absolute",width:"15px",height:"2px",borderRight:"4px solid #fff",zIndex:1});a.extend(this.__saturation_field.style,{width:"100px",height:"100px",border:"1px solid #555",marginRight:"3px",display:"inline-block",cursor:"pointer"});a.extend(v.style,{width:"100%",height:"100%", background:"none"});f(v,"top","rgba(0,0,0,0)","#000");a.extend(this.__hue_field.style,{width:"15px",height:"100px",display:"inline-block",border:"1px solid #555",cursor:"ns-resize"});b(this.__hue_field);a.extend(this.__input.style,{outline:"none",textAlign:"center",color:"#fff",border:0,fontWeight:"bold",textShadow:this.__input_textShadow+"rgba(0,0,0,0.7)"});c.bind(this.__saturation_field,"mousedown",p);c.bind(this.__field_knob,"mousedown",p);c.bind(this.__hue_field,"mousedown",function(a){r(a);c.bind(window, "mousemove",r);c.bind(window,"mouseup",q)});this.__saturation_field.appendChild(v);this.__selector.appendChild(this.__field_knob);this.__selector.appendChild(this.__saturation_field);this.__selector.appendChild(this.__hue_field);this.__hue_field.appendChild(this.__hue_knob);this.domElement.appendChild(this.__input);this.domElement.appendChild(this.__selector);this.updateDisplay()};m.superclass=k;a.extend(m.prototype,k.prototype,{updateDisplay:function(){var b=g(this.getValue());if(!1!==b){var c=!1; a.each(d.COMPONENTS,function(e){if(!a.isUndefined(b[e])&&!a.isUndefined(this.__color.__state[e])&&b[e]!==this.__color.__state[e])return c=!0,{}},this);c&&a.extend(this.__color.__state,b)}a.extend(this.__temp.__state,this.__color.__state);this.__temp.a=1;var k=.5>this.__color.v||.5c&&(c+=1);return{h:360*c,s:f/a,v:a/255}},rgb_to_hex:function(c,d,g){c=this.hex_with_component(0,2,c);c=this.hex_with_component(c,1,d);return c=this.hex_with_component(c,0,g)},component_from_hex:function(c,d){return c>>8*d&255},hex_with_component:function(c,d,g){return g<<(k=8*d)|c&~(255<g?(b>c&&(c=b),a[f]=g^-1,d.push(b),b=1):(a[f]=g,b++)}null===c&&(console.warn("FBXLoader: topology N not found: "+this.node.attrName),console.warn(this.node),c=3);this.node.__cache_poly_topology_max=c;this.node.__cache_poly_topology_arr=d;this.node.__cache_indices= a;return this.node.__cache_indices}};a.prototype.getPolygonTopologyMax=function(){if(this.node.__cache_indices&&this.node.__cache_poly_topology_max)return this.node.__cache_poly_topology_max;this.getPolygonVertexIndices(this.node);return this.node.__cache_poly_topology_max};a.prototype.getPolygonTopologyArray=function(){if(this.node.__cache_indices&&this.node.__cache_poly_topology_max)return this.node.__cache_poly_topology_arr;this.getPolygonVertexIndices(this.node);return this.node.__cache_poly_topology_arr}; a.prototype.convertPolyIndicesToTri=function(a,b){for(var c=[],e=0,d=0,f;el;++l)c[h[f]][l]=g[2*f+l];d=dg;g++)e.push(c[f][g])}catch(x){}this.uv=e;break;case "ByPolygon":switch(e){case "Direct":this.uv=this.parseUV_ByPolygon_Direct();break;case "IndexToDirect":this.uv=this.parseUV_ByPolygon_IndexToDirect()}}return this.uv};f.prototype.parseUV_ByPolygonVertex_Direct=function(a,b,c,d){return parse_Data_ByPolygonVertex_Direct(a, b,c,d)};f.prototype.parseUV_ByPolygonVertex_IndexToDirect=function(a,b){for(var c=[],e=0;ed;++d)c.push(a[2*b[e]+d]);return c};f.prototype.parseUV_ByPolygon_Direct=function(a){console.warn("not implemented");return a};f.prototype.parseUV_ByPolygon_IndexToDirect=function(a){console.warn("not implemented");return a};f.prototype.parseUV_ByVertex_Direct=function(a){console.warn("not implemented");return a};b.prototype.getNormal=function(a){this.node&&this.normal&&this.map&& this.ref||this._parseText(a);return this.normal};b.prototype.getMap=function(a){this.node&&this.normal&&this.map&&this.ref||this._parseText(a);return this.map};b.prototype.getRef=function(a){this.node&&this.normal&&this.map&&this.ref||this._parseText(a);return this.ref};b.prototype.getNode=function(a){return this.node?this.node:this.node=a.subNodes.LayerElementNormal};b.prototype._parseText=function(a){var b=this.getNode(a);if(void 0===b)console.warn("node: "+a.attrName+"("+a.id+") does not have LayerElementNormal"); else{a=b.properties.MappingInformationType;var c=b.properties.ReferenceInformationType;this.normal=toFloat(b.subNodes.Normals.properties.a.split(","));this.map=a;this.ref=c}};b.prototype.parse=function(a,b){var c=this.getNormal(a);this.getNode(a);var d=this.getMap(a),e=this.getRef(a),f=b.getPolygonVertexIndices(a),g=b.getPolygonTopologyArray(a);switch(d){case "ByPolygonVertex":switch(e){case "Direct":c=this.parseNormal_ByPolygonVertex_Direct(c,f,g,3);break;case "IndexToDirect":c=this.parseNormal_ByPolygonVertex_IndexToDirect()}break; case "ByPolygon":switch(e){case "Direct":c=this.parseNormal_ByPolygon_Direct();break;case "IndexToDirect":c=this.parseNormal_ByPolygon_IndexToDirect()}}return c};b.prototype.parseNormal_ByPolygonVertex_Direct=function(a,b,c,d){return parse_Data_ByPolygonVertex_Direct(a,b,c,d)};b.prototype.parseNormal_ByPolygonVertex_IndexToDirect=function(a){console.warn("not implemented");return a};b.prototype.parseNormal_ByPolygon_Direct=function(a){console.warn("not implemented");return a};b.prototype.parseNormal_ByPolygon_IndexToDirect= function(a){console.warn("not implemented");return a};b.prototype.parseNormal_ByVertex_Direct=function(a){console.warn("not implemented");return a};m.prototype.fromNode=function(a){this.internalId=this.id=a.id;this.times=a.subNodes.KeyTime.properties.a;this.values=a.subNodes.KeyValueFloat.properties.a;this.attrFlag=a.subNodes.KeyAttrFlags.properties.a;this.attrData=a.subNodes.KeyAttrDataFloat.properties.a;this.times=toFloat(this.times.split(","));this.values=toFloat(this.values.split(","));this.attrData= toFloat(this.attrData.split(","));this.attrFlag=toInt(this.attrFlag.split(","));this.times=this.times.map(function(a){return a/46186158E3});return this};m.prototype.getLength=function(){return this.times[this.times.length-1]};n.prototype.fromNode=function(a,b,c){this.id=b.id;this.attr=b.attrName;this.internalId=b.id;if(this.attr.match(/S|R|T/))for(var d in b.properties)d.match(/X/)&&(this.attrX=!0),d.match(/Y/)&&(this.attrY=!0),d.match(/Z/)&&(this.attrZ=!0);else return null;this.containerIndices= a.searchConnectionParent(this.id);this.curveIdx=a.searchConnectionChildren(this.id);for(a=this.containerIndices.length-1;0<=a&&!(b=c.searchRealId(this.containerIndices[a]),0<=b&&(this.containerBoneId=b,this.containerId=this.containerIndices[a]),0<=b);--a);return this};n.prototype.setCurve=function(a){this.curves.push(a)};l.prototype.parse=function(a,b){var c=a.Objects.subNodes.AnimationCurveNode,d=a.Objects.subNodes.AnimationCurve,e=[],f;for(f in c)if(f.match(/\d+/)){var g=(new n).fromNode(a,c[f], b);e.push(g)}c={};for(g=0;gA&&E.clearRect(aa.min.x|0,aa.max.y|0,aa.max.x-aa.min.x|0,aa.min.y-aa.max.y|0),0G.positionScreen.z||1O.positionScreen.z||1T.positionScreen.z||1=V||(V*=W.intensity,L.add(ca.multiplyScalar(V)))): W instanceof THREE.PointLight&&(U=Fa.setFromMatrixPosition(W.matrixWorld),V=R.dot(Fa.subVectors(U,I).normalize()),0>=V||(V*=0==W.distance?1:1-Math.min(I.distanceTo(U)/W.distance,1),0!=V&&(V*=W.intensity,L.add(ca.multiplyScalar(V)))));Y.multiply(da).add(fa);!0===H.wireframe?c(Y,H.wireframeLinewidth,H.wireframeLinecap,H.wireframeLinejoin):d(Y)}else H instanceof THREE.MeshBasicMaterial||H instanceof THREE.MeshLambertMaterial||H instanceof THREE.MeshPhongMaterial?null!==H.map?H.map.mapping===THREE.UVMapping&& (ha=J.uvs,a(M,S,Z,X,ja,ba,ha[0].x,ha[0].y,ha[1].x,ha[1].y,ha[2].x,ha[2].y,H.map)):null!==H.envMap?H.envMap.mapping===THREE.SphericalReflectionMapping&&(ea.copy(J.vertexNormalsModel[0]).applyMatrix3(Ba),ma=.5*ea.x+.5,oa=.5*ea.y+.5,ea.copy(J.vertexNormalsModel[1]).applyMatrix3(Ba),la=.5*ea.x+.5,na=.5*ea.y+.5,ea.copy(J.vertexNormalsModel[2]).applyMatrix3(Ba),va=.5*ea.x+.5,sa=.5*ea.y+.5,a(M,S,Z,X,ja,ba,ma,oa,la,na,va,sa,H.envMap)):(Y.copy(H.color),H.vertexColors===THREE.FaceColors&&Y.multiply(J.color), !0===H.wireframe?c(Y,H.wireframeLinewidth,H.wireframeLinecap,H.wireframeLinejoin):d(Y)):(H instanceof THREE.MeshNormalMaterial?(ea.copy(J.normalModel).applyMatrix3(Ba),Y.setRGB(ea.x,ea.y,ea.z).multiplyScalar(.5).addScalar(.5)):Y.setRGB(1,1,1),!0===H.wireframe?c(Y,H.wireframeLinewidth,H.wireframeLinecap,H.wireframeLinejoin):d(Y))}}aa.union(pa)}}E.setTransform(1,0,0,1,0,0)}}}; THREE.SoftwareRenderer=function(k){function c(){for(var a=h*q*4,b=0;bc;)h[d++]=Math.min(c*e/204,255),h[d++]=Math.min(c*f/204,255),h[d++]=Math.min(c*g/204,255),++c;for(;256>c;)h[d++]=Math.min(e+(c-204)*(255-e)/82,255),h[d++]=Math.min(f+(c-204)*(255-f)/82,255),h[d++]=Math.min(g+ (c-204)*(255-g)/82,255),++c}else for(;256>c;)h[d++]=Math.min(c*e/255,255),h[d++]=Math.min(c*f/255,255),h[d++]=Math.min(c*g/255,255),++c;return h}function g(a,b,c,d,f,g,h,l,k){h=4*c;l=e[k.map.id];if(l.data){var m=l.width,n=m-1;l=l.data;f=4*((g*m&n)*m+(f*m&n));if(k.transparent){g=l[f+1];m=l[f+2];n=l[f+3]*k.opacity/255;var p=a[h+1],q=a[h+2];a[h]=l[f]*n+a[h]*(1-n);a[h+1]=g*n+p*(1-n);a[h+2]=m*n+q*(1-n);a[h+3]=(k.opacity<<8)-1;255==a[h+3]&&(b[c]=d)}else a[h]=l[f],a[h+1]=l[f+1],a[h+2]=l[f+2],a[h+3]=(k.opacity<< 8)-1,b[c]=d}}function a(a,b,c,d,f,g,h,l,k){l=4*c;var m=e[k.map.id];if(m.data){var n=m.width;h=3*(0>8,a[l+1]=k.palette[h+1]*m[f+1]>>8,a[l+2]=k.palette[h+2]*m[f+2]>>8,a[l+3]=(k.opacity<<8)-1, b[c]=d}}function f(a){a=a.target;a.removeEventListener("update",f);delete p[a.id]}function b(b){var c=b.id,h=p[c];h&&b.map&&!e[b.map.id]&&delete p[c];if(void 0===p[c]){b.addEventListener("update",f);if(b instanceof THREE.MeshBasicMaterial||b instanceof THREE.MeshLambertMaterial||b instanceof THREE.MeshPhongMaterial||b instanceof THREE.SpriteMaterial)if(b instanceof THREE.MeshLambertMaterial?b.palette||(b.palette=d(b,!1)):b instanceof THREE.MeshPhongMaterial&&!b.palette&&(b.palette=d(b,!0)),b.map){h= new THREE.SoftwareRenderer.Texture;h.fromImage(b.map.image);if(!h.data)return;e[b.map.id]=h;h=b instanceof THREE.MeshBasicMaterial||b instanceof THREE.SpriteMaterial?g:a}else b=b.vertexColors===THREE.FaceColors?"var colorOffset = offset * 4;\nbuffer[ colorOffset ] = face.color.r * 255;\nbuffer[ colorOffset + 1 ] = face.color.g * 255;\nbuffer[ colorOffset + 2 ] = face.color.b * 255;\nbuffer[ colorOffset + 3 ] = material.opacity * 255;\ndepthBuf[ offset ] = depth;":"var colorOffset = offset * 4;\nbuffer[ colorOffset ] = material.color.r * 255;\nbuffer[ colorOffset + 1 ] = material.color.g * 255;\nbuffer[ colorOffset + 2 ] = material.color.b * 255;\nbuffer[ colorOffset + 3 ] = material.opacity * 255;\ndepthBuf[ offset ] = depth;", h=new Function("buffer, depthBuf, offset, depth, u, v, n, face, material",b);else h=b instanceof THREE.LineBasicMaterial?new Function("buffer, depthBuf, offset, depth, color1, color2, material","var colorOffset = offset * 4;\nbuffer[ colorOffset ] = material.color.r * (color1.r+color2.r) * 0.5 * 255;\nbuffer[ colorOffset + 1 ] = material.color.g * (color1.g+color2.g) * 0.5 * 255;\nbuffer[ colorOffset + 2 ] = material.color.b * (color1.b+color2.b) * 0.5 * 255;\nbuffer[ colorOffset + 3 ] = 255;\ndepthBuf[ offset ] = depth;"): new Function("buffer, depthBuf, offset, depth, u, v, n, face, material","var colorOffset = offset * 4;\nbuffer[ colorOffset ] = u * 255;\nbuffer[ colorOffset + 1 ] = v * 255;\nbuffer[ colorOffset + 2 ] = 0;\nbuffer[ colorOffset + 3 ] = 255;\ndepthBuf[ offset ] = depth;");p[c]=h}return h}function m(a,b,c,d,e,f,g,l,k){if(!(-1>a.z||1b.z||1c.z||1>4,0),Sb=Math.min(Math.max(p,r,t)+15>>4,h),Eb=Math.max(Math.min(G,F,M)+15>>4,0),ac=Math.min(Math.max(G,F,M)+15>>4,q);y=Math.min($a,y);V=Math.max(Sb,V);J=Math.min(Eb,J);U=Math.max(ac,U);var ra=A;$a&=~(ra-1);Eb&=~(ra-1);var Wa=$a<<4,Xa=Eb<<4,Fb=ua*(Wa-p)+xa*(Xa-G),Gb=Ha*(Wa-r)+La*(Xa-F),Hb=ya*(Wa-t)+Aa*(Xa-M);(0>4;Gb=Gb-1>>4;Hb=Hb-1>>4;var bc=aa-ja,cc=na-aa,Na=1/(xa*ya-Aa*ua),Ja=Na*(bc*ya-cc*ua),Ka=Na*(bc*Aa-xa*cc),vc=aa+(Wa-p)*Ja+(Xa-G)*Ka|0;Ja=16*Ja|0;Ka=16*Ka|0;if(Y){var dc=pa-oa,ec=la-pa,fb=Na*(dc*ya-ec*ua),gb=Na*(dc*Aa-xa*ec),fc=va-sa,gc=Sa-va;var hb=Na*(fc*ya-gc*ua);var ib=Na*(fc*Aa-xa*gc);var jb=pa+(Wa-p)*fb+(Xa-G)*gb;var kb=va+(Wa-p)*hb+(Xa-G)*ib;fb*=16;gb*=16;hb*=16;ib*=16}if(O){var hc=Rb-tc,ic=uc-Rb,lb=Na*(hc*ya-ic* ua);var mb=Na*(hc*Aa-xa*ic);var nb=Rb+(Wa-p)*lb+(Xa-G)*mb;lb*=16;mb*=16}var ta=ra-1,Tb=0,Ib=0,Ub=0,Jb=0,Vb=0,Kb=0,Wb=0,Xb=0;0<=xa?Ib-=ta*xa:Tb-=ta*xa;0<=ua?Ib-=ta*ua:Tb-=ta*ua;0<=La?Jb-=ta*La:Ub-=ta*La;0<=Ha?Jb-=ta*Ha:Ub-=ta*Ha;0<=Aa?Kb-=ta*Aa:Vb-=ta*Aa;0<=ya?Kb-=ta*ya:Vb-=ta*ya;0<=Ja?Xb+=ta*Ja:Wb+=ta*Ja;0<=Ka?Xb+=ta*Ka:Wb+=ta*Ka;var jc=h-ra,Oa=Fb,Pa=Gb,Ya=Hb,Za=vc,Ga=-ra,ob=Ga*ua,pb=Ga*Ha,qb=Ga*ya,Lb=Ga*Ja;if(Y){var Mb=Ga*fb;var Nb=Ga*hb}var rb;O&&(rb=Ga*lb);for(var Qa=$a,Ob=Eb;Ob= $a&&Qa=Ib&&Pa>=Jb&&Ya>=Kb;)Qa+=Ga,Oa+=ob,Pa+=pb,Ya+=qb,Za+=Lb,Y&&(jb+=Mb,kb+=Nb),O&&(nb+=rb);Ga=-Ga;ob=-ob;pb=-pb;qb=-qb;Lb=-Lb;Y&&(Mb=-Mb,Nb=-Nb);for(O&&(rb=-rb);;){Qa+=Ga;Oa+=ob;Pa+=pb;Ya+=qb;Za+=Lb;Y&&(jb+=Mb,kb+=Nb);O&&(nb+=rb);if(Qa<$a||Qa>=Sb)break;if(Oaob)break;else continue;if(Papb)break;else continue;if(Yaqb)break;else continue;var kc=Qa>>I,lc=Ob>>I,sb=kc+lc*u;if(!(H[sb]=Tb&&Pa>=Ub&&Ya>= Vb){H[sb]=Math.min(H[sb],Za+Xb);var tb=Oa,ub=Pa,vb=Za;if(Y){var wb=jb;var xb=kb}var bb;O&&(bb=nb);for(var yb=0;ybka.z||1ha.z||1>4,h);var Da=Math.max(Math.min(la,oa)+15>>4,0);var za=Math.min(Math.max(la,oa)+15>>4,q);ka=Math.max(Math.min(qa,ha)+15>>4,0);la=Math.max(qa,ha)+15>>4;y=Math.min(Math.max(Math.min(ea,ma)+15>>4,0),y);V=Math.max(Ca,V);J=Math.min(Da,J);U=Math.max(za, U);ea=Math.sqrt(Ma*Ma+Ia*Ia);Ia/=ea;Ma/=ea;Da=(qa-ha)/ea;W.set(Ia,Ma,Da);W.cross(L);for(W.normalize();0>4;qa=qa+15>>4;za=za+15>>4;for(var Va=-ca;Va<=ca;++Va){var Ea=Math.floor(Ca+W.x*Va);var wa=Math.floor(qa+W.y*Va);if(!(y>=Ea||V<=Ea||J>=wa||U<=wa)){var Yb=Ea>>I,Zb=wa>>I,db=Yb+Zb*u;if(!(H[db]=c.width||0>=c.height)){void 0===k&&(k=document.createElement("canvas"));var d=c.width>c.height?c.width:c.height;d=THREE.Math.nextPowerOfTwo(d);if(k.width!=d||k.height!=d)k.width=d,k.height=d;var g=k.getContext("2d");g.clearRect(0,0,d,d);g.drawImage(c,0,0,d,d);this.data=g.getImageData(0,0,d,d).data;this.height=this.width=d;this.srcUrl=c.src}}}; THREE.RenderableObject=function(){this.id=0;this.object=null;this.renderOrder=this.z=0}; THREE.RenderableFace=function(){this.id=0;this.v1=new THREE.RenderableVertex;this.v2=new THREE.RenderableVertex;this.v3=new THREE.RenderableVertex;this.normalModel=new THREE.Vector3;this.vertexNormalsModel=[new THREE.Vector3,new THREE.Vector3,new THREE.Vector3];this.vertexNormalsLength=0;this.color=new THREE.Color;this.material=null;this.uvs=[new THREE.Vector2,new THREE.Vector2,new THREE.Vector2];this.renderOrder=this.z=0}; THREE.RenderableVertex=function(){this.position=new THREE.Vector3;this.positionWorld=new THREE.Vector3;this.positionScreen=new THREE.Vector4;this.visible=!0};THREE.RenderableVertex.prototype.copy=function(k){this.positionWorld.copy(k.positionWorld);this.positionScreen.copy(k.positionScreen)};THREE.RenderableLine=function(){this.id=0;this.v1=new THREE.RenderableVertex;this.v2=new THREE.RenderableVertex;this.vertexColors=[new THREE.Color,new THREE.Color];this.material=null;this.renderOrder=this.z=0}; THREE.RenderableSprite=function(){this.id=0;this.object=null;this.rotation=this.z=this.y=this.x=0;this.scale=new THREE.Vector2;this.material=null;this.renderOrder=0}; THREE.Projector=function(){function k(){if(p===h){var a=new THREE.RenderableVertex;e.push(a);h++;p++;return a}return e[p++]}function c(){if(u===w){var a=new THREE.RenderableFace;t.push(a);w++;u++;return a}return t[u++]}function d(){if(z===x){var a=new THREE.RenderableLine;C.push(a);x++;z++;return a}return C[z++]}function g(){if(F===B){var a=new THREE.RenderableSprite;K.push(a);B++;F++;return a}return K[F++]}function a(a,b){return a.renderOrder!==b.renderOrder?a.renderOrder-b.renderOrder:a.z!==b.z? b.z-a.z:a.id!==b.id?a.id-b.id:0}function f(a,b){var c=0,d=1,e=a.z+a.w,f=b.z+b.w,g=-a.z+a.w,h=-b.z+b.w;if(0<=e&&0<=f&&0<=g&&0<=h)return!0;if(0>e&&0>f||0>g&&0>h)return!1;0>e?c=Math.max(c,e/(e-f)):0>f&&(d=Math.min(d,e/(e-f)));0>g?c=Math.max(c,g/(g-h)):0>h&&(d=Math.min(d,g/(g-h)));if(d=c.x&&-1<=c.y&&1>=c.y&&-1<=c.z&&1>=c.z}function b(a,b,c){if(!0===a.visible||!0===b.visible||!0===c.visible)return!0;A[0]=a.positionScreen;A[1]=b.positionScreen;A[2]=c.positionScreen;return E.intersectsBox(I.setFromPoints(A))}function f(a,b,c){return 0>(c.positionScreen.x-a.positionScreen.x)*(b.positionScreen.y-a.positionScreen.y)- (c.positionScreen.y-a.positionScreen.y)*(b.positionScreen.x-a.positionScreen.x)}var g=[],h=[],l=null,m=null,p=new THREE.Matrix3;return{setObject:function(a){l=a;m=l.material;p.getNormalMatrix(l.matrixWorld);g.length=0;h.length=0},projectVertex:a,checkTriangleVisibility:b,checkBackfaceCulling:f,pushVertex:function(b,c,d){r=k();r.position.set(b,c,d);a(r)},pushNormal:function(a,b,c){g.push(a,b,c)},pushUv:function(a,b){h.push(a,b)},pushLine:function(a,b){var c=e[a],f=e[b];v=d();v.id=l.id;v.v1.copy(c); v.v2.copy(f);v.z=(c.positionScreen.z+f.positionScreen.z)/2;v.renderOrder=l.renderOrder;v.material=l.material;P.elements.push(v)},pushTriangle:function(a,d,k){var n=e[a],r=e[d],t=e[k];if(!1!==b(n,r,t)&&(m.side===THREE.DoubleSide||!0===f(n,r,t))){q=c();q.id=l.id;q.v1.copy(n);q.v2.copy(r);q.v3.copy(t);q.z=(n.positionScreen.z+r.positionScreen.z+t.positionScreen.z)/3;q.renderOrder=l.renderOrder;q.normalModel.fromArray(g,3*a);q.normalModel.applyMatrix3(p).normalize();for(n=0;3>n;n++)r=q.vertexNormalsModel[n], r.fromArray(g,3*arguments[n]),r.applyMatrix3(p).normalize(),q.uvs[n].fromArray(h,2*arguments[n]);q.vertexNormalsLength=3;q.material=l.material;P.elements.push(q)}}}};this.projectScene=function(h,r,t,x){F=z=u=0;P.elements.length=0;!0===h.autoUpdate&&h.updateMatrixWorld();null===r.parent&&r.updateMatrixWorld();N.copy(r.matrixWorldInverse.getInverse(r.matrixWorld));L.multiplyMatrices(r.projectionMatrix,N);V.setFromMatrix(L);m=0;P.objects.length=0;P.lights.length=0;h.traverseVisible(function(a){if(a instanceof THREE.Light)P.lights.push(a);else if((a instanceof THREE.Mesh||a instanceof THREE.Line||a instanceof THREE.Sprite)&&!1!==a.material.visible&&(!1===a.frustumCulled||!0===V.intersectsObject(a))){if(m===l){var c=new THREE.RenderableObject;n.push(c);l++;m++;b=c}else b=n[m++];b.id=a.id;b.object=a;Q.setFromMatrixPosition(a.matrixWorld);Q.applyProjection(L);b.z=Q.z;b.renderOrder=a.renderOrder;P.objects.push(b)}});!0===t&&P.objects.sort(a);h=0;for(t=P.objects.length;hna;na++)q.uvs[na].copy(la[na]);q.color= S.color;q.material=B;q.z=(A.positionScreen.z+T.positionScreen.z+oa.positionScreen.z)/3;q.renderOrder=w.renderOrder;P.elements.push(q)}}}else if(w instanceof THREE.Line)if(A instanceof THREE.BufferGeometry){if(C=A.attributes,void 0!==C.position){B=C.position.array;E=0;for(I=B.length;E=H.z&&(D=g(),D.id=w.id,D.x=H.x*E,D.y=H.y*E,D.z=H.z,D.renderOrder=w.renderOrder,D.object=w,D.rotation=w.rotation,D.scale.x=w.scale.x*Math.abs(D.x-(H.x+r.projectionMatrix.elements[0])/ (H.w+r.projectionMatrix.elements[12])),D.scale.y=w.scale.y*Math.abs(D.y-(H.y+r.projectionMatrix.elements[5])/(H.w+r.projectionMatrix.elements[13])),D.material=w.material,P.elements.push(D)))}!0===x&&P.elements.sort(a);return P}};THREE.OBJLoader=function(k){this.manager=void 0!==k?k:THREE.DefaultLoadingManager;this.materials=null}; THREE.OBJLoader.prototype={constructor:THREE.OBJLoader,load:function(k,c,d,g){var a=this,f=new THREE.XHRLoader(a.manager);f.setPath(this.path);f.load(k,function(b){c(a.parse(b))},d,g)},setPath:function(k){this.path=k},setMaterials:function(k){this.materials=k},parse:function(k){function c(a){P={name:a,geometry:{vertices:[],normals:[],uvs:[]},material:{name:"",smooth:!0}};l.push(P)}function d(a){a=parseInt(a);return 3*(0<=a?a-1:a+p.length/3)}function g(a){a=parseInt(a);return 3*(0<=a?a-1:a+e.length/ 3)}function a(a){a=parseInt(a);return 2*(0<=a?a-1:a+h.length/2)}function f(a,b,c){P.geometry.vertices.push(p[a],p[a+1],p[a+2],p[b],p[b+1],p[b+2],p[c],p[c+1],p[c+2])}function b(a,b,c){P.geometry.normals.push(e[a],e[a+1],e[a+2],e[b],e[b+1],e[b+2],e[c],e[c+1],e[c+2])}function m(a,b,c){P.geometry.uvs.push(h[a],h[a+1],h[b],h[b+1],h[c],h[c+1])}function n(c,e,h,l,k,p,n,q,r,t,u,v){c=d(c);e=d(e);h=d(h);if(void 0===l)f(c,e,h);else{var w=d(l);f(c,e,w);f(e,h,w)}void 0!==k&&(c=a(k),e=a(p),h=a(n),void 0===l?m(c, e,h):(w=a(q),m(c,e,w),m(e,h,w)));void 0!==r&&(c=g(r),e=g(t),h=g(u),void 0===l?b(c,e,h):(w=g(v),b(c,e,w),b(e,h,w)))}console.time("OBJLoader");var l=[],r=!1,p=[],e=[],h=[];c("");var q=/^v\s+([\d|\.|\+|\-|e|E]+)\s+([\d|\.|\+|\-|e|E]+)\s+([\d|\.|\+|\-|e|E]+)/,u=/^vn\s+([\d|\.|\+|\-|e|E]+)\s+([\d|\.|\+|\-|e|E]+)\s+([\d|\.|\+|\-|e|E]+)/,t=/^vt\s+([\d|\.|\+|\-|e|E]+)\s+([\d|\.|\+|\-|e|E]+)/,w=/^f\s+(-?\d+)\s+(-?\d+)\s+(-?\d+)(?:\s+(-?\d+))?/,v=/^f\s+((-?\d+)\/(-?\d+))\s+((-?\d+)\/(-?\d+))\s+((-?\d+)\/(-?\d+))(?:\s+((-?\d+)\/(-?\d+)))?/, z=/^f\s+((-?\d+)\/(-?\d+)\/(-?\d+))\s+((-?\d+)\/(-?\d+)\/(-?\d+))\s+((-?\d+)\/(-?\d+)\/(-?\d+))(?:\s+((-?\d+)\/(-?\d+)\/(-?\d+)))?/,C=/^f\s+((-?\d+)\/\/(-?\d+))\s+((-?\d+)\/\/(-?\d+))\s+((-?\d+)\/\/(-?\d+))(?:\s+((-?\d+)\/\/(-?\d+)))?/,x=/^[og]\s*(.+)?/,D=/^s\s+(\d+|on|off)/,F=k.split("\n");for(k=0;kl;l++){var k=s_oSpriteLibrary.getSprite("level_"+g+"_bg_"+l),r=createBitmap(k);e+=k.width;0===l%6&&(e=0,0!==l&&(h+=k.height));r.x=e;r.y=h;a.addChild(r)}a.regX=2400;a.regY=1452;null!==CAUSTICS_POS[c]&&(k=s_oSpriteLibrary.getSprite("caustics"),g=k.width/5,e=k.height/2,k=new createjs.SpriteSheet({framerate:FPS/3,images:[k], frames:{width:g,height:e,regX:g/2,regY:e/2},animations:{idle:[0,9]}}),k=createSprite(k,"idle",g/2,e/2,g,e),k.x=CAUSTICS_POS[c].x+2400,k.y=CAUSTICS_POS[c].y+1452,k.scaleX=k.scaleY=CAUSTICS_POS[c].scale,a.addChild(k));b=a.on("mousedown",this._startPan);m=a.on("pressmove",this._movePan);n=a.on("pressup",this._endPan)};this.unload=function(){a.off("mousedown",b);a.off("pressmove",m);a.off("pressup",n);c.removeChild(a)};this._startPan=function(a){d=a.stageX;g=a.stageY;s_oInterface.setCenterBallViewVisible(!0)}; this._movePan=function(a){var b=a.stageX;a=a.stageY;var c=2*(b-d),e=2*(a-g);d=b;g=a;s_oGame.setPanPoint(c,e)};this._endPan=function(a){};this.setPos=function(b,c){a.x=b;a.y=c};this.getPos=function(){return{x:a.x,y:a.y}};this.getSize=function(){return f};this._init(k,c)} function CMsgBox(k,c){var d,g,a,f;this._init=function(b){f=new createjs.Container;m.addChild(f);var c=new createjs.Shape;c.graphics.beginFill("black").drawRect(0,0,CANVAS_WIDTH,CANVAS_HEIGHT);c.alpha=.5;c.on("click",function(){});f.addChild(c);c=s_oSpriteLibrary.getSprite("msg_box");var k=createBitmap(c);k.x=.5*CANVAS_WIDTH;k.y=.5*CANVAS_HEIGHT;k.regX=.5*c.width;k.regY=.5*c.height;f.addChild(k);d=new createjs.Text(b,"23px "+PRIMARY_FONT,"#000");d.x=CANVAS_WIDTH/2;d.y=260;d.textAlign="center";d.textBaseline= "middle";d.lineWidth=790;d.outline=2;f.addChild(d);g=new createjs.Text(d.text,"23px "+PRIMARY_FONT,"#ffd800");g.x=d.x;g.y=d.y;g.textAlign="center";g.textBaseline="middle";g.lineWidth=790;f.addChild(g);a=new CGfxButton(CANVAS_WIDTH/2,650,s_oSpriteLibrary.getSprite("but_yes"),f);a.addEventListener(ON_MOUSE_UP,this._onButOk,this)};this._onButOk=function(){b.unload()};this.unload=function(){a.unload();m.removeChild(f)};var b=this;var m=c;this._init(k)};