From 44d5c28dee36305ec6c909e6a2f054487a4ee66e Mon Sep 17 00:00:00 2001 From: sgalban Date: Tue, 30 Apr 2019 02:35:25 -0400 Subject: [PATCH] Fixed checkpoint height I know that the deadline has already passed, but I found one of the tinest possible mistakes, and I wouldn't be able to go to sleep tonight knowing that it's there in the repo. --- dist/bundle.js | 4 ++-- dist/bundle.js.map | 2 +- src/LevelGenerator/GeometryGenerator.ts | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/dist/bundle.js b/dist/bundle.js index 6514593..9934753 100644 --- a/dist/bundle.js +++ b/dist/bundle.js @@ -9277,13 +9277,13 @@ class GeometryGenerator { if (lastRest) { new _scene_Gem__WEBPACK_IMPORTED_MODULE_6__["default"]([ Math.floor(this.currentPos[0] - length / 2), - this.currentPos[1] + 1 + this.currentPos[1] + 2 ]); } else { new _scene_Checkpoint__WEBPACK_IMPORTED_MODULE_5__["default"]([ Math.floor(this.currentPos[0] - length / 2), - this.currentPos[1] + 2 + this.currentPos[1] + 1 ]); } } diff --git a/dist/bundle.js.map b/dist/bundle.js.map index 36144ee..ba49fd9 100644 --- a/dist/bundle.js.map +++ b/dist/bundle.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/main.ts","webpack:///./node_modules/stats-js/build/stats.min.js","webpack:///./src/globals.ts","webpack:///./src/rendering/gl/OpenGLRenderer.ts","webpack:///./node_modules/gl-matrix/lib/gl-matrix.js","webpack:///./node_modules/gl-matrix/lib/gl-matrix/common.js","webpack:///./node_modules/gl-matrix/lib/gl-matrix/mat2.js","webpack:///./node_modules/gl-matrix/lib/gl-matrix/mat2d.js","webpack:///./node_modules/gl-matrix/lib/gl-matrix/mat3.js","webpack:///./node_modules/gl-matrix/lib/gl-matrix/mat4.js","webpack:///./node_modules/gl-matrix/lib/gl-matrix/quat.js","webpack:///./node_modules/gl-matrix/lib/gl-matrix/vec3.js","webpack:///./node_modules/gl-matrix/lib/gl-matrix/vec4.js","webpack:///./node_modules/gl-matrix/lib/gl-matrix/quat2.js","webpack:///./node_modules/gl-matrix/lib/gl-matrix/vec2.js","webpack:///./src/engine/GameEngine.ts","webpack:///./src/scene/Terrain.ts","webpack:///./src/scene/SceneAttributes.ts","webpack:///./src/constants.ts","webpack:///./src/geometry/Tile.ts","webpack:///./src/rendering/gl/Drawable.ts","webpack:///./src/geometry/Background.ts","webpack:///./src/Camera.ts","webpack:///./src/rendering/gl/ShaderProgram.ts","webpack:///./src/rendering/Texture2D.ts","webpack:///./src/LevelGenerator/LevelGenerator.ts","webpack:///./src/LevelGenerator/RhythmGroupGenerator.ts","webpack:///./src/LevelGenerator/RhythmGroup.ts","webpack:///./src/LevelGenerator/GeometryGenerator.ts","webpack:///./src/scene/Spike.ts","webpack:///./src/engine/GameObject.ts","webpack:///./src/scene/Coin.ts","webpack:///./src/scene/Particle.ts","webpack:///./src/scene/Checkpoint.ts","webpack:///./src/scene/Gem.ts","webpack:///./src/scene/Baddie.ts","webpack:///./src/assets/sprites.png","webpack:///./src/assets/backgrounds.png","webpack:///./src/shaders/tile-vert.glsl","webpack:///./src/shaders/tile-frag.glsl","webpack:///./src/shaders/background-vert.glsl","webpack:///./src/shaders/background-frag.glsl","webpack:///./src/scene/Player.ts"],"names":[],"mappings":"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B;AACO;AACP,gBAAgB,qDAAmB;AACnC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,aAAa,OAAO;AACpB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,aAAa,OAAO;AACpB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,aAAa,OAAO;AACpB;AACO;AACP;AACA;;AAEA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,QAAQ;AACrB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,QAAQ;AACrB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,kDAAgB,qEAAqE,kDAAgB,qEAAqE,kDAAgB,qEAAqE,kDAAgB;AAC7S;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAc;AACd;AACA;AACO;;AAEP;AACA,cAAc;AACd;AACA;AACO,mB;;;;;;;ACjbP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAwC;;AAExC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,MAAM;AACnB;AACO;AACP,gBAAgB,qDAAmB;AACnC,MAAM,qDAAmB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,aAAa,MAAM;AACnB;AACO;AACP,gBAAgB,qDAAmB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACO;AACP,gBAAgB,qDAAmB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,aAAa,OAAO;AACpB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,WAAW,KAAK;AAChB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,WAAW,KAAK;AAChB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,KAAK;AAChB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,KAAK;AAChB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,aAAa,OAAO;AACpB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,aAAa,OAAO;AACpB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,aAAa,QAAQ;AACrB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,aAAa,QAAQ;AACrB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,kDAAgB,qEAAqE,kDAAgB,qEAAqE,kDAAgB,qEAAqE,kDAAgB,qEAAqE,kDAAgB,qEAAqE,kDAAgB;AACvd;;AAEA;AACA,cAAc;AACd;AACA;AACO;;AAEP;AACA,cAAc;AACd;AACA;AACO,mB;;;;;;;ACneP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAwC;;AAExC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,KAAK;AAClB;AACO;AACP,gBAAgB,qDAAmB;AACnC,MAAM,qDAAmB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP,gBAAgB,qDAAmB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP,gBAAgB,qDAAmB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,aAAa,OAAO;AACpB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,MAAM;AACjB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU,KAAK;AACf,UAAU,KAAK;AACf;AACA,YAAY,KAAK;AACjB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,UAAU,KAAK;AACf,UAAU,KAAK;AACf;AACA,YAAY,KAAK;AACjB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,aAAa,OAAO;AACpB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,aAAa,OAAO;AACpB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,QAAQ;AACrB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,QAAQ;AACrB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,kDAAgB,qEAAqE,kDAAgB,qEAAqE,kDAAgB,qEAAqE,kDAAgB,qEAAqE,kDAAgB,qEAAqE,kDAAgB,qEAAqE,kDAAgB,qEAAqE,kDAAgB,qEAAqE,kDAAgB;AACttB;;AAEA;AACA,cAAc;AACd;AACA;AACO;;AAEP;AACA,cAAc;AACd;AACA;AACO,mB;;;;;;;ACzyBP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAwC;;AAExC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,KAAK;AAClB;AACO;AACP,gBAAgB,qDAAmB;AACnC,MAAM,qDAAmB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP,gBAAgB,qDAAmB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP,gBAAgB,qDAAmB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,aAAa,OAAO;AACpB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,YAAY,UAAU,UAAU;AAChC;AACA;AACA;AACA;;AAEA,YAAY,UAAU,WAAW;AACjC;AACA;AACA;AACA;;AAEA,aAAa,WAAW,WAAW;AACnC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,eAAe,WAAW,WAAW;AACrC,eAAe,WAAW,WAAW;AACrC,eAAe,WAAW,YAAY;;AAEtC,iBAAiB,aAAa,aAAa;AAC3C,iBAAiB,aAAa,aAAa;AAC3C,iBAAiB,aAAa,cAAc;;AAE5C;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,YAAY,kDAAgB;AAC5B;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,aAAa,WAAW,WAAW;AACnC,aAAa,WAAW,WAAW;AACnC,aAAa,WAAW,YAAY;;AAEpC;AACA,sBAAsB,wBAAwB;AAC9C,0BAA0B,oBAAoB;AAC9C,0BAA0B,wBAAwB;;AAElD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,YAAY,kDAAgB;AAC5B;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,MAAM;AACjB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,MAAM;AACjB,aAAa,KAAK;AAClB;AACO;AACP,wBAAwB,qDAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB;AACO;AACP;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,YAAY,KAAK;AACjB;AACO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,MAAM;AACjB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,MAAM;AACjB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB;AACA,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iCAAiC,kDAAgB,+BAA+B,kDAAgB,+BAA+B,kDAAgB;AAC/I;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,aAAa,OAAO;AACpB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,aAAa,OAAO;AACpB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,QAAQ;AACrB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,QAAQ;AACrB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,8BAA8B,kDAAgB,qEAAqE,kDAAgB,qEAAqE,kDAAgB,qEAAqE,kDAAgB,qEAAqE,kDAAgB,qEAAqE,kDAAgB,qEAAqE,kDAAgB,qEAAqE,kDAAgB,qEAAqE,kDAAgB,qEAAqE,kDAAgB,uEAAuE,kDAAgB,yEAAyE,kDAAgB,yEAAyE,kDAAgB,yEAAyE,kDAAgB,yEAAyE,kDAAgB,yEAAyE,kDAAgB;AAC/zC;;AAEA;AACA,cAAc;AACd;AACA;AACO;;AAEP;AACA,cAAc;AACd;AACA;AACO,mB;;;;;;;AChzDP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAwC;AACN;AACA;AACA;;AAElC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,KAAK;AAClB;AACO;AACP,gBAAgB,qDAAmB;AACnC,MAAM,qDAAmB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB,YAAY,OAAO;AACnB;AACO;AACP;AACA;AACA,UAAU,kDAAgB;AAC1B;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,kDAAgB;AACpC;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA,WAAW,iDAAe;AAC1B,WAAW,iDAAe;AAC1B,WAAW,iDAAe;;AAE1B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACA;AACO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA,oCAAoC;AACpC;AACA,wBAAwB;AACxB;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,EAAE;AACb,WAAW,EAAE;AACb,WAAW,EAAE;AACb,aAAa,KAAK;AAClB;AACA;AACO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,aAAa,OAAO;AACpB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACA;AACO,YAAY,8CAAU;;AAE7B;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACA;AACO,iBAAiB,mDAAe;;AAEvC;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACA;AACO,WAAW,6CAAS;;AAE3B;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACA;AACO,UAAU,4CAAQ;;AAEzB;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WA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,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,OAAO;AACpB;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,OAAO;AACpB;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,aAAa,OAAO;AACpB;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,OAAO;AACpB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;;AAEA,UAAU,iDAAe;AACzB,UAAU,iDAAe;AACzB;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,OAAO;AACpB;AACO;AACP;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,aAAa,OAAO;AACpB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,QAAQ;AACrB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,QAAQ;AACrB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,kDAAgB,qEAAqE,kDAAgB,qEAAqE,kDAAgB;AACxN;;AAEA;AACA,cAAc;AACd;AACA;AACO;;AAEP;AACA,cAAc;AACd;AACA;AACO;;AAEP;AACA,cAAc;AACd;AACA;AACO;;AAEP;AACA,cAAc;AACd;AACA;AACO;;AAEP;AACA,cAAc;AACd;AACA;AACO;;AAEP;AACA,cAAc;AACd;AACA;AACO;;AAEP;AACA,cAAc;AACd;AACA;AACO;;AAEP;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;;AAEA,oBAAoB,OAAO;AAC3B,oBAAoB,kBAAkB;AACtC;AACA,oBAAoB,kBAAkB;AACtC;;AAEA;AACA;AACA,CAAC,G;;;;;;;AClxBD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAwC;;AAExC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,KAAK;AAClB;AACO;AACP,gBAAgB,qDAAmB;AACnC,MAAM,qDAAmB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP,gBAAgB,qDAAmB;AACnC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP,gBAAgB,qDAAmB;AACnC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,OAAO;AACpB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,OAAO;AACpB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,aAAa,OAAO;AACpB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,aAAa,OAAO;AACpB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,OAAO;AACpB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,iDAAe;AACxB,SAAS,iDAAe;AACxB;AACA,GAAG;AACH;AACA,SAAS,iDAAe;AACxB,SAAS,iDAAe;AACxB;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,aAAa,OAAO;AACpB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,QAAQ;AACrB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,QAAQ;AACrB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,kDAAgB,qEAAqE,kDAAgB,qEAAqE,kDAAgB,qEAAqE,kDAAgB;AAC7S;;AAEA;AACA,cAAc;AACd;AACA;AACO;;AAEP;AACA,cAAc;AACd;AACA;AACO;;AAEP;AACA,cAAc;AACd;AACA;AACO;;AAEP;AACA,cAAc;AACd;AACA;AACO;;AAEP;AACA,cAAc;AACd;AACA;AACO;;AAEP;AACA,cAAc;AACd;AACA;AACO;;AAEP;AACA,cAAc;AACd;AACA;AACO;;AAEP;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;;AAEA,oBAAoB,OAAO;AAC3B,oBAAoB,kBAAkB,kBAAkB;AACxD;AACA,oBAAoB,kBAAkB,kBAAkB;AACxD;;AAEA;AACA;AACA,CAAC,G;;;;;;;ACrmBD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAwC;AACN;AACA;;AAElC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,MAAM;AACnB;AACO;AACP,eAAe,qDAAmB;AAClC,MAAM,qDAAmB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,aAAa,MAAM;AACnB;AACA;AACO;AACP,eAAe,qDAAmB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACO;AACP,eAAe,qDAAmB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACO;AACP,eAAe,qDAAmB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,MAAM;AACnB;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,KAAK;AAChB,aAAa,MAAM;AACnB;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,KAAK;AAChB,aAAa,MAAM;AACnB;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,KAAK;AAChB,aAAa,MAAM;AACnB;AACA;AACO;AACP;AACA,cAAc,+CAAW;AACzB,EAAE,oDAAgB;AAClB,cAAc,qDAAmB;AACjC,EAAE,uDAAmB;AACrB;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,aAAa,MAAM;AACnB;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAY,KAAK;AACjB,YAAY,MAAM;AAClB,YAAY,KAAK;AACjB;AACO,cAAc,6CAAS;;AAE9B;AACA;AACA,YAAY,KAAK;AACjB,YAAY,MAAM;AAClB,YAAY,KAAK;AACjB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,KAAK;AAChB,aAAa,MAAM;AACnB;AACA;AACO,cAAc,6CAAS;;AAE9B;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,KAAK;AAChB,aAAa,MAAM;AACnB;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAY,KAAK;AACjB,YAAY,MAAM;AAClB,YAAY,KAAK;AACjB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,WAAW,KAAK;AAChB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,gDAAY;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,gDAAY;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,gDAAY;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,WAAW,KAAK;AAChB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,KAAK;AAChB,WAAW,MAAM;AACjB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACO;AACP;AACA,sBAAsB,kDAAgB;AACtC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,aAAa,MAAM;AACnB;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAc;AACd;AACA;AACO;;AAEP;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,aAAa,OAAO;AACpB;AACA;AACO,UAAU,4CAAQ;;AAEzB;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,aAAa,OAAO;AACpB;AACA;AACO,aAAa,+CAAW;;AAE/B;AACA,cAAc;AACd;AACA;AACO;;AAEP;AACA;AACA;AACA,WAAW,MAAM;AACjB,aAAa,OAAO;AACpB;AACA;AACO,oBAAoB,sDAAkB;;AAE7C;AACA,cAAc;AACd;AACA;AACO;;AAEP;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,aAAa,MAAM;AACnB;AACA;AACO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,aAAa,OAAO;AACpB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,aAAa,QAAQ;AACrB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,aAAa,QAAQ;AACrB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,kDAAgB,qEAAqE,kDAAgB,qEAAqE,kDAAgB,qEAAqE,kDAAgB,qEAAqE,kDAAgB,qEAAqE,kDAAgB,qEAAqE,kDAAgB,qEAAqE,kDAAgB;AACjoB,C;;;;;;;AC30BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAwC;;AAExC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,KAAK;AAClB;AACO;AACP,gBAAgB,qDAAmB;AACnC,MAAM,qDAAmB;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP,gBAAgB,qDAAmB;AACnC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP,gBAAgB,qDAAmB;AACnC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,OAAO;AACpB;AACO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,OAAO;AACpB;AACO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,aAAa,OAAO;AACpB;AACO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,aAAa,OAAO;AACpB;AACO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,OAAO;AACpB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA,UAAU,iDAAe;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,MAAM;AACjB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,OAAO;AACpB;AACO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,aAAa,OAAO;AACpB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,QAAQ;AACrB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,QAAQ;AACrB;AACO;AACP;AACA;AACA;AACA;AACA,8BAA8B,kDAAgB,qEAAqE,kDAAgB;AACnI;;AAEA;AACA,cAAc;AACd;AACA;AACO;;AAEP;AACA,cAAc;AACd;AACA;AACO;;AAEP;AACA,cAAc;AACd;AACA;AACO;;AAEP;AACA,cAAc;AACd;AACA;AACO;;AAEP;AACA,cAAc;AACd;AACA;AACO;;AAEP;AACA,cAAc;AACd;AACA;AACO;;AAEP;AACA,cAAc;AACd;AACA;AACO;;AAEP;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;;AAEA,oBAAoB,OAAO;AAC3B,oBAAoB;AACpB;AACA,oBAAoB;AACpB;;AAEA;AACA;AACA,CAAC,G;;;;;;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","file":"bundle.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"dist/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n","import {vec2, vec3} from 'gl-matrix';\nimport * as Stats from 'stats-js';\n\nimport {setGL} from './globals';\nimport OpenGLRenderer from './rendering/gl/OpenGLRenderer';\nimport ShaderProgram, {Shader} from './rendering/gl/ShaderProgram';\nimport Camera from './Camera';\nimport GameEngine from './engine/GameEngine';\nimport GameObject from './engine/GameObject';\n\nimport Player from './scene/Player';\nimport Coin from './scene/Coin';\nimport sceneAttributes from './scene/SceneAttributes';\n\nimport RhythmGropuGenerator from './LevelGenerator/RhythmGroupGenerator';\n\nlet time: number = 0.0;\nlet gameStart: boolean = false;\n\nfunction main() {\n\n // Rhythm Type\n let rhythmTypeSelect = document.getElementById(\"rhythmSelect\");\n rhythmTypeSelect.onchange = () => {\n sceneAttributes.rhythmType = parseInt(rhythmTypeSelect.value);\n }\n\n // Rhythm Group Length\n let groupLengthSlider = document.getElementById(\"timeSelect\");\n let groupLengthOutput = document.getElementById(\"timeSelectDisplay\");\n groupLengthOutput.innerHTML = groupLengthSlider.value + \" sec\";\n groupLengthSlider.oninput = () => {\n groupLengthOutput.innerHTML = groupLengthSlider.value + \" sec\";\n sceneAttributes.rhythmGroupLength = parseInt(groupLengthSlider.value);\n }\n\n // Rhythm Group Number\n let groupNumberSelect = document.getElementById(\"numberSelect\");\n let groupNumberOutput = document.getElementById(\"numberDisplay\");\n groupNumberOutput.innerHTML = groupNumberSelect.value;\n groupNumberSelect.oninput = () => {\n groupNumberOutput.innerHTML = groupNumberSelect.value;\n sceneAttributes.numberOfGroups = parseInt(groupNumberSelect.value);\n }\n\n // Gravity\n let gravitySelect = document.getElementById(\"gravitySelect\");\n gravitySelect.onchange = function() {\n sceneAttributes.gravity = parseFloat(gravitySelect.value);\n }\n\n // Jump\n let jumpSelect = document.getElementById(\"jumpSelect\");\n jumpSelect.onchange = () => {\n sceneAttributes.playerJump = parseFloat(jumpSelect.value);\n }\n\n // Speed\n let speedSelect = document.getElementById(\"speedSelect\");\n speedSelect.onchange = () => {\n sceneAttributes.playerSpeed = parseFloat(speedSelect.value);\n }\n\n // Density\n let densitySelect = document.getElementById(\"densitySelect\");\n densitySelect.onchange = () => {\n sceneAttributes.levelDensity = parseFloat(densitySelect.value);\n }\n\n // Generate Level\n let startButton = document.getElementById(\"generateLevelButton\");\n startButton.onclick = () => {\n document.body.innerHTML = \"\";\n BeginGame();\n }\n\n //BeginGame();\n}\n\nfunction BeginGame() {\n let canvas = document.createElement(\"canvas\");\n canvas.setAttribute(\"id\", \"canvas\");\n\n document.body.appendChild(canvas);\n\n // get canvas and webgl context\n //const canvas = document.getElementById('canvas');\n const gl = canvas.getContext('webgl2');\n if (!gl) {\n alert('WebGL 2 not supported!');\n }\n setGL(gl);\n\n // Initial display for framerate (only for development)\n let displayStats = false;\n const stats = Stats();\n if (window.location.hostname === \"localhost\") {\n displayStats = true;\n stats.setMode(0);\n stats.domElement.style.position = 'absolute';\n stats.domElement.style.left = '0px';\n stats.domElement.style.top = '0px';\n document.body.appendChild(stats.domElement);\n }\n\n let engine: GameEngine = GameEngine.getEngine();\n const camera: Camera = engine.getCamera();\n\n const renderer = new OpenGLRenderer(canvas);\n renderer.setClearColor(0.9, 0.9, 0.9, 1);\n engine.setRenderer(renderer);\n engine.generateLevel();\n let player: Player = new Player([0, 1]);\n camera.makeParent(player);\n //new RhythmGropuGenerator(20, 20, 0.5, 0.6, [1, 0, 0]).generateRhythmGroup();\n\n // This function will be called every frame\n function tick() {\n if (displayStats) {\n stats.begin();\n }\n time++;\n engine.tick();\n\n gl.viewport(0, 0, window.innerWidth, window.innerHeight);\n renderer.clear();\n GameEngine.getEngine().drawGameObjects();\n \n // Tell the browser to call `tick` again whenever it renders a new frame\n if (displayStats) {\n stats.end();\n }\n requestAnimationFrame(tick);\n }\n \n window.addEventListener('resize', function() {\n renderer.setSize(window.innerWidth, window.innerHeight);\n camera.setAspectRatio(window.innerWidth / window.innerHeight);\n camera.updateProjectionMatrix();\n }, false);\n \n renderer.setSize(window.innerWidth, window.innerHeight);\n camera.setAspectRatio(window.innerWidth / window.innerHeight);\n camera.updateProjectionMatrix();\n\n // Start the render loop\n engine.startGame();\n tick();\n}\n\nmain();","!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):e.Stats=t()}(this,function(){\"use strict\";var c=function(){var n=0,l=document.createElement(\"div\");function e(e){return l.appendChild(e.dom),e}function t(e){for(var t=0;t) {\n let model = mat4.create();\n let viewProj = mat4.create();\n let color = vec4.fromValues(1, 0, 0, 1);\n \n prog.setCameraPos(camera.position);\n mat4.identity(model);\n mat4.multiply(viewProj, camera.projectionMatrix, camera.viewMatrix);\n prog.setModelMatrix(model);\n prog.setViewProjMatrix(viewProj);\n\n for (let drawable of drawables) {\n prog.draw(drawable);\n }\n }\n};\n\nexport default OpenGLRenderer;\n","import * as glMatrix from \"./gl-matrix/common.js\";\r\nimport * as mat2 from \"./gl-matrix/mat2.js\";\r\nimport * as mat2d from \"./gl-matrix/mat2d.js\";\r\nimport * as mat3 from \"./gl-matrix/mat3.js\";\r\nimport * as mat4 from \"./gl-matrix/mat4.js\";\r\nimport * as quat from \"./gl-matrix/quat.js\";\r\nimport * as quat2 from \"./gl-matrix/quat2.js\";\r\nimport * as vec2 from \"./gl-matrix/vec2.js\";\r\nimport * as vec3 from \"./gl-matrix/vec3.js\";\r\nimport * as vec4 from \"./gl-matrix/vec4.js\";\r\n\r\nexport { glMatrix, mat2, mat2d, mat3, mat4, quat, quat2, vec2, vec3, vec4 };","/**\r\n * Common utilities\r\n * @module glMatrix\r\n */\r\n\r\n// Configuration Constants\r\nexport var EPSILON = 0.000001;\r\nexport var ARRAY_TYPE = typeof Float32Array !== 'undefined' ? Float32Array : Array;\r\nexport var RANDOM = Math.random;\r\n\r\n/**\r\n * Sets the type of array used when creating new vectors and matrices\r\n *\r\n * @param {Type} type Array type, such as Float32Array or Array\r\n */\r\nexport function setMatrixArrayType(type) {\r\n ARRAY_TYPE = type;\r\n}\r\n\r\nvar degree = Math.PI / 180;\r\n\r\n/**\r\n * Convert Degree To Radian\r\n *\r\n * @param {Number} a Angle in Degrees\r\n */\r\nexport function toRadian(a) {\r\n return a * degree;\r\n}\r\n\r\n/**\r\n * Tests whether or not the arguments have approximately the same value, within an absolute\r\n * or relative tolerance of glMatrix.EPSILON (an absolute tolerance is used for values less\r\n * than or equal to 1.0, and a relative tolerance is used for larger values)\r\n *\r\n * @param {Number} a The first number to test.\r\n * @param {Number} b The second number to test.\r\n * @returns {Boolean} True if the numbers are approximately equal, false otherwise.\r\n */\r\nexport function equals(a, b) {\r\n return Math.abs(a - b) <= EPSILON * Math.max(1.0, Math.abs(a), Math.abs(b));\r\n}","import * as glMatrix from \"./common.js\";\r\n\r\n/**\r\n * 2x2 Matrix\r\n * @module mat2\r\n */\r\n\r\n/**\r\n * Creates a new identity mat2\r\n *\r\n * @returns {mat2} a new 2x2 matrix\r\n */\r\nexport function create() {\r\n var out = new glMatrix.ARRAY_TYPE(4);\r\n if (glMatrix.ARRAY_TYPE != Float32Array) {\r\n out[1] = 0;\r\n out[2] = 0;\r\n }\r\n out[0] = 1;\r\n out[3] = 1;\r\n return out;\r\n}\r\n\r\n/**\r\n * Creates a new mat2 initialized with values from an existing matrix\r\n *\r\n * @param {mat2} a matrix to clone\r\n * @returns {mat2} a new 2x2 matrix\r\n */\r\nexport function clone(a) {\r\n var out = new glMatrix.ARRAY_TYPE(4);\r\n out[0] = a[0];\r\n out[1] = a[1];\r\n out[2] = a[2];\r\n out[3] = a[3];\r\n return out;\r\n}\r\n\r\n/**\r\n * Copy the values from one mat2 to another\r\n *\r\n * @param {mat2} out the receiving matrix\r\n * @param {mat2} a the source matrix\r\n * @returns {mat2} out\r\n */\r\nexport function copy(out, a) {\r\n out[0] = a[0];\r\n out[1] = a[1];\r\n out[2] = a[2];\r\n out[3] = a[3];\r\n return out;\r\n}\r\n\r\n/**\r\n * Set a mat2 to the identity matrix\r\n *\r\n * @param {mat2} out the receiving matrix\r\n * @returns {mat2} out\r\n */\r\nexport function identity(out) {\r\n out[0] = 1;\r\n out[1] = 0;\r\n out[2] = 0;\r\n out[3] = 1;\r\n return out;\r\n}\r\n\r\n/**\r\n * Create a new mat2 with the given values\r\n *\r\n * @param {Number} m00 Component in column 0, row 0 position (index 0)\r\n * @param {Number} m01 Component in column 0, row 1 position (index 1)\r\n * @param {Number} m10 Component in column 1, row 0 position (index 2)\r\n * @param {Number} m11 Component in column 1, row 1 position (index 3)\r\n * @returns {mat2} out A new 2x2 matrix\r\n */\r\nexport function fromValues(m00, m01, m10, m11) {\r\n var out = new glMatrix.ARRAY_TYPE(4);\r\n out[0] = m00;\r\n out[1] = m01;\r\n out[2] = m10;\r\n out[3] = m11;\r\n return out;\r\n}\r\n\r\n/**\r\n * Set the components of a mat2 to the given values\r\n *\r\n * @param {mat2} out the receiving matrix\r\n * @param {Number} m00 Component in column 0, row 0 position (index 0)\r\n * @param {Number} m01 Component in column 0, row 1 position (index 1)\r\n * @param {Number} m10 Component in column 1, row 0 position (index 2)\r\n * @param {Number} m11 Component in column 1, row 1 position (index 3)\r\n * @returns {mat2} out\r\n */\r\nexport function set(out, m00, m01, m10, m11) {\r\n out[0] = m00;\r\n out[1] = m01;\r\n out[2] = m10;\r\n out[3] = m11;\r\n return out;\r\n}\r\n\r\n/**\r\n * Transpose the values of a mat2\r\n *\r\n * @param {mat2} out the receiving matrix\r\n * @param {mat2} a the source matrix\r\n * @returns {mat2} out\r\n */\r\nexport function transpose(out, a) {\r\n // If we are transposing ourselves we can skip a few steps but have to cache\r\n // some values\r\n if (out === a) {\r\n var a1 = a[1];\r\n out[1] = a[2];\r\n out[2] = a1;\r\n } else {\r\n out[0] = a[0];\r\n out[1] = a[2];\r\n out[2] = a[1];\r\n out[3] = a[3];\r\n }\r\n\r\n return out;\r\n}\r\n\r\n/**\r\n * Inverts a mat2\r\n *\r\n * @param {mat2} out the receiving matrix\r\n * @param {mat2} a the source matrix\r\n * @returns {mat2} out\r\n */\r\nexport function invert(out, a) {\r\n var a0 = a[0],\r\n a1 = a[1],\r\n a2 = a[2],\r\n a3 = a[3];\r\n\r\n // Calculate the determinant\r\n var det = a0 * a3 - a2 * a1;\r\n\r\n if (!det) {\r\n return null;\r\n }\r\n det = 1.0 / det;\r\n\r\n out[0] = a3 * det;\r\n out[1] = -a1 * det;\r\n out[2] = -a2 * det;\r\n out[3] = a0 * det;\r\n\r\n return out;\r\n}\r\n\r\n/**\r\n * Calculates the adjugate of a mat2\r\n *\r\n * @param {mat2} out the receiving matrix\r\n * @param {mat2} a the source matrix\r\n * @returns {mat2} out\r\n */\r\nexport function adjoint(out, a) {\r\n // Caching this value is nessecary if out == a\r\n var a0 = a[0];\r\n out[0] = a[3];\r\n out[1] = -a[1];\r\n out[2] = -a[2];\r\n out[3] = a0;\r\n\r\n return out;\r\n}\r\n\r\n/**\r\n * Calculates the determinant of a mat2\r\n *\r\n * @param {mat2} a the source matrix\r\n * @returns {Number} determinant of a\r\n */\r\nexport function determinant(a) {\r\n return a[0] * a[3] - a[2] * a[1];\r\n}\r\n\r\n/**\r\n * Multiplies two mat2's\r\n *\r\n * @param {mat2} out the receiving matrix\r\n * @param {mat2} a the first operand\r\n * @param {mat2} b the second operand\r\n * @returns {mat2} out\r\n */\r\nexport function multiply(out, a, b) {\r\n var a0 = a[0],\r\n a1 = a[1],\r\n a2 = a[2],\r\n a3 = a[3];\r\n var b0 = b[0],\r\n b1 = b[1],\r\n b2 = b[2],\r\n b3 = b[3];\r\n out[0] = a0 * b0 + a2 * b1;\r\n out[1] = a1 * b0 + a3 * b1;\r\n out[2] = a0 * b2 + a2 * b3;\r\n out[3] = a1 * b2 + a3 * b3;\r\n return out;\r\n}\r\n\r\n/**\r\n * Rotates a mat2 by the given angle\r\n *\r\n * @param {mat2} out the receiving matrix\r\n * @param {mat2} a the matrix to rotate\r\n * @param {Number} rad the angle to rotate the matrix by\r\n * @returns {mat2} out\r\n */\r\nexport function rotate(out, a, rad) {\r\n var a0 = a[0],\r\n a1 = a[1],\r\n a2 = a[2],\r\n a3 = a[3];\r\n var s = Math.sin(rad);\r\n var c = Math.cos(rad);\r\n out[0] = a0 * c + a2 * s;\r\n out[1] = a1 * c + a3 * s;\r\n out[2] = a0 * -s + a2 * c;\r\n out[3] = a1 * -s + a3 * c;\r\n return out;\r\n}\r\n\r\n/**\r\n * Scales the mat2 by the dimensions in the given vec2\r\n *\r\n * @param {mat2} out the receiving matrix\r\n * @param {mat2} a the matrix to rotate\r\n * @param {vec2} v the vec2 to scale the matrix by\r\n * @returns {mat2} out\r\n **/\r\nexport function scale(out, a, v) {\r\n var a0 = a[0],\r\n a1 = a[1],\r\n a2 = a[2],\r\n a3 = a[3];\r\n var v0 = v[0],\r\n v1 = v[1];\r\n out[0] = a0 * v0;\r\n out[1] = a1 * v0;\r\n out[2] = a2 * v1;\r\n out[3] = a3 * v1;\r\n return out;\r\n}\r\n\r\n/**\r\n * Creates a matrix from a given angle\r\n * This is equivalent to (but much faster than):\r\n *\r\n * mat2.identity(dest);\r\n * mat2.rotate(dest, dest, rad);\r\n *\r\n * @param {mat2} out mat2 receiving operation result\r\n * @param {Number} rad the angle to rotate the matrix by\r\n * @returns {mat2} out\r\n */\r\nexport function fromRotation(out, rad) {\r\n var s = Math.sin(rad);\r\n var c = Math.cos(rad);\r\n out[0] = c;\r\n out[1] = s;\r\n out[2] = -s;\r\n out[3] = c;\r\n return out;\r\n}\r\n\r\n/**\r\n * Creates a matrix from a vector scaling\r\n * This is equivalent to (but much faster than):\r\n *\r\n * mat2.identity(dest);\r\n * mat2.scale(dest, dest, vec);\r\n *\r\n * @param {mat2} out mat2 receiving operation result\r\n * @param {vec2} v Scaling vector\r\n * @returns {mat2} out\r\n */\r\nexport function fromScaling(out, v) {\r\n out[0] = v[0];\r\n out[1] = 0;\r\n out[2] = 0;\r\n out[3] = v[1];\r\n return out;\r\n}\r\n\r\n/**\r\n * Returns a string representation of a mat2\r\n *\r\n * @param {mat2} a matrix to represent as a string\r\n * @returns {String} string representation of the matrix\r\n */\r\nexport function str(a) {\r\n return 'mat2(' + a[0] + ', ' + a[1] + ', ' + a[2] + ', ' + a[3] + ')';\r\n}\r\n\r\n/**\r\n * Returns Frobenius norm of a mat2\r\n *\r\n * @param {mat2} a the matrix to calculate Frobenius norm of\r\n * @returns {Number} Frobenius norm\r\n */\r\nexport function frob(a) {\r\n return Math.sqrt(Math.pow(a[0], 2) + Math.pow(a[1], 2) + Math.pow(a[2], 2) + Math.pow(a[3], 2));\r\n}\r\n\r\n/**\r\n * Returns L, D and U matrices (Lower triangular, Diagonal and Upper triangular) by factorizing the input matrix\r\n * @param {mat2} L the lower triangular matrix\r\n * @param {mat2} D the diagonal matrix\r\n * @param {mat2} U the upper triangular matrix\r\n * @param {mat2} a the input matrix to factorize\r\n */\r\n\r\nexport function LDU(L, D, U, a) {\r\n L[2] = a[2] / a[0];\r\n U[0] = a[0];\r\n U[1] = a[1];\r\n U[3] = a[3] - L[2] * U[1];\r\n return [L, D, U];\r\n}\r\n\r\n/**\r\n * Adds two mat2's\r\n *\r\n * @param {mat2} out the receiving matrix\r\n * @param {mat2} a the first operand\r\n * @param {mat2} b the second operand\r\n * @returns {mat2} out\r\n */\r\nexport function add(out, a, b) {\r\n out[0] = a[0] + b[0];\r\n out[1] = a[1] + b[1];\r\n out[2] = a[2] + b[2];\r\n out[3] = a[3] + b[3];\r\n return out;\r\n}\r\n\r\n/**\r\n * Subtracts matrix b from matrix a\r\n *\r\n * @param {mat2} out the receiving matrix\r\n * @param {mat2} a the first operand\r\n * @param {mat2} b the second operand\r\n * @returns {mat2} out\r\n */\r\nexport function subtract(out, a, b) {\r\n out[0] = a[0] - b[0];\r\n out[1] = a[1] - b[1];\r\n out[2] = a[2] - b[2];\r\n out[3] = a[3] - b[3];\r\n return out;\r\n}\r\n\r\n/**\r\n * Returns whether or not the matrices have exactly the same elements in the same position (when compared with ===)\r\n *\r\n * @param {mat2} a The first matrix.\r\n * @param {mat2} b The second matrix.\r\n * @returns {Boolean} True if the matrices are equal, false otherwise.\r\n */\r\nexport function exactEquals(a, b) {\r\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3];\r\n}\r\n\r\n/**\r\n * Returns whether or not the matrices have approximately the same elements in the same position.\r\n *\r\n * @param {mat2} a The first matrix.\r\n * @param {mat2} b The second matrix.\r\n * @returns {Boolean} True if the matrices are equal, false otherwise.\r\n */\r\nexport function equals(a, b) {\r\n var a0 = a[0],\r\n a1 = a[1],\r\n a2 = a[2],\r\n a3 = a[3];\r\n var b0 = b[0],\r\n b1 = b[1],\r\n b2 = b[2],\r\n b3 = b[3];\r\n return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)) && Math.abs(a3 - b3) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a3), Math.abs(b3));\r\n}\r\n\r\n/**\r\n * Multiply each element of the matrix by a scalar.\r\n *\r\n * @param {mat2} out the receiving matrix\r\n * @param {mat2} a the matrix to scale\r\n * @param {Number} b amount to scale the matrix's elements by\r\n * @returns {mat2} out\r\n */\r\nexport function multiplyScalar(out, a, b) {\r\n out[0] = a[0] * b;\r\n out[1] = a[1] * b;\r\n out[2] = a[2] * b;\r\n out[3] = a[3] * b;\r\n return out;\r\n}\r\n\r\n/**\r\n * Adds two mat2's after multiplying each element of the second operand by a scalar value.\r\n *\r\n * @param {mat2} out the receiving vector\r\n * @param {mat2} a the first operand\r\n * @param {mat2} b the second operand\r\n * @param {Number} scale the amount to scale b's elements by before adding\r\n * @returns {mat2} out\r\n */\r\nexport function multiplyScalarAndAdd(out, a, b, scale) {\r\n out[0] = a[0] + b[0] * scale;\r\n out[1] = a[1] + b[1] * scale;\r\n out[2] = a[2] + b[2] * scale;\r\n out[3] = a[3] + b[3] * scale;\r\n return out;\r\n}\r\n\r\n/**\r\n * Alias for {@link mat2.multiply}\r\n * @function\r\n */\r\nexport var mul = multiply;\r\n\r\n/**\r\n * Alias for {@link mat2.subtract}\r\n * @function\r\n */\r\nexport var sub = subtract;","import * as glMatrix from \"./common.js\";\r\n\r\n/**\r\n * 2x3 Matrix\r\n * @module mat2d\r\n *\r\n * @description\r\n * A mat2d contains six elements defined as:\r\n *
\r\n * [a, c, tx,\r\n *  b, d, ty]\r\n * 
\r\n * This is a short form for the 3x3 matrix:\r\n *
\r\n * [a, c, tx,\r\n *  b, d, ty,\r\n *  0, 0, 1]\r\n * 
\r\n * The last row is ignored so the array is shorter and operations are faster.\r\n */\r\n\r\n/**\r\n * Creates a new identity mat2d\r\n *\r\n * @returns {mat2d} a new 2x3 matrix\r\n */\r\nexport function create() {\r\n var out = new glMatrix.ARRAY_TYPE(6);\r\n if (glMatrix.ARRAY_TYPE != Float32Array) {\r\n out[1] = 0;\r\n out[2] = 0;\r\n out[4] = 0;\r\n out[5] = 0;\r\n }\r\n out[0] = 1;\r\n out[3] = 1;\r\n return out;\r\n}\r\n\r\n/**\r\n * Creates a new mat2d initialized with values from an existing matrix\r\n *\r\n * @param {mat2d} a matrix to clone\r\n * @returns {mat2d} a new 2x3 matrix\r\n */\r\nexport function clone(a) {\r\n var out = new glMatrix.ARRAY_TYPE(6);\r\n out[0] = a[0];\r\n out[1] = a[1];\r\n out[2] = a[2];\r\n out[3] = a[3];\r\n out[4] = a[4];\r\n out[5] = a[5];\r\n return out;\r\n}\r\n\r\n/**\r\n * Copy the values from one mat2d to another\r\n *\r\n * @param {mat2d} out the receiving matrix\r\n * @param {mat2d} a the source matrix\r\n * @returns {mat2d} out\r\n */\r\nexport function copy(out, a) {\r\n out[0] = a[0];\r\n out[1] = a[1];\r\n out[2] = a[2];\r\n out[3] = a[3];\r\n out[4] = a[4];\r\n out[5] = a[5];\r\n return out;\r\n}\r\n\r\n/**\r\n * Set a mat2d to the identity matrix\r\n *\r\n * @param {mat2d} out the receiving matrix\r\n * @returns {mat2d} out\r\n */\r\nexport function identity(out) {\r\n out[0] = 1;\r\n out[1] = 0;\r\n out[2] = 0;\r\n out[3] = 1;\r\n out[4] = 0;\r\n out[5] = 0;\r\n return out;\r\n}\r\n\r\n/**\r\n * Create a new mat2d with the given values\r\n *\r\n * @param {Number} a Component A (index 0)\r\n * @param {Number} b Component B (index 1)\r\n * @param {Number} c Component C (index 2)\r\n * @param {Number} d Component D (index 3)\r\n * @param {Number} tx Component TX (index 4)\r\n * @param {Number} ty Component TY (index 5)\r\n * @returns {mat2d} A new mat2d\r\n */\r\nexport function fromValues(a, b, c, d, tx, ty) {\r\n var out = new glMatrix.ARRAY_TYPE(6);\r\n out[0] = a;\r\n out[1] = b;\r\n out[2] = c;\r\n out[3] = d;\r\n out[4] = tx;\r\n out[5] = ty;\r\n return out;\r\n}\r\n\r\n/**\r\n * Set the components of a mat2d to the given values\r\n *\r\n * @param {mat2d} out the receiving matrix\r\n * @param {Number} a Component A (index 0)\r\n * @param {Number} b Component B (index 1)\r\n * @param {Number} c Component C (index 2)\r\n * @param {Number} d Component D (index 3)\r\n * @param {Number} tx Component TX (index 4)\r\n * @param {Number} ty Component TY (index 5)\r\n * @returns {mat2d} out\r\n */\r\nexport function set(out, a, b, c, d, tx, ty) {\r\n out[0] = a;\r\n out[1] = b;\r\n out[2] = c;\r\n out[3] = d;\r\n out[4] = tx;\r\n out[5] = ty;\r\n return out;\r\n}\r\n\r\n/**\r\n * Inverts a mat2d\r\n *\r\n * @param {mat2d} out the receiving matrix\r\n * @param {mat2d} a the source matrix\r\n * @returns {mat2d} out\r\n */\r\nexport function invert(out, a) {\r\n var aa = a[0],\r\n ab = a[1],\r\n ac = a[2],\r\n ad = a[3];\r\n var atx = a[4],\r\n aty = a[5];\r\n\r\n var det = aa * ad - ab * ac;\r\n if (!det) {\r\n return null;\r\n }\r\n det = 1.0 / det;\r\n\r\n out[0] = ad * det;\r\n out[1] = -ab * det;\r\n out[2] = -ac * det;\r\n out[3] = aa * det;\r\n out[4] = (ac * aty - ad * atx) * det;\r\n out[5] = (ab * atx - aa * aty) * det;\r\n return out;\r\n}\r\n\r\n/**\r\n * Calculates the determinant of a mat2d\r\n *\r\n * @param {mat2d} a the source matrix\r\n * @returns {Number} determinant of a\r\n */\r\nexport function determinant(a) {\r\n return a[0] * a[3] - a[1] * a[2];\r\n}\r\n\r\n/**\r\n * Multiplies two mat2d's\r\n *\r\n * @param {mat2d} out the receiving matrix\r\n * @param {mat2d} a the first operand\r\n * @param {mat2d} b the second operand\r\n * @returns {mat2d} out\r\n */\r\nexport function multiply(out, a, b) {\r\n var a0 = a[0],\r\n a1 = a[1],\r\n a2 = a[2],\r\n a3 = a[3],\r\n a4 = a[4],\r\n a5 = a[5];\r\n var b0 = b[0],\r\n b1 = b[1],\r\n b2 = b[2],\r\n b3 = b[3],\r\n b4 = b[4],\r\n b5 = b[5];\r\n out[0] = a0 * b0 + a2 * b1;\r\n out[1] = a1 * b0 + a3 * b1;\r\n out[2] = a0 * b2 + a2 * b3;\r\n out[3] = a1 * b2 + a3 * b3;\r\n out[4] = a0 * b4 + a2 * b5 + a4;\r\n out[5] = a1 * b4 + a3 * b5 + a5;\r\n return out;\r\n}\r\n\r\n/**\r\n * Rotates a mat2d by the given angle\r\n *\r\n * @param {mat2d} out the receiving matrix\r\n * @param {mat2d} a the matrix to rotate\r\n * @param {Number} rad the angle to rotate the matrix by\r\n * @returns {mat2d} out\r\n */\r\nexport function rotate(out, a, rad) {\r\n var a0 = a[0],\r\n a1 = a[1],\r\n a2 = a[2],\r\n a3 = a[3],\r\n a4 = a[4],\r\n a5 = a[5];\r\n var s = Math.sin(rad);\r\n var c = Math.cos(rad);\r\n out[0] = a0 * c + a2 * s;\r\n out[1] = a1 * c + a3 * s;\r\n out[2] = a0 * -s + a2 * c;\r\n out[3] = a1 * -s + a3 * c;\r\n out[4] = a4;\r\n out[5] = a5;\r\n return out;\r\n}\r\n\r\n/**\r\n * Scales the mat2d by the dimensions in the given vec2\r\n *\r\n * @param {mat2d} out the receiving matrix\r\n * @param {mat2d} a the matrix to translate\r\n * @param {vec2} v the vec2 to scale the matrix by\r\n * @returns {mat2d} out\r\n **/\r\nexport function scale(out, a, v) {\r\n var a0 = a[0],\r\n a1 = a[1],\r\n a2 = a[2],\r\n a3 = a[3],\r\n a4 = a[4],\r\n a5 = a[5];\r\n var v0 = v[0],\r\n v1 = v[1];\r\n out[0] = a0 * v0;\r\n out[1] = a1 * v0;\r\n out[2] = a2 * v1;\r\n out[3] = a3 * v1;\r\n out[4] = a4;\r\n out[5] = a5;\r\n return out;\r\n}\r\n\r\n/**\r\n * Translates the mat2d by the dimensions in the given vec2\r\n *\r\n * @param {mat2d} out the receiving matrix\r\n * @param {mat2d} a the matrix to translate\r\n * @param {vec2} v the vec2 to translate the matrix by\r\n * @returns {mat2d} out\r\n **/\r\nexport function translate(out, a, v) {\r\n var a0 = a[0],\r\n a1 = a[1],\r\n a2 = a[2],\r\n a3 = a[3],\r\n a4 = a[4],\r\n a5 = a[5];\r\n var v0 = v[0],\r\n v1 = v[1];\r\n out[0] = a0;\r\n out[1] = a1;\r\n out[2] = a2;\r\n out[3] = a3;\r\n out[4] = a0 * v0 + a2 * v1 + a4;\r\n out[5] = a1 * v0 + a3 * v1 + a5;\r\n return out;\r\n}\r\n\r\n/**\r\n * Creates a matrix from a given angle\r\n * This is equivalent to (but much faster than):\r\n *\r\n * mat2d.identity(dest);\r\n * mat2d.rotate(dest, dest, rad);\r\n *\r\n * @param {mat2d} out mat2d receiving operation result\r\n * @param {Number} rad the angle to rotate the matrix by\r\n * @returns {mat2d} out\r\n */\r\nexport function fromRotation(out, rad) {\r\n var s = Math.sin(rad),\r\n c = Math.cos(rad);\r\n out[0] = c;\r\n out[1] = s;\r\n out[2] = -s;\r\n out[3] = c;\r\n out[4] = 0;\r\n out[5] = 0;\r\n return out;\r\n}\r\n\r\n/**\r\n * Creates a matrix from a vector scaling\r\n * This is equivalent to (but much faster than):\r\n *\r\n * mat2d.identity(dest);\r\n * mat2d.scale(dest, dest, vec);\r\n *\r\n * @param {mat2d} out mat2d receiving operation result\r\n * @param {vec2} v Scaling vector\r\n * @returns {mat2d} out\r\n */\r\nexport function fromScaling(out, v) {\r\n out[0] = v[0];\r\n out[1] = 0;\r\n out[2] = 0;\r\n out[3] = v[1];\r\n out[4] = 0;\r\n out[5] = 0;\r\n return out;\r\n}\r\n\r\n/**\r\n * Creates a matrix from a vector translation\r\n * This is equivalent to (but much faster than):\r\n *\r\n * mat2d.identity(dest);\r\n * mat2d.translate(dest, dest, vec);\r\n *\r\n * @param {mat2d} out mat2d receiving operation result\r\n * @param {vec2} v Translation vector\r\n * @returns {mat2d} out\r\n */\r\nexport function fromTranslation(out, v) {\r\n out[0] = 1;\r\n out[1] = 0;\r\n out[2] = 0;\r\n out[3] = 1;\r\n out[4] = v[0];\r\n out[5] = v[1];\r\n return out;\r\n}\r\n\r\n/**\r\n * Returns a string representation of a mat2d\r\n *\r\n * @param {mat2d} a matrix to represent as a string\r\n * @returns {String} string representation of the matrix\r\n */\r\nexport function str(a) {\r\n return 'mat2d(' + a[0] + ', ' + a[1] + ', ' + a[2] + ', ' + a[3] + ', ' + a[4] + ', ' + a[5] + ')';\r\n}\r\n\r\n/**\r\n * Returns Frobenius norm of a mat2d\r\n *\r\n * @param {mat2d} a the matrix to calculate Frobenius norm of\r\n * @returns {Number} Frobenius norm\r\n */\r\nexport function frob(a) {\r\n return Math.sqrt(Math.pow(a[0], 2) + Math.pow(a[1], 2) + Math.pow(a[2], 2) + Math.pow(a[3], 2) + Math.pow(a[4], 2) + Math.pow(a[5], 2) + 1);\r\n}\r\n\r\n/**\r\n * Adds two mat2d's\r\n *\r\n * @param {mat2d} out the receiving matrix\r\n * @param {mat2d} a the first operand\r\n * @param {mat2d} b the second operand\r\n * @returns {mat2d} out\r\n */\r\nexport function add(out, a, b) {\r\n out[0] = a[0] + b[0];\r\n out[1] = a[1] + b[1];\r\n out[2] = a[2] + b[2];\r\n out[3] = a[3] + b[3];\r\n out[4] = a[4] + b[4];\r\n out[5] = a[5] + b[5];\r\n return out;\r\n}\r\n\r\n/**\r\n * Subtracts matrix b from matrix a\r\n *\r\n * @param {mat2d} out the receiving matrix\r\n * @param {mat2d} a the first operand\r\n * @param {mat2d} b the second operand\r\n * @returns {mat2d} out\r\n */\r\nexport function subtract(out, a, b) {\r\n out[0] = a[0] - b[0];\r\n out[1] = a[1] - b[1];\r\n out[2] = a[2] - b[2];\r\n out[3] = a[3] - b[3];\r\n out[4] = a[4] - b[4];\r\n out[5] = a[5] - b[5];\r\n return out;\r\n}\r\n\r\n/**\r\n * Multiply each element of the matrix by a scalar.\r\n *\r\n * @param {mat2d} out the receiving matrix\r\n * @param {mat2d} a the matrix to scale\r\n * @param {Number} b amount to scale the matrix's elements by\r\n * @returns {mat2d} out\r\n */\r\nexport function multiplyScalar(out, a, b) {\r\n out[0] = a[0] * b;\r\n out[1] = a[1] * b;\r\n out[2] = a[2] * b;\r\n out[3] = a[3] * b;\r\n out[4] = a[4] * b;\r\n out[5] = a[5] * b;\r\n return out;\r\n}\r\n\r\n/**\r\n * Adds two mat2d's after multiplying each element of the second operand by a scalar value.\r\n *\r\n * @param {mat2d} out the receiving vector\r\n * @param {mat2d} a the first operand\r\n * @param {mat2d} b the second operand\r\n * @param {Number} scale the amount to scale b's elements by before adding\r\n * @returns {mat2d} out\r\n */\r\nexport function multiplyScalarAndAdd(out, a, b, scale) {\r\n out[0] = a[0] + b[0] * scale;\r\n out[1] = a[1] + b[1] * scale;\r\n out[2] = a[2] + b[2] * scale;\r\n out[3] = a[3] + b[3] * scale;\r\n out[4] = a[4] + b[4] * scale;\r\n out[5] = a[5] + b[5] * scale;\r\n return out;\r\n}\r\n\r\n/**\r\n * Returns whether or not the matrices have exactly the same elements in the same position (when compared with ===)\r\n *\r\n * @param {mat2d} a The first matrix.\r\n * @param {mat2d} b The second matrix.\r\n * @returns {Boolean} True if the matrices are equal, false otherwise.\r\n */\r\nexport function exactEquals(a, b) {\r\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3] && a[4] === b[4] && a[5] === b[5];\r\n}\r\n\r\n/**\r\n * Returns whether or not the matrices have approximately the same elements in the same position.\r\n *\r\n * @param {mat2d} a The first matrix.\r\n * @param {mat2d} b The second matrix.\r\n * @returns {Boolean} True if the matrices are equal, false otherwise.\r\n */\r\nexport function equals(a, b) {\r\n var a0 = a[0],\r\n a1 = a[1],\r\n a2 = a[2],\r\n a3 = a[3],\r\n a4 = a[4],\r\n a5 = a[5];\r\n var b0 = b[0],\r\n b1 = b[1],\r\n b2 = b[2],\r\n b3 = b[3],\r\n b4 = b[4],\r\n b5 = b[5];\r\n return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)) && Math.abs(a3 - b3) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a3), Math.abs(b3)) && Math.abs(a4 - b4) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a4), Math.abs(b4)) && Math.abs(a5 - b5) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a5), Math.abs(b5));\r\n}\r\n\r\n/**\r\n * Alias for {@link mat2d.multiply}\r\n * @function\r\n */\r\nexport var mul = multiply;\r\n\r\n/**\r\n * Alias for {@link mat2d.subtract}\r\n * @function\r\n */\r\nexport var sub = subtract;","import * as glMatrix from \"./common.js\";\r\n\r\n/**\r\n * 3x3 Matrix\r\n * @module mat3\r\n */\r\n\r\n/**\r\n * Creates a new identity mat3\r\n *\r\n * @returns {mat3} a new 3x3 matrix\r\n */\r\nexport function create() {\r\n var out = new glMatrix.ARRAY_TYPE(9);\r\n if (glMatrix.ARRAY_TYPE != Float32Array) {\r\n out[1] = 0;\r\n out[2] = 0;\r\n out[3] = 0;\r\n out[5] = 0;\r\n out[6] = 0;\r\n out[7] = 0;\r\n }\r\n out[0] = 1;\r\n out[4] = 1;\r\n out[8] = 1;\r\n return out;\r\n}\r\n\r\n/**\r\n * Copies the upper-left 3x3 values into the given mat3.\r\n *\r\n * @param {mat3} out the receiving 3x3 matrix\r\n * @param {mat4} a the source 4x4 matrix\r\n * @returns {mat3} out\r\n */\r\nexport function fromMat4(out, a) {\r\n out[0] = a[0];\r\n out[1] = a[1];\r\n out[2] = a[2];\r\n out[3] = a[4];\r\n out[4] = a[5];\r\n out[5] = a[6];\r\n out[6] = a[8];\r\n out[7] = a[9];\r\n out[8] = a[10];\r\n return out;\r\n}\r\n\r\n/**\r\n * Creates a new mat3 initialized with values from an existing matrix\r\n *\r\n * @param {mat3} a matrix to clone\r\n * @returns {mat3} a new 3x3 matrix\r\n */\r\nexport function clone(a) {\r\n var out = new glMatrix.ARRAY_TYPE(9);\r\n out[0] = a[0];\r\n out[1] = a[1];\r\n out[2] = a[2];\r\n out[3] = a[3];\r\n out[4] = a[4];\r\n out[5] = a[5];\r\n out[6] = a[6];\r\n out[7] = a[7];\r\n out[8] = a[8];\r\n return out;\r\n}\r\n\r\n/**\r\n * Copy the values from one mat3 to another\r\n *\r\n * @param {mat3} out the receiving matrix\r\n * @param {mat3} a the source matrix\r\n * @returns {mat3} out\r\n */\r\nexport function copy(out, a) {\r\n out[0] = a[0];\r\n out[1] = a[1];\r\n out[2] = a[2];\r\n out[3] = a[3];\r\n out[4] = a[4];\r\n out[5] = a[5];\r\n out[6] = a[6];\r\n out[7] = a[7];\r\n out[8] = a[8];\r\n return out;\r\n}\r\n\r\n/**\r\n * Create a new mat3 with the given values\r\n *\r\n * @param {Number} m00 Component in column 0, row 0 position (index 0)\r\n * @param {Number} m01 Component in column 0, row 1 position (index 1)\r\n * @param {Number} m02 Component in column 0, row 2 position (index 2)\r\n * @param {Number} m10 Component in column 1, row 0 position (index 3)\r\n * @param {Number} m11 Component in column 1, row 1 position (index 4)\r\n * @param {Number} m12 Component in column 1, row 2 position (index 5)\r\n * @param {Number} m20 Component in column 2, row 0 position (index 6)\r\n * @param {Number} m21 Component in column 2, row 1 position (index 7)\r\n * @param {Number} m22 Component in column 2, row 2 position (index 8)\r\n * @returns {mat3} A new mat3\r\n */\r\nexport function fromValues(m00, m01, m02, m10, m11, m12, m20, m21, m22) {\r\n var out = new glMatrix.ARRAY_TYPE(9);\r\n out[0] = m00;\r\n out[1] = m01;\r\n out[2] = m02;\r\n out[3] = m10;\r\n out[4] = m11;\r\n out[5] = m12;\r\n out[6] = m20;\r\n out[7] = m21;\r\n out[8] = m22;\r\n return out;\r\n}\r\n\r\n/**\r\n * Set the components of a mat3 to the given values\r\n *\r\n * @param {mat3} out the receiving matrix\r\n * @param {Number} m00 Component in column 0, row 0 position (index 0)\r\n * @param {Number} m01 Component in column 0, row 1 position (index 1)\r\n * @param {Number} m02 Component in column 0, row 2 position (index 2)\r\n * @param {Number} m10 Component in column 1, row 0 position (index 3)\r\n * @param {Number} m11 Component in column 1, row 1 position (index 4)\r\n * @param {Number} m12 Component in column 1, row 2 position (index 5)\r\n * @param {Number} m20 Component in column 2, row 0 position (index 6)\r\n * @param {Number} m21 Component in column 2, row 1 position (index 7)\r\n * @param {Number} m22 Component in column 2, row 2 position (index 8)\r\n * @returns {mat3} out\r\n */\r\nexport function set(out, m00, m01, m02, m10, m11, m12, m20, m21, m22) {\r\n out[0] = m00;\r\n out[1] = m01;\r\n out[2] = m02;\r\n out[3] = m10;\r\n out[4] = m11;\r\n out[5] = m12;\r\n out[6] = m20;\r\n out[7] = m21;\r\n out[8] = m22;\r\n return out;\r\n}\r\n\r\n/**\r\n * Set a mat3 to the identity matrix\r\n *\r\n * @param {mat3} out the receiving matrix\r\n * @returns {mat3} out\r\n */\r\nexport function identity(out) {\r\n out[0] = 1;\r\n out[1] = 0;\r\n out[2] = 0;\r\n out[3] = 0;\r\n out[4] = 1;\r\n out[5] = 0;\r\n out[6] = 0;\r\n out[7] = 0;\r\n out[8] = 1;\r\n return out;\r\n}\r\n\r\n/**\r\n * Transpose the values of a mat3\r\n *\r\n * @param {mat3} out the receiving matrix\r\n * @param {mat3} a the source matrix\r\n * @returns {mat3} out\r\n */\r\nexport function transpose(out, a) {\r\n // If we are transposing ourselves we can skip a few steps but have to cache some values\r\n if (out === a) {\r\n var a01 = a[1],\r\n a02 = a[2],\r\n a12 = a[5];\r\n out[1] = a[3];\r\n out[2] = a[6];\r\n out[3] = a01;\r\n out[5] = a[7];\r\n out[6] = a02;\r\n out[7] = a12;\r\n } else {\r\n out[0] = a[0];\r\n out[1] = a[3];\r\n out[2] = a[6];\r\n out[3] = a[1];\r\n out[4] = a[4];\r\n out[5] = a[7];\r\n out[6] = a[2];\r\n out[7] = a[5];\r\n out[8] = a[8];\r\n }\r\n\r\n return out;\r\n}\r\n\r\n/**\r\n * Inverts a mat3\r\n *\r\n * @param {mat3} out the receiving matrix\r\n * @param {mat3} a the source matrix\r\n * @returns {mat3} out\r\n */\r\nexport function invert(out, a) {\r\n var a00 = a[0],\r\n a01 = a[1],\r\n a02 = a[2];\r\n var a10 = a[3],\r\n a11 = a[4],\r\n a12 = a[5];\r\n var a20 = a[6],\r\n a21 = a[7],\r\n a22 = a[8];\r\n\r\n var b01 = a22 * a11 - a12 * a21;\r\n var b11 = -a22 * a10 + a12 * a20;\r\n var b21 = a21 * a10 - a11 * a20;\r\n\r\n // Calculate the determinant\r\n var det = a00 * b01 + a01 * b11 + a02 * b21;\r\n\r\n if (!det) {\r\n return null;\r\n }\r\n det = 1.0 / det;\r\n\r\n out[0] = b01 * det;\r\n out[1] = (-a22 * a01 + a02 * a21) * det;\r\n out[2] = (a12 * a01 - a02 * a11) * det;\r\n out[3] = b11 * det;\r\n out[4] = (a22 * a00 - a02 * a20) * det;\r\n out[5] = (-a12 * a00 + a02 * a10) * det;\r\n out[6] = b21 * det;\r\n out[7] = (-a21 * a00 + a01 * a20) * det;\r\n out[8] = (a11 * a00 - a01 * a10) * det;\r\n return out;\r\n}\r\n\r\n/**\r\n * Calculates the adjugate of a mat3\r\n *\r\n * @param {mat3} out the receiving matrix\r\n * @param {mat3} a the source matrix\r\n * @returns {mat3} out\r\n */\r\nexport function adjoint(out, a) {\r\n var a00 = a[0],\r\n a01 = a[1],\r\n a02 = a[2];\r\n var a10 = a[3],\r\n a11 = a[4],\r\n a12 = a[5];\r\n var a20 = a[6],\r\n a21 = a[7],\r\n a22 = a[8];\r\n\r\n out[0] = a11 * a22 - a12 * a21;\r\n out[1] = a02 * a21 - a01 * a22;\r\n out[2] = a01 * a12 - a02 * a11;\r\n out[3] = a12 * a20 - a10 * a22;\r\n out[4] = a00 * a22 - a02 * a20;\r\n out[5] = a02 * a10 - a00 * a12;\r\n out[6] = a10 * a21 - a11 * a20;\r\n out[7] = a01 * a20 - a00 * a21;\r\n out[8] = a00 * a11 - a01 * a10;\r\n return out;\r\n}\r\n\r\n/**\r\n * Calculates the determinant of a mat3\r\n *\r\n * @param {mat3} a the source matrix\r\n * @returns {Number} determinant of a\r\n */\r\nexport function determinant(a) {\r\n var a00 = a[0],\r\n a01 = a[1],\r\n a02 = a[2];\r\n var a10 = a[3],\r\n a11 = a[4],\r\n a12 = a[5];\r\n var a20 = a[6],\r\n a21 = a[7],\r\n a22 = a[8];\r\n\r\n return a00 * (a22 * a11 - a12 * a21) + a01 * (-a22 * a10 + a12 * a20) + a02 * (a21 * a10 - a11 * a20);\r\n}\r\n\r\n/**\r\n * Multiplies two mat3's\r\n *\r\n * @param {mat3} out the receiving matrix\r\n * @param {mat3} a the first operand\r\n * @param {mat3} b the second operand\r\n * @returns {mat3} out\r\n */\r\nexport function multiply(out, a, b) {\r\n var a00 = a[0],\r\n a01 = a[1],\r\n a02 = a[2];\r\n var a10 = a[3],\r\n a11 = a[4],\r\n a12 = a[5];\r\n var a20 = a[6],\r\n a21 = a[7],\r\n a22 = a[8];\r\n\r\n var b00 = b[0],\r\n b01 = b[1],\r\n b02 = b[2];\r\n var b10 = b[3],\r\n b11 = b[4],\r\n b12 = b[5];\r\n var b20 = b[6],\r\n b21 = b[7],\r\n b22 = b[8];\r\n\r\n out[0] = b00 * a00 + b01 * a10 + b02 * a20;\r\n out[1] = b00 * a01 + b01 * a11 + b02 * a21;\r\n out[2] = b00 * a02 + b01 * a12 + b02 * a22;\r\n\r\n out[3] = b10 * a00 + b11 * a10 + b12 * a20;\r\n out[4] = b10 * a01 + b11 * a11 + b12 * a21;\r\n out[5] = b10 * a02 + b11 * a12 + b12 * a22;\r\n\r\n out[6] = b20 * a00 + b21 * a10 + b22 * a20;\r\n out[7] = b20 * a01 + b21 * a11 + b22 * a21;\r\n out[8] = b20 * a02 + b21 * a12 + b22 * a22;\r\n return out;\r\n}\r\n\r\n/**\r\n * Translate a mat3 by the given vector\r\n *\r\n * @param {mat3} out the receiving matrix\r\n * @param {mat3} a the matrix to translate\r\n * @param {vec2} v vector to translate by\r\n * @returns {mat3} out\r\n */\r\nexport function translate(out, a, v) {\r\n var a00 = a[0],\r\n a01 = a[1],\r\n a02 = a[2],\r\n a10 = a[3],\r\n a11 = a[4],\r\n a12 = a[5],\r\n a20 = a[6],\r\n a21 = a[7],\r\n a22 = a[8],\r\n x = v[0],\r\n y = v[1];\r\n\r\n out[0] = a00;\r\n out[1] = a01;\r\n out[2] = a02;\r\n\r\n out[3] = a10;\r\n out[4] = a11;\r\n out[5] = a12;\r\n\r\n out[6] = x * a00 + y * a10 + a20;\r\n out[7] = x * a01 + y * a11 + a21;\r\n out[8] = x * a02 + y * a12 + a22;\r\n return out;\r\n}\r\n\r\n/**\r\n * Rotates a mat3 by the given angle\r\n *\r\n * @param {mat3} out the receiving matrix\r\n * @param {mat3} a the matrix to rotate\r\n * @param {Number} rad the angle to rotate the matrix by\r\n * @returns {mat3} out\r\n */\r\nexport function rotate(out, a, rad) {\r\n var a00 = a[0],\r\n a01 = a[1],\r\n a02 = a[2],\r\n a10 = a[3],\r\n a11 = a[4],\r\n a12 = a[5],\r\n a20 = a[6],\r\n a21 = a[7],\r\n a22 = a[8],\r\n s = Math.sin(rad),\r\n c = Math.cos(rad);\r\n\r\n out[0] = c * a00 + s * a10;\r\n out[1] = c * a01 + s * a11;\r\n out[2] = c * a02 + s * a12;\r\n\r\n out[3] = c * a10 - s * a00;\r\n out[4] = c * a11 - s * a01;\r\n out[5] = c * a12 - s * a02;\r\n\r\n out[6] = a20;\r\n out[7] = a21;\r\n out[8] = a22;\r\n return out;\r\n};\r\n\r\n/**\r\n * Scales the mat3 by the dimensions in the given vec2\r\n *\r\n * @param {mat3} out the receiving matrix\r\n * @param {mat3} a the matrix to rotate\r\n * @param {vec2} v the vec2 to scale the matrix by\r\n * @returns {mat3} out\r\n **/\r\nexport function scale(out, a, v) {\r\n var x = v[0],\r\n y = v[1];\r\n\r\n out[0] = x * a[0];\r\n out[1] = x * a[1];\r\n out[2] = x * a[2];\r\n\r\n out[3] = y * a[3];\r\n out[4] = y * a[4];\r\n out[5] = y * a[5];\r\n\r\n out[6] = a[6];\r\n out[7] = a[7];\r\n out[8] = a[8];\r\n return out;\r\n}\r\n\r\n/**\r\n * Creates a matrix from a vector translation\r\n * This is equivalent to (but much faster than):\r\n *\r\n * mat3.identity(dest);\r\n * mat3.translate(dest, dest, vec);\r\n *\r\n * @param {mat3} out mat3 receiving operation result\r\n * @param {vec2} v Translation vector\r\n * @returns {mat3} out\r\n */\r\nexport function fromTranslation(out, v) {\r\n out[0] = 1;\r\n out[1] = 0;\r\n out[2] = 0;\r\n out[3] = 0;\r\n out[4] = 1;\r\n out[5] = 0;\r\n out[6] = v[0];\r\n out[7] = v[1];\r\n out[8] = 1;\r\n return out;\r\n}\r\n\r\n/**\r\n * Creates a matrix from a given angle\r\n * This is equivalent to (but much faster than):\r\n *\r\n * mat3.identity(dest);\r\n * mat3.rotate(dest, dest, rad);\r\n *\r\n * @param {mat3} out mat3 receiving operation result\r\n * @param {Number} rad the angle to rotate the matrix by\r\n * @returns {mat3} out\r\n */\r\nexport function fromRotation(out, rad) {\r\n var s = Math.sin(rad),\r\n c = Math.cos(rad);\r\n\r\n out[0] = c;\r\n out[1] = s;\r\n out[2] = 0;\r\n\r\n out[3] = -s;\r\n out[4] = c;\r\n out[5] = 0;\r\n\r\n out[6] = 0;\r\n out[7] = 0;\r\n out[8] = 1;\r\n return out;\r\n}\r\n\r\n/**\r\n * Creates a matrix from a vector scaling\r\n * This is equivalent to (but much faster than):\r\n *\r\n * mat3.identity(dest);\r\n * mat3.scale(dest, dest, vec);\r\n *\r\n * @param {mat3} out mat3 receiving operation result\r\n * @param {vec2} v Scaling vector\r\n * @returns {mat3} out\r\n */\r\nexport function fromScaling(out, v) {\r\n out[0] = v[0];\r\n out[1] = 0;\r\n out[2] = 0;\r\n\r\n out[3] = 0;\r\n out[4] = v[1];\r\n out[5] = 0;\r\n\r\n out[6] = 0;\r\n out[7] = 0;\r\n out[8] = 1;\r\n return out;\r\n}\r\n\r\n/**\r\n * Copies the values from a mat2d into a mat3\r\n *\r\n * @param {mat3} out the receiving matrix\r\n * @param {mat2d} a the matrix to copy\r\n * @returns {mat3} out\r\n **/\r\nexport function fromMat2d(out, a) {\r\n out[0] = a[0];\r\n out[1] = a[1];\r\n out[2] = 0;\r\n\r\n out[3] = a[2];\r\n out[4] = a[3];\r\n out[5] = 0;\r\n\r\n out[6] = a[4];\r\n out[7] = a[5];\r\n out[8] = 1;\r\n return out;\r\n}\r\n\r\n/**\r\n* Calculates a 3x3 matrix from the given quaternion\r\n*\r\n* @param {mat3} out mat3 receiving operation result\r\n* @param {quat} q Quaternion to create matrix from\r\n*\r\n* @returns {mat3} out\r\n*/\r\nexport function fromQuat(out, q) {\r\n var x = q[0],\r\n y = q[1],\r\n z = q[2],\r\n w = q[3];\r\n var x2 = x + x;\r\n var y2 = y + y;\r\n var z2 = z + z;\r\n\r\n var xx = x * x2;\r\n var yx = y * x2;\r\n var yy = y * y2;\r\n var zx = z * x2;\r\n var zy = z * y2;\r\n var zz = z * z2;\r\n var wx = w * x2;\r\n var wy = w * y2;\r\n var wz = w * z2;\r\n\r\n out[0] = 1 - yy - zz;\r\n out[3] = yx - wz;\r\n out[6] = zx + wy;\r\n\r\n out[1] = yx + wz;\r\n out[4] = 1 - xx - zz;\r\n out[7] = zy - wx;\r\n\r\n out[2] = zx - wy;\r\n out[5] = zy + wx;\r\n out[8] = 1 - xx - yy;\r\n\r\n return out;\r\n}\r\n\r\n/**\r\n* Calculates a 3x3 normal matrix (transpose inverse) from the 4x4 matrix\r\n*\r\n* @param {mat3} out mat3 receiving operation result\r\n* @param {mat4} a Mat4 to derive the normal matrix from\r\n*\r\n* @returns {mat3} out\r\n*/\r\nexport function normalFromMat4(out, a) {\r\n var a00 = a[0],\r\n a01 = a[1],\r\n a02 = a[2],\r\n a03 = a[3];\r\n var a10 = a[4],\r\n a11 = a[5],\r\n a12 = a[6],\r\n a13 = a[7];\r\n var a20 = a[8],\r\n a21 = a[9],\r\n a22 = a[10],\r\n a23 = a[11];\r\n var a30 = a[12],\r\n a31 = a[13],\r\n a32 = a[14],\r\n a33 = a[15];\r\n\r\n var b00 = a00 * a11 - a01 * a10;\r\n var b01 = a00 * a12 - a02 * a10;\r\n var b02 = a00 * a13 - a03 * a10;\r\n var b03 = a01 * a12 - a02 * a11;\r\n var b04 = a01 * a13 - a03 * a11;\r\n var b05 = a02 * a13 - a03 * a12;\r\n var b06 = a20 * a31 - a21 * a30;\r\n var b07 = a20 * a32 - a22 * a30;\r\n var b08 = a20 * a33 - a23 * a30;\r\n var b09 = a21 * a32 - a22 * a31;\r\n var b10 = a21 * a33 - a23 * a31;\r\n var b11 = a22 * a33 - a23 * a32;\r\n\r\n // Calculate the determinant\r\n var det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\r\n\r\n if (!det) {\r\n return null;\r\n }\r\n det = 1.0 / det;\r\n\r\n out[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det;\r\n out[1] = (a12 * b08 - a10 * b11 - a13 * b07) * det;\r\n out[2] = (a10 * b10 - a11 * b08 + a13 * b06) * det;\r\n\r\n out[3] = (a02 * b10 - a01 * b11 - a03 * b09) * det;\r\n out[4] = (a00 * b11 - a02 * b08 + a03 * b07) * det;\r\n out[5] = (a01 * b08 - a00 * b10 - a03 * b06) * det;\r\n\r\n out[6] = (a31 * b05 - a32 * b04 + a33 * b03) * det;\r\n out[7] = (a32 * b02 - a30 * b05 - a33 * b01) * det;\r\n out[8] = (a30 * b04 - a31 * b02 + a33 * b00) * det;\r\n\r\n return out;\r\n}\r\n\r\n/**\r\n * Generates a 2D projection matrix with the given bounds\r\n *\r\n * @param {mat3} out mat3 frustum matrix will be written into\r\n * @param {number} width Width of your gl context\r\n * @param {number} height Height of gl context\r\n * @returns {mat3} out\r\n */\r\nexport function projection(out, width, height) {\r\n out[0] = 2 / width;\r\n out[1] = 0;\r\n out[2] = 0;\r\n out[3] = 0;\r\n out[4] = -2 / height;\r\n out[5] = 0;\r\n out[6] = -1;\r\n out[7] = 1;\r\n out[8] = 1;\r\n return out;\r\n}\r\n\r\n/**\r\n * Returns a string representation of a mat3\r\n *\r\n * @param {mat3} a matrix to represent as a string\r\n * @returns {String} string representation of the matrix\r\n */\r\nexport function str(a) {\r\n return 'mat3(' + a[0] + ', ' + a[1] + ', ' + a[2] + ', ' + a[3] + ', ' + a[4] + ', ' + a[5] + ', ' + a[6] + ', ' + a[7] + ', ' + a[8] + ')';\r\n}\r\n\r\n/**\r\n * Returns Frobenius norm of a mat3\r\n *\r\n * @param {mat3} a the matrix to calculate Frobenius norm of\r\n * @returns {Number} Frobenius norm\r\n */\r\nexport function frob(a) {\r\n return Math.sqrt(Math.pow(a[0], 2) + Math.pow(a[1], 2) + Math.pow(a[2], 2) + Math.pow(a[3], 2) + Math.pow(a[4], 2) + Math.pow(a[5], 2) + Math.pow(a[6], 2) + Math.pow(a[7], 2) + Math.pow(a[8], 2));\r\n}\r\n\r\n/**\r\n * Adds two mat3's\r\n *\r\n * @param {mat3} out the receiving matrix\r\n * @param {mat3} a the first operand\r\n * @param {mat3} b the second operand\r\n * @returns {mat3} out\r\n */\r\nexport function add(out, a, b) {\r\n out[0] = a[0] + b[0];\r\n out[1] = a[1] + b[1];\r\n out[2] = a[2] + b[2];\r\n out[3] = a[3] + b[3];\r\n out[4] = a[4] + b[4];\r\n out[5] = a[5] + b[5];\r\n out[6] = a[6] + b[6];\r\n out[7] = a[7] + b[7];\r\n out[8] = a[8] + b[8];\r\n return out;\r\n}\r\n\r\n/**\r\n * Subtracts matrix b from matrix a\r\n *\r\n * @param {mat3} out the receiving matrix\r\n * @param {mat3} a the first operand\r\n * @param {mat3} b the second operand\r\n * @returns {mat3} out\r\n */\r\nexport function subtract(out, a, b) {\r\n out[0] = a[0] - b[0];\r\n out[1] = a[1] - b[1];\r\n out[2] = a[2] - b[2];\r\n out[3] = a[3] - b[3];\r\n out[4] = a[4] - b[4];\r\n out[5] = a[5] - b[5];\r\n out[6] = a[6] - b[6];\r\n out[7] = a[7] - b[7];\r\n out[8] = a[8] - b[8];\r\n return out;\r\n}\r\n\r\n/**\r\n * Multiply each element of the matrix by a scalar.\r\n *\r\n * @param {mat3} out the receiving matrix\r\n * @param {mat3} a the matrix to scale\r\n * @param {Number} b amount to scale the matrix's elements by\r\n * @returns {mat3} out\r\n */\r\nexport function multiplyScalar(out, a, b) {\r\n out[0] = a[0] * b;\r\n out[1] = a[1] * b;\r\n out[2] = a[2] * b;\r\n out[3] = a[3] * b;\r\n out[4] = a[4] * b;\r\n out[5] = a[5] * b;\r\n out[6] = a[6] * b;\r\n out[7] = a[7] * b;\r\n out[8] = a[8] * b;\r\n return out;\r\n}\r\n\r\n/**\r\n * Adds two mat3's after multiplying each element of the second operand by a scalar value.\r\n *\r\n * @param {mat3} out the receiving vector\r\n * @param {mat3} a the first operand\r\n * @param {mat3} b the second operand\r\n * @param {Number} scale the amount to scale b's elements by before adding\r\n * @returns {mat3} out\r\n */\r\nexport function multiplyScalarAndAdd(out, a, b, scale) {\r\n out[0] = a[0] + b[0] * scale;\r\n out[1] = a[1] + b[1] * scale;\r\n out[2] = a[2] + b[2] * scale;\r\n out[3] = a[3] + b[3] * scale;\r\n out[4] = a[4] + b[4] * scale;\r\n out[5] = a[5] + b[5] * scale;\r\n out[6] = a[6] + b[6] * scale;\r\n out[7] = a[7] + b[7] * scale;\r\n out[8] = a[8] + b[8] * scale;\r\n return out;\r\n}\r\n\r\n/**\r\n * Returns whether or not the matrices have exactly the same elements in the same position (when compared with ===)\r\n *\r\n * @param {mat3} a The first matrix.\r\n * @param {mat3} b The second matrix.\r\n * @returns {Boolean} True if the matrices are equal, false otherwise.\r\n */\r\nexport function exactEquals(a, b) {\r\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3] && a[4] === b[4] && a[5] === b[5] && a[6] === b[6] && a[7] === b[7] && a[8] === b[8];\r\n}\r\n\r\n/**\r\n * Returns whether or not the matrices have approximately the same elements in the same position.\r\n *\r\n * @param {mat3} a The first matrix.\r\n * @param {mat3} b The second matrix.\r\n * @returns {Boolean} True if the matrices are equal, false otherwise.\r\n */\r\nexport function equals(a, b) {\r\n var a0 = a[0],\r\n a1 = a[1],\r\n a2 = a[2],\r\n a3 = a[3],\r\n a4 = a[4],\r\n a5 = a[5],\r\n a6 = a[6],\r\n a7 = a[7],\r\n a8 = a[8];\r\n var b0 = b[0],\r\n b1 = b[1],\r\n b2 = b[2],\r\n b3 = b[3],\r\n b4 = b[4],\r\n b5 = b[5],\r\n b6 = b[6],\r\n b7 = b[7],\r\n b8 = b[8];\r\n return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)) && Math.abs(a3 - b3) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a3), Math.abs(b3)) && Math.abs(a4 - b4) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a4), Math.abs(b4)) && Math.abs(a5 - b5) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a5), Math.abs(b5)) && Math.abs(a6 - b6) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a6), Math.abs(b6)) && Math.abs(a7 - b7) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a7), Math.abs(b7)) && Math.abs(a8 - b8) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a8), Math.abs(b8));\r\n}\r\n\r\n/**\r\n * Alias for {@link mat3.multiply}\r\n * @function\r\n */\r\nexport var mul = multiply;\r\n\r\n/**\r\n * Alias for {@link mat3.subtract}\r\n * @function\r\n */\r\nexport var sub = subtract;","import * as glMatrix from \"./common.js\";\r\n\r\n/**\r\n * 4x4 Matrix
Format: column-major, when typed out it looks like row-major
The matrices are being post multiplied.\r\n * @module mat4\r\n */\r\n\r\n/**\r\n * Creates a new identity mat4\r\n *\r\n * @returns {mat4} a new 4x4 matrix\r\n */\r\nexport function create() {\r\n var out = new glMatrix.ARRAY_TYPE(16);\r\n if (glMatrix.ARRAY_TYPE != Float32Array) {\r\n out[1] = 0;\r\n out[2] = 0;\r\n out[3] = 0;\r\n out[4] = 0;\r\n out[6] = 0;\r\n out[7] = 0;\r\n out[8] = 0;\r\n out[9] = 0;\r\n out[11] = 0;\r\n out[12] = 0;\r\n out[13] = 0;\r\n out[14] = 0;\r\n }\r\n out[0] = 1;\r\n out[5] = 1;\r\n out[10] = 1;\r\n out[15] = 1;\r\n return out;\r\n}\r\n\r\n/**\r\n * Creates a new mat4 initialized with values from an existing matrix\r\n *\r\n * @param {mat4} a matrix to clone\r\n * @returns {mat4} a new 4x4 matrix\r\n */\r\nexport function clone(a) {\r\n var out = new glMatrix.ARRAY_TYPE(16);\r\n out[0] = a[0];\r\n out[1] = a[1];\r\n out[2] = a[2];\r\n out[3] = a[3];\r\n out[4] = a[4];\r\n out[5] = a[5];\r\n out[6] = a[6];\r\n out[7] = a[7];\r\n out[8] = a[8];\r\n out[9] = a[9];\r\n out[10] = a[10];\r\n out[11] = a[11];\r\n out[12] = a[12];\r\n out[13] = a[13];\r\n out[14] = a[14];\r\n out[15] = a[15];\r\n return out;\r\n}\r\n\r\n/**\r\n * Copy the values from one mat4 to another\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {mat4} a the source matrix\r\n * @returns {mat4} out\r\n */\r\nexport function copy(out, a) {\r\n out[0] = a[0];\r\n out[1] = a[1];\r\n out[2] = a[2];\r\n out[3] = a[3];\r\n out[4] = a[4];\r\n out[5] = a[5];\r\n out[6] = a[6];\r\n out[7] = a[7];\r\n out[8] = a[8];\r\n out[9] = a[9];\r\n out[10] = a[10];\r\n out[11] = a[11];\r\n out[12] = a[12];\r\n out[13] = a[13];\r\n out[14] = a[14];\r\n out[15] = a[15];\r\n return out;\r\n}\r\n\r\n/**\r\n * Create a new mat4 with the given values\r\n *\r\n * @param {Number} m00 Component in column 0, row 0 position (index 0)\r\n * @param {Number} m01 Component in column 0, row 1 position (index 1)\r\n * @param {Number} m02 Component in column 0, row 2 position (index 2)\r\n * @param {Number} m03 Component in column 0, row 3 position (index 3)\r\n * @param {Number} m10 Component in column 1, row 0 position (index 4)\r\n * @param {Number} m11 Component in column 1, row 1 position (index 5)\r\n * @param {Number} m12 Component in column 1, row 2 position (index 6)\r\n * @param {Number} m13 Component in column 1, row 3 position (index 7)\r\n * @param {Number} m20 Component in column 2, row 0 position (index 8)\r\n * @param {Number} m21 Component in column 2, row 1 position (index 9)\r\n * @param {Number} m22 Component in column 2, row 2 position (index 10)\r\n * @param {Number} m23 Component in column 2, row 3 position (index 11)\r\n * @param {Number} m30 Component in column 3, row 0 position (index 12)\r\n * @param {Number} m31 Component in column 3, row 1 position (index 13)\r\n * @param {Number} m32 Component in column 3, row 2 position (index 14)\r\n * @param {Number} m33 Component in column 3, row 3 position (index 15)\r\n * @returns {mat4} A new mat4\r\n */\r\nexport function fromValues(m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33) {\r\n var out = new glMatrix.ARRAY_TYPE(16);\r\n out[0] = m00;\r\n out[1] = m01;\r\n out[2] = m02;\r\n out[3] = m03;\r\n out[4] = m10;\r\n out[5] = m11;\r\n out[6] = m12;\r\n out[7] = m13;\r\n out[8] = m20;\r\n out[9] = m21;\r\n out[10] = m22;\r\n out[11] = m23;\r\n out[12] = m30;\r\n out[13] = m31;\r\n out[14] = m32;\r\n out[15] = m33;\r\n return out;\r\n}\r\n\r\n/**\r\n * Set the components of a mat4 to the given values\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {Number} m00 Component in column 0, row 0 position (index 0)\r\n * @param {Number} m01 Component in column 0, row 1 position (index 1)\r\n * @param {Number} m02 Component in column 0, row 2 position (index 2)\r\n * @param {Number} m03 Component in column 0, row 3 position (index 3)\r\n * @param {Number} m10 Component in column 1, row 0 position (index 4)\r\n * @param {Number} m11 Component in column 1, row 1 position (index 5)\r\n * @param {Number} m12 Component in column 1, row 2 position (index 6)\r\n * @param {Number} m13 Component in column 1, row 3 position (index 7)\r\n * @param {Number} m20 Component in column 2, row 0 position (index 8)\r\n * @param {Number} m21 Component in column 2, row 1 position (index 9)\r\n * @param {Number} m22 Component in column 2, row 2 position (index 10)\r\n * @param {Number} m23 Component in column 2, row 3 position (index 11)\r\n * @param {Number} m30 Component in column 3, row 0 position (index 12)\r\n * @param {Number} m31 Component in column 3, row 1 position (index 13)\r\n * @param {Number} m32 Component in column 3, row 2 position (index 14)\r\n * @param {Number} m33 Component in column 3, row 3 position (index 15)\r\n * @returns {mat4} out\r\n */\r\nexport function set(out, m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33) {\r\n out[0] = m00;\r\n out[1] = m01;\r\n out[2] = m02;\r\n out[3] = m03;\r\n out[4] = m10;\r\n out[5] = m11;\r\n out[6] = m12;\r\n out[7] = m13;\r\n out[8] = m20;\r\n out[9] = m21;\r\n out[10] = m22;\r\n out[11] = m23;\r\n out[12] = m30;\r\n out[13] = m31;\r\n out[14] = m32;\r\n out[15] = m33;\r\n return out;\r\n}\r\n\r\n/**\r\n * Set a mat4 to the identity matrix\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @returns {mat4} out\r\n */\r\nexport function identity(out) {\r\n out[0] = 1;\r\n out[1] = 0;\r\n out[2] = 0;\r\n out[3] = 0;\r\n out[4] = 0;\r\n out[5] = 1;\r\n out[6] = 0;\r\n out[7] = 0;\r\n out[8] = 0;\r\n out[9] = 0;\r\n out[10] = 1;\r\n out[11] = 0;\r\n out[12] = 0;\r\n out[13] = 0;\r\n out[14] = 0;\r\n out[15] = 1;\r\n return out;\r\n}\r\n\r\n/**\r\n * Transpose the values of a mat4\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {mat4} a the source matrix\r\n * @returns {mat4} out\r\n */\r\nexport function transpose(out, a) {\r\n // If we are transposing ourselves we can skip a few steps but have to cache some values\r\n if (out === a) {\r\n var a01 = a[1],\r\n a02 = a[2],\r\n a03 = a[3];\r\n var a12 = a[6],\r\n a13 = a[7];\r\n var a23 = a[11];\r\n\r\n out[1] = a[4];\r\n out[2] = a[8];\r\n out[3] = a[12];\r\n out[4] = a01;\r\n out[6] = a[9];\r\n out[7] = a[13];\r\n out[8] = a02;\r\n out[9] = a12;\r\n out[11] = a[14];\r\n out[12] = a03;\r\n out[13] = a13;\r\n out[14] = a23;\r\n } else {\r\n out[0] = a[0];\r\n out[1] = a[4];\r\n out[2] = a[8];\r\n out[3] = a[12];\r\n out[4] = a[1];\r\n out[5] = a[5];\r\n out[6] = a[9];\r\n out[7] = a[13];\r\n out[8] = a[2];\r\n out[9] = a[6];\r\n out[10] = a[10];\r\n out[11] = a[14];\r\n out[12] = a[3];\r\n out[13] = a[7];\r\n out[14] = a[11];\r\n out[15] = a[15];\r\n }\r\n\r\n return out;\r\n}\r\n\r\n/**\r\n * Inverts a mat4\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {mat4} a the source matrix\r\n * @returns {mat4} out\r\n */\r\nexport function invert(out, a) {\r\n var a00 = a[0],\r\n a01 = a[1],\r\n a02 = a[2],\r\n a03 = a[3];\r\n var a10 = a[4],\r\n a11 = a[5],\r\n a12 = a[6],\r\n a13 = a[7];\r\n var a20 = a[8],\r\n a21 = a[9],\r\n a22 = a[10],\r\n a23 = a[11];\r\n var a30 = a[12],\r\n a31 = a[13],\r\n a32 = a[14],\r\n a33 = a[15];\r\n\r\n var b00 = a00 * a11 - a01 * a10;\r\n var b01 = a00 * a12 - a02 * a10;\r\n var b02 = a00 * a13 - a03 * a10;\r\n var b03 = a01 * a12 - a02 * a11;\r\n var b04 = a01 * a13 - a03 * a11;\r\n var b05 = a02 * a13 - a03 * a12;\r\n var b06 = a20 * a31 - a21 * a30;\r\n var b07 = a20 * a32 - a22 * a30;\r\n var b08 = a20 * a33 - a23 * a30;\r\n var b09 = a21 * a32 - a22 * a31;\r\n var b10 = a21 * a33 - a23 * a31;\r\n var b11 = a22 * a33 - a23 * a32;\r\n\r\n // Calculate the determinant\r\n var det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\r\n\r\n if (!det) {\r\n return null;\r\n }\r\n det = 1.0 / det;\r\n\r\n out[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det;\r\n out[1] = (a02 * b10 - a01 * b11 - a03 * b09) * det;\r\n out[2] = (a31 * b05 - a32 * b04 + a33 * b03) * det;\r\n out[3] = (a22 * b04 - a21 * b05 - a23 * b03) * det;\r\n out[4] = (a12 * b08 - a10 * b11 - a13 * b07) * det;\r\n out[5] = (a00 * b11 - a02 * b08 + a03 * b07) * det;\r\n out[6] = (a32 * b02 - a30 * b05 - a33 * b01) * det;\r\n out[7] = (a20 * b05 - a22 * b02 + a23 * b01) * det;\r\n out[8] = (a10 * b10 - a11 * b08 + a13 * b06) * det;\r\n out[9] = (a01 * b08 - a00 * b10 - a03 * b06) * det;\r\n out[10] = (a30 * b04 - a31 * b02 + a33 * b00) * det;\r\n out[11] = (a21 * b02 - a20 * b04 - a23 * b00) * det;\r\n out[12] = (a11 * b07 - a10 * b09 - a12 * b06) * det;\r\n out[13] = (a00 * b09 - a01 * b07 + a02 * b06) * det;\r\n out[14] = (a31 * b01 - a30 * b03 - a32 * b00) * det;\r\n out[15] = (a20 * b03 - a21 * b01 + a22 * b00) * det;\r\n\r\n return out;\r\n}\r\n\r\n/**\r\n * Calculates the adjugate of a mat4\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {mat4} a the source matrix\r\n * @returns {mat4} out\r\n */\r\nexport function adjoint(out, a) {\r\n var a00 = a[0],\r\n a01 = a[1],\r\n a02 = a[2],\r\n a03 = a[3];\r\n var a10 = a[4],\r\n a11 = a[5],\r\n a12 = a[6],\r\n a13 = a[7];\r\n var a20 = a[8],\r\n a21 = a[9],\r\n a22 = a[10],\r\n a23 = a[11];\r\n var a30 = a[12],\r\n a31 = a[13],\r\n a32 = a[14],\r\n a33 = a[15];\r\n\r\n out[0] = a11 * (a22 * a33 - a23 * a32) - a21 * (a12 * a33 - a13 * a32) + a31 * (a12 * a23 - a13 * a22);\r\n out[1] = -(a01 * (a22 * a33 - a23 * a32) - a21 * (a02 * a33 - a03 * a32) + a31 * (a02 * a23 - a03 * a22));\r\n out[2] = a01 * (a12 * a33 - a13 * a32) - a11 * (a02 * a33 - a03 * a32) + a31 * (a02 * a13 - a03 * a12);\r\n out[3] = -(a01 * (a12 * a23 - a13 * a22) - a11 * (a02 * a23 - a03 * a22) + a21 * (a02 * a13 - a03 * a12));\r\n out[4] = -(a10 * (a22 * a33 - a23 * a32) - a20 * (a12 * a33 - a13 * a32) + a30 * (a12 * a23 - a13 * a22));\r\n out[5] = a00 * (a22 * a33 - a23 * a32) - a20 * (a02 * a33 - a03 * a32) + a30 * (a02 * a23 - a03 * a22);\r\n out[6] = -(a00 * (a12 * a33 - a13 * a32) - a10 * (a02 * a33 - a03 * a32) + a30 * (a02 * a13 - a03 * a12));\r\n out[7] = a00 * (a12 * a23 - a13 * a22) - a10 * (a02 * a23 - a03 * a22) + a20 * (a02 * a13 - a03 * a12);\r\n out[8] = a10 * (a21 * a33 - a23 * a31) - a20 * (a11 * a33 - a13 * a31) + a30 * (a11 * a23 - a13 * a21);\r\n out[9] = -(a00 * (a21 * a33 - a23 * a31) - a20 * (a01 * a33 - a03 * a31) + a30 * (a01 * a23 - a03 * a21));\r\n out[10] = a00 * (a11 * a33 - a13 * a31) - a10 * (a01 * a33 - a03 * a31) + a30 * (a01 * a13 - a03 * a11);\r\n out[11] = -(a00 * (a11 * a23 - a13 * a21) - a10 * (a01 * a23 - a03 * a21) + a20 * (a01 * a13 - a03 * a11));\r\n out[12] = -(a10 * (a21 * a32 - a22 * a31) - a20 * (a11 * a32 - a12 * a31) + a30 * (a11 * a22 - a12 * a21));\r\n out[13] = a00 * (a21 * a32 - a22 * a31) - a20 * (a01 * a32 - a02 * a31) + a30 * (a01 * a22 - a02 * a21);\r\n out[14] = -(a00 * (a11 * a32 - a12 * a31) - a10 * (a01 * a32 - a02 * a31) + a30 * (a01 * a12 - a02 * a11));\r\n out[15] = a00 * (a11 * a22 - a12 * a21) - a10 * (a01 * a22 - a02 * a21) + a20 * (a01 * a12 - a02 * a11);\r\n return out;\r\n}\r\n\r\n/**\r\n * Calculates the determinant of a mat4\r\n *\r\n * @param {mat4} a the source matrix\r\n * @returns {Number} determinant of a\r\n */\r\nexport function determinant(a) {\r\n var a00 = a[0],\r\n a01 = a[1],\r\n a02 = a[2],\r\n a03 = a[3];\r\n var a10 = a[4],\r\n a11 = a[5],\r\n a12 = a[6],\r\n a13 = a[7];\r\n var a20 = a[8],\r\n a21 = a[9],\r\n a22 = a[10],\r\n a23 = a[11];\r\n var a30 = a[12],\r\n a31 = a[13],\r\n a32 = a[14],\r\n a33 = a[15];\r\n\r\n var b00 = a00 * a11 - a01 * a10;\r\n var b01 = a00 * a12 - a02 * a10;\r\n var b02 = a00 * a13 - a03 * a10;\r\n var b03 = a01 * a12 - a02 * a11;\r\n var b04 = a01 * a13 - a03 * a11;\r\n var b05 = a02 * a13 - a03 * a12;\r\n var b06 = a20 * a31 - a21 * a30;\r\n var b07 = a20 * a32 - a22 * a30;\r\n var b08 = a20 * a33 - a23 * a30;\r\n var b09 = a21 * a32 - a22 * a31;\r\n var b10 = a21 * a33 - a23 * a31;\r\n var b11 = a22 * a33 - a23 * a32;\r\n\r\n // Calculate the determinant\r\n return b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\r\n}\r\n\r\n/**\r\n * Multiplies two mat4s\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {mat4} a the first operand\r\n * @param {mat4} b the second operand\r\n * @returns {mat4} out\r\n */\r\nexport function multiply(out, a, b) {\r\n var a00 = a[0],\r\n a01 = a[1],\r\n a02 = a[2],\r\n a03 = a[3];\r\n var a10 = a[4],\r\n a11 = a[5],\r\n a12 = a[6],\r\n a13 = a[7];\r\n var a20 = a[8],\r\n a21 = a[9],\r\n a22 = a[10],\r\n a23 = a[11];\r\n var a30 = a[12],\r\n a31 = a[13],\r\n a32 = a[14],\r\n a33 = a[15];\r\n\r\n // Cache only the current line of the second matrix\r\n var b0 = b[0],\r\n b1 = b[1],\r\n b2 = b[2],\r\n b3 = b[3];\r\n out[0] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\r\n out[1] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\r\n out[2] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\r\n out[3] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\r\n\r\n b0 = b[4];b1 = b[5];b2 = b[6];b3 = b[7];\r\n out[4] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\r\n out[5] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\r\n out[6] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\r\n out[7] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\r\n\r\n b0 = b[8];b1 = b[9];b2 = b[10];b3 = b[11];\r\n out[8] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\r\n out[9] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\r\n out[10] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\r\n out[11] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\r\n\r\n b0 = b[12];b1 = b[13];b2 = b[14];b3 = b[15];\r\n out[12] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\r\n out[13] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\r\n out[14] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\r\n out[15] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\r\n return out;\r\n}\r\n\r\n/**\r\n * Translate a mat4 by the given vector\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {mat4} a the matrix to translate\r\n * @param {vec3} v vector to translate by\r\n * @returns {mat4} out\r\n */\r\nexport function translate(out, a, v) {\r\n var x = v[0],\r\n y = v[1],\r\n z = v[2];\r\n var a00 = void 0,\r\n a01 = void 0,\r\n a02 = void 0,\r\n a03 = void 0;\r\n var a10 = void 0,\r\n a11 = void 0,\r\n a12 = void 0,\r\n a13 = void 0;\r\n var a20 = void 0,\r\n a21 = void 0,\r\n a22 = void 0,\r\n a23 = void 0;\r\n\r\n if (a === out) {\r\n out[12] = a[0] * x + a[4] * y + a[8] * z + a[12];\r\n out[13] = a[1] * x + a[5] * y + a[9] * z + a[13];\r\n out[14] = a[2] * x + a[6] * y + a[10] * z + a[14];\r\n out[15] = a[3] * x + a[7] * y + a[11] * z + a[15];\r\n } else {\r\n a00 = a[0];a01 = a[1];a02 = a[2];a03 = a[3];\r\n a10 = a[4];a11 = a[5];a12 = a[6];a13 = a[7];\r\n a20 = a[8];a21 = a[9];a22 = a[10];a23 = a[11];\r\n\r\n out[0] = a00;out[1] = a01;out[2] = a02;out[3] = a03;\r\n out[4] = a10;out[5] = a11;out[6] = a12;out[7] = a13;\r\n out[8] = a20;out[9] = a21;out[10] = a22;out[11] = a23;\r\n\r\n out[12] = a00 * x + a10 * y + a20 * z + a[12];\r\n out[13] = a01 * x + a11 * y + a21 * z + a[13];\r\n out[14] = a02 * x + a12 * y + a22 * z + a[14];\r\n out[15] = a03 * x + a13 * y + a23 * z + a[15];\r\n }\r\n\r\n return out;\r\n}\r\n\r\n/**\r\n * Scales the mat4 by the dimensions in the given vec3 not using vectorization\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {mat4} a the matrix to scale\r\n * @param {vec3} v the vec3 to scale the matrix by\r\n * @returns {mat4} out\r\n **/\r\nexport function scale(out, a, v) {\r\n var x = v[0],\r\n y = v[1],\r\n z = v[2];\r\n\r\n out[0] = a[0] * x;\r\n out[1] = a[1] * x;\r\n out[2] = a[2] * x;\r\n out[3] = a[3] * x;\r\n out[4] = a[4] * y;\r\n out[5] = a[5] * y;\r\n out[6] = a[6] * y;\r\n out[7] = a[7] * y;\r\n out[8] = a[8] * z;\r\n out[9] = a[9] * z;\r\n out[10] = a[10] * z;\r\n out[11] = a[11] * z;\r\n out[12] = a[12];\r\n out[13] = a[13];\r\n out[14] = a[14];\r\n out[15] = a[15];\r\n return out;\r\n}\r\n\r\n/**\r\n * Rotates a mat4 by the given angle around the given axis\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {mat4} a the matrix to rotate\r\n * @param {Number} rad the angle to rotate the matrix by\r\n * @param {vec3} axis the axis to rotate around\r\n * @returns {mat4} out\r\n */\r\nexport function rotate(out, a, rad, axis) {\r\n var x = axis[0],\r\n y = axis[1],\r\n z = axis[2];\r\n var len = Math.sqrt(x * x + y * y + z * z);\r\n var s = void 0,\r\n c = void 0,\r\n t = void 0;\r\n var a00 = void 0,\r\n a01 = void 0,\r\n a02 = void 0,\r\n a03 = void 0;\r\n var a10 = void 0,\r\n a11 = void 0,\r\n a12 = void 0,\r\n a13 = void 0;\r\n var a20 = void 0,\r\n a21 = void 0,\r\n a22 = void 0,\r\n a23 = void 0;\r\n var b00 = void 0,\r\n b01 = void 0,\r\n b02 = void 0;\r\n var b10 = void 0,\r\n b11 = void 0,\r\n b12 = void 0;\r\n var b20 = void 0,\r\n b21 = void 0,\r\n b22 = void 0;\r\n\r\n if (len < glMatrix.EPSILON) {\r\n return null;\r\n }\r\n\r\n len = 1 / len;\r\n x *= len;\r\n y *= len;\r\n z *= len;\r\n\r\n s = Math.sin(rad);\r\n c = Math.cos(rad);\r\n t = 1 - c;\r\n\r\n a00 = a[0];a01 = a[1];a02 = a[2];a03 = a[3];\r\n a10 = a[4];a11 = a[5];a12 = a[6];a13 = a[7];\r\n a20 = a[8];a21 = a[9];a22 = a[10];a23 = a[11];\r\n\r\n // Construct the elements of the rotation matrix\r\n b00 = x * x * t + c;b01 = y * x * t + z * s;b02 = z * x * t - y * s;\r\n b10 = x * y * t - z * s;b11 = y * y * t + c;b12 = z * y * t + x * s;\r\n b20 = x * z * t + y * s;b21 = y * z * t - x * s;b22 = z * z * t + c;\r\n\r\n // Perform rotation-specific matrix multiplication\r\n out[0] = a00 * b00 + a10 * b01 + a20 * b02;\r\n out[1] = a01 * b00 + a11 * b01 + a21 * b02;\r\n out[2] = a02 * b00 + a12 * b01 + a22 * b02;\r\n out[3] = a03 * b00 + a13 * b01 + a23 * b02;\r\n out[4] = a00 * b10 + a10 * b11 + a20 * b12;\r\n out[5] = a01 * b10 + a11 * b11 + a21 * b12;\r\n out[6] = a02 * b10 + a12 * b11 + a22 * b12;\r\n out[7] = a03 * b10 + a13 * b11 + a23 * b12;\r\n out[8] = a00 * b20 + a10 * b21 + a20 * b22;\r\n out[9] = a01 * b20 + a11 * b21 + a21 * b22;\r\n out[10] = a02 * b20 + a12 * b21 + a22 * b22;\r\n out[11] = a03 * b20 + a13 * b21 + a23 * b22;\r\n\r\n if (a !== out) {\r\n // If the source and destination differ, copy the unchanged last row\r\n out[12] = a[12];\r\n out[13] = a[13];\r\n out[14] = a[14];\r\n out[15] = a[15];\r\n }\r\n return out;\r\n}\r\n\r\n/**\r\n * Rotates a matrix by the given angle around the X axis\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {mat4} a the matrix to rotate\r\n * @param {Number} rad the angle to rotate the matrix by\r\n * @returns {mat4} out\r\n */\r\nexport function rotateX(out, a, rad) {\r\n var s = Math.sin(rad);\r\n var c = Math.cos(rad);\r\n var a10 = a[4];\r\n var a11 = a[5];\r\n var a12 = a[6];\r\n var a13 = a[7];\r\n var a20 = a[8];\r\n var a21 = a[9];\r\n var a22 = a[10];\r\n var a23 = a[11];\r\n\r\n if (a !== out) {\r\n // If the source and destination differ, copy the unchanged rows\r\n out[0] = a[0];\r\n out[1] = a[1];\r\n out[2] = a[2];\r\n out[3] = a[3];\r\n out[12] = a[12];\r\n out[13] = a[13];\r\n out[14] = a[14];\r\n out[15] = a[15];\r\n }\r\n\r\n // Perform axis-specific matrix multiplication\r\n out[4] = a10 * c + a20 * s;\r\n out[5] = a11 * c + a21 * s;\r\n out[6] = a12 * c + a22 * s;\r\n out[7] = a13 * c + a23 * s;\r\n out[8] = a20 * c - a10 * s;\r\n out[9] = a21 * c - a11 * s;\r\n out[10] = a22 * c - a12 * s;\r\n out[11] = a23 * c - a13 * s;\r\n return out;\r\n}\r\n\r\n/**\r\n * Rotates a matrix by the given angle around the Y axis\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {mat4} a the matrix to rotate\r\n * @param {Number} rad the angle to rotate the matrix by\r\n * @returns {mat4} out\r\n */\r\nexport function rotateY(out, a, rad) {\r\n var s = Math.sin(rad);\r\n var c = Math.cos(rad);\r\n var a00 = a[0];\r\n var a01 = a[1];\r\n var a02 = a[2];\r\n var a03 = a[3];\r\n var a20 = a[8];\r\n var a21 = a[9];\r\n var a22 = a[10];\r\n var a23 = a[11];\r\n\r\n if (a !== out) {\r\n // If the source and destination differ, copy the unchanged rows\r\n out[4] = a[4];\r\n out[5] = a[5];\r\n out[6] = a[6];\r\n out[7] = a[7];\r\n out[12] = a[12];\r\n out[13] = a[13];\r\n out[14] = a[14];\r\n out[15] = a[15];\r\n }\r\n\r\n // Perform axis-specific matrix multiplication\r\n out[0] = a00 * c - a20 * s;\r\n out[1] = a01 * c - a21 * s;\r\n out[2] = a02 * c - a22 * s;\r\n out[3] = a03 * c - a23 * s;\r\n out[8] = a00 * s + a20 * c;\r\n out[9] = a01 * s + a21 * c;\r\n out[10] = a02 * s + a22 * c;\r\n out[11] = a03 * s + a23 * c;\r\n return out;\r\n}\r\n\r\n/**\r\n * Rotates a matrix by the given angle around the Z axis\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {mat4} a the matrix to rotate\r\n * @param {Number} rad the angle to rotate the matrix by\r\n * @returns {mat4} out\r\n */\r\nexport function rotateZ(out, a, rad) {\r\n var s = Math.sin(rad);\r\n var c = Math.cos(rad);\r\n var a00 = a[0];\r\n var a01 = a[1];\r\n var a02 = a[2];\r\n var a03 = a[3];\r\n var a10 = a[4];\r\n var a11 = a[5];\r\n var a12 = a[6];\r\n var a13 = a[7];\r\n\r\n if (a !== out) {\r\n // If the source and destination differ, copy the unchanged last row\r\n out[8] = a[8];\r\n out[9] = a[9];\r\n out[10] = a[10];\r\n out[11] = a[11];\r\n out[12] = a[12];\r\n out[13] = a[13];\r\n out[14] = a[14];\r\n out[15] = a[15];\r\n }\r\n\r\n // Perform axis-specific matrix multiplication\r\n out[0] = a00 * c + a10 * s;\r\n out[1] = a01 * c + a11 * s;\r\n out[2] = a02 * c + a12 * s;\r\n out[3] = a03 * c + a13 * s;\r\n out[4] = a10 * c - a00 * s;\r\n out[5] = a11 * c - a01 * s;\r\n out[6] = a12 * c - a02 * s;\r\n out[7] = a13 * c - a03 * s;\r\n return out;\r\n}\r\n\r\n/**\r\n * Creates a matrix from a vector translation\r\n * This is equivalent to (but much faster than):\r\n *\r\n * mat4.identity(dest);\r\n * mat4.translate(dest, dest, vec);\r\n *\r\n * @param {mat4} out mat4 receiving operation result\r\n * @param {vec3} v Translation vector\r\n * @returns {mat4} out\r\n */\r\nexport function fromTranslation(out, v) {\r\n out[0] = 1;\r\n out[1] = 0;\r\n out[2] = 0;\r\n out[3] = 0;\r\n out[4] = 0;\r\n out[5] = 1;\r\n out[6] = 0;\r\n out[7] = 0;\r\n out[8] = 0;\r\n out[9] = 0;\r\n out[10] = 1;\r\n out[11] = 0;\r\n out[12] = v[0];\r\n out[13] = v[1];\r\n out[14] = v[2];\r\n out[15] = 1;\r\n return out;\r\n}\r\n\r\n/**\r\n * Creates a matrix from a vector scaling\r\n * This is equivalent to (but much faster than):\r\n *\r\n * mat4.identity(dest);\r\n * mat4.scale(dest, dest, vec);\r\n *\r\n * @param {mat4} out mat4 receiving operation result\r\n * @param {vec3} v Scaling vector\r\n * @returns {mat4} out\r\n */\r\nexport function fromScaling(out, v) {\r\n out[0] = v[0];\r\n out[1] = 0;\r\n out[2] = 0;\r\n out[3] = 0;\r\n out[4] = 0;\r\n out[5] = v[1];\r\n out[6] = 0;\r\n out[7] = 0;\r\n out[8] = 0;\r\n out[9] = 0;\r\n out[10] = v[2];\r\n out[11] = 0;\r\n out[12] = 0;\r\n out[13] = 0;\r\n out[14] = 0;\r\n out[15] = 1;\r\n return out;\r\n}\r\n\r\n/**\r\n * Creates a matrix from a given angle around a given axis\r\n * This is equivalent to (but much faster than):\r\n *\r\n * mat4.identity(dest);\r\n * mat4.rotate(dest, dest, rad, axis);\r\n *\r\n * @param {mat4} out mat4 receiving operation result\r\n * @param {Number} rad the angle to rotate the matrix by\r\n * @param {vec3} axis the axis to rotate around\r\n * @returns {mat4} out\r\n */\r\nexport function fromRotation(out, rad, axis) {\r\n var x = axis[0],\r\n y = axis[1],\r\n z = axis[2];\r\n var len = Math.sqrt(x * x + y * y + z * z);\r\n var s = void 0,\r\n c = void 0,\r\n t = void 0;\r\n\r\n if (len < glMatrix.EPSILON) {\r\n return null;\r\n }\r\n\r\n len = 1 / len;\r\n x *= len;\r\n y *= len;\r\n z *= len;\r\n\r\n s = Math.sin(rad);\r\n c = Math.cos(rad);\r\n t = 1 - c;\r\n\r\n // Perform rotation-specific matrix multiplication\r\n out[0] = x * x * t + c;\r\n out[1] = y * x * t + z * s;\r\n out[2] = z * x * t - y * s;\r\n out[3] = 0;\r\n out[4] = x * y * t - z * s;\r\n out[5] = y * y * t + c;\r\n out[6] = z * y * t + x * s;\r\n out[7] = 0;\r\n out[8] = x * z * t + y * s;\r\n out[9] = y * z * t - x * s;\r\n out[10] = z * z * t + c;\r\n out[11] = 0;\r\n out[12] = 0;\r\n out[13] = 0;\r\n out[14] = 0;\r\n out[15] = 1;\r\n return out;\r\n}\r\n\r\n/**\r\n * Creates a matrix from the given angle around the X axis\r\n * This is equivalent to (but much faster than):\r\n *\r\n * mat4.identity(dest);\r\n * mat4.rotateX(dest, dest, rad);\r\n *\r\n * @param {mat4} out mat4 receiving operation result\r\n * @param {Number} rad the angle to rotate the matrix by\r\n * @returns {mat4} out\r\n */\r\nexport function fromXRotation(out, rad) {\r\n var s = Math.sin(rad);\r\n var c = Math.cos(rad);\r\n\r\n // Perform axis-specific matrix multiplication\r\n out[0] = 1;\r\n out[1] = 0;\r\n out[2] = 0;\r\n out[3] = 0;\r\n out[4] = 0;\r\n out[5] = c;\r\n out[6] = s;\r\n out[7] = 0;\r\n out[8] = 0;\r\n out[9] = -s;\r\n out[10] = c;\r\n out[11] = 0;\r\n out[12] = 0;\r\n out[13] = 0;\r\n out[14] = 0;\r\n out[15] = 1;\r\n return out;\r\n}\r\n\r\n/**\r\n * Creates a matrix from the given angle around the Y axis\r\n * This is equivalent to (but much faster than):\r\n *\r\n * mat4.identity(dest);\r\n * mat4.rotateY(dest, dest, rad);\r\n *\r\n * @param {mat4} out mat4 receiving operation result\r\n * @param {Number} rad the angle to rotate the matrix by\r\n * @returns {mat4} out\r\n */\r\nexport function fromYRotation(out, rad) {\r\n var s = Math.sin(rad);\r\n var c = Math.cos(rad);\r\n\r\n // Perform axis-specific matrix multiplication\r\n out[0] = c;\r\n out[1] = 0;\r\n out[2] = -s;\r\n out[3] = 0;\r\n out[4] = 0;\r\n out[5] = 1;\r\n out[6] = 0;\r\n out[7] = 0;\r\n out[8] = s;\r\n out[9] = 0;\r\n out[10] = c;\r\n out[11] = 0;\r\n out[12] = 0;\r\n out[13] = 0;\r\n out[14] = 0;\r\n out[15] = 1;\r\n return out;\r\n}\r\n\r\n/**\r\n * Creates a matrix from the given angle around the Z axis\r\n * This is equivalent to (but much faster than):\r\n *\r\n * mat4.identity(dest);\r\n * mat4.rotateZ(dest, dest, rad);\r\n *\r\n * @param {mat4} out mat4 receiving operation result\r\n * @param {Number} rad the angle to rotate the matrix by\r\n * @returns {mat4} out\r\n */\r\nexport function fromZRotation(out, rad) {\r\n var s = Math.sin(rad);\r\n var c = Math.cos(rad);\r\n\r\n // Perform axis-specific matrix multiplication\r\n out[0] = c;\r\n out[1] = s;\r\n out[2] = 0;\r\n out[3] = 0;\r\n out[4] = -s;\r\n out[5] = c;\r\n out[6] = 0;\r\n out[7] = 0;\r\n out[8] = 0;\r\n out[9] = 0;\r\n out[10] = 1;\r\n out[11] = 0;\r\n out[12] = 0;\r\n out[13] = 0;\r\n out[14] = 0;\r\n out[15] = 1;\r\n return out;\r\n}\r\n\r\n/**\r\n * Creates a matrix from a quaternion rotation and vector translation\r\n * This is equivalent to (but much faster than):\r\n *\r\n * mat4.identity(dest);\r\n * mat4.translate(dest, vec);\r\n * let quatMat = mat4.create();\r\n * quat4.toMat4(quat, quatMat);\r\n * mat4.multiply(dest, quatMat);\r\n *\r\n * @param {mat4} out mat4 receiving operation result\r\n * @param {quat4} q Rotation quaternion\r\n * @param {vec3} v Translation vector\r\n * @returns {mat4} out\r\n */\r\nexport function fromRotationTranslation(out, q, v) {\r\n // Quaternion math\r\n var x = q[0],\r\n y = q[1],\r\n z = q[2],\r\n w = q[3];\r\n var x2 = x + x;\r\n var y2 = y + y;\r\n var z2 = z + z;\r\n\r\n var xx = x * x2;\r\n var xy = x * y2;\r\n var xz = x * z2;\r\n var yy = y * y2;\r\n var yz = y * z2;\r\n var zz = z * z2;\r\n var wx = w * x2;\r\n var wy = w * y2;\r\n var wz = w * z2;\r\n\r\n out[0] = 1 - (yy + zz);\r\n out[1] = xy + wz;\r\n out[2] = xz - wy;\r\n out[3] = 0;\r\n out[4] = xy - wz;\r\n out[5] = 1 - (xx + zz);\r\n out[6] = yz + wx;\r\n out[7] = 0;\r\n out[8] = xz + wy;\r\n out[9] = yz - wx;\r\n out[10] = 1 - (xx + yy);\r\n out[11] = 0;\r\n out[12] = v[0];\r\n out[13] = v[1];\r\n out[14] = v[2];\r\n out[15] = 1;\r\n\r\n return out;\r\n}\r\n\r\n/**\r\n * Creates a new mat4 from a dual quat.\r\n *\r\n * @param {mat4} out Matrix\r\n * @param {quat2} a Dual Quaternion\r\n * @returns {mat4} mat4 receiving operation result\r\n */\r\nexport function fromQuat2(out, a) {\r\n var translation = new glMatrix.ARRAY_TYPE(3);\r\n var bx = -a[0],\r\n by = -a[1],\r\n bz = -a[2],\r\n bw = a[3],\r\n ax = a[4],\r\n ay = a[5],\r\n az = a[6],\r\n aw = a[7];\r\n\r\n var magnitude = bx * bx + by * by + bz * bz + bw * bw;\r\n //Only scale if it makes sense\r\n if (magnitude > 0) {\r\n translation[0] = (ax * bw + aw * bx + ay * bz - az * by) * 2 / magnitude;\r\n translation[1] = (ay * bw + aw * by + az * bx - ax * bz) * 2 / magnitude;\r\n translation[2] = (az * bw + aw * bz + ax * by - ay * bx) * 2 / magnitude;\r\n } else {\r\n translation[0] = (ax * bw + aw * bx + ay * bz - az * by) * 2;\r\n translation[1] = (ay * bw + aw * by + az * bx - ax * bz) * 2;\r\n translation[2] = (az * bw + aw * bz + ax * by - ay * bx) * 2;\r\n }\r\n fromRotationTranslation(out, a, translation);\r\n return out;\r\n}\r\n\r\n/**\r\n * Returns the translation vector component of a transformation\r\n * matrix. If a matrix is built with fromRotationTranslation,\r\n * the returned vector will be the same as the translation vector\r\n * originally supplied.\r\n * @param {vec3} out Vector to receive translation component\r\n * @param {mat4} mat Matrix to be decomposed (input)\r\n * @return {vec3} out\r\n */\r\nexport function getTranslation(out, mat) {\r\n out[0] = mat[12];\r\n out[1] = mat[13];\r\n out[2] = mat[14];\r\n\r\n return out;\r\n}\r\n\r\n/**\r\n * Returns the scaling factor component of a transformation\r\n * matrix. If a matrix is built with fromRotationTranslationScale\r\n * with a normalized Quaternion paramter, the returned vector will be\r\n * the same as the scaling vector\r\n * originally supplied.\r\n * @param {vec3} out Vector to receive scaling factor component\r\n * @param {mat4} mat Matrix to be decomposed (input)\r\n * @return {vec3} out\r\n */\r\nexport function getScaling(out, mat) {\r\n var m11 = mat[0];\r\n var m12 = mat[1];\r\n var m13 = mat[2];\r\n var m21 = mat[4];\r\n var m22 = mat[5];\r\n var m23 = mat[6];\r\n var m31 = mat[8];\r\n var m32 = mat[9];\r\n var m33 = mat[10];\r\n\r\n out[0] = Math.sqrt(m11 * m11 + m12 * m12 + m13 * m13);\r\n out[1] = Math.sqrt(m21 * m21 + m22 * m22 + m23 * m23);\r\n out[2] = Math.sqrt(m31 * m31 + m32 * m32 + m33 * m33);\r\n\r\n return out;\r\n}\r\n\r\n/**\r\n * Returns a quaternion representing the rotational component\r\n * of a transformation matrix. If a matrix is built with\r\n * fromRotationTranslation, the returned quaternion will be the\r\n * same as the quaternion originally supplied.\r\n * @param {quat} out Quaternion to receive the rotation component\r\n * @param {mat4} mat Matrix to be decomposed (input)\r\n * @return {quat} out\r\n */\r\nexport function getRotation(out, mat) {\r\n // Algorithm taken from http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToQuaternion/index.htm\r\n var trace = mat[0] + mat[5] + mat[10];\r\n var S = 0;\r\n\r\n if (trace > 0) {\r\n S = Math.sqrt(trace + 1.0) * 2;\r\n out[3] = 0.25 * S;\r\n out[0] = (mat[6] - mat[9]) / S;\r\n out[1] = (mat[8] - mat[2]) / S;\r\n out[2] = (mat[1] - mat[4]) / S;\r\n } else if (mat[0] > mat[5] && mat[0] > mat[10]) {\r\n S = Math.sqrt(1.0 + mat[0] - mat[5] - mat[10]) * 2;\r\n out[3] = (mat[6] - mat[9]) / S;\r\n out[0] = 0.25 * S;\r\n out[1] = (mat[1] + mat[4]) / S;\r\n out[2] = (mat[8] + mat[2]) / S;\r\n } else if (mat[5] > mat[10]) {\r\n S = Math.sqrt(1.0 + mat[5] - mat[0] - mat[10]) * 2;\r\n out[3] = (mat[8] - mat[2]) / S;\r\n out[0] = (mat[1] + mat[4]) / S;\r\n out[1] = 0.25 * S;\r\n out[2] = (mat[6] + mat[9]) / S;\r\n } else {\r\n S = Math.sqrt(1.0 + mat[10] - mat[0] - mat[5]) * 2;\r\n out[3] = (mat[1] - mat[4]) / S;\r\n out[0] = (mat[8] + mat[2]) / S;\r\n out[1] = (mat[6] + mat[9]) / S;\r\n out[2] = 0.25 * S;\r\n }\r\n\r\n return out;\r\n}\r\n\r\n/**\r\n * Creates a matrix from a quaternion rotation, vector translation and vector scale\r\n * This is equivalent to (but much faster than):\r\n *\r\n * mat4.identity(dest);\r\n * mat4.translate(dest, vec);\r\n * let quatMat = mat4.create();\r\n * quat4.toMat4(quat, quatMat);\r\n * mat4.multiply(dest, quatMat);\r\n * mat4.scale(dest, scale)\r\n *\r\n * @param {mat4} out mat4 receiving operation result\r\n * @param {quat4} q Rotation quaternion\r\n * @param {vec3} v Translation vector\r\n * @param {vec3} s Scaling vector\r\n * @returns {mat4} out\r\n */\r\nexport function fromRotationTranslationScale(out, q, v, s) {\r\n // Quaternion math\r\n var x = q[0],\r\n y = q[1],\r\n z = q[2],\r\n w = q[3];\r\n var x2 = x + x;\r\n var y2 = y + y;\r\n var z2 = z + z;\r\n\r\n var xx = x * x2;\r\n var xy = x * y2;\r\n var xz = x * z2;\r\n var yy = y * y2;\r\n var yz = y * z2;\r\n var zz = z * z2;\r\n var wx = w * x2;\r\n var wy = w * y2;\r\n var wz = w * z2;\r\n var sx = s[0];\r\n var sy = s[1];\r\n var sz = s[2];\r\n\r\n out[0] = (1 - (yy + zz)) * sx;\r\n out[1] = (xy + wz) * sx;\r\n out[2] = (xz - wy) * sx;\r\n out[3] = 0;\r\n out[4] = (xy - wz) * sy;\r\n out[5] = (1 - (xx + zz)) * sy;\r\n out[6] = (yz + wx) * sy;\r\n out[7] = 0;\r\n out[8] = (xz + wy) * sz;\r\n out[9] = (yz - wx) * sz;\r\n out[10] = (1 - (xx + yy)) * sz;\r\n out[11] = 0;\r\n out[12] = v[0];\r\n out[13] = v[1];\r\n out[14] = v[2];\r\n out[15] = 1;\r\n\r\n return out;\r\n}\r\n\r\n/**\r\n * Creates a matrix from a quaternion rotation, vector translation and vector scale, rotating and scaling around the given origin\r\n * This is equivalent to (but much faster than):\r\n *\r\n * mat4.identity(dest);\r\n * mat4.translate(dest, vec);\r\n * mat4.translate(dest, origin);\r\n * let quatMat = mat4.create();\r\n * quat4.toMat4(quat, quatMat);\r\n * mat4.multiply(dest, quatMat);\r\n * mat4.scale(dest, scale)\r\n * mat4.translate(dest, negativeOrigin);\r\n *\r\n * @param {mat4} out mat4 receiving operation result\r\n * @param {quat4} q Rotation quaternion\r\n * @param {vec3} v Translation vector\r\n * @param {vec3} s Scaling vector\r\n * @param {vec3} o The origin vector around which to scale and rotate\r\n * @returns {mat4} out\r\n */\r\nexport function fromRotationTranslationScaleOrigin(out, q, v, s, o) {\r\n // Quaternion math\r\n var x = q[0],\r\n y = q[1],\r\n z = q[2],\r\n w = q[3];\r\n var x2 = x + x;\r\n var y2 = y + y;\r\n var z2 = z + z;\r\n\r\n var xx = x * x2;\r\n var xy = x * y2;\r\n var xz = x * z2;\r\n var yy = y * y2;\r\n var yz = y * z2;\r\n var zz = z * z2;\r\n var wx = w * x2;\r\n var wy = w * y2;\r\n var wz = w * z2;\r\n\r\n var sx = s[0];\r\n var sy = s[1];\r\n var sz = s[2];\r\n\r\n var ox = o[0];\r\n var oy = o[1];\r\n var oz = o[2];\r\n\r\n var out0 = (1 - (yy + zz)) * sx;\r\n var out1 = (xy + wz) * sx;\r\n var out2 = (xz - wy) * sx;\r\n var out4 = (xy - wz) * sy;\r\n var out5 = (1 - (xx + zz)) * sy;\r\n var out6 = (yz + wx) * sy;\r\n var out8 = (xz + wy) * sz;\r\n var out9 = (yz - wx) * sz;\r\n var out10 = (1 - (xx + yy)) * sz;\r\n\r\n out[0] = out0;\r\n out[1] = out1;\r\n out[2] = out2;\r\n out[3] = 0;\r\n out[4] = out4;\r\n out[5] = out5;\r\n out[6] = out6;\r\n out[7] = 0;\r\n out[8] = out8;\r\n out[9] = out9;\r\n out[10] = out10;\r\n out[11] = 0;\r\n out[12] = v[0] + ox - (out0 * ox + out4 * oy + out8 * oz);\r\n out[13] = v[1] + oy - (out1 * ox + out5 * oy + out9 * oz);\r\n out[14] = v[2] + oz - (out2 * ox + out6 * oy + out10 * oz);\r\n out[15] = 1;\r\n\r\n return out;\r\n}\r\n\r\n/**\r\n * Calculates a 4x4 matrix from the given quaternion\r\n *\r\n * @param {mat4} out mat4 receiving operation result\r\n * @param {quat} q Quaternion to create matrix from\r\n *\r\n * @returns {mat4} out\r\n */\r\nexport function fromQuat(out, q) {\r\n var x = q[0],\r\n y = q[1],\r\n z = q[2],\r\n w = q[3];\r\n var x2 = x + x;\r\n var y2 = y + y;\r\n var z2 = z + z;\r\n\r\n var xx = x * x2;\r\n var yx = y * x2;\r\n var yy = y * y2;\r\n var zx = z * x2;\r\n var zy = z * y2;\r\n var zz = z * z2;\r\n var wx = w * x2;\r\n var wy = w * y2;\r\n var wz = w * z2;\r\n\r\n out[0] = 1 - yy - zz;\r\n out[1] = yx + wz;\r\n out[2] = zx - wy;\r\n out[3] = 0;\r\n\r\n out[4] = yx - wz;\r\n out[5] = 1 - xx - zz;\r\n out[6] = zy + wx;\r\n out[7] = 0;\r\n\r\n out[8] = zx + wy;\r\n out[9] = zy - wx;\r\n out[10] = 1 - xx - yy;\r\n out[11] = 0;\r\n\r\n out[12] = 0;\r\n out[13] = 0;\r\n out[14] = 0;\r\n out[15] = 1;\r\n\r\n return out;\r\n}\r\n\r\n/**\r\n * Generates a frustum matrix with the given bounds\r\n *\r\n * @param {mat4} out mat4 frustum matrix will be written into\r\n * @param {Number} left Left bound of the frustum\r\n * @param {Number} right Right bound of the frustum\r\n * @param {Number} bottom Bottom bound of the frustum\r\n * @param {Number} top Top bound of the frustum\r\n * @param {Number} near Near bound of the frustum\r\n * @param {Number} far Far bound of the frustum\r\n * @returns {mat4} out\r\n */\r\nexport function frustum(out, left, right, bottom, top, near, far) {\r\n var rl = 1 / (right - left);\r\n var tb = 1 / (top - bottom);\r\n var nf = 1 / (near - far);\r\n out[0] = near * 2 * rl;\r\n out[1] = 0;\r\n out[2] = 0;\r\n out[3] = 0;\r\n out[4] = 0;\r\n out[5] = near * 2 * tb;\r\n out[6] = 0;\r\n out[7] = 0;\r\n out[8] = (right + left) * rl;\r\n out[9] = (top + bottom) * tb;\r\n out[10] = (far + near) * nf;\r\n out[11] = -1;\r\n out[12] = 0;\r\n out[13] = 0;\r\n out[14] = far * near * 2 * nf;\r\n out[15] = 0;\r\n return out;\r\n}\r\n\r\n/**\r\n * Generates a perspective projection matrix with the given bounds.\r\n * Passing null/undefined/no value for far will generate infinite projection matrix.\r\n *\r\n * @param {mat4} out mat4 frustum matrix will be written into\r\n * @param {number} fovy Vertical field of view in radians\r\n * @param {number} aspect Aspect ratio. typically viewport width/height\r\n * @param {number} near Near bound of the frustum\r\n * @param {number} far Far bound of the frustum, can be null or Infinity\r\n * @returns {mat4} out\r\n */\r\nexport function perspective(out, fovy, aspect, near, far) {\r\n var f = 1.0 / Math.tan(fovy / 2),\r\n nf = void 0;\r\n out[0] = f / aspect;\r\n out[1] = 0;\r\n out[2] = 0;\r\n out[3] = 0;\r\n out[4] = 0;\r\n out[5] = f;\r\n out[6] = 0;\r\n out[7] = 0;\r\n out[8] = 0;\r\n out[9] = 0;\r\n out[11] = -1;\r\n out[12] = 0;\r\n out[13] = 0;\r\n out[15] = 0;\r\n if (far != null && far !== Infinity) {\r\n nf = 1 / (near - far);\r\n out[10] = (far + near) * nf;\r\n out[14] = 2 * far * near * nf;\r\n } else {\r\n out[10] = -1;\r\n out[14] = -2 * near;\r\n }\r\n return out;\r\n}\r\n\r\n/**\r\n * Generates a perspective projection matrix with the given field of view.\r\n * This is primarily useful for generating projection matrices to be used\r\n * with the still experiemental WebVR API.\r\n *\r\n * @param {mat4} out mat4 frustum matrix will be written into\r\n * @param {Object} fov Object containing the following values: upDegrees, downDegrees, leftDegrees, rightDegrees\r\n * @param {number} near Near bound of the frustum\r\n * @param {number} far Far bound of the frustum\r\n * @returns {mat4} out\r\n */\r\nexport function perspectiveFromFieldOfView(out, fov, near, far) {\r\n var upTan = Math.tan(fov.upDegrees * Math.PI / 180.0);\r\n var downTan = Math.tan(fov.downDegrees * Math.PI / 180.0);\r\n var leftTan = Math.tan(fov.leftDegrees * Math.PI / 180.0);\r\n var rightTan = Math.tan(fov.rightDegrees * Math.PI / 180.0);\r\n var xScale = 2.0 / (leftTan + rightTan);\r\n var yScale = 2.0 / (upTan + downTan);\r\n\r\n out[0] = xScale;\r\n out[1] = 0.0;\r\n out[2] = 0.0;\r\n out[3] = 0.0;\r\n out[4] = 0.0;\r\n out[5] = yScale;\r\n out[6] = 0.0;\r\n out[7] = 0.0;\r\n out[8] = -((leftTan - rightTan) * xScale * 0.5);\r\n out[9] = (upTan - downTan) * yScale * 0.5;\r\n out[10] = far / (near - far);\r\n out[11] = -1.0;\r\n out[12] = 0.0;\r\n out[13] = 0.0;\r\n out[14] = far * near / (near - far);\r\n out[15] = 0.0;\r\n return out;\r\n}\r\n\r\n/**\r\n * Generates a orthogonal projection matrix with the given bounds\r\n *\r\n * @param {mat4} out mat4 frustum matrix will be written into\r\n * @param {number} left Left bound of the frustum\r\n * @param {number} right Right bound of the frustum\r\n * @param {number} bottom Bottom bound of the frustum\r\n * @param {number} top Top bound of the frustum\r\n * @param {number} near Near bound of the frustum\r\n * @param {number} far Far bound of the frustum\r\n * @returns {mat4} out\r\n */\r\nexport function ortho(out, left, right, bottom, top, near, far) {\r\n var lr = 1 / (left - right);\r\n var bt = 1 / (bottom - top);\r\n var nf = 1 / (near - far);\r\n out[0] = -2 * lr;\r\n out[1] = 0;\r\n out[2] = 0;\r\n out[3] = 0;\r\n out[4] = 0;\r\n out[5] = -2 * bt;\r\n out[6] = 0;\r\n out[7] = 0;\r\n out[8] = 0;\r\n out[9] = 0;\r\n out[10] = 2 * nf;\r\n out[11] = 0;\r\n out[12] = (left + right) * lr;\r\n out[13] = (top + bottom) * bt;\r\n out[14] = (far + near) * nf;\r\n out[15] = 1;\r\n return out;\r\n}\r\n\r\n/**\r\n * Generates a look-at matrix with the given eye position, focal point, and up axis.\r\n * If you want a matrix that actually makes an object look at another object, you should use targetTo instead.\r\n *\r\n * @param {mat4} out mat4 frustum matrix will be written into\r\n * @param {vec3} eye Position of the viewer\r\n * @param {vec3} center Point the viewer is looking at\r\n * @param {vec3} up vec3 pointing up\r\n * @returns {mat4} out\r\n */\r\nexport function lookAt(out, eye, center, up) {\r\n var x0 = void 0,\r\n x1 = void 0,\r\n x2 = void 0,\r\n y0 = void 0,\r\n y1 = void 0,\r\n y2 = void 0,\r\n z0 = void 0,\r\n z1 = void 0,\r\n z2 = void 0,\r\n len = void 0;\r\n var eyex = eye[0];\r\n var eyey = eye[1];\r\n var eyez = eye[2];\r\n var upx = up[0];\r\n var upy = up[1];\r\n var upz = up[2];\r\n var centerx = center[0];\r\n var centery = center[1];\r\n var centerz = center[2];\r\n\r\n if (Math.abs(eyex - centerx) < glMatrix.EPSILON && Math.abs(eyey - centery) < glMatrix.EPSILON && Math.abs(eyez - centerz) < glMatrix.EPSILON) {\r\n return identity(out);\r\n }\r\n\r\n z0 = eyex - centerx;\r\n z1 = eyey - centery;\r\n z2 = eyez - centerz;\r\n\r\n len = 1 / Math.sqrt(z0 * z0 + z1 * z1 + z2 * z2);\r\n z0 *= len;\r\n z1 *= len;\r\n z2 *= len;\r\n\r\n x0 = upy * z2 - upz * z1;\r\n x1 = upz * z0 - upx * z2;\r\n x2 = upx * z1 - upy * z0;\r\n len = Math.sqrt(x0 * x0 + x1 * x1 + x2 * x2);\r\n if (!len) {\r\n x0 = 0;\r\n x1 = 0;\r\n x2 = 0;\r\n } else {\r\n len = 1 / len;\r\n x0 *= len;\r\n x1 *= len;\r\n x2 *= len;\r\n }\r\n\r\n y0 = z1 * x2 - z2 * x1;\r\n y1 = z2 * x0 - z0 * x2;\r\n y2 = z0 * x1 - z1 * x0;\r\n\r\n len = Math.sqrt(y0 * y0 + y1 * y1 + y2 * y2);\r\n if (!len) {\r\n y0 = 0;\r\n y1 = 0;\r\n y2 = 0;\r\n } else {\r\n len = 1 / len;\r\n y0 *= len;\r\n y1 *= len;\r\n y2 *= len;\r\n }\r\n\r\n out[0] = x0;\r\n out[1] = y0;\r\n out[2] = z0;\r\n out[3] = 0;\r\n out[4] = x1;\r\n out[5] = y1;\r\n out[6] = z1;\r\n out[7] = 0;\r\n out[8] = x2;\r\n out[9] = y2;\r\n out[10] = z2;\r\n out[11] = 0;\r\n out[12] = -(x0 * eyex + x1 * eyey + x2 * eyez);\r\n out[13] = -(y0 * eyex + y1 * eyey + y2 * eyez);\r\n out[14] = -(z0 * eyex + z1 * eyey + z2 * eyez);\r\n out[15] = 1;\r\n\r\n return out;\r\n}\r\n\r\n/**\r\n * Generates a matrix that makes something look at something else.\r\n *\r\n * @param {mat4} out mat4 frustum matrix will be written into\r\n * @param {vec3} eye Position of the viewer\r\n * @param {vec3} center Point the viewer is looking at\r\n * @param {vec3} up vec3 pointing up\r\n * @returns {mat4} out\r\n */\r\nexport function targetTo(out, eye, target, up) {\r\n var eyex = eye[0],\r\n eyey = eye[1],\r\n eyez = eye[2],\r\n upx = up[0],\r\n upy = up[1],\r\n upz = up[2];\r\n\r\n var z0 = eyex - target[0],\r\n z1 = eyey - target[1],\r\n z2 = eyez - target[2];\r\n\r\n var len = z0 * z0 + z1 * z1 + z2 * z2;\r\n if (len > 0) {\r\n len = 1 / Math.sqrt(len);\r\n z0 *= len;\r\n z1 *= len;\r\n z2 *= len;\r\n }\r\n\r\n var x0 = upy * z2 - upz * z1,\r\n x1 = upz * z0 - upx * z2,\r\n x2 = upx * z1 - upy * z0;\r\n\r\n len = x0 * x0 + x1 * x1 + x2 * x2;\r\n if (len > 0) {\r\n len = 1 / Math.sqrt(len);\r\n x0 *= len;\r\n x1 *= len;\r\n x2 *= len;\r\n }\r\n\r\n out[0] = x0;\r\n out[1] = x1;\r\n out[2] = x2;\r\n out[3] = 0;\r\n out[4] = z1 * x2 - z2 * x1;\r\n out[5] = z2 * x0 - z0 * x2;\r\n out[6] = z0 * x1 - z1 * x0;\r\n out[7] = 0;\r\n out[8] = z0;\r\n out[9] = z1;\r\n out[10] = z2;\r\n out[11] = 0;\r\n out[12] = eyex;\r\n out[13] = eyey;\r\n out[14] = eyez;\r\n out[15] = 1;\r\n return out;\r\n};\r\n\r\n/**\r\n * Returns a string representation of a mat4\r\n *\r\n * @param {mat4} a matrix to represent as a string\r\n * @returns {String} string representation of the matrix\r\n */\r\nexport function str(a) {\r\n return 'mat4(' + a[0] + ', ' + a[1] + ', ' + a[2] + ', ' + a[3] + ', ' + a[4] + ', ' + a[5] + ', ' + a[6] + ', ' + a[7] + ', ' + a[8] + ', ' + a[9] + ', ' + a[10] + ', ' + a[11] + ', ' + a[12] + ', ' + a[13] + ', ' + a[14] + ', ' + a[15] + ')';\r\n}\r\n\r\n/**\r\n * Returns Frobenius norm of a mat4\r\n *\r\n * @param {mat4} a the matrix to calculate Frobenius norm of\r\n * @returns {Number} Frobenius norm\r\n */\r\nexport function frob(a) {\r\n return Math.sqrt(Math.pow(a[0], 2) + Math.pow(a[1], 2) + Math.pow(a[2], 2) + Math.pow(a[3], 2) + Math.pow(a[4], 2) + Math.pow(a[5], 2) + Math.pow(a[6], 2) + Math.pow(a[7], 2) + Math.pow(a[8], 2) + Math.pow(a[9], 2) + Math.pow(a[10], 2) + Math.pow(a[11], 2) + Math.pow(a[12], 2) + Math.pow(a[13], 2) + Math.pow(a[14], 2) + Math.pow(a[15], 2));\r\n}\r\n\r\n/**\r\n * Adds two mat4's\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {mat4} a the first operand\r\n * @param {mat4} b the second operand\r\n * @returns {mat4} out\r\n */\r\nexport function add(out, a, b) {\r\n out[0] = a[0] + b[0];\r\n out[1] = a[1] + b[1];\r\n out[2] = a[2] + b[2];\r\n out[3] = a[3] + b[3];\r\n out[4] = a[4] + b[4];\r\n out[5] = a[5] + b[5];\r\n out[6] = a[6] + b[6];\r\n out[7] = a[7] + b[7];\r\n out[8] = a[8] + b[8];\r\n out[9] = a[9] + b[9];\r\n out[10] = a[10] + b[10];\r\n out[11] = a[11] + b[11];\r\n out[12] = a[12] + b[12];\r\n out[13] = a[13] + b[13];\r\n out[14] = a[14] + b[14];\r\n out[15] = a[15] + b[15];\r\n return out;\r\n}\r\n\r\n/**\r\n * Subtracts matrix b from matrix a\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {mat4} a the first operand\r\n * @param {mat4} b the second operand\r\n * @returns {mat4} out\r\n */\r\nexport function subtract(out, a, b) {\r\n out[0] = a[0] - b[0];\r\n out[1] = a[1] - b[1];\r\n out[2] = a[2] - b[2];\r\n out[3] = a[3] - b[3];\r\n out[4] = a[4] - b[4];\r\n out[5] = a[5] - b[5];\r\n out[6] = a[6] - b[6];\r\n out[7] = a[7] - b[7];\r\n out[8] = a[8] - b[8];\r\n out[9] = a[9] - b[9];\r\n out[10] = a[10] - b[10];\r\n out[11] = a[11] - b[11];\r\n out[12] = a[12] - b[12];\r\n out[13] = a[13] - b[13];\r\n out[14] = a[14] - b[14];\r\n out[15] = a[15] - b[15];\r\n return out;\r\n}\r\n\r\n/**\r\n * Multiply each element of the matrix by a scalar.\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {mat4} a the matrix to scale\r\n * @param {Number} b amount to scale the matrix's elements by\r\n * @returns {mat4} out\r\n */\r\nexport function multiplyScalar(out, a, b) {\r\n out[0] = a[0] * b;\r\n out[1] = a[1] * b;\r\n out[2] = a[2] * b;\r\n out[3] = a[3] * b;\r\n out[4] = a[4] * b;\r\n out[5] = a[5] * b;\r\n out[6] = a[6] * b;\r\n out[7] = a[7] * b;\r\n out[8] = a[8] * b;\r\n out[9] = a[9] * b;\r\n out[10] = a[10] * b;\r\n out[11] = a[11] * b;\r\n out[12] = a[12] * b;\r\n out[13] = a[13] * b;\r\n out[14] = a[14] * b;\r\n out[15] = a[15] * b;\r\n return out;\r\n}\r\n\r\n/**\r\n * Adds two mat4's after multiplying each element of the second operand by a scalar value.\r\n *\r\n * @param {mat4} out the receiving vector\r\n * @param {mat4} a the first operand\r\n * @param {mat4} b the second operand\r\n * @param {Number} scale the amount to scale b's elements by before adding\r\n * @returns {mat4} out\r\n */\r\nexport function multiplyScalarAndAdd(out, a, b, scale) {\r\n out[0] = a[0] + b[0] * scale;\r\n out[1] = a[1] + b[1] * scale;\r\n out[2] = a[2] + b[2] * scale;\r\n out[3] = a[3] + b[3] * scale;\r\n out[4] = a[4] + b[4] * scale;\r\n out[5] = a[5] + b[5] * scale;\r\n out[6] = a[6] + b[6] * scale;\r\n out[7] = a[7] + b[7] * scale;\r\n out[8] = a[8] + b[8] * scale;\r\n out[9] = a[9] + b[9] * scale;\r\n out[10] = a[10] + b[10] * scale;\r\n out[11] = a[11] + b[11] * scale;\r\n out[12] = a[12] + b[12] * scale;\r\n out[13] = a[13] + b[13] * scale;\r\n out[14] = a[14] + b[14] * scale;\r\n out[15] = a[15] + b[15] * scale;\r\n return out;\r\n}\r\n\r\n/**\r\n * Returns whether or not the matrices have exactly the same elements in the same position (when compared with ===)\r\n *\r\n * @param {mat4} a The first matrix.\r\n * @param {mat4} b The second matrix.\r\n * @returns {Boolean} True if the matrices are equal, false otherwise.\r\n */\r\nexport function exactEquals(a, b) {\r\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3] && a[4] === b[4] && a[5] === b[5] && a[6] === b[6] && a[7] === b[7] && a[8] === b[8] && a[9] === b[9] && a[10] === b[10] && a[11] === b[11] && a[12] === b[12] && a[13] === b[13] && a[14] === b[14] && a[15] === b[15];\r\n}\r\n\r\n/**\r\n * Returns whether or not the matrices have approximately the same elements in the same position.\r\n *\r\n * @param {mat4} a The first matrix.\r\n * @param {mat4} b The second matrix.\r\n * @returns {Boolean} True if the matrices are equal, false otherwise.\r\n */\r\nexport function equals(a, b) {\r\n var a0 = a[0],\r\n a1 = a[1],\r\n a2 = a[2],\r\n a3 = a[3];\r\n var a4 = a[4],\r\n a5 = a[5],\r\n a6 = a[6],\r\n a7 = a[7];\r\n var a8 = a[8],\r\n a9 = a[9],\r\n a10 = a[10],\r\n a11 = a[11];\r\n var a12 = a[12],\r\n a13 = a[13],\r\n a14 = a[14],\r\n a15 = a[15];\r\n\r\n var b0 = b[0],\r\n b1 = b[1],\r\n b2 = b[2],\r\n b3 = b[3];\r\n var b4 = b[4],\r\n b5 = b[5],\r\n b6 = b[6],\r\n b7 = b[7];\r\n var b8 = b[8],\r\n b9 = b[9],\r\n b10 = b[10],\r\n b11 = b[11];\r\n var b12 = b[12],\r\n b13 = b[13],\r\n b14 = b[14],\r\n b15 = b[15];\r\n\r\n return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)) && Math.abs(a3 - b3) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a3), Math.abs(b3)) && Math.abs(a4 - b4) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a4), Math.abs(b4)) && Math.abs(a5 - b5) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a5), Math.abs(b5)) && Math.abs(a6 - b6) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a6), Math.abs(b6)) && Math.abs(a7 - b7) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a7), Math.abs(b7)) && Math.abs(a8 - b8) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a8), Math.abs(b8)) && Math.abs(a9 - b9) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a9), Math.abs(b9)) && Math.abs(a10 - b10) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a10), Math.abs(b10)) && Math.abs(a11 - b11) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a11), Math.abs(b11)) && Math.abs(a12 - b12) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a12), Math.abs(b12)) && Math.abs(a13 - b13) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a13), Math.abs(b13)) && Math.abs(a14 - b14) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a14), Math.abs(b14)) && Math.abs(a15 - b15) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a15), Math.abs(b15));\r\n}\r\n\r\n/**\r\n * Alias for {@link mat4.multiply}\r\n * @function\r\n */\r\nexport var mul = multiply;\r\n\r\n/**\r\n * Alias for {@link mat4.subtract}\r\n * @function\r\n */\r\nexport var sub = subtract;","import * as glMatrix from \"./common.js\";\r\nimport * as mat3 from \"./mat3.js\";\r\nimport * as vec3 from \"./vec3.js\";\r\nimport * as vec4 from \"./vec4.js\";\r\n\r\n/**\r\n * Quaternion\r\n * @module quat\r\n */\r\n\r\n/**\r\n * Creates a new identity quat\r\n *\r\n * @returns {quat} a new quaternion\r\n */\r\nexport function create() {\r\n var out = new glMatrix.ARRAY_TYPE(4);\r\n if (glMatrix.ARRAY_TYPE != Float32Array) {\r\n out[0] = 0;\r\n out[1] = 0;\r\n out[2] = 0;\r\n }\r\n out[3] = 1;\r\n return out;\r\n}\r\n\r\n/**\r\n * Set a quat to the identity quaternion\r\n *\r\n * @param {quat} out the receiving quaternion\r\n * @returns {quat} out\r\n */\r\nexport function identity(out) {\r\n out[0] = 0;\r\n out[1] = 0;\r\n out[2] = 0;\r\n out[3] = 1;\r\n return out;\r\n}\r\n\r\n/**\r\n * Sets a quat from the given angle and rotation axis,\r\n * then returns it.\r\n *\r\n * @param {quat} out the receiving quaternion\r\n * @param {vec3} axis the axis around which to rotate\r\n * @param {Number} rad the angle in radians\r\n * @returns {quat} out\r\n **/\r\nexport function setAxisAngle(out, axis, rad) {\r\n rad = rad * 0.5;\r\n var s = Math.sin(rad);\r\n out[0] = s * axis[0];\r\n out[1] = s * axis[1];\r\n out[2] = s * axis[2];\r\n out[3] = Math.cos(rad);\r\n return out;\r\n}\r\n\r\n/**\r\n * Gets the rotation axis and angle for a given\r\n * quaternion. If a quaternion is created with\r\n * setAxisAngle, this method will return the same\r\n * values as providied in the original parameter list\r\n * OR functionally equivalent values.\r\n * Example: The quaternion formed by axis [0, 0, 1] and\r\n * angle -90 is the same as the quaternion formed by\r\n * [0, 0, 1] and 270. This method favors the latter.\r\n * @param {vec3} out_axis Vector receiving the axis of rotation\r\n * @param {quat} q Quaternion to be decomposed\r\n * @return {Number} Angle, in radians, of the rotation\r\n */\r\nexport function getAxisAngle(out_axis, q) {\r\n var rad = Math.acos(q[3]) * 2.0;\r\n var s = Math.sin(rad / 2.0);\r\n if (s > glMatrix.EPSILON) {\r\n out_axis[0] = q[0] / s;\r\n out_axis[1] = q[1] / s;\r\n out_axis[2] = q[2] / s;\r\n } else {\r\n // If s is zero, return any axis (no rotation - axis does not matter)\r\n out_axis[0] = 1;\r\n out_axis[1] = 0;\r\n out_axis[2] = 0;\r\n }\r\n return rad;\r\n}\r\n\r\n/**\r\n * Multiplies two quat's\r\n *\r\n * @param {quat} out the receiving quaternion\r\n * @param {quat} a the first operand\r\n * @param {quat} b the second operand\r\n * @returns {quat} out\r\n */\r\nexport function multiply(out, a, b) {\r\n var ax = a[0],\r\n ay = a[1],\r\n az = a[2],\r\n aw = a[3];\r\n var bx = b[0],\r\n by = b[1],\r\n bz = b[2],\r\n bw = b[3];\r\n\r\n out[0] = ax * bw + aw * bx + ay * bz - az * by;\r\n out[1] = ay * bw + aw * by + az * bx - ax * bz;\r\n out[2] = az * bw + aw * bz + ax * by - ay * bx;\r\n out[3] = aw * bw - ax * bx - ay * by - az * bz;\r\n return out;\r\n}\r\n\r\n/**\r\n * Rotates a quaternion by the given angle about the X axis\r\n *\r\n * @param {quat} out quat receiving operation result\r\n * @param {quat} a quat to rotate\r\n * @param {number} rad angle (in radians) to rotate\r\n * @returns {quat} out\r\n */\r\nexport function rotateX(out, a, rad) {\r\n rad *= 0.5;\r\n\r\n var ax = a[0],\r\n ay = a[1],\r\n az = a[2],\r\n aw = a[3];\r\n var bx = Math.sin(rad),\r\n bw = Math.cos(rad);\r\n\r\n out[0] = ax * bw + aw * bx;\r\n out[1] = ay * bw + az * bx;\r\n out[2] = az * bw - ay * bx;\r\n out[3] = aw * bw - ax * bx;\r\n return out;\r\n}\r\n\r\n/**\r\n * Rotates a quaternion by the given angle about the Y axis\r\n *\r\n * @param {quat} out quat receiving operation result\r\n * @param {quat} a quat to rotate\r\n * @param {number} rad angle (in radians) to rotate\r\n * @returns {quat} out\r\n */\r\nexport function rotateY(out, a, rad) {\r\n rad *= 0.5;\r\n\r\n var ax = a[0],\r\n ay = a[1],\r\n az = a[2],\r\n aw = a[3];\r\n var by = Math.sin(rad),\r\n bw = Math.cos(rad);\r\n\r\n out[0] = ax * bw - az * by;\r\n out[1] = ay * bw + aw * by;\r\n out[2] = az * bw + ax * by;\r\n out[3] = aw * bw - ay * by;\r\n return out;\r\n}\r\n\r\n/**\r\n * Rotates a quaternion by the given angle about the Z axis\r\n *\r\n * @param {quat} out quat receiving operation result\r\n * @param {quat} a quat to rotate\r\n * @param {number} rad angle (in radians) to rotate\r\n * @returns {quat} out\r\n */\r\nexport function rotateZ(out, a, rad) {\r\n rad *= 0.5;\r\n\r\n var ax = a[0],\r\n ay = a[1],\r\n az = a[2],\r\n aw = a[3];\r\n var bz = Math.sin(rad),\r\n bw = Math.cos(rad);\r\n\r\n out[0] = ax * bw + ay * bz;\r\n out[1] = ay * bw - ax * bz;\r\n out[2] = az * bw + aw * bz;\r\n out[3] = aw * bw - az * bz;\r\n return out;\r\n}\r\n\r\n/**\r\n * Calculates the W component of a quat from the X, Y, and Z components.\r\n * Assumes that quaternion is 1 unit in length.\r\n * Any existing W component will be ignored.\r\n *\r\n * @param {quat} out the receiving quaternion\r\n * @param {quat} a quat to calculate W component of\r\n * @returns {quat} out\r\n */\r\nexport function calculateW(out, a) {\r\n var x = a[0],\r\n y = a[1],\r\n z = a[2];\r\n\r\n out[0] = x;\r\n out[1] = y;\r\n out[2] = z;\r\n out[3] = Math.sqrt(Math.abs(1.0 - x * x - y * y - z * z));\r\n return out;\r\n}\r\n\r\n/**\r\n * Performs a spherical linear interpolation between two quat\r\n *\r\n * @param {quat} out the receiving quaternion\r\n * @param {quat} a the first operand\r\n * @param {quat} b the second operand\r\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\r\n * @returns {quat} out\r\n */\r\nexport function slerp(out, a, b, t) {\r\n // benchmarks:\r\n // http://jsperf.com/quaternion-slerp-implementations\r\n var ax = a[0],\r\n ay = a[1],\r\n az = a[2],\r\n aw = a[3];\r\n var bx = b[0],\r\n by = b[1],\r\n bz = b[2],\r\n bw = b[3];\r\n\r\n var omega = void 0,\r\n cosom = void 0,\r\n sinom = void 0,\r\n scale0 = void 0,\r\n scale1 = void 0;\r\n\r\n // calc cosine\r\n cosom = ax * bx + ay * by + az * bz + aw * bw;\r\n // adjust signs (if necessary)\r\n if (cosom < 0.0) {\r\n cosom = -cosom;\r\n bx = -bx;\r\n by = -by;\r\n bz = -bz;\r\n bw = -bw;\r\n }\r\n // calculate coefficients\r\n if (1.0 - cosom > glMatrix.EPSILON) {\r\n // standard case (slerp)\r\n omega = Math.acos(cosom);\r\n sinom = Math.sin(omega);\r\n scale0 = Math.sin((1.0 - t) * omega) / sinom;\r\n scale1 = Math.sin(t * omega) / sinom;\r\n } else {\r\n // \"from\" and \"to\" quaternions are very close\r\n // ... so we can do a linear interpolation\r\n scale0 = 1.0 - t;\r\n scale1 = t;\r\n }\r\n // calculate final values\r\n out[0] = scale0 * ax + scale1 * bx;\r\n out[1] = scale0 * ay + scale1 * by;\r\n out[2] = scale0 * az + scale1 * bz;\r\n out[3] = scale0 * aw + scale1 * bw;\r\n\r\n return out;\r\n}\r\n\r\n/**\r\n * Generates a random quaternion\r\n *\r\n * @param {quat} out the receiving quaternion\r\n * @returns {quat} out\r\n */\r\nexport function random(out) {\r\n // Implementation of http://planning.cs.uiuc.edu/node198.html\r\n // TODO: Calling random 3 times is probably not the fastest solution\r\n var u1 = glMatrix.RANDOM();\r\n var u2 = glMatrix.RANDOM();\r\n var u3 = glMatrix.RANDOM();\r\n\r\n var sqrt1MinusU1 = Math.sqrt(1 - u1);\r\n var sqrtU1 = Math.sqrt(u1);\r\n\r\n out[0] = sqrt1MinusU1 * Math.sin(2.0 * Math.PI * u2);\r\n out[1] = sqrt1MinusU1 * Math.cos(2.0 * Math.PI * u2);\r\n out[2] = sqrtU1 * Math.sin(2.0 * Math.PI * u3);\r\n out[3] = sqrtU1 * Math.cos(2.0 * Math.PI * u3);\r\n return out;\r\n}\r\n\r\n/**\r\n * Calculates the inverse of a quat\r\n *\r\n * @param {quat} out the receiving quaternion\r\n * @param {quat} a quat to calculate inverse of\r\n * @returns {quat} out\r\n */\r\nexport function invert(out, a) {\r\n var a0 = a[0],\r\n a1 = a[1],\r\n a2 = a[2],\r\n a3 = a[3];\r\n var dot = a0 * a0 + a1 * a1 + a2 * a2 + a3 * a3;\r\n var invDot = dot ? 1.0 / dot : 0;\r\n\r\n // TODO: Would be faster to return [0,0,0,0] immediately if dot == 0\r\n\r\n out[0] = -a0 * invDot;\r\n out[1] = -a1 * invDot;\r\n out[2] = -a2 * invDot;\r\n out[3] = a3 * invDot;\r\n return out;\r\n}\r\n\r\n/**\r\n * Calculates the conjugate of a quat\r\n * If the quaternion is normalized, this function is faster than quat.inverse and produces the same result.\r\n *\r\n * @param {quat} out the receiving quaternion\r\n * @param {quat} a quat to calculate conjugate of\r\n * @returns {quat} out\r\n */\r\nexport function conjugate(out, a) {\r\n out[0] = -a[0];\r\n out[1] = -a[1];\r\n out[2] = -a[2];\r\n out[3] = a[3];\r\n return out;\r\n}\r\n\r\n/**\r\n * Creates a quaternion from the given 3x3 rotation matrix.\r\n *\r\n * NOTE: The resultant quaternion is not normalized, so you should be sure\r\n * to renormalize the quaternion yourself where necessary.\r\n *\r\n * @param {quat} out the receiving quaternion\r\n * @param {mat3} m rotation matrix\r\n * @returns {quat} out\r\n * @function\r\n */\r\nexport function fromMat3(out, m) {\r\n // Algorithm in Ken Shoemake's article in 1987 SIGGRAPH course notes\r\n // article \"Quaternion Calculus and Fast Animation\".\r\n var fTrace = m[0] + m[4] + m[8];\r\n var fRoot = void 0;\r\n\r\n if (fTrace > 0.0) {\r\n // |w| > 1/2, may as well choose w > 1/2\r\n fRoot = Math.sqrt(fTrace + 1.0); // 2w\r\n out[3] = 0.5 * fRoot;\r\n fRoot = 0.5 / fRoot; // 1/(4w)\r\n out[0] = (m[5] - m[7]) * fRoot;\r\n out[1] = (m[6] - m[2]) * fRoot;\r\n out[2] = (m[1] - m[3]) * fRoot;\r\n } else {\r\n // |w| <= 1/2\r\n var i = 0;\r\n if (m[4] > m[0]) i = 1;\r\n if (m[8] > m[i * 3 + i]) i = 2;\r\n var j = (i + 1) % 3;\r\n var k = (i + 2) % 3;\r\n\r\n fRoot = Math.sqrt(m[i * 3 + i] - m[j * 3 + j] - m[k * 3 + k] + 1.0);\r\n out[i] = 0.5 * fRoot;\r\n fRoot = 0.5 / fRoot;\r\n out[3] = (m[j * 3 + k] - m[k * 3 + j]) * fRoot;\r\n out[j] = (m[j * 3 + i] + m[i * 3 + j]) * fRoot;\r\n out[k] = (m[k * 3 + i] + m[i * 3 + k]) * fRoot;\r\n }\r\n\r\n return out;\r\n}\r\n\r\n/**\r\n * Creates a quaternion from the given euler angle x, y, z.\r\n *\r\n * @param {quat} out the receiving quaternion\r\n * @param {x} Angle to rotate around X axis in degrees.\r\n * @param {y} Angle to rotate around Y axis in degrees.\r\n * @param {z} Angle to rotate around Z axis in degrees.\r\n * @returns {quat} out\r\n * @function\r\n */\r\nexport function fromEuler(out, x, y, z) {\r\n var halfToRad = 0.5 * Math.PI / 180.0;\r\n x *= halfToRad;\r\n y *= halfToRad;\r\n z *= halfToRad;\r\n\r\n var sx = Math.sin(x);\r\n var cx = Math.cos(x);\r\n var sy = Math.sin(y);\r\n var cy = Math.cos(y);\r\n var sz = Math.sin(z);\r\n var cz = Math.cos(z);\r\n\r\n out[0] = sx * cy * cz - cx * sy * sz;\r\n out[1] = cx * sy * cz + sx * cy * sz;\r\n out[2] = cx * cy * sz - sx * sy * cz;\r\n out[3] = cx * cy * cz + sx * sy * sz;\r\n\r\n return out;\r\n}\r\n\r\n/**\r\n * Returns a string representation of a quatenion\r\n *\r\n * @param {quat} a vector to represent as a string\r\n * @returns {String} string representation of the vector\r\n */\r\nexport function str(a) {\r\n return 'quat(' + a[0] + ', ' + a[1] + ', ' + a[2] + ', ' + a[3] + ')';\r\n}\r\n\r\n/**\r\n * Creates a new quat initialized with values from an existing quaternion\r\n *\r\n * @param {quat} a quaternion to clone\r\n * @returns {quat} a new quaternion\r\n * @function\r\n */\r\nexport var clone = vec4.clone;\r\n\r\n/**\r\n * Creates a new quat initialized with the given values\r\n *\r\n * @param {Number} x X component\r\n * @param {Number} y Y component\r\n * @param {Number} z Z component\r\n * @param {Number} w W component\r\n * @returns {quat} a new quaternion\r\n * @function\r\n */\r\nexport var fromValues = vec4.fromValues;\r\n\r\n/**\r\n * Copy the values from one quat to another\r\n *\r\n * @param {quat} out the receiving quaternion\r\n * @param {quat} a the source quaternion\r\n * @returns {quat} out\r\n * @function\r\n */\r\nexport var copy = vec4.copy;\r\n\r\n/**\r\n * Set the components of a quat to the given values\r\n *\r\n * @param {quat} out the receiving quaternion\r\n * @param {Number} x X component\r\n * @param {Number} y Y component\r\n * @param {Number} z Z component\r\n * @param {Number} w W component\r\n * @returns {quat} out\r\n * @function\r\n */\r\nexport var set = vec4.set;\r\n\r\n/**\r\n * Adds two quat's\r\n *\r\n * @param {quat} out the receiving quaternion\r\n * @param {quat} a the first operand\r\n * @param {quat} b the second operand\r\n * @returns {quat} out\r\n * @function\r\n */\r\nexport var add = vec4.add;\r\n\r\n/**\r\n * Alias for {@link quat.multiply}\r\n * @function\r\n */\r\nexport var mul = multiply;\r\n\r\n/**\r\n * Scales a quat by a scalar number\r\n *\r\n * @param {quat} out the receiving vector\r\n * @param {quat} a the vector to scale\r\n * @param {Number} b amount to scale the vector by\r\n * @returns {quat} out\r\n * @function\r\n */\r\nexport var scale = vec4.scale;\r\n\r\n/**\r\n * Calculates the dot product of two quat's\r\n *\r\n * @param {quat} a the first operand\r\n * @param {quat} b the second operand\r\n * @returns {Number} dot product of a and b\r\n * @function\r\n */\r\nexport var dot = vec4.dot;\r\n\r\n/**\r\n * Performs a linear interpolation between two quat's\r\n *\r\n * @param {quat} out the receiving quaternion\r\n * @param {quat} a the first operand\r\n * @param {quat} b the second operand\r\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\r\n * @returns {quat} out\r\n * @function\r\n */\r\nexport var lerp = vec4.lerp;\r\n\r\n/**\r\n * Calculates the length of a quat\r\n *\r\n * @param {quat} a vector to calculate length of\r\n * @returns {Number} length of a\r\n */\r\nexport var length = vec4.length;\r\n\r\n/**\r\n * Alias for {@link quat.length}\r\n * @function\r\n */\r\nexport var len = length;\r\n\r\n/**\r\n * Calculates the squared length of a quat\r\n *\r\n * @param {quat} a vector to calculate squared length of\r\n * @returns {Number} squared length of a\r\n * @function\r\n */\r\nexport var squaredLength = vec4.squaredLength;\r\n\r\n/**\r\n * Alias for {@link quat.squaredLength}\r\n * @function\r\n */\r\nexport var sqrLen = squaredLength;\r\n\r\n/**\r\n * Normalize a quat\r\n *\r\n * @param {quat} out the receiving quaternion\r\n * @param {quat} a quaternion to normalize\r\n * @returns {quat} out\r\n * @function\r\n */\r\nexport var normalize = vec4.normalize;\r\n\r\n/**\r\n * Returns whether or not the quaternions have exactly the same elements in the same position (when compared with ===)\r\n *\r\n * @param {quat} a The first quaternion.\r\n * @param {quat} b The second quaternion.\r\n * @returns {Boolean} True if the vectors are equal, false otherwise.\r\n */\r\nexport var exactEquals = vec4.exactEquals;\r\n\r\n/**\r\n * Returns whether or not the quaternions have approximately the same elements in the same position.\r\n *\r\n * @param {quat} a The first vector.\r\n * @param {quat} b The second vector.\r\n * @returns {Boolean} True if the vectors are equal, false otherwise.\r\n */\r\nexport var equals = vec4.equals;\r\n\r\n/**\r\n * Sets a quaternion to represent the shortest rotation from one\r\n * vector to another.\r\n *\r\n * Both vectors are assumed to be unit length.\r\n *\r\n * @param {quat} out the receiving quaternion.\r\n * @param {vec3} a the initial vector\r\n * @param {vec3} b the destination vector\r\n * @returns {quat} out\r\n */\r\nexport var rotationTo = function () {\r\n var tmpvec3 = vec3.create();\r\n var xUnitVec3 = vec3.fromValues(1, 0, 0);\r\n var yUnitVec3 = vec3.fromValues(0, 1, 0);\r\n\r\n return function (out, a, b) {\r\n var dot = vec3.dot(a, b);\r\n if (dot < -0.999999) {\r\n vec3.cross(tmpvec3, xUnitVec3, a);\r\n if (vec3.len(tmpvec3) < 0.000001) vec3.cross(tmpvec3, yUnitVec3, a);\r\n vec3.normalize(tmpvec3, tmpvec3);\r\n setAxisAngle(out, tmpvec3, Math.PI);\r\n return out;\r\n } else if (dot > 0.999999) {\r\n out[0] = 0;\r\n out[1] = 0;\r\n out[2] = 0;\r\n out[3] = 1;\r\n return out;\r\n } else {\r\n vec3.cross(tmpvec3, a, b);\r\n out[0] = tmpvec3[0];\r\n out[1] = tmpvec3[1];\r\n out[2] = tmpvec3[2];\r\n out[3] = 1 + dot;\r\n return normalize(out, out);\r\n }\r\n };\r\n}();\r\n\r\n/**\r\n * Performs a spherical linear interpolation with two control points\r\n *\r\n * @param {quat} out the receiving quaternion\r\n * @param {quat} a the first operand\r\n * @param {quat} b the second operand\r\n * @param {quat} c the third operand\r\n * @param {quat} d the fourth operand\r\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\r\n * @returns {quat} out\r\n */\r\nexport var sqlerp = function () {\r\n var temp1 = create();\r\n var temp2 = create();\r\n\r\n return function (out, a, b, c, d, t) {\r\n slerp(temp1, a, d, t);\r\n slerp(temp2, b, c, t);\r\n slerp(out, temp1, temp2, 2 * t * (1 - t));\r\n\r\n return out;\r\n };\r\n}();\r\n\r\n/**\r\n * Sets the specified quaternion with values corresponding to the given\r\n * axes. Each axis is a vec3 and is expected to be unit length and\r\n * perpendicular to all other specified axes.\r\n *\r\n * @param {vec3} view the vector representing the viewing direction\r\n * @param {vec3} right the vector representing the local \"right\" direction\r\n * @param {vec3} up the vector representing the local \"up\" direction\r\n * @returns {quat} out\r\n */\r\nexport var setAxes = function () {\r\n var matr = mat3.create();\r\n\r\n return function (out, view, right, up) {\r\n matr[0] = right[0];\r\n matr[3] = right[1];\r\n matr[6] = right[2];\r\n\r\n matr[1] = up[0];\r\n matr[4] = up[1];\r\n matr[7] = up[2];\r\n\r\n matr[2] = -view[0];\r\n matr[5] = -view[1];\r\n matr[8] = -view[2];\r\n\r\n return normalize(out, fromMat3(out, matr));\r\n };\r\n}();","import * as glMatrix from \"./common.js\";\r\n\r\n/**\r\n * 3 Dimensional Vector\r\n * @module vec3\r\n */\r\n\r\n/**\r\n * Creates a new, empty vec3\r\n *\r\n * @returns {vec3} a new 3D vector\r\n */\r\nexport function create() {\r\n var out = new glMatrix.ARRAY_TYPE(3);\r\n if (glMatrix.ARRAY_TYPE != Float32Array) {\r\n out[0] = 0;\r\n out[1] = 0;\r\n out[2] = 0;\r\n }\r\n return out;\r\n}\r\n\r\n/**\r\n * Creates a new vec3 initialized with values from an existing vector\r\n *\r\n * @param {vec3} a vector to clone\r\n * @returns {vec3} a new 3D vector\r\n */\r\nexport function clone(a) {\r\n var out = new glMatrix.ARRAY_TYPE(3);\r\n out[0] = a[0];\r\n out[1] = a[1];\r\n out[2] = a[2];\r\n return out;\r\n}\r\n\r\n/**\r\n * Calculates the length of a vec3\r\n *\r\n * @param {vec3} a vector to calculate length of\r\n * @returns {Number} length of a\r\n */\r\nexport function length(a) {\r\n var x = a[0];\r\n var y = a[1];\r\n var z = a[2];\r\n return Math.sqrt(x * x + y * y + z * z);\r\n}\r\n\r\n/**\r\n * Creates a new vec3 initialized with the given values\r\n *\r\n * @param {Number} x X component\r\n * @param {Number} y Y component\r\n * @param {Number} z Z component\r\n * @returns {vec3} a new 3D vector\r\n */\r\nexport function fromValues(x, y, z) {\r\n var out = new glMatrix.ARRAY_TYPE(3);\r\n out[0] = x;\r\n out[1] = y;\r\n out[2] = z;\r\n return out;\r\n}\r\n\r\n/**\r\n * Copy the values from one vec3 to another\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {vec3} a the source vector\r\n * @returns {vec3} out\r\n */\r\nexport function copy(out, a) {\r\n out[0] = a[0];\r\n out[1] = a[1];\r\n out[2] = a[2];\r\n return out;\r\n}\r\n\r\n/**\r\n * Set the components of a vec3 to the given values\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {Number} x X component\r\n * @param {Number} y Y component\r\n * @param {Number} z Z component\r\n * @returns {vec3} out\r\n */\r\nexport function set(out, x, y, z) {\r\n out[0] = x;\r\n out[1] = y;\r\n out[2] = z;\r\n return out;\r\n}\r\n\r\n/**\r\n * Adds two vec3's\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {vec3} a the first operand\r\n * @param {vec3} b the second operand\r\n * @returns {vec3} out\r\n */\r\nexport function add(out, a, b) {\r\n out[0] = a[0] + b[0];\r\n out[1] = a[1] + b[1];\r\n out[2] = a[2] + b[2];\r\n return out;\r\n}\r\n\r\n/**\r\n * Subtracts vector b from vector a\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {vec3} a the first operand\r\n * @param {vec3} b the second operand\r\n * @returns {vec3} out\r\n */\r\nexport function subtract(out, a, b) {\r\n out[0] = a[0] - b[0];\r\n out[1] = a[1] - b[1];\r\n out[2] = a[2] - b[2];\r\n return out;\r\n}\r\n\r\n/**\r\n * Multiplies two vec3's\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {vec3} a the first operand\r\n * @param {vec3} b the second operand\r\n * @returns {vec3} out\r\n */\r\nexport function multiply(out, a, b) {\r\n out[0] = a[0] * b[0];\r\n out[1] = a[1] * b[1];\r\n out[2] = a[2] * b[2];\r\n return out;\r\n}\r\n\r\n/**\r\n * Divides two vec3's\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {vec3} a the first operand\r\n * @param {vec3} b the second operand\r\n * @returns {vec3} out\r\n */\r\nexport function divide(out, a, b) {\r\n out[0] = a[0] / b[0];\r\n out[1] = a[1] / b[1];\r\n out[2] = a[2] / b[2];\r\n return out;\r\n}\r\n\r\n/**\r\n * Math.ceil the components of a vec3\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {vec3} a vector to ceil\r\n * @returns {vec3} out\r\n */\r\nexport function ceil(out, a) {\r\n out[0] = Math.ceil(a[0]);\r\n out[1] = Math.ceil(a[1]);\r\n out[2] = Math.ceil(a[2]);\r\n return out;\r\n}\r\n\r\n/**\r\n * Math.floor the components of a vec3\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {vec3} a vector to floor\r\n * @returns {vec3} out\r\n */\r\nexport function floor(out, a) {\r\n out[0] = Math.floor(a[0]);\r\n out[1] = Math.floor(a[1]);\r\n out[2] = Math.floor(a[2]);\r\n return out;\r\n}\r\n\r\n/**\r\n * Returns the minimum of two vec3's\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {vec3} a the first operand\r\n * @param {vec3} b the second operand\r\n * @returns {vec3} out\r\n */\r\nexport function min(out, a, b) {\r\n out[0] = Math.min(a[0], b[0]);\r\n out[1] = Math.min(a[1], b[1]);\r\n out[2] = Math.min(a[2], b[2]);\r\n return out;\r\n}\r\n\r\n/**\r\n * Returns the maximum of two vec3's\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {vec3} a the first operand\r\n * @param {vec3} b the second operand\r\n * @returns {vec3} out\r\n */\r\nexport function max(out, a, b) {\r\n out[0] = Math.max(a[0], b[0]);\r\n out[1] = Math.max(a[1], b[1]);\r\n out[2] = Math.max(a[2], b[2]);\r\n return out;\r\n}\r\n\r\n/**\r\n * Math.round the components of a vec3\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {vec3} a vector to round\r\n * @returns {vec3} out\r\n */\r\nexport function round(out, a) {\r\n out[0] = Math.round(a[0]);\r\n out[1] = Math.round(a[1]);\r\n out[2] = Math.round(a[2]);\r\n return out;\r\n}\r\n\r\n/**\r\n * Scales a vec3 by a scalar number\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {vec3} a the vector to scale\r\n * @param {Number} b amount to scale the vector by\r\n * @returns {vec3} out\r\n */\r\nexport function scale(out, a, b) {\r\n out[0] = a[0] * b;\r\n out[1] = a[1] * b;\r\n out[2] = a[2] * b;\r\n return out;\r\n}\r\n\r\n/**\r\n * Adds two vec3's after scaling the second operand by a scalar value\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {vec3} a the first operand\r\n * @param {vec3} b the second operand\r\n * @param {Number} scale the amount to scale b by before adding\r\n * @returns {vec3} out\r\n */\r\nexport function scaleAndAdd(out, a, b, scale) {\r\n out[0] = a[0] + b[0] * scale;\r\n out[1] = a[1] + b[1] * scale;\r\n out[2] = a[2] + b[2] * scale;\r\n return out;\r\n}\r\n\r\n/**\r\n * Calculates the euclidian distance between two vec3's\r\n *\r\n * @param {vec3} a the first operand\r\n * @param {vec3} b the second operand\r\n * @returns {Number} distance between a and b\r\n */\r\nexport function distance(a, b) {\r\n var x = b[0] - a[0];\r\n var y = b[1] - a[1];\r\n var z = b[2] - a[2];\r\n return Math.sqrt(x * x + y * y + z * z);\r\n}\r\n\r\n/**\r\n * Calculates the squared euclidian distance between two vec3's\r\n *\r\n * @param {vec3} a the first operand\r\n * @param {vec3} b the second operand\r\n * @returns {Number} squared distance between a and b\r\n */\r\nexport function squaredDistance(a, b) {\r\n var x = b[0] - a[0];\r\n var y = b[1] - a[1];\r\n var z = b[2] - a[2];\r\n return x * x + y * y + z * z;\r\n}\r\n\r\n/**\r\n * Calculates the squared length of a vec3\r\n *\r\n * @param {vec3} a vector to calculate squared length of\r\n * @returns {Number} squared length of a\r\n */\r\nexport function squaredLength(a) {\r\n var x = a[0];\r\n var y = a[1];\r\n var z = a[2];\r\n return x * x + y * y + z * z;\r\n}\r\n\r\n/**\r\n * Negates the components of a vec3\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {vec3} a vector to negate\r\n * @returns {vec3} out\r\n */\r\nexport function negate(out, a) {\r\n out[0] = -a[0];\r\n out[1] = -a[1];\r\n out[2] = -a[2];\r\n return out;\r\n}\r\n\r\n/**\r\n * Returns the inverse of the components of a vec3\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {vec3} a vector to invert\r\n * @returns {vec3} out\r\n */\r\nexport function inverse(out, a) {\r\n out[0] = 1.0 / a[0];\r\n out[1] = 1.0 / a[1];\r\n out[2] = 1.0 / a[2];\r\n return out;\r\n}\r\n\r\n/**\r\n * Normalize a vec3\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {vec3} a vector to normalize\r\n * @returns {vec3} out\r\n */\r\nexport function normalize(out, a) {\r\n var x = a[0];\r\n var y = a[1];\r\n var z = a[2];\r\n var len = x * x + y * y + z * z;\r\n if (len > 0) {\r\n //TODO: evaluate use of glm_invsqrt here?\r\n len = 1 / Math.sqrt(len);\r\n out[0] = a[0] * len;\r\n out[1] = a[1] * len;\r\n out[2] = a[2] * len;\r\n }\r\n return out;\r\n}\r\n\r\n/**\r\n * Calculates the dot product of two vec3's\r\n *\r\n * @param {vec3} a the first operand\r\n * @param {vec3} b the second operand\r\n * @returns {Number} dot product of a and b\r\n */\r\nexport function dot(a, b) {\r\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\r\n}\r\n\r\n/**\r\n * Computes the cross product of two vec3's\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {vec3} a the first operand\r\n * @param {vec3} b the second operand\r\n * @returns {vec3} out\r\n */\r\nexport function cross(out, a, b) {\r\n var ax = a[0],\r\n ay = a[1],\r\n az = a[2];\r\n var bx = b[0],\r\n by = b[1],\r\n bz = b[2];\r\n\r\n out[0] = ay * bz - az * by;\r\n out[1] = az * bx - ax * bz;\r\n out[2] = ax * by - ay * bx;\r\n return out;\r\n}\r\n\r\n/**\r\n * Performs a linear interpolation between two vec3's\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {vec3} a the first operand\r\n * @param {vec3} b the second operand\r\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\r\n * @returns {vec3} out\r\n */\r\nexport function lerp(out, a, b, t) {\r\n var ax = a[0];\r\n var ay = a[1];\r\n var az = a[2];\r\n out[0] = ax + t * (b[0] - ax);\r\n out[1] = ay + t * (b[1] - ay);\r\n out[2] = az + t * (b[2] - az);\r\n return out;\r\n}\r\n\r\n/**\r\n * Performs a hermite interpolation with two control points\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {vec3} a the first operand\r\n * @param {vec3} b the second operand\r\n * @param {vec3} c the third operand\r\n * @param {vec3} d the fourth operand\r\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\r\n * @returns {vec3} out\r\n */\r\nexport function hermite(out, a, b, c, d, t) {\r\n var factorTimes2 = t * t;\r\n var factor1 = factorTimes2 * (2 * t - 3) + 1;\r\n var factor2 = factorTimes2 * (t - 2) + t;\r\n var factor3 = factorTimes2 * (t - 1);\r\n var factor4 = factorTimes2 * (3 - 2 * t);\r\n\r\n out[0] = a[0] * factor1 + b[0] * factor2 + c[0] * factor3 + d[0] * factor4;\r\n out[1] = a[1] * factor1 + b[1] * factor2 + c[1] * factor3 + d[1] * factor4;\r\n out[2] = a[2] * factor1 + b[2] * factor2 + c[2] * factor3 + d[2] * factor4;\r\n\r\n return out;\r\n}\r\n\r\n/**\r\n * Performs a bezier interpolation with two control points\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {vec3} a the first operand\r\n * @param {vec3} b the second operand\r\n * @param {vec3} c the third operand\r\n * @param {vec3} d the fourth operand\r\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\r\n * @returns {vec3} out\r\n */\r\nexport function bezier(out, a, b, c, d, t) {\r\n var inverseFactor = 1 - t;\r\n var inverseFactorTimesTwo = inverseFactor * inverseFactor;\r\n var factorTimes2 = t * t;\r\n var factor1 = inverseFactorTimesTwo * inverseFactor;\r\n var factor2 = 3 * t * inverseFactorTimesTwo;\r\n var factor3 = 3 * factorTimes2 * inverseFactor;\r\n var factor4 = factorTimes2 * t;\r\n\r\n out[0] = a[0] * factor1 + b[0] * factor2 + c[0] * factor3 + d[0] * factor4;\r\n out[1] = a[1] * factor1 + b[1] * factor2 + c[1] * factor3 + d[1] * factor4;\r\n out[2] = a[2] * factor1 + b[2] * factor2 + c[2] * factor3 + d[2] * factor4;\r\n\r\n return out;\r\n}\r\n\r\n/**\r\n * Generates a random vector with the given scale\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {Number} [scale] Length of the resulting vector. If ommitted, a unit vector will be returned\r\n * @returns {vec3} out\r\n */\r\nexport function random(out, scale) {\r\n scale = scale || 1.0;\r\n\r\n var r = glMatrix.RANDOM() * 2.0 * Math.PI;\r\n var z = glMatrix.RANDOM() * 2.0 - 1.0;\r\n var zScale = Math.sqrt(1.0 - z * z) * scale;\r\n\r\n out[0] = Math.cos(r) * zScale;\r\n out[1] = Math.sin(r) * zScale;\r\n out[2] = z * scale;\r\n return out;\r\n}\r\n\r\n/**\r\n * Transforms the vec3 with a mat4.\r\n * 4th vector component is implicitly '1'\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {vec3} a the vector to transform\r\n * @param {mat4} m matrix to transform with\r\n * @returns {vec3} out\r\n */\r\nexport function transformMat4(out, a, m) {\r\n var x = a[0],\r\n y = a[1],\r\n z = a[2];\r\n var w = m[3] * x + m[7] * y + m[11] * z + m[15];\r\n w = w || 1.0;\r\n out[0] = (m[0] * x + m[4] * y + m[8] * z + m[12]) / w;\r\n out[1] = (m[1] * x + m[5] * y + m[9] * z + m[13]) / w;\r\n out[2] = (m[2] * x + m[6] * y + m[10] * z + m[14]) / w;\r\n return out;\r\n}\r\n\r\n/**\r\n * Transforms the vec3 with a mat3.\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {vec3} a the vector to transform\r\n * @param {mat3} m the 3x3 matrix to transform with\r\n * @returns {vec3} out\r\n */\r\nexport function transformMat3(out, a, m) {\r\n var x = a[0],\r\n y = a[1],\r\n z = a[2];\r\n out[0] = x * m[0] + y * m[3] + z * m[6];\r\n out[1] = x * m[1] + y * m[4] + z * m[7];\r\n out[2] = x * m[2] + y * m[5] + z * m[8];\r\n return out;\r\n}\r\n\r\n/**\r\n * Transforms the vec3 with a quat\r\n * Can also be used for dual quaternions. (Multiply it with the real part)\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {vec3} a the vector to transform\r\n * @param {quat} q quaternion to transform with\r\n * @returns {vec3} out\r\n */\r\nexport function transformQuat(out, a, q) {\r\n // benchmarks: https://jsperf.com/quaternion-transform-vec3-implementations-fixed\r\n var qx = q[0],\r\n qy = q[1],\r\n qz = q[2],\r\n qw = q[3];\r\n var x = a[0],\r\n y = a[1],\r\n z = a[2];\r\n // var qvec = [qx, qy, qz];\r\n // var uv = vec3.cross([], qvec, a);\r\n var uvx = qy * z - qz * y,\r\n uvy = qz * x - qx * z,\r\n uvz = qx * y - qy * x;\r\n // var uuv = vec3.cross([], qvec, uv);\r\n var uuvx = qy * uvz - qz * uvy,\r\n uuvy = qz * uvx - qx * uvz,\r\n uuvz = qx * uvy - qy * uvx;\r\n // vec3.scale(uv, uv, 2 * w);\r\n var w2 = qw * 2;\r\n uvx *= w2;\r\n uvy *= w2;\r\n uvz *= w2;\r\n // vec3.scale(uuv, uuv, 2);\r\n uuvx *= 2;\r\n uuvy *= 2;\r\n uuvz *= 2;\r\n // return vec3.add(out, a, vec3.add(out, uv, uuv));\r\n out[0] = x + uvx + uuvx;\r\n out[1] = y + uvy + uuvy;\r\n out[2] = z + uvz + uuvz;\r\n return out;\r\n}\r\n\r\n/**\r\n * Rotate a 3D vector around the x-axis\r\n * @param {vec3} out The receiving vec3\r\n * @param {vec3} a The vec3 point to rotate\r\n * @param {vec3} b The origin of the rotation\r\n * @param {Number} c The angle of rotation\r\n * @returns {vec3} out\r\n */\r\nexport function rotateX(out, a, b, c) {\r\n var p = [],\r\n r = [];\r\n //Translate point to the origin\r\n p[0] = a[0] - b[0];\r\n p[1] = a[1] - b[1];\r\n p[2] = a[2] - b[2];\r\n\r\n //perform rotation\r\n r[0] = p[0];\r\n r[1] = p[1] * Math.cos(c) - p[2] * Math.sin(c);\r\n r[2] = p[1] * Math.sin(c) + p[2] * Math.cos(c);\r\n\r\n //translate to correct position\r\n out[0] = r[0] + b[0];\r\n out[1] = r[1] + b[1];\r\n out[2] = r[2] + b[2];\r\n\r\n return out;\r\n}\r\n\r\n/**\r\n * Rotate a 3D vector around the y-axis\r\n * @param {vec3} out The receiving vec3\r\n * @param {vec3} a The vec3 point to rotate\r\n * @param {vec3} b The origin of the rotation\r\n * @param {Number} c The angle of rotation\r\n * @returns {vec3} out\r\n */\r\nexport function rotateY(out, a, b, c) {\r\n var p = [],\r\n r = [];\r\n //Translate point to the origin\r\n p[0] = a[0] - b[0];\r\n p[1] = a[1] - b[1];\r\n p[2] = a[2] - b[2];\r\n\r\n //perform rotation\r\n r[0] = p[2] * Math.sin(c) + p[0] * Math.cos(c);\r\n r[1] = p[1];\r\n r[2] = p[2] * Math.cos(c) - p[0] * Math.sin(c);\r\n\r\n //translate to correct position\r\n out[0] = r[0] + b[0];\r\n out[1] = r[1] + b[1];\r\n out[2] = r[2] + b[2];\r\n\r\n return out;\r\n}\r\n\r\n/**\r\n * Rotate a 3D vector around the z-axis\r\n * @param {vec3} out The receiving vec3\r\n * @param {vec3} a The vec3 point to rotate\r\n * @param {vec3} b The origin of the rotation\r\n * @param {Number} c The angle of rotation\r\n * @returns {vec3} out\r\n */\r\nexport function rotateZ(out, a, b, c) {\r\n var p = [],\r\n r = [];\r\n //Translate point to the origin\r\n p[0] = a[0] - b[0];\r\n p[1] = a[1] - b[1];\r\n p[2] = a[2] - b[2];\r\n\r\n //perform rotation\r\n r[0] = p[0] * Math.cos(c) - p[1] * Math.sin(c);\r\n r[1] = p[0] * Math.sin(c) + p[1] * Math.cos(c);\r\n r[2] = p[2];\r\n\r\n //translate to correct position\r\n out[0] = r[0] + b[0];\r\n out[1] = r[1] + b[1];\r\n out[2] = r[2] + b[2];\r\n\r\n return out;\r\n}\r\n\r\n/**\r\n * Get the angle between two 3D vectors\r\n * @param {vec3} a The first operand\r\n * @param {vec3} b The second operand\r\n * @returns {Number} The angle in radians\r\n */\r\nexport function angle(a, b) {\r\n var tempA = fromValues(a[0], a[1], a[2]);\r\n var tempB = fromValues(b[0], b[1], b[2]);\r\n\r\n normalize(tempA, tempA);\r\n normalize(tempB, tempB);\r\n\r\n var cosine = dot(tempA, tempB);\r\n\r\n if (cosine > 1.0) {\r\n return 0;\r\n } else if (cosine < -1.0) {\r\n return Math.PI;\r\n } else {\r\n return Math.acos(cosine);\r\n }\r\n}\r\n\r\n/**\r\n * Returns a string representation of a vector\r\n *\r\n * @param {vec3} a vector to represent as a string\r\n * @returns {String} string representation of the vector\r\n */\r\nexport function str(a) {\r\n return 'vec3(' + a[0] + ', ' + a[1] + ', ' + a[2] + ')';\r\n}\r\n\r\n/**\r\n * Returns whether or not the vectors have exactly the same elements in the same position (when compared with ===)\r\n *\r\n * @param {vec3} a The first vector.\r\n * @param {vec3} b The second vector.\r\n * @returns {Boolean} True if the vectors are equal, false otherwise.\r\n */\r\nexport function exactEquals(a, b) {\r\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2];\r\n}\r\n\r\n/**\r\n * Returns whether or not the vectors have approximately the same elements in the same position.\r\n *\r\n * @param {vec3} a The first vector.\r\n * @param {vec3} b The second vector.\r\n * @returns {Boolean} True if the vectors are equal, false otherwise.\r\n */\r\nexport function equals(a, b) {\r\n var a0 = a[0],\r\n a1 = a[1],\r\n a2 = a[2];\r\n var b0 = b[0],\r\n b1 = b[1],\r\n b2 = b[2];\r\n return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2));\r\n}\r\n\r\n/**\r\n * Alias for {@link vec3.subtract}\r\n * @function\r\n */\r\nexport var sub = subtract;\r\n\r\n/**\r\n * Alias for {@link vec3.multiply}\r\n * @function\r\n */\r\nexport var mul = multiply;\r\n\r\n/**\r\n * Alias for {@link vec3.divide}\r\n * @function\r\n */\r\nexport var div = divide;\r\n\r\n/**\r\n * Alias for {@link vec3.distance}\r\n * @function\r\n */\r\nexport var dist = distance;\r\n\r\n/**\r\n * Alias for {@link vec3.squaredDistance}\r\n * @function\r\n */\r\nexport var sqrDist = squaredDistance;\r\n\r\n/**\r\n * Alias for {@link vec3.length}\r\n * @function\r\n */\r\nexport var len = length;\r\n\r\n/**\r\n * Alias for {@link vec3.squaredLength}\r\n * @function\r\n */\r\nexport var sqrLen = squaredLength;\r\n\r\n/**\r\n * Perform some operation over an array of vec3s.\r\n *\r\n * @param {Array} a the array of vectors to iterate over\r\n * @param {Number} stride Number of elements between the start of each vec3. If 0 assumes tightly packed\r\n * @param {Number} offset Number of elements to skip at the beginning of the array\r\n * @param {Number} count Number of vec3s to iterate over. If 0 iterates over entire array\r\n * @param {Function} fn Function to call for each vector in the array\r\n * @param {Object} [arg] additional argument to pass to fn\r\n * @returns {Array} a\r\n * @function\r\n */\r\nexport var forEach = function () {\r\n var vec = create();\r\n\r\n return function (a, stride, offset, count, fn, arg) {\r\n var i = void 0,\r\n l = void 0;\r\n if (!stride) {\r\n stride = 3;\r\n }\r\n\r\n if (!offset) {\r\n offset = 0;\r\n }\r\n\r\n if (count) {\r\n l = Math.min(count * stride + offset, a.length);\r\n } else {\r\n l = a.length;\r\n }\r\n\r\n for (i = offset; i < l; i += stride) {\r\n vec[0] = a[i];vec[1] = a[i + 1];vec[2] = a[i + 2];\r\n fn(vec, vec, arg);\r\n a[i] = vec[0];a[i + 1] = vec[1];a[i + 2] = vec[2];\r\n }\r\n\r\n return a;\r\n };\r\n}();","import * as glMatrix from \"./common.js\";\r\n\r\n/**\r\n * 4 Dimensional Vector\r\n * @module vec4\r\n */\r\n\r\n/**\r\n * Creates a new, empty vec4\r\n *\r\n * @returns {vec4} a new 4D vector\r\n */\r\nexport function create() {\r\n var out = new glMatrix.ARRAY_TYPE(4);\r\n if (glMatrix.ARRAY_TYPE != Float32Array) {\r\n out[0] = 0;\r\n out[1] = 0;\r\n out[2] = 0;\r\n out[3] = 0;\r\n }\r\n return out;\r\n}\r\n\r\n/**\r\n * Creates a new vec4 initialized with values from an existing vector\r\n *\r\n * @param {vec4} a vector to clone\r\n * @returns {vec4} a new 4D vector\r\n */\r\nexport function clone(a) {\r\n var out = new glMatrix.ARRAY_TYPE(4);\r\n out[0] = a[0];\r\n out[1] = a[1];\r\n out[2] = a[2];\r\n out[3] = a[3];\r\n return out;\r\n}\r\n\r\n/**\r\n * Creates a new vec4 initialized with the given values\r\n *\r\n * @param {Number} x X component\r\n * @param {Number} y Y component\r\n * @param {Number} z Z component\r\n * @param {Number} w W component\r\n * @returns {vec4} a new 4D vector\r\n */\r\nexport function fromValues(x, y, z, w) {\r\n var out = new glMatrix.ARRAY_TYPE(4);\r\n out[0] = x;\r\n out[1] = y;\r\n out[2] = z;\r\n out[3] = w;\r\n return out;\r\n}\r\n\r\n/**\r\n * Copy the values from one vec4 to another\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {vec4} a the source vector\r\n * @returns {vec4} out\r\n */\r\nexport function copy(out, a) {\r\n out[0] = a[0];\r\n out[1] = a[1];\r\n out[2] = a[2];\r\n out[3] = a[3];\r\n return out;\r\n}\r\n\r\n/**\r\n * Set the components of a vec4 to the given values\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {Number} x X component\r\n * @param {Number} y Y component\r\n * @param {Number} z Z component\r\n * @param {Number} w W component\r\n * @returns {vec4} out\r\n */\r\nexport function set(out, x, y, z, w) {\r\n out[0] = x;\r\n out[1] = y;\r\n out[2] = z;\r\n out[3] = w;\r\n return out;\r\n}\r\n\r\n/**\r\n * Adds two vec4's\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {vec4} a the first operand\r\n * @param {vec4} b the second operand\r\n * @returns {vec4} out\r\n */\r\nexport function add(out, a, b) {\r\n out[0] = a[0] + b[0];\r\n out[1] = a[1] + b[1];\r\n out[2] = a[2] + b[2];\r\n out[3] = a[3] + b[3];\r\n return out;\r\n}\r\n\r\n/**\r\n * Subtracts vector b from vector a\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {vec4} a the first operand\r\n * @param {vec4} b the second operand\r\n * @returns {vec4} out\r\n */\r\nexport function subtract(out, a, b) {\r\n out[0] = a[0] - b[0];\r\n out[1] = a[1] - b[1];\r\n out[2] = a[2] - b[2];\r\n out[3] = a[3] - b[3];\r\n return out;\r\n}\r\n\r\n/**\r\n * Multiplies two vec4's\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {vec4} a the first operand\r\n * @param {vec4} b the second operand\r\n * @returns {vec4} out\r\n */\r\nexport function multiply(out, a, b) {\r\n out[0] = a[0] * b[0];\r\n out[1] = a[1] * b[1];\r\n out[2] = a[2] * b[2];\r\n out[3] = a[3] * b[3];\r\n return out;\r\n}\r\n\r\n/**\r\n * Divides two vec4's\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {vec4} a the first operand\r\n * @param {vec4} b the second operand\r\n * @returns {vec4} out\r\n */\r\nexport function divide(out, a, b) {\r\n out[0] = a[0] / b[0];\r\n out[1] = a[1] / b[1];\r\n out[2] = a[2] / b[2];\r\n out[3] = a[3] / b[3];\r\n return out;\r\n}\r\n\r\n/**\r\n * Math.ceil the components of a vec4\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {vec4} a vector to ceil\r\n * @returns {vec4} out\r\n */\r\nexport function ceil(out, a) {\r\n out[0] = Math.ceil(a[0]);\r\n out[1] = Math.ceil(a[1]);\r\n out[2] = Math.ceil(a[2]);\r\n out[3] = Math.ceil(a[3]);\r\n return out;\r\n}\r\n\r\n/**\r\n * Math.floor the components of a vec4\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {vec4} a vector to floor\r\n * @returns {vec4} out\r\n */\r\nexport function floor(out, a) {\r\n out[0] = Math.floor(a[0]);\r\n out[1] = Math.floor(a[1]);\r\n out[2] = Math.floor(a[2]);\r\n out[3] = Math.floor(a[3]);\r\n return out;\r\n}\r\n\r\n/**\r\n * Returns the minimum of two vec4's\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {vec4} a the first operand\r\n * @param {vec4} b the second operand\r\n * @returns {vec4} out\r\n */\r\nexport function min(out, a, b) {\r\n out[0] = Math.min(a[0], b[0]);\r\n out[1] = Math.min(a[1], b[1]);\r\n out[2] = Math.min(a[2], b[2]);\r\n out[3] = Math.min(a[3], b[3]);\r\n return out;\r\n}\r\n\r\n/**\r\n * Returns the maximum of two vec4's\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {vec4} a the first operand\r\n * @param {vec4} b the second operand\r\n * @returns {vec4} out\r\n */\r\nexport function max(out, a, b) {\r\n out[0] = Math.max(a[0], b[0]);\r\n out[1] = Math.max(a[1], b[1]);\r\n out[2] = Math.max(a[2], b[2]);\r\n out[3] = Math.max(a[3], b[3]);\r\n return out;\r\n}\r\n\r\n/**\r\n * Math.round the components of a vec4\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {vec4} a vector to round\r\n * @returns {vec4} out\r\n */\r\nexport function round(out, a) {\r\n out[0] = Math.round(a[0]);\r\n out[1] = Math.round(a[1]);\r\n out[2] = Math.round(a[2]);\r\n out[3] = Math.round(a[3]);\r\n return out;\r\n}\r\n\r\n/**\r\n * Scales a vec4 by a scalar number\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {vec4} a the vector to scale\r\n * @param {Number} b amount to scale the vector by\r\n * @returns {vec4} out\r\n */\r\nexport function scale(out, a, b) {\r\n out[0] = a[0] * b;\r\n out[1] = a[1] * b;\r\n out[2] = a[2] * b;\r\n out[3] = a[3] * b;\r\n return out;\r\n}\r\n\r\n/**\r\n * Adds two vec4's after scaling the second operand by a scalar value\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {vec4} a the first operand\r\n * @param {vec4} b the second operand\r\n * @param {Number} scale the amount to scale b by before adding\r\n * @returns {vec4} out\r\n */\r\nexport function scaleAndAdd(out, a, b, scale) {\r\n out[0] = a[0] + b[0] * scale;\r\n out[1] = a[1] + b[1] * scale;\r\n out[2] = a[2] + b[2] * scale;\r\n out[3] = a[3] + b[3] * scale;\r\n return out;\r\n}\r\n\r\n/**\r\n * Calculates the euclidian distance between two vec4's\r\n *\r\n * @param {vec4} a the first operand\r\n * @param {vec4} b the second operand\r\n * @returns {Number} distance between a and b\r\n */\r\nexport function distance(a, b) {\r\n var x = b[0] - a[0];\r\n var y = b[1] - a[1];\r\n var z = b[2] - a[2];\r\n var w = b[3] - a[3];\r\n return Math.sqrt(x * x + y * y + z * z + w * w);\r\n}\r\n\r\n/**\r\n * Calculates the squared euclidian distance between two vec4's\r\n *\r\n * @param {vec4} a the first operand\r\n * @param {vec4} b the second operand\r\n * @returns {Number} squared distance between a and b\r\n */\r\nexport function squaredDistance(a, b) {\r\n var x = b[0] - a[0];\r\n var y = b[1] - a[1];\r\n var z = b[2] - a[2];\r\n var w = b[3] - a[3];\r\n return x * x + y * y + z * z + w * w;\r\n}\r\n\r\n/**\r\n * Calculates the length of a vec4\r\n *\r\n * @param {vec4} a vector to calculate length of\r\n * @returns {Number} length of a\r\n */\r\nexport function length(a) {\r\n var x = a[0];\r\n var y = a[1];\r\n var z = a[2];\r\n var w = a[3];\r\n return Math.sqrt(x * x + y * y + z * z + w * w);\r\n}\r\n\r\n/**\r\n * Calculates the squared length of a vec4\r\n *\r\n * @param {vec4} a vector to calculate squared length of\r\n * @returns {Number} squared length of a\r\n */\r\nexport function squaredLength(a) {\r\n var x = a[0];\r\n var y = a[1];\r\n var z = a[2];\r\n var w = a[3];\r\n return x * x + y * y + z * z + w * w;\r\n}\r\n\r\n/**\r\n * Negates the components of a vec4\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {vec4} a vector to negate\r\n * @returns {vec4} out\r\n */\r\nexport function negate(out, a) {\r\n out[0] = -a[0];\r\n out[1] = -a[1];\r\n out[2] = -a[2];\r\n out[3] = -a[3];\r\n return out;\r\n}\r\n\r\n/**\r\n * Returns the inverse of the components of a vec4\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {vec4} a vector to invert\r\n * @returns {vec4} out\r\n */\r\nexport function inverse(out, a) {\r\n out[0] = 1.0 / a[0];\r\n out[1] = 1.0 / a[1];\r\n out[2] = 1.0 / a[2];\r\n out[3] = 1.0 / a[3];\r\n return out;\r\n}\r\n\r\n/**\r\n * Normalize a vec4\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {vec4} a vector to normalize\r\n * @returns {vec4} out\r\n */\r\nexport function normalize(out, a) {\r\n var x = a[0];\r\n var y = a[1];\r\n var z = a[2];\r\n var w = a[3];\r\n var len = x * x + y * y + z * z + w * w;\r\n if (len > 0) {\r\n len = 1 / Math.sqrt(len);\r\n out[0] = x * len;\r\n out[1] = y * len;\r\n out[2] = z * len;\r\n out[3] = w * len;\r\n }\r\n return out;\r\n}\r\n\r\n/**\r\n * Calculates the dot product of two vec4's\r\n *\r\n * @param {vec4} a the first operand\r\n * @param {vec4} b the second operand\r\n * @returns {Number} dot product of a and b\r\n */\r\nexport function dot(a, b) {\r\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3];\r\n}\r\n\r\n/**\r\n * Performs a linear interpolation between two vec4's\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {vec4} a the first operand\r\n * @param {vec4} b the second operand\r\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\r\n * @returns {vec4} out\r\n */\r\nexport function lerp(out, a, b, t) {\r\n var ax = a[0];\r\n var ay = a[1];\r\n var az = a[2];\r\n var aw = a[3];\r\n out[0] = ax + t * (b[0] - ax);\r\n out[1] = ay + t * (b[1] - ay);\r\n out[2] = az + t * (b[2] - az);\r\n out[3] = aw + t * (b[3] - aw);\r\n return out;\r\n}\r\n\r\n/**\r\n * Generates a random vector with the given scale\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {Number} [scale] Length of the resulting vector. If ommitted, a unit vector will be returned\r\n * @returns {vec4} out\r\n */\r\nexport function random(out, scale) {\r\n scale = scale || 1.0;\r\n\r\n // Marsaglia, George. Choosing a Point from the Surface of a\r\n // Sphere. Ann. Math. Statist. 43 (1972), no. 2, 645--646.\r\n // http://projecteuclid.org/euclid.aoms/1177692644;\r\n var v1, v2, v3, v4;\r\n var s1, s2;\r\n do {\r\n v1 = glMatrix.RANDOM() * 2 - 1;\r\n v2 = glMatrix.RANDOM() * 2 - 1;\r\n s1 = v1 * v1 + v2 * v2;\r\n } while (s1 >= 1);\r\n do {\r\n v3 = glMatrix.RANDOM() * 2 - 1;\r\n v4 = glMatrix.RANDOM() * 2 - 1;\r\n s2 = v3 * v3 + v4 * v4;\r\n } while (s2 >= 1);\r\n\r\n var d = Math.sqrt((1 - s1) / s2);\r\n out[0] = scale * v1;\r\n out[1] = scale * v2;\r\n out[2] = scale * v3 * d;\r\n out[3] = scale * v4 * d;\r\n return out;\r\n}\r\n\r\n/**\r\n * Transforms the vec4 with a mat4.\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {vec4} a the vector to transform\r\n * @param {mat4} m matrix to transform with\r\n * @returns {vec4} out\r\n */\r\nexport function transformMat4(out, a, m) {\r\n var x = a[0],\r\n y = a[1],\r\n z = a[2],\r\n w = a[3];\r\n out[0] = m[0] * x + m[4] * y + m[8] * z + m[12] * w;\r\n out[1] = m[1] * x + m[5] * y + m[9] * z + m[13] * w;\r\n out[2] = m[2] * x + m[6] * y + m[10] * z + m[14] * w;\r\n out[3] = m[3] * x + m[7] * y + m[11] * z + m[15] * w;\r\n return out;\r\n}\r\n\r\n/**\r\n * Transforms the vec4 with a quat\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {vec4} a the vector to transform\r\n * @param {quat} q quaternion to transform with\r\n * @returns {vec4} out\r\n */\r\nexport function transformQuat(out, a, q) {\r\n var x = a[0],\r\n y = a[1],\r\n z = a[2];\r\n var qx = q[0],\r\n qy = q[1],\r\n qz = q[2],\r\n qw = q[3];\r\n\r\n // calculate quat * vec\r\n var ix = qw * x + qy * z - qz * y;\r\n var iy = qw * y + qz * x - qx * z;\r\n var iz = qw * z + qx * y - qy * x;\r\n var iw = -qx * x - qy * y - qz * z;\r\n\r\n // calculate result * inverse quat\r\n out[0] = ix * qw + iw * -qx + iy * -qz - iz * -qy;\r\n out[1] = iy * qw + iw * -qy + iz * -qx - ix * -qz;\r\n out[2] = iz * qw + iw * -qz + ix * -qy - iy * -qx;\r\n out[3] = a[3];\r\n return out;\r\n}\r\n\r\n/**\r\n * Returns a string representation of a vector\r\n *\r\n * @param {vec4} a vector to represent as a string\r\n * @returns {String} string representation of the vector\r\n */\r\nexport function str(a) {\r\n return 'vec4(' + a[0] + ', ' + a[1] + ', ' + a[2] + ', ' + a[3] + ')';\r\n}\r\n\r\n/**\r\n * Returns whether or not the vectors have exactly the same elements in the same position (when compared with ===)\r\n *\r\n * @param {vec4} a The first vector.\r\n * @param {vec4} b The second vector.\r\n * @returns {Boolean} True if the vectors are equal, false otherwise.\r\n */\r\nexport function exactEquals(a, b) {\r\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3];\r\n}\r\n\r\n/**\r\n * Returns whether or not the vectors have approximately the same elements in the same position.\r\n *\r\n * @param {vec4} a The first vector.\r\n * @param {vec4} b The second vector.\r\n * @returns {Boolean} True if the vectors are equal, false otherwise.\r\n */\r\nexport function equals(a, b) {\r\n var a0 = a[0],\r\n a1 = a[1],\r\n a2 = a[2],\r\n a3 = a[3];\r\n var b0 = b[0],\r\n b1 = b[1],\r\n b2 = b[2],\r\n b3 = b[3];\r\n return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)) && Math.abs(a3 - b3) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a3), Math.abs(b3));\r\n}\r\n\r\n/**\r\n * Alias for {@link vec4.subtract}\r\n * @function\r\n */\r\nexport var sub = subtract;\r\n\r\n/**\r\n * Alias for {@link vec4.multiply}\r\n * @function\r\n */\r\nexport var mul = multiply;\r\n\r\n/**\r\n * Alias for {@link vec4.divide}\r\n * @function\r\n */\r\nexport var div = divide;\r\n\r\n/**\r\n * Alias for {@link vec4.distance}\r\n * @function\r\n */\r\nexport var dist = distance;\r\n\r\n/**\r\n * Alias for {@link vec4.squaredDistance}\r\n * @function\r\n */\r\nexport var sqrDist = squaredDistance;\r\n\r\n/**\r\n * Alias for {@link vec4.length}\r\n * @function\r\n */\r\nexport var len = length;\r\n\r\n/**\r\n * Alias for {@link vec4.squaredLength}\r\n * @function\r\n */\r\nexport var sqrLen = squaredLength;\r\n\r\n/**\r\n * Perform some operation over an array of vec4s.\r\n *\r\n * @param {Array} a the array of vectors to iterate over\r\n * @param {Number} stride Number of elements between the start of each vec4. If 0 assumes tightly packed\r\n * @param {Number} offset Number of elements to skip at the beginning of the array\r\n * @param {Number} count Number of vec4s to iterate over. If 0 iterates over entire array\r\n * @param {Function} fn Function to call for each vector in the array\r\n * @param {Object} [arg] additional argument to pass to fn\r\n * @returns {Array} a\r\n * @function\r\n */\r\nexport var forEach = function () {\r\n var vec = create();\r\n\r\n return function (a, stride, offset, count, fn, arg) {\r\n var i = void 0,\r\n l = void 0;\r\n if (!stride) {\r\n stride = 4;\r\n }\r\n\r\n if (!offset) {\r\n offset = 0;\r\n }\r\n\r\n if (count) {\r\n l = Math.min(count * stride + offset, a.length);\r\n } else {\r\n l = a.length;\r\n }\r\n\r\n for (i = offset; i < l; i += stride) {\r\n vec[0] = a[i];vec[1] = a[i + 1];vec[2] = a[i + 2];vec[3] = a[i + 3];\r\n fn(vec, vec, arg);\r\n a[i] = vec[0];a[i + 1] = vec[1];a[i + 2] = vec[2];a[i + 3] = vec[3];\r\n }\r\n\r\n return a;\r\n };\r\n}();","import * as glMatrix from \"./common.js\";\r\nimport * as quat from \"./quat.js\";\r\nimport * as mat4 from \"./mat4.js\";\r\n\r\n/**\r\n * Dual Quaternion
\r\n * Format: [real, dual]
\r\n * Quaternion format: XYZW
\r\n * Make sure to have normalized dual quaternions, otherwise the functions may not work as intended.
\r\n * @module quat2\r\n */\r\n\r\n/**\r\n * Creates a new identity dual quat\r\n *\r\n * @returns {quat2} a new dual quaternion [real -> rotation, dual -> translation]\r\n */\r\nexport function create() {\r\n var dq = new glMatrix.ARRAY_TYPE(8);\r\n if (glMatrix.ARRAY_TYPE != Float32Array) {\r\n dq[0] = 0;\r\n dq[1] = 0;\r\n dq[2] = 0;\r\n dq[4] = 0;\r\n dq[5] = 0;\r\n dq[6] = 0;\r\n dq[7] = 0;\r\n }\r\n dq[3] = 1;\r\n return dq;\r\n}\r\n\r\n/**\r\n * Creates a new quat initialized with values from an existing quaternion\r\n *\r\n * @param {quat2} a dual quaternion to clone\r\n * @returns {quat2} new dual quaternion\r\n * @function\r\n */\r\nexport function clone(a) {\r\n var dq = new glMatrix.ARRAY_TYPE(8);\r\n dq[0] = a[0];\r\n dq[1] = a[1];\r\n dq[2] = a[2];\r\n dq[3] = a[3];\r\n dq[4] = a[4];\r\n dq[5] = a[5];\r\n dq[6] = a[6];\r\n dq[7] = a[7];\r\n return dq;\r\n}\r\n\r\n/**\r\n * Creates a new dual quat initialized with the given values\r\n *\r\n * @param {Number} x1 X component\r\n * @param {Number} y1 Y component\r\n * @param {Number} z1 Z component\r\n * @param {Number} w1 W component\r\n * @param {Number} x2 X component\r\n * @param {Number} y2 Y component\r\n * @param {Number} z2 Z component\r\n * @param {Number} w2 W component\r\n * @returns {quat2} new dual quaternion\r\n * @function\r\n */\r\nexport function fromValues(x1, y1, z1, w1, x2, y2, z2, w2) {\r\n var dq = new glMatrix.ARRAY_TYPE(8);\r\n dq[0] = x1;\r\n dq[1] = y1;\r\n dq[2] = z1;\r\n dq[3] = w1;\r\n dq[4] = x2;\r\n dq[5] = y2;\r\n dq[6] = z2;\r\n dq[7] = w2;\r\n return dq;\r\n}\r\n\r\n/**\r\n * Creates a new dual quat from the given values (quat and translation)\r\n *\r\n * @param {Number} x1 X component\r\n * @param {Number} y1 Y component\r\n * @param {Number} z1 Z component\r\n * @param {Number} w1 W component\r\n * @param {Number} x2 X component (translation)\r\n * @param {Number} y2 Y component (translation)\r\n * @param {Number} z2 Z component (translation)\r\n * @returns {quat2} new dual quaternion\r\n * @function\r\n */\r\nexport function fromRotationTranslationValues(x1, y1, z1, w1, x2, y2, z2) {\r\n var dq = new glMatrix.ARRAY_TYPE(8);\r\n dq[0] = x1;\r\n dq[1] = y1;\r\n dq[2] = z1;\r\n dq[3] = w1;\r\n var ax = x2 * 0.5,\r\n ay = y2 * 0.5,\r\n az = z2 * 0.5;\r\n dq[4] = ax * w1 + ay * z1 - az * y1;\r\n dq[5] = ay * w1 + az * x1 - ax * z1;\r\n dq[6] = az * w1 + ax * y1 - ay * x1;\r\n dq[7] = -ax * x1 - ay * y1 - az * z1;\r\n return dq;\r\n}\r\n\r\n/**\r\n * Creates a dual quat from a quaternion and a translation\r\n *\r\n * @param {quat2} dual quaternion receiving operation result\r\n * @param {quat} q quaternion\r\n * @param {vec3} t tranlation vector\r\n * @returns {quat2} dual quaternion receiving operation result\r\n * @function\r\n */\r\nexport function fromRotationTranslation(out, q, t) {\r\n var ax = t[0] * 0.5,\r\n ay = t[1] * 0.5,\r\n az = t[2] * 0.5,\r\n bx = q[0],\r\n by = q[1],\r\n bz = q[2],\r\n bw = q[3];\r\n out[0] = bx;\r\n out[1] = by;\r\n out[2] = bz;\r\n out[3] = bw;\r\n out[4] = ax * bw + ay * bz - az * by;\r\n out[5] = ay * bw + az * bx - ax * bz;\r\n out[6] = az * bw + ax * by - ay * bx;\r\n out[7] = -ax * bx - ay * by - az * bz;\r\n return out;\r\n}\r\n\r\n/**\r\n * Creates a dual quat from a translation\r\n *\r\n * @param {quat2} dual quaternion receiving operation result\r\n * @param {vec3} t translation vector\r\n * @returns {quat2} dual quaternion receiving operation result\r\n * @function\r\n */\r\nexport function fromTranslation(out, t) {\r\n out[0] = 0;\r\n out[1] = 0;\r\n out[2] = 0;\r\n out[3] = 1;\r\n out[4] = t[0] * 0.5;\r\n out[5] = t[1] * 0.5;\r\n out[6] = t[2] * 0.5;\r\n out[7] = 0;\r\n return out;\r\n}\r\n\r\n/**\r\n * Creates a dual quat from a quaternion\r\n *\r\n * @param {quat2} dual quaternion receiving operation result\r\n * @param {quat} q the quaternion\r\n * @returns {quat2} dual quaternion receiving operation result\r\n * @function\r\n */\r\nexport function fromRotation(out, q) {\r\n out[0] = q[0];\r\n out[1] = q[1];\r\n out[2] = q[2];\r\n out[3] = q[3];\r\n out[4] = 0;\r\n out[5] = 0;\r\n out[6] = 0;\r\n out[7] = 0;\r\n return out;\r\n}\r\n\r\n/**\r\n * Creates a new dual quat from a matrix (4x4)\r\n *\r\n * @param {quat2} out the dual quaternion\r\n * @param {mat4} a the matrix\r\n * @returns {quat2} dual quat receiving operation result\r\n * @function\r\n */\r\nexport function fromMat4(out, a) {\r\n //TODO Optimize this\r\n var outer = quat.create();\r\n mat4.getRotation(outer, a);\r\n var t = new glMatrix.ARRAY_TYPE(3);\r\n mat4.getTranslation(t, a);\r\n fromRotationTranslation(out, outer, t);\r\n return out;\r\n}\r\n\r\n/**\r\n * Copy the values from one dual quat to another\r\n *\r\n * @param {quat2} out the receiving dual quaternion\r\n * @param {quat2} a the source dual quaternion\r\n * @returns {quat2} out\r\n * @function\r\n */\r\nexport function copy(out, a) {\r\n out[0] = a[0];\r\n out[1] = a[1];\r\n out[2] = a[2];\r\n out[3] = a[3];\r\n out[4] = a[4];\r\n out[5] = a[5];\r\n out[6] = a[6];\r\n out[7] = a[7];\r\n return out;\r\n}\r\n\r\n/**\r\n * Set a dual quat to the identity dual quaternion\r\n *\r\n * @param {quat2} out the receiving quaternion\r\n * @returns {quat2} out\r\n */\r\nexport function identity(out) {\r\n out[0] = 0;\r\n out[1] = 0;\r\n out[2] = 0;\r\n out[3] = 1;\r\n out[4] = 0;\r\n out[5] = 0;\r\n out[6] = 0;\r\n out[7] = 0;\r\n return out;\r\n}\r\n\r\n/**\r\n * Set the components of a dual quat to the given values\r\n *\r\n * @param {quat2} out the receiving quaternion\r\n * @param {Number} x1 X component\r\n * @param {Number} y1 Y component\r\n * @param {Number} z1 Z component\r\n * @param {Number} w1 W component\r\n * @param {Number} x2 X component\r\n * @param {Number} y2 Y component\r\n * @param {Number} z2 Z component\r\n * @param {Number} w2 W component\r\n * @returns {quat2} out\r\n * @function\r\n */\r\nexport function set(out, x1, y1, z1, w1, x2, y2, z2, w2) {\r\n out[0] = x1;\r\n out[1] = y1;\r\n out[2] = z1;\r\n out[3] = w1;\r\n\r\n out[4] = x2;\r\n out[5] = y2;\r\n out[6] = z2;\r\n out[7] = w2;\r\n return out;\r\n}\r\n\r\n/**\r\n * Gets the real part of a dual quat\r\n * @param {quat} out real part\r\n * @param {quat2} a Dual Quaternion\r\n * @return {quat} real part\r\n */\r\nexport var getReal = quat.copy;\r\n\r\n/**\r\n * Gets the dual part of a dual quat\r\n * @param {quat} out dual part\r\n * @param {quat2} a Dual Quaternion\r\n * @return {quat} dual part\r\n */\r\nexport function getDual(out, a) {\r\n out[0] = a[4];\r\n out[1] = a[5];\r\n out[2] = a[6];\r\n out[3] = a[7];\r\n return out;\r\n}\r\n\r\n/**\r\n * Set the real component of a dual quat to the given quaternion\r\n *\r\n * @param {quat2} out the receiving quaternion\r\n * @param {quat} q a quaternion representing the real part\r\n * @returns {quat2} out\r\n * @function\r\n */\r\nexport var setReal = quat.copy;\r\n\r\n/**\r\n * Set the dual component of a dual quat to the given quaternion\r\n *\r\n * @param {quat2} out the receiving quaternion\r\n * @param {quat} q a quaternion representing the dual part\r\n * @returns {quat2} out\r\n * @function\r\n */\r\nexport function setDual(out, q) {\r\n out[4] = q[0];\r\n out[5] = q[1];\r\n out[6] = q[2];\r\n out[7] = q[3];\r\n return out;\r\n}\r\n\r\n/**\r\n * Gets the translation of a normalized dual quat\r\n * @param {vec3} out translation\r\n * @param {quat2} a Dual Quaternion to be decomposed\r\n * @return {vec3} translation\r\n */\r\nexport function getTranslation(out, a) {\r\n var ax = a[4],\r\n ay = a[5],\r\n az = a[6],\r\n aw = a[7],\r\n bx = -a[0],\r\n by = -a[1],\r\n bz = -a[2],\r\n bw = a[3];\r\n out[0] = (ax * bw + aw * bx + ay * bz - az * by) * 2;\r\n out[1] = (ay * bw + aw * by + az * bx - ax * bz) * 2;\r\n out[2] = (az * bw + aw * bz + ax * by - ay * bx) * 2;\r\n return out;\r\n}\r\n\r\n/**\r\n * Translates a dual quat by the given vector\r\n *\r\n * @param {quat2} out the receiving dual quaternion\r\n * @param {quat2} a the dual quaternion to translate\r\n * @param {vec3} v vector to translate by\r\n * @returns {quat2} out\r\n */\r\nexport function translate(out, a, v) {\r\n var ax1 = a[0],\r\n ay1 = a[1],\r\n az1 = a[2],\r\n aw1 = a[3],\r\n bx1 = v[0] * 0.5,\r\n by1 = v[1] * 0.5,\r\n bz1 = v[2] * 0.5,\r\n ax2 = a[4],\r\n ay2 = a[5],\r\n az2 = a[6],\r\n aw2 = a[7];\r\n out[0] = ax1;\r\n out[1] = ay1;\r\n out[2] = az1;\r\n out[3] = aw1;\r\n out[4] = aw1 * bx1 + ay1 * bz1 - az1 * by1 + ax2;\r\n out[5] = aw1 * by1 + az1 * bx1 - ax1 * bz1 + ay2;\r\n out[6] = aw1 * bz1 + ax1 * by1 - ay1 * bx1 + az2;\r\n out[7] = -ax1 * bx1 - ay1 * by1 - az1 * bz1 + aw2;\r\n return out;\r\n}\r\n\r\n/**\r\n * Rotates a dual quat around the X axis\r\n *\r\n * @param {quat2} out the receiving dual quaternion\r\n * @param {quat2} a the dual quaternion to rotate\r\n * @param {number} rad how far should the rotation be\r\n * @returns {quat2} out\r\n */\r\nexport function rotateX(out, a, rad) {\r\n var bx = -a[0],\r\n by = -a[1],\r\n bz = -a[2],\r\n bw = a[3],\r\n ax = a[4],\r\n ay = a[5],\r\n az = a[6],\r\n aw = a[7],\r\n ax1 = ax * bw + aw * bx + ay * bz - az * by,\r\n ay1 = ay * bw + aw * by + az * bx - ax * bz,\r\n az1 = az * bw + aw * bz + ax * by - ay * bx,\r\n aw1 = aw * bw - ax * bx - ay * by - az * bz;\r\n quat.rotateX(out, a, rad);\r\n bx = out[0];\r\n by = out[1];\r\n bz = out[2];\r\n bw = out[3];\r\n out[4] = ax1 * bw + aw1 * bx + ay1 * bz - az1 * by;\r\n out[5] = ay1 * bw + aw1 * by + az1 * bx - ax1 * bz;\r\n out[6] = az1 * bw + aw1 * bz + ax1 * by - ay1 * bx;\r\n out[7] = aw1 * bw - ax1 * bx - ay1 * by - az1 * bz;\r\n return out;\r\n}\r\n\r\n/**\r\n * Rotates a dual quat around the Y axis\r\n *\r\n * @param {quat2} out the receiving dual quaternion\r\n * @param {quat2} a the dual quaternion to rotate\r\n * @param {number} rad how far should the rotation be\r\n * @returns {quat2} out\r\n */\r\nexport function rotateY(out, a, rad) {\r\n var bx = -a[0],\r\n by = -a[1],\r\n bz = -a[2],\r\n bw = a[3],\r\n ax = a[4],\r\n ay = a[5],\r\n az = a[6],\r\n aw = a[7],\r\n ax1 = ax * bw + aw * bx + ay * bz - az * by,\r\n ay1 = ay * bw + aw * by + az * bx - ax * bz,\r\n az1 = az * bw + aw * bz + ax * by - ay * bx,\r\n aw1 = aw * bw - ax * bx - ay * by - az * bz;\r\n quat.rotateY(out, a, rad);\r\n bx = out[0];\r\n by = out[1];\r\n bz = out[2];\r\n bw = out[3];\r\n out[4] = ax1 * bw + aw1 * bx + ay1 * bz - az1 * by;\r\n out[5] = ay1 * bw + aw1 * by + az1 * bx - ax1 * bz;\r\n out[6] = az1 * bw + aw1 * bz + ax1 * by - ay1 * bx;\r\n out[7] = aw1 * bw - ax1 * bx - ay1 * by - az1 * bz;\r\n return out;\r\n}\r\n\r\n/**\r\n * Rotates a dual quat around the Z axis\r\n *\r\n * @param {quat2} out the receiving dual quaternion\r\n * @param {quat2} a the dual quaternion to rotate\r\n * @param {number} rad how far should the rotation be\r\n * @returns {quat2} out\r\n */\r\nexport function rotateZ(out, a, rad) {\r\n var bx = -a[0],\r\n by = -a[1],\r\n bz = -a[2],\r\n bw = a[3],\r\n ax = a[4],\r\n ay = a[5],\r\n az = a[6],\r\n aw = a[7],\r\n ax1 = ax * bw + aw * bx + ay * bz - az * by,\r\n ay1 = ay * bw + aw * by + az * bx - ax * bz,\r\n az1 = az * bw + aw * bz + ax * by - ay * bx,\r\n aw1 = aw * bw - ax * bx - ay * by - az * bz;\r\n quat.rotateZ(out, a, rad);\r\n bx = out[0];\r\n by = out[1];\r\n bz = out[2];\r\n bw = out[3];\r\n out[4] = ax1 * bw + aw1 * bx + ay1 * bz - az1 * by;\r\n out[5] = ay1 * bw + aw1 * by + az1 * bx - ax1 * bz;\r\n out[6] = az1 * bw + aw1 * bz + ax1 * by - ay1 * bx;\r\n out[7] = aw1 * bw - ax1 * bx - ay1 * by - az1 * bz;\r\n return out;\r\n}\r\n\r\n/**\r\n * Rotates a dual quat by a given quaternion (a * q)\r\n *\r\n * @param {quat2} out the receiving dual quaternion\r\n * @param {quat2} a the dual quaternion to rotate\r\n * @param {quat} q quaternion to rotate by\r\n * @returns {quat2} out\r\n */\r\nexport function rotateByQuatAppend(out, a, q) {\r\n var qx = q[0],\r\n qy = q[1],\r\n qz = q[2],\r\n qw = q[3],\r\n ax = a[0],\r\n ay = a[1],\r\n az = a[2],\r\n aw = a[3];\r\n\r\n out[0] = ax * qw + aw * qx + ay * qz - az * qy;\r\n out[1] = ay * qw + aw * qy + az * qx - ax * qz;\r\n out[2] = az * qw + aw * qz + ax * qy - ay * qx;\r\n out[3] = aw * qw - ax * qx - ay * qy - az * qz;\r\n ax = a[4];\r\n ay = a[5];\r\n az = a[6];\r\n aw = a[7];\r\n out[4] = ax * qw + aw * qx + ay * qz - az * qy;\r\n out[5] = ay * qw + aw * qy + az * qx - ax * qz;\r\n out[6] = az * qw + aw * qz + ax * qy - ay * qx;\r\n out[7] = aw * qw - ax * qx - ay * qy - az * qz;\r\n return out;\r\n}\r\n\r\n/**\r\n * Rotates a dual quat by a given quaternion (q * a)\r\n *\r\n * @param {quat2} out the receiving dual quaternion\r\n * @param {quat} q quaternion to rotate by\r\n * @param {quat2} a the dual quaternion to rotate\r\n * @returns {quat2} out\r\n */\r\nexport function rotateByQuatPrepend(out, q, a) {\r\n var qx = q[0],\r\n qy = q[1],\r\n qz = q[2],\r\n qw = q[3],\r\n bx = a[0],\r\n by = a[1],\r\n bz = a[2],\r\n bw = a[3];\r\n\r\n out[0] = qx * bw + qw * bx + qy * bz - qz * by;\r\n out[1] = qy * bw + qw * by + qz * bx - qx * bz;\r\n out[2] = qz * bw + qw * bz + qx * by - qy * bx;\r\n out[3] = qw * bw - qx * bx - qy * by - qz * bz;\r\n bx = a[4];\r\n by = a[5];\r\n bz = a[6];\r\n bw = a[7];\r\n out[4] = qx * bw + qw * bx + qy * bz - qz * by;\r\n out[5] = qy * bw + qw * by + qz * bx - qx * bz;\r\n out[6] = qz * bw + qw * bz + qx * by - qy * bx;\r\n out[7] = qw * bw - qx * bx - qy * by - qz * bz;\r\n return out;\r\n}\r\n\r\n/**\r\n * Rotates a dual quat around a given axis. Does the normalisation automatically\r\n *\r\n * @param {quat2} out the receiving dual quaternion\r\n * @param {quat2} a the dual quaternion to rotate\r\n * @param {vec3} axis the axis to rotate around\r\n * @param {Number} rad how far the rotation should be\r\n * @returns {quat2} out\r\n */\r\nexport function rotateAroundAxis(out, a, axis, rad) {\r\n //Special case for rad = 0\r\n if (Math.abs(rad) < glMatrix.EPSILON) {\r\n return copy(out, a);\r\n }\r\n var axisLength = Math.sqrt(axis[0] * axis[0] + axis[1] * axis[1] + axis[2] * axis[2]);\r\n\r\n rad = rad * 0.5;\r\n var s = Math.sin(rad);\r\n var bx = s * axis[0] / axisLength;\r\n var by = s * axis[1] / axisLength;\r\n var bz = s * axis[2] / axisLength;\r\n var bw = Math.cos(rad);\r\n\r\n var ax1 = a[0],\r\n ay1 = a[1],\r\n az1 = a[2],\r\n aw1 = a[3];\r\n out[0] = ax1 * bw + aw1 * bx + ay1 * bz - az1 * by;\r\n out[1] = ay1 * bw + aw1 * by + az1 * bx - ax1 * bz;\r\n out[2] = az1 * bw + aw1 * bz + ax1 * by - ay1 * bx;\r\n out[3] = aw1 * bw - ax1 * bx - ay1 * by - az1 * bz;\r\n\r\n var ax = a[4],\r\n ay = a[5],\r\n az = a[6],\r\n aw = a[7];\r\n out[4] = ax * bw + aw * bx + ay * bz - az * by;\r\n out[5] = ay * bw + aw * by + az * bx - ax * bz;\r\n out[6] = az * bw + aw * bz + ax * by - ay * bx;\r\n out[7] = aw * bw - ax * bx - ay * by - az * bz;\r\n\r\n return out;\r\n}\r\n\r\n/**\r\n * Adds two dual quat's\r\n *\r\n * @param {quat2} out the receiving dual quaternion\r\n * @param {quat2} a the first operand\r\n * @param {quat2} b the second operand\r\n * @returns {quat2} out\r\n * @function\r\n */\r\nexport function add(out, a, b) {\r\n out[0] = a[0] + b[0];\r\n out[1] = a[1] + b[1];\r\n out[2] = a[2] + b[2];\r\n out[3] = a[3] + b[3];\r\n out[4] = a[4] + b[4];\r\n out[5] = a[5] + b[5];\r\n out[6] = a[6] + b[6];\r\n out[7] = a[7] + b[7];\r\n return out;\r\n}\r\n\r\n/**\r\n * Multiplies two dual quat's\r\n *\r\n * @param {quat2} out the receiving dual quaternion\r\n * @param {quat2} a the first operand\r\n * @param {quat2} b the second operand\r\n * @returns {quat2} out\r\n */\r\nexport function multiply(out, a, b) {\r\n var ax0 = a[0],\r\n ay0 = a[1],\r\n az0 = a[2],\r\n aw0 = a[3],\r\n bx1 = b[4],\r\n by1 = b[5],\r\n bz1 = b[6],\r\n bw1 = b[7],\r\n ax1 = a[4],\r\n ay1 = a[5],\r\n az1 = a[6],\r\n aw1 = a[7],\r\n bx0 = b[0],\r\n by0 = b[1],\r\n bz0 = b[2],\r\n bw0 = b[3];\r\n out[0] = ax0 * bw0 + aw0 * bx0 + ay0 * bz0 - az0 * by0;\r\n out[1] = ay0 * bw0 + aw0 * by0 + az0 * bx0 - ax0 * bz0;\r\n out[2] = az0 * bw0 + aw0 * bz0 + ax0 * by0 - ay0 * bx0;\r\n out[3] = aw0 * bw0 - ax0 * bx0 - ay0 * by0 - az0 * bz0;\r\n out[4] = ax0 * bw1 + aw0 * bx1 + ay0 * bz1 - az0 * by1 + ax1 * bw0 + aw1 * bx0 + ay1 * bz0 - az1 * by0;\r\n out[5] = ay0 * bw1 + aw0 * by1 + az0 * bx1 - ax0 * bz1 + ay1 * bw0 + aw1 * by0 + az1 * bx0 - ax1 * bz0;\r\n out[6] = az0 * bw1 + aw0 * bz1 + ax0 * by1 - ay0 * bx1 + az1 * bw0 + aw1 * bz0 + ax1 * by0 - ay1 * bx0;\r\n out[7] = aw0 * bw1 - ax0 * bx1 - ay0 * by1 - az0 * bz1 + aw1 * bw0 - ax1 * bx0 - ay1 * by0 - az1 * bz0;\r\n return out;\r\n}\r\n\r\n/**\r\n * Alias for {@link quat2.multiply}\r\n * @function\r\n */\r\nexport var mul = multiply;\r\n\r\n/**\r\n * Scales a dual quat by a scalar number\r\n *\r\n * @param {quat2} out the receiving dual quat\r\n * @param {quat2} a the dual quat to scale\r\n * @param {Number} b amount to scale the dual quat by\r\n * @returns {quat2} out\r\n * @function\r\n */\r\nexport function scale(out, a, b) {\r\n out[0] = a[0] * b;\r\n out[1] = a[1] * b;\r\n out[2] = a[2] * b;\r\n out[3] = a[3] * b;\r\n out[4] = a[4] * b;\r\n out[5] = a[5] * b;\r\n out[6] = a[6] * b;\r\n out[7] = a[7] * b;\r\n return out;\r\n}\r\n\r\n/**\r\n * Calculates the dot product of two dual quat's (The dot product of the real parts)\r\n *\r\n * @param {quat2} a the first operand\r\n * @param {quat2} b the second operand\r\n * @returns {Number} dot product of a and b\r\n * @function\r\n */\r\nexport var dot = quat.dot;\r\n\r\n/**\r\n * Performs a linear interpolation between two dual quats's\r\n * NOTE: The resulting dual quaternions won't always be normalized (The error is most noticeable when t = 0.5)\r\n *\r\n * @param {quat2} out the receiving dual quat\r\n * @param {quat2} a the first operand\r\n * @param {quat2} b the second operand\r\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\r\n * @returns {quat2} out\r\n */\r\nexport function lerp(out, a, b, t) {\r\n var mt = 1 - t;\r\n if (dot(a, b) < 0) t = -t;\r\n\r\n out[0] = a[0] * mt + b[0] * t;\r\n out[1] = a[1] * mt + b[1] * t;\r\n out[2] = a[2] * mt + b[2] * t;\r\n out[3] = a[3] * mt + b[3] * t;\r\n out[4] = a[4] * mt + b[4] * t;\r\n out[5] = a[5] * mt + b[5] * t;\r\n out[6] = a[6] * mt + b[6] * t;\r\n out[7] = a[7] * mt + b[7] * t;\r\n\r\n return out;\r\n}\r\n\r\n/**\r\n * Calculates the inverse of a dual quat. If they are normalized, conjugate is cheaper\r\n *\r\n * @param {quat2} out the receiving dual quaternion\r\n * @param {quat2} a dual quat to calculate inverse of\r\n * @returns {quat2} out\r\n */\r\nexport function invert(out, a) {\r\n var sqlen = squaredLength(a);\r\n out[0] = -a[0] / sqlen;\r\n out[1] = -a[1] / sqlen;\r\n out[2] = -a[2] / sqlen;\r\n out[3] = a[3] / sqlen;\r\n out[4] = -a[4] / sqlen;\r\n out[5] = -a[5] / sqlen;\r\n out[6] = -a[6] / sqlen;\r\n out[7] = a[7] / sqlen;\r\n return out;\r\n}\r\n\r\n/**\r\n * Calculates the conjugate of a dual quat\r\n * If the dual quaternion is normalized, this function is faster than quat2.inverse and produces the same result.\r\n *\r\n * @param {quat2} out the receiving quaternion\r\n * @param {quat2} a quat to calculate conjugate of\r\n * @returns {quat2} out\r\n */\r\nexport function conjugate(out, a) {\r\n out[0] = -a[0];\r\n out[1] = -a[1];\r\n out[2] = -a[2];\r\n out[3] = a[3];\r\n out[4] = -a[4];\r\n out[5] = -a[5];\r\n out[6] = -a[6];\r\n out[7] = a[7];\r\n return out;\r\n}\r\n\r\n/**\r\n * Calculates the length of a dual quat\r\n *\r\n * @param {quat2} a dual quat to calculate length of\r\n * @returns {Number} length of a\r\n * @function\r\n */\r\nexport var length = quat.length;\r\n\r\n/**\r\n * Alias for {@link quat2.length}\r\n * @function\r\n */\r\nexport var len = length;\r\n\r\n/**\r\n * Calculates the squared length of a dual quat\r\n *\r\n * @param {quat2} a dual quat to calculate squared length of\r\n * @returns {Number} squared length of a\r\n * @function\r\n */\r\nexport var squaredLength = quat.squaredLength;\r\n\r\n/**\r\n * Alias for {@link quat2.squaredLength}\r\n * @function\r\n */\r\nexport var sqrLen = squaredLength;\r\n\r\n/**\r\n * Normalize a dual quat\r\n *\r\n * @param {quat2} out the receiving dual quaternion\r\n * @param {quat2} a dual quaternion to normalize\r\n * @returns {quat2} out\r\n * @function\r\n */\r\nexport function normalize(out, a) {\r\n var magnitude = squaredLength(a);\r\n if (magnitude > 0) {\r\n magnitude = Math.sqrt(magnitude);\r\n\r\n var a0 = a[0] / magnitude;\r\n var a1 = a[1] / magnitude;\r\n var a2 = a[2] / magnitude;\r\n var a3 = a[3] / magnitude;\r\n\r\n var b0 = a[4];\r\n var b1 = a[5];\r\n var b2 = a[6];\r\n var b3 = a[7];\r\n\r\n var a_dot_b = a0 * b0 + a1 * b1 + a2 * b2 + a3 * b3;\r\n\r\n out[0] = a0;\r\n out[1] = a1;\r\n out[2] = a2;\r\n out[3] = a3;\r\n\r\n out[4] = (b0 - a0 * a_dot_b) / magnitude;\r\n out[5] = (b1 - a1 * a_dot_b) / magnitude;\r\n out[6] = (b2 - a2 * a_dot_b) / magnitude;\r\n out[7] = (b3 - a3 * a_dot_b) / magnitude;\r\n }\r\n return out;\r\n}\r\n\r\n/**\r\n * Returns a string representation of a dual quatenion\r\n *\r\n * @param {quat2} a dual quaternion to represent as a string\r\n * @returns {String} string representation of the dual quat\r\n */\r\nexport function str(a) {\r\n return 'quat2(' + a[0] + ', ' + a[1] + ', ' + a[2] + ', ' + a[3] + ', ' + a[4] + ', ' + a[5] + ', ' + a[6] + ', ' + a[7] + ')';\r\n}\r\n\r\n/**\r\n * Returns whether or not the dual quaternions have exactly the same elements in the same position (when compared with ===)\r\n *\r\n * @param {quat2} a the first dual quaternion.\r\n * @param {quat2} b the second dual quaternion.\r\n * @returns {Boolean} true if the dual quaternions are equal, false otherwise.\r\n */\r\nexport function exactEquals(a, b) {\r\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3] && a[4] === b[4] && a[5] === b[5] && a[6] === b[6] && a[7] === b[7];\r\n}\r\n\r\n/**\r\n * Returns whether or not the dual quaternions have approximately the same elements in the same position.\r\n *\r\n * @param {quat2} a the first dual quat.\r\n * @param {quat2} b the second dual quat.\r\n * @returns {Boolean} true if the dual quats are equal, false otherwise.\r\n */\r\nexport function equals(a, b) {\r\n var a0 = a[0],\r\n a1 = a[1],\r\n a2 = a[2],\r\n a3 = a[3],\r\n a4 = a[4],\r\n a5 = a[5],\r\n a6 = a[6],\r\n a7 = a[7];\r\n var b0 = b[0],\r\n b1 = b[1],\r\n b2 = b[2],\r\n b3 = b[3],\r\n b4 = b[4],\r\n b5 = b[5],\r\n b6 = b[6],\r\n b7 = b[7];\r\n return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)) && Math.abs(a3 - b3) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a3), Math.abs(b3)) && Math.abs(a4 - b4) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a4), Math.abs(b4)) && Math.abs(a5 - b5) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a5), Math.abs(b5)) && Math.abs(a6 - b6) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a6), Math.abs(b6)) && Math.abs(a7 - b7) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a7), Math.abs(b7));\r\n}","import * as glMatrix from \"./common.js\";\r\n\r\n/**\r\n * 2 Dimensional Vector\r\n * @module vec2\r\n */\r\n\r\n/**\r\n * Creates a new, empty vec2\r\n *\r\n * @returns {vec2} a new 2D vector\r\n */\r\nexport function create() {\r\n var out = new glMatrix.ARRAY_TYPE(2);\r\n if (glMatrix.ARRAY_TYPE != Float32Array) {\r\n out[0] = 0;\r\n out[1] = 0;\r\n }\r\n return out;\r\n}\r\n\r\n/**\r\n * Creates a new vec2 initialized with values from an existing vector\r\n *\r\n * @param {vec2} a vector to clone\r\n * @returns {vec2} a new 2D vector\r\n */\r\nexport function clone(a) {\r\n var out = new glMatrix.ARRAY_TYPE(2);\r\n out[0] = a[0];\r\n out[1] = a[1];\r\n return out;\r\n}\r\n\r\n/**\r\n * Creates a new vec2 initialized with the given values\r\n *\r\n * @param {Number} x X component\r\n * @param {Number} y Y component\r\n * @returns {vec2} a new 2D vector\r\n */\r\nexport function fromValues(x, y) {\r\n var out = new glMatrix.ARRAY_TYPE(2);\r\n out[0] = x;\r\n out[1] = y;\r\n return out;\r\n}\r\n\r\n/**\r\n * Copy the values from one vec2 to another\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {vec2} a the source vector\r\n * @returns {vec2} out\r\n */\r\nexport function copy(out, a) {\r\n out[0] = a[0];\r\n out[1] = a[1];\r\n return out;\r\n}\r\n\r\n/**\r\n * Set the components of a vec2 to the given values\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {Number} x X component\r\n * @param {Number} y Y component\r\n * @returns {vec2} out\r\n */\r\nexport function set(out, x, y) {\r\n out[0] = x;\r\n out[1] = y;\r\n return out;\r\n}\r\n\r\n/**\r\n * Adds two vec2's\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {vec2} a the first operand\r\n * @param {vec2} b the second operand\r\n * @returns {vec2} out\r\n */\r\nexport function add(out, a, b) {\r\n out[0] = a[0] + b[0];\r\n out[1] = a[1] + b[1];\r\n return out;\r\n}\r\n\r\n/**\r\n * Subtracts vector b from vector a\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {vec2} a the first operand\r\n * @param {vec2} b the second operand\r\n * @returns {vec2} out\r\n */\r\nexport function subtract(out, a, b) {\r\n out[0] = a[0] - b[0];\r\n out[1] = a[1] - b[1];\r\n return out;\r\n}\r\n\r\n/**\r\n * Multiplies two vec2's\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {vec2} a the first operand\r\n * @param {vec2} b the second operand\r\n * @returns {vec2} out\r\n */\r\nexport function multiply(out, a, b) {\r\n out[0] = a[0] * b[0];\r\n out[1] = a[1] * b[1];\r\n return out;\r\n}\r\n\r\n/**\r\n * Divides two vec2's\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {vec2} a the first operand\r\n * @param {vec2} b the second operand\r\n * @returns {vec2} out\r\n */\r\nexport function divide(out, a, b) {\r\n out[0] = a[0] / b[0];\r\n out[1] = a[1] / b[1];\r\n return out;\r\n}\r\n\r\n/**\r\n * Math.ceil the components of a vec2\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {vec2} a vector to ceil\r\n * @returns {vec2} out\r\n */\r\nexport function ceil(out, a) {\r\n out[0] = Math.ceil(a[0]);\r\n out[1] = Math.ceil(a[1]);\r\n return out;\r\n}\r\n\r\n/**\r\n * Math.floor the components of a vec2\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {vec2} a vector to floor\r\n * @returns {vec2} out\r\n */\r\nexport function floor(out, a) {\r\n out[0] = Math.floor(a[0]);\r\n out[1] = Math.floor(a[1]);\r\n return out;\r\n}\r\n\r\n/**\r\n * Returns the minimum of two vec2's\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {vec2} a the first operand\r\n * @param {vec2} b the second operand\r\n * @returns {vec2} out\r\n */\r\nexport function min(out, a, b) {\r\n out[0] = Math.min(a[0], b[0]);\r\n out[1] = Math.min(a[1], b[1]);\r\n return out;\r\n}\r\n\r\n/**\r\n * Returns the maximum of two vec2's\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {vec2} a the first operand\r\n * @param {vec2} b the second operand\r\n * @returns {vec2} out\r\n */\r\nexport function max(out, a, b) {\r\n out[0] = Math.max(a[0], b[0]);\r\n out[1] = Math.max(a[1], b[1]);\r\n return out;\r\n}\r\n\r\n/**\r\n * Math.round the components of a vec2\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {vec2} a vector to round\r\n * @returns {vec2} out\r\n */\r\nexport function round(out, a) {\r\n out[0] = Math.round(a[0]);\r\n out[1] = Math.round(a[1]);\r\n return out;\r\n}\r\n\r\n/**\r\n * Scales a vec2 by a scalar number\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {vec2} a the vector to scale\r\n * @param {Number} b amount to scale the vector by\r\n * @returns {vec2} out\r\n */\r\nexport function scale(out, a, b) {\r\n out[0] = a[0] * b;\r\n out[1] = a[1] * b;\r\n return out;\r\n}\r\n\r\n/**\r\n * Adds two vec2's after scaling the second operand by a scalar value\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {vec2} a the first operand\r\n * @param {vec2} b the second operand\r\n * @param {Number} scale the amount to scale b by before adding\r\n * @returns {vec2} out\r\n */\r\nexport function scaleAndAdd(out, a, b, scale) {\r\n out[0] = a[0] + b[0] * scale;\r\n out[1] = a[1] + b[1] * scale;\r\n return out;\r\n}\r\n\r\n/**\r\n * Calculates the euclidian distance between two vec2's\r\n *\r\n * @param {vec2} a the first operand\r\n * @param {vec2} b the second operand\r\n * @returns {Number} distance between a and b\r\n */\r\nexport function distance(a, b) {\r\n var x = b[0] - a[0],\r\n y = b[1] - a[1];\r\n return Math.sqrt(x * x + y * y);\r\n}\r\n\r\n/**\r\n * Calculates the squared euclidian distance between two vec2's\r\n *\r\n * @param {vec2} a the first operand\r\n * @param {vec2} b the second operand\r\n * @returns {Number} squared distance between a and b\r\n */\r\nexport function squaredDistance(a, b) {\r\n var x = b[0] - a[0],\r\n y = b[1] - a[1];\r\n return x * x + y * y;\r\n}\r\n\r\n/**\r\n * Calculates the length of a vec2\r\n *\r\n * @param {vec2} a vector to calculate length of\r\n * @returns {Number} length of a\r\n */\r\nexport function length(a) {\r\n var x = a[0],\r\n y = a[1];\r\n return Math.sqrt(x * x + y * y);\r\n}\r\n\r\n/**\r\n * Calculates the squared length of a vec2\r\n *\r\n * @param {vec2} a vector to calculate squared length of\r\n * @returns {Number} squared length of a\r\n */\r\nexport function squaredLength(a) {\r\n var x = a[0],\r\n y = a[1];\r\n return x * x + y * y;\r\n}\r\n\r\n/**\r\n * Negates the components of a vec2\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {vec2} a vector to negate\r\n * @returns {vec2} out\r\n */\r\nexport function negate(out, a) {\r\n out[0] = -a[0];\r\n out[1] = -a[1];\r\n return out;\r\n}\r\n\r\n/**\r\n * Returns the inverse of the components of a vec2\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {vec2} a vector to invert\r\n * @returns {vec2} out\r\n */\r\nexport function inverse(out, a) {\r\n out[0] = 1.0 / a[0];\r\n out[1] = 1.0 / a[1];\r\n return out;\r\n}\r\n\r\n/**\r\n * Normalize a vec2\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {vec2} a vector to normalize\r\n * @returns {vec2} out\r\n */\r\nexport function normalize(out, a) {\r\n var x = a[0],\r\n y = a[1];\r\n var len = x * x + y * y;\r\n if (len > 0) {\r\n //TODO: evaluate use of glm_invsqrt here?\r\n len = 1 / Math.sqrt(len);\r\n out[0] = a[0] * len;\r\n out[1] = a[1] * len;\r\n }\r\n return out;\r\n}\r\n\r\n/**\r\n * Calculates the dot product of two vec2's\r\n *\r\n * @param {vec2} a the first operand\r\n * @param {vec2} b the second operand\r\n * @returns {Number} dot product of a and b\r\n */\r\nexport function dot(a, b) {\r\n return a[0] * b[0] + a[1] * b[1];\r\n}\r\n\r\n/**\r\n * Computes the cross product of two vec2's\r\n * Note that the cross product must by definition produce a 3D vector\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {vec2} a the first operand\r\n * @param {vec2} b the second operand\r\n * @returns {vec3} out\r\n */\r\nexport function cross(out, a, b) {\r\n var z = a[0] * b[1] - a[1] * b[0];\r\n out[0] = out[1] = 0;\r\n out[2] = z;\r\n return out;\r\n}\r\n\r\n/**\r\n * Performs a linear interpolation between two vec2's\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {vec2} a the first operand\r\n * @param {vec2} b the second operand\r\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\r\n * @returns {vec2} out\r\n */\r\nexport function lerp(out, a, b, t) {\r\n var ax = a[0],\r\n ay = a[1];\r\n out[0] = ax + t * (b[0] - ax);\r\n out[1] = ay + t * (b[1] - ay);\r\n return out;\r\n}\r\n\r\n/**\r\n * Generates a random vector with the given scale\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {Number} [scale] Length of the resulting vector. If ommitted, a unit vector will be returned\r\n * @returns {vec2} out\r\n */\r\nexport function random(out, scale) {\r\n scale = scale || 1.0;\r\n var r = glMatrix.RANDOM() * 2.0 * Math.PI;\r\n out[0] = Math.cos(r) * scale;\r\n out[1] = Math.sin(r) * scale;\r\n return out;\r\n}\r\n\r\n/**\r\n * Transforms the vec2 with a mat2\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {vec2} a the vector to transform\r\n * @param {mat2} m matrix to transform with\r\n * @returns {vec2} out\r\n */\r\nexport function transformMat2(out, a, m) {\r\n var x = a[0],\r\n y = a[1];\r\n out[0] = m[0] * x + m[2] * y;\r\n out[1] = m[1] * x + m[3] * y;\r\n return out;\r\n}\r\n\r\n/**\r\n * Transforms the vec2 with a mat2d\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {vec2} a the vector to transform\r\n * @param {mat2d} m matrix to transform with\r\n * @returns {vec2} out\r\n */\r\nexport function transformMat2d(out, a, m) {\r\n var x = a[0],\r\n y = a[1];\r\n out[0] = m[0] * x + m[2] * y + m[4];\r\n out[1] = m[1] * x + m[3] * y + m[5];\r\n return out;\r\n}\r\n\r\n/**\r\n * Transforms the vec2 with a mat3\r\n * 3rd vector component is implicitly '1'\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {vec2} a the vector to transform\r\n * @param {mat3} m matrix to transform with\r\n * @returns {vec2} out\r\n */\r\nexport function transformMat3(out, a, m) {\r\n var x = a[0],\r\n y = a[1];\r\n out[0] = m[0] * x + m[3] * y + m[6];\r\n out[1] = m[1] * x + m[4] * y + m[7];\r\n return out;\r\n}\r\n\r\n/**\r\n * Transforms the vec2 with a mat4\r\n * 3rd vector component is implicitly '0'\r\n * 4th vector component is implicitly '1'\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {vec2} a the vector to transform\r\n * @param {mat4} m matrix to transform with\r\n * @returns {vec2} out\r\n */\r\nexport function transformMat4(out, a, m) {\r\n var x = a[0];\r\n var y = a[1];\r\n out[0] = m[0] * x + m[4] * y + m[12];\r\n out[1] = m[1] * x + m[5] * y + m[13];\r\n return out;\r\n}\r\n\r\n/**\r\n * Rotate a 2D vector\r\n * @param {vec2} out The receiving vec2\r\n * @param {vec2} a The vec2 point to rotate\r\n * @param {vec2} b The origin of the rotation\r\n * @param {Number} c The angle of rotation\r\n * @returns {vec2} out\r\n */\r\nexport function rotate(out, a, b, c) {\r\n //Translate point to the origin\r\n var p0 = a[0] - b[0],\r\n p1 = a[1] - b[1],\r\n sinC = Math.sin(c),\r\n cosC = Math.cos(c);\r\n\r\n //perform rotation and translate to correct position\r\n out[0] = p0 * cosC - p1 * sinC + b[0];\r\n out[1] = p0 * sinC + p1 * cosC + b[1];\r\n\r\n return out;\r\n}\r\n\r\n/**\r\n * Get the angle between two 2D vectors\r\n * @param {vec2} a The first operand\r\n * @param {vec2} b The second operand\r\n * @returns {Number} The angle in radians\r\n */\r\nexport function angle(a, b) {\r\n var x1 = a[0],\r\n y1 = a[1],\r\n x2 = b[0],\r\n y2 = b[1];\r\n\r\n var len1 = x1 * x1 + y1 * y1;\r\n if (len1 > 0) {\r\n //TODO: evaluate use of glm_invsqrt here?\r\n len1 = 1 / Math.sqrt(len1);\r\n }\r\n\r\n var len2 = x2 * x2 + y2 * y2;\r\n if (len2 > 0) {\r\n //TODO: evaluate use of glm_invsqrt here?\r\n len2 = 1 / Math.sqrt(len2);\r\n }\r\n\r\n var cosine = (x1 * x2 + y1 * y2) * len1 * len2;\r\n\r\n if (cosine > 1.0) {\r\n return 0;\r\n } else if (cosine < -1.0) {\r\n return Math.PI;\r\n } else {\r\n return Math.acos(cosine);\r\n }\r\n}\r\n\r\n/**\r\n * Returns a string representation of a vector\r\n *\r\n * @param {vec2} a vector to represent as a string\r\n * @returns {String} string representation of the vector\r\n */\r\nexport function str(a) {\r\n return 'vec2(' + a[0] + ', ' + a[1] + ')';\r\n}\r\n\r\n/**\r\n * Returns whether or not the vectors exactly have the same elements in the same position (when compared with ===)\r\n *\r\n * @param {vec2} a The first vector.\r\n * @param {vec2} b The second vector.\r\n * @returns {Boolean} True if the vectors are equal, false otherwise.\r\n */\r\nexport function exactEquals(a, b) {\r\n return a[0] === b[0] && a[1] === b[1];\r\n}\r\n\r\n/**\r\n * Returns whether or not the vectors have approximately the same elements in the same position.\r\n *\r\n * @param {vec2} a The first vector.\r\n * @param {vec2} b The second vector.\r\n * @returns {Boolean} True if the vectors are equal, false otherwise.\r\n */\r\nexport function equals(a, b) {\r\n var a0 = a[0],\r\n a1 = a[1];\r\n var b0 = b[0],\r\n b1 = b[1];\r\n return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1));\r\n}\r\n\r\n/**\r\n * Alias for {@link vec2.length}\r\n * @function\r\n */\r\nexport var len = length;\r\n\r\n/**\r\n * Alias for {@link vec2.subtract}\r\n * @function\r\n */\r\nexport var sub = subtract;\r\n\r\n/**\r\n * Alias for {@link vec2.multiply}\r\n * @function\r\n */\r\nexport var mul = multiply;\r\n\r\n/**\r\n * Alias for {@link vec2.divide}\r\n * @function\r\n */\r\nexport var div = divide;\r\n\r\n/**\r\n * Alias for {@link vec2.distance}\r\n * @function\r\n */\r\nexport var dist = distance;\r\n\r\n/**\r\n * Alias for {@link vec2.squaredDistance}\r\n * @function\r\n */\r\nexport var sqrDist = squaredDistance;\r\n\r\n/**\r\n * Alias for {@link vec2.squaredLength}\r\n * @function\r\n */\r\nexport var sqrLen = squaredLength;\r\n\r\n/**\r\n * Perform some operation over an array of vec2s.\r\n *\r\n * @param {Array} a the array of vectors to iterate over\r\n * @param {Number} stride Number of elements between the start of each vec2. If 0 assumes tightly packed\r\n * @param {Number} offset Number of elements to skip at the beginning of the array\r\n * @param {Number} count Number of vec2s to iterate over. If 0 iterates over entire array\r\n * @param {Function} fn Function to call for each vector in the array\r\n * @param {Object} [arg] additional argument to pass to fn\r\n * @returns {Array} a\r\n * @function\r\n */\r\nexport var forEach = function () {\r\n var vec = create();\r\n\r\n return function (a, stride, offset, count, fn, arg) {\r\n var i = void 0,\r\n l = void 0;\r\n if (!stride) {\r\n stride = 2;\r\n }\r\n\r\n if (!offset) {\r\n offset = 0;\r\n }\r\n\r\n if (count) {\r\n l = Math.min(count * stride + offset, a.length);\r\n } else {\r\n l = a.length;\r\n }\r\n\r\n for (i = offset; i < l; i += stride) {\r\n vec[0] = a[i];vec[1] = a[i + 1];\r\n fn(vec, vec, arg);\r\n a[i] = vec[0];a[i + 1] = vec[1];\r\n }\r\n\r\n return a;\r\n };\r\n}();","import {vec2} from 'gl-matrix';\nimport GameObject from './GameObject';\nimport Terrain from '../scene/Terrain';\nimport Coin from '../scene/Coin';\nimport Particle from '../scene/Particle';\nimport Baddie from '../scene/Baddie';\nimport Tile from '../geometry/Tile';\nimport Background from '../geometry/Background';\nimport {gl} from '../globals';\nimport Camera from '../Camera';\nimport OpenGlRenderer from '../rendering/gl/OpenGLRenderer';\nimport ShaderProgram, {Shader} from '../rendering/gl/ShaderProgram';\nimport Texture2D from '../rendering/Texture2D';\nimport LevelGenerator from '../LevelGenerator/LevelGenerator';\nimport sceneAttributes from '../scene/SceneAttributes';\n\nconst spriteSheet = require('../assets/sprites.png');\nconst backgrounds = require('../assets/backgrounds.png');\n\nclass GameEngine {\n\n private static engine: GameEngine;\n\n static getEngine() {\n if (GameEngine.engine) {\n return GameEngine.engine;\n }\n else {\n let tile: Tile = new Tile();\n let background: Background = new Background();\n tile.create();\n background.create()\n GameEngine.engine = new GameEngine(tile, background);\n return GameEngine.engine;\n }\n }\n\n private gameObjects: GameObject[];\n terrainObjects: Terrain[];\n private collidableObjects: GameObject[];\n private lastTick: number;\n private tile: Tile;\n private background: Background;\n private spriteShader: ShaderProgram;\n private backgroundShader: ShaderProgram;\n private renderer: OpenGlRenderer;\n private camera: Camera;\n private downkeys: Set\n private ticks: number;\n private win: boolean = false;\n\n private constructor(_tile: Tile, _background: Background) {\n this.gameObjects = [];\n this.terrainObjects = [];\n this.collidableObjects = [];\n this.tile = _tile;\n this.background = _background;\n this.camera = new Camera(vec2.fromValues(0, -3), 20);\n this.downkeys = new Set();\n this.ticks = 0;\n\n this.spriteShader = new ShaderProgram([\n new Shader(gl.VERTEX_SHADER, require('../shaders/tile-vert.glsl')),\n new Shader(gl.FRAGMENT_SHADER, require('../shaders/tile-frag.glsl')),\n ]);\n //const spriteSheet = 'http://' + window.location.host + '/src/assets/sprites.png'\n let spriteTex: Texture2D = new Texture2D(spriteSheet, 0)\n this.spriteShader.setSpriteTex(spriteTex);\n\n this.backgroundShader = new ShaderProgram([\n new Shader(gl.VERTEX_SHADER, require('../shaders/background-vert.glsl')),\n new Shader(gl.FRAGMENT_SHADER, require('../shaders/background-frag.glsl')),\n ])\n //const backgrounds = 'http://' + window.location.host + '/src/assets/backgrounds.png'\n let backgroundTex: Texture2D = new Texture2D(backgrounds, 1);\n this.backgroundShader.setSpriteTex(backgroundTex);\n\n window.addEventListener(\"keydown\", (keyEvent) => {\n if (!this.downkeys.has(keyEvent.key)) {\n this.gameObjects.forEach((go: GameObject) => {go.onKeyDown(keyEvent.key)});\n }\n this.downkeys.add(keyEvent.key);\n });\n window.addEventListener(\"keyup\", (keyEvent) => {\n this.downkeys.delete(keyEvent.key);\n this.gameObjects.forEach((go: GameObject) => {go.onKeyUp(keyEvent.key)});\n });\n }\n\n generateLevel() {\n let terrain: Terrain = new Terrain();\n this.setTerrain(terrain);\n let densities = [];\n if (sceneAttributes.rhythmType === 3) {\n densities = [0.5, 0, 0.5];\n }\n else {\n for (let i = 0; i < 3; i++) {\n densities.push(sceneAttributes.rhythmType === i ? 1 : 0);\n }\n }\n let levelGen = new LevelGenerator(\n sceneAttributes.numberOfGroups,\n terrain,\n sceneAttributes.rhythmGroupLength,\n sceneAttributes.rhythmGroupLength,\n sceneAttributes.levelDensity,\n 1.0,\n densities\n );\n levelGen.generateRhythms();\n let topTiles = levelGen.generateGeometry();\n levelGen.addCoins(topTiles);\n }\n\n setRenderer(renderer: OpenGlRenderer) {\n this.renderer = renderer;\n }\n\n setTerrain(terrain: Terrain) {\n this.terrainObjects.push(terrain);\n }\n\n getCamera(): Camera {\n return this.camera;\n }\n\n onWin() {\n this.win = true;\n }\n\n drawGameObjects() {\n let tilePositions: vec2[] = [];\n let tileUvs: vec2[] = [];\n let tileMirrors: boolean[] = [];\n let tileScales: number[] = [];\n for (let i = 0; i < this.gameObjects.length; i++) {\n let go: GameObject = this.gameObjects[this.gameObjects.length - i - 1];\n tilePositions.push(go.getPosition());\n tileUvs.push(go.getSpriteUv());\n tileMirrors.push(go.facingLeft());\n tileScales.push(go.size);\n }\n for (let ter of this.terrainObjects) {\n for (let x of ter.tiles.keys()) {\n for (let y of ter.tiles.get(x)) {\n let horCamDist = Math.abs(x + this.camera.position[0]);\n let verCamDist = Math.abs(y + this.camera.position[1]);\n if (horCamDist > this.camera.getWidth() / 2 + 1 ||\n verCamDist > this.camera.getHeight() / 2 + 1\n ) {\n continue;\n }\n tilePositions.push(vec2.fromValues(x, y));\n tileUvs.push(ter.getSpritePosition(x, y));\n tileMirrors.push(false);\n tileScales.push(1);\n }\n }\n }\n\n let totalPositions: vec2\n this.tile.setInstanceVBOs(tilePositions, tileUvs, tileMirrors, tileScales);\n this.tile.setNumInstances(tilePositions.length);\n\n this.backgroundShader.setWin(this.win);\n this.spriteShader.setWin(this.win);\n\n this.renderer.render(this.camera, this.backgroundShader, [this.background]);\n this.renderer.render(this.camera, this.spriteShader, [this.tile]);\n }\n\n // Only call from GameObject class\n addGameObject(go: GameObject) {\n if (this.gameObjects.indexOf(go) < 0) {\n this.gameObjects.push(go);\n if (go.isCollidable() && !go.isPassive()) {\n this.collidableObjects.push(go);\n }\n }\n }\n\n // Only call from the GameObject cass\n destroyGameObject(go: GameObject) {\n let idx = this.gameObjects.indexOf(go);\n if (idx >= 0) {\n this.gameObjects.splice(idx, 1);\n }\n idx = this.collidableObjects.indexOf(go);\n if (idx >= 0) {\n this.collidableObjects.splice(idx, 1);\n }\n }\n\n getCollidableObjects() {\n return this.collidableObjects;\n }\n\n private updateGameObjects(deltaTime: number) {\n\n for (let go of this.gameObjects) {\n if (!this.win) {\n go.physicsUpdate(deltaTime);\n }\n go.onUpdate(deltaTime);\n for (let key of this.downkeys) {\n go.onKeyPress(key);\n }\n }\n\n for (let go1 of this.gameObjects) {\n if (go1.isPassive() || !go1.isCollidable) {\n continue;\n }\n for (let go2 of this.gameObjects) {\n if (!go2.isCollidable || go1 === go2) {\n continue;\n }\n go1.checkObjectCollisions(go2);\n }\n }\n\n this.camera.update();\n }\n\n startGame() {\n this.lastTick = Date.now();\n }\n\n tick() {\n this.ticks++;\n this.backgroundShader.setTime(this.ticks);\n this.spriteShader.setTime(this.ticks);\n let curTime = Date.now();\n let deltaTime = curTime - this.lastTick;\n this.lastTick = curTime;\n this.updateGameObjects(deltaTime / 1000.0);\n }\n}\n\nexport default GameEngine;","import {vec2, vec3} from 'gl-matrix';\nimport GameObject from '../engine/GameObject';\nimport sceneAttributes from '../scene/SceneAttributes';\nimport {spriteCoordinates} from '../constants';\n\nfunction random1(p: vec2, seed: vec2) : number {\n let fract = (n: number) => n - Math.floor(n);\n return fract(Math.sin(vec2.dot(\n vec2.add(vec2.create(), p, seed),\n vec2.fromValues(127.1, 311.7))\n ) * 41352.5245);\n} \n\nclass Terrain {\n\n tiles: Map>;\n randomOffset: number;\n\n constructor() {\n this.tiles = new Map();\n this.randomOffset = Math.random();\n }\n\n static makeTestTerrain(): Terrain {\n let terrain: Terrain = new Terrain();\n for (let i = -2; i < 15; i++) {\n if (i < 4 || i > 7) {\n terrain.setTileAt([i, -3]);\n terrain.setTileAt([i, -4]);\n }\n if (i > 9) {\n terrain.setTileAt([i, -2]);\n }\n if (i > 11) {\n terrain.setTileAt([i, -1]);\n terrain.setTileAt([i, 0]);\n }\n }\n\n terrain.setTileAt([18, 0]);\n terrain.setTileAt([23, 2]);\n return terrain;\n }\n\n tileAt(x: number, y: number): boolean {\n x = Math.floor(x);\n y = Math.floor(y);\n if (this.tiles.has(x)) {\n return this.tiles.get(x).has(y);\n }\n return false;\n }\n\n setTileAt(pos: number[] | vec2) {\n let [x, y] = pos;\n x = Math.floor(x);\n y = Math.floor(y);\n if (this.tiles.has(x)) {\n this.tiles.get(x).add(y);\n }\n else {\n this.tiles.set(x, new Set([y]));\n }\n }\n\n setColumnAt(pos: number[] | vec2) {\n let [x, y] = pos;\n for (let i = sceneAttributes.deathHeight - 1; i <= y; i++) {\n this.setTileAt([x, i]);\n }\n }\n\n getSpritePosition(x: number, y: number): vec2 {\n x = Math.floor(x);\n y = Math.floor(y);\n let tl = this.tileAt(x - 1, y + 1);\n let tc = this.tileAt(x + 0, y + 1);\n let tr = this.tileAt(x + 1, y + 1);\n let cl = this.tileAt(x - 1, y + 0);\n let cr = this.tileAt(x + 1, y + 0);\n let bl = this.tileAt(x - 1, y - 1);\n let bc = this.tileAt(x + 0, y - 1);\n let br = this.tileAt(x + 1, y - 1);\n\n if (!cr && !cl && !tc && !bc) {\n return spriteCoordinates.SPRITE_TERRAIN_SINGLE;\n }\n else if (tc && !cr && !cl) {\n return spriteCoordinates.SPRITE_TERRAIN_COLUMN;\n }\n else if (!cr && !cl) {\n return spriteCoordinates.SPRITE_TERRAIN_CAP;\n }\n else if (!tc && cl && cr) {\n return spriteCoordinates.SPRITE_TERRAIN_TOP;\n }\n else if (!bc && cl && cr) {\n return spriteCoordinates.SPRITE_TERRAIN_BOTTOM;\n }\n else if (!cr && tc && bc) {\n return spriteCoordinates.SPRITE_TERRAIN_RIGHT;\n }\n else if (!cl && tc && bc) {\n return spriteCoordinates.SPRITE_TERRAIN_LEFT;\n }\n else if (!tc && !cl) {\n return spriteCoordinates.SPRITE_TERRAIN_TOP_LEFT;\n }\n else if (!tc && !cr) {\n return spriteCoordinates.SPRITE_TERRAIN_TOP_RIGHT;\n }\n else if (!br && !bc && !cr) {\n return spriteCoordinates.SPRITE_TERRAIN_BOTTOM_RIGHT;\n }\n else if (!bl && !bc && !cl) {\n return spriteCoordinates.SPRITE_TERRAIN_BOTTOM_LEFT;\n }\n else if (!tl && tc && cl && bc && cr) {\n return spriteCoordinates.SPRITE_TERRAIN_LEFT_INNER_CORNER;\n }\n else if (!tr && tc && cl && bc && cr) {\n return spriteCoordinates.SPRITE_TERRAIN_RIGHT_INNER_CORNER;\n }\n else {\n let tileRng = random1(vec2.fromValues(x, y), vec2.fromValues(0.1324, 0.4234 + this.randomOffset));\n if (tileRng < 0.05) {\n return spriteCoordinates.SPRITE_TERRAIN_MIDDLE_ALT_1;\n }\n else if (tileRng < 0.10) {\n return spriteCoordinates.SPRITE_TERRAIN_MIDDLE_ALT_2;\n }\n else if (tileRng < 0.15) {\n return spriteCoordinates.SPRITE_TERRAIN_MIDDLE_ALT_3;\n }\n else if (tileRng < 0.20) {\n return spriteCoordinates.SPRITE_TERRAIN_MIDDLE_ALT_4;\n }\n else {\n return spriteCoordinates.SPRITE_TERRAIN_MIDDLE;\n }\n }\n }\n}\n\nexport default Terrain;","let sceneAttributes = {\n rhythmType: 0,\n rhythmGroupLength: 20,\n levelDensity: 1,\n numberOfGroups: 3,\n\n gravity: 2.5,\n playerSpeed: 9.5,\n playerJump: 5.5,\n maxJumpHold: 0.4,\n maxObjectSpeed: 55,\n deathHeight: -25,\n}\n\nexport default sceneAttributes","import {vec2} from 'gl-matrix';\n\nexport const spriteCoordinates = {\n\n // Terrain\n SPRITE_TERRAIN_TOP_LEFT: vec2.fromValues(0, 0),\n SPRITE_TERRAIN_TOP: vec2.fromValues(1, 0),\n SPRITE_TERRAIN_TOP_RIGHT: vec2.fromValues(2, 0),\n SPRITE_TERRAIN_LEFT: vec2.fromValues(0, 1),\n SPRITE_TERRAIN_MIDDLE: vec2.fromValues(1, 1),\n SPRITE_TERRAIN_MIDDLE_ALT_1: vec2.fromValues(5, 2),\n SPRITE_TERRAIN_MIDDLE_ALT_2: vec2.fromValues(5, 3),\n SPRITE_TERRAIN_MIDDLE_ALT_3: vec2.fromValues(6, 3),\n SPRITE_TERRAIN_MIDDLE_ALT_4: vec2.fromValues(6, 1),\n SPRITE_TERRAIN_RIGHT: vec2.fromValues(2, 1),\n SPRITE_TERRAIN_BOTTOM_LEFT: vec2.fromValues(0, 2),\n SPRITE_TERRAIN_BOTTOM: vec2.fromValues(1, 2),\n SPRITE_TERRAIN_BOTTOM_RIGHT: vec2.fromValues(2, 2),\n SPRITE_TERRAIN_SINGLE: vec2.fromValues(4, 0),\n SPRITE_TERRAIN_LEFT_INNER_CORNER: vec2.fromValues(5, 1),\n SPRITE_TERRAIN_RIGHT_INNER_CORNER: vec2.fromValues(6, 2),\n SPRITE_TERRAIN_COLUMN: vec2.fromValues(7, 1),\n SPRITE_TERRAIN_CAP: vec2.fromValues(7, 0),\n\n // Entities\n SPRITE_PICKUP: vec2.fromValues(0, 3),\n SPRITE_SPIKE: vec2.fromValues(3, 2),\n SPRITE_PLATFORM_LEFT: vec2.fromValues(5, 4),\n SPRITE_PLATFORM_RIGHT: vec2.fromValues(6, 4),\n\n // Player\n SPRITE_PLAYER_STAND: vec2.fromValues(0, 7),\n SPRITE_PLAYER_JUMP: vec2.fromValues(1, 7),\n SPRITE_PLAYER_WALK_1: vec2.fromValues(2, 7),\n SPRITE_PLAYER_WALK_2: vec2.fromValues(3, 7),\n SPRITE_PLAYER_CROUCH: vec2.fromValues(4, 7),\n SPRITE_PLAYER_IDLE1: vec2.fromValues(5, 7),\n SPRITE_PLAYER_IDLE2: vec2.fromValues(6, 7),\n SPRITE_PLAYER_DEATH: vec2.fromValues(7, 7),\n\n // Coin\n SPRITE_COIN_1: vec2.fromValues(0, 3),\n SPRITE_COIN_2: vec2.fromValues(1, 3),\n SPRITE_COIN_3: vec2.fromValues(2, 3),\n SPRITE_COIN_4: vec2.fromValues(0, 4),\n SPRITE_COIN_5: vec2.fromValues(1, 4),\n SPRITE_GEM: vec2.fromValues(6, 5),\n\n // Particles\n SPRITE_Z: vec2.fromValues(6, 6),\n SPRITE_POFF: vec2.fromValues(7, 6),\n SPRITE_SPARKLE: vec2.fromValues(5, 6),\n\n // Enemy\n SPRITE_BADDIE_1: vec2.fromValues(0, 5),\n SPRITE_BADDIE_2: vec2.fromValues(1, 5),\n\n // Checkpoint\n SPRITE_FLAG_1: vec2.fromValues(2, 4),\n SPRITE_FLAG_2: vec2.fromValues(3, 4),\n SPRITE_FLAG_3: vec2.fromValues(4, 4),\n SPRITE_CHECK_1: vec2.fromValues(2, 5),\n SPRITE_CHECK_2: vec2.fromValues(3, 5),\n SPRITE_CHECK_3: vec2.fromValues(4, 5),\n}","import {vec2, vec3} from 'gl-matrix';\nimport Drawable from '../rendering/gl/Drawable';\nimport {gl} from '../globals';\n\nclass Tile extends Drawable {\n indices: Uint32Array;\n positions: Float32Array;\n uvs: Float32Array;\n offsets: Float32Array;\n mirrors: Int32Array;\n scales: Float32Array;\n\n constructor() {\n super();\n }\n\n create() {\n this.indices = new Uint32Array([0, 1, 2, 0, 2, 3]);\n this.positions = new Float32Array([\n 0, 0,\n 1, 0,\n 1, 1,\n 0, 1\n ]);\n\n this.count = this.indices.length;\n\n this.generateIdx();\n this.generatePos();\n this.generateUV();\n this.generateOff();\n this.generateMir();\n this.generateScale();\n\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.bufIdx);\n gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, this.indices, gl.STATIC_DRAW);\n \n gl.bindBuffer(gl.ARRAY_BUFFER, this.bufPos);\n gl.bufferData(gl.ARRAY_BUFFER, this.positions, gl.STATIC_DRAW);\n }\n\n isInstanced() {\n return true;\n }\n\n setInstanceVBOs(posOffsets: vec2[], uvOffsets: vec2[], mirrors: boolean[], scales: number[]) {\n let posOffsetArray = [];\n let uvOffsetArray = [];\n let mirrorArray = [];\n for (let posOffset of posOffsets) {\n posOffsetArray.push(posOffset[0], posOffset[1]);\n }\n for (let uvOffset of uvOffsets) {\n uvOffsetArray.push(uvOffset[0], uvOffset[1]);\n }\n for (let mirror of mirrors) {\n mirrorArray.push(mirror ? 1 : 0);\n }\n this.offsets = new Float32Array(posOffsetArray);\n this.uvs = new Float32Array(uvOffsetArray);\n this.mirrors = new Int32Array(mirrorArray);\n this.scales = new Float32Array(scales);\n gl.bindBuffer(gl.ARRAY_BUFFER, this.bufOff);\n gl.bufferData(gl.ARRAY_BUFFER, this.offsets, gl.STATIC_DRAW);\n gl.bindBuffer(gl.ARRAY_BUFFER, this.bufUV);\n gl.bufferData(gl.ARRAY_BUFFER, this.uvs, gl.STATIC_DRAW);\n gl.bindBuffer(gl.ARRAY_BUFFER, this.bufMir);\n gl.bufferData(gl.ARRAY_BUFFER, this.mirrors, gl.STATIC_DRAW);\n gl.bindBuffer(gl.ARRAY_BUFFER, this.bufScale);\n gl.bufferData(gl.ARRAY_BUFFER, this.scales, gl.STATIC_DRAW);\n }\n}\n\nexport default Tile;","import {gl} from '../../globals';\n\nabstract class Drawable {\n count: number = 0;\n\n bufIdx: WebGLBuffer;\n bufPos: WebGLBuffer;\n bufOff: WebGLBuffer;\n bufUV: WebGLBuffer;\n bufMir: WebGLBuffer;\n bufScale: WebGLBuffer;\n \n idxGenerated: boolean = false;\n posGenerated: boolean = false;\n uvGenerated: boolean = false;\n offGenerated: boolean = false;\n mirGenerated: boolean = false;\n scaleGenerated: boolean = false;\n \n numInstances: number = 0; // How many instances of this Drawable the shader program should draw\n \n abstract create() : void;\n\n abstract isInstanced() : boolean;\n \n destroy() {\n gl.deleteBuffer(this.bufIdx);\n gl.deleteBuffer(this.bufPos);\n gl.deleteBuffer(this.bufOff);\n gl.deleteBuffer(this.bufUV);\n gl.deleteBuffer(this.bufMir);\n gl.deleteBuffer(this.bufScale);\n }\n \n generateIdx() {\n this.idxGenerated = true;\n this.bufIdx = gl.createBuffer();\n }\n \n generatePos() {\n this.posGenerated = true;\n this.bufPos = gl.createBuffer();\n }\n \n generateUV() {\n this.uvGenerated = true;\n this.bufUV = gl.createBuffer();\n }\n\n generateOff() {\n this.offGenerated = true;\n this.bufOff = gl.createBuffer();\n }\n\n generateMir() {\n this.mirGenerated = true;\n this.bufMir = gl.createBuffer();\n }\n\n generateScale() {\n this.scaleGenerated = true;\n this.bufScale = gl.createBuffer();\n }\n \n bindIdx(): boolean {\n if (this.idxGenerated) {\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.bufIdx);\n }\n return this.idxGenerated;\n }\n \n bindPos(): boolean {\n if (this.posGenerated) {\n gl.bindBuffer(gl.ARRAY_BUFFER, this.bufPos);\n }\n return this.posGenerated;\n }\n \n bindUV(): boolean {\n if (this.uvGenerated) {\n gl.bindBuffer(gl.ARRAY_BUFFER, this.bufUV);\n }\n return this.uvGenerated;\n }\n\n bindOff(): boolean {\n if (this.offGenerated) {\n gl.bindBuffer(gl.ARRAY_BUFFER, this.bufOff);\n }\n return this.offGenerated;\n }\n\n bindMir(): boolean {\n if (this.mirGenerated) {\n gl.bindBuffer(gl.ARRAY_BUFFER, this.bufMir);\n }\n return this.mirGenerated;\n }\n\n bindScale(): boolean {\n if (this.scaleGenerated) {\n gl.bindBuffer(gl.ARRAY_BUFFER, this.bufScale);\n }\n return this.scaleGenerated;\n }\n \n elemCount(): number {\n return this.count;\n }\n \n drawMode(): GLenum {\n return gl.TRIANGLES;\n }\n \n setNumInstances(num: number) {\n this.numInstances = num;\n }\n};\n\nexport default Drawable;\n","import {vec2, vec3} from 'gl-matrix';\nimport Drawable from '../rendering/gl/Drawable';\nimport {gl} from '../globals';\n\nclass Background extends Drawable {\n indices: Uint32Array;\n positions: Float32Array;\n uvs: Float32Array;\n offsets: Float32Array;\n mirrors: Int32Array;\n scales: Float32Array;\n\n constructor() {\n super();\n this.numInstances = 1;\n }\n\n create() {\n this.indices = new Uint32Array([0, 1, 2, 0, 2, 3]);\n this.positions = new Float32Array([\n -1.0, -1.0,\n 1.0, -1.0,\n 1.0, 1.0,\n -1.0, 1.0\n ]);\n this.uvs = new Float32Array([\n 0, 1,\n 1, 1,\n 1, 0,\n 0, 0\n ]);\n this.count = this.indices.length;\n\n this.generateIdx();\n this.generatePos();\n this.generateUV();\n\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.bufIdx);\n gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, this.indices, gl.STATIC_DRAW);\n \n gl.bindBuffer(gl.ARRAY_BUFFER, this.bufPos);\n gl.bufferData(gl.ARRAY_BUFFER, this.positions, gl.STATIC_DRAW);\n\n gl.bindBuffer(gl.ARRAY_BUFFER, this.bufUV);\n gl.bufferData(gl.ARRAY_BUFFER, this.uvs, gl.STATIC_DRAW);\n }\n\n isInstanced() {\n return false;\n }\n}\n\nexport default Background;","import {vec2, mat4} from 'gl-matrix';\nimport GameObject from './engine/GameObject';\nimport sceneAttributes from './scene/SceneAttributes';\nimport Player from './scene/Player';\n\nclass Camera {\n controls: any;\n projectionMatrix: mat4 = mat4.create();\n viewMatrix: mat4 = mat4.create();\n aspectRatio: number = 1;\n position: vec2 = vec2.create();\n child: Player = null;\n width: number;\n height: number;\n \n constructor(position: vec2, height: number) {\n this.position = vec2.fromValues(position[0], position[1]);\n this.height = height;\n this.width = height;\n }\n \n setAspectRatio(aspectRatio: number) {\n this.aspectRatio = aspectRatio;\n this.width = this.height * aspectRatio;\n }\n\n getWidth(): number {\n return this.width;\n }\n\n getHeight(): number {\n return this.height;\n }\n \n updateProjectionMatrix() {\n let w = this.width / 2;\n let h = this.height / 2;\n mat4.ortho(this.projectionMatrix, -w, w, -h, h, -1, 1);\n }\n\n setPosition(newPos: vec2 | number[]) {\n this.position = vec2.fromValues(newPos[0], newPos[1]);\n mat4.translate(this.viewMatrix, mat4.create(), [newPos[0], newPos[1], 0]);\n }\n\n translate(amount: vec2 | number[]) {\n vec2.add(this.position, this.position, amount);\n mat4.translate(this.viewMatrix, mat4.create(), [this.position[0], this.position[1], 0]);\n }\n\n\n makeParent(child: Player) {\n this.child = child;\n }\n\n update(): void {\n if (this.child) {\n let yPos = this.position[1];\n let offset = this.child.sPressed && this.child.isGrounded ? -3 : 2\n let goalPos = -Math.max(this.child.getPosition()[1] + offset, sceneAttributes.deathHeight + 10);\n\n if (this.child.isGrounded && Math.abs(yPos - goalPos) > 0.01) {\n yPos += (goalPos - yPos) * 0.06;\n }\n else {\n yPos += (goalPos - yPos) * 0.015;\n }\n this.setPosition([-this.child.getPosition()[0], yPos]); \n }\n }\n};\n\nexport default Camera;\n","import {vec2, vec4, mat4, mat3} from 'gl-matrix';\nimport Drawable from './Drawable';\nimport Texture2D from '../Texture2D';\nimport {gl} from '../../globals';\n\nvar activeProgram: WebGLProgram = null;\n\nexport class Shader {\n shader: WebGLShader;\n \n constructor(type: number, source: string) {\n this.shader = gl.createShader(type);\n gl.shaderSource(this.shader, source);\n gl.compileShader(this.shader);\n \n if (!gl.getShaderParameter(this.shader, gl.COMPILE_STATUS)) {\n throw gl.getShaderInfoLog(this.shader);\n }\n }\n};\n\nclass ShaderProgram {\n prog: WebGLProgram;\n \n attrPos: number;\n attrUV: number;\n attrOff: number;\n attrMir: number;\n attrScale: number;\n \n unifModel: WebGLUniformLocation;\n unifModelInvTr: WebGLUniformLocation;\n unifViewProj: WebGLUniformLocation;\n unifTime: WebGLUniformLocation;\n unifCam: WebGLUniformLocation;\n unifDimensions: WebGLUniformLocation;\n unifSpriteTex: WebGLUniformLocation;\n unifWin: WebGLUniformLocation;\n \n constructor(shaders: Array) {\n this.prog = gl.createProgram();\n \n for (let shader of shaders) {\n gl.attachShader(this.prog, shader.shader);\n }\n gl.linkProgram(this.prog);\n if (!gl.getProgramParameter(this.prog, gl.LINK_STATUS)) {\n throw gl.getProgramInfoLog(this.prog);\n }\n \n this.attrPos = gl.getAttribLocation(this.prog, \"vs_Pos\");\n this.attrUV = gl.getAttribLocation(this.prog, \"vs_UV\");\n this.attrOff = gl.getAttribLocation(this.prog, \"vs_Offset\");\n this.attrMir = gl.getAttribLocation(this.prog, \"vs_MirrorUv\");\n this.attrScale = gl.getAttribLocation(this.prog, \"vs_Scale\");\n \n this.unifModel = gl.getUniformLocation(this.prog, \"u_Model\");\n this.unifModelInvTr = gl.getUniformLocation(this.prog, \"u_ModelInvTr\");\n this.unifViewProj = gl.getUniformLocation(this.prog, \"u_ViewProj\");\n this.unifDimensions = gl.getUniformLocation(this.prog, \"u_Dimensions\");\n this.unifTime = gl.getUniformLocation(this.prog, \"u_Time\");\n this.unifCam = gl.getUniformLocation(this.prog, \"u_CameraPos\");\n this.unifSpriteTex = gl.getUniformLocation(this.prog, \"u_SpriteTex\");\n this.unifWin = gl.getUniformLocation(this.prog, \"u_Win\");\n }\n \n use() {\n if (activeProgram !== this.prog) {\n gl.useProgram(this.prog);\n activeProgram = this.prog;\n }\n }\n \n setCameraPos(pos: vec2) {\n this.use();\n if(this.unifCam !== -1) {\n gl.uniform2f(this.unifCam, pos[0], pos[1]);\n }\n }\n \n setDimensions(width: number, height: number) {\n this.use();\n if(this.unifDimensions !== -1) {\n gl.uniform2f(this.unifDimensions, width, height);\n }\n }\n\n setWin(win: boolean) {\n this.use();\n if (this.unifWin !== -1) {\n gl.uniform1i(this.unifWin, win ? 1 : 0);\n }\n } \n \n setModelMatrix(model: mat4) {\n this.use();\n if (this.unifModel !== -1) {\n gl.uniformMatrix4fv(this.unifModel, false, model);\n }\n \n if (this.unifModelInvTr !== -1) {\n let modelinvtr: mat4 = mat4.create();\n mat4.transpose(modelinvtr, model);\n mat4.invert(modelinvtr, modelinvtr);\n gl.uniformMatrix4fv(this.unifModelInvTr, false, modelinvtr);\n }\n }\n \n setViewProjMatrix(vp: mat4) {\n this.use();\n if (this.unifViewProj !== -1) {\n gl.uniformMatrix4fv(this.unifViewProj, false, vp);\n }\n }\n \n setTime(t: number) {\n this.use();\n if (this.unifTime !== -1) {\n gl.uniform1f(this.unifTime, t);\n }\n }\n\n setSpriteTex(tex: Texture2D) {\n this.use();\n if (this.unifSpriteTex !== -1) {\n tex.loadTexture();\n gl.uniform1i(this.unifSpriteTex, tex.slot);\n }\n }\n \n draw(d: Drawable) {\n this.use();\n \n if (this.attrPos != -1 && d.bindPos()) {\n gl.enableVertexAttribArray(this.attrPos);\n gl.vertexAttribPointer(this.attrPos, 2, gl.FLOAT, false, 0, 0);\n gl.vertexAttribDivisor(this.attrPos, 0); // Advance 1 index in pos VBO for each vertex\n }\n \n if (this.attrUV != -1 && d.bindUV()) {\n gl.enableVertexAttribArray(this.attrUV);\n gl.vertexAttribPointer(this.attrUV, 2, gl.FLOAT, false, 0, 0);\n gl.vertexAttribDivisor(this.attrUV, d.isInstanced() ? 1 : 0);\n }\n\n if (this.attrOff != -1 && d.bindOff()) {\n gl.enableVertexAttribArray(this.attrOff);\n gl.vertexAttribPointer(this.attrOff, 2, gl.FLOAT, false, 0, 0);\n gl.vertexAttribDivisor(this.attrOff, 1);\n }\n\n if (this.attrMir != -1 && d.bindMir()) {\n gl.enableVertexAttribArray(this.attrMir);\n gl.vertexAttribIPointer(this.attrMir, 1, gl.INT, 0, 0);\n gl.vertexAttribDivisor(this.attrMir, 1);\n }\n\n if (this.attrScale != -1 && d.bindScale()) {\n gl.enableVertexAttribArray(this.attrScale);\n gl.vertexAttribPointer(this.attrScale, 1, gl.FLOAT, false, 0, 0);\n gl.vertexAttribDivisor(this.attrScale, 1);\n }\n \n d.bindIdx();\n if (d.isInstanced) {\n gl.drawElementsInstanced(d.drawMode(), d.elemCount(), gl.UNSIGNED_INT, 0, d.numInstances);\n }\n else {\n gl.drawElements(d.drawMode(), d.elemCount(), gl.UNSIGNED_INT, 0);\n }\n \n if (this.attrPos != -1) {\n gl.disableVertexAttribArray(this.attrPos);\n }\n if (this.attrUV != -1) {\n gl.disableVertexAttribArray(this.attrUV);\n }\n if (this.attrOff != -1) {\n gl.disableVertexAttribArray(this.attrOff);\n }\n }\n};\n\nexport default ShaderProgram;\n","import {gl} from '../globals';\n\n// https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API/Tutorial/Using_textures_in_WebGL\n\nclass Texture2D {\n image: HTMLImageElement;\n slot: number;\n loaded: boolean;\n\n constructor(path: string, slot: number = 0) {\n this.loaded = false;\n this.image = new Image();\n this.image.onload = () => {this.loaded = true}\n this.image.src = path;\n this.slot = slot;\n }\n\n private loadTextureCallback(texture: WebGLTexture): void {\n this.loaded = true;\n gl.activeTexture(gl.TEXTURE0 + this.slot);\n gl.bindTexture(gl.TEXTURE_2D, texture);\n\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, this.image);\n }\n\n loadTexture(): void {\n const texture = gl.createTexture();\n if (this.loaded) {\n this.loadTextureCallback(texture);\n }\n else {\n gl.bindTexture(gl.TEXTURE_2D, texture)\n this.image.onload = () => {this.loadTextureCallback(texture)};\n }\n }\n}\n\nexport default Texture2D;","import {vec2} from 'gl-matrix';\nimport RhythmGroup from './RhythmGroup';\nimport RhythmGroupGenerator from './RhythmGroupGenerator';\nimport GeometryGenerator from './GeometryGenerator';\nimport Terrain from '../scene/Terrain';\nimport Coin from '../scene/Coin';\nimport Spike from '../scene/Spike';\nimport Baddie from '../scene/Baddie';\n\nexport default class LevelGenerator {\n \n totalGroups: number;\n terrain: Terrain\n groupGenerator: RhythmGroupGenerator;\n geometryGenerator: GeometryGenerator;\n rhythmGroups: RhythmGroup[];\n\n constructor(\n _totalGroups: number,\n _terrain: Terrain,\n minGroupDuration: number,\n maxGroupDuration: number,\n density: number,\n jumpFrequency: number,\n beatFrequencies: number[]\n ) {\n this.totalGroups = _totalGroups;\n this.terrain = _terrain;\n this.rhythmGroups = [];\n\n // Create the rhythm generator\n this.groupGenerator = new RhythmGroupGenerator(\n minGroupDuration,\n maxGroupDuration,\n density,\n jumpFrequency,\n beatFrequencies\n );\n\n // Create the geometry generator\n this.geometryGenerator = new GeometryGenerator(this.terrain);\n }\n\n generateRhythms() {\n for (let i = 0; i < this.totalGroups; i++) {\n this.rhythmGroups.push(this.groupGenerator.generateRhythmGroup());\n }\n }\n\n generateGeometry(): Set {\n this.geometryGenerator.generateStartArea();\n for (let i = 0; i < this.rhythmGroups.length; i++) {\n let group = this.rhythmGroups[i];\n this.geometryGenerator.generateGroupGeometry(group);\n this.geometryGenerator.generateRestArea(14, i == this.rhythmGroups.length - 1);\n }\n return this.geometryGenerator.topTiles;\n }\n\n addCoins(topTiles: Set) {\n let topTileCopy = new Map();\n for (let tt of topTiles) {\n let tile = [tt[0], tt[1]];\n topTileCopy.set(tile.toString(), tile);\n }\n let platforms = [];\n let leftmost = -1;\n let rightmost = -1;\n while (topTileCopy.size > 0) {\n let curPlatform: number[][] = [];\n let curTile = topTileCopy.values().next().value;\n let curKey = curTile.toString();\n curPlatform.push(curTile);\n leftmost = curTile[0];\n rightmost = curTile[0];\n topTileCopy.delete(curKey);\n while (topTileCopy.has([leftmost - 1, curTile[1]].toString())) {\n let leftTile = [leftmost - 1, curTile[1]];\n curPlatform.push(leftTile)\n topTileCopy.delete(leftTile.toString());\n leftmost--;\n }\n while (topTileCopy.has([rightmost + 1, curTile[1]].toString())) {\n let rightTile = [rightmost + 1, curTile[1]];\n curPlatform.push(rightTile)\n topTileCopy.delete(rightTile.toString());\n rightmost++;\n }\n platforms.push(curPlatform);\n }\n\n let firstPlatform = true;\n for (let platform of platforms) {\n if (Math.random() < 0.25) {\n for (let tile of platform) {\n new Coin([tile[0], tile[1] + 1]);\n }\n }\n else if (\n platform.length >= 3 &&\n Math.random() < 0.2 &&\n !firstPlatform &&\n !this.geometryGenerator.isRestTile(platform[0])\n ) {\n let pos = platform[Math.floor(Math.random() * platform.length)];\n new Baddie([pos[0], pos[1] + 1], this.terrain);\n }\n firstPlatform = false;\n }\n }\n}","import RhythmGroup, {Verb, JumpType} from './RhythmGroup';\nimport sceneAttributes from '../scene/SceneAttributes';\n\nexport enum BeatPattern {\n REGULAR = 0,\n RANDOM = 1,\n SWING = 2\n}\n\nclass RhythmGroupGenerator {\n minGroupDuration: number;\n maxGroupDuration: number;\n patternFrequencies: Map;\n density: number;\n jumpFrequency: number;\n\n constructor(\n minDuration: number,\n maxDuration: number,\n density: number,\n jumpFrequency: number,\n beatFrequencies: number[],\n ) {\n this.minGroupDuration = minDuration;\n this.maxGroupDuration = maxDuration;\n this.patternFrequencies = new Map();\n this.jumpFrequency = jumpFrequency;\n\n let normalizer = beatFrequencies.reduce((prev: number, cur: number) => prev + cur);\n let patterns = [BeatPattern.REGULAR, BeatPattern.RANDOM, BeatPattern.SWING];\n for (let idx = 0; idx < patterns.length; idx++) {\n this.patternFrequencies.set(patterns[idx], beatFrequencies[idx] / normalizer);\n }\n this.density = density;\n }\n\n private getBeatTimes(groupDuration: number, pattern: BeatPattern): number[] {\n let out: number[] = [];\n let amount = Math.floor(groupDuration * this.density);\n\n let shortBeat = groupDuration / (2 * amount - 1.0);\n let longBeat = 3 * shortBeat;\n\n for (let i = 0; i < amount; i++) {\n if (pattern === BeatPattern.REGULAR) {\n out.push(i * (groupDuration * 1.0 / amount))\n }\n else if (pattern === BeatPattern.RANDOM) {\n out.push(Math.random() * groupDuration);\n }\n else if (pattern === BeatPattern.SWING) {\n if (i % 2 == 0) {\n out.push((i / 2) * (longBeat + shortBeat));\n }\n else {\n out.push(((i - 1) / 2) * (longBeat + shortBeat) + longBeat);\n }\n }\n }\n return out;\n }\n\n generateRhythmGroup(): RhythmGroup {\n let groupDuration: number = this.minGroupDuration === this.maxGroupDuration ?\n this.maxGroupDuration :\n Math.abs(Math.random() * (this.maxGroupDuration - this.minGroupDuration) + this.minGroupDuration);\n\n // Decide the beat pattern randomly\n let rng = Math.random();\n let cumulative = 0;\n let chosenPattern: BeatPattern;\n for (let frequency of this.patternFrequencies) {\n cumulative += frequency[1];\n if (cumulative > rng) {\n chosenPattern = frequency[0];\n break;\n }\n }\n\n let group: RhythmGroup = new RhythmGroup(groupDuration);\n let beatTimes: number[] = this.getBeatTimes(groupDuration, chosenPattern);\n\n let maxJumpHold = sceneAttributes.maxJumpHold;\n let jumpLengths = [JumpType.SHORT, JumpType.MEDIUM, JumpType.LONG];\n\n let lastJumpTime = -1;\n let lastJumpDuration = 0;\n group.addAction(Verb.MOVE, 0, groupDuration);\n for (let time of beatTimes) {\n if (time > lastJumpTime + lastJumpDuration) {\n if (Math.random() < this.jumpFrequency) {\n let jumpType = Math.floor(Math.random() * jumpLengths.length);\n group.addAction(Verb.JUMP, time, jumpLengths[jumpType]);\n }\n }\n }\n\n return group\n }\n}\n\nexport default RhythmGroupGenerator;","import sceneAttributes from '../scene/SceneAttributes';\n\nexport enum Verb {\n MOVE,\n JUMP\n}\n\nexport enum JumpType {\n SHORT = sceneAttributes.maxJumpHold * 0.75,\n MEDIUM = sceneAttributes.maxJumpHold * 0.875,\n LONG = sceneAttributes.maxJumpHold,\n}\n\nexport class Action {\n type: Verb;\n startTime: number;\n duration: number;\n\n constructor(_type: Verb, _startTime: number, _duration: number) {\n this.type = _type;\n this.startTime = _startTime;\n this.duration = _duration;\n }\n}\n\nclass RhythmGroup {\n\n actions: Action[];\n duration: number;\n\n constructor(_duration: number) {\n this.duration = _duration;\n this.actions = [];\n }\n\n addAction(type: Verb, startTime: number, actionDuration: number): boolean {\n\n let groupDuration = this.duration;\n if (startTime > groupDuration) {\n return false;\n }\n\n if (startTime + actionDuration > groupDuration && type !== Verb.JUMP) {\n actionDuration = groupDuration - startTime;\n }\n let newAction = new Action(type, startTime, actionDuration);\n this.actions.push(newAction);\n return true;\n }\n}\n\nexport default RhythmGroup;","import {vec2} from 'gl-matrix';\nimport RhythmGroupGenerator from './RhythmGroupGenerator'\nimport RhythmGroup, {Action, Verb, JumpType} from './RhythmGroup';\nimport sceneAttributes from '../scene/SceneAttributes';\nimport Terrain from '../scene/Terrain';\nimport Spike from '../scene/Spike';\nimport Coin from '../scene/Coin';\nimport Checkpoint from '../scene/Checkpoint';\nimport Gem from '../scene/Gem';\nimport Platform from '../scene/Platform';\nimport {spriteCoordinates} from '../constants';\n\ntype MovementState = {state: string, duration: number}\ntype JumpState = {startTime: number, jumpHold: number};\n\nexport default class GeometryGenerator {\n\n terrain: Terrain;\n currentPos: vec2;\n jumpHeights: Map\n curTime: number;\n topTiles: Set;\n restTiles: Map>;\n\n constructor(_terrain: Terrain) {\n this.terrain = _terrain;\n this.currentPos = vec2.fromValues(-3, -1);\n this.jumpHeights = new Map();\n this.jumpHeights.set(JumpType.SHORT, this.getJumpHeight(JumpType.SHORT));\n this.jumpHeights.set(JumpType.MEDIUM, this.getJumpHeight(JumpType.MEDIUM));\n this.jumpHeights.set(JumpType.LONG, this.getJumpHeight(JumpType.LONG));\n this.topTiles = new Set();\n this.restTiles = new Map();\n }\n\n private queuesFromRhythm(rhythm: RhythmGroup): {moveStates: MovementState[], jumpStates: JumpState[]} {\n let movement: MovementState[] = [];\n let jumps: JumpState[] = [];\n let lastMoveStartTime: number = 0;\n let lastMoveDuration: number = 0;\n for (let action of rhythm.actions) {\n if (action.type === Verb.MOVE) {\n if (movement.length > 0) {\n let curMoveStartTime = action.startTime;\n let lastMove = movement[movement.length - 1];\n movement.push({\n state: \"waiting\",\n duration: curMoveStartTime - (lastMoveStartTime + lastMoveDuration)\n });\n }\n lastMoveDuration = action.duration;\n movement.push({\n state: \"moving\",\n duration: action.duration\n })\n }\n else if (action.type === Verb.JUMP) {\n jumps.push({\n startTime: action.startTime,\n jumpHold: action.duration,\n });\n }\n }\n return {moveStates: movement, jumpStates: jumps};\n }\n\n // Calculate the height of a jump when the jump button is held for a specified amount of time\n // Also find the time it takes to get to that height\n private getJumpHeight(jumpHold: number): {height: number, time: number} {\n // This is, at its core, a ballistics problem. However, it's complicated by the fact\n // that the velocity is controlled by the player even after the jump begins. This means \n // that to find the max height, we have to separate the jump into 2 parts: the part \n // where the jump key is being held, and the part afterward. We have to find the height\n // and upward velocity acheived at the end of the first part, and then the second part\n // just becomes a simple physics problem. Getting those vectors will rely heavily on the\n // jumping implementation though.\n let gravity = sceneAttributes.gravity;\n let jumpVel = sceneAttributes.playerJump;\n\n // To simplify the math (and because it wouldn't be entirely accurate anyway)\n // I am just going to simulate jumping (assuming perfect framerate)\n let vel = 0;\n let inputvel = 0;\n let pos = 0;\n let jumpTime = jumpHold;\n let totalTime = 0;\n let flag = 0\n while (true) {\n if (flag > 1) {\n if (vel - gravity < 0) {\n break;\n }\n vel -= gravity;\n }\n flag++;\n vel += inputvel;\n pos += vel / 60.0;\n if (jumpTime > 0) {\n jumpTime -= 0.016;\n let t = Math.max(0, jumpTime / 0.4);\n inputvel = t * sceneAttributes.playerJump;\n }\n else {\n inputvel = 0\n }\n totalTime += 1.0 / 60;\n }\n return {height: pos, time: totalTime};\n }\n\n private addTopTile(tile: number[]|vec2, rest: boolean = false) {\n this.topTiles.add([tile[0], tile[1]]);\n if (rest) {\n if (this.restTiles.has(tile[0])) {\n this.restTiles.get(tile[0]).add(tile[1]);\n }\n else {\n this.restTiles.set(tile[0], new Set([tile[1]]));\n }\n }\n }\n\n isRestTile(tile: vec2|number[]): boolean {\n if (this.restTiles.has(tile[0])) {\n return this.restTiles.get(tile[0]).has(tile[1]);\n }\n return false;\n }\n\n private generateSimpleJump(jumpType: JumpType) {\n let height = this.jumpHeights.get(jumpType);\n let minHeight = Math.max(-4, sceneAttributes.deathHeight + 5 - this.currentPos[1]);\n let endHeight = Math.floor(Math.random() * (height.height - minHeight) + minHeight);\n let totalFrames = height.time * 60 + Math.sqrt((height.height - endHeight) / (sceneAttributes.gravity / 60));\n let totalDistance = Math.floor(sceneAttributes.playerSpeed * totalFrames / 60);\n\n if (totalDistance === 2 && endHeight === 0){\n endHeight = 1\n }\n\n this.currentPos[0] += totalDistance;\n this.currentPos[1] += endHeight;\n this.terrain.setTileAt(this.currentPos);\n this.addTopTile(this.currentPos);\n }\n\n private generateSpikeJump(jumpType: JumpType) {\n let height = this.jumpHeights.get(jumpType);\n let peakDistance = Math.floor(sceneAttributes.playerSpeed * height.time);\n let totalFrames = height.time * 60 + Math.sqrt(height.height / (sceneAttributes.gravity / 60));\n let totalDistance = Math.floor(sceneAttributes.playerSpeed * totalFrames / 60) + 2;\n \n for (let i = 0; i <= totalDistance; i++) {\n if (i === peakDistance) {\n this.terrain.setColumnAt([this.currentPos[0] + i, this.currentPos[1] - 1]);\n }\n else {\n this.terrain.setColumnAt([this.currentPos[0] + i, this.currentPos[1]]);\n this.addTopTile([this.currentPos[0] + i, this.currentPos[1]]);\n }\n }\n\n for (let i = 0; i < height.height; i++) {\n new Spike([this.currentPos[0] + peakDistance, this.currentPos[1] + i]);\n }\n for (let i = 0; i < 4; i++) {\n new Spike([\n this.currentPos[0] + peakDistance,\n height.height + this.currentPos[1] + 4 + i]);\n }\n\n if (Math.random() < 0.25) {\n new Coin([this.currentPos[0] + peakDistance + 0, this.currentPos[1] + height.height + 1]);\n }\n\n for (let i = -1; i <= 1; i++) {\n for (let j = 0; j <= 1; j++) {\n this.terrain.setTileAt([\n this.currentPos[0] + peakDistance + i,\n height.height + this.currentPos[1] + 9 + j\n ]);\n }\n }\n\n this.currentPos[0] += totalDistance;\n }\n\n generateSpikeGap (jumpType: JumpType) {\n let height = this.jumpHeights.get(jumpType);\n let totalFrames = height.time * 60 + Math.sqrt((height.height) / (sceneAttributes.gravity / 60));\n let totalDistance = Math.floor(sceneAttributes.playerSpeed * totalFrames / 60);\n let peakDistance = Math.floor(sceneAttributes.playerSpeed * height.time);\n\n for (let jump of this.jumpHeights.keys()) {\n if (jumpType != jump) {\n new Spike([\n this.currentPos[0] + peakDistance,\n this.currentPos[1] + this.jumpHeights.get(jump).height\n ])\n }\n else {\n new Coin([\n this.currentPos[0] + peakDistance,\n this.currentPos[1] + this.jumpHeights.get(jump).height\n ])\n }\n }\n\n this.currentPos[0] += totalDistance;\n this.terrain.setTileAt(this.currentPos);\n this.addTopTile(this.currentPos);\n }\n\n private generateStraightPath(length: number) {\n for (let i = 0; i < Math.round(length); i++) {\n this.terrain.setColumnAt(this.currentPos);\n this.addTopTile(this.currentPos);\n this.currentPos[0] += 1;\n }\n }\n\n private gentleDecline(length: number, decline: number) {\n let currentHeight = this.currentPos[1];\n for (let i = 0; i < Math.round(length); i++) {\n this.terrain.setColumnAt(this.currentPos);\n this.addTopTile(this.currentPos);\n currentHeight -= decline / length;\n this.currentPos[0] += 1;\n this.currentPos[1] = Math.round(currentHeight);\n }\n }\n\n generateGroupGeometry(rhythm: RhythmGroup) {\n let playerSpeed = sceneAttributes.playerSpeed;\n let queues = this.queuesFromRhythm(rhythm);\n let curTime = 0;\n\n for (let i = 0; i < queues.jumpStates.length; i++) {\n\n let jump = queues.jumpStates[i];\n let beatDuration = rhythm.duration - jump.startTime;\n if (i < queues.jumpStates.length - 1) {\n beatDuration = queues.jumpStates[i + 1].startTime - jump.startTime;\n }\n\n let prevX = this.currentPos[0];\n let obstacleType = Math.random();\n if (obstacleType < 0.2) {\n this.generateSpikeGap(jump.jumpHold);\n }\n else if (obstacleType < 0.4) {\n this.generateSpikeJump(jump.jumpHold);\n }\n else {\n this.generateSimpleJump(jump.jumpHold);\n }\n let jumpTime = (this.currentPos[0] - prevX) / playerSpeed;\n let remainingTime = beatDuration - jumpTime;\n if (remainingTime > 0) {\n let remainingLength = remainingTime * playerSpeed;\n if (Math.random() < 0.25) {\n this.gentleDecline(remainingLength, Math.random() < 0.5 ? 1 : 2);\n }\n else {\n this.generateStraightPath(remainingLength);\n }\n }\n }\n }\n\n\n generateRestArea(length: number, lastRest: boolean = false) {\n for (let i = 1; i <= length; i++) {\n this.addTopTile([this.currentPos[0] + i, this.currentPos[1] - 1], true);\n this.terrain.setTileAt([this.currentPos[0] + i, this.currentPos[1] - 1]);\n this.terrain.setTileAt([this.currentPos[0] + i, this.currentPos[1] - 2]);\n }\n\n this.terrain.setColumnAt([this.currentPos[0] + 1, this.currentPos[1] - 2])\n this.terrain.setColumnAt([this.currentPos[0] + length, this.currentPos[1] - 2])\n\n this.currentPos[0] += length;\n this.currentPos[1] -= 1;\n\n if (lastRest) {\n new Gem([\n Math.floor(this.currentPos[0] - length / 2),\n this.currentPos[1] + 1\n ]);\n }\n else {\n new Checkpoint([\n Math.floor(this.currentPos[0] - length / 2),\n this.currentPos[1] + 2\n ]);\n } \n }\n\n generateStartArea() {\n for (let i = -4; i <= 4; i++) {\n this.terrain.setTileAt([i, 0]);\n this.terrain.setTileAt([i, -1]);\n this.terrain.setTileAt([i, -3]);\n this.terrain.setTileAt([i, -4]);\n\n if (i !== -2 && i !== 2) {\n this.terrain.setTileAt([i, -2]);\n }\n this.currentPos[0] = 4;\n this.currentPos[1] = 0;\n }\n\n for (let i = sceneAttributes.deathHeight; i < -4; i++) {\n this.terrain.setTileAt([-4, i]);\n this.terrain.setTileAt([4, i]);\n }\n\n let m = (time: number) => {\n return vec2.fromValues(\n 0,\n 1 - Math.cos(time)\n );\n }\n }\n}\n","import {vec2, vec3} from 'gl-matrix';\nimport GameObject from '../engine/GameObject';\nimport sceneAttributes from './SceneAttributes';\nimport Particle from './Particle';\nimport {spriteCoordinates} from '../constants';\n\nclass Spike extends GameObject {\n\n constructor(pos: vec2 | number[]) {\n super(false, true, true);\n this.setPosition(pos);\n }\n\n getSpriteUv() {\n return spriteCoordinates.SPRITE_SPIKE;\n }\n}\n\nexport default Spike","import {vec2} from 'gl-matrix';\nimport Drawable from './../rendering/gl/Drawable';\nimport GameEngine from './GameEngine';\nimport Terrain from '../scene/Terrain';\nimport sceneAttributes from '../scene/SceneAttributes';\n\nabstract class GameObject {\n private drawable: Drawable;\n private position: vec2;\n private velocity: vec2;\n public size: number;\n protected inputVelocity: vec2;\n protected prevInputVelocty: vec2;\n protected passive: boolean;\n protected collidable: boolean;\n protected dynamic: boolean;\n protected grounded: boolean;\n protected direction: number;\n protected goCollide: boolean;\n get isGrounded() : boolean {\n return this.grounded;\n }\n\n constructor(isDynamic: boolean, isPassive: boolean, isCollidable: boolean) {\n this.dynamic = isDynamic;\n this.passive = isPassive;\n this.collidable = isCollidable;\n this.position = vec2.fromValues(0, 0);\n this.velocity = vec2.fromValues(0, 0);\n this.inputVelocity = vec2.fromValues(0, 0);\n this.prevInputVelocty = vec2.fromValues(0, 0);\n this.direction = 1;\n this.size = 1;\n\n GameEngine.getEngine().addGameObject(this);\n }\n\n destroy(): void {\n GameEngine.getEngine().destroyGameObject(this);\n this.drawable = null;\n }\n\n isPassive(): boolean {\n return this.passive;\n }\n\n isCollidable(): boolean {\n return this.collidable;\n }\n\n facingLeft(): boolean {\n return this.direction === -1;\n }\n\n getPosition(): vec2 {\n return vec2.fromValues(this.position[0], this.position[1]);\n }\n\n setPosition(newPosition: vec2 | number[]): void {\n this.position[0] = newPosition[0];\n this.position[1] = newPosition[1];\n }\n\n scale(amount: number) {\n this.size *= amount;\n }\n\n setSize(size: number) {\n this.size = size;\n }\n\n abstract getSpriteUv(): vec2;\n\n translate(amount: vec2|number[]): void {\n vec2.add(this.position, this.position, amount);\n }\n\n getVelocity(): vec2 {\n return vec2.fromValues(this.velocity[0], this.velocity[1]);\n }\n\n physicsUpdate(delta: number): void {\n if (!this.dynamic) {\n return;\n }\n\n let prevVelocity: vec2 = this.velocity;\n //this.velocity = vec2.fromValues(0, 0);\n\n // Apply gravity\n if (this.grounded) {\n this.velocity[1] = 0;\n }\n else {\n this.velocity[1] -= sceneAttributes.gravity;\n }\n\n // Apply non-physical motion\n if (Math.abs(this.inputVelocity[0]) > 0.001) {\n let influence = this.grounded ? 0.2 : 0.11;\n this.velocity[0] = (1 - influence) * this.velocity[0] + influence * this.inputVelocity[0];\n }\n else if (this.grounded) {\n this.velocity[0] *= 0.7;\n }\n else {\n this.velocity[0] *= 0.95;\n }\n this.velocity[1] += this.inputVelocity[1];\n // Scale back velocity if it's too high\n let speed: number = vec2.length(this.velocity);\n if (speed > sceneAttributes.maxObjectSpeed) {\n vec2.scale(this.velocity, this.velocity, sceneAttributes.maxObjectSpeed / speed);\n }\n\n // Update the object position, accounting for collisions\n // We assume that before applying any motion this frame, the object is not intersecting anything\n // We will use the following technique to do this:\n // - Apply the velocity vector to our position in the x axis only\n // - Check if, in this new position, the object intersects with the terrain (in all axes)\n // - If the object is now intersecting with a tile, we respond by pushing back the object by\n // the amount of the overlap\n // - Note that this pushback will only have to be in the x axis\n // - Repeat with the y-axis\n let deltaPos: vec2 = vec2.scale(vec2.create(), this.velocity, 1.0 / 60);\n this.goCollide = false;\n for (let axis = 0; axis < 2; axis++) {\n if (Math.abs(deltaPos[axis]) > 10e-6) {\n this.position[axis] += deltaPos[axis];\n let adjacentTiles: number[][] = this.getAdjacentTiles();\n for (let tile of adjacentTiles) {\n for (let terrain of GameEngine.getEngine().terrainObjects) {\n let response: vec2 = this.testTerrainCollision(terrain, tile, axis);\n vec2.add(this.position, this.position, response)\n }\n }\n for (let go of GameEngine.getEngine().getCollidableObjects()) {\n if (go.constructor.name === \"Platform\") {\n let response: vec2 = this.goCollisionResponse(go, axis);\n if (response[1] > 0.0001) {\n this.goCollide = true;\n }\n vec2.add(this.position, this.position, response);\n }\n }\n }\n }\n\n let groundedCheck = this.checkIfGrounded();\n if (!this.grounded && groundedCheck) {\n this.onGrounded(this.velocity[1]);\n }\n this.grounded = groundedCheck;\n vec2.copy(this.prevInputVelocty, this.inputVelocity);\n this.inputVelocity = vec2.fromValues(0, 0);\n }\n\n checkObjectCollisions(other: GameObject) {\n if (this.testGameObjectCollision(other)) {\n this.onCollision(other);\n }\n }\n\n private getAdjacentTiles(): number[][] {\n let x = Math.floor(this.position[0]);\n let y = Math.floor(this.position[1]);\n return [\n [x - 1, y + 1], [x + 0, y + 1], [x + 1, y + 1],\n [x - 1, y + 0], [x + 0, y + 0], [x + 1, y + 0],\n [x - 1, y - 1], [x + 0, y - 1], [x + 1, y - 1]\n ];\n }\n\n private testTerrainCollision(terrain: Terrain, tile: vec2 | number[], axis: number): vec2 {\n let tX = tile[0];\n let tY = tile[1];\n let pX = this.position[0];\n let pY = this.position[1];\n\n if (!terrain.tileAt(tX, tY)) {\n return vec2.create();\n }\n \n let xIntersect: boolean = pX < (tX + 1) && tX < (pX + 1);\n let yIntersect: boolean = pY < (tY + 1) && tY < (pY + 1);\n let isIntersecting: boolean = xIntersect && yIntersect;\n\n let axisVelocity: number = this.velocity[axis];\n if (isIntersecting) {\n let pushback: vec2 = vec2.create();\n if (axisVelocity > 0) {\n let isY = (axis == 1) ? 0 : 0;\n pushback[axis] = tile[axis] - (this.position[axis] + 1 + isY);\n }\n else {\n pushback[axis] = (tile[axis] + 1) - this.position[axis];\n }\n return pushback;\n }\n else {\n return vec2.create();\n }\n }\n\n private testGameObjectCollision(other: GameObject): boolean {\n let tX = other.getPosition()[0];\n let tY = other.getPosition()[1];\n let pX = this.position[0];\n let pY = this.position[1];\n\n // Anti-frustration feature\n if (other.constructor.name === \"Spike\" || other.constructor.name === \"Baddie\") {\n tX += 0.5;\n tY += 0.5;\n let xIntersect: boolean = tX > pX && tX < pX + 1;\n let yIntersect: boolean = tY > pY && tY < pY + 1;\n return xIntersect && yIntersect;;\n }\n \n let xIntersect: boolean = pX < (tX + 0.99) && tX < (pX + 0.99);\n let yIntersect: boolean = pY < (tY + 0.99) && tY < (pY + 0.99);\n let isIntersecting: boolean = xIntersect && yIntersect;\n return isIntersecting;\n }\n\n private goCollisionResponse(other: GameObject, axis: number): vec2 {\n let tX = other.position[0];\n let tY = other.position[1];\n let pX = this.position[0];\n let pY = this.position[1];\n\n if (other.passive || !other.collidable) {\n return vec2.create();\n }\n \n let xIntersect: boolean = pX < (tX + 1) && tX < (pX + 1);\n let yIntersect: boolean = pY < (tY + 1) && tY < (pY + 1);\n let isIntersecting: boolean = xIntersect && yIntersect;\n\n let axisVelocity: number = this.velocity[axis];\n if (isIntersecting) {\n let pushback: vec2 = vec2.create();\n if (axisVelocity > 0) {\n let isY = (axis == 1) ? 0 : 0;\n pushback[axis] = other.position[axis] - (this.position[axis] + 1 + isY);\n }\n else {\n pushback[axis] = (other.position[axis] + 1) - this.position[axis];\n }\n return pushback;\n }\n else {\n return vec2.create();\n }\n }\n\n private checkIfGrounded(): boolean {\n\n // Check if we would be colliding with a block if we were just a teensy bit lower\n let newPos: vec2 = vec2.subtract(vec2.create(), this.position, vec2.fromValues(0, 0.05));\n let gridPosition: vec2 = vec2.fromValues(\n Math.floor(newPos[0]),\n Math.floor(newPos[1])\n );\n\n for (let x = 0; x < 2; x++) {\n let tX = gridPosition[0] + x;\n let tY = gridPosition[1];\n let existsTile = false;\n for (let terrain of GameEngine.getEngine().terrainObjects) {\n if (terrain.tileAt(tX, tY)) {\n existsTile = true;\n break;\n }\n }\n if (!existsTile) {\n continue;\n }\n if (newPos[0] < (tX + 1) && tX < (newPos[0] + 1) &&\n newPos[1] < (tY + 1) && tY < (newPos[1] + 1))\n {\n return true;\n }\n }\n\n let oldPos = [this.position[0], this.position[1]];\n this.setPosition(newPos);\n for (let go of GameEngine.getEngine().getCollidableObjects()) {\n if (go.constructor.name === \"Platform\" && this.testGameObjectCollision(go)) {\n this.setPosition(oldPos);\n return true;\n }\n }\n this.setPosition(oldPos);\n return false;\n }\n\n onUpdate(delta: number): void {/* Please implement me*/};\n\n onKeyPress(key: string): void {/* Or don't */};\n\n onKeyDown(key: string): void {/* I don't really care too much at this point */};\n\n onKeyUp(key: string): void {/* I'm just holding out til graduation at this point */}\n\n protected onGrounded(verticalVelocity: number): void {}\n\n protected onCollision(other: GameObject): void {}\n\n}\n\nexport default GameObject;","import {vec2, vec3} from 'gl-matrix';\nimport GameObject from '../engine/GameObject';\nimport sceneAttributes from './SceneAttributes';\nimport Particle from './Particle';\nimport {spriteCoordinates} from '../constants';\n\nconst ANIMATION_FRAME_LENGTH: number = 5;\n\nclass Coin extends GameObject {\n\n animationFrame: number;\n\n constructor(pos: vec2 | number[]) {\n super(false, true, true);\n this.animationFrame = 0;\n this.setPosition(pos);\n this.direction = 1;\n }\n\n onUpdate(delta: number) {\n this.animationFrame = (this.animationFrame + 1) % (ANIMATION_FRAME_LENGTH * 8);\n if (Math.random() < 0.01) {\n let sparkle = new Particle(\n spriteCoordinates.SPRITE_SPARKLE,\n vec2.fromValues(\n this.getPosition()[0] + Math.random() - 0.5,\n this.getPosition()[1] + Math.random() - 0.5,\n ),\n 0.5\n );\n sparkle.setMovement((time: number) => {\n sparkle.setSize(time * (0.5 - time) * 8);\n return vec2.create();\n });\n }\n }\n\n getSpriteUv(): vec2 {\n if (this.animationFrame < ANIMATION_FRAME_LENGTH * 1) {\n return spriteCoordinates.SPRITE_COIN_1\n }\n else if (this.animationFrame < ANIMATION_FRAME_LENGTH * 2) {\n return spriteCoordinates.SPRITE_COIN_2;\n }\n else if (this.animationFrame < ANIMATION_FRAME_LENGTH * 3) {\n return spriteCoordinates.SPRITE_COIN_3;\n }\n else if (this.animationFrame < ANIMATION_FRAME_LENGTH * 4) {\n return spriteCoordinates.SPRITE_COIN_4;\n }\n else if (this.animationFrame < ANIMATION_FRAME_LENGTH * 5) {\n //this.direction = this.direction = -1;\n return spriteCoordinates.SPRITE_COIN_5;\n }\n else if (this.animationFrame < ANIMATION_FRAME_LENGTH * 6) {\n return spriteCoordinates.SPRITE_COIN_4;\n }\n else if (this.animationFrame < ANIMATION_FRAME_LENGTH * 7) {\n return spriteCoordinates.SPRITE_COIN_3;\n }\n else if (this.animationFrame < ANIMATION_FRAME_LENGTH * 8) {\n return spriteCoordinates.SPRITE_COIN_2;\n }\n\n }\n}\n\nexport default Coin;","import {vec2, vec3} from 'gl-matrix';\nimport GameObject from '../engine/GameObject';\n\nexport default class Particle extends GameObject {\n\n private spriteUv: vec2;\n private lifetime: number;\n private time: number;\n private movement: (t: number) => vec2;\n private startingPos: vec2;\n\n\n constructor (_spriteUv: vec2, _startingPos: vec2, _lifetime: number = Infinity) {\n super(false, true, false);\n this.spriteUv = _spriteUv;\n this.lifetime = _lifetime;\n this.time = 0;\n this.startingPos = _startingPos;\n this.movement = () => vec2.create();;\n }\n\n setMovement(move: (time: number) => vec2) {\n this.movement = move;\n }\n\n onUpdate (delta: number) {\n this.time += delta;\n if (this.time > this.lifetime) {\n this.destroy();\n }\n this.setPosition(vec2.add(vec2.create(), this.movement(this.time), this.startingPos));\n }\n\n getSpriteUv() {\n return this.spriteUv;\n }\n\n}","import {vec2, vec3} from 'gl-matrix';\nimport GameObject from '../engine/GameObject';\nimport sceneAttributes from './SceneAttributes';\nimport Particle from './Particle';\nimport {spriteCoordinates} from '../constants';\n\nconst ANIMATION_FRAME_LENGTH: number = 10;\n\nfunction random1(p: vec2, seed: vec2) : number {\n let fract = (n: number) => n - Math.floor(n);\n return fract(Math.sin(vec2.dot(\n vec2.add(vec2.create(), p, seed),\n vec2.fromValues(127.1, 311.7))\n ) * 41352.5245);\n} \n\nclass Checkpoint extends GameObject {\n\n animationFrame: number;\n claimed: boolean;\n\n constructor(pos: vec2 | number[]) {\n super(false, false, true);\n this.animationFrame = 0;\n this.setPosition(pos);\n this.claimed = false;\n }\n\n onUpdate(delta: number) {\n this.animationFrame = (this.animationFrame + 1) % (ANIMATION_FRAME_LENGTH * 3);\n }\n\n onCollision(other: GameObject) {\n if (other.constructor.name === \"Player\" && !this.claimed) {\n this.claimed = true;\n let numParticles = 30;\n for (let i = 0; i < numParticles; i++) {\n let p = new Particle(\n spriteCoordinates.SPRITE_SPARKLE,\n this.getPosition(),\n 1\n );\n p.setMovement((time: number) => {\n let angle = 2 * Math.floor(i / 2) * Math.PI / numParticles;\n let offset = random1(vec2.fromValues(i, 0), vec2.fromValues(0.231, 0.5436)) * 0.5;\n p.setSize(1 - time);\n return vec2.fromValues(\n Math.cos(angle) * time * 8 + offset,\n Math.sin(angle) * time * 8 + offset - time * time * 10\n );\n })\n }\n }\n }\n\n getSpriteUv(): vec2 {\n if (this.claimed) {\n if (this.animationFrame < 1 * ANIMATION_FRAME_LENGTH) {\n return spriteCoordinates.SPRITE_CHECK_1;\n }\n else if (this.animationFrame < 2 * ANIMATION_FRAME_LENGTH) {\n return spriteCoordinates.SPRITE_CHECK_2;\n }\n else {\n return spriteCoordinates.SPRITE_CHECK_3;\n }\n }\n else {\n if (this.animationFrame < 1 * ANIMATION_FRAME_LENGTH) {\n return spriteCoordinates.SPRITE_FLAG_1;\n }\n else if (this.animationFrame < 2 * ANIMATION_FRAME_LENGTH) {\n return spriteCoordinates.SPRITE_FLAG_2;\n }\n else {\n return spriteCoordinates.SPRITE_FLAG_3;\n }\n }\n }\n}\n\nexport default Checkpoint;","import {vec2, vec3} from 'gl-matrix';\nimport GameObject from '../engine/GameObject';\nimport GameEngine from '../engine/GameEngine';\nimport sceneAttributes from './SceneAttributes';\nimport Particle from './Particle';\nimport {spriteCoordinates} from '../constants';\n\nexport default class Gem extends GameObject {\n\n constructor(pos: vec2 | number[]) {\n super(false, false, true);\n this.setPosition(pos);\n }\n\n getSpriteUv(): vec2 {\n return spriteCoordinates.SPRITE_GEM;\n }\n\n onUpdate(delta: number) {\n if (Math.random() < 0.02) {\n let sparkle = new Particle(\n spriteCoordinates.SPRITE_SPARKLE,\n vec2.fromValues(\n this.getPosition()[0] + Math.random() - 0.5,\n this.getPosition()[1] + Math.random() - 0.5,\n ),\n 0.5\n );\n sparkle.setMovement((time: number) => {\n sparkle.setSize(time * (0.5 - time) * 8);\n return vec2.create();\n });\n }\n }\n\n onCollision(other: GameObject) {\n if (other.constructor.name === \"Player\") {\n GameEngine.getEngine().onWin();\n this.destroy();\n }\n }\n\n}","import {vec2, vec3} from 'gl-matrix';\nimport GameObject from '../engine/GameObject';\nimport sceneAttributes from './SceneAttributes';\nimport Particle from './Particle';\nimport {spriteCoordinates} from '../constants';\nimport Terrain from './Terrain';\n\nconst ANIMATION_FRAME_LENGTH: number = 12;\nconst ENEMY_SPEED: number = 4;\n\nclass Baddie extends GameObject {\n animationFrame: number;\n terrain: Terrain;\n\n constructor(pos: vec2 | number[], terrain: Terrain) {\n super(false, false, true);\n this.animationFrame = 0;\n this.setPosition(pos);\n this.direction = 1;\n this.terrain = terrain;\n }\n\n onUpdate(delta: number) {\n this.animationFrame = (this.animationFrame + 1) % ANIMATION_FRAME_LENGTH;\n let tileBelow = [this.getPosition()[0] + 0.01 * this.direction, this.getPosition()[1] - 0.01];\n let tileInFront = [this.getPosition()[0] + 0.01 * this.direction, this.getPosition()[1]];\n if (this.direction === 1) {\n tileInFront[0] += 1;\n tileBelow[0] += 1;\n }\n\n if (\n this.terrain.tileAt(tileInFront[0], tileInFront[1]) ||\n !this.terrain.tileAt(tileBelow[0], tileBelow[1])\n ) {\n this.direction *= -1;\n }\n this.translate([ENEMY_SPEED * 1.0 / 60 * this.direction, 0]);\n }\n\n getSpriteUv() {\n return this.animationFrame > ANIMATION_FRAME_LENGTH / 2 ? \n spriteCoordinates.SPRITE_BADDIE_1:\n spriteCoordinates.SPRITE_BADDIE_2;\n }\n}\n\nexport default Baddie;","module.exports = __webpack_public_path__ + \"e587b3e60139101eee5ff6d25a56bd70.png\";","module.exports = __webpack_public_path__ + \"ee6dced03346586918eef24f9eab9290.png\";","module.exports = \"#version 300 es\\nprecision highp float;\\n\\nuniform mat4 u_ViewProj;\\nuniform mat4 u_Model;\\n\\nin vec2 vs_Pos;\\nin vec2 vs_Offset;\\nin vec2 vs_UV;\\nin float vs_Scale;\\nin int vs_MirrorUv;\\nout vec2 fs_Pos;\\nout vec2 fs_UV;\\n\\nvoid main() {\\n fs_Pos = vs_Pos;\\n bool mirrorUv = vs_MirrorUv == 1;\\n fs_UV = vs_UV + vec2(mirrorUv ? 1.0 - vs_Pos.x : vs_Pos.x, 1.0 - vs_Pos.y);\\n\\n vec2 actualPos = (vs_Pos - vec2(0.5, 0.5)) * vs_Scale + vs_Offset + vec2(0.0, 0.0);\\n gl_Position = u_ViewProj * u_Model * vec4(actualPos, 0.5, 1);\\n}\\n\"","module.exports = \"#version 300 es\\nprecision highp float;\\n\\nuniform sampler2D u_SpriteTex;\\nuniform int u_Win;\\nuniform float u_Time;\\n\\nin vec2 fs_Pos;\\nin vec2 fs_UV;\\n\\nout vec4 out_Col;\\n\\n\\nvoid main() {\\n vec4 color = texture(u_SpriteTex, fs_UV / 8.0);\\n if (color.a < 0.5) {\\n discard;\\n }\\n if (u_Win == 1) {\\n color = vec4(0, 0, 0, 1);\\n }\\n out_Col = color;\\n}\\n\"","module.exports = \"#version 300 es\\nprecision highp float;\\n\\nuniform vec2 u_CameraPos;\\n\\nin vec2 vs_Pos;\\nin vec2 vs_UV;\\nout vec2 fs_Pos;\\nout vec2 fs_UV1;\\nout vec2 fs_UV2;\\n\\nvoid main() {\\n fs_Pos = vs_Pos;\\n const float squish1 = 1.8;\\n fs_UV1 = vec2(\\n vs_UV[0] / 1.5 - u_CameraPos[0] / 150.0,\\n (vs_UV[1] / 4.0) * squish1 - (squish1 / 4.0 - 0.25) + (u_CameraPos[1] + 2.0) / 100.0\\n );\\n\\n const float squish2 = 1.0;\\n fs_UV2 = vec2(\\n vs_UV[0] / 2.0 - u_CameraPos[0] / 300.0,\\n (vs_UV[1] / 4.0 + 0.25) * squish2 - (squish2 / 4.0 - 0.25) + (u_CameraPos[1] + 2.0) / 200.0\\n );\\n\\n gl_Position = vec4(vs_Pos, 0, 1);\\n}\\n\"","module.exports = \"#version 300 es\\nprecision highp float;\\n\\nuniform sampler2D u_SpriteTex;\\nuniform vec2 u_CameraPos;\\nuniform float u_Time;\\nuniform int u_Win;\\n\\nin vec2 fs_Pos;\\nin vec2 fs_UV1;\\nin vec2 fs_UV2;\\n\\nout vec4 out_Col;\\n\\nconst vec2 SEED2 = vec2(0.31415, 0.6456);\\n\\nvec3 palette(in float t, in vec3 a, in vec3 b, in vec3 c, in vec3 d){\\n return a + b*cos( 6.28318*(c*t+d) );\\n}\\n\\nfloat random1(vec2 p) {\\n return fract(sin(dot(p + SEED2, vec2(127.1, 311.7))) * 43758.5453);\\n}\\n\\nvec2 random2( vec2 p , vec2 seed) {\\n return fract(sin(vec2(dot(p + seed, vec2(311.7, 127.1)), dot(p + seed, vec2(269.5, 183.3)))) * 85734.3545);\\n}\\n\\nfloat worley(vec2 noisePos, float frequency) {\\n vec2 point = noisePos * frequency;\\n vec2 cell = floor(point);\\n\\n // Check the neighboring cells for the closest cell point\\n float closestDistance = 2.0;\\n for (int i = 0; i < 9; i++) {\\n vec2 curCell = cell + vec2(i % 3 - 1, floor(float(i / 3) - 1.0));\\n vec2 cellPoint = vec2(curCell) + random2(vec2(curCell), SEED2);\\n closestDistance = min(closestDistance, distance(cellPoint, point));\\n }\\n return clamp(0.0, 1.0, closestDistance);\\n}\\n\\nfloat brownianNoise(vec2 noisePos, vec2 seed) {\\n vec2 boxPos = vec2(floor(noisePos.x), floor(noisePos.y));\\n\\n // Get the noise at the corners of the cells\\n float corner0 = random1(boxPos + vec2(0.0, 0.0));\\n float corner1 = random1(boxPos + vec2(1.0, 0.0));\\n float corner2 = random1(boxPos + vec2(0.0, 1.0));\\n float corner3 = random1(boxPos + vec2(1.0, 1.0));\\n\\n // Get cubic interpolation factors\\n float tx = smoothstep(0.0, 1.0, fract(noisePos.x));\\n float ty = smoothstep(0.0, 1.0, fract(noisePos.y));\\n\\n // Perform bicubic interpolation\\n return mix(mix(corner0, corner1, tx), mix(corner2, corner3, tx), ty);\\n}\\n\\nfloat fbm(vec2 noisePos, int numOctaves, float startFrequency) {\\n float totalNoise = 0.0;\\n float normalizer = 0.0;\\n const float PERSISTENCE = 0.5;\\n\\n float frequency = startFrequency;\\n float amplitude = PERSISTENCE;\\n\\n for (int i = 0; i < numOctaves; i++) {\\n normalizer += amplitude;\\n totalNoise += brownianNoise(noisePos * frequency, SEED2) * amplitude;\\n frequency *= 2.0;\\n amplitude *= PERSISTENCE;\\n }\\n return totalNoise / normalizer;\\n}\\n\\nvoid main() {\\n vec2 uv1 = vec2(fs_UV1.x, clamp(fs_UV1.y, 0.000, 0.249));\\n vec2 uv2 = vec2(fs_UV2.x, clamp(fs_UV2.y, 0.251, 0.499));\\n float starRadius = 0.01 + abs(sin(u_Time * 0.01 + random1(fs_Pos) * 100.0)) * 0.01;\\n vec3 stars = worley(fs_Pos, 10.0) < starRadius ? vec3(1) : vec3(0);\\n vec4 sky = mix(vec4(0.3, 0.3, 0.25, 1.0), vec4(stars, 1), pow((fs_Pos[1] + 1.0) / 2.0, 0.5));\\n\\n vec4 layer1 = texture(u_SpriteTex, uv1);\\n vec4 layer2 = texture(u_SpriteTex, uv2);\\n\\n if (u_Win == 1) {\\n float t1 = cos(fs_Pos[0] + fs_Pos[1] + u_Time * 0.01);\\n float t2 = (sin(-2.0 * fs_Pos[1] + u_Time * 0.01) * cos(2.0 * fs_Pos[0] + u_Time * 0.01));\\n\\n float t3 = pow(fbm(fs_Pos - vec2(u_Time * 0.005) + vec2(\\n fbm(fs_Pos + vec2(u_Time * 0.001), 2, 2.5),\\n worley(fs_Pos, 10.0)\\n ), \\n 3, 5.0), 2.0);\\n\\n layer1.rgb = palette(t1, vec3(0.5), vec3(0.5), vec3(1), vec3(0, 0.33, 0.67)) * 0.2;\\n layer2.rgb = palette(t2, vec3(0.5), vec3(0.5), vec3(1), vec3(0, 0.33, 0.67)) * 0.4;\\n vec3 skyColor = palette(t3, vec3(0.5), vec3(0.5), vec3(1), vec3(0, 0.33, 0.67)) * 0.8;\\n sky.rgb = worley(fs_Pos, 10.0) < starRadius ? vec3(1) - skyColor : skyColor;\\n }\\n\\n vec4 color = \\n layer1.a > 0.5 ? layer1 :\\n layer2.a > 0.5 ? layer2 :\\n sky;\\n\\n out_Col = vec4(color.rgb, 1);\\n}\\n\"","import {vec2, vec3} from 'gl-matrix';\nimport GameObject from '../engine/GameObject';\nimport sceneAttributes from './SceneAttributes';\nimport Particle from './Particle';\nimport {spriteCoordinates} from '../constants';\n\nconst WALK_CYCLE_LENGTH: number = 10;\n\nclass Player extends GameObject {\n\n // Whether or not the player is affecting their jump by holding the jump button\n jumping: boolean;\n\n // The amount of time the player has been holding the jump button\n jumpTime: number;\n\n // Prevents the player from regrounding the frist frame of a jump\n groundedImmunity: boolean;\n\n // The direction the player is currently facing: 1 for right, -1 for left\n direction: number;\n\n // The current frame of the player's walk cycle\n walkFrame: number;\n\n // Whether or not the player is moving horizontally\n moving: boolean;\n\n aPressed: boolean;\n dPressed: boolean;\n sPressed: boolean;\n\n private startPos: vec2;\n private dead: boolean;\n private idleTime: number;\n private zTime: number;\n private deathTimer: number;\n win: boolean;\n\n constructor(_startPos: vec2 | number[]) {\n super(true, false, true);\n this.jumping = false;\n this.groundedImmunity = false;\n this.direction = 1;\n this.walkFrame = 0;\n this.moving = false;\n this.aPressed = false;\n this.dPressed = false;\n this.sPressed = false;\n this.startPos = vec2.create();\n vec2.copy(this.startPos, _startPos);\n this.setPosition(this.startPos);\n this.idleTime = 0;\n this.zTime = 0;\n this.dead = false;\n this.deathTimer = 0;\n this.win = false;\n }\n\n onUpdate(delta: number) {\n if (this.win) {\n return\n }\n if (this.dead) {\n this.dynamic = false;\n this.grounded = true;\n this.deathTimer++;\n this.direction = this.deathTimer % 20 < 10 ? 1 : -1;\n if (this.deathTimer > 40 && this.deathTimer < 70) {\n this.translate([0, (70 - this.deathTimer) * 0.025 - 15.0 / 60]);\n }\n if (this.deathTimer > 70) {\n this.translate([0, -15.0 / 60])\n }\n }\n if (this.jumping) {\n // I have decided to perform this operation in units of frames instead of seconds to ensure\n // that the jump height is consistent. It makes geometry generator calculations easier too\n this.jumpTime -= 0.016;\n let t = Math.max(0, this.jumpTime / 0.4);\n this.inputVelocity[1] = t * sceneAttributes.playerJump;\n }\n if (this.jumpTime <= 0 || (this.isGrounded && !this.groundedImmunity)) {\n this.jumping = false;\n }\n this.groundedImmunity = false;\n\n if (!this.aPressed && !this.dPressed || (this.aPressed && this.dPressed)) {\n this.moving = false;\n } \n\n if (this.moving) {\n this.walkFrame++;\n let skidThresh = sceneAttributes.playerSpeed / 4\n if (this.isGrounded && (\n (this.aPressed && this.getVelocity()[0] > skidThresh) ||\n (this.dPressed && this.getVelocity()[0] < -skidThresh))\n ) {\n let poff1 = new Particle(\n spriteCoordinates.SPRITE_POFF,\n vec2.fromValues(this.getPosition()[0], this.getPosition()[1] - 0.5),\n 0.25\n );\n poff1.scale(0.5)\n poff1.setMovement((time: number) => {\n poff1.scale(1.03)\n return vec2.fromValues(0, time * time * 10);\n })\n let poff2 = new Particle(\n spriteCoordinates.SPRITE_POFF,\n vec2.fromValues(this.getPosition()[0], this.getPosition()[1] - 0.5),\n 0.25\n );\n poff2.scale(0.5)\n poff2.setMovement((time: number) => {\n poff2.scale(1.03)\n return vec2.fromValues(0, time * time * 5);\n })\n }\n }\n else {\n this.walkFrame = 0;\n };\n\n if (this.getPosition()[1] < sceneAttributes.deathHeight) {\n this.onDeath();\n }\n\n if (!this.isGrounded || this.sPressed || this.moving) {\n this.idleTime = 0;\n }\n else {\n this.idleTime += delta;\n }\n\n if (this.idleTime > 20) {\n if (this.zTime > 2) {\n let z: Particle = new Particle(\n spriteCoordinates.SPRITE_Z,\n vec2.fromValues(this.getPosition()[0], this.getPosition()[1]),\n 3.5\n )\n z.setMovement((time: number) => {\n if (time > 1) {\n z.scale(0.99);\n }\n return vec2.fromValues(time, Math.sin(time * 3) * 0.3 + time);\n })\n this.zTime = 0;\n }\n this.zTime += delta;\n }\n else {\n this.zTime = 0;\n }\n }\n\n onGrounded(verticalVelocity: number) {\n if (verticalVelocity < -40) {\n let thisPos = this.getPosition();\n let poff1: Particle = new Particle(\n spriteCoordinates.SPRITE_POFF,\n vec2.fromValues(thisPos[0], thisPos[1] - 0.5),\n 3);\n poff1.setMovement((time: number) => {\n poff1.scale(1 - time / 3);\n return vec2.fromValues(4 * time, 5 * time * time);\n })\n let poff2: Particle = new Particle(\n spriteCoordinates.SPRITE_POFF,\n vec2.fromValues(thisPos[0], thisPos[1] - 0.5),\n 3);\n poff2.setMovement((time: number) => {\n poff2.scale(1 - time / 3);\n return vec2.fromValues(-4 * time, 5 * time * time);\n })\n }\n }\n\n onKeyPress(key: string) {\n if (this.dead || this.win) {\n return;\n }\n let playerMovement = this.isGrounded ? sceneAttributes.playerSpeed : sceneAttributes.playerSpeed;\n if (key === \"a\" || key === \"ArrowLeft\") {\n vec2.add(this.inputVelocity, this.inputVelocity, vec2.fromValues(-playerMovement, 0));\n this.direction = -1;\n this.moving = true;\n }\n else if (key === \"d\" || key === \"ArrowRight\") {\n vec2.add(this.inputVelocity, this.inputVelocity, vec2.fromValues(playerMovement, 0));\n this.direction = 1;\n this.moving = true;\n }\n }\n\n onKeyDown(key: string) {\n if (this.dead || this.win) {\n return;\n }\n if ((key === 'w' || key === \" \" || key === \"ArrowUp\") && this.isGrounded) {\n this.jumping = true;\n this.jumpTime = sceneAttributes.maxJumpHold;\n this.groundedImmunity = true;\n }\n else if (key === 'a' || key === \"ArrowLeft\") {\n this.aPressed = true;\n }\n else if (key === 'd' || key === \"ArrowRight\") {\n this.dPressed = true;\n }\n else if (key === 's' || key === \"ArrowDown\") {\n this.sPressed = true;\n }\n }\n\n onKeyUp(key: string) {\n if (key === 'w' || key === \" \" || key === \"ArrowUp\") {\n this.jumping = false;\n this.jumpTime = 0;\n }\n else if (key === 'a' || key === \"ArrowLeft\") {\n this.aPressed = false;\n }\n else if (key === 'd' || key === \"ArrowRight\") {\n this.dPressed = false;\n }\n else if (key === 's' || key === \"ArrowDown\") {\n this.sPressed = false;\n }\n }\n\n onCollision(other: GameObject) {\n if (other.constructor.name === \"Coin\") {\n for (let i = 0; i < 8; i++) {\n let angle = i * Math.PI * 2 / 8;\n let direction = vec2.fromValues(Math.cos(angle), Math.sin(angle));\n let sparkle = new Particle(\n spriteCoordinates.SPRITE_SPARKLE,\n vec2.add(vec2.create(), other.getPosition(), vec2.scale(vec2.create(), direction, 0.3)),\n 0.2\n );\n sparkle.setSize(0.5);\n sparkle.setMovement((time: number) => {\n return vec2.scale(vec2.create(), direction, time * 2);\n })\n }\n other.destroy();\n }\n else if (other.constructor.name === \"Spike\" || other.constructor.name === \"Baddie\") {\n this.dead = true;\n }\n else if (other.constructor.name === \"Checkpoint\") {\n vec2.copy(this.startPos, other.getPosition());\n }\n else if (other.constructor.name === \"Gem\") {\n this.win = true;\n }\n }\n\n onDeath() {\n this.setPosition(this.startPos);\n this.dead = false;\n this.dynamic = true;\n this.deathTimer = 0;\n }\n\n getSpriteUv() {\n if (this.dead) {\n return spriteCoordinates.SPRITE_PLAYER_DEATH;\n }\n if (!this.isGrounded) {\n return spriteCoordinates.SPRITE_PLAYER_JUMP;\n }\n else if (this.moving) {\n return this.walkFrame % WALK_CYCLE_LENGTH < WALK_CYCLE_LENGTH / 2 ?\n spriteCoordinates.SPRITE_PLAYER_WALK_1 : \n spriteCoordinates.SPRITE_PLAYER_WALK_2;\n }\n else if (this.sPressed) {\n return spriteCoordinates.SPRITE_PLAYER_CROUCH;\n }\n else if (this.idleTime >= 20) {\n return spriteCoordinates.SPRITE_PLAYER_IDLE2;\n }\n else if (this.idleTime >= 10) {\n return spriteCoordinates.SPRITE_PLAYER_IDLE1;\n }\n return spriteCoordinates.SPRITE_PLAYER_STAND;\n }\n}\n\nexport default Player;"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/main.ts","webpack:///./node_modules/stats-js/build/stats.min.js","webpack:///./src/globals.ts","webpack:///./src/rendering/gl/OpenGLRenderer.ts","webpack:///./node_modules/gl-matrix/lib/gl-matrix.js","webpack:///./node_modules/gl-matrix/lib/gl-matrix/common.js","webpack:///./node_modules/gl-matrix/lib/gl-matrix/mat2.js","webpack:///./node_modules/gl-matrix/lib/gl-matrix/mat2d.js","webpack:///./node_modules/gl-matrix/lib/gl-matrix/mat3.js","webpack:///./node_modules/gl-matrix/lib/gl-matrix/mat4.js","webpack:///./node_modules/gl-matrix/lib/gl-matrix/quat.js","webpack:///./node_modules/gl-matrix/lib/gl-matrix/vec3.js","webpack:///./node_modules/gl-matrix/lib/gl-matrix/vec4.js","webpack:///./node_modules/gl-matrix/lib/gl-matrix/quat2.js","webpack:///./node_modules/gl-matrix/lib/gl-matrix/vec2.js","webpack:///./src/engine/GameEngine.ts","webpack:///./src/scene/Terrain.ts","webpack:///./src/scene/SceneAttributes.ts","webpack:///./src/constants.ts","webpack:///./src/geometry/Tile.ts","webpack:///./src/rendering/gl/Drawable.ts","webpack:///./src/geometry/Background.ts","webpack:///./src/Camera.ts","webpack:///./src/rendering/gl/ShaderProgram.ts","webpack:///./src/rendering/Texture2D.ts","webpack:///./src/LevelGenerator/LevelGenerator.ts","webpack:///./src/LevelGenerator/RhythmGroupGenerator.ts","webpack:///./src/LevelGenerator/RhythmGroup.ts","webpack:///./src/LevelGenerator/GeometryGenerator.ts","webpack:///./src/scene/Spike.ts","webpack:///./src/engine/GameObject.ts","webpack:///./src/scene/Coin.ts","webpack:///./src/scene/Particle.ts","webpack:///./src/scene/Checkpoint.ts","webpack:///./src/scene/Gem.ts","webpack:///./src/scene/Baddie.ts","webpack:///./src/assets/sprites.png","webpack:///./src/assets/backgrounds.png","webpack:///./src/shaders/tile-vert.glsl","webpack:///./src/shaders/tile-frag.glsl","webpack:///./src/shaders/background-vert.glsl","webpack:///./src/shaders/background-frag.glsl","webpack:///./src/scene/Player.ts"],"names":[],"mappings":"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B;AACO;AACP,gBAAgB,qDAAmB;AACnC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,aAAa,OAAO;AACpB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,aAAa,OAAO;AACpB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,aAAa,OAAO;AACpB;AACO;AACP;AACA;;AAEA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,QAAQ;AACrB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,QAAQ;AACrB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,kDAAgB,qEAAqE,kDAAgB,qEAAqE,kDAAgB,qEAAqE,kDAAgB;AAC7S;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAc;AACd;AACA;AACO;;AAEP;AACA,cAAc;AACd;AACA;AACO,mB;;;;;;;ACjbP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAwC;;AAExC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,MAAM;AACnB;AACO;AACP,gBAAgB,qDAAmB;AACnC,MAAM,qDAAmB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,aAAa,MAAM;AACnB;AACO;AACP,gBAAgB,qDAAmB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACO;AACP,gBAAgB,qDAAmB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,aAAa,OAAO;AACpB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,WAAW,KAAK;AAChB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,WAAW,KAAK;AAChB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,KAAK;AAChB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,KAAK;AAChB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,aAAa,OAAO;AACpB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,aAAa,OAAO;AACpB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,aAAa,QAAQ;AACrB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,aAAa,QAAQ;AACrB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,kDAAgB,qEAAqE,kDAAgB,qEAAqE,kDAAgB,qEAAqE,kDAAgB,qEAAqE,kDAAgB,qEAAqE,kDAAgB;AACvd;;AAEA;AACA,cAAc;AACd;AACA;AACO;;AAEP;AACA,cAAc;AACd;AACA;AACO,mB;;;;;;;ACneP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAwC;;AAExC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,KAAK;AAClB;AACO;AACP,gBAAgB,qDAAmB;AACnC,MAAM,qDAAmB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP,gBAAgB,qDAAmB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP,gBAAgB,qDAAmB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,aAAa,OAAO;AACpB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,MAAM;AACjB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU,KAAK;AACf,UAAU,KAAK;AACf;AACA,YAAY,KAAK;AACjB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,UAAU,KAAK;AACf,UAAU,KAAK;AACf;AACA,YAAY,KAAK;AACjB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,aAAa,OAAO;AACpB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,aAAa,OAAO;AACpB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,QAAQ;AACrB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,QAAQ;AACrB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,kDAAgB,qEAAqE,kDAAgB,qEAAqE,kDAAgB,qEAAqE,kDAAgB,qEAAqE,kDAAgB,qEAAqE,kDAAgB,qEAAqE,kDAAgB,qEAAqE,kDAAgB,qEAAqE,kDAAgB;AACttB;;AAEA;AACA,cAAc;AACd;AACA;AACO;;AAEP;AACA,cAAc;AACd;AACA;AACO,mB;;;;;;;ACzyBP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAwC;;AAExC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,KAAK;AAClB;AACO;AACP,gBAAgB,qDAAmB;AACnC,MAAM,qDAAmB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP,gBAAgB,qDAAmB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP,gBAAgB,qDAAmB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,aAAa,OAAO;AACpB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,YAAY,UAAU,UAAU;AAChC;AACA;AACA;AACA;;AAEA,YAAY,UAAU,WAAW;AACjC;AACA;AACA;AACA;;AAEA,aAAa,WAAW,WAAW;AACnC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,eAAe,WAAW,WAAW;AACrC,eAAe,WAAW,WAAW;AACrC,eAAe,WAAW,YAAY;;AAEtC,iBAAiB,aAAa,aAAa;AAC3C,iBAAiB,aAAa,aAAa;AAC3C,iBAAiB,aAAa,cAAc;;AAE5C;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,YAAY,kDAAgB;AAC5B;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,aAAa,WAAW,WAAW;AACnC,aAAa,WAAW,WAAW;AACnC,aAAa,WAAW,YAAY;;AAEpC;AACA,sBAAsB,wBAAwB;AAC9C,0BAA0B,oBAAoB;AAC9C,0BAA0B,wBAAwB;;AAElD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,YAAY,kDAAgB;AAC5B;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,MAAM;AACjB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,MAAM;AACjB,aAAa,KAAK;AAClB;AACO;AACP,wBAAwB,qDAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB;AACO;AACP;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,YAAY,KAAK;AACjB;AACO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,MAAM;AACjB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,MAAM;AACjB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB;AACA,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iCAAiC,kDAAgB,+BAA+B,kDAAgB,+BAA+B,kDAAgB;AAC/I;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,aAAa,OAAO;AACpB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,aAAa,OAAO;AACpB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,QAAQ;AACrB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,QAAQ;AACrB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,8BAA8B,kDAAgB,qEAAqE,kDAAgB,qEAAqE,kDAAgB,qEAAqE,kDAAgB,qEAAqE,kDAAgB,qEAAqE,kDAAgB,qEAAqE,kDAAgB,qEAAqE,kDAAgB,qEAAqE,kDAAgB,qEAAqE,kDAAgB,uEAAuE,kDAAgB,yEAAyE,kDAAgB,yEAAyE,kDAAgB,yEAAyE,kDAAgB,yEAAyE,kDAAgB,yEAAyE,kDAAgB;AAC/zC;;AAEA;AACA,cAAc;AACd;AACA;AACO;;AAEP;AACA,cAAc;AACd;AACA;AACO,mB;;;;;;;AChzDP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAwC;AACN;AACA;AACA;;AAElC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,KAAK;AAClB;AACO;AACP,gBAAgB,qDAAmB;AACnC,MAAM,qDAAmB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB,YAAY,OAAO;AACnB;AACO;AACP;AACA;AACA,UAAU,kDAAgB;AAC1B;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,kDAAgB;AACpC;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA,WAAW,iDAAe;AAC1B,WAAW,iDAAe;AAC1B,WAAW,iDAAe;;AAE1B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACA;AACO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA,oCAAoC;AACpC;AACA,wBAAwB;AACxB;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,EAAE;AACb,WAAW,EAAE;AACb,WAAW,EAAE;AACb,aAAa,KAAK;AAClB;AACA;AACO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,aAAa,OAAO;AACpB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACA;AACO,YAAY,8CAAU;;AAE7B;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACA;AACO,iBAAiB,mDAAe;;AAEvC;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACA;AACO,WAAW,6CAAS;;AAE3B;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACA;AACO,UAAU,4CAAQ;;AAEzB;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WA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,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,OAAO;AACpB;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,OAAO;AACpB;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,aAAa,OAAO;AACpB;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,OAAO;AACpB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;;AAEA,UAAU,iDAAe;AACzB,UAAU,iDAAe;AACzB;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,OAAO;AACpB;AACO;AACP;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,aAAa,OAAO;AACpB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,QAAQ;AACrB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,QAAQ;AACrB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,kDAAgB,qEAAqE,kDAAgB,qEAAqE,kDAAgB;AACxN;;AAEA;AACA,cAAc;AACd;AACA;AACO;;AAEP;AACA,cAAc;AACd;AACA;AACO;;AAEP;AACA,cAAc;AACd;AACA;AACO;;AAEP;AACA,cAAc;AACd;AACA;AACO;;AAEP;AACA,cAAc;AACd;AACA;AACO;;AAEP;AACA,cAAc;AACd;AACA;AACO;;AAEP;AACA,cAAc;AACd;AACA;AACO;;AAEP;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;;AAEA,oBAAoB,OAAO;AAC3B,oBAAoB,kBAAkB;AACtC;AACA,oBAAoB,kBAAkB;AACtC;;AAEA;AACA;AACA,CAAC,G;;;;;;;AClxBD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAwC;;AAExC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,KAAK;AAClB;AACO;AACP,gBAAgB,qDAAmB;AACnC,MAAM,qDAAmB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP,gBAAgB,qDAAmB;AACnC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP,gBAAgB,qDAAmB;AACnC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,OAAO;AACpB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,OAAO;AACpB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,aAAa,OAAO;AACpB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,aAAa,OAAO;AACpB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,OAAO;AACpB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,iDAAe;AACxB,SAAS,iDAAe;AACxB;AACA,GAAG;AACH;AACA,SAAS,iDAAe;AACxB,SAAS,iDAAe;AACxB;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,aAAa,OAAO;AACpB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,QAAQ;AACrB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,QAAQ;AACrB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,kDAAgB,qEAAqE,kDAAgB,qEAAqE,kDAAgB,qEAAqE,kDAAgB;AAC7S;;AAEA;AACA,cAAc;AACd;AACA;AACO;;AAEP;AACA,cAAc;AACd;AACA;AACO;;AAEP;AACA,cAAc;AACd;AACA;AACO;;AAEP;AACA,cAAc;AACd;AACA;AACO;;AAEP;AACA,cAAc;AACd;AACA;AACO;;AAEP;AACA,cAAc;AACd;AACA;AACO;;AAEP;AACA,cAAc;AACd;AACA;AACO;;AAEP;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;;AAEA,oBAAoB,OAAO;AAC3B,oBAAoB,kBAAkB,kBAAkB;AACxD;AACA,oBAAoB,kBAAkB,kBAAkB;AACxD;;AAEA;AACA;AACA,CAAC,G;;;;;;;ACrmBD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAwC;AACN;AACA;;AAElC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,MAAM;AACnB;AACO;AACP,eAAe,qDAAmB;AAClC,MAAM,qDAAmB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,aAAa,MAAM;AACnB;AACA;AACO;AACP,eAAe,qDAAmB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACO;AACP,eAAe,qDAAmB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACO;AACP,eAAe,qDAAmB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,MAAM;AACnB;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,KAAK;AAChB,aAAa,MAAM;AACnB;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,KAAK;AAChB,aAAa,MAAM;AACnB;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,KAAK;AAChB,aAAa,MAAM;AACnB;AACA;AACO;AACP;AACA,cAAc,+CAAW;AACzB,EAAE,oDAAgB;AAClB,cAAc,qDAAmB;AACjC,EAAE,uDAAmB;AACrB;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,aAAa,MAAM;AACnB;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAY,KAAK;AACjB,YAAY,MAAM;AAClB,YAAY,KAAK;AACjB;AACO,cAAc,6CAAS;;AAE9B;AACA;AACA,YAAY,KAAK;AACjB,YAAY,MAAM;AAClB,YAAY,KAAK;AACjB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,KAAK;AAChB,aAAa,MAAM;AACnB;AACA;AACO,cAAc,6CAAS;;AAE9B;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,KAAK;AAChB,aAAa,MAAM;AACnB;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAY,KAAK;AACjB,YAAY,MAAM;AAClB,YAAY,KAAK;AACjB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,WAAW,KAAK;AAChB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,gDAAY;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,gDAAY;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,gDAAY;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,WAAW,KAAK;AAChB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,KAAK;AAChB,WAAW,MAAM;AACjB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACO;AACP;AACA,sBAAsB,kDAAgB;AACtC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,aAAa,MAAM;AACnB;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAc;AACd;AACA;AACO;;AAEP;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,aAAa,OAAO;AACpB;AACA;AACO,UAAU,4CAAQ;;AAEzB;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,aAAa,OAAO;AACpB;AACA;AACO,aAAa,+CAAW;;AAE/B;AACA,cAAc;AACd;AACA;AACO;;AAEP;AACA;AACA;AACA,WAAW,MAAM;AACjB,aAAa,OAAO;AACpB;AACA;AACO,oBAAoB,sDAAkB;;AAE7C;AACA,cAAc;AACd;AACA;AACO;;AAEP;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,aAAa,MAAM;AACnB;AACA;AACO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,aAAa,OAAO;AACpB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,aAAa,QAAQ;AACrB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,aAAa,QAAQ;AACrB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,kDAAgB,qEAAqE,kDAAgB,qEAAqE,kDAAgB,qEAAqE,kDAAgB,qEAAqE,kDAAgB,qEAAqE,kDAAgB,qEAAqE,kDAAgB,qEAAqE,kDAAgB;AACjoB,C;;;;;;;AC30BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAwC;;AAExC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,KAAK;AAClB;AACO;AACP,gBAAgB,qDAAmB;AACnC,MAAM,qDAAmB;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP,gBAAgB,qDAAmB;AACnC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP,gBAAgB,qDAAmB;AACnC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,OAAO;AACpB;AACO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,OAAO;AACpB;AACO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,aAAa,OAAO;AACpB;AACO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,aAAa,OAAO;AACpB;AACO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,OAAO;AACpB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA,UAAU,iDAAe;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,MAAM;AACjB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,OAAO;AACpB;AACO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,aAAa,OAAO;AACpB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,QAAQ;AACrB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,QAAQ;AACrB;AACO;AACP;AACA;AACA;AACA;AACA,8BAA8B,kDAAgB,qEAAqE,kDAAgB;AACnI;;AAEA;AACA,cAAc;AACd;AACA;AACO;;AAEP;AACA,cAAc;AACd;AACA;AACO;;AAEP;AACA,cAAc;AACd;AACA;AACO;;AAEP;AACA,cAAc;AACd;AACA;AACO;;AAEP;AACA,cAAc;AACd;AACA;AACO;;AAEP;AACA,cAAc;AACd;AACA;AACO;;AAEP;AACA,cAAc;AACd;AACA;AACO;;AAEP;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;;AAEA,oBAAoB,OAAO;AAC3B,oBAAoB;AACpB;AACA,oBAAoB;AACpB;;AAEA;AACA;AACA,CAAC,G;;;;;;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","file":"bundle.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"dist/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n","import {vec2, vec3} from 'gl-matrix';\nimport * as Stats from 'stats-js';\n\nimport {setGL} from './globals';\nimport OpenGLRenderer from './rendering/gl/OpenGLRenderer';\nimport ShaderProgram, {Shader} from './rendering/gl/ShaderProgram';\nimport Camera from './Camera';\nimport GameEngine from './engine/GameEngine';\nimport GameObject from './engine/GameObject';\n\nimport Player from './scene/Player';\nimport Coin from './scene/Coin';\nimport sceneAttributes from './scene/SceneAttributes';\n\nimport RhythmGropuGenerator from './LevelGenerator/RhythmGroupGenerator';\n\nlet time: number = 0.0;\nlet gameStart: boolean = false;\n\nfunction main() {\n\n // Rhythm Type\n let rhythmTypeSelect = document.getElementById(\"rhythmSelect\");\n rhythmTypeSelect.onchange = () => {\n sceneAttributes.rhythmType = parseInt(rhythmTypeSelect.value);\n }\n\n // Rhythm Group Length\n let groupLengthSlider = document.getElementById(\"timeSelect\");\n let groupLengthOutput = document.getElementById(\"timeSelectDisplay\");\n groupLengthOutput.innerHTML = groupLengthSlider.value + \" sec\";\n groupLengthSlider.oninput = () => {\n groupLengthOutput.innerHTML = groupLengthSlider.value + \" sec\";\n sceneAttributes.rhythmGroupLength = parseInt(groupLengthSlider.value);\n }\n\n // Rhythm Group Number\n let groupNumberSelect = document.getElementById(\"numberSelect\");\n let groupNumberOutput = document.getElementById(\"numberDisplay\");\n groupNumberOutput.innerHTML = groupNumberSelect.value;\n groupNumberSelect.oninput = () => {\n groupNumberOutput.innerHTML = groupNumberSelect.value;\n sceneAttributes.numberOfGroups = parseInt(groupNumberSelect.value);\n }\n\n // Gravity\n let gravitySelect = document.getElementById(\"gravitySelect\");\n gravitySelect.onchange = function() {\n sceneAttributes.gravity = parseFloat(gravitySelect.value);\n }\n\n // Jump\n let jumpSelect = document.getElementById(\"jumpSelect\");\n jumpSelect.onchange = () => {\n sceneAttributes.playerJump = parseFloat(jumpSelect.value);\n }\n\n // Speed\n let speedSelect = document.getElementById(\"speedSelect\");\n speedSelect.onchange = () => {\n sceneAttributes.playerSpeed = parseFloat(speedSelect.value);\n }\n\n // Density\n let densitySelect = document.getElementById(\"densitySelect\");\n densitySelect.onchange = () => {\n sceneAttributes.levelDensity = parseFloat(densitySelect.value);\n }\n\n // Generate Level\n let startButton = document.getElementById(\"generateLevelButton\");\n startButton.onclick = () => {\n document.body.innerHTML = \"\";\n BeginGame();\n }\n\n //BeginGame();\n}\n\nfunction BeginGame() {\n let canvas = document.createElement(\"canvas\");\n canvas.setAttribute(\"id\", \"canvas\");\n\n document.body.appendChild(canvas);\n\n // get canvas and webgl context\n //const canvas = document.getElementById('canvas');\n const gl = canvas.getContext('webgl2');\n if (!gl) {\n alert('WebGL 2 not supported!');\n }\n setGL(gl);\n\n // Initial display for framerate (only for development)\n let displayStats = false;\n const stats = Stats();\n if (window.location.hostname === \"localhost\") {\n displayStats = true;\n stats.setMode(0);\n stats.domElement.style.position = 'absolute';\n stats.domElement.style.left = '0px';\n stats.domElement.style.top = '0px';\n document.body.appendChild(stats.domElement);\n }\n\n let engine: GameEngine = GameEngine.getEngine();\n const camera: Camera = engine.getCamera();\n\n const renderer = new OpenGLRenderer(canvas);\n renderer.setClearColor(0.9, 0.9, 0.9, 1);\n engine.setRenderer(renderer);\n engine.generateLevel();\n let player: Player = new Player([0, 1]);\n camera.makeParent(player);\n //new RhythmGropuGenerator(20, 20, 0.5, 0.6, [1, 0, 0]).generateRhythmGroup();\n\n // This function will be called every frame\n function tick() {\n if (displayStats) {\n stats.begin();\n }\n time++;\n engine.tick();\n\n gl.viewport(0, 0, window.innerWidth, window.innerHeight);\n renderer.clear();\n GameEngine.getEngine().drawGameObjects();\n \n // Tell the browser to call `tick` again whenever it renders a new frame\n if (displayStats) {\n stats.end();\n }\n requestAnimationFrame(tick);\n }\n \n window.addEventListener('resize', function() {\n renderer.setSize(window.innerWidth, window.innerHeight);\n camera.setAspectRatio(window.innerWidth / window.innerHeight);\n camera.updateProjectionMatrix();\n }, false);\n \n renderer.setSize(window.innerWidth, window.innerHeight);\n camera.setAspectRatio(window.innerWidth / window.innerHeight);\n camera.updateProjectionMatrix();\n\n // Start the render loop\n engine.startGame();\n tick();\n}\n\nmain();","!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):e.Stats=t()}(this,function(){\"use strict\";var c=function(){var n=0,l=document.createElement(\"div\");function e(e){return l.appendChild(e.dom),e}function t(e){for(var t=0;t) {\n let model = mat4.create();\n let viewProj = mat4.create();\n let color = vec4.fromValues(1, 0, 0, 1);\n \n prog.setCameraPos(camera.position);\n mat4.identity(model);\n mat4.multiply(viewProj, camera.projectionMatrix, camera.viewMatrix);\n prog.setModelMatrix(model);\n prog.setViewProjMatrix(viewProj);\n\n for (let drawable of drawables) {\n prog.draw(drawable);\n }\n }\n};\n\nexport default OpenGLRenderer;\n","import * as glMatrix from \"./gl-matrix/common.js\";\r\nimport * as mat2 from \"./gl-matrix/mat2.js\";\r\nimport * as mat2d from \"./gl-matrix/mat2d.js\";\r\nimport * as mat3 from \"./gl-matrix/mat3.js\";\r\nimport * as mat4 from \"./gl-matrix/mat4.js\";\r\nimport * as quat from \"./gl-matrix/quat.js\";\r\nimport * as quat2 from \"./gl-matrix/quat2.js\";\r\nimport * as vec2 from \"./gl-matrix/vec2.js\";\r\nimport * as vec3 from \"./gl-matrix/vec3.js\";\r\nimport * as vec4 from \"./gl-matrix/vec4.js\";\r\n\r\nexport { glMatrix, mat2, mat2d, mat3, mat4, quat, quat2, vec2, vec3, vec4 };","/**\r\n * Common utilities\r\n * @module glMatrix\r\n */\r\n\r\n// Configuration Constants\r\nexport var EPSILON = 0.000001;\r\nexport var ARRAY_TYPE = typeof Float32Array !== 'undefined' ? Float32Array : Array;\r\nexport var RANDOM = Math.random;\r\n\r\n/**\r\n * Sets the type of array used when creating new vectors and matrices\r\n *\r\n * @param {Type} type Array type, such as Float32Array or Array\r\n */\r\nexport function setMatrixArrayType(type) {\r\n ARRAY_TYPE = type;\r\n}\r\n\r\nvar degree = Math.PI / 180;\r\n\r\n/**\r\n * Convert Degree To Radian\r\n *\r\n * @param {Number} a Angle in Degrees\r\n */\r\nexport function toRadian(a) {\r\n return a * degree;\r\n}\r\n\r\n/**\r\n * Tests whether or not the arguments have approximately the same value, within an absolute\r\n * or relative tolerance of glMatrix.EPSILON (an absolute tolerance is used for values less\r\n * than or equal to 1.0, and a relative tolerance is used for larger values)\r\n *\r\n * @param {Number} a The first number to test.\r\n * @param {Number} b The second number to test.\r\n * @returns {Boolean} True if the numbers are approximately equal, false otherwise.\r\n */\r\nexport function equals(a, b) {\r\n return Math.abs(a - b) <= EPSILON * Math.max(1.0, Math.abs(a), Math.abs(b));\r\n}","import * as glMatrix from \"./common.js\";\r\n\r\n/**\r\n * 2x2 Matrix\r\n * @module mat2\r\n */\r\n\r\n/**\r\n * Creates a new identity mat2\r\n *\r\n * @returns {mat2} a new 2x2 matrix\r\n */\r\nexport function create() {\r\n var out = new glMatrix.ARRAY_TYPE(4);\r\n if (glMatrix.ARRAY_TYPE != Float32Array) {\r\n out[1] = 0;\r\n out[2] = 0;\r\n }\r\n out[0] = 1;\r\n out[3] = 1;\r\n return out;\r\n}\r\n\r\n/**\r\n * Creates a new mat2 initialized with values from an existing matrix\r\n *\r\n * @param {mat2} a matrix to clone\r\n * @returns {mat2} a new 2x2 matrix\r\n */\r\nexport function clone(a) {\r\n var out = new glMatrix.ARRAY_TYPE(4);\r\n out[0] = a[0];\r\n out[1] = a[1];\r\n out[2] = a[2];\r\n out[3] = a[3];\r\n return out;\r\n}\r\n\r\n/**\r\n * Copy the values from one mat2 to another\r\n *\r\n * @param {mat2} out the receiving matrix\r\n * @param {mat2} a the source matrix\r\n * @returns {mat2} out\r\n */\r\nexport function copy(out, a) {\r\n out[0] = a[0];\r\n out[1] = a[1];\r\n out[2] = a[2];\r\n out[3] = a[3];\r\n return out;\r\n}\r\n\r\n/**\r\n * Set a mat2 to the identity matrix\r\n *\r\n * @param {mat2} out the receiving matrix\r\n * @returns {mat2} out\r\n */\r\nexport function identity(out) {\r\n out[0] = 1;\r\n out[1] = 0;\r\n out[2] = 0;\r\n out[3] = 1;\r\n return out;\r\n}\r\n\r\n/**\r\n * Create a new mat2 with the given values\r\n *\r\n * @param {Number} m00 Component in column 0, row 0 position (index 0)\r\n * @param {Number} m01 Component in column 0, row 1 position (index 1)\r\n * @param {Number} m10 Component in column 1, row 0 position (index 2)\r\n * @param {Number} m11 Component in column 1, row 1 position (index 3)\r\n * @returns {mat2} out A new 2x2 matrix\r\n */\r\nexport function fromValues(m00, m01, m10, m11) {\r\n var out = new glMatrix.ARRAY_TYPE(4);\r\n out[0] = m00;\r\n out[1] = m01;\r\n out[2] = m10;\r\n out[3] = m11;\r\n return out;\r\n}\r\n\r\n/**\r\n * Set the components of a mat2 to the given values\r\n *\r\n * @param {mat2} out the receiving matrix\r\n * @param {Number} m00 Component in column 0, row 0 position (index 0)\r\n * @param {Number} m01 Component in column 0, row 1 position (index 1)\r\n * @param {Number} m10 Component in column 1, row 0 position (index 2)\r\n * @param {Number} m11 Component in column 1, row 1 position (index 3)\r\n * @returns {mat2} out\r\n */\r\nexport function set(out, m00, m01, m10, m11) {\r\n out[0] = m00;\r\n out[1] = m01;\r\n out[2] = m10;\r\n out[3] = m11;\r\n return out;\r\n}\r\n\r\n/**\r\n * Transpose the values of a mat2\r\n *\r\n * @param {mat2} out the receiving matrix\r\n * @param {mat2} a the source matrix\r\n * @returns {mat2} out\r\n */\r\nexport function transpose(out, a) {\r\n // If we are transposing ourselves we can skip a few steps but have to cache\r\n // some values\r\n if (out === a) {\r\n var a1 = a[1];\r\n out[1] = a[2];\r\n out[2] = a1;\r\n } else {\r\n out[0] = a[0];\r\n out[1] = a[2];\r\n out[2] = a[1];\r\n out[3] = a[3];\r\n }\r\n\r\n return out;\r\n}\r\n\r\n/**\r\n * Inverts a mat2\r\n *\r\n * @param {mat2} out the receiving matrix\r\n * @param {mat2} a the source matrix\r\n * @returns {mat2} out\r\n */\r\nexport function invert(out, a) {\r\n var a0 = a[0],\r\n a1 = a[1],\r\n a2 = a[2],\r\n a3 = a[3];\r\n\r\n // Calculate the determinant\r\n var det = a0 * a3 - a2 * a1;\r\n\r\n if (!det) {\r\n return null;\r\n }\r\n det = 1.0 / det;\r\n\r\n out[0] = a3 * det;\r\n out[1] = -a1 * det;\r\n out[2] = -a2 * det;\r\n out[3] = a0 * det;\r\n\r\n return out;\r\n}\r\n\r\n/**\r\n * Calculates the adjugate of a mat2\r\n *\r\n * @param {mat2} out the receiving matrix\r\n * @param {mat2} a the source matrix\r\n * @returns {mat2} out\r\n */\r\nexport function adjoint(out, a) {\r\n // Caching this value is nessecary if out == a\r\n var a0 = a[0];\r\n out[0] = a[3];\r\n out[1] = -a[1];\r\n out[2] = -a[2];\r\n out[3] = a0;\r\n\r\n return out;\r\n}\r\n\r\n/**\r\n * Calculates the determinant of a mat2\r\n *\r\n * @param {mat2} a the source matrix\r\n * @returns {Number} determinant of a\r\n */\r\nexport function determinant(a) {\r\n return a[0] * a[3] - a[2] * a[1];\r\n}\r\n\r\n/**\r\n * Multiplies two mat2's\r\n *\r\n * @param {mat2} out the receiving matrix\r\n * @param {mat2} a the first operand\r\n * @param {mat2} b the second operand\r\n * @returns {mat2} out\r\n */\r\nexport function multiply(out, a, b) {\r\n var a0 = a[0],\r\n a1 = a[1],\r\n a2 = a[2],\r\n a3 = a[3];\r\n var b0 = b[0],\r\n b1 = b[1],\r\n b2 = b[2],\r\n b3 = b[3];\r\n out[0] = a0 * b0 + a2 * b1;\r\n out[1] = a1 * b0 + a3 * b1;\r\n out[2] = a0 * b2 + a2 * b3;\r\n out[3] = a1 * b2 + a3 * b3;\r\n return out;\r\n}\r\n\r\n/**\r\n * Rotates a mat2 by the given angle\r\n *\r\n * @param {mat2} out the receiving matrix\r\n * @param {mat2} a the matrix to rotate\r\n * @param {Number} rad the angle to rotate the matrix by\r\n * @returns {mat2} out\r\n */\r\nexport function rotate(out, a, rad) {\r\n var a0 = a[0],\r\n a1 = a[1],\r\n a2 = a[2],\r\n a3 = a[3];\r\n var s = Math.sin(rad);\r\n var c = Math.cos(rad);\r\n out[0] = a0 * c + a2 * s;\r\n out[1] = a1 * c + a3 * s;\r\n out[2] = a0 * -s + a2 * c;\r\n out[3] = a1 * -s + a3 * c;\r\n return out;\r\n}\r\n\r\n/**\r\n * Scales the mat2 by the dimensions in the given vec2\r\n *\r\n * @param {mat2} out the receiving matrix\r\n * @param {mat2} a the matrix to rotate\r\n * @param {vec2} v the vec2 to scale the matrix by\r\n * @returns {mat2} out\r\n **/\r\nexport function scale(out, a, v) {\r\n var a0 = a[0],\r\n a1 = a[1],\r\n a2 = a[2],\r\n a3 = a[3];\r\n var v0 = v[0],\r\n v1 = v[1];\r\n out[0] = a0 * v0;\r\n out[1] = a1 * v0;\r\n out[2] = a2 * v1;\r\n out[3] = a3 * v1;\r\n return out;\r\n}\r\n\r\n/**\r\n * Creates a matrix from a given angle\r\n * This is equivalent to (but much faster than):\r\n *\r\n * mat2.identity(dest);\r\n * mat2.rotate(dest, dest, rad);\r\n *\r\n * @param {mat2} out mat2 receiving operation result\r\n * @param {Number} rad the angle to rotate the matrix by\r\n * @returns {mat2} out\r\n */\r\nexport function fromRotation(out, rad) {\r\n var s = Math.sin(rad);\r\n var c = Math.cos(rad);\r\n out[0] = c;\r\n out[1] = s;\r\n out[2] = -s;\r\n out[3] = c;\r\n return out;\r\n}\r\n\r\n/**\r\n * Creates a matrix from a vector scaling\r\n * This is equivalent to (but much faster than):\r\n *\r\n * mat2.identity(dest);\r\n * mat2.scale(dest, dest, vec);\r\n *\r\n * @param {mat2} out mat2 receiving operation result\r\n * @param {vec2} v Scaling vector\r\n * @returns {mat2} out\r\n */\r\nexport function fromScaling(out, v) {\r\n out[0] = v[0];\r\n out[1] = 0;\r\n out[2] = 0;\r\n out[3] = v[1];\r\n return out;\r\n}\r\n\r\n/**\r\n * Returns a string representation of a mat2\r\n *\r\n * @param {mat2} a matrix to represent as a string\r\n * @returns {String} string representation of the matrix\r\n */\r\nexport function str(a) {\r\n return 'mat2(' + a[0] + ', ' + a[1] + ', ' + a[2] + ', ' + a[3] + ')';\r\n}\r\n\r\n/**\r\n * Returns Frobenius norm of a mat2\r\n *\r\n * @param {mat2} a the matrix to calculate Frobenius norm of\r\n * @returns {Number} Frobenius norm\r\n */\r\nexport function frob(a) {\r\n return Math.sqrt(Math.pow(a[0], 2) + Math.pow(a[1], 2) + Math.pow(a[2], 2) + Math.pow(a[3], 2));\r\n}\r\n\r\n/**\r\n * Returns L, D and U matrices (Lower triangular, Diagonal and Upper triangular) by factorizing the input matrix\r\n * @param {mat2} L the lower triangular matrix\r\n * @param {mat2} D the diagonal matrix\r\n * @param {mat2} U the upper triangular matrix\r\n * @param {mat2} a the input matrix to factorize\r\n */\r\n\r\nexport function LDU(L, D, U, a) {\r\n L[2] = a[2] / a[0];\r\n U[0] = a[0];\r\n U[1] = a[1];\r\n U[3] = a[3] - L[2] * U[1];\r\n return [L, D, U];\r\n}\r\n\r\n/**\r\n * Adds two mat2's\r\n *\r\n * @param {mat2} out the receiving matrix\r\n * @param {mat2} a the first operand\r\n * @param {mat2} b the second operand\r\n * @returns {mat2} out\r\n */\r\nexport function add(out, a, b) {\r\n out[0] = a[0] + b[0];\r\n out[1] = a[1] + b[1];\r\n out[2] = a[2] + b[2];\r\n out[3] = a[3] + b[3];\r\n return out;\r\n}\r\n\r\n/**\r\n * Subtracts matrix b from matrix a\r\n *\r\n * @param {mat2} out the receiving matrix\r\n * @param {mat2} a the first operand\r\n * @param {mat2} b the second operand\r\n * @returns {mat2} out\r\n */\r\nexport function subtract(out, a, b) {\r\n out[0] = a[0] - b[0];\r\n out[1] = a[1] - b[1];\r\n out[2] = a[2] - b[2];\r\n out[3] = a[3] - b[3];\r\n return out;\r\n}\r\n\r\n/**\r\n * Returns whether or not the matrices have exactly the same elements in the same position (when compared with ===)\r\n *\r\n * @param {mat2} a The first matrix.\r\n * @param {mat2} b The second matrix.\r\n * @returns {Boolean} True if the matrices are equal, false otherwise.\r\n */\r\nexport function exactEquals(a, b) {\r\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3];\r\n}\r\n\r\n/**\r\n * Returns whether or not the matrices have approximately the same elements in the same position.\r\n *\r\n * @param {mat2} a The first matrix.\r\n * @param {mat2} b The second matrix.\r\n * @returns {Boolean} True if the matrices are equal, false otherwise.\r\n */\r\nexport function equals(a, b) {\r\n var a0 = a[0],\r\n a1 = a[1],\r\n a2 = a[2],\r\n a3 = a[3];\r\n var b0 = b[0],\r\n b1 = b[1],\r\n b2 = b[2],\r\n b3 = b[3];\r\n return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)) && Math.abs(a3 - b3) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a3), Math.abs(b3));\r\n}\r\n\r\n/**\r\n * Multiply each element of the matrix by a scalar.\r\n *\r\n * @param {mat2} out the receiving matrix\r\n * @param {mat2} a the matrix to scale\r\n * @param {Number} b amount to scale the matrix's elements by\r\n * @returns {mat2} out\r\n */\r\nexport function multiplyScalar(out, a, b) {\r\n out[0] = a[0] * b;\r\n out[1] = a[1] * b;\r\n out[2] = a[2] * b;\r\n out[3] = a[3] * b;\r\n return out;\r\n}\r\n\r\n/**\r\n * Adds two mat2's after multiplying each element of the second operand by a scalar value.\r\n *\r\n * @param {mat2} out the receiving vector\r\n * @param {mat2} a the first operand\r\n * @param {mat2} b the second operand\r\n * @param {Number} scale the amount to scale b's elements by before adding\r\n * @returns {mat2} out\r\n */\r\nexport function multiplyScalarAndAdd(out, a, b, scale) {\r\n out[0] = a[0] + b[0] * scale;\r\n out[1] = a[1] + b[1] * scale;\r\n out[2] = a[2] + b[2] * scale;\r\n out[3] = a[3] + b[3] * scale;\r\n return out;\r\n}\r\n\r\n/**\r\n * Alias for {@link mat2.multiply}\r\n * @function\r\n */\r\nexport var mul = multiply;\r\n\r\n/**\r\n * Alias for {@link mat2.subtract}\r\n * @function\r\n */\r\nexport var sub = subtract;","import * as glMatrix from \"./common.js\";\r\n\r\n/**\r\n * 2x3 Matrix\r\n * @module mat2d\r\n *\r\n * @description\r\n * A mat2d contains six elements defined as:\r\n *
\r\n * [a, c, tx,\r\n *  b, d, ty]\r\n * 
\r\n * This is a short form for the 3x3 matrix:\r\n *
\r\n * [a, c, tx,\r\n *  b, d, ty,\r\n *  0, 0, 1]\r\n * 
\r\n * The last row is ignored so the array is shorter and operations are faster.\r\n */\r\n\r\n/**\r\n * Creates a new identity mat2d\r\n *\r\n * @returns {mat2d} a new 2x3 matrix\r\n */\r\nexport function create() {\r\n var out = new glMatrix.ARRAY_TYPE(6);\r\n if (glMatrix.ARRAY_TYPE != Float32Array) {\r\n out[1] = 0;\r\n out[2] = 0;\r\n out[4] = 0;\r\n out[5] = 0;\r\n }\r\n out[0] = 1;\r\n out[3] = 1;\r\n return out;\r\n}\r\n\r\n/**\r\n * Creates a new mat2d initialized with values from an existing matrix\r\n *\r\n * @param {mat2d} a matrix to clone\r\n * @returns {mat2d} a new 2x3 matrix\r\n */\r\nexport function clone(a) {\r\n var out = new glMatrix.ARRAY_TYPE(6);\r\n out[0] = a[0];\r\n out[1] = a[1];\r\n out[2] = a[2];\r\n out[3] = a[3];\r\n out[4] = a[4];\r\n out[5] = a[5];\r\n return out;\r\n}\r\n\r\n/**\r\n * Copy the values from one mat2d to another\r\n *\r\n * @param {mat2d} out the receiving matrix\r\n * @param {mat2d} a the source matrix\r\n * @returns {mat2d} out\r\n */\r\nexport function copy(out, a) {\r\n out[0] = a[0];\r\n out[1] = a[1];\r\n out[2] = a[2];\r\n out[3] = a[3];\r\n out[4] = a[4];\r\n out[5] = a[5];\r\n return out;\r\n}\r\n\r\n/**\r\n * Set a mat2d to the identity matrix\r\n *\r\n * @param {mat2d} out the receiving matrix\r\n * @returns {mat2d} out\r\n */\r\nexport function identity(out) {\r\n out[0] = 1;\r\n out[1] = 0;\r\n out[2] = 0;\r\n out[3] = 1;\r\n out[4] = 0;\r\n out[5] = 0;\r\n return out;\r\n}\r\n\r\n/**\r\n * Create a new mat2d with the given values\r\n *\r\n * @param {Number} a Component A (index 0)\r\n * @param {Number} b Component B (index 1)\r\n * @param {Number} c Component C (index 2)\r\n * @param {Number} d Component D (index 3)\r\n * @param {Number} tx Component TX (index 4)\r\n * @param {Number} ty Component TY (index 5)\r\n * @returns {mat2d} A new mat2d\r\n */\r\nexport function fromValues(a, b, c, d, tx, ty) {\r\n var out = new glMatrix.ARRAY_TYPE(6);\r\n out[0] = a;\r\n out[1] = b;\r\n out[2] = c;\r\n out[3] = d;\r\n out[4] = tx;\r\n out[5] = ty;\r\n return out;\r\n}\r\n\r\n/**\r\n * Set the components of a mat2d to the given values\r\n *\r\n * @param {mat2d} out the receiving matrix\r\n * @param {Number} a Component A (index 0)\r\n * @param {Number} b Component B (index 1)\r\n * @param {Number} c Component C (index 2)\r\n * @param {Number} d Component D (index 3)\r\n * @param {Number} tx Component TX (index 4)\r\n * @param {Number} ty Component TY (index 5)\r\n * @returns {mat2d} out\r\n */\r\nexport function set(out, a, b, c, d, tx, ty) {\r\n out[0] = a;\r\n out[1] = b;\r\n out[2] = c;\r\n out[3] = d;\r\n out[4] = tx;\r\n out[5] = ty;\r\n return out;\r\n}\r\n\r\n/**\r\n * Inverts a mat2d\r\n *\r\n * @param {mat2d} out the receiving matrix\r\n * @param {mat2d} a the source matrix\r\n * @returns {mat2d} out\r\n */\r\nexport function invert(out, a) {\r\n var aa = a[0],\r\n ab = a[1],\r\n ac = a[2],\r\n ad = a[3];\r\n var atx = a[4],\r\n aty = a[5];\r\n\r\n var det = aa * ad - ab * ac;\r\n if (!det) {\r\n return null;\r\n }\r\n det = 1.0 / det;\r\n\r\n out[0] = ad * det;\r\n out[1] = -ab * det;\r\n out[2] = -ac * det;\r\n out[3] = aa * det;\r\n out[4] = (ac * aty - ad * atx) * det;\r\n out[5] = (ab * atx - aa * aty) * det;\r\n return out;\r\n}\r\n\r\n/**\r\n * Calculates the determinant of a mat2d\r\n *\r\n * @param {mat2d} a the source matrix\r\n * @returns {Number} determinant of a\r\n */\r\nexport function determinant(a) {\r\n return a[0] * a[3] - a[1] * a[2];\r\n}\r\n\r\n/**\r\n * Multiplies two mat2d's\r\n *\r\n * @param {mat2d} out the receiving matrix\r\n * @param {mat2d} a the first operand\r\n * @param {mat2d} b the second operand\r\n * @returns {mat2d} out\r\n */\r\nexport function multiply(out, a, b) {\r\n var a0 = a[0],\r\n a1 = a[1],\r\n a2 = a[2],\r\n a3 = a[3],\r\n a4 = a[4],\r\n a5 = a[5];\r\n var b0 = b[0],\r\n b1 = b[1],\r\n b2 = b[2],\r\n b3 = b[3],\r\n b4 = b[4],\r\n b5 = b[5];\r\n out[0] = a0 * b0 + a2 * b1;\r\n out[1] = a1 * b0 + a3 * b1;\r\n out[2] = a0 * b2 + a2 * b3;\r\n out[3] = a1 * b2 + a3 * b3;\r\n out[4] = a0 * b4 + a2 * b5 + a4;\r\n out[5] = a1 * b4 + a3 * b5 + a5;\r\n return out;\r\n}\r\n\r\n/**\r\n * Rotates a mat2d by the given angle\r\n *\r\n * @param {mat2d} out the receiving matrix\r\n * @param {mat2d} a the matrix to rotate\r\n * @param {Number} rad the angle to rotate the matrix by\r\n * @returns {mat2d} out\r\n */\r\nexport function rotate(out, a, rad) {\r\n var a0 = a[0],\r\n a1 = a[1],\r\n a2 = a[2],\r\n a3 = a[3],\r\n a4 = a[4],\r\n a5 = a[5];\r\n var s = Math.sin(rad);\r\n var c = Math.cos(rad);\r\n out[0] = a0 * c + a2 * s;\r\n out[1] = a1 * c + a3 * s;\r\n out[2] = a0 * -s + a2 * c;\r\n out[3] = a1 * -s + a3 * c;\r\n out[4] = a4;\r\n out[5] = a5;\r\n return out;\r\n}\r\n\r\n/**\r\n * Scales the mat2d by the dimensions in the given vec2\r\n *\r\n * @param {mat2d} out the receiving matrix\r\n * @param {mat2d} a the matrix to translate\r\n * @param {vec2} v the vec2 to scale the matrix by\r\n * @returns {mat2d} out\r\n **/\r\nexport function scale(out, a, v) {\r\n var a0 = a[0],\r\n a1 = a[1],\r\n a2 = a[2],\r\n a3 = a[3],\r\n a4 = a[4],\r\n a5 = a[5];\r\n var v0 = v[0],\r\n v1 = v[1];\r\n out[0] = a0 * v0;\r\n out[1] = a1 * v0;\r\n out[2] = a2 * v1;\r\n out[3] = a3 * v1;\r\n out[4] = a4;\r\n out[5] = a5;\r\n return out;\r\n}\r\n\r\n/**\r\n * Translates the mat2d by the dimensions in the given vec2\r\n *\r\n * @param {mat2d} out the receiving matrix\r\n * @param {mat2d} a the matrix to translate\r\n * @param {vec2} v the vec2 to translate the matrix by\r\n * @returns {mat2d} out\r\n **/\r\nexport function translate(out, a, v) {\r\n var a0 = a[0],\r\n a1 = a[1],\r\n a2 = a[2],\r\n a3 = a[3],\r\n a4 = a[4],\r\n a5 = a[5];\r\n var v0 = v[0],\r\n v1 = v[1];\r\n out[0] = a0;\r\n out[1] = a1;\r\n out[2] = a2;\r\n out[3] = a3;\r\n out[4] = a0 * v0 + a2 * v1 + a4;\r\n out[5] = a1 * v0 + a3 * v1 + a5;\r\n return out;\r\n}\r\n\r\n/**\r\n * Creates a matrix from a given angle\r\n * This is equivalent to (but much faster than):\r\n *\r\n * mat2d.identity(dest);\r\n * mat2d.rotate(dest, dest, rad);\r\n *\r\n * @param {mat2d} out mat2d receiving operation result\r\n * @param {Number} rad the angle to rotate the matrix by\r\n * @returns {mat2d} out\r\n */\r\nexport function fromRotation(out, rad) {\r\n var s = Math.sin(rad),\r\n c = Math.cos(rad);\r\n out[0] = c;\r\n out[1] = s;\r\n out[2] = -s;\r\n out[3] = c;\r\n out[4] = 0;\r\n out[5] = 0;\r\n return out;\r\n}\r\n\r\n/**\r\n * Creates a matrix from a vector scaling\r\n * This is equivalent to (but much faster than):\r\n *\r\n * mat2d.identity(dest);\r\n * mat2d.scale(dest, dest, vec);\r\n *\r\n * @param {mat2d} out mat2d receiving operation result\r\n * @param {vec2} v Scaling vector\r\n * @returns {mat2d} out\r\n */\r\nexport function fromScaling(out, v) {\r\n out[0] = v[0];\r\n out[1] = 0;\r\n out[2] = 0;\r\n out[3] = v[1];\r\n out[4] = 0;\r\n out[5] = 0;\r\n return out;\r\n}\r\n\r\n/**\r\n * Creates a matrix from a vector translation\r\n * This is equivalent to (but much faster than):\r\n *\r\n * mat2d.identity(dest);\r\n * mat2d.translate(dest, dest, vec);\r\n *\r\n * @param {mat2d} out mat2d receiving operation result\r\n * @param {vec2} v Translation vector\r\n * @returns {mat2d} out\r\n */\r\nexport function fromTranslation(out, v) {\r\n out[0] = 1;\r\n out[1] = 0;\r\n out[2] = 0;\r\n out[3] = 1;\r\n out[4] = v[0];\r\n out[5] = v[1];\r\n return out;\r\n}\r\n\r\n/**\r\n * Returns a string representation of a mat2d\r\n *\r\n * @param {mat2d} a matrix to represent as a string\r\n * @returns {String} string representation of the matrix\r\n */\r\nexport function str(a) {\r\n return 'mat2d(' + a[0] + ', ' + a[1] + ', ' + a[2] + ', ' + a[3] + ', ' + a[4] + ', ' + a[5] + ')';\r\n}\r\n\r\n/**\r\n * Returns Frobenius norm of a mat2d\r\n *\r\n * @param {mat2d} a the matrix to calculate Frobenius norm of\r\n * @returns {Number} Frobenius norm\r\n */\r\nexport function frob(a) {\r\n return Math.sqrt(Math.pow(a[0], 2) + Math.pow(a[1], 2) + Math.pow(a[2], 2) + Math.pow(a[3], 2) + Math.pow(a[4], 2) + Math.pow(a[5], 2) + 1);\r\n}\r\n\r\n/**\r\n * Adds two mat2d's\r\n *\r\n * @param {mat2d} out the receiving matrix\r\n * @param {mat2d} a the first operand\r\n * @param {mat2d} b the second operand\r\n * @returns {mat2d} out\r\n */\r\nexport function add(out, a, b) {\r\n out[0] = a[0] + b[0];\r\n out[1] = a[1] + b[1];\r\n out[2] = a[2] + b[2];\r\n out[3] = a[3] + b[3];\r\n out[4] = a[4] + b[4];\r\n out[5] = a[5] + b[5];\r\n return out;\r\n}\r\n\r\n/**\r\n * Subtracts matrix b from matrix a\r\n *\r\n * @param {mat2d} out the receiving matrix\r\n * @param {mat2d} a the first operand\r\n * @param {mat2d} b the second operand\r\n * @returns {mat2d} out\r\n */\r\nexport function subtract(out, a, b) {\r\n out[0] = a[0] - b[0];\r\n out[1] = a[1] - b[1];\r\n out[2] = a[2] - b[2];\r\n out[3] = a[3] - b[3];\r\n out[4] = a[4] - b[4];\r\n out[5] = a[5] - b[5];\r\n return out;\r\n}\r\n\r\n/**\r\n * Multiply each element of the matrix by a scalar.\r\n *\r\n * @param {mat2d} out the receiving matrix\r\n * @param {mat2d} a the matrix to scale\r\n * @param {Number} b amount to scale the matrix's elements by\r\n * @returns {mat2d} out\r\n */\r\nexport function multiplyScalar(out, a, b) {\r\n out[0] = a[0] * b;\r\n out[1] = a[1] * b;\r\n out[2] = a[2] * b;\r\n out[3] = a[3] * b;\r\n out[4] = a[4] * b;\r\n out[5] = a[5] * b;\r\n return out;\r\n}\r\n\r\n/**\r\n * Adds two mat2d's after multiplying each element of the second operand by a scalar value.\r\n *\r\n * @param {mat2d} out the receiving vector\r\n * @param {mat2d} a the first operand\r\n * @param {mat2d} b the second operand\r\n * @param {Number} scale the amount to scale b's elements by before adding\r\n * @returns {mat2d} out\r\n */\r\nexport function multiplyScalarAndAdd(out, a, b, scale) {\r\n out[0] = a[0] + b[0] * scale;\r\n out[1] = a[1] + b[1] * scale;\r\n out[2] = a[2] + b[2] * scale;\r\n out[3] = a[3] + b[3] * scale;\r\n out[4] = a[4] + b[4] * scale;\r\n out[5] = a[5] + b[5] * scale;\r\n return out;\r\n}\r\n\r\n/**\r\n * Returns whether or not the matrices have exactly the same elements in the same position (when compared with ===)\r\n *\r\n * @param {mat2d} a The first matrix.\r\n * @param {mat2d} b The second matrix.\r\n * @returns {Boolean} True if the matrices are equal, false otherwise.\r\n */\r\nexport function exactEquals(a, b) {\r\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3] && a[4] === b[4] && a[5] === b[5];\r\n}\r\n\r\n/**\r\n * Returns whether or not the matrices have approximately the same elements in the same position.\r\n *\r\n * @param {mat2d} a The first matrix.\r\n * @param {mat2d} b The second matrix.\r\n * @returns {Boolean} True if the matrices are equal, false otherwise.\r\n */\r\nexport function equals(a, b) {\r\n var a0 = a[0],\r\n a1 = a[1],\r\n a2 = a[2],\r\n a3 = a[3],\r\n a4 = a[4],\r\n a5 = a[5];\r\n var b0 = b[0],\r\n b1 = b[1],\r\n b2 = b[2],\r\n b3 = b[3],\r\n b4 = b[4],\r\n b5 = b[5];\r\n return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)) && Math.abs(a3 - b3) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a3), Math.abs(b3)) && Math.abs(a4 - b4) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a4), Math.abs(b4)) && Math.abs(a5 - b5) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a5), Math.abs(b5));\r\n}\r\n\r\n/**\r\n * Alias for {@link mat2d.multiply}\r\n * @function\r\n */\r\nexport var mul = multiply;\r\n\r\n/**\r\n * Alias for {@link mat2d.subtract}\r\n * @function\r\n */\r\nexport var sub = subtract;","import * as glMatrix from \"./common.js\";\r\n\r\n/**\r\n * 3x3 Matrix\r\n * @module mat3\r\n */\r\n\r\n/**\r\n * Creates a new identity mat3\r\n *\r\n * @returns {mat3} a new 3x3 matrix\r\n */\r\nexport function create() {\r\n var out = new glMatrix.ARRAY_TYPE(9);\r\n if (glMatrix.ARRAY_TYPE != Float32Array) {\r\n out[1] = 0;\r\n out[2] = 0;\r\n out[3] = 0;\r\n out[5] = 0;\r\n out[6] = 0;\r\n out[7] = 0;\r\n }\r\n out[0] = 1;\r\n out[4] = 1;\r\n out[8] = 1;\r\n return out;\r\n}\r\n\r\n/**\r\n * Copies the upper-left 3x3 values into the given mat3.\r\n *\r\n * @param {mat3} out the receiving 3x3 matrix\r\n * @param {mat4} a the source 4x4 matrix\r\n * @returns {mat3} out\r\n */\r\nexport function fromMat4(out, a) {\r\n out[0] = a[0];\r\n out[1] = a[1];\r\n out[2] = a[2];\r\n out[3] = a[4];\r\n out[4] = a[5];\r\n out[5] = a[6];\r\n out[6] = a[8];\r\n out[7] = a[9];\r\n out[8] = a[10];\r\n return out;\r\n}\r\n\r\n/**\r\n * Creates a new mat3 initialized with values from an existing matrix\r\n *\r\n * @param {mat3} a matrix to clone\r\n * @returns {mat3} a new 3x3 matrix\r\n */\r\nexport function clone(a) {\r\n var out = new glMatrix.ARRAY_TYPE(9);\r\n out[0] = a[0];\r\n out[1] = a[1];\r\n out[2] = a[2];\r\n out[3] = a[3];\r\n out[4] = a[4];\r\n out[5] = a[5];\r\n out[6] = a[6];\r\n out[7] = a[7];\r\n out[8] = a[8];\r\n return out;\r\n}\r\n\r\n/**\r\n * Copy the values from one mat3 to another\r\n *\r\n * @param {mat3} out the receiving matrix\r\n * @param {mat3} a the source matrix\r\n * @returns {mat3} out\r\n */\r\nexport function copy(out, a) {\r\n out[0] = a[0];\r\n out[1] = a[1];\r\n out[2] = a[2];\r\n out[3] = a[3];\r\n out[4] = a[4];\r\n out[5] = a[5];\r\n out[6] = a[6];\r\n out[7] = a[7];\r\n out[8] = a[8];\r\n return out;\r\n}\r\n\r\n/**\r\n * Create a new mat3 with the given values\r\n *\r\n * @param {Number} m00 Component in column 0, row 0 position (index 0)\r\n * @param {Number} m01 Component in column 0, row 1 position (index 1)\r\n * @param {Number} m02 Component in column 0, row 2 position (index 2)\r\n * @param {Number} m10 Component in column 1, row 0 position (index 3)\r\n * @param {Number} m11 Component in column 1, row 1 position (index 4)\r\n * @param {Number} m12 Component in column 1, row 2 position (index 5)\r\n * @param {Number} m20 Component in column 2, row 0 position (index 6)\r\n * @param {Number} m21 Component in column 2, row 1 position (index 7)\r\n * @param {Number} m22 Component in column 2, row 2 position (index 8)\r\n * @returns {mat3} A new mat3\r\n */\r\nexport function fromValues(m00, m01, m02, m10, m11, m12, m20, m21, m22) {\r\n var out = new glMatrix.ARRAY_TYPE(9);\r\n out[0] = m00;\r\n out[1] = m01;\r\n out[2] = m02;\r\n out[3] = m10;\r\n out[4] = m11;\r\n out[5] = m12;\r\n out[6] = m20;\r\n out[7] = m21;\r\n out[8] = m22;\r\n return out;\r\n}\r\n\r\n/**\r\n * Set the components of a mat3 to the given values\r\n *\r\n * @param {mat3} out the receiving matrix\r\n * @param {Number} m00 Component in column 0, row 0 position (index 0)\r\n * @param {Number} m01 Component in column 0, row 1 position (index 1)\r\n * @param {Number} m02 Component in column 0, row 2 position (index 2)\r\n * @param {Number} m10 Component in column 1, row 0 position (index 3)\r\n * @param {Number} m11 Component in column 1, row 1 position (index 4)\r\n * @param {Number} m12 Component in column 1, row 2 position (index 5)\r\n * @param {Number} m20 Component in column 2, row 0 position (index 6)\r\n * @param {Number} m21 Component in column 2, row 1 position (index 7)\r\n * @param {Number} m22 Component in column 2, row 2 position (index 8)\r\n * @returns {mat3} out\r\n */\r\nexport function set(out, m00, m01, m02, m10, m11, m12, m20, m21, m22) {\r\n out[0] = m00;\r\n out[1] = m01;\r\n out[2] = m02;\r\n out[3] = m10;\r\n out[4] = m11;\r\n out[5] = m12;\r\n out[6] = m20;\r\n out[7] = m21;\r\n out[8] = m22;\r\n return out;\r\n}\r\n\r\n/**\r\n * Set a mat3 to the identity matrix\r\n *\r\n * @param {mat3} out the receiving matrix\r\n * @returns {mat3} out\r\n */\r\nexport function identity(out) {\r\n out[0] = 1;\r\n out[1] = 0;\r\n out[2] = 0;\r\n out[3] = 0;\r\n out[4] = 1;\r\n out[5] = 0;\r\n out[6] = 0;\r\n out[7] = 0;\r\n out[8] = 1;\r\n return out;\r\n}\r\n\r\n/**\r\n * Transpose the values of a mat3\r\n *\r\n * @param {mat3} out the receiving matrix\r\n * @param {mat3} a the source matrix\r\n * @returns {mat3} out\r\n */\r\nexport function transpose(out, a) {\r\n // If we are transposing ourselves we can skip a few steps but have to cache some values\r\n if (out === a) {\r\n var a01 = a[1],\r\n a02 = a[2],\r\n a12 = a[5];\r\n out[1] = a[3];\r\n out[2] = a[6];\r\n out[3] = a01;\r\n out[5] = a[7];\r\n out[6] = a02;\r\n out[7] = a12;\r\n } else {\r\n out[0] = a[0];\r\n out[1] = a[3];\r\n out[2] = a[6];\r\n out[3] = a[1];\r\n out[4] = a[4];\r\n out[5] = a[7];\r\n out[6] = a[2];\r\n out[7] = a[5];\r\n out[8] = a[8];\r\n }\r\n\r\n return out;\r\n}\r\n\r\n/**\r\n * Inverts a mat3\r\n *\r\n * @param {mat3} out the receiving matrix\r\n * @param {mat3} a the source matrix\r\n * @returns {mat3} out\r\n */\r\nexport function invert(out, a) {\r\n var a00 = a[0],\r\n a01 = a[1],\r\n a02 = a[2];\r\n var a10 = a[3],\r\n a11 = a[4],\r\n a12 = a[5];\r\n var a20 = a[6],\r\n a21 = a[7],\r\n a22 = a[8];\r\n\r\n var b01 = a22 * a11 - a12 * a21;\r\n var b11 = -a22 * a10 + a12 * a20;\r\n var b21 = a21 * a10 - a11 * a20;\r\n\r\n // Calculate the determinant\r\n var det = a00 * b01 + a01 * b11 + a02 * b21;\r\n\r\n if (!det) {\r\n return null;\r\n }\r\n det = 1.0 / det;\r\n\r\n out[0] = b01 * det;\r\n out[1] = (-a22 * a01 + a02 * a21) * det;\r\n out[2] = (a12 * a01 - a02 * a11) * det;\r\n out[3] = b11 * det;\r\n out[4] = (a22 * a00 - a02 * a20) * det;\r\n out[5] = (-a12 * a00 + a02 * a10) * det;\r\n out[6] = b21 * det;\r\n out[7] = (-a21 * a00 + a01 * a20) * det;\r\n out[8] = (a11 * a00 - a01 * a10) * det;\r\n return out;\r\n}\r\n\r\n/**\r\n * Calculates the adjugate of a mat3\r\n *\r\n * @param {mat3} out the receiving matrix\r\n * @param {mat3} a the source matrix\r\n * @returns {mat3} out\r\n */\r\nexport function adjoint(out, a) {\r\n var a00 = a[0],\r\n a01 = a[1],\r\n a02 = a[2];\r\n var a10 = a[3],\r\n a11 = a[4],\r\n a12 = a[5];\r\n var a20 = a[6],\r\n a21 = a[7],\r\n a22 = a[8];\r\n\r\n out[0] = a11 * a22 - a12 * a21;\r\n out[1] = a02 * a21 - a01 * a22;\r\n out[2] = a01 * a12 - a02 * a11;\r\n out[3] = a12 * a20 - a10 * a22;\r\n out[4] = a00 * a22 - a02 * a20;\r\n out[5] = a02 * a10 - a00 * a12;\r\n out[6] = a10 * a21 - a11 * a20;\r\n out[7] = a01 * a20 - a00 * a21;\r\n out[8] = a00 * a11 - a01 * a10;\r\n return out;\r\n}\r\n\r\n/**\r\n * Calculates the determinant of a mat3\r\n *\r\n * @param {mat3} a the source matrix\r\n * @returns {Number} determinant of a\r\n */\r\nexport function determinant(a) {\r\n var a00 = a[0],\r\n a01 = a[1],\r\n a02 = a[2];\r\n var a10 = a[3],\r\n a11 = a[4],\r\n a12 = a[5];\r\n var a20 = a[6],\r\n a21 = a[7],\r\n a22 = a[8];\r\n\r\n return a00 * (a22 * a11 - a12 * a21) + a01 * (-a22 * a10 + a12 * a20) + a02 * (a21 * a10 - a11 * a20);\r\n}\r\n\r\n/**\r\n * Multiplies two mat3's\r\n *\r\n * @param {mat3} out the receiving matrix\r\n * @param {mat3} a the first operand\r\n * @param {mat3} b the second operand\r\n * @returns {mat3} out\r\n */\r\nexport function multiply(out, a, b) {\r\n var a00 = a[0],\r\n a01 = a[1],\r\n a02 = a[2];\r\n var a10 = a[3],\r\n a11 = a[4],\r\n a12 = a[5];\r\n var a20 = a[6],\r\n a21 = a[7],\r\n a22 = a[8];\r\n\r\n var b00 = b[0],\r\n b01 = b[1],\r\n b02 = b[2];\r\n var b10 = b[3],\r\n b11 = b[4],\r\n b12 = b[5];\r\n var b20 = b[6],\r\n b21 = b[7],\r\n b22 = b[8];\r\n\r\n out[0] = b00 * a00 + b01 * a10 + b02 * a20;\r\n out[1] = b00 * a01 + b01 * a11 + b02 * a21;\r\n out[2] = b00 * a02 + b01 * a12 + b02 * a22;\r\n\r\n out[3] = b10 * a00 + b11 * a10 + b12 * a20;\r\n out[4] = b10 * a01 + b11 * a11 + b12 * a21;\r\n out[5] = b10 * a02 + b11 * a12 + b12 * a22;\r\n\r\n out[6] = b20 * a00 + b21 * a10 + b22 * a20;\r\n out[7] = b20 * a01 + b21 * a11 + b22 * a21;\r\n out[8] = b20 * a02 + b21 * a12 + b22 * a22;\r\n return out;\r\n}\r\n\r\n/**\r\n * Translate a mat3 by the given vector\r\n *\r\n * @param {mat3} out the receiving matrix\r\n * @param {mat3} a the matrix to translate\r\n * @param {vec2} v vector to translate by\r\n * @returns {mat3} out\r\n */\r\nexport function translate(out, a, v) {\r\n var a00 = a[0],\r\n a01 = a[1],\r\n a02 = a[2],\r\n a10 = a[3],\r\n a11 = a[4],\r\n a12 = a[5],\r\n a20 = a[6],\r\n a21 = a[7],\r\n a22 = a[8],\r\n x = v[0],\r\n y = v[1];\r\n\r\n out[0] = a00;\r\n out[1] = a01;\r\n out[2] = a02;\r\n\r\n out[3] = a10;\r\n out[4] = a11;\r\n out[5] = a12;\r\n\r\n out[6] = x * a00 + y * a10 + a20;\r\n out[7] = x * a01 + y * a11 + a21;\r\n out[8] = x * a02 + y * a12 + a22;\r\n return out;\r\n}\r\n\r\n/**\r\n * Rotates a mat3 by the given angle\r\n *\r\n * @param {mat3} out the receiving matrix\r\n * @param {mat3} a the matrix to rotate\r\n * @param {Number} rad the angle to rotate the matrix by\r\n * @returns {mat3} out\r\n */\r\nexport function rotate(out, a, rad) {\r\n var a00 = a[0],\r\n a01 = a[1],\r\n a02 = a[2],\r\n a10 = a[3],\r\n a11 = a[4],\r\n a12 = a[5],\r\n a20 = a[6],\r\n a21 = a[7],\r\n a22 = a[8],\r\n s = Math.sin(rad),\r\n c = Math.cos(rad);\r\n\r\n out[0] = c * a00 + s * a10;\r\n out[1] = c * a01 + s * a11;\r\n out[2] = c * a02 + s * a12;\r\n\r\n out[3] = c * a10 - s * a00;\r\n out[4] = c * a11 - s * a01;\r\n out[5] = c * a12 - s * a02;\r\n\r\n out[6] = a20;\r\n out[7] = a21;\r\n out[8] = a22;\r\n return out;\r\n};\r\n\r\n/**\r\n * Scales the mat3 by the dimensions in the given vec2\r\n *\r\n * @param {mat3} out the receiving matrix\r\n * @param {mat3} a the matrix to rotate\r\n * @param {vec2} v the vec2 to scale the matrix by\r\n * @returns {mat3} out\r\n **/\r\nexport function scale(out, a, v) {\r\n var x = v[0],\r\n y = v[1];\r\n\r\n out[0] = x * a[0];\r\n out[1] = x * a[1];\r\n out[2] = x * a[2];\r\n\r\n out[3] = y * a[3];\r\n out[4] = y * a[4];\r\n out[5] = y * a[5];\r\n\r\n out[6] = a[6];\r\n out[7] = a[7];\r\n out[8] = a[8];\r\n return out;\r\n}\r\n\r\n/**\r\n * Creates a matrix from a vector translation\r\n * This is equivalent to (but much faster than):\r\n *\r\n * mat3.identity(dest);\r\n * mat3.translate(dest, dest, vec);\r\n *\r\n * @param {mat3} out mat3 receiving operation result\r\n * @param {vec2} v Translation vector\r\n * @returns {mat3} out\r\n */\r\nexport function fromTranslation(out, v) {\r\n out[0] = 1;\r\n out[1] = 0;\r\n out[2] = 0;\r\n out[3] = 0;\r\n out[4] = 1;\r\n out[5] = 0;\r\n out[6] = v[0];\r\n out[7] = v[1];\r\n out[8] = 1;\r\n return out;\r\n}\r\n\r\n/**\r\n * Creates a matrix from a given angle\r\n * This is equivalent to (but much faster than):\r\n *\r\n * mat3.identity(dest);\r\n * mat3.rotate(dest, dest, rad);\r\n *\r\n * @param {mat3} out mat3 receiving operation result\r\n * @param {Number} rad the angle to rotate the matrix by\r\n * @returns {mat3} out\r\n */\r\nexport function fromRotation(out, rad) {\r\n var s = Math.sin(rad),\r\n c = Math.cos(rad);\r\n\r\n out[0] = c;\r\n out[1] = s;\r\n out[2] = 0;\r\n\r\n out[3] = -s;\r\n out[4] = c;\r\n out[5] = 0;\r\n\r\n out[6] = 0;\r\n out[7] = 0;\r\n out[8] = 1;\r\n return out;\r\n}\r\n\r\n/**\r\n * Creates a matrix from a vector scaling\r\n * This is equivalent to (but much faster than):\r\n *\r\n * mat3.identity(dest);\r\n * mat3.scale(dest, dest, vec);\r\n *\r\n * @param {mat3} out mat3 receiving operation result\r\n * @param {vec2} v Scaling vector\r\n * @returns {mat3} out\r\n */\r\nexport function fromScaling(out, v) {\r\n out[0] = v[0];\r\n out[1] = 0;\r\n out[2] = 0;\r\n\r\n out[3] = 0;\r\n out[4] = v[1];\r\n out[5] = 0;\r\n\r\n out[6] = 0;\r\n out[7] = 0;\r\n out[8] = 1;\r\n return out;\r\n}\r\n\r\n/**\r\n * Copies the values from a mat2d into a mat3\r\n *\r\n * @param {mat3} out the receiving matrix\r\n * @param {mat2d} a the matrix to copy\r\n * @returns {mat3} out\r\n **/\r\nexport function fromMat2d(out, a) {\r\n out[0] = a[0];\r\n out[1] = a[1];\r\n out[2] = 0;\r\n\r\n out[3] = a[2];\r\n out[4] = a[3];\r\n out[5] = 0;\r\n\r\n out[6] = a[4];\r\n out[7] = a[5];\r\n out[8] = 1;\r\n return out;\r\n}\r\n\r\n/**\r\n* Calculates a 3x3 matrix from the given quaternion\r\n*\r\n* @param {mat3} out mat3 receiving operation result\r\n* @param {quat} q Quaternion to create matrix from\r\n*\r\n* @returns {mat3} out\r\n*/\r\nexport function fromQuat(out, q) {\r\n var x = q[0],\r\n y = q[1],\r\n z = q[2],\r\n w = q[3];\r\n var x2 = x + x;\r\n var y2 = y + y;\r\n var z2 = z + z;\r\n\r\n var xx = x * x2;\r\n var yx = y * x2;\r\n var yy = y * y2;\r\n var zx = z * x2;\r\n var zy = z * y2;\r\n var zz = z * z2;\r\n var wx = w * x2;\r\n var wy = w * y2;\r\n var wz = w * z2;\r\n\r\n out[0] = 1 - yy - zz;\r\n out[3] = yx - wz;\r\n out[6] = zx + wy;\r\n\r\n out[1] = yx + wz;\r\n out[4] = 1 - xx - zz;\r\n out[7] = zy - wx;\r\n\r\n out[2] = zx - wy;\r\n out[5] = zy + wx;\r\n out[8] = 1 - xx - yy;\r\n\r\n return out;\r\n}\r\n\r\n/**\r\n* Calculates a 3x3 normal matrix (transpose inverse) from the 4x4 matrix\r\n*\r\n* @param {mat3} out mat3 receiving operation result\r\n* @param {mat4} a Mat4 to derive the normal matrix from\r\n*\r\n* @returns {mat3} out\r\n*/\r\nexport function normalFromMat4(out, a) {\r\n var a00 = a[0],\r\n a01 = a[1],\r\n a02 = a[2],\r\n a03 = a[3];\r\n var a10 = a[4],\r\n a11 = a[5],\r\n a12 = a[6],\r\n a13 = a[7];\r\n var a20 = a[8],\r\n a21 = a[9],\r\n a22 = a[10],\r\n a23 = a[11];\r\n var a30 = a[12],\r\n a31 = a[13],\r\n a32 = a[14],\r\n a33 = a[15];\r\n\r\n var b00 = a00 * a11 - a01 * a10;\r\n var b01 = a00 * a12 - a02 * a10;\r\n var b02 = a00 * a13 - a03 * a10;\r\n var b03 = a01 * a12 - a02 * a11;\r\n var b04 = a01 * a13 - a03 * a11;\r\n var b05 = a02 * a13 - a03 * a12;\r\n var b06 = a20 * a31 - a21 * a30;\r\n var b07 = a20 * a32 - a22 * a30;\r\n var b08 = a20 * a33 - a23 * a30;\r\n var b09 = a21 * a32 - a22 * a31;\r\n var b10 = a21 * a33 - a23 * a31;\r\n var b11 = a22 * a33 - a23 * a32;\r\n\r\n // Calculate the determinant\r\n var det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\r\n\r\n if (!det) {\r\n return null;\r\n }\r\n det = 1.0 / det;\r\n\r\n out[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det;\r\n out[1] = (a12 * b08 - a10 * b11 - a13 * b07) * det;\r\n out[2] = (a10 * b10 - a11 * b08 + a13 * b06) * det;\r\n\r\n out[3] = (a02 * b10 - a01 * b11 - a03 * b09) * det;\r\n out[4] = (a00 * b11 - a02 * b08 + a03 * b07) * det;\r\n out[5] = (a01 * b08 - a00 * b10 - a03 * b06) * det;\r\n\r\n out[6] = (a31 * b05 - a32 * b04 + a33 * b03) * det;\r\n out[7] = (a32 * b02 - a30 * b05 - a33 * b01) * det;\r\n out[8] = (a30 * b04 - a31 * b02 + a33 * b00) * det;\r\n\r\n return out;\r\n}\r\n\r\n/**\r\n * Generates a 2D projection matrix with the given bounds\r\n *\r\n * @param {mat3} out mat3 frustum matrix will be written into\r\n * @param {number} width Width of your gl context\r\n * @param {number} height Height of gl context\r\n * @returns {mat3} out\r\n */\r\nexport function projection(out, width, height) {\r\n out[0] = 2 / width;\r\n out[1] = 0;\r\n out[2] = 0;\r\n out[3] = 0;\r\n out[4] = -2 / height;\r\n out[5] = 0;\r\n out[6] = -1;\r\n out[7] = 1;\r\n out[8] = 1;\r\n return out;\r\n}\r\n\r\n/**\r\n * Returns a string representation of a mat3\r\n *\r\n * @param {mat3} a matrix to represent as a string\r\n * @returns {String} string representation of the matrix\r\n */\r\nexport function str(a) {\r\n return 'mat3(' + a[0] + ', ' + a[1] + ', ' + a[2] + ', ' + a[3] + ', ' + a[4] + ', ' + a[5] + ', ' + a[6] + ', ' + a[7] + ', ' + a[8] + ')';\r\n}\r\n\r\n/**\r\n * Returns Frobenius norm of a mat3\r\n *\r\n * @param {mat3} a the matrix to calculate Frobenius norm of\r\n * @returns {Number} Frobenius norm\r\n */\r\nexport function frob(a) {\r\n return Math.sqrt(Math.pow(a[0], 2) + Math.pow(a[1], 2) + Math.pow(a[2], 2) + Math.pow(a[3], 2) + Math.pow(a[4], 2) + Math.pow(a[5], 2) + Math.pow(a[6], 2) + Math.pow(a[7], 2) + Math.pow(a[8], 2));\r\n}\r\n\r\n/**\r\n * Adds two mat3's\r\n *\r\n * @param {mat3} out the receiving matrix\r\n * @param {mat3} a the first operand\r\n * @param {mat3} b the second operand\r\n * @returns {mat3} out\r\n */\r\nexport function add(out, a, b) {\r\n out[0] = a[0] + b[0];\r\n out[1] = a[1] + b[1];\r\n out[2] = a[2] + b[2];\r\n out[3] = a[3] + b[3];\r\n out[4] = a[4] + b[4];\r\n out[5] = a[5] + b[5];\r\n out[6] = a[6] + b[6];\r\n out[7] = a[7] + b[7];\r\n out[8] = a[8] + b[8];\r\n return out;\r\n}\r\n\r\n/**\r\n * Subtracts matrix b from matrix a\r\n *\r\n * @param {mat3} out the receiving matrix\r\n * @param {mat3} a the first operand\r\n * @param {mat3} b the second operand\r\n * @returns {mat3} out\r\n */\r\nexport function subtract(out, a, b) {\r\n out[0] = a[0] - b[0];\r\n out[1] = a[1] - b[1];\r\n out[2] = a[2] - b[2];\r\n out[3] = a[3] - b[3];\r\n out[4] = a[4] - b[4];\r\n out[5] = a[5] - b[5];\r\n out[6] = a[6] - b[6];\r\n out[7] = a[7] - b[7];\r\n out[8] = a[8] - b[8];\r\n return out;\r\n}\r\n\r\n/**\r\n * Multiply each element of the matrix by a scalar.\r\n *\r\n * @param {mat3} out the receiving matrix\r\n * @param {mat3} a the matrix to scale\r\n * @param {Number} b amount to scale the matrix's elements by\r\n * @returns {mat3} out\r\n */\r\nexport function multiplyScalar(out, a, b) {\r\n out[0] = a[0] * b;\r\n out[1] = a[1] * b;\r\n out[2] = a[2] * b;\r\n out[3] = a[3] * b;\r\n out[4] = a[4] * b;\r\n out[5] = a[5] * b;\r\n out[6] = a[6] * b;\r\n out[7] = a[7] * b;\r\n out[8] = a[8] * b;\r\n return out;\r\n}\r\n\r\n/**\r\n * Adds two mat3's after multiplying each element of the second operand by a scalar value.\r\n *\r\n * @param {mat3} out the receiving vector\r\n * @param {mat3} a the first operand\r\n * @param {mat3} b the second operand\r\n * @param {Number} scale the amount to scale b's elements by before adding\r\n * @returns {mat3} out\r\n */\r\nexport function multiplyScalarAndAdd(out, a, b, scale) {\r\n out[0] = a[0] + b[0] * scale;\r\n out[1] = a[1] + b[1] * scale;\r\n out[2] = a[2] + b[2] * scale;\r\n out[3] = a[3] + b[3] * scale;\r\n out[4] = a[4] + b[4] * scale;\r\n out[5] = a[5] + b[5] * scale;\r\n out[6] = a[6] + b[6] * scale;\r\n out[7] = a[7] + b[7] * scale;\r\n out[8] = a[8] + b[8] * scale;\r\n return out;\r\n}\r\n\r\n/**\r\n * Returns whether or not the matrices have exactly the same elements in the same position (when compared with ===)\r\n *\r\n * @param {mat3} a The first matrix.\r\n * @param {mat3} b The second matrix.\r\n * @returns {Boolean} True if the matrices are equal, false otherwise.\r\n */\r\nexport function exactEquals(a, b) {\r\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3] && a[4] === b[4] && a[5] === b[5] && a[6] === b[6] && a[7] === b[7] && a[8] === b[8];\r\n}\r\n\r\n/**\r\n * Returns whether or not the matrices have approximately the same elements in the same position.\r\n *\r\n * @param {mat3} a The first matrix.\r\n * @param {mat3} b The second matrix.\r\n * @returns {Boolean} True if the matrices are equal, false otherwise.\r\n */\r\nexport function equals(a, b) {\r\n var a0 = a[0],\r\n a1 = a[1],\r\n a2 = a[2],\r\n a3 = a[3],\r\n a4 = a[4],\r\n a5 = a[5],\r\n a6 = a[6],\r\n a7 = a[7],\r\n a8 = a[8];\r\n var b0 = b[0],\r\n b1 = b[1],\r\n b2 = b[2],\r\n b3 = b[3],\r\n b4 = b[4],\r\n b5 = b[5],\r\n b6 = b[6],\r\n b7 = b[7],\r\n b8 = b[8];\r\n return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)) && Math.abs(a3 - b3) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a3), Math.abs(b3)) && Math.abs(a4 - b4) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a4), Math.abs(b4)) && Math.abs(a5 - b5) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a5), Math.abs(b5)) && Math.abs(a6 - b6) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a6), Math.abs(b6)) && Math.abs(a7 - b7) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a7), Math.abs(b7)) && Math.abs(a8 - b8) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a8), Math.abs(b8));\r\n}\r\n\r\n/**\r\n * Alias for {@link mat3.multiply}\r\n * @function\r\n */\r\nexport var mul = multiply;\r\n\r\n/**\r\n * Alias for {@link mat3.subtract}\r\n * @function\r\n */\r\nexport var sub = subtract;","import * as glMatrix from \"./common.js\";\r\n\r\n/**\r\n * 4x4 Matrix
Format: column-major, when typed out it looks like row-major
The matrices are being post multiplied.\r\n * @module mat4\r\n */\r\n\r\n/**\r\n * Creates a new identity mat4\r\n *\r\n * @returns {mat4} a new 4x4 matrix\r\n */\r\nexport function create() {\r\n var out = new glMatrix.ARRAY_TYPE(16);\r\n if (glMatrix.ARRAY_TYPE != Float32Array) {\r\n out[1] = 0;\r\n out[2] = 0;\r\n out[3] = 0;\r\n out[4] = 0;\r\n out[6] = 0;\r\n out[7] = 0;\r\n out[8] = 0;\r\n out[9] = 0;\r\n out[11] = 0;\r\n out[12] = 0;\r\n out[13] = 0;\r\n out[14] = 0;\r\n }\r\n out[0] = 1;\r\n out[5] = 1;\r\n out[10] = 1;\r\n out[15] = 1;\r\n return out;\r\n}\r\n\r\n/**\r\n * Creates a new mat4 initialized with values from an existing matrix\r\n *\r\n * @param {mat4} a matrix to clone\r\n * @returns {mat4} a new 4x4 matrix\r\n */\r\nexport function clone(a) {\r\n var out = new glMatrix.ARRAY_TYPE(16);\r\n out[0] = a[0];\r\n out[1] = a[1];\r\n out[2] = a[2];\r\n out[3] = a[3];\r\n out[4] = a[4];\r\n out[5] = a[5];\r\n out[6] = a[6];\r\n out[7] = a[7];\r\n out[8] = a[8];\r\n out[9] = a[9];\r\n out[10] = a[10];\r\n out[11] = a[11];\r\n out[12] = a[12];\r\n out[13] = a[13];\r\n out[14] = a[14];\r\n out[15] = a[15];\r\n return out;\r\n}\r\n\r\n/**\r\n * Copy the values from one mat4 to another\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {mat4} a the source matrix\r\n * @returns {mat4} out\r\n */\r\nexport function copy(out, a) {\r\n out[0] = a[0];\r\n out[1] = a[1];\r\n out[2] = a[2];\r\n out[3] = a[3];\r\n out[4] = a[4];\r\n out[5] = a[5];\r\n out[6] = a[6];\r\n out[7] = a[7];\r\n out[8] = a[8];\r\n out[9] = a[9];\r\n out[10] = a[10];\r\n out[11] = a[11];\r\n out[12] = a[12];\r\n out[13] = a[13];\r\n out[14] = a[14];\r\n out[15] = a[15];\r\n return out;\r\n}\r\n\r\n/**\r\n * Create a new mat4 with the given values\r\n *\r\n * @param {Number} m00 Component in column 0, row 0 position (index 0)\r\n * @param {Number} m01 Component in column 0, row 1 position (index 1)\r\n * @param {Number} m02 Component in column 0, row 2 position (index 2)\r\n * @param {Number} m03 Component in column 0, row 3 position (index 3)\r\n * @param {Number} m10 Component in column 1, row 0 position (index 4)\r\n * @param {Number} m11 Component in column 1, row 1 position (index 5)\r\n * @param {Number} m12 Component in column 1, row 2 position (index 6)\r\n * @param {Number} m13 Component in column 1, row 3 position (index 7)\r\n * @param {Number} m20 Component in column 2, row 0 position (index 8)\r\n * @param {Number} m21 Component in column 2, row 1 position (index 9)\r\n * @param {Number} m22 Component in column 2, row 2 position (index 10)\r\n * @param {Number} m23 Component in column 2, row 3 position (index 11)\r\n * @param {Number} m30 Component in column 3, row 0 position (index 12)\r\n * @param {Number} m31 Component in column 3, row 1 position (index 13)\r\n * @param {Number} m32 Component in column 3, row 2 position (index 14)\r\n * @param {Number} m33 Component in column 3, row 3 position (index 15)\r\n * @returns {mat4} A new mat4\r\n */\r\nexport function fromValues(m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33) {\r\n var out = new glMatrix.ARRAY_TYPE(16);\r\n out[0] = m00;\r\n out[1] = m01;\r\n out[2] = m02;\r\n out[3] = m03;\r\n out[4] = m10;\r\n out[5] = m11;\r\n out[6] = m12;\r\n out[7] = m13;\r\n out[8] = m20;\r\n out[9] = m21;\r\n out[10] = m22;\r\n out[11] = m23;\r\n out[12] = m30;\r\n out[13] = m31;\r\n out[14] = m32;\r\n out[15] = m33;\r\n return out;\r\n}\r\n\r\n/**\r\n * Set the components of a mat4 to the given values\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {Number} m00 Component in column 0, row 0 position (index 0)\r\n * @param {Number} m01 Component in column 0, row 1 position (index 1)\r\n * @param {Number} m02 Component in column 0, row 2 position (index 2)\r\n * @param {Number} m03 Component in column 0, row 3 position (index 3)\r\n * @param {Number} m10 Component in column 1, row 0 position (index 4)\r\n * @param {Number} m11 Component in column 1, row 1 position (index 5)\r\n * @param {Number} m12 Component in column 1, row 2 position (index 6)\r\n * @param {Number} m13 Component in column 1, row 3 position (index 7)\r\n * @param {Number} m20 Component in column 2, row 0 position (index 8)\r\n * @param {Number} m21 Component in column 2, row 1 position (index 9)\r\n * @param {Number} m22 Component in column 2, row 2 position (index 10)\r\n * @param {Number} m23 Component in column 2, row 3 position (index 11)\r\n * @param {Number} m30 Component in column 3, row 0 position (index 12)\r\n * @param {Number} m31 Component in column 3, row 1 position (index 13)\r\n * @param {Number} m32 Component in column 3, row 2 position (index 14)\r\n * @param {Number} m33 Component in column 3, row 3 position (index 15)\r\n * @returns {mat4} out\r\n */\r\nexport function set(out, m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33) {\r\n out[0] = m00;\r\n out[1] = m01;\r\n out[2] = m02;\r\n out[3] = m03;\r\n out[4] = m10;\r\n out[5] = m11;\r\n out[6] = m12;\r\n out[7] = m13;\r\n out[8] = m20;\r\n out[9] = m21;\r\n out[10] = m22;\r\n out[11] = m23;\r\n out[12] = m30;\r\n out[13] = m31;\r\n out[14] = m32;\r\n out[15] = m33;\r\n return out;\r\n}\r\n\r\n/**\r\n * Set a mat4 to the identity matrix\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @returns {mat4} out\r\n */\r\nexport function identity(out) {\r\n out[0] = 1;\r\n out[1] = 0;\r\n out[2] = 0;\r\n out[3] = 0;\r\n out[4] = 0;\r\n out[5] = 1;\r\n out[6] = 0;\r\n out[7] = 0;\r\n out[8] = 0;\r\n out[9] = 0;\r\n out[10] = 1;\r\n out[11] = 0;\r\n out[12] = 0;\r\n out[13] = 0;\r\n out[14] = 0;\r\n out[15] = 1;\r\n return out;\r\n}\r\n\r\n/**\r\n * Transpose the values of a mat4\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {mat4} a the source matrix\r\n * @returns {mat4} out\r\n */\r\nexport function transpose(out, a) {\r\n // If we are transposing ourselves we can skip a few steps but have to cache some values\r\n if (out === a) {\r\n var a01 = a[1],\r\n a02 = a[2],\r\n a03 = a[3];\r\n var a12 = a[6],\r\n a13 = a[7];\r\n var a23 = a[11];\r\n\r\n out[1] = a[4];\r\n out[2] = a[8];\r\n out[3] = a[12];\r\n out[4] = a01;\r\n out[6] = a[9];\r\n out[7] = a[13];\r\n out[8] = a02;\r\n out[9] = a12;\r\n out[11] = a[14];\r\n out[12] = a03;\r\n out[13] = a13;\r\n out[14] = a23;\r\n } else {\r\n out[0] = a[0];\r\n out[1] = a[4];\r\n out[2] = a[8];\r\n out[3] = a[12];\r\n out[4] = a[1];\r\n out[5] = a[5];\r\n out[6] = a[9];\r\n out[7] = a[13];\r\n out[8] = a[2];\r\n out[9] = a[6];\r\n out[10] = a[10];\r\n out[11] = a[14];\r\n out[12] = a[3];\r\n out[13] = a[7];\r\n out[14] = a[11];\r\n out[15] = a[15];\r\n }\r\n\r\n return out;\r\n}\r\n\r\n/**\r\n * Inverts a mat4\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {mat4} a the source matrix\r\n * @returns {mat4} out\r\n */\r\nexport function invert(out, a) {\r\n var a00 = a[0],\r\n a01 = a[1],\r\n a02 = a[2],\r\n a03 = a[3];\r\n var a10 = a[4],\r\n a11 = a[5],\r\n a12 = a[6],\r\n a13 = a[7];\r\n var a20 = a[8],\r\n a21 = a[9],\r\n a22 = a[10],\r\n a23 = a[11];\r\n var a30 = a[12],\r\n a31 = a[13],\r\n a32 = a[14],\r\n a33 = a[15];\r\n\r\n var b00 = a00 * a11 - a01 * a10;\r\n var b01 = a00 * a12 - a02 * a10;\r\n var b02 = a00 * a13 - a03 * a10;\r\n var b03 = a01 * a12 - a02 * a11;\r\n var b04 = a01 * a13 - a03 * a11;\r\n var b05 = a02 * a13 - a03 * a12;\r\n var b06 = a20 * a31 - a21 * a30;\r\n var b07 = a20 * a32 - a22 * a30;\r\n var b08 = a20 * a33 - a23 * a30;\r\n var b09 = a21 * a32 - a22 * a31;\r\n var b10 = a21 * a33 - a23 * a31;\r\n var b11 = a22 * a33 - a23 * a32;\r\n\r\n // Calculate the determinant\r\n var det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\r\n\r\n if (!det) {\r\n return null;\r\n }\r\n det = 1.0 / det;\r\n\r\n out[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det;\r\n out[1] = (a02 * b10 - a01 * b11 - a03 * b09) * det;\r\n out[2] = (a31 * b05 - a32 * b04 + a33 * b03) * det;\r\n out[3] = (a22 * b04 - a21 * b05 - a23 * b03) * det;\r\n out[4] = (a12 * b08 - a10 * b11 - a13 * b07) * det;\r\n out[5] = (a00 * b11 - a02 * b08 + a03 * b07) * det;\r\n out[6] = (a32 * b02 - a30 * b05 - a33 * b01) * det;\r\n out[7] = (a20 * b05 - a22 * b02 + a23 * b01) * det;\r\n out[8] = (a10 * b10 - a11 * b08 + a13 * b06) * det;\r\n out[9] = (a01 * b08 - a00 * b10 - a03 * b06) * det;\r\n out[10] = (a30 * b04 - a31 * b02 + a33 * b00) * det;\r\n out[11] = (a21 * b02 - a20 * b04 - a23 * b00) * det;\r\n out[12] = (a11 * b07 - a10 * b09 - a12 * b06) * det;\r\n out[13] = (a00 * b09 - a01 * b07 + a02 * b06) * det;\r\n out[14] = (a31 * b01 - a30 * b03 - a32 * b00) * det;\r\n out[15] = (a20 * b03 - a21 * b01 + a22 * b00) * det;\r\n\r\n return out;\r\n}\r\n\r\n/**\r\n * Calculates the adjugate of a mat4\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {mat4} a the source matrix\r\n * @returns {mat4} out\r\n */\r\nexport function adjoint(out, a) {\r\n var a00 = a[0],\r\n a01 = a[1],\r\n a02 = a[2],\r\n a03 = a[3];\r\n var a10 = a[4],\r\n a11 = a[5],\r\n a12 = a[6],\r\n a13 = a[7];\r\n var a20 = a[8],\r\n a21 = a[9],\r\n a22 = a[10],\r\n a23 = a[11];\r\n var a30 = a[12],\r\n a31 = a[13],\r\n a32 = a[14],\r\n a33 = a[15];\r\n\r\n out[0] = a11 * (a22 * a33 - a23 * a32) - a21 * (a12 * a33 - a13 * a32) + a31 * (a12 * a23 - a13 * a22);\r\n out[1] = -(a01 * (a22 * a33 - a23 * a32) - a21 * (a02 * a33 - a03 * a32) + a31 * (a02 * a23 - a03 * a22));\r\n out[2] = a01 * (a12 * a33 - a13 * a32) - a11 * (a02 * a33 - a03 * a32) + a31 * (a02 * a13 - a03 * a12);\r\n out[3] = -(a01 * (a12 * a23 - a13 * a22) - a11 * (a02 * a23 - a03 * a22) + a21 * (a02 * a13 - a03 * a12));\r\n out[4] = -(a10 * (a22 * a33 - a23 * a32) - a20 * (a12 * a33 - a13 * a32) + a30 * (a12 * a23 - a13 * a22));\r\n out[5] = a00 * (a22 * a33 - a23 * a32) - a20 * (a02 * a33 - a03 * a32) + a30 * (a02 * a23 - a03 * a22);\r\n out[6] = -(a00 * (a12 * a33 - a13 * a32) - a10 * (a02 * a33 - a03 * a32) + a30 * (a02 * a13 - a03 * a12));\r\n out[7] = a00 * (a12 * a23 - a13 * a22) - a10 * (a02 * a23 - a03 * a22) + a20 * (a02 * a13 - a03 * a12);\r\n out[8] = a10 * (a21 * a33 - a23 * a31) - a20 * (a11 * a33 - a13 * a31) + a30 * (a11 * a23 - a13 * a21);\r\n out[9] = -(a00 * (a21 * a33 - a23 * a31) - a20 * (a01 * a33 - a03 * a31) + a30 * (a01 * a23 - a03 * a21));\r\n out[10] = a00 * (a11 * a33 - a13 * a31) - a10 * (a01 * a33 - a03 * a31) + a30 * (a01 * a13 - a03 * a11);\r\n out[11] = -(a00 * (a11 * a23 - a13 * a21) - a10 * (a01 * a23 - a03 * a21) + a20 * (a01 * a13 - a03 * a11));\r\n out[12] = -(a10 * (a21 * a32 - a22 * a31) - a20 * (a11 * a32 - a12 * a31) + a30 * (a11 * a22 - a12 * a21));\r\n out[13] = a00 * (a21 * a32 - a22 * a31) - a20 * (a01 * a32 - a02 * a31) + a30 * (a01 * a22 - a02 * a21);\r\n out[14] = -(a00 * (a11 * a32 - a12 * a31) - a10 * (a01 * a32 - a02 * a31) + a30 * (a01 * a12 - a02 * a11));\r\n out[15] = a00 * (a11 * a22 - a12 * a21) - a10 * (a01 * a22 - a02 * a21) + a20 * (a01 * a12 - a02 * a11);\r\n return out;\r\n}\r\n\r\n/**\r\n * Calculates the determinant of a mat4\r\n *\r\n * @param {mat4} a the source matrix\r\n * @returns {Number} determinant of a\r\n */\r\nexport function determinant(a) {\r\n var a00 = a[0],\r\n a01 = a[1],\r\n a02 = a[2],\r\n a03 = a[3];\r\n var a10 = a[4],\r\n a11 = a[5],\r\n a12 = a[6],\r\n a13 = a[7];\r\n var a20 = a[8],\r\n a21 = a[9],\r\n a22 = a[10],\r\n a23 = a[11];\r\n var a30 = a[12],\r\n a31 = a[13],\r\n a32 = a[14],\r\n a33 = a[15];\r\n\r\n var b00 = a00 * a11 - a01 * a10;\r\n var b01 = a00 * a12 - a02 * a10;\r\n var b02 = a00 * a13 - a03 * a10;\r\n var b03 = a01 * a12 - a02 * a11;\r\n var b04 = a01 * a13 - a03 * a11;\r\n var b05 = a02 * a13 - a03 * a12;\r\n var b06 = a20 * a31 - a21 * a30;\r\n var b07 = a20 * a32 - a22 * a30;\r\n var b08 = a20 * a33 - a23 * a30;\r\n var b09 = a21 * a32 - a22 * a31;\r\n var b10 = a21 * a33 - a23 * a31;\r\n var b11 = a22 * a33 - a23 * a32;\r\n\r\n // Calculate the determinant\r\n return b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\r\n}\r\n\r\n/**\r\n * Multiplies two mat4s\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {mat4} a the first operand\r\n * @param {mat4} b the second operand\r\n * @returns {mat4} out\r\n */\r\nexport function multiply(out, a, b) {\r\n var a00 = a[0],\r\n a01 = a[1],\r\n a02 = a[2],\r\n a03 = a[3];\r\n var a10 = a[4],\r\n a11 = a[5],\r\n a12 = a[6],\r\n a13 = a[7];\r\n var a20 = a[8],\r\n a21 = a[9],\r\n a22 = a[10],\r\n a23 = a[11];\r\n var a30 = a[12],\r\n a31 = a[13],\r\n a32 = a[14],\r\n a33 = a[15];\r\n\r\n // Cache only the current line of the second matrix\r\n var b0 = b[0],\r\n b1 = b[1],\r\n b2 = b[2],\r\n b3 = b[3];\r\n out[0] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\r\n out[1] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\r\n out[2] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\r\n out[3] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\r\n\r\n b0 = b[4];b1 = b[5];b2 = b[6];b3 = b[7];\r\n out[4] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\r\n out[5] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\r\n out[6] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\r\n out[7] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\r\n\r\n b0 = b[8];b1 = b[9];b2 = b[10];b3 = b[11];\r\n out[8] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\r\n out[9] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\r\n out[10] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\r\n out[11] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\r\n\r\n b0 = b[12];b1 = b[13];b2 = b[14];b3 = b[15];\r\n out[12] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\r\n out[13] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\r\n out[14] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\r\n out[15] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\r\n return out;\r\n}\r\n\r\n/**\r\n * Translate a mat4 by the given vector\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {mat4} a the matrix to translate\r\n * @param {vec3} v vector to translate by\r\n * @returns {mat4} out\r\n */\r\nexport function translate(out, a, v) {\r\n var x = v[0],\r\n y = v[1],\r\n z = v[2];\r\n var a00 = void 0,\r\n a01 = void 0,\r\n a02 = void 0,\r\n a03 = void 0;\r\n var a10 = void 0,\r\n a11 = void 0,\r\n a12 = void 0,\r\n a13 = void 0;\r\n var a20 = void 0,\r\n a21 = void 0,\r\n a22 = void 0,\r\n a23 = void 0;\r\n\r\n if (a === out) {\r\n out[12] = a[0] * x + a[4] * y + a[8] * z + a[12];\r\n out[13] = a[1] * x + a[5] * y + a[9] * z + a[13];\r\n out[14] = a[2] * x + a[6] * y + a[10] * z + a[14];\r\n out[15] = a[3] * x + a[7] * y + a[11] * z + a[15];\r\n } else {\r\n a00 = a[0];a01 = a[1];a02 = a[2];a03 = a[3];\r\n a10 = a[4];a11 = a[5];a12 = a[6];a13 = a[7];\r\n a20 = a[8];a21 = a[9];a22 = a[10];a23 = a[11];\r\n\r\n out[0] = a00;out[1] = a01;out[2] = a02;out[3] = a03;\r\n out[4] = a10;out[5] = a11;out[6] = a12;out[7] = a13;\r\n out[8] = a20;out[9] = a21;out[10] = a22;out[11] = a23;\r\n\r\n out[12] = a00 * x + a10 * y + a20 * z + a[12];\r\n out[13] = a01 * x + a11 * y + a21 * z + a[13];\r\n out[14] = a02 * x + a12 * y + a22 * z + a[14];\r\n out[15] = a03 * x + a13 * y + a23 * z + a[15];\r\n }\r\n\r\n return out;\r\n}\r\n\r\n/**\r\n * Scales the mat4 by the dimensions in the given vec3 not using vectorization\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {mat4} a the matrix to scale\r\n * @param {vec3} v the vec3 to scale the matrix by\r\n * @returns {mat4} out\r\n **/\r\nexport function scale(out, a, v) {\r\n var x = v[0],\r\n y = v[1],\r\n z = v[2];\r\n\r\n out[0] = a[0] * x;\r\n out[1] = a[1] * x;\r\n out[2] = a[2] * x;\r\n out[3] = a[3] * x;\r\n out[4] = a[4] * y;\r\n out[5] = a[5] * y;\r\n out[6] = a[6] * y;\r\n out[7] = a[7] * y;\r\n out[8] = a[8] * z;\r\n out[9] = a[9] * z;\r\n out[10] = a[10] * z;\r\n out[11] = a[11] * z;\r\n out[12] = a[12];\r\n out[13] = a[13];\r\n out[14] = a[14];\r\n out[15] = a[15];\r\n return out;\r\n}\r\n\r\n/**\r\n * Rotates a mat4 by the given angle around the given axis\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {mat4} a the matrix to rotate\r\n * @param {Number} rad the angle to rotate the matrix by\r\n * @param {vec3} axis the axis to rotate around\r\n * @returns {mat4} out\r\n */\r\nexport function rotate(out, a, rad, axis) {\r\n var x = axis[0],\r\n y = axis[1],\r\n z = axis[2];\r\n var len = Math.sqrt(x * x + y * y + z * z);\r\n var s = void 0,\r\n c = void 0,\r\n t = void 0;\r\n var a00 = void 0,\r\n a01 = void 0,\r\n a02 = void 0,\r\n a03 = void 0;\r\n var a10 = void 0,\r\n a11 = void 0,\r\n a12 = void 0,\r\n a13 = void 0;\r\n var a20 = void 0,\r\n a21 = void 0,\r\n a22 = void 0,\r\n a23 = void 0;\r\n var b00 = void 0,\r\n b01 = void 0,\r\n b02 = void 0;\r\n var b10 = void 0,\r\n b11 = void 0,\r\n b12 = void 0;\r\n var b20 = void 0,\r\n b21 = void 0,\r\n b22 = void 0;\r\n\r\n if (len < glMatrix.EPSILON) {\r\n return null;\r\n }\r\n\r\n len = 1 / len;\r\n x *= len;\r\n y *= len;\r\n z *= len;\r\n\r\n s = Math.sin(rad);\r\n c = Math.cos(rad);\r\n t = 1 - c;\r\n\r\n a00 = a[0];a01 = a[1];a02 = a[2];a03 = a[3];\r\n a10 = a[4];a11 = a[5];a12 = a[6];a13 = a[7];\r\n a20 = a[8];a21 = a[9];a22 = a[10];a23 = a[11];\r\n\r\n // Construct the elements of the rotation matrix\r\n b00 = x * x * t + c;b01 = y * x * t + z * s;b02 = z * x * t - y * s;\r\n b10 = x * y * t - z * s;b11 = y * y * t + c;b12 = z * y * t + x * s;\r\n b20 = x * z * t + y * s;b21 = y * z * t - x * s;b22 = z * z * t + c;\r\n\r\n // Perform rotation-specific matrix multiplication\r\n out[0] = a00 * b00 + a10 * b01 + a20 * b02;\r\n out[1] = a01 * b00 + a11 * b01 + a21 * b02;\r\n out[2] = a02 * b00 + a12 * b01 + a22 * b02;\r\n out[3] = a03 * b00 + a13 * b01 + a23 * b02;\r\n out[4] = a00 * b10 + a10 * b11 + a20 * b12;\r\n out[5] = a01 * b10 + a11 * b11 + a21 * b12;\r\n out[6] = a02 * b10 + a12 * b11 + a22 * b12;\r\n out[7] = a03 * b10 + a13 * b11 + a23 * b12;\r\n out[8] = a00 * b20 + a10 * b21 + a20 * b22;\r\n out[9] = a01 * b20 + a11 * b21 + a21 * b22;\r\n out[10] = a02 * b20 + a12 * b21 + a22 * b22;\r\n out[11] = a03 * b20 + a13 * b21 + a23 * b22;\r\n\r\n if (a !== out) {\r\n // If the source and destination differ, copy the unchanged last row\r\n out[12] = a[12];\r\n out[13] = a[13];\r\n out[14] = a[14];\r\n out[15] = a[15];\r\n }\r\n return out;\r\n}\r\n\r\n/**\r\n * Rotates a matrix by the given angle around the X axis\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {mat4} a the matrix to rotate\r\n * @param {Number} rad the angle to rotate the matrix by\r\n * @returns {mat4} out\r\n */\r\nexport function rotateX(out, a, rad) {\r\n var s = Math.sin(rad);\r\n var c = Math.cos(rad);\r\n var a10 = a[4];\r\n var a11 = a[5];\r\n var a12 = a[6];\r\n var a13 = a[7];\r\n var a20 = a[8];\r\n var a21 = a[9];\r\n var a22 = a[10];\r\n var a23 = a[11];\r\n\r\n if (a !== out) {\r\n // If the source and destination differ, copy the unchanged rows\r\n out[0] = a[0];\r\n out[1] = a[1];\r\n out[2] = a[2];\r\n out[3] = a[3];\r\n out[12] = a[12];\r\n out[13] = a[13];\r\n out[14] = a[14];\r\n out[15] = a[15];\r\n }\r\n\r\n // Perform axis-specific matrix multiplication\r\n out[4] = a10 * c + a20 * s;\r\n out[5] = a11 * c + a21 * s;\r\n out[6] = a12 * c + a22 * s;\r\n out[7] = a13 * c + a23 * s;\r\n out[8] = a20 * c - a10 * s;\r\n out[9] = a21 * c - a11 * s;\r\n out[10] = a22 * c - a12 * s;\r\n out[11] = a23 * c - a13 * s;\r\n return out;\r\n}\r\n\r\n/**\r\n * Rotates a matrix by the given angle around the Y axis\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {mat4} a the matrix to rotate\r\n * @param {Number} rad the angle to rotate the matrix by\r\n * @returns {mat4} out\r\n */\r\nexport function rotateY(out, a, rad) {\r\n var s = Math.sin(rad);\r\n var c = Math.cos(rad);\r\n var a00 = a[0];\r\n var a01 = a[1];\r\n var a02 = a[2];\r\n var a03 = a[3];\r\n var a20 = a[8];\r\n var a21 = a[9];\r\n var a22 = a[10];\r\n var a23 = a[11];\r\n\r\n if (a !== out) {\r\n // If the source and destination differ, copy the unchanged rows\r\n out[4] = a[4];\r\n out[5] = a[5];\r\n out[6] = a[6];\r\n out[7] = a[7];\r\n out[12] = a[12];\r\n out[13] = a[13];\r\n out[14] = a[14];\r\n out[15] = a[15];\r\n }\r\n\r\n // Perform axis-specific matrix multiplication\r\n out[0] = a00 * c - a20 * s;\r\n out[1] = a01 * c - a21 * s;\r\n out[2] = a02 * c - a22 * s;\r\n out[3] = a03 * c - a23 * s;\r\n out[8] = a00 * s + a20 * c;\r\n out[9] = a01 * s + a21 * c;\r\n out[10] = a02 * s + a22 * c;\r\n out[11] = a03 * s + a23 * c;\r\n return out;\r\n}\r\n\r\n/**\r\n * Rotates a matrix by the given angle around the Z axis\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {mat4} a the matrix to rotate\r\n * @param {Number} rad the angle to rotate the matrix by\r\n * @returns {mat4} out\r\n */\r\nexport function rotateZ(out, a, rad) {\r\n var s = Math.sin(rad);\r\n var c = Math.cos(rad);\r\n var a00 = a[0];\r\n var a01 = a[1];\r\n var a02 = a[2];\r\n var a03 = a[3];\r\n var a10 = a[4];\r\n var a11 = a[5];\r\n var a12 = a[6];\r\n var a13 = a[7];\r\n\r\n if (a !== out) {\r\n // If the source and destination differ, copy the unchanged last row\r\n out[8] = a[8];\r\n out[9] = a[9];\r\n out[10] = a[10];\r\n out[11] = a[11];\r\n out[12] = a[12];\r\n out[13] = a[13];\r\n out[14] = a[14];\r\n out[15] = a[15];\r\n }\r\n\r\n // Perform axis-specific matrix multiplication\r\n out[0] = a00 * c + a10 * s;\r\n out[1] = a01 * c + a11 * s;\r\n out[2] = a02 * c + a12 * s;\r\n out[3] = a03 * c + a13 * s;\r\n out[4] = a10 * c - a00 * s;\r\n out[5] = a11 * c - a01 * s;\r\n out[6] = a12 * c - a02 * s;\r\n out[7] = a13 * c - a03 * s;\r\n return out;\r\n}\r\n\r\n/**\r\n * Creates a matrix from a vector translation\r\n * This is equivalent to (but much faster than):\r\n *\r\n * mat4.identity(dest);\r\n * mat4.translate(dest, dest, vec);\r\n *\r\n * @param {mat4} out mat4 receiving operation result\r\n * @param {vec3} v Translation vector\r\n * @returns {mat4} out\r\n */\r\nexport function fromTranslation(out, v) {\r\n out[0] = 1;\r\n out[1] = 0;\r\n out[2] = 0;\r\n out[3] = 0;\r\n out[4] = 0;\r\n out[5] = 1;\r\n out[6] = 0;\r\n out[7] = 0;\r\n out[8] = 0;\r\n out[9] = 0;\r\n out[10] = 1;\r\n out[11] = 0;\r\n out[12] = v[0];\r\n out[13] = v[1];\r\n out[14] = v[2];\r\n out[15] = 1;\r\n return out;\r\n}\r\n\r\n/**\r\n * Creates a matrix from a vector scaling\r\n * This is equivalent to (but much faster than):\r\n *\r\n * mat4.identity(dest);\r\n * mat4.scale(dest, dest, vec);\r\n *\r\n * @param {mat4} out mat4 receiving operation result\r\n * @param {vec3} v Scaling vector\r\n * @returns {mat4} out\r\n */\r\nexport function fromScaling(out, v) {\r\n out[0] = v[0];\r\n out[1] = 0;\r\n out[2] = 0;\r\n out[3] = 0;\r\n out[4] = 0;\r\n out[5] = v[1];\r\n out[6] = 0;\r\n out[7] = 0;\r\n out[8] = 0;\r\n out[9] = 0;\r\n out[10] = v[2];\r\n out[11] = 0;\r\n out[12] = 0;\r\n out[13] = 0;\r\n out[14] = 0;\r\n out[15] = 1;\r\n return out;\r\n}\r\n\r\n/**\r\n * Creates a matrix from a given angle around a given axis\r\n * This is equivalent to (but much faster than):\r\n *\r\n * mat4.identity(dest);\r\n * mat4.rotate(dest, dest, rad, axis);\r\n *\r\n * @param {mat4} out mat4 receiving operation result\r\n * @param {Number} rad the angle to rotate the matrix by\r\n * @param {vec3} axis the axis to rotate around\r\n * @returns {mat4} out\r\n */\r\nexport function fromRotation(out, rad, axis) {\r\n var x = axis[0],\r\n y = axis[1],\r\n z = axis[2];\r\n var len = Math.sqrt(x * x + y * y + z * z);\r\n var s = void 0,\r\n c = void 0,\r\n t = void 0;\r\n\r\n if (len < glMatrix.EPSILON) {\r\n return null;\r\n }\r\n\r\n len = 1 / len;\r\n x *= len;\r\n y *= len;\r\n z *= len;\r\n\r\n s = Math.sin(rad);\r\n c = Math.cos(rad);\r\n t = 1 - c;\r\n\r\n // Perform rotation-specific matrix multiplication\r\n out[0] = x * x * t + c;\r\n out[1] = y * x * t + z * s;\r\n out[2] = z * x * t - y * s;\r\n out[3] = 0;\r\n out[4] = x * y * t - z * s;\r\n out[5] = y * y * t + c;\r\n out[6] = z * y * t + x * s;\r\n out[7] = 0;\r\n out[8] = x * z * t + y * s;\r\n out[9] = y * z * t - x * s;\r\n out[10] = z * z * t + c;\r\n out[11] = 0;\r\n out[12] = 0;\r\n out[13] = 0;\r\n out[14] = 0;\r\n out[15] = 1;\r\n return out;\r\n}\r\n\r\n/**\r\n * Creates a matrix from the given angle around the X axis\r\n * This is equivalent to (but much faster than):\r\n *\r\n * mat4.identity(dest);\r\n * mat4.rotateX(dest, dest, rad);\r\n *\r\n * @param {mat4} out mat4 receiving operation result\r\n * @param {Number} rad the angle to rotate the matrix by\r\n * @returns {mat4} out\r\n */\r\nexport function fromXRotation(out, rad) {\r\n var s = Math.sin(rad);\r\n var c = Math.cos(rad);\r\n\r\n // Perform axis-specific matrix multiplication\r\n out[0] = 1;\r\n out[1] = 0;\r\n out[2] = 0;\r\n out[3] = 0;\r\n out[4] = 0;\r\n out[5] = c;\r\n out[6] = s;\r\n out[7] = 0;\r\n out[8] = 0;\r\n out[9] = -s;\r\n out[10] = c;\r\n out[11] = 0;\r\n out[12] = 0;\r\n out[13] = 0;\r\n out[14] = 0;\r\n out[15] = 1;\r\n return out;\r\n}\r\n\r\n/**\r\n * Creates a matrix from the given angle around the Y axis\r\n * This is equivalent to (but much faster than):\r\n *\r\n * mat4.identity(dest);\r\n * mat4.rotateY(dest, dest, rad);\r\n *\r\n * @param {mat4} out mat4 receiving operation result\r\n * @param {Number} rad the angle to rotate the matrix by\r\n * @returns {mat4} out\r\n */\r\nexport function fromYRotation(out, rad) {\r\n var s = Math.sin(rad);\r\n var c = Math.cos(rad);\r\n\r\n // Perform axis-specific matrix multiplication\r\n out[0] = c;\r\n out[1] = 0;\r\n out[2] = -s;\r\n out[3] = 0;\r\n out[4] = 0;\r\n out[5] = 1;\r\n out[6] = 0;\r\n out[7] = 0;\r\n out[8] = s;\r\n out[9] = 0;\r\n out[10] = c;\r\n out[11] = 0;\r\n out[12] = 0;\r\n out[13] = 0;\r\n out[14] = 0;\r\n out[15] = 1;\r\n return out;\r\n}\r\n\r\n/**\r\n * Creates a matrix from the given angle around the Z axis\r\n * This is equivalent to (but much faster than):\r\n *\r\n * mat4.identity(dest);\r\n * mat4.rotateZ(dest, dest, rad);\r\n *\r\n * @param {mat4} out mat4 receiving operation result\r\n * @param {Number} rad the angle to rotate the matrix by\r\n * @returns {mat4} out\r\n */\r\nexport function fromZRotation(out, rad) {\r\n var s = Math.sin(rad);\r\n var c = Math.cos(rad);\r\n\r\n // Perform axis-specific matrix multiplication\r\n out[0] = c;\r\n out[1] = s;\r\n out[2] = 0;\r\n out[3] = 0;\r\n out[4] = -s;\r\n out[5] = c;\r\n out[6] = 0;\r\n out[7] = 0;\r\n out[8] = 0;\r\n out[9] = 0;\r\n out[10] = 1;\r\n out[11] = 0;\r\n out[12] = 0;\r\n out[13] = 0;\r\n out[14] = 0;\r\n out[15] = 1;\r\n return out;\r\n}\r\n\r\n/**\r\n * Creates a matrix from a quaternion rotation and vector translation\r\n * This is equivalent to (but much faster than):\r\n *\r\n * mat4.identity(dest);\r\n * mat4.translate(dest, vec);\r\n * let quatMat = mat4.create();\r\n * quat4.toMat4(quat, quatMat);\r\n * mat4.multiply(dest, quatMat);\r\n *\r\n * @param {mat4} out mat4 receiving operation result\r\n * @param {quat4} q Rotation quaternion\r\n * @param {vec3} v Translation vector\r\n * @returns {mat4} out\r\n */\r\nexport function fromRotationTranslation(out, q, v) {\r\n // Quaternion math\r\n var x = q[0],\r\n y = q[1],\r\n z = q[2],\r\n w = q[3];\r\n var x2 = x + x;\r\n var y2 = y + y;\r\n var z2 = z + z;\r\n\r\n var xx = x * x2;\r\n var xy = x * y2;\r\n var xz = x * z2;\r\n var yy = y * y2;\r\n var yz = y * z2;\r\n var zz = z * z2;\r\n var wx = w * x2;\r\n var wy = w * y2;\r\n var wz = w * z2;\r\n\r\n out[0] = 1 - (yy + zz);\r\n out[1] = xy + wz;\r\n out[2] = xz - wy;\r\n out[3] = 0;\r\n out[4] = xy - wz;\r\n out[5] = 1 - (xx + zz);\r\n out[6] = yz + wx;\r\n out[7] = 0;\r\n out[8] = xz + wy;\r\n out[9] = yz - wx;\r\n out[10] = 1 - (xx + yy);\r\n out[11] = 0;\r\n out[12] = v[0];\r\n out[13] = v[1];\r\n out[14] = v[2];\r\n out[15] = 1;\r\n\r\n return out;\r\n}\r\n\r\n/**\r\n * Creates a new mat4 from a dual quat.\r\n *\r\n * @param {mat4} out Matrix\r\n * @param {quat2} a Dual Quaternion\r\n * @returns {mat4} mat4 receiving operation result\r\n */\r\nexport function fromQuat2(out, a) {\r\n var translation = new glMatrix.ARRAY_TYPE(3);\r\n var bx = -a[0],\r\n by = -a[1],\r\n bz = -a[2],\r\n bw = a[3],\r\n ax = a[4],\r\n ay = a[5],\r\n az = a[6],\r\n aw = a[7];\r\n\r\n var magnitude = bx * bx + by * by + bz * bz + bw * bw;\r\n //Only scale if it makes sense\r\n if (magnitude > 0) {\r\n translation[0] = (ax * bw + aw * bx + ay * bz - az * by) * 2 / magnitude;\r\n translation[1] = (ay * bw + aw * by + az * bx - ax * bz) * 2 / magnitude;\r\n translation[2] = (az * bw + aw * bz + ax * by - ay * bx) * 2 / magnitude;\r\n } else {\r\n translation[0] = (ax * bw + aw * bx + ay * bz - az * by) * 2;\r\n translation[1] = (ay * bw + aw * by + az * bx - ax * bz) * 2;\r\n translation[2] = (az * bw + aw * bz + ax * by - ay * bx) * 2;\r\n }\r\n fromRotationTranslation(out, a, translation);\r\n return out;\r\n}\r\n\r\n/**\r\n * Returns the translation vector component of a transformation\r\n * matrix. If a matrix is built with fromRotationTranslation,\r\n * the returned vector will be the same as the translation vector\r\n * originally supplied.\r\n * @param {vec3} out Vector to receive translation component\r\n * @param {mat4} mat Matrix to be decomposed (input)\r\n * @return {vec3} out\r\n */\r\nexport function getTranslation(out, mat) {\r\n out[0] = mat[12];\r\n out[1] = mat[13];\r\n out[2] = mat[14];\r\n\r\n return out;\r\n}\r\n\r\n/**\r\n * Returns the scaling factor component of a transformation\r\n * matrix. If a matrix is built with fromRotationTranslationScale\r\n * with a normalized Quaternion paramter, the returned vector will be\r\n * the same as the scaling vector\r\n * originally supplied.\r\n * @param {vec3} out Vector to receive scaling factor component\r\n * @param {mat4} mat Matrix to be decomposed (input)\r\n * @return {vec3} out\r\n */\r\nexport function getScaling(out, mat) {\r\n var m11 = mat[0];\r\n var m12 = mat[1];\r\n var m13 = mat[2];\r\n var m21 = mat[4];\r\n var m22 = mat[5];\r\n var m23 = mat[6];\r\n var m31 = mat[8];\r\n var m32 = mat[9];\r\n var m33 = mat[10];\r\n\r\n out[0] = Math.sqrt(m11 * m11 + m12 * m12 + m13 * m13);\r\n out[1] = Math.sqrt(m21 * m21 + m22 * m22 + m23 * m23);\r\n out[2] = Math.sqrt(m31 * m31 + m32 * m32 + m33 * m33);\r\n\r\n return out;\r\n}\r\n\r\n/**\r\n * Returns a quaternion representing the rotational component\r\n * of a transformation matrix. If a matrix is built with\r\n * fromRotationTranslation, the returned quaternion will be the\r\n * same as the quaternion originally supplied.\r\n * @param {quat} out Quaternion to receive the rotation component\r\n * @param {mat4} mat Matrix to be decomposed (input)\r\n * @return {quat} out\r\n */\r\nexport function getRotation(out, mat) {\r\n // Algorithm taken from http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToQuaternion/index.htm\r\n var trace = mat[0] + mat[5] + mat[10];\r\n var S = 0;\r\n\r\n if (trace > 0) {\r\n S = Math.sqrt(trace + 1.0) * 2;\r\n out[3] = 0.25 * S;\r\n out[0] = (mat[6] - mat[9]) / S;\r\n out[1] = (mat[8] - mat[2]) / S;\r\n out[2] = (mat[1] - mat[4]) / S;\r\n } else if (mat[0] > mat[5] && mat[0] > mat[10]) {\r\n S = Math.sqrt(1.0 + mat[0] - mat[5] - mat[10]) * 2;\r\n out[3] = (mat[6] - mat[9]) / S;\r\n out[0] = 0.25 * S;\r\n out[1] = (mat[1] + mat[4]) / S;\r\n out[2] = (mat[8] + mat[2]) / S;\r\n } else if (mat[5] > mat[10]) {\r\n S = Math.sqrt(1.0 + mat[5] - mat[0] - mat[10]) * 2;\r\n out[3] = (mat[8] - mat[2]) / S;\r\n out[0] = (mat[1] + mat[4]) / S;\r\n out[1] = 0.25 * S;\r\n out[2] = (mat[6] + mat[9]) / S;\r\n } else {\r\n S = Math.sqrt(1.0 + mat[10] - mat[0] - mat[5]) * 2;\r\n out[3] = (mat[1] - mat[4]) / S;\r\n out[0] = (mat[8] + mat[2]) / S;\r\n out[1] = (mat[6] + mat[9]) / S;\r\n out[2] = 0.25 * S;\r\n }\r\n\r\n return out;\r\n}\r\n\r\n/**\r\n * Creates a matrix from a quaternion rotation, vector translation and vector scale\r\n * This is equivalent to (but much faster than):\r\n *\r\n * mat4.identity(dest);\r\n * mat4.translate(dest, vec);\r\n * let quatMat = mat4.create();\r\n * quat4.toMat4(quat, quatMat);\r\n * mat4.multiply(dest, quatMat);\r\n * mat4.scale(dest, scale)\r\n *\r\n * @param {mat4} out mat4 receiving operation result\r\n * @param {quat4} q Rotation quaternion\r\n * @param {vec3} v Translation vector\r\n * @param {vec3} s Scaling vector\r\n * @returns {mat4} out\r\n */\r\nexport function fromRotationTranslationScale(out, q, v, s) {\r\n // Quaternion math\r\n var x = q[0],\r\n y = q[1],\r\n z = q[2],\r\n w = q[3];\r\n var x2 = x + x;\r\n var y2 = y + y;\r\n var z2 = z + z;\r\n\r\n var xx = x * x2;\r\n var xy = x * y2;\r\n var xz = x * z2;\r\n var yy = y * y2;\r\n var yz = y * z2;\r\n var zz = z * z2;\r\n var wx = w * x2;\r\n var wy = w * y2;\r\n var wz = w * z2;\r\n var sx = s[0];\r\n var sy = s[1];\r\n var sz = s[2];\r\n\r\n out[0] = (1 - (yy + zz)) * sx;\r\n out[1] = (xy + wz) * sx;\r\n out[2] = (xz - wy) * sx;\r\n out[3] = 0;\r\n out[4] = (xy - wz) * sy;\r\n out[5] = (1 - (xx + zz)) * sy;\r\n out[6] = (yz + wx) * sy;\r\n out[7] = 0;\r\n out[8] = (xz + wy) * sz;\r\n out[9] = (yz - wx) * sz;\r\n out[10] = (1 - (xx + yy)) * sz;\r\n out[11] = 0;\r\n out[12] = v[0];\r\n out[13] = v[1];\r\n out[14] = v[2];\r\n out[15] = 1;\r\n\r\n return out;\r\n}\r\n\r\n/**\r\n * Creates a matrix from a quaternion rotation, vector translation and vector scale, rotating and scaling around the given origin\r\n * This is equivalent to (but much faster than):\r\n *\r\n * mat4.identity(dest);\r\n * mat4.translate(dest, vec);\r\n * mat4.translate(dest, origin);\r\n * let quatMat = mat4.create();\r\n * quat4.toMat4(quat, quatMat);\r\n * mat4.multiply(dest, quatMat);\r\n * mat4.scale(dest, scale)\r\n * mat4.translate(dest, negativeOrigin);\r\n *\r\n * @param {mat4} out mat4 receiving operation result\r\n * @param {quat4} q Rotation quaternion\r\n * @param {vec3} v Translation vector\r\n * @param {vec3} s Scaling vector\r\n * @param {vec3} o The origin vector around which to scale and rotate\r\n * @returns {mat4} out\r\n */\r\nexport function fromRotationTranslationScaleOrigin(out, q, v, s, o) {\r\n // Quaternion math\r\n var x = q[0],\r\n y = q[1],\r\n z = q[2],\r\n w = q[3];\r\n var x2 = x + x;\r\n var y2 = y + y;\r\n var z2 = z + z;\r\n\r\n var xx = x * x2;\r\n var xy = x * y2;\r\n var xz = x * z2;\r\n var yy = y * y2;\r\n var yz = y * z2;\r\n var zz = z * z2;\r\n var wx = w * x2;\r\n var wy = w * y2;\r\n var wz = w * z2;\r\n\r\n var sx = s[0];\r\n var sy = s[1];\r\n var sz = s[2];\r\n\r\n var ox = o[0];\r\n var oy = o[1];\r\n var oz = o[2];\r\n\r\n var out0 = (1 - (yy + zz)) * sx;\r\n var out1 = (xy + wz) * sx;\r\n var out2 = (xz - wy) * sx;\r\n var out4 = (xy - wz) * sy;\r\n var out5 = (1 - (xx + zz)) * sy;\r\n var out6 = (yz + wx) * sy;\r\n var out8 = (xz + wy) * sz;\r\n var out9 = (yz - wx) * sz;\r\n var out10 = (1 - (xx + yy)) * sz;\r\n\r\n out[0] = out0;\r\n out[1] = out1;\r\n out[2] = out2;\r\n out[3] = 0;\r\n out[4] = out4;\r\n out[5] = out5;\r\n out[6] = out6;\r\n out[7] = 0;\r\n out[8] = out8;\r\n out[9] = out9;\r\n out[10] = out10;\r\n out[11] = 0;\r\n out[12] = v[0] + ox - (out0 * ox + out4 * oy + out8 * oz);\r\n out[13] = v[1] + oy - (out1 * ox + out5 * oy + out9 * oz);\r\n out[14] = v[2] + oz - (out2 * ox + out6 * oy + out10 * oz);\r\n out[15] = 1;\r\n\r\n return out;\r\n}\r\n\r\n/**\r\n * Calculates a 4x4 matrix from the given quaternion\r\n *\r\n * @param {mat4} out mat4 receiving operation result\r\n * @param {quat} q Quaternion to create matrix from\r\n *\r\n * @returns {mat4} out\r\n */\r\nexport function fromQuat(out, q) {\r\n var x = q[0],\r\n y = q[1],\r\n z = q[2],\r\n w = q[3];\r\n var x2 = x + x;\r\n var y2 = y + y;\r\n var z2 = z + z;\r\n\r\n var xx = x * x2;\r\n var yx = y * x2;\r\n var yy = y * y2;\r\n var zx = z * x2;\r\n var zy = z * y2;\r\n var zz = z * z2;\r\n var wx = w * x2;\r\n var wy = w * y2;\r\n var wz = w * z2;\r\n\r\n out[0] = 1 - yy - zz;\r\n out[1] = yx + wz;\r\n out[2] = zx - wy;\r\n out[3] = 0;\r\n\r\n out[4] = yx - wz;\r\n out[5] = 1 - xx - zz;\r\n out[6] = zy + wx;\r\n out[7] = 0;\r\n\r\n out[8] = zx + wy;\r\n out[9] = zy - wx;\r\n out[10] = 1 - xx - yy;\r\n out[11] = 0;\r\n\r\n out[12] = 0;\r\n out[13] = 0;\r\n out[14] = 0;\r\n out[15] = 1;\r\n\r\n return out;\r\n}\r\n\r\n/**\r\n * Generates a frustum matrix with the given bounds\r\n *\r\n * @param {mat4} out mat4 frustum matrix will be written into\r\n * @param {Number} left Left bound of the frustum\r\n * @param {Number} right Right bound of the frustum\r\n * @param {Number} bottom Bottom bound of the frustum\r\n * @param {Number} top Top bound of the frustum\r\n * @param {Number} near Near bound of the frustum\r\n * @param {Number} far Far bound of the frustum\r\n * @returns {mat4} out\r\n */\r\nexport function frustum(out, left, right, bottom, top, near, far) {\r\n var rl = 1 / (right - left);\r\n var tb = 1 / (top - bottom);\r\n var nf = 1 / (near - far);\r\n out[0] = near * 2 * rl;\r\n out[1] = 0;\r\n out[2] = 0;\r\n out[3] = 0;\r\n out[4] = 0;\r\n out[5] = near * 2 * tb;\r\n out[6] = 0;\r\n out[7] = 0;\r\n out[8] = (right + left) * rl;\r\n out[9] = (top + bottom) * tb;\r\n out[10] = (far + near) * nf;\r\n out[11] = -1;\r\n out[12] = 0;\r\n out[13] = 0;\r\n out[14] = far * near * 2 * nf;\r\n out[15] = 0;\r\n return out;\r\n}\r\n\r\n/**\r\n * Generates a perspective projection matrix with the given bounds.\r\n * Passing null/undefined/no value for far will generate infinite projection matrix.\r\n *\r\n * @param {mat4} out mat4 frustum matrix will be written into\r\n * @param {number} fovy Vertical field of view in radians\r\n * @param {number} aspect Aspect ratio. typically viewport width/height\r\n * @param {number} near Near bound of the frustum\r\n * @param {number} far Far bound of the frustum, can be null or Infinity\r\n * @returns {mat4} out\r\n */\r\nexport function perspective(out, fovy, aspect, near, far) {\r\n var f = 1.0 / Math.tan(fovy / 2),\r\n nf = void 0;\r\n out[0] = f / aspect;\r\n out[1] = 0;\r\n out[2] = 0;\r\n out[3] = 0;\r\n out[4] = 0;\r\n out[5] = f;\r\n out[6] = 0;\r\n out[7] = 0;\r\n out[8] = 0;\r\n out[9] = 0;\r\n out[11] = -1;\r\n out[12] = 0;\r\n out[13] = 0;\r\n out[15] = 0;\r\n if (far != null && far !== Infinity) {\r\n nf = 1 / (near - far);\r\n out[10] = (far + near) * nf;\r\n out[14] = 2 * far * near * nf;\r\n } else {\r\n out[10] = -1;\r\n out[14] = -2 * near;\r\n }\r\n return out;\r\n}\r\n\r\n/**\r\n * Generates a perspective projection matrix with the given field of view.\r\n * This is primarily useful for generating projection matrices to be used\r\n * with the still experiemental WebVR API.\r\n *\r\n * @param {mat4} out mat4 frustum matrix will be written into\r\n * @param {Object} fov Object containing the following values: upDegrees, downDegrees, leftDegrees, rightDegrees\r\n * @param {number} near Near bound of the frustum\r\n * @param {number} far Far bound of the frustum\r\n * @returns {mat4} out\r\n */\r\nexport function perspectiveFromFieldOfView(out, fov, near, far) {\r\n var upTan = Math.tan(fov.upDegrees * Math.PI / 180.0);\r\n var downTan = Math.tan(fov.downDegrees * Math.PI / 180.0);\r\n var leftTan = Math.tan(fov.leftDegrees * Math.PI / 180.0);\r\n var rightTan = Math.tan(fov.rightDegrees * Math.PI / 180.0);\r\n var xScale = 2.0 / (leftTan + rightTan);\r\n var yScale = 2.0 / (upTan + downTan);\r\n\r\n out[0] = xScale;\r\n out[1] = 0.0;\r\n out[2] = 0.0;\r\n out[3] = 0.0;\r\n out[4] = 0.0;\r\n out[5] = yScale;\r\n out[6] = 0.0;\r\n out[7] = 0.0;\r\n out[8] = -((leftTan - rightTan) * xScale * 0.5);\r\n out[9] = (upTan - downTan) * yScale * 0.5;\r\n out[10] = far / (near - far);\r\n out[11] = -1.0;\r\n out[12] = 0.0;\r\n out[13] = 0.0;\r\n out[14] = far * near / (near - far);\r\n out[15] = 0.0;\r\n return out;\r\n}\r\n\r\n/**\r\n * Generates a orthogonal projection matrix with the given bounds\r\n *\r\n * @param {mat4} out mat4 frustum matrix will be written into\r\n * @param {number} left Left bound of the frustum\r\n * @param {number} right Right bound of the frustum\r\n * @param {number} bottom Bottom bound of the frustum\r\n * @param {number} top Top bound of the frustum\r\n * @param {number} near Near bound of the frustum\r\n * @param {number} far Far bound of the frustum\r\n * @returns {mat4} out\r\n */\r\nexport function ortho(out, left, right, bottom, top, near, far) {\r\n var lr = 1 / (left - right);\r\n var bt = 1 / (bottom - top);\r\n var nf = 1 / (near - far);\r\n out[0] = -2 * lr;\r\n out[1] = 0;\r\n out[2] = 0;\r\n out[3] = 0;\r\n out[4] = 0;\r\n out[5] = -2 * bt;\r\n out[6] = 0;\r\n out[7] = 0;\r\n out[8] = 0;\r\n out[9] = 0;\r\n out[10] = 2 * nf;\r\n out[11] = 0;\r\n out[12] = (left + right) * lr;\r\n out[13] = (top + bottom) * bt;\r\n out[14] = (far + near) * nf;\r\n out[15] = 1;\r\n return out;\r\n}\r\n\r\n/**\r\n * Generates a look-at matrix with the given eye position, focal point, and up axis.\r\n * If you want a matrix that actually makes an object look at another object, you should use targetTo instead.\r\n *\r\n * @param {mat4} out mat4 frustum matrix will be written into\r\n * @param {vec3} eye Position of the viewer\r\n * @param {vec3} center Point the viewer is looking at\r\n * @param {vec3} up vec3 pointing up\r\n * @returns {mat4} out\r\n */\r\nexport function lookAt(out, eye, center, up) {\r\n var x0 = void 0,\r\n x1 = void 0,\r\n x2 = void 0,\r\n y0 = void 0,\r\n y1 = void 0,\r\n y2 = void 0,\r\n z0 = void 0,\r\n z1 = void 0,\r\n z2 = void 0,\r\n len = void 0;\r\n var eyex = eye[0];\r\n var eyey = eye[1];\r\n var eyez = eye[2];\r\n var upx = up[0];\r\n var upy = up[1];\r\n var upz = up[2];\r\n var centerx = center[0];\r\n var centery = center[1];\r\n var centerz = center[2];\r\n\r\n if (Math.abs(eyex - centerx) < glMatrix.EPSILON && Math.abs(eyey - centery) < glMatrix.EPSILON && Math.abs(eyez - centerz) < glMatrix.EPSILON) {\r\n return identity(out);\r\n }\r\n\r\n z0 = eyex - centerx;\r\n z1 = eyey - centery;\r\n z2 = eyez - centerz;\r\n\r\n len = 1 / Math.sqrt(z0 * z0 + z1 * z1 + z2 * z2);\r\n z0 *= len;\r\n z1 *= len;\r\n z2 *= len;\r\n\r\n x0 = upy * z2 - upz * z1;\r\n x1 = upz * z0 - upx * z2;\r\n x2 = upx * z1 - upy * z0;\r\n len = Math.sqrt(x0 * x0 + x1 * x1 + x2 * x2);\r\n if (!len) {\r\n x0 = 0;\r\n x1 = 0;\r\n x2 = 0;\r\n } else {\r\n len = 1 / len;\r\n x0 *= len;\r\n x1 *= len;\r\n x2 *= len;\r\n }\r\n\r\n y0 = z1 * x2 - z2 * x1;\r\n y1 = z2 * x0 - z0 * x2;\r\n y2 = z0 * x1 - z1 * x0;\r\n\r\n len = Math.sqrt(y0 * y0 + y1 * y1 + y2 * y2);\r\n if (!len) {\r\n y0 = 0;\r\n y1 = 0;\r\n y2 = 0;\r\n } else {\r\n len = 1 / len;\r\n y0 *= len;\r\n y1 *= len;\r\n y2 *= len;\r\n }\r\n\r\n out[0] = x0;\r\n out[1] = y0;\r\n out[2] = z0;\r\n out[3] = 0;\r\n out[4] = x1;\r\n out[5] = y1;\r\n out[6] = z1;\r\n out[7] = 0;\r\n out[8] = x2;\r\n out[9] = y2;\r\n out[10] = z2;\r\n out[11] = 0;\r\n out[12] = -(x0 * eyex + x1 * eyey + x2 * eyez);\r\n out[13] = -(y0 * eyex + y1 * eyey + y2 * eyez);\r\n out[14] = -(z0 * eyex + z1 * eyey + z2 * eyez);\r\n out[15] = 1;\r\n\r\n return out;\r\n}\r\n\r\n/**\r\n * Generates a matrix that makes something look at something else.\r\n *\r\n * @param {mat4} out mat4 frustum matrix will be written into\r\n * @param {vec3} eye Position of the viewer\r\n * @param {vec3} center Point the viewer is looking at\r\n * @param {vec3} up vec3 pointing up\r\n * @returns {mat4} out\r\n */\r\nexport function targetTo(out, eye, target, up) {\r\n var eyex = eye[0],\r\n eyey = eye[1],\r\n eyez = eye[2],\r\n upx = up[0],\r\n upy = up[1],\r\n upz = up[2];\r\n\r\n var z0 = eyex - target[0],\r\n z1 = eyey - target[1],\r\n z2 = eyez - target[2];\r\n\r\n var len = z0 * z0 + z1 * z1 + z2 * z2;\r\n if (len > 0) {\r\n len = 1 / Math.sqrt(len);\r\n z0 *= len;\r\n z1 *= len;\r\n z2 *= len;\r\n }\r\n\r\n var x0 = upy * z2 - upz * z1,\r\n x1 = upz * z0 - upx * z2,\r\n x2 = upx * z1 - upy * z0;\r\n\r\n len = x0 * x0 + x1 * x1 + x2 * x2;\r\n if (len > 0) {\r\n len = 1 / Math.sqrt(len);\r\n x0 *= len;\r\n x1 *= len;\r\n x2 *= len;\r\n }\r\n\r\n out[0] = x0;\r\n out[1] = x1;\r\n out[2] = x2;\r\n out[3] = 0;\r\n out[4] = z1 * x2 - z2 * x1;\r\n out[5] = z2 * x0 - z0 * x2;\r\n out[6] = z0 * x1 - z1 * x0;\r\n out[7] = 0;\r\n out[8] = z0;\r\n out[9] = z1;\r\n out[10] = z2;\r\n out[11] = 0;\r\n out[12] = eyex;\r\n out[13] = eyey;\r\n out[14] = eyez;\r\n out[15] = 1;\r\n return out;\r\n};\r\n\r\n/**\r\n * Returns a string representation of a mat4\r\n *\r\n * @param {mat4} a matrix to represent as a string\r\n * @returns {String} string representation of the matrix\r\n */\r\nexport function str(a) {\r\n return 'mat4(' + a[0] + ', ' + a[1] + ', ' + a[2] + ', ' + a[3] + ', ' + a[4] + ', ' + a[5] + ', ' + a[6] + ', ' + a[7] + ', ' + a[8] + ', ' + a[9] + ', ' + a[10] + ', ' + a[11] + ', ' + a[12] + ', ' + a[13] + ', ' + a[14] + ', ' + a[15] + ')';\r\n}\r\n\r\n/**\r\n * Returns Frobenius norm of a mat4\r\n *\r\n * @param {mat4} a the matrix to calculate Frobenius norm of\r\n * @returns {Number} Frobenius norm\r\n */\r\nexport function frob(a) {\r\n return Math.sqrt(Math.pow(a[0], 2) + Math.pow(a[1], 2) + Math.pow(a[2], 2) + Math.pow(a[3], 2) + Math.pow(a[4], 2) + Math.pow(a[5], 2) + Math.pow(a[6], 2) + Math.pow(a[7], 2) + Math.pow(a[8], 2) + Math.pow(a[9], 2) + Math.pow(a[10], 2) + Math.pow(a[11], 2) + Math.pow(a[12], 2) + Math.pow(a[13], 2) + Math.pow(a[14], 2) + Math.pow(a[15], 2));\r\n}\r\n\r\n/**\r\n * Adds two mat4's\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {mat4} a the first operand\r\n * @param {mat4} b the second operand\r\n * @returns {mat4} out\r\n */\r\nexport function add(out, a, b) {\r\n out[0] = a[0] + b[0];\r\n out[1] = a[1] + b[1];\r\n out[2] = a[2] + b[2];\r\n out[3] = a[3] + b[3];\r\n out[4] = a[4] + b[4];\r\n out[5] = a[5] + b[5];\r\n out[6] = a[6] + b[6];\r\n out[7] = a[7] + b[7];\r\n out[8] = a[8] + b[8];\r\n out[9] = a[9] + b[9];\r\n out[10] = a[10] + b[10];\r\n out[11] = a[11] + b[11];\r\n out[12] = a[12] + b[12];\r\n out[13] = a[13] + b[13];\r\n out[14] = a[14] + b[14];\r\n out[15] = a[15] + b[15];\r\n return out;\r\n}\r\n\r\n/**\r\n * Subtracts matrix b from matrix a\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {mat4} a the first operand\r\n * @param {mat4} b the second operand\r\n * @returns {mat4} out\r\n */\r\nexport function subtract(out, a, b) {\r\n out[0] = a[0] - b[0];\r\n out[1] = a[1] - b[1];\r\n out[2] = a[2] - b[2];\r\n out[3] = a[3] - b[3];\r\n out[4] = a[4] - b[4];\r\n out[5] = a[5] - b[5];\r\n out[6] = a[6] - b[6];\r\n out[7] = a[7] - b[7];\r\n out[8] = a[8] - b[8];\r\n out[9] = a[9] - b[9];\r\n out[10] = a[10] - b[10];\r\n out[11] = a[11] - b[11];\r\n out[12] = a[12] - b[12];\r\n out[13] = a[13] - b[13];\r\n out[14] = a[14] - b[14];\r\n out[15] = a[15] - b[15];\r\n return out;\r\n}\r\n\r\n/**\r\n * Multiply each element of the matrix by a scalar.\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {mat4} a the matrix to scale\r\n * @param {Number} b amount to scale the matrix's elements by\r\n * @returns {mat4} out\r\n */\r\nexport function multiplyScalar(out, a, b) {\r\n out[0] = a[0] * b;\r\n out[1] = a[1] * b;\r\n out[2] = a[2] * b;\r\n out[3] = a[3] * b;\r\n out[4] = a[4] * b;\r\n out[5] = a[5] * b;\r\n out[6] = a[6] * b;\r\n out[7] = a[7] * b;\r\n out[8] = a[8] * b;\r\n out[9] = a[9] * b;\r\n out[10] = a[10] * b;\r\n out[11] = a[11] * b;\r\n out[12] = a[12] * b;\r\n out[13] = a[13] * b;\r\n out[14] = a[14] * b;\r\n out[15] = a[15] * b;\r\n return out;\r\n}\r\n\r\n/**\r\n * Adds two mat4's after multiplying each element of the second operand by a scalar value.\r\n *\r\n * @param {mat4} out the receiving vector\r\n * @param {mat4} a the first operand\r\n * @param {mat4} b the second operand\r\n * @param {Number} scale the amount to scale b's elements by before adding\r\n * @returns {mat4} out\r\n */\r\nexport function multiplyScalarAndAdd(out, a, b, scale) {\r\n out[0] = a[0] + b[0] * scale;\r\n out[1] = a[1] + b[1] * scale;\r\n out[2] = a[2] + b[2] * scale;\r\n out[3] = a[3] + b[3] * scale;\r\n out[4] = a[4] + b[4] * scale;\r\n out[5] = a[5] + b[5] * scale;\r\n out[6] = a[6] + b[6] * scale;\r\n out[7] = a[7] + b[7] * scale;\r\n out[8] = a[8] + b[8] * scale;\r\n out[9] = a[9] + b[9] * scale;\r\n out[10] = a[10] + b[10] * scale;\r\n out[11] = a[11] + b[11] * scale;\r\n out[12] = a[12] + b[12] * scale;\r\n out[13] = a[13] + b[13] * scale;\r\n out[14] = a[14] + b[14] * scale;\r\n out[15] = a[15] + b[15] * scale;\r\n return out;\r\n}\r\n\r\n/**\r\n * Returns whether or not the matrices have exactly the same elements in the same position (when compared with ===)\r\n *\r\n * @param {mat4} a The first matrix.\r\n * @param {mat4} b The second matrix.\r\n * @returns {Boolean} True if the matrices are equal, false otherwise.\r\n */\r\nexport function exactEquals(a, b) {\r\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3] && a[4] === b[4] && a[5] === b[5] && a[6] === b[6] && a[7] === b[7] && a[8] === b[8] && a[9] === b[9] && a[10] === b[10] && a[11] === b[11] && a[12] === b[12] && a[13] === b[13] && a[14] === b[14] && a[15] === b[15];\r\n}\r\n\r\n/**\r\n * Returns whether or not the matrices have approximately the same elements in the same position.\r\n *\r\n * @param {mat4} a The first matrix.\r\n * @param {mat4} b The second matrix.\r\n * @returns {Boolean} True if the matrices are equal, false otherwise.\r\n */\r\nexport function equals(a, b) {\r\n var a0 = a[0],\r\n a1 = a[1],\r\n a2 = a[2],\r\n a3 = a[3];\r\n var a4 = a[4],\r\n a5 = a[5],\r\n a6 = a[6],\r\n a7 = a[7];\r\n var a8 = a[8],\r\n a9 = a[9],\r\n a10 = a[10],\r\n a11 = a[11];\r\n var a12 = a[12],\r\n a13 = a[13],\r\n a14 = a[14],\r\n a15 = a[15];\r\n\r\n var b0 = b[0],\r\n b1 = b[1],\r\n b2 = b[2],\r\n b3 = b[3];\r\n var b4 = b[4],\r\n b5 = b[5],\r\n b6 = b[6],\r\n b7 = b[7];\r\n var b8 = b[8],\r\n b9 = b[9],\r\n b10 = b[10],\r\n b11 = b[11];\r\n var b12 = b[12],\r\n b13 = b[13],\r\n b14 = b[14],\r\n b15 = b[15];\r\n\r\n return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)) && Math.abs(a3 - b3) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a3), Math.abs(b3)) && Math.abs(a4 - b4) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a4), Math.abs(b4)) && Math.abs(a5 - b5) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a5), Math.abs(b5)) && Math.abs(a6 - b6) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a6), Math.abs(b6)) && Math.abs(a7 - b7) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a7), Math.abs(b7)) && Math.abs(a8 - b8) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a8), Math.abs(b8)) && Math.abs(a9 - b9) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a9), Math.abs(b9)) && Math.abs(a10 - b10) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a10), Math.abs(b10)) && Math.abs(a11 - b11) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a11), Math.abs(b11)) && Math.abs(a12 - b12) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a12), Math.abs(b12)) && Math.abs(a13 - b13) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a13), Math.abs(b13)) && Math.abs(a14 - b14) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a14), Math.abs(b14)) && Math.abs(a15 - b15) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a15), Math.abs(b15));\r\n}\r\n\r\n/**\r\n * Alias for {@link mat4.multiply}\r\n * @function\r\n */\r\nexport var mul = multiply;\r\n\r\n/**\r\n * Alias for {@link mat4.subtract}\r\n * @function\r\n */\r\nexport var sub = subtract;","import * as glMatrix from \"./common.js\";\r\nimport * as mat3 from \"./mat3.js\";\r\nimport * as vec3 from \"./vec3.js\";\r\nimport * as vec4 from \"./vec4.js\";\r\n\r\n/**\r\n * Quaternion\r\n * @module quat\r\n */\r\n\r\n/**\r\n * Creates a new identity quat\r\n *\r\n * @returns {quat} a new quaternion\r\n */\r\nexport function create() {\r\n var out = new glMatrix.ARRAY_TYPE(4);\r\n if (glMatrix.ARRAY_TYPE != Float32Array) {\r\n out[0] = 0;\r\n out[1] = 0;\r\n out[2] = 0;\r\n }\r\n out[3] = 1;\r\n return out;\r\n}\r\n\r\n/**\r\n * Set a quat to the identity quaternion\r\n *\r\n * @param {quat} out the receiving quaternion\r\n * @returns {quat} out\r\n */\r\nexport function identity(out) {\r\n out[0] = 0;\r\n out[1] = 0;\r\n out[2] = 0;\r\n out[3] = 1;\r\n return out;\r\n}\r\n\r\n/**\r\n * Sets a quat from the given angle and rotation axis,\r\n * then returns it.\r\n *\r\n * @param {quat} out the receiving quaternion\r\n * @param {vec3} axis the axis around which to rotate\r\n * @param {Number} rad the angle in radians\r\n * @returns {quat} out\r\n **/\r\nexport function setAxisAngle(out, axis, rad) {\r\n rad = rad * 0.5;\r\n var s = Math.sin(rad);\r\n out[0] = s * axis[0];\r\n out[1] = s * axis[1];\r\n out[2] = s * axis[2];\r\n out[3] = Math.cos(rad);\r\n return out;\r\n}\r\n\r\n/**\r\n * Gets the rotation axis and angle for a given\r\n * quaternion. If a quaternion is created with\r\n * setAxisAngle, this method will return the same\r\n * values as providied in the original parameter list\r\n * OR functionally equivalent values.\r\n * Example: The quaternion formed by axis [0, 0, 1] and\r\n * angle -90 is the same as the quaternion formed by\r\n * [0, 0, 1] and 270. This method favors the latter.\r\n * @param {vec3} out_axis Vector receiving the axis of rotation\r\n * @param {quat} q Quaternion to be decomposed\r\n * @return {Number} Angle, in radians, of the rotation\r\n */\r\nexport function getAxisAngle(out_axis, q) {\r\n var rad = Math.acos(q[3]) * 2.0;\r\n var s = Math.sin(rad / 2.0);\r\n if (s > glMatrix.EPSILON) {\r\n out_axis[0] = q[0] / s;\r\n out_axis[1] = q[1] / s;\r\n out_axis[2] = q[2] / s;\r\n } else {\r\n // If s is zero, return any axis (no rotation - axis does not matter)\r\n out_axis[0] = 1;\r\n out_axis[1] = 0;\r\n out_axis[2] = 0;\r\n }\r\n return rad;\r\n}\r\n\r\n/**\r\n * Multiplies two quat's\r\n *\r\n * @param {quat} out the receiving quaternion\r\n * @param {quat} a the first operand\r\n * @param {quat} b the second operand\r\n * @returns {quat} out\r\n */\r\nexport function multiply(out, a, b) {\r\n var ax = a[0],\r\n ay = a[1],\r\n az = a[2],\r\n aw = a[3];\r\n var bx = b[0],\r\n by = b[1],\r\n bz = b[2],\r\n bw = b[3];\r\n\r\n out[0] = ax * bw + aw * bx + ay * bz - az * by;\r\n out[1] = ay * bw + aw * by + az * bx - ax * bz;\r\n out[2] = az * bw + aw * bz + ax * by - ay * bx;\r\n out[3] = aw * bw - ax * bx - ay * by - az * bz;\r\n return out;\r\n}\r\n\r\n/**\r\n * Rotates a quaternion by the given angle about the X axis\r\n *\r\n * @param {quat} out quat receiving operation result\r\n * @param {quat} a quat to rotate\r\n * @param {number} rad angle (in radians) to rotate\r\n * @returns {quat} out\r\n */\r\nexport function rotateX(out, a, rad) {\r\n rad *= 0.5;\r\n\r\n var ax = a[0],\r\n ay = a[1],\r\n az = a[2],\r\n aw = a[3];\r\n var bx = Math.sin(rad),\r\n bw = Math.cos(rad);\r\n\r\n out[0] = ax * bw + aw * bx;\r\n out[1] = ay * bw + az * bx;\r\n out[2] = az * bw - ay * bx;\r\n out[3] = aw * bw - ax * bx;\r\n return out;\r\n}\r\n\r\n/**\r\n * Rotates a quaternion by the given angle about the Y axis\r\n *\r\n * @param {quat} out quat receiving operation result\r\n * @param {quat} a quat to rotate\r\n * @param {number} rad angle (in radians) to rotate\r\n * @returns {quat} out\r\n */\r\nexport function rotateY(out, a, rad) {\r\n rad *= 0.5;\r\n\r\n var ax = a[0],\r\n ay = a[1],\r\n az = a[2],\r\n aw = a[3];\r\n var by = Math.sin(rad),\r\n bw = Math.cos(rad);\r\n\r\n out[0] = ax * bw - az * by;\r\n out[1] = ay * bw + aw * by;\r\n out[2] = az * bw + ax * by;\r\n out[3] = aw * bw - ay * by;\r\n return out;\r\n}\r\n\r\n/**\r\n * Rotates a quaternion by the given angle about the Z axis\r\n *\r\n * @param {quat} out quat receiving operation result\r\n * @param {quat} a quat to rotate\r\n * @param {number} rad angle (in radians) to rotate\r\n * @returns {quat} out\r\n */\r\nexport function rotateZ(out, a, rad) {\r\n rad *= 0.5;\r\n\r\n var ax = a[0],\r\n ay = a[1],\r\n az = a[2],\r\n aw = a[3];\r\n var bz = Math.sin(rad),\r\n bw = Math.cos(rad);\r\n\r\n out[0] = ax * bw + ay * bz;\r\n out[1] = ay * bw - ax * bz;\r\n out[2] = az * bw + aw * bz;\r\n out[3] = aw * bw - az * bz;\r\n return out;\r\n}\r\n\r\n/**\r\n * Calculates the W component of a quat from the X, Y, and Z components.\r\n * Assumes that quaternion is 1 unit in length.\r\n * Any existing W component will be ignored.\r\n *\r\n * @param {quat} out the receiving quaternion\r\n * @param {quat} a quat to calculate W component of\r\n * @returns {quat} out\r\n */\r\nexport function calculateW(out, a) {\r\n var x = a[0],\r\n y = a[1],\r\n z = a[2];\r\n\r\n out[0] = x;\r\n out[1] = y;\r\n out[2] = z;\r\n out[3] = Math.sqrt(Math.abs(1.0 - x * x - y * y - z * z));\r\n return out;\r\n}\r\n\r\n/**\r\n * Performs a spherical linear interpolation between two quat\r\n *\r\n * @param {quat} out the receiving quaternion\r\n * @param {quat} a the first operand\r\n * @param {quat} b the second operand\r\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\r\n * @returns {quat} out\r\n */\r\nexport function slerp(out, a, b, t) {\r\n // benchmarks:\r\n // http://jsperf.com/quaternion-slerp-implementations\r\n var ax = a[0],\r\n ay = a[1],\r\n az = a[2],\r\n aw = a[3];\r\n var bx = b[0],\r\n by = b[1],\r\n bz = b[2],\r\n bw = b[3];\r\n\r\n var omega = void 0,\r\n cosom = void 0,\r\n sinom = void 0,\r\n scale0 = void 0,\r\n scale1 = void 0;\r\n\r\n // calc cosine\r\n cosom = ax * bx + ay * by + az * bz + aw * bw;\r\n // adjust signs (if necessary)\r\n if (cosom < 0.0) {\r\n cosom = -cosom;\r\n bx = -bx;\r\n by = -by;\r\n bz = -bz;\r\n bw = -bw;\r\n }\r\n // calculate coefficients\r\n if (1.0 - cosom > glMatrix.EPSILON) {\r\n // standard case (slerp)\r\n omega = Math.acos(cosom);\r\n sinom = Math.sin(omega);\r\n scale0 = Math.sin((1.0 - t) * omega) / sinom;\r\n scale1 = Math.sin(t * omega) / sinom;\r\n } else {\r\n // \"from\" and \"to\" quaternions are very close\r\n // ... so we can do a linear interpolation\r\n scale0 = 1.0 - t;\r\n scale1 = t;\r\n }\r\n // calculate final values\r\n out[0] = scale0 * ax + scale1 * bx;\r\n out[1] = scale0 * ay + scale1 * by;\r\n out[2] = scale0 * az + scale1 * bz;\r\n out[3] = scale0 * aw + scale1 * bw;\r\n\r\n return out;\r\n}\r\n\r\n/**\r\n * Generates a random quaternion\r\n *\r\n * @param {quat} out the receiving quaternion\r\n * @returns {quat} out\r\n */\r\nexport function random(out) {\r\n // Implementation of http://planning.cs.uiuc.edu/node198.html\r\n // TODO: Calling random 3 times is probably not the fastest solution\r\n var u1 = glMatrix.RANDOM();\r\n var u2 = glMatrix.RANDOM();\r\n var u3 = glMatrix.RANDOM();\r\n\r\n var sqrt1MinusU1 = Math.sqrt(1 - u1);\r\n var sqrtU1 = Math.sqrt(u1);\r\n\r\n out[0] = sqrt1MinusU1 * Math.sin(2.0 * Math.PI * u2);\r\n out[1] = sqrt1MinusU1 * Math.cos(2.0 * Math.PI * u2);\r\n out[2] = sqrtU1 * Math.sin(2.0 * Math.PI * u3);\r\n out[3] = sqrtU1 * Math.cos(2.0 * Math.PI * u3);\r\n return out;\r\n}\r\n\r\n/**\r\n * Calculates the inverse of a quat\r\n *\r\n * @param {quat} out the receiving quaternion\r\n * @param {quat} a quat to calculate inverse of\r\n * @returns {quat} out\r\n */\r\nexport function invert(out, a) {\r\n var a0 = a[0],\r\n a1 = a[1],\r\n a2 = a[2],\r\n a3 = a[3];\r\n var dot = a0 * a0 + a1 * a1 + a2 * a2 + a3 * a3;\r\n var invDot = dot ? 1.0 / dot : 0;\r\n\r\n // TODO: Would be faster to return [0,0,0,0] immediately if dot == 0\r\n\r\n out[0] = -a0 * invDot;\r\n out[1] = -a1 * invDot;\r\n out[2] = -a2 * invDot;\r\n out[3] = a3 * invDot;\r\n return out;\r\n}\r\n\r\n/**\r\n * Calculates the conjugate of a quat\r\n * If the quaternion is normalized, this function is faster than quat.inverse and produces the same result.\r\n *\r\n * @param {quat} out the receiving quaternion\r\n * @param {quat} a quat to calculate conjugate of\r\n * @returns {quat} out\r\n */\r\nexport function conjugate(out, a) {\r\n out[0] = -a[0];\r\n out[1] = -a[1];\r\n out[2] = -a[2];\r\n out[3] = a[3];\r\n return out;\r\n}\r\n\r\n/**\r\n * Creates a quaternion from the given 3x3 rotation matrix.\r\n *\r\n * NOTE: The resultant quaternion is not normalized, so you should be sure\r\n * to renormalize the quaternion yourself where necessary.\r\n *\r\n * @param {quat} out the receiving quaternion\r\n * @param {mat3} m rotation matrix\r\n * @returns {quat} out\r\n * @function\r\n */\r\nexport function fromMat3(out, m) {\r\n // Algorithm in Ken Shoemake's article in 1987 SIGGRAPH course notes\r\n // article \"Quaternion Calculus and Fast Animation\".\r\n var fTrace = m[0] + m[4] + m[8];\r\n var fRoot = void 0;\r\n\r\n if (fTrace > 0.0) {\r\n // |w| > 1/2, may as well choose w > 1/2\r\n fRoot = Math.sqrt(fTrace + 1.0); // 2w\r\n out[3] = 0.5 * fRoot;\r\n fRoot = 0.5 / fRoot; // 1/(4w)\r\n out[0] = (m[5] - m[7]) * fRoot;\r\n out[1] = (m[6] - m[2]) * fRoot;\r\n out[2] = (m[1] - m[3]) * fRoot;\r\n } else {\r\n // |w| <= 1/2\r\n var i = 0;\r\n if (m[4] > m[0]) i = 1;\r\n if (m[8] > m[i * 3 + i]) i = 2;\r\n var j = (i + 1) % 3;\r\n var k = (i + 2) % 3;\r\n\r\n fRoot = Math.sqrt(m[i * 3 + i] - m[j * 3 + j] - m[k * 3 + k] + 1.0);\r\n out[i] = 0.5 * fRoot;\r\n fRoot = 0.5 / fRoot;\r\n out[3] = (m[j * 3 + k] - m[k * 3 + j]) * fRoot;\r\n out[j] = (m[j * 3 + i] + m[i * 3 + j]) * fRoot;\r\n out[k] = (m[k * 3 + i] + m[i * 3 + k]) * fRoot;\r\n }\r\n\r\n return out;\r\n}\r\n\r\n/**\r\n * Creates a quaternion from the given euler angle x, y, z.\r\n *\r\n * @param {quat} out the receiving quaternion\r\n * @param {x} Angle to rotate around X axis in degrees.\r\n * @param {y} Angle to rotate around Y axis in degrees.\r\n * @param {z} Angle to rotate around Z axis in degrees.\r\n * @returns {quat} out\r\n * @function\r\n */\r\nexport function fromEuler(out, x, y, z) {\r\n var halfToRad = 0.5 * Math.PI / 180.0;\r\n x *= halfToRad;\r\n y *= halfToRad;\r\n z *= halfToRad;\r\n\r\n var sx = Math.sin(x);\r\n var cx = Math.cos(x);\r\n var sy = Math.sin(y);\r\n var cy = Math.cos(y);\r\n var sz = Math.sin(z);\r\n var cz = Math.cos(z);\r\n\r\n out[0] = sx * cy * cz - cx * sy * sz;\r\n out[1] = cx * sy * cz + sx * cy * sz;\r\n out[2] = cx * cy * sz - sx * sy * cz;\r\n out[3] = cx * cy * cz + sx * sy * sz;\r\n\r\n return out;\r\n}\r\n\r\n/**\r\n * Returns a string representation of a quatenion\r\n *\r\n * @param {quat} a vector to represent as a string\r\n * @returns {String} string representation of the vector\r\n */\r\nexport function str(a) {\r\n return 'quat(' + a[0] + ', ' + a[1] + ', ' + a[2] + ', ' + a[3] + ')';\r\n}\r\n\r\n/**\r\n * Creates a new quat initialized with values from an existing quaternion\r\n *\r\n * @param {quat} a quaternion to clone\r\n * @returns {quat} a new quaternion\r\n * @function\r\n */\r\nexport var clone = vec4.clone;\r\n\r\n/**\r\n * Creates a new quat initialized with the given values\r\n *\r\n * @param {Number} x X component\r\n * @param {Number} y Y component\r\n * @param {Number} z Z component\r\n * @param {Number} w W component\r\n * @returns {quat} a new quaternion\r\n * @function\r\n */\r\nexport var fromValues = vec4.fromValues;\r\n\r\n/**\r\n * Copy the values from one quat to another\r\n *\r\n * @param {quat} out the receiving quaternion\r\n * @param {quat} a the source quaternion\r\n * @returns {quat} out\r\n * @function\r\n */\r\nexport var copy = vec4.copy;\r\n\r\n/**\r\n * Set the components of a quat to the given values\r\n *\r\n * @param {quat} out the receiving quaternion\r\n * @param {Number} x X component\r\n * @param {Number} y Y component\r\n * @param {Number} z Z component\r\n * @param {Number} w W component\r\n * @returns {quat} out\r\n * @function\r\n */\r\nexport var set = vec4.set;\r\n\r\n/**\r\n * Adds two quat's\r\n *\r\n * @param {quat} out the receiving quaternion\r\n * @param {quat} a the first operand\r\n * @param {quat} b the second operand\r\n * @returns {quat} out\r\n * @function\r\n */\r\nexport var add = vec4.add;\r\n\r\n/**\r\n * Alias for {@link quat.multiply}\r\n * @function\r\n */\r\nexport var mul = multiply;\r\n\r\n/**\r\n * Scales a quat by a scalar number\r\n *\r\n * @param {quat} out the receiving vector\r\n * @param {quat} a the vector to scale\r\n * @param {Number} b amount to scale the vector by\r\n * @returns {quat} out\r\n * @function\r\n */\r\nexport var scale = vec4.scale;\r\n\r\n/**\r\n * Calculates the dot product of two quat's\r\n *\r\n * @param {quat} a the first operand\r\n * @param {quat} b the second operand\r\n * @returns {Number} dot product of a and b\r\n * @function\r\n */\r\nexport var dot = vec4.dot;\r\n\r\n/**\r\n * Performs a linear interpolation between two quat's\r\n *\r\n * @param {quat} out the receiving quaternion\r\n * @param {quat} a the first operand\r\n * @param {quat} b the second operand\r\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\r\n * @returns {quat} out\r\n * @function\r\n */\r\nexport var lerp = vec4.lerp;\r\n\r\n/**\r\n * Calculates the length of a quat\r\n *\r\n * @param {quat} a vector to calculate length of\r\n * @returns {Number} length of a\r\n */\r\nexport var length = vec4.length;\r\n\r\n/**\r\n * Alias for {@link quat.length}\r\n * @function\r\n */\r\nexport var len = length;\r\n\r\n/**\r\n * Calculates the squared length of a quat\r\n *\r\n * @param {quat} a vector to calculate squared length of\r\n * @returns {Number} squared length of a\r\n * @function\r\n */\r\nexport var squaredLength = vec4.squaredLength;\r\n\r\n/**\r\n * Alias for {@link quat.squaredLength}\r\n * @function\r\n */\r\nexport var sqrLen = squaredLength;\r\n\r\n/**\r\n * Normalize a quat\r\n *\r\n * @param {quat} out the receiving quaternion\r\n * @param {quat} a quaternion to normalize\r\n * @returns {quat} out\r\n * @function\r\n */\r\nexport var normalize = vec4.normalize;\r\n\r\n/**\r\n * Returns whether or not the quaternions have exactly the same elements in the same position (when compared with ===)\r\n *\r\n * @param {quat} a The first quaternion.\r\n * @param {quat} b The second quaternion.\r\n * @returns {Boolean} True if the vectors are equal, false otherwise.\r\n */\r\nexport var exactEquals = vec4.exactEquals;\r\n\r\n/**\r\n * Returns whether or not the quaternions have approximately the same elements in the same position.\r\n *\r\n * @param {quat} a The first vector.\r\n * @param {quat} b The second vector.\r\n * @returns {Boolean} True if the vectors are equal, false otherwise.\r\n */\r\nexport var equals = vec4.equals;\r\n\r\n/**\r\n * Sets a quaternion to represent the shortest rotation from one\r\n * vector to another.\r\n *\r\n * Both vectors are assumed to be unit length.\r\n *\r\n * @param {quat} out the receiving quaternion.\r\n * @param {vec3} a the initial vector\r\n * @param {vec3} b the destination vector\r\n * @returns {quat} out\r\n */\r\nexport var rotationTo = function () {\r\n var tmpvec3 = vec3.create();\r\n var xUnitVec3 = vec3.fromValues(1, 0, 0);\r\n var yUnitVec3 = vec3.fromValues(0, 1, 0);\r\n\r\n return function (out, a, b) {\r\n var dot = vec3.dot(a, b);\r\n if (dot < -0.999999) {\r\n vec3.cross(tmpvec3, xUnitVec3, a);\r\n if (vec3.len(tmpvec3) < 0.000001) vec3.cross(tmpvec3, yUnitVec3, a);\r\n vec3.normalize(tmpvec3, tmpvec3);\r\n setAxisAngle(out, tmpvec3, Math.PI);\r\n return out;\r\n } else if (dot > 0.999999) {\r\n out[0] = 0;\r\n out[1] = 0;\r\n out[2] = 0;\r\n out[3] = 1;\r\n return out;\r\n } else {\r\n vec3.cross(tmpvec3, a, b);\r\n out[0] = tmpvec3[0];\r\n out[1] = tmpvec3[1];\r\n out[2] = tmpvec3[2];\r\n out[3] = 1 + dot;\r\n return normalize(out, out);\r\n }\r\n };\r\n}();\r\n\r\n/**\r\n * Performs a spherical linear interpolation with two control points\r\n *\r\n * @param {quat} out the receiving quaternion\r\n * @param {quat} a the first operand\r\n * @param {quat} b the second operand\r\n * @param {quat} c the third operand\r\n * @param {quat} d the fourth operand\r\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\r\n * @returns {quat} out\r\n */\r\nexport var sqlerp = function () {\r\n var temp1 = create();\r\n var temp2 = create();\r\n\r\n return function (out, a, b, c, d, t) {\r\n slerp(temp1, a, d, t);\r\n slerp(temp2, b, c, t);\r\n slerp(out, temp1, temp2, 2 * t * (1 - t));\r\n\r\n return out;\r\n };\r\n}();\r\n\r\n/**\r\n * Sets the specified quaternion with values corresponding to the given\r\n * axes. Each axis is a vec3 and is expected to be unit length and\r\n * perpendicular to all other specified axes.\r\n *\r\n * @param {vec3} view the vector representing the viewing direction\r\n * @param {vec3} right the vector representing the local \"right\" direction\r\n * @param {vec3} up the vector representing the local \"up\" direction\r\n * @returns {quat} out\r\n */\r\nexport var setAxes = function () {\r\n var matr = mat3.create();\r\n\r\n return function (out, view, right, up) {\r\n matr[0] = right[0];\r\n matr[3] = right[1];\r\n matr[6] = right[2];\r\n\r\n matr[1] = up[0];\r\n matr[4] = up[1];\r\n matr[7] = up[2];\r\n\r\n matr[2] = -view[0];\r\n matr[5] = -view[1];\r\n matr[8] = -view[2];\r\n\r\n return normalize(out, fromMat3(out, matr));\r\n };\r\n}();","import * as glMatrix from \"./common.js\";\r\n\r\n/**\r\n * 3 Dimensional Vector\r\n * @module vec3\r\n */\r\n\r\n/**\r\n * Creates a new, empty vec3\r\n *\r\n * @returns {vec3} a new 3D vector\r\n */\r\nexport function create() {\r\n var out = new glMatrix.ARRAY_TYPE(3);\r\n if (glMatrix.ARRAY_TYPE != Float32Array) {\r\n out[0] = 0;\r\n out[1] = 0;\r\n out[2] = 0;\r\n }\r\n return out;\r\n}\r\n\r\n/**\r\n * Creates a new vec3 initialized with values from an existing vector\r\n *\r\n * @param {vec3} a vector to clone\r\n * @returns {vec3} a new 3D vector\r\n */\r\nexport function clone(a) {\r\n var out = new glMatrix.ARRAY_TYPE(3);\r\n out[0] = a[0];\r\n out[1] = a[1];\r\n out[2] = a[2];\r\n return out;\r\n}\r\n\r\n/**\r\n * Calculates the length of a vec3\r\n *\r\n * @param {vec3} a vector to calculate length of\r\n * @returns {Number} length of a\r\n */\r\nexport function length(a) {\r\n var x = a[0];\r\n var y = a[1];\r\n var z = a[2];\r\n return Math.sqrt(x * x + y * y + z * z);\r\n}\r\n\r\n/**\r\n * Creates a new vec3 initialized with the given values\r\n *\r\n * @param {Number} x X component\r\n * @param {Number} y Y component\r\n * @param {Number} z Z component\r\n * @returns {vec3} a new 3D vector\r\n */\r\nexport function fromValues(x, y, z) {\r\n var out = new glMatrix.ARRAY_TYPE(3);\r\n out[0] = x;\r\n out[1] = y;\r\n out[2] = z;\r\n return out;\r\n}\r\n\r\n/**\r\n * Copy the values from one vec3 to another\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {vec3} a the source vector\r\n * @returns {vec3} out\r\n */\r\nexport function copy(out, a) {\r\n out[0] = a[0];\r\n out[1] = a[1];\r\n out[2] = a[2];\r\n return out;\r\n}\r\n\r\n/**\r\n * Set the components of a vec3 to the given values\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {Number} x X component\r\n * @param {Number} y Y component\r\n * @param {Number} z Z component\r\n * @returns {vec3} out\r\n */\r\nexport function set(out, x, y, z) {\r\n out[0] = x;\r\n out[1] = y;\r\n out[2] = z;\r\n return out;\r\n}\r\n\r\n/**\r\n * Adds two vec3's\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {vec3} a the first operand\r\n * @param {vec3} b the second operand\r\n * @returns {vec3} out\r\n */\r\nexport function add(out, a, b) {\r\n out[0] = a[0] + b[0];\r\n out[1] = a[1] + b[1];\r\n out[2] = a[2] + b[2];\r\n return out;\r\n}\r\n\r\n/**\r\n * Subtracts vector b from vector a\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {vec3} a the first operand\r\n * @param {vec3} b the second operand\r\n * @returns {vec3} out\r\n */\r\nexport function subtract(out, a, b) {\r\n out[0] = a[0] - b[0];\r\n out[1] = a[1] - b[1];\r\n out[2] = a[2] - b[2];\r\n return out;\r\n}\r\n\r\n/**\r\n * Multiplies two vec3's\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {vec3} a the first operand\r\n * @param {vec3} b the second operand\r\n * @returns {vec3} out\r\n */\r\nexport function multiply(out, a, b) {\r\n out[0] = a[0] * b[0];\r\n out[1] = a[1] * b[1];\r\n out[2] = a[2] * b[2];\r\n return out;\r\n}\r\n\r\n/**\r\n * Divides two vec3's\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {vec3} a the first operand\r\n * @param {vec3} b the second operand\r\n * @returns {vec3} out\r\n */\r\nexport function divide(out, a, b) {\r\n out[0] = a[0] / b[0];\r\n out[1] = a[1] / b[1];\r\n out[2] = a[2] / b[2];\r\n return out;\r\n}\r\n\r\n/**\r\n * Math.ceil the components of a vec3\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {vec3} a vector to ceil\r\n * @returns {vec3} out\r\n */\r\nexport function ceil(out, a) {\r\n out[0] = Math.ceil(a[0]);\r\n out[1] = Math.ceil(a[1]);\r\n out[2] = Math.ceil(a[2]);\r\n return out;\r\n}\r\n\r\n/**\r\n * Math.floor the components of a vec3\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {vec3} a vector to floor\r\n * @returns {vec3} out\r\n */\r\nexport function floor(out, a) {\r\n out[0] = Math.floor(a[0]);\r\n out[1] = Math.floor(a[1]);\r\n out[2] = Math.floor(a[2]);\r\n return out;\r\n}\r\n\r\n/**\r\n * Returns the minimum of two vec3's\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {vec3} a the first operand\r\n * @param {vec3} b the second operand\r\n * @returns {vec3} out\r\n */\r\nexport function min(out, a, b) {\r\n out[0] = Math.min(a[0], b[0]);\r\n out[1] = Math.min(a[1], b[1]);\r\n out[2] = Math.min(a[2], b[2]);\r\n return out;\r\n}\r\n\r\n/**\r\n * Returns the maximum of two vec3's\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {vec3} a the first operand\r\n * @param {vec3} b the second operand\r\n * @returns {vec3} out\r\n */\r\nexport function max(out, a, b) {\r\n out[0] = Math.max(a[0], b[0]);\r\n out[1] = Math.max(a[1], b[1]);\r\n out[2] = Math.max(a[2], b[2]);\r\n return out;\r\n}\r\n\r\n/**\r\n * Math.round the components of a vec3\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {vec3} a vector to round\r\n * @returns {vec3} out\r\n */\r\nexport function round(out, a) {\r\n out[0] = Math.round(a[0]);\r\n out[1] = Math.round(a[1]);\r\n out[2] = Math.round(a[2]);\r\n return out;\r\n}\r\n\r\n/**\r\n * Scales a vec3 by a scalar number\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {vec3} a the vector to scale\r\n * @param {Number} b amount to scale the vector by\r\n * @returns {vec3} out\r\n */\r\nexport function scale(out, a, b) {\r\n out[0] = a[0] * b;\r\n out[1] = a[1] * b;\r\n out[2] = a[2] * b;\r\n return out;\r\n}\r\n\r\n/**\r\n * Adds two vec3's after scaling the second operand by a scalar value\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {vec3} a the first operand\r\n * @param {vec3} b the second operand\r\n * @param {Number} scale the amount to scale b by before adding\r\n * @returns {vec3} out\r\n */\r\nexport function scaleAndAdd(out, a, b, scale) {\r\n out[0] = a[0] + b[0] * scale;\r\n out[1] = a[1] + b[1] * scale;\r\n out[2] = a[2] + b[2] * scale;\r\n return out;\r\n}\r\n\r\n/**\r\n * Calculates the euclidian distance between two vec3's\r\n *\r\n * @param {vec3} a the first operand\r\n * @param {vec3} b the second operand\r\n * @returns {Number} distance between a and b\r\n */\r\nexport function distance(a, b) {\r\n var x = b[0] - a[0];\r\n var y = b[1] - a[1];\r\n var z = b[2] - a[2];\r\n return Math.sqrt(x * x + y * y + z * z);\r\n}\r\n\r\n/**\r\n * Calculates the squared euclidian distance between two vec3's\r\n *\r\n * @param {vec3} a the first operand\r\n * @param {vec3} b the second operand\r\n * @returns {Number} squared distance between a and b\r\n */\r\nexport function squaredDistance(a, b) {\r\n var x = b[0] - a[0];\r\n var y = b[1] - a[1];\r\n var z = b[2] - a[2];\r\n return x * x + y * y + z * z;\r\n}\r\n\r\n/**\r\n * Calculates the squared length of a vec3\r\n *\r\n * @param {vec3} a vector to calculate squared length of\r\n * @returns {Number} squared length of a\r\n */\r\nexport function squaredLength(a) {\r\n var x = a[0];\r\n var y = a[1];\r\n var z = a[2];\r\n return x * x + y * y + z * z;\r\n}\r\n\r\n/**\r\n * Negates the components of a vec3\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {vec3} a vector to negate\r\n * @returns {vec3} out\r\n */\r\nexport function negate(out, a) {\r\n out[0] = -a[0];\r\n out[1] = -a[1];\r\n out[2] = -a[2];\r\n return out;\r\n}\r\n\r\n/**\r\n * Returns the inverse of the components of a vec3\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {vec3} a vector to invert\r\n * @returns {vec3} out\r\n */\r\nexport function inverse(out, a) {\r\n out[0] = 1.0 / a[0];\r\n out[1] = 1.0 / a[1];\r\n out[2] = 1.0 / a[2];\r\n return out;\r\n}\r\n\r\n/**\r\n * Normalize a vec3\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {vec3} a vector to normalize\r\n * @returns {vec3} out\r\n */\r\nexport function normalize(out, a) {\r\n var x = a[0];\r\n var y = a[1];\r\n var z = a[2];\r\n var len = x * x + y * y + z * z;\r\n if (len > 0) {\r\n //TODO: evaluate use of glm_invsqrt here?\r\n len = 1 / Math.sqrt(len);\r\n out[0] = a[0] * len;\r\n out[1] = a[1] * len;\r\n out[2] = a[2] * len;\r\n }\r\n return out;\r\n}\r\n\r\n/**\r\n * Calculates the dot product of two vec3's\r\n *\r\n * @param {vec3} a the first operand\r\n * @param {vec3} b the second operand\r\n * @returns {Number} dot product of a and b\r\n */\r\nexport function dot(a, b) {\r\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\r\n}\r\n\r\n/**\r\n * Computes the cross product of two vec3's\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {vec3} a the first operand\r\n * @param {vec3} b the second operand\r\n * @returns {vec3} out\r\n */\r\nexport function cross(out, a, b) {\r\n var ax = a[0],\r\n ay = a[1],\r\n az = a[2];\r\n var bx = b[0],\r\n by = b[1],\r\n bz = b[2];\r\n\r\n out[0] = ay * bz - az * by;\r\n out[1] = az * bx - ax * bz;\r\n out[2] = ax * by - ay * bx;\r\n return out;\r\n}\r\n\r\n/**\r\n * Performs a linear interpolation between two vec3's\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {vec3} a the first operand\r\n * @param {vec3} b the second operand\r\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\r\n * @returns {vec3} out\r\n */\r\nexport function lerp(out, a, b, t) {\r\n var ax = a[0];\r\n var ay = a[1];\r\n var az = a[2];\r\n out[0] = ax + t * (b[0] - ax);\r\n out[1] = ay + t * (b[1] - ay);\r\n out[2] = az + t * (b[2] - az);\r\n return out;\r\n}\r\n\r\n/**\r\n * Performs a hermite interpolation with two control points\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {vec3} a the first operand\r\n * @param {vec3} b the second operand\r\n * @param {vec3} c the third operand\r\n * @param {vec3} d the fourth operand\r\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\r\n * @returns {vec3} out\r\n */\r\nexport function hermite(out, a, b, c, d, t) {\r\n var factorTimes2 = t * t;\r\n var factor1 = factorTimes2 * (2 * t - 3) + 1;\r\n var factor2 = factorTimes2 * (t - 2) + t;\r\n var factor3 = factorTimes2 * (t - 1);\r\n var factor4 = factorTimes2 * (3 - 2 * t);\r\n\r\n out[0] = a[0] * factor1 + b[0] * factor2 + c[0] * factor3 + d[0] * factor4;\r\n out[1] = a[1] * factor1 + b[1] * factor2 + c[1] * factor3 + d[1] * factor4;\r\n out[2] = a[2] * factor1 + b[2] * factor2 + c[2] * factor3 + d[2] * factor4;\r\n\r\n return out;\r\n}\r\n\r\n/**\r\n * Performs a bezier interpolation with two control points\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {vec3} a the first operand\r\n * @param {vec3} b the second operand\r\n * @param {vec3} c the third operand\r\n * @param {vec3} d the fourth operand\r\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\r\n * @returns {vec3} out\r\n */\r\nexport function bezier(out, a, b, c, d, t) {\r\n var inverseFactor = 1 - t;\r\n var inverseFactorTimesTwo = inverseFactor * inverseFactor;\r\n var factorTimes2 = t * t;\r\n var factor1 = inverseFactorTimesTwo * inverseFactor;\r\n var factor2 = 3 * t * inverseFactorTimesTwo;\r\n var factor3 = 3 * factorTimes2 * inverseFactor;\r\n var factor4 = factorTimes2 * t;\r\n\r\n out[0] = a[0] * factor1 + b[0] * factor2 + c[0] * factor3 + d[0] * factor4;\r\n out[1] = a[1] * factor1 + b[1] * factor2 + c[1] * factor3 + d[1] * factor4;\r\n out[2] = a[2] * factor1 + b[2] * factor2 + c[2] * factor3 + d[2] * factor4;\r\n\r\n return out;\r\n}\r\n\r\n/**\r\n * Generates a random vector with the given scale\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {Number} [scale] Length of the resulting vector. If ommitted, a unit vector will be returned\r\n * @returns {vec3} out\r\n */\r\nexport function random(out, scale) {\r\n scale = scale || 1.0;\r\n\r\n var r = glMatrix.RANDOM() * 2.0 * Math.PI;\r\n var z = glMatrix.RANDOM() * 2.0 - 1.0;\r\n var zScale = Math.sqrt(1.0 - z * z) * scale;\r\n\r\n out[0] = Math.cos(r) * zScale;\r\n out[1] = Math.sin(r) * zScale;\r\n out[2] = z * scale;\r\n return out;\r\n}\r\n\r\n/**\r\n * Transforms the vec3 with a mat4.\r\n * 4th vector component is implicitly '1'\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {vec3} a the vector to transform\r\n * @param {mat4} m matrix to transform with\r\n * @returns {vec3} out\r\n */\r\nexport function transformMat4(out, a, m) {\r\n var x = a[0],\r\n y = a[1],\r\n z = a[2];\r\n var w = m[3] * x + m[7] * y + m[11] * z + m[15];\r\n w = w || 1.0;\r\n out[0] = (m[0] * x + m[4] * y + m[8] * z + m[12]) / w;\r\n out[1] = (m[1] * x + m[5] * y + m[9] * z + m[13]) / w;\r\n out[2] = (m[2] * x + m[6] * y + m[10] * z + m[14]) / w;\r\n return out;\r\n}\r\n\r\n/**\r\n * Transforms the vec3 with a mat3.\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {vec3} a the vector to transform\r\n * @param {mat3} m the 3x3 matrix to transform with\r\n * @returns {vec3} out\r\n */\r\nexport function transformMat3(out, a, m) {\r\n var x = a[0],\r\n y = a[1],\r\n z = a[2];\r\n out[0] = x * m[0] + y * m[3] + z * m[6];\r\n out[1] = x * m[1] + y * m[4] + z * m[7];\r\n out[2] = x * m[2] + y * m[5] + z * m[8];\r\n return out;\r\n}\r\n\r\n/**\r\n * Transforms the vec3 with a quat\r\n * Can also be used for dual quaternions. (Multiply it with the real part)\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {vec3} a the vector to transform\r\n * @param {quat} q quaternion to transform with\r\n * @returns {vec3} out\r\n */\r\nexport function transformQuat(out, a, q) {\r\n // benchmarks: https://jsperf.com/quaternion-transform-vec3-implementations-fixed\r\n var qx = q[0],\r\n qy = q[1],\r\n qz = q[2],\r\n qw = q[3];\r\n var x = a[0],\r\n y = a[1],\r\n z = a[2];\r\n // var qvec = [qx, qy, qz];\r\n // var uv = vec3.cross([], qvec, a);\r\n var uvx = qy * z - qz * y,\r\n uvy = qz * x - qx * z,\r\n uvz = qx * y - qy * x;\r\n // var uuv = vec3.cross([], qvec, uv);\r\n var uuvx = qy * uvz - qz * uvy,\r\n uuvy = qz * uvx - qx * uvz,\r\n uuvz = qx * uvy - qy * uvx;\r\n // vec3.scale(uv, uv, 2 * w);\r\n var w2 = qw * 2;\r\n uvx *= w2;\r\n uvy *= w2;\r\n uvz *= w2;\r\n // vec3.scale(uuv, uuv, 2);\r\n uuvx *= 2;\r\n uuvy *= 2;\r\n uuvz *= 2;\r\n // return vec3.add(out, a, vec3.add(out, uv, uuv));\r\n out[0] = x + uvx + uuvx;\r\n out[1] = y + uvy + uuvy;\r\n out[2] = z + uvz + uuvz;\r\n return out;\r\n}\r\n\r\n/**\r\n * Rotate a 3D vector around the x-axis\r\n * @param {vec3} out The receiving vec3\r\n * @param {vec3} a The vec3 point to rotate\r\n * @param {vec3} b The origin of the rotation\r\n * @param {Number} c The angle of rotation\r\n * @returns {vec3} out\r\n */\r\nexport function rotateX(out, a, b, c) {\r\n var p = [],\r\n r = [];\r\n //Translate point to the origin\r\n p[0] = a[0] - b[0];\r\n p[1] = a[1] - b[1];\r\n p[2] = a[2] - b[2];\r\n\r\n //perform rotation\r\n r[0] = p[0];\r\n r[1] = p[1] * Math.cos(c) - p[2] * Math.sin(c);\r\n r[2] = p[1] * Math.sin(c) + p[2] * Math.cos(c);\r\n\r\n //translate to correct position\r\n out[0] = r[0] + b[0];\r\n out[1] = r[1] + b[1];\r\n out[2] = r[2] + b[2];\r\n\r\n return out;\r\n}\r\n\r\n/**\r\n * Rotate a 3D vector around the y-axis\r\n * @param {vec3} out The receiving vec3\r\n * @param {vec3} a The vec3 point to rotate\r\n * @param {vec3} b The origin of the rotation\r\n * @param {Number} c The angle of rotation\r\n * @returns {vec3} out\r\n */\r\nexport function rotateY(out, a, b, c) {\r\n var p = [],\r\n r = [];\r\n //Translate point to the origin\r\n p[0] = a[0] - b[0];\r\n p[1] = a[1] - b[1];\r\n p[2] = a[2] - b[2];\r\n\r\n //perform rotation\r\n r[0] = p[2] * Math.sin(c) + p[0] * Math.cos(c);\r\n r[1] = p[1];\r\n r[2] = p[2] * Math.cos(c) - p[0] * Math.sin(c);\r\n\r\n //translate to correct position\r\n out[0] = r[0] + b[0];\r\n out[1] = r[1] + b[1];\r\n out[2] = r[2] + b[2];\r\n\r\n return out;\r\n}\r\n\r\n/**\r\n * Rotate a 3D vector around the z-axis\r\n * @param {vec3} out The receiving vec3\r\n * @param {vec3} a The vec3 point to rotate\r\n * @param {vec3} b The origin of the rotation\r\n * @param {Number} c The angle of rotation\r\n * @returns {vec3} out\r\n */\r\nexport function rotateZ(out, a, b, c) {\r\n var p = [],\r\n r = [];\r\n //Translate point to the origin\r\n p[0] = a[0] - b[0];\r\n p[1] = a[1] - b[1];\r\n p[2] = a[2] - b[2];\r\n\r\n //perform rotation\r\n r[0] = p[0] * Math.cos(c) - p[1] * Math.sin(c);\r\n r[1] = p[0] * Math.sin(c) + p[1] * Math.cos(c);\r\n r[2] = p[2];\r\n\r\n //translate to correct position\r\n out[0] = r[0] + b[0];\r\n out[1] = r[1] + b[1];\r\n out[2] = r[2] + b[2];\r\n\r\n return out;\r\n}\r\n\r\n/**\r\n * Get the angle between two 3D vectors\r\n * @param {vec3} a The first operand\r\n * @param {vec3} b The second operand\r\n * @returns {Number} The angle in radians\r\n */\r\nexport function angle(a, b) {\r\n var tempA = fromValues(a[0], a[1], a[2]);\r\n var tempB = fromValues(b[0], b[1], b[2]);\r\n\r\n normalize(tempA, tempA);\r\n normalize(tempB, tempB);\r\n\r\n var cosine = dot(tempA, tempB);\r\n\r\n if (cosine > 1.0) {\r\n return 0;\r\n } else if (cosine < -1.0) {\r\n return Math.PI;\r\n } else {\r\n return Math.acos(cosine);\r\n }\r\n}\r\n\r\n/**\r\n * Returns a string representation of a vector\r\n *\r\n * @param {vec3} a vector to represent as a string\r\n * @returns {String} string representation of the vector\r\n */\r\nexport function str(a) {\r\n return 'vec3(' + a[0] + ', ' + a[1] + ', ' + a[2] + ')';\r\n}\r\n\r\n/**\r\n * Returns whether or not the vectors have exactly the same elements in the same position (when compared with ===)\r\n *\r\n * @param {vec3} a The first vector.\r\n * @param {vec3} b The second vector.\r\n * @returns {Boolean} True if the vectors are equal, false otherwise.\r\n */\r\nexport function exactEquals(a, b) {\r\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2];\r\n}\r\n\r\n/**\r\n * Returns whether or not the vectors have approximately the same elements in the same position.\r\n *\r\n * @param {vec3} a The first vector.\r\n * @param {vec3} b The second vector.\r\n * @returns {Boolean} True if the vectors are equal, false otherwise.\r\n */\r\nexport function equals(a, b) {\r\n var a0 = a[0],\r\n a1 = a[1],\r\n a2 = a[2];\r\n var b0 = b[0],\r\n b1 = b[1],\r\n b2 = b[2];\r\n return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2));\r\n}\r\n\r\n/**\r\n * Alias for {@link vec3.subtract}\r\n * @function\r\n */\r\nexport var sub = subtract;\r\n\r\n/**\r\n * Alias for {@link vec3.multiply}\r\n * @function\r\n */\r\nexport var mul = multiply;\r\n\r\n/**\r\n * Alias for {@link vec3.divide}\r\n * @function\r\n */\r\nexport var div = divide;\r\n\r\n/**\r\n * Alias for {@link vec3.distance}\r\n * @function\r\n */\r\nexport var dist = distance;\r\n\r\n/**\r\n * Alias for {@link vec3.squaredDistance}\r\n * @function\r\n */\r\nexport var sqrDist = squaredDistance;\r\n\r\n/**\r\n * Alias for {@link vec3.length}\r\n * @function\r\n */\r\nexport var len = length;\r\n\r\n/**\r\n * Alias for {@link vec3.squaredLength}\r\n * @function\r\n */\r\nexport var sqrLen = squaredLength;\r\n\r\n/**\r\n * Perform some operation over an array of vec3s.\r\n *\r\n * @param {Array} a the array of vectors to iterate over\r\n * @param {Number} stride Number of elements between the start of each vec3. If 0 assumes tightly packed\r\n * @param {Number} offset Number of elements to skip at the beginning of the array\r\n * @param {Number} count Number of vec3s to iterate over. If 0 iterates over entire array\r\n * @param {Function} fn Function to call for each vector in the array\r\n * @param {Object} [arg] additional argument to pass to fn\r\n * @returns {Array} a\r\n * @function\r\n */\r\nexport var forEach = function () {\r\n var vec = create();\r\n\r\n return function (a, stride, offset, count, fn, arg) {\r\n var i = void 0,\r\n l = void 0;\r\n if (!stride) {\r\n stride = 3;\r\n }\r\n\r\n if (!offset) {\r\n offset = 0;\r\n }\r\n\r\n if (count) {\r\n l = Math.min(count * stride + offset, a.length);\r\n } else {\r\n l = a.length;\r\n }\r\n\r\n for (i = offset; i < l; i += stride) {\r\n vec[0] = a[i];vec[1] = a[i + 1];vec[2] = a[i + 2];\r\n fn(vec, vec, arg);\r\n a[i] = vec[0];a[i + 1] = vec[1];a[i + 2] = vec[2];\r\n }\r\n\r\n return a;\r\n };\r\n}();","import * as glMatrix from \"./common.js\";\r\n\r\n/**\r\n * 4 Dimensional Vector\r\n * @module vec4\r\n */\r\n\r\n/**\r\n * Creates a new, empty vec4\r\n *\r\n * @returns {vec4} a new 4D vector\r\n */\r\nexport function create() {\r\n var out = new glMatrix.ARRAY_TYPE(4);\r\n if (glMatrix.ARRAY_TYPE != Float32Array) {\r\n out[0] = 0;\r\n out[1] = 0;\r\n out[2] = 0;\r\n out[3] = 0;\r\n }\r\n return out;\r\n}\r\n\r\n/**\r\n * Creates a new vec4 initialized with values from an existing vector\r\n *\r\n * @param {vec4} a vector to clone\r\n * @returns {vec4} a new 4D vector\r\n */\r\nexport function clone(a) {\r\n var out = new glMatrix.ARRAY_TYPE(4);\r\n out[0] = a[0];\r\n out[1] = a[1];\r\n out[2] = a[2];\r\n out[3] = a[3];\r\n return out;\r\n}\r\n\r\n/**\r\n * Creates a new vec4 initialized with the given values\r\n *\r\n * @param {Number} x X component\r\n * @param {Number} y Y component\r\n * @param {Number} z Z component\r\n * @param {Number} w W component\r\n * @returns {vec4} a new 4D vector\r\n */\r\nexport function fromValues(x, y, z, w) {\r\n var out = new glMatrix.ARRAY_TYPE(4);\r\n out[0] = x;\r\n out[1] = y;\r\n out[2] = z;\r\n out[3] = w;\r\n return out;\r\n}\r\n\r\n/**\r\n * Copy the values from one vec4 to another\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {vec4} a the source vector\r\n * @returns {vec4} out\r\n */\r\nexport function copy(out, a) {\r\n out[0] = a[0];\r\n out[1] = a[1];\r\n out[2] = a[2];\r\n out[3] = a[3];\r\n return out;\r\n}\r\n\r\n/**\r\n * Set the components of a vec4 to the given values\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {Number} x X component\r\n * @param {Number} y Y component\r\n * @param {Number} z Z component\r\n * @param {Number} w W component\r\n * @returns {vec4} out\r\n */\r\nexport function set(out, x, y, z, w) {\r\n out[0] = x;\r\n out[1] = y;\r\n out[2] = z;\r\n out[3] = w;\r\n return out;\r\n}\r\n\r\n/**\r\n * Adds two vec4's\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {vec4} a the first operand\r\n * @param {vec4} b the second operand\r\n * @returns {vec4} out\r\n */\r\nexport function add(out, a, b) {\r\n out[0] = a[0] + b[0];\r\n out[1] = a[1] + b[1];\r\n out[2] = a[2] + b[2];\r\n out[3] = a[3] + b[3];\r\n return out;\r\n}\r\n\r\n/**\r\n * Subtracts vector b from vector a\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {vec4} a the first operand\r\n * @param {vec4} b the second operand\r\n * @returns {vec4} out\r\n */\r\nexport function subtract(out, a, b) {\r\n out[0] = a[0] - b[0];\r\n out[1] = a[1] - b[1];\r\n out[2] = a[2] - b[2];\r\n out[3] = a[3] - b[3];\r\n return out;\r\n}\r\n\r\n/**\r\n * Multiplies two vec4's\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {vec4} a the first operand\r\n * @param {vec4} b the second operand\r\n * @returns {vec4} out\r\n */\r\nexport function multiply(out, a, b) {\r\n out[0] = a[0] * b[0];\r\n out[1] = a[1] * b[1];\r\n out[2] = a[2] * b[2];\r\n out[3] = a[3] * b[3];\r\n return out;\r\n}\r\n\r\n/**\r\n * Divides two vec4's\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {vec4} a the first operand\r\n * @param {vec4} b the second operand\r\n * @returns {vec4} out\r\n */\r\nexport function divide(out, a, b) {\r\n out[0] = a[0] / b[0];\r\n out[1] = a[1] / b[1];\r\n out[2] = a[2] / b[2];\r\n out[3] = a[3] / b[3];\r\n return out;\r\n}\r\n\r\n/**\r\n * Math.ceil the components of a vec4\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {vec4} a vector to ceil\r\n * @returns {vec4} out\r\n */\r\nexport function ceil(out, a) {\r\n out[0] = Math.ceil(a[0]);\r\n out[1] = Math.ceil(a[1]);\r\n out[2] = Math.ceil(a[2]);\r\n out[3] = Math.ceil(a[3]);\r\n return out;\r\n}\r\n\r\n/**\r\n * Math.floor the components of a vec4\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {vec4} a vector to floor\r\n * @returns {vec4} out\r\n */\r\nexport function floor(out, a) {\r\n out[0] = Math.floor(a[0]);\r\n out[1] = Math.floor(a[1]);\r\n out[2] = Math.floor(a[2]);\r\n out[3] = Math.floor(a[3]);\r\n return out;\r\n}\r\n\r\n/**\r\n * Returns the minimum of two vec4's\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {vec4} a the first operand\r\n * @param {vec4} b the second operand\r\n * @returns {vec4} out\r\n */\r\nexport function min(out, a, b) {\r\n out[0] = Math.min(a[0], b[0]);\r\n out[1] = Math.min(a[1], b[1]);\r\n out[2] = Math.min(a[2], b[2]);\r\n out[3] = Math.min(a[3], b[3]);\r\n return out;\r\n}\r\n\r\n/**\r\n * Returns the maximum of two vec4's\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {vec4} a the first operand\r\n * @param {vec4} b the second operand\r\n * @returns {vec4} out\r\n */\r\nexport function max(out, a, b) {\r\n out[0] = Math.max(a[0], b[0]);\r\n out[1] = Math.max(a[1], b[1]);\r\n out[2] = Math.max(a[2], b[2]);\r\n out[3] = Math.max(a[3], b[3]);\r\n return out;\r\n}\r\n\r\n/**\r\n * Math.round the components of a vec4\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {vec4} a vector to round\r\n * @returns {vec4} out\r\n */\r\nexport function round(out, a) {\r\n out[0] = Math.round(a[0]);\r\n out[1] = Math.round(a[1]);\r\n out[2] = Math.round(a[2]);\r\n out[3] = Math.round(a[3]);\r\n return out;\r\n}\r\n\r\n/**\r\n * Scales a vec4 by a scalar number\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {vec4} a the vector to scale\r\n * @param {Number} b amount to scale the vector by\r\n * @returns {vec4} out\r\n */\r\nexport function scale(out, a, b) {\r\n out[0] = a[0] * b;\r\n out[1] = a[1] * b;\r\n out[2] = a[2] * b;\r\n out[3] = a[3] * b;\r\n return out;\r\n}\r\n\r\n/**\r\n * Adds two vec4's after scaling the second operand by a scalar value\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {vec4} a the first operand\r\n * @param {vec4} b the second operand\r\n * @param {Number} scale the amount to scale b by before adding\r\n * @returns {vec4} out\r\n */\r\nexport function scaleAndAdd(out, a, b, scale) {\r\n out[0] = a[0] + b[0] * scale;\r\n out[1] = a[1] + b[1] * scale;\r\n out[2] = a[2] + b[2] * scale;\r\n out[3] = a[3] + b[3] * scale;\r\n return out;\r\n}\r\n\r\n/**\r\n * Calculates the euclidian distance between two vec4's\r\n *\r\n * @param {vec4} a the first operand\r\n * @param {vec4} b the second operand\r\n * @returns {Number} distance between a and b\r\n */\r\nexport function distance(a, b) {\r\n var x = b[0] - a[0];\r\n var y = b[1] - a[1];\r\n var z = b[2] - a[2];\r\n var w = b[3] - a[3];\r\n return Math.sqrt(x * x + y * y + z * z + w * w);\r\n}\r\n\r\n/**\r\n * Calculates the squared euclidian distance between two vec4's\r\n *\r\n * @param {vec4} a the first operand\r\n * @param {vec4} b the second operand\r\n * @returns {Number} squared distance between a and b\r\n */\r\nexport function squaredDistance(a, b) {\r\n var x = b[0] - a[0];\r\n var y = b[1] - a[1];\r\n var z = b[2] - a[2];\r\n var w = b[3] - a[3];\r\n return x * x + y * y + z * z + w * w;\r\n}\r\n\r\n/**\r\n * Calculates the length of a vec4\r\n *\r\n * @param {vec4} a vector to calculate length of\r\n * @returns {Number} length of a\r\n */\r\nexport function length(a) {\r\n var x = a[0];\r\n var y = a[1];\r\n var z = a[2];\r\n var w = a[3];\r\n return Math.sqrt(x * x + y * y + z * z + w * w);\r\n}\r\n\r\n/**\r\n * Calculates the squared length of a vec4\r\n *\r\n * @param {vec4} a vector to calculate squared length of\r\n * @returns {Number} squared length of a\r\n */\r\nexport function squaredLength(a) {\r\n var x = a[0];\r\n var y = a[1];\r\n var z = a[2];\r\n var w = a[3];\r\n return x * x + y * y + z * z + w * w;\r\n}\r\n\r\n/**\r\n * Negates the components of a vec4\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {vec4} a vector to negate\r\n * @returns {vec4} out\r\n */\r\nexport function negate(out, a) {\r\n out[0] = -a[0];\r\n out[1] = -a[1];\r\n out[2] = -a[2];\r\n out[3] = -a[3];\r\n return out;\r\n}\r\n\r\n/**\r\n * Returns the inverse of the components of a vec4\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {vec4} a vector to invert\r\n * @returns {vec4} out\r\n */\r\nexport function inverse(out, a) {\r\n out[0] = 1.0 / a[0];\r\n out[1] = 1.0 / a[1];\r\n out[2] = 1.0 / a[2];\r\n out[3] = 1.0 / a[3];\r\n return out;\r\n}\r\n\r\n/**\r\n * Normalize a vec4\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {vec4} a vector to normalize\r\n * @returns {vec4} out\r\n */\r\nexport function normalize(out, a) {\r\n var x = a[0];\r\n var y = a[1];\r\n var z = a[2];\r\n var w = a[3];\r\n var len = x * x + y * y + z * z + w * w;\r\n if (len > 0) {\r\n len = 1 / Math.sqrt(len);\r\n out[0] = x * len;\r\n out[1] = y * len;\r\n out[2] = z * len;\r\n out[3] = w * len;\r\n }\r\n return out;\r\n}\r\n\r\n/**\r\n * Calculates the dot product of two vec4's\r\n *\r\n * @param {vec4} a the first operand\r\n * @param {vec4} b the second operand\r\n * @returns {Number} dot product of a and b\r\n */\r\nexport function dot(a, b) {\r\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3];\r\n}\r\n\r\n/**\r\n * Performs a linear interpolation between two vec4's\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {vec4} a the first operand\r\n * @param {vec4} b the second operand\r\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\r\n * @returns {vec4} out\r\n */\r\nexport function lerp(out, a, b, t) {\r\n var ax = a[0];\r\n var ay = a[1];\r\n var az = a[2];\r\n var aw = a[3];\r\n out[0] = ax + t * (b[0] - ax);\r\n out[1] = ay + t * (b[1] - ay);\r\n out[2] = az + t * (b[2] - az);\r\n out[3] = aw + t * (b[3] - aw);\r\n return out;\r\n}\r\n\r\n/**\r\n * Generates a random vector with the given scale\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {Number} [scale] Length of the resulting vector. If ommitted, a unit vector will be returned\r\n * @returns {vec4} out\r\n */\r\nexport function random(out, scale) {\r\n scale = scale || 1.0;\r\n\r\n // Marsaglia, George. Choosing a Point from the Surface of a\r\n // Sphere. Ann. Math. Statist. 43 (1972), no. 2, 645--646.\r\n // http://projecteuclid.org/euclid.aoms/1177692644;\r\n var v1, v2, v3, v4;\r\n var s1, s2;\r\n do {\r\n v1 = glMatrix.RANDOM() * 2 - 1;\r\n v2 = glMatrix.RANDOM() * 2 - 1;\r\n s1 = v1 * v1 + v2 * v2;\r\n } while (s1 >= 1);\r\n do {\r\n v3 = glMatrix.RANDOM() * 2 - 1;\r\n v4 = glMatrix.RANDOM() * 2 - 1;\r\n s2 = v3 * v3 + v4 * v4;\r\n } while (s2 >= 1);\r\n\r\n var d = Math.sqrt((1 - s1) / s2);\r\n out[0] = scale * v1;\r\n out[1] = scale * v2;\r\n out[2] = scale * v3 * d;\r\n out[3] = scale * v4 * d;\r\n return out;\r\n}\r\n\r\n/**\r\n * Transforms the vec4 with a mat4.\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {vec4} a the vector to transform\r\n * @param {mat4} m matrix to transform with\r\n * @returns {vec4} out\r\n */\r\nexport function transformMat4(out, a, m) {\r\n var x = a[0],\r\n y = a[1],\r\n z = a[2],\r\n w = a[3];\r\n out[0] = m[0] * x + m[4] * y + m[8] * z + m[12] * w;\r\n out[1] = m[1] * x + m[5] * y + m[9] * z + m[13] * w;\r\n out[2] = m[2] * x + m[6] * y + m[10] * z + m[14] * w;\r\n out[3] = m[3] * x + m[7] * y + m[11] * z + m[15] * w;\r\n return out;\r\n}\r\n\r\n/**\r\n * Transforms the vec4 with a quat\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {vec4} a the vector to transform\r\n * @param {quat} q quaternion to transform with\r\n * @returns {vec4} out\r\n */\r\nexport function transformQuat(out, a, q) {\r\n var x = a[0],\r\n y = a[1],\r\n z = a[2];\r\n var qx = q[0],\r\n qy = q[1],\r\n qz = q[2],\r\n qw = q[3];\r\n\r\n // calculate quat * vec\r\n var ix = qw * x + qy * z - qz * y;\r\n var iy = qw * y + qz * x - qx * z;\r\n var iz = qw * z + qx * y - qy * x;\r\n var iw = -qx * x - qy * y - qz * z;\r\n\r\n // calculate result * inverse quat\r\n out[0] = ix * qw + iw * -qx + iy * -qz - iz * -qy;\r\n out[1] = iy * qw + iw * -qy + iz * -qx - ix * -qz;\r\n out[2] = iz * qw + iw * -qz + ix * -qy - iy * -qx;\r\n out[3] = a[3];\r\n return out;\r\n}\r\n\r\n/**\r\n * Returns a string representation of a vector\r\n *\r\n * @param {vec4} a vector to represent as a string\r\n * @returns {String} string representation of the vector\r\n */\r\nexport function str(a) {\r\n return 'vec4(' + a[0] + ', ' + a[1] + ', ' + a[2] + ', ' + a[3] + ')';\r\n}\r\n\r\n/**\r\n * Returns whether or not the vectors have exactly the same elements in the same position (when compared with ===)\r\n *\r\n * @param {vec4} a The first vector.\r\n * @param {vec4} b The second vector.\r\n * @returns {Boolean} True if the vectors are equal, false otherwise.\r\n */\r\nexport function exactEquals(a, b) {\r\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3];\r\n}\r\n\r\n/**\r\n * Returns whether or not the vectors have approximately the same elements in the same position.\r\n *\r\n * @param {vec4} a The first vector.\r\n * @param {vec4} b The second vector.\r\n * @returns {Boolean} True if the vectors are equal, false otherwise.\r\n */\r\nexport function equals(a, b) {\r\n var a0 = a[0],\r\n a1 = a[1],\r\n a2 = a[2],\r\n a3 = a[3];\r\n var b0 = b[0],\r\n b1 = b[1],\r\n b2 = b[2],\r\n b3 = b[3];\r\n return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)) && Math.abs(a3 - b3) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a3), Math.abs(b3));\r\n}\r\n\r\n/**\r\n * Alias for {@link vec4.subtract}\r\n * @function\r\n */\r\nexport var sub = subtract;\r\n\r\n/**\r\n * Alias for {@link vec4.multiply}\r\n * @function\r\n */\r\nexport var mul = multiply;\r\n\r\n/**\r\n * Alias for {@link vec4.divide}\r\n * @function\r\n */\r\nexport var div = divide;\r\n\r\n/**\r\n * Alias for {@link vec4.distance}\r\n * @function\r\n */\r\nexport var dist = distance;\r\n\r\n/**\r\n * Alias for {@link vec4.squaredDistance}\r\n * @function\r\n */\r\nexport var sqrDist = squaredDistance;\r\n\r\n/**\r\n * Alias for {@link vec4.length}\r\n * @function\r\n */\r\nexport var len = length;\r\n\r\n/**\r\n * Alias for {@link vec4.squaredLength}\r\n * @function\r\n */\r\nexport var sqrLen = squaredLength;\r\n\r\n/**\r\n * Perform some operation over an array of vec4s.\r\n *\r\n * @param {Array} a the array of vectors to iterate over\r\n * @param {Number} stride Number of elements between the start of each vec4. If 0 assumes tightly packed\r\n * @param {Number} offset Number of elements to skip at the beginning of the array\r\n * @param {Number} count Number of vec4s to iterate over. If 0 iterates over entire array\r\n * @param {Function} fn Function to call for each vector in the array\r\n * @param {Object} [arg] additional argument to pass to fn\r\n * @returns {Array} a\r\n * @function\r\n */\r\nexport var forEach = function () {\r\n var vec = create();\r\n\r\n return function (a, stride, offset, count, fn, arg) {\r\n var i = void 0,\r\n l = void 0;\r\n if (!stride) {\r\n stride = 4;\r\n }\r\n\r\n if (!offset) {\r\n offset = 0;\r\n }\r\n\r\n if (count) {\r\n l = Math.min(count * stride + offset, a.length);\r\n } else {\r\n l = a.length;\r\n }\r\n\r\n for (i = offset; i < l; i += stride) {\r\n vec[0] = a[i];vec[1] = a[i + 1];vec[2] = a[i + 2];vec[3] = a[i + 3];\r\n fn(vec, vec, arg);\r\n a[i] = vec[0];a[i + 1] = vec[1];a[i + 2] = vec[2];a[i + 3] = vec[3];\r\n }\r\n\r\n return a;\r\n };\r\n}();","import * as glMatrix from \"./common.js\";\r\nimport * as quat from \"./quat.js\";\r\nimport * as mat4 from \"./mat4.js\";\r\n\r\n/**\r\n * Dual Quaternion
\r\n * Format: [real, dual]
\r\n * Quaternion format: XYZW
\r\n * Make sure to have normalized dual quaternions, otherwise the functions may not work as intended.
\r\n * @module quat2\r\n */\r\n\r\n/**\r\n * Creates a new identity dual quat\r\n *\r\n * @returns {quat2} a new dual quaternion [real -> rotation, dual -> translation]\r\n */\r\nexport function create() {\r\n var dq = new glMatrix.ARRAY_TYPE(8);\r\n if (glMatrix.ARRAY_TYPE != Float32Array) {\r\n dq[0] = 0;\r\n dq[1] = 0;\r\n dq[2] = 0;\r\n dq[4] = 0;\r\n dq[5] = 0;\r\n dq[6] = 0;\r\n dq[7] = 0;\r\n }\r\n dq[3] = 1;\r\n return dq;\r\n}\r\n\r\n/**\r\n * Creates a new quat initialized with values from an existing quaternion\r\n *\r\n * @param {quat2} a dual quaternion to clone\r\n * @returns {quat2} new dual quaternion\r\n * @function\r\n */\r\nexport function clone(a) {\r\n var dq = new glMatrix.ARRAY_TYPE(8);\r\n dq[0] = a[0];\r\n dq[1] = a[1];\r\n dq[2] = a[2];\r\n dq[3] = a[3];\r\n dq[4] = a[4];\r\n dq[5] = a[5];\r\n dq[6] = a[6];\r\n dq[7] = a[7];\r\n return dq;\r\n}\r\n\r\n/**\r\n * Creates a new dual quat initialized with the given values\r\n *\r\n * @param {Number} x1 X component\r\n * @param {Number} y1 Y component\r\n * @param {Number} z1 Z component\r\n * @param {Number} w1 W component\r\n * @param {Number} x2 X component\r\n * @param {Number} y2 Y component\r\n * @param {Number} z2 Z component\r\n * @param {Number} w2 W component\r\n * @returns {quat2} new dual quaternion\r\n * @function\r\n */\r\nexport function fromValues(x1, y1, z1, w1, x2, y2, z2, w2) {\r\n var dq = new glMatrix.ARRAY_TYPE(8);\r\n dq[0] = x1;\r\n dq[1] = y1;\r\n dq[2] = z1;\r\n dq[3] = w1;\r\n dq[4] = x2;\r\n dq[5] = y2;\r\n dq[6] = z2;\r\n dq[7] = w2;\r\n return dq;\r\n}\r\n\r\n/**\r\n * Creates a new dual quat from the given values (quat and translation)\r\n *\r\n * @param {Number} x1 X component\r\n * @param {Number} y1 Y component\r\n * @param {Number} z1 Z component\r\n * @param {Number} w1 W component\r\n * @param {Number} x2 X component (translation)\r\n * @param {Number} y2 Y component (translation)\r\n * @param {Number} z2 Z component (translation)\r\n * @returns {quat2} new dual quaternion\r\n * @function\r\n */\r\nexport function fromRotationTranslationValues(x1, y1, z1, w1, x2, y2, z2) {\r\n var dq = new glMatrix.ARRAY_TYPE(8);\r\n dq[0] = x1;\r\n dq[1] = y1;\r\n dq[2] = z1;\r\n dq[3] = w1;\r\n var ax = x2 * 0.5,\r\n ay = y2 * 0.5,\r\n az = z2 * 0.5;\r\n dq[4] = ax * w1 + ay * z1 - az * y1;\r\n dq[5] = ay * w1 + az * x1 - ax * z1;\r\n dq[6] = az * w1 + ax * y1 - ay * x1;\r\n dq[7] = -ax * x1 - ay * y1 - az * z1;\r\n return dq;\r\n}\r\n\r\n/**\r\n * Creates a dual quat from a quaternion and a translation\r\n *\r\n * @param {quat2} dual quaternion receiving operation result\r\n * @param {quat} q quaternion\r\n * @param {vec3} t tranlation vector\r\n * @returns {quat2} dual quaternion receiving operation result\r\n * @function\r\n */\r\nexport function fromRotationTranslation(out, q, t) {\r\n var ax = t[0] * 0.5,\r\n ay = t[1] * 0.5,\r\n az = t[2] * 0.5,\r\n bx = q[0],\r\n by = q[1],\r\n bz = q[2],\r\n bw = q[3];\r\n out[0] = bx;\r\n out[1] = by;\r\n out[2] = bz;\r\n out[3] = bw;\r\n out[4] = ax * bw + ay * bz - az * by;\r\n out[5] = ay * bw + az * bx - ax * bz;\r\n out[6] = az * bw + ax * by - ay * bx;\r\n out[7] = -ax * bx - ay * by - az * bz;\r\n return out;\r\n}\r\n\r\n/**\r\n * Creates a dual quat from a translation\r\n *\r\n * @param {quat2} dual quaternion receiving operation result\r\n * @param {vec3} t translation vector\r\n * @returns {quat2} dual quaternion receiving operation result\r\n * @function\r\n */\r\nexport function fromTranslation(out, t) {\r\n out[0] = 0;\r\n out[1] = 0;\r\n out[2] = 0;\r\n out[3] = 1;\r\n out[4] = t[0] * 0.5;\r\n out[5] = t[1] * 0.5;\r\n out[6] = t[2] * 0.5;\r\n out[7] = 0;\r\n return out;\r\n}\r\n\r\n/**\r\n * Creates a dual quat from a quaternion\r\n *\r\n * @param {quat2} dual quaternion receiving operation result\r\n * @param {quat} q the quaternion\r\n * @returns {quat2} dual quaternion receiving operation result\r\n * @function\r\n */\r\nexport function fromRotation(out, q) {\r\n out[0] = q[0];\r\n out[1] = q[1];\r\n out[2] = q[2];\r\n out[3] = q[3];\r\n out[4] = 0;\r\n out[5] = 0;\r\n out[6] = 0;\r\n out[7] = 0;\r\n return out;\r\n}\r\n\r\n/**\r\n * Creates a new dual quat from a matrix (4x4)\r\n *\r\n * @param {quat2} out the dual quaternion\r\n * @param {mat4} a the matrix\r\n * @returns {quat2} dual quat receiving operation result\r\n * @function\r\n */\r\nexport function fromMat4(out, a) {\r\n //TODO Optimize this\r\n var outer = quat.create();\r\n mat4.getRotation(outer, a);\r\n var t = new glMatrix.ARRAY_TYPE(3);\r\n mat4.getTranslation(t, a);\r\n fromRotationTranslation(out, outer, t);\r\n return out;\r\n}\r\n\r\n/**\r\n * Copy the values from one dual quat to another\r\n *\r\n * @param {quat2} out the receiving dual quaternion\r\n * @param {quat2} a the source dual quaternion\r\n * @returns {quat2} out\r\n * @function\r\n */\r\nexport function copy(out, a) {\r\n out[0] = a[0];\r\n out[1] = a[1];\r\n out[2] = a[2];\r\n out[3] = a[3];\r\n out[4] = a[4];\r\n out[5] = a[5];\r\n out[6] = a[6];\r\n out[7] = a[7];\r\n return out;\r\n}\r\n\r\n/**\r\n * Set a dual quat to the identity dual quaternion\r\n *\r\n * @param {quat2} out the receiving quaternion\r\n * @returns {quat2} out\r\n */\r\nexport function identity(out) {\r\n out[0] = 0;\r\n out[1] = 0;\r\n out[2] = 0;\r\n out[3] = 1;\r\n out[4] = 0;\r\n out[5] = 0;\r\n out[6] = 0;\r\n out[7] = 0;\r\n return out;\r\n}\r\n\r\n/**\r\n * Set the components of a dual quat to the given values\r\n *\r\n * @param {quat2} out the receiving quaternion\r\n * @param {Number} x1 X component\r\n * @param {Number} y1 Y component\r\n * @param {Number} z1 Z component\r\n * @param {Number} w1 W component\r\n * @param {Number} x2 X component\r\n * @param {Number} y2 Y component\r\n * @param {Number} z2 Z component\r\n * @param {Number} w2 W component\r\n * @returns {quat2} out\r\n * @function\r\n */\r\nexport function set(out, x1, y1, z1, w1, x2, y2, z2, w2) {\r\n out[0] = x1;\r\n out[1] = y1;\r\n out[2] = z1;\r\n out[3] = w1;\r\n\r\n out[4] = x2;\r\n out[5] = y2;\r\n out[6] = z2;\r\n out[7] = w2;\r\n return out;\r\n}\r\n\r\n/**\r\n * Gets the real part of a dual quat\r\n * @param {quat} out real part\r\n * @param {quat2} a Dual Quaternion\r\n * @return {quat} real part\r\n */\r\nexport var getReal = quat.copy;\r\n\r\n/**\r\n * Gets the dual part of a dual quat\r\n * @param {quat} out dual part\r\n * @param {quat2} a Dual Quaternion\r\n * @return {quat} dual part\r\n */\r\nexport function getDual(out, a) {\r\n out[0] = a[4];\r\n out[1] = a[5];\r\n out[2] = a[6];\r\n out[3] = a[7];\r\n return out;\r\n}\r\n\r\n/**\r\n * Set the real component of a dual quat to the given quaternion\r\n *\r\n * @param {quat2} out the receiving quaternion\r\n * @param {quat} q a quaternion representing the real part\r\n * @returns {quat2} out\r\n * @function\r\n */\r\nexport var setReal = quat.copy;\r\n\r\n/**\r\n * Set the dual component of a dual quat to the given quaternion\r\n *\r\n * @param {quat2} out the receiving quaternion\r\n * @param {quat} q a quaternion representing the dual part\r\n * @returns {quat2} out\r\n * @function\r\n */\r\nexport function setDual(out, q) {\r\n out[4] = q[0];\r\n out[5] = q[1];\r\n out[6] = q[2];\r\n out[7] = q[3];\r\n return out;\r\n}\r\n\r\n/**\r\n * Gets the translation of a normalized dual quat\r\n * @param {vec3} out translation\r\n * @param {quat2} a Dual Quaternion to be decomposed\r\n * @return {vec3} translation\r\n */\r\nexport function getTranslation(out, a) {\r\n var ax = a[4],\r\n ay = a[5],\r\n az = a[6],\r\n aw = a[7],\r\n bx = -a[0],\r\n by = -a[1],\r\n bz = -a[2],\r\n bw = a[3];\r\n out[0] = (ax * bw + aw * bx + ay * bz - az * by) * 2;\r\n out[1] = (ay * bw + aw * by + az * bx - ax * bz) * 2;\r\n out[2] = (az * bw + aw * bz + ax * by - ay * bx) * 2;\r\n return out;\r\n}\r\n\r\n/**\r\n * Translates a dual quat by the given vector\r\n *\r\n * @param {quat2} out the receiving dual quaternion\r\n * @param {quat2} a the dual quaternion to translate\r\n * @param {vec3} v vector to translate by\r\n * @returns {quat2} out\r\n */\r\nexport function translate(out, a, v) {\r\n var ax1 = a[0],\r\n ay1 = a[1],\r\n az1 = a[2],\r\n aw1 = a[3],\r\n bx1 = v[0] * 0.5,\r\n by1 = v[1] * 0.5,\r\n bz1 = v[2] * 0.5,\r\n ax2 = a[4],\r\n ay2 = a[5],\r\n az2 = a[6],\r\n aw2 = a[7];\r\n out[0] = ax1;\r\n out[1] = ay1;\r\n out[2] = az1;\r\n out[3] = aw1;\r\n out[4] = aw1 * bx1 + ay1 * bz1 - az1 * by1 + ax2;\r\n out[5] = aw1 * by1 + az1 * bx1 - ax1 * bz1 + ay2;\r\n out[6] = aw1 * bz1 + ax1 * by1 - ay1 * bx1 + az2;\r\n out[7] = -ax1 * bx1 - ay1 * by1 - az1 * bz1 + aw2;\r\n return out;\r\n}\r\n\r\n/**\r\n * Rotates a dual quat around the X axis\r\n *\r\n * @param {quat2} out the receiving dual quaternion\r\n * @param {quat2} a the dual quaternion to rotate\r\n * @param {number} rad how far should the rotation be\r\n * @returns {quat2} out\r\n */\r\nexport function rotateX(out, a, rad) {\r\n var bx = -a[0],\r\n by = -a[1],\r\n bz = -a[2],\r\n bw = a[3],\r\n ax = a[4],\r\n ay = a[5],\r\n az = a[6],\r\n aw = a[7],\r\n ax1 = ax * bw + aw * bx + ay * bz - az * by,\r\n ay1 = ay * bw + aw * by + az * bx - ax * bz,\r\n az1 = az * bw + aw * bz + ax * by - ay * bx,\r\n aw1 = aw * bw - ax * bx - ay * by - az * bz;\r\n quat.rotateX(out, a, rad);\r\n bx = out[0];\r\n by = out[1];\r\n bz = out[2];\r\n bw = out[3];\r\n out[4] = ax1 * bw + aw1 * bx + ay1 * bz - az1 * by;\r\n out[5] = ay1 * bw + aw1 * by + az1 * bx - ax1 * bz;\r\n out[6] = az1 * bw + aw1 * bz + ax1 * by - ay1 * bx;\r\n out[7] = aw1 * bw - ax1 * bx - ay1 * by - az1 * bz;\r\n return out;\r\n}\r\n\r\n/**\r\n * Rotates a dual quat around the Y axis\r\n *\r\n * @param {quat2} out the receiving dual quaternion\r\n * @param {quat2} a the dual quaternion to rotate\r\n * @param {number} rad how far should the rotation be\r\n * @returns {quat2} out\r\n */\r\nexport function rotateY(out, a, rad) {\r\n var bx = -a[0],\r\n by = -a[1],\r\n bz = -a[2],\r\n bw = a[3],\r\n ax = a[4],\r\n ay = a[5],\r\n az = a[6],\r\n aw = a[7],\r\n ax1 = ax * bw + aw * bx + ay * bz - az * by,\r\n ay1 = ay * bw + aw * by + az * bx - ax * bz,\r\n az1 = az * bw + aw * bz + ax * by - ay * bx,\r\n aw1 = aw * bw - ax * bx - ay * by - az * bz;\r\n quat.rotateY(out, a, rad);\r\n bx = out[0];\r\n by = out[1];\r\n bz = out[2];\r\n bw = out[3];\r\n out[4] = ax1 * bw + aw1 * bx + ay1 * bz - az1 * by;\r\n out[5] = ay1 * bw + aw1 * by + az1 * bx - ax1 * bz;\r\n out[6] = az1 * bw + aw1 * bz + ax1 * by - ay1 * bx;\r\n out[7] = aw1 * bw - ax1 * bx - ay1 * by - az1 * bz;\r\n return out;\r\n}\r\n\r\n/**\r\n * Rotates a dual quat around the Z axis\r\n *\r\n * @param {quat2} out the receiving dual quaternion\r\n * @param {quat2} a the dual quaternion to rotate\r\n * @param {number} rad how far should the rotation be\r\n * @returns {quat2} out\r\n */\r\nexport function rotateZ(out, a, rad) {\r\n var bx = -a[0],\r\n by = -a[1],\r\n bz = -a[2],\r\n bw = a[3],\r\n ax = a[4],\r\n ay = a[5],\r\n az = a[6],\r\n aw = a[7],\r\n ax1 = ax * bw + aw * bx + ay * bz - az * by,\r\n ay1 = ay * bw + aw * by + az * bx - ax * bz,\r\n az1 = az * bw + aw * bz + ax * by - ay * bx,\r\n aw1 = aw * bw - ax * bx - ay * by - az * bz;\r\n quat.rotateZ(out, a, rad);\r\n bx = out[0];\r\n by = out[1];\r\n bz = out[2];\r\n bw = out[3];\r\n out[4] = ax1 * bw + aw1 * bx + ay1 * bz - az1 * by;\r\n out[5] = ay1 * bw + aw1 * by + az1 * bx - ax1 * bz;\r\n out[6] = az1 * bw + aw1 * bz + ax1 * by - ay1 * bx;\r\n out[7] = aw1 * bw - ax1 * bx - ay1 * by - az1 * bz;\r\n return out;\r\n}\r\n\r\n/**\r\n * Rotates a dual quat by a given quaternion (a * q)\r\n *\r\n * @param {quat2} out the receiving dual quaternion\r\n * @param {quat2} a the dual quaternion to rotate\r\n * @param {quat} q quaternion to rotate by\r\n * @returns {quat2} out\r\n */\r\nexport function rotateByQuatAppend(out, a, q) {\r\n var qx = q[0],\r\n qy = q[1],\r\n qz = q[2],\r\n qw = q[3],\r\n ax = a[0],\r\n ay = a[1],\r\n az = a[2],\r\n aw = a[3];\r\n\r\n out[0] = ax * qw + aw * qx + ay * qz - az * qy;\r\n out[1] = ay * qw + aw * qy + az * qx - ax * qz;\r\n out[2] = az * qw + aw * qz + ax * qy - ay * qx;\r\n out[3] = aw * qw - ax * qx - ay * qy - az * qz;\r\n ax = a[4];\r\n ay = a[5];\r\n az = a[6];\r\n aw = a[7];\r\n out[4] = ax * qw + aw * qx + ay * qz - az * qy;\r\n out[5] = ay * qw + aw * qy + az * qx - ax * qz;\r\n out[6] = az * qw + aw * qz + ax * qy - ay * qx;\r\n out[7] = aw * qw - ax * qx - ay * qy - az * qz;\r\n return out;\r\n}\r\n\r\n/**\r\n * Rotates a dual quat by a given quaternion (q * a)\r\n *\r\n * @param {quat2} out the receiving dual quaternion\r\n * @param {quat} q quaternion to rotate by\r\n * @param {quat2} a the dual quaternion to rotate\r\n * @returns {quat2} out\r\n */\r\nexport function rotateByQuatPrepend(out, q, a) {\r\n var qx = q[0],\r\n qy = q[1],\r\n qz = q[2],\r\n qw = q[3],\r\n bx = a[0],\r\n by = a[1],\r\n bz = a[2],\r\n bw = a[3];\r\n\r\n out[0] = qx * bw + qw * bx + qy * bz - qz * by;\r\n out[1] = qy * bw + qw * by + qz * bx - qx * bz;\r\n out[2] = qz * bw + qw * bz + qx * by - qy * bx;\r\n out[3] = qw * bw - qx * bx - qy * by - qz * bz;\r\n bx = a[4];\r\n by = a[5];\r\n bz = a[6];\r\n bw = a[7];\r\n out[4] = qx * bw + qw * bx + qy * bz - qz * by;\r\n out[5] = qy * bw + qw * by + qz * bx - qx * bz;\r\n out[6] = qz * bw + qw * bz + qx * by - qy * bx;\r\n out[7] = qw * bw - qx * bx - qy * by - qz * bz;\r\n return out;\r\n}\r\n\r\n/**\r\n * Rotates a dual quat around a given axis. Does the normalisation automatically\r\n *\r\n * @param {quat2} out the receiving dual quaternion\r\n * @param {quat2} a the dual quaternion to rotate\r\n * @param {vec3} axis the axis to rotate around\r\n * @param {Number} rad how far the rotation should be\r\n * @returns {quat2} out\r\n */\r\nexport function rotateAroundAxis(out, a, axis, rad) {\r\n //Special case for rad = 0\r\n if (Math.abs(rad) < glMatrix.EPSILON) {\r\n return copy(out, a);\r\n }\r\n var axisLength = Math.sqrt(axis[0] * axis[0] + axis[1] * axis[1] + axis[2] * axis[2]);\r\n\r\n rad = rad * 0.5;\r\n var s = Math.sin(rad);\r\n var bx = s * axis[0] / axisLength;\r\n var by = s * axis[1] / axisLength;\r\n var bz = s * axis[2] / axisLength;\r\n var bw = Math.cos(rad);\r\n\r\n var ax1 = a[0],\r\n ay1 = a[1],\r\n az1 = a[2],\r\n aw1 = a[3];\r\n out[0] = ax1 * bw + aw1 * bx + ay1 * bz - az1 * by;\r\n out[1] = ay1 * bw + aw1 * by + az1 * bx - ax1 * bz;\r\n out[2] = az1 * bw + aw1 * bz + ax1 * by - ay1 * bx;\r\n out[3] = aw1 * bw - ax1 * bx - ay1 * by - az1 * bz;\r\n\r\n var ax = a[4],\r\n ay = a[5],\r\n az = a[6],\r\n aw = a[7];\r\n out[4] = ax * bw + aw * bx + ay * bz - az * by;\r\n out[5] = ay * bw + aw * by + az * bx - ax * bz;\r\n out[6] = az * bw + aw * bz + ax * by - ay * bx;\r\n out[7] = aw * bw - ax * bx - ay * by - az * bz;\r\n\r\n return out;\r\n}\r\n\r\n/**\r\n * Adds two dual quat's\r\n *\r\n * @param {quat2} out the receiving dual quaternion\r\n * @param {quat2} a the first operand\r\n * @param {quat2} b the second operand\r\n * @returns {quat2} out\r\n * @function\r\n */\r\nexport function add(out, a, b) {\r\n out[0] = a[0] + b[0];\r\n out[1] = a[1] + b[1];\r\n out[2] = a[2] + b[2];\r\n out[3] = a[3] + b[3];\r\n out[4] = a[4] + b[4];\r\n out[5] = a[5] + b[5];\r\n out[6] = a[6] + b[6];\r\n out[7] = a[7] + b[7];\r\n return out;\r\n}\r\n\r\n/**\r\n * Multiplies two dual quat's\r\n *\r\n * @param {quat2} out the receiving dual quaternion\r\n * @param {quat2} a the first operand\r\n * @param {quat2} b the second operand\r\n * @returns {quat2} out\r\n */\r\nexport function multiply(out, a, b) {\r\n var ax0 = a[0],\r\n ay0 = a[1],\r\n az0 = a[2],\r\n aw0 = a[3],\r\n bx1 = b[4],\r\n by1 = b[5],\r\n bz1 = b[6],\r\n bw1 = b[7],\r\n ax1 = a[4],\r\n ay1 = a[5],\r\n az1 = a[6],\r\n aw1 = a[7],\r\n bx0 = b[0],\r\n by0 = b[1],\r\n bz0 = b[2],\r\n bw0 = b[3];\r\n out[0] = ax0 * bw0 + aw0 * bx0 + ay0 * bz0 - az0 * by0;\r\n out[1] = ay0 * bw0 + aw0 * by0 + az0 * bx0 - ax0 * bz0;\r\n out[2] = az0 * bw0 + aw0 * bz0 + ax0 * by0 - ay0 * bx0;\r\n out[3] = aw0 * bw0 - ax0 * bx0 - ay0 * by0 - az0 * bz0;\r\n out[4] = ax0 * bw1 + aw0 * bx1 + ay0 * bz1 - az0 * by1 + ax1 * bw0 + aw1 * bx0 + ay1 * bz0 - az1 * by0;\r\n out[5] = ay0 * bw1 + aw0 * by1 + az0 * bx1 - ax0 * bz1 + ay1 * bw0 + aw1 * by0 + az1 * bx0 - ax1 * bz0;\r\n out[6] = az0 * bw1 + aw0 * bz1 + ax0 * by1 - ay0 * bx1 + az1 * bw0 + aw1 * bz0 + ax1 * by0 - ay1 * bx0;\r\n out[7] = aw0 * bw1 - ax0 * bx1 - ay0 * by1 - az0 * bz1 + aw1 * bw0 - ax1 * bx0 - ay1 * by0 - az1 * bz0;\r\n return out;\r\n}\r\n\r\n/**\r\n * Alias for {@link quat2.multiply}\r\n * @function\r\n */\r\nexport var mul = multiply;\r\n\r\n/**\r\n * Scales a dual quat by a scalar number\r\n *\r\n * @param {quat2} out the receiving dual quat\r\n * @param {quat2} a the dual quat to scale\r\n * @param {Number} b amount to scale the dual quat by\r\n * @returns {quat2} out\r\n * @function\r\n */\r\nexport function scale(out, a, b) {\r\n out[0] = a[0] * b;\r\n out[1] = a[1] * b;\r\n out[2] = a[2] * b;\r\n out[3] = a[3] * b;\r\n out[4] = a[4] * b;\r\n out[5] = a[5] * b;\r\n out[6] = a[6] * b;\r\n out[7] = a[7] * b;\r\n return out;\r\n}\r\n\r\n/**\r\n * Calculates the dot product of two dual quat's (The dot product of the real parts)\r\n *\r\n * @param {quat2} a the first operand\r\n * @param {quat2} b the second operand\r\n * @returns {Number} dot product of a and b\r\n * @function\r\n */\r\nexport var dot = quat.dot;\r\n\r\n/**\r\n * Performs a linear interpolation between two dual quats's\r\n * NOTE: The resulting dual quaternions won't always be normalized (The error is most noticeable when t = 0.5)\r\n *\r\n * @param {quat2} out the receiving dual quat\r\n * @param {quat2} a the first operand\r\n * @param {quat2} b the second operand\r\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\r\n * @returns {quat2} out\r\n */\r\nexport function lerp(out, a, b, t) {\r\n var mt = 1 - t;\r\n if (dot(a, b) < 0) t = -t;\r\n\r\n out[0] = a[0] * mt + b[0] * t;\r\n out[1] = a[1] * mt + b[1] * t;\r\n out[2] = a[2] * mt + b[2] * t;\r\n out[3] = a[3] * mt + b[3] * t;\r\n out[4] = a[4] * mt + b[4] * t;\r\n out[5] = a[5] * mt + b[5] * t;\r\n out[6] = a[6] * mt + b[6] * t;\r\n out[7] = a[7] * mt + b[7] * t;\r\n\r\n return out;\r\n}\r\n\r\n/**\r\n * Calculates the inverse of a dual quat. If they are normalized, conjugate is cheaper\r\n *\r\n * @param {quat2} out the receiving dual quaternion\r\n * @param {quat2} a dual quat to calculate inverse of\r\n * @returns {quat2} out\r\n */\r\nexport function invert(out, a) {\r\n var sqlen = squaredLength(a);\r\n out[0] = -a[0] / sqlen;\r\n out[1] = -a[1] / sqlen;\r\n out[2] = -a[2] / sqlen;\r\n out[3] = a[3] / sqlen;\r\n out[4] = -a[4] / sqlen;\r\n out[5] = -a[5] / sqlen;\r\n out[6] = -a[6] / sqlen;\r\n out[7] = a[7] / sqlen;\r\n return out;\r\n}\r\n\r\n/**\r\n * Calculates the conjugate of a dual quat\r\n * If the dual quaternion is normalized, this function is faster than quat2.inverse and produces the same result.\r\n *\r\n * @param {quat2} out the receiving quaternion\r\n * @param {quat2} a quat to calculate conjugate of\r\n * @returns {quat2} out\r\n */\r\nexport function conjugate(out, a) {\r\n out[0] = -a[0];\r\n out[1] = -a[1];\r\n out[2] = -a[2];\r\n out[3] = a[3];\r\n out[4] = -a[4];\r\n out[5] = -a[5];\r\n out[6] = -a[6];\r\n out[7] = a[7];\r\n return out;\r\n}\r\n\r\n/**\r\n * Calculates the length of a dual quat\r\n *\r\n * @param {quat2} a dual quat to calculate length of\r\n * @returns {Number} length of a\r\n * @function\r\n */\r\nexport var length = quat.length;\r\n\r\n/**\r\n * Alias for {@link quat2.length}\r\n * @function\r\n */\r\nexport var len = length;\r\n\r\n/**\r\n * Calculates the squared length of a dual quat\r\n *\r\n * @param {quat2} a dual quat to calculate squared length of\r\n * @returns {Number} squared length of a\r\n * @function\r\n */\r\nexport var squaredLength = quat.squaredLength;\r\n\r\n/**\r\n * Alias for {@link quat2.squaredLength}\r\n * @function\r\n */\r\nexport var sqrLen = squaredLength;\r\n\r\n/**\r\n * Normalize a dual quat\r\n *\r\n * @param {quat2} out the receiving dual quaternion\r\n * @param {quat2} a dual quaternion to normalize\r\n * @returns {quat2} out\r\n * @function\r\n */\r\nexport function normalize(out, a) {\r\n var magnitude = squaredLength(a);\r\n if (magnitude > 0) {\r\n magnitude = Math.sqrt(magnitude);\r\n\r\n var a0 = a[0] / magnitude;\r\n var a1 = a[1] / magnitude;\r\n var a2 = a[2] / magnitude;\r\n var a3 = a[3] / magnitude;\r\n\r\n var b0 = a[4];\r\n var b1 = a[5];\r\n var b2 = a[6];\r\n var b3 = a[7];\r\n\r\n var a_dot_b = a0 * b0 + a1 * b1 + a2 * b2 + a3 * b3;\r\n\r\n out[0] = a0;\r\n out[1] = a1;\r\n out[2] = a2;\r\n out[3] = a3;\r\n\r\n out[4] = (b0 - a0 * a_dot_b) / magnitude;\r\n out[5] = (b1 - a1 * a_dot_b) / magnitude;\r\n out[6] = (b2 - a2 * a_dot_b) / magnitude;\r\n out[7] = (b3 - a3 * a_dot_b) / magnitude;\r\n }\r\n return out;\r\n}\r\n\r\n/**\r\n * Returns a string representation of a dual quatenion\r\n *\r\n * @param {quat2} a dual quaternion to represent as a string\r\n * @returns {String} string representation of the dual quat\r\n */\r\nexport function str(a) {\r\n return 'quat2(' + a[0] + ', ' + a[1] + ', ' + a[2] + ', ' + a[3] + ', ' + a[4] + ', ' + a[5] + ', ' + a[6] + ', ' + a[7] + ')';\r\n}\r\n\r\n/**\r\n * Returns whether or not the dual quaternions have exactly the same elements in the same position (when compared with ===)\r\n *\r\n * @param {quat2} a the first dual quaternion.\r\n * @param {quat2} b the second dual quaternion.\r\n * @returns {Boolean} true if the dual quaternions are equal, false otherwise.\r\n */\r\nexport function exactEquals(a, b) {\r\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3] && a[4] === b[4] && a[5] === b[5] && a[6] === b[6] && a[7] === b[7];\r\n}\r\n\r\n/**\r\n * Returns whether or not the dual quaternions have approximately the same elements in the same position.\r\n *\r\n * @param {quat2} a the first dual quat.\r\n * @param {quat2} b the second dual quat.\r\n * @returns {Boolean} true if the dual quats are equal, false otherwise.\r\n */\r\nexport function equals(a, b) {\r\n var a0 = a[0],\r\n a1 = a[1],\r\n a2 = a[2],\r\n a3 = a[3],\r\n a4 = a[4],\r\n a5 = a[5],\r\n a6 = a[6],\r\n a7 = a[7];\r\n var b0 = b[0],\r\n b1 = b[1],\r\n b2 = b[2],\r\n b3 = b[3],\r\n b4 = b[4],\r\n b5 = b[5],\r\n b6 = b[6],\r\n b7 = b[7];\r\n return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)) && Math.abs(a3 - b3) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a3), Math.abs(b3)) && Math.abs(a4 - b4) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a4), Math.abs(b4)) && Math.abs(a5 - b5) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a5), Math.abs(b5)) && Math.abs(a6 - b6) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a6), Math.abs(b6)) && Math.abs(a7 - b7) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a7), Math.abs(b7));\r\n}","import * as glMatrix from \"./common.js\";\r\n\r\n/**\r\n * 2 Dimensional Vector\r\n * @module vec2\r\n */\r\n\r\n/**\r\n * Creates a new, empty vec2\r\n *\r\n * @returns {vec2} a new 2D vector\r\n */\r\nexport function create() {\r\n var out = new glMatrix.ARRAY_TYPE(2);\r\n if (glMatrix.ARRAY_TYPE != Float32Array) {\r\n out[0] = 0;\r\n out[1] = 0;\r\n }\r\n return out;\r\n}\r\n\r\n/**\r\n * Creates a new vec2 initialized with values from an existing vector\r\n *\r\n * @param {vec2} a vector to clone\r\n * @returns {vec2} a new 2D vector\r\n */\r\nexport function clone(a) {\r\n var out = new glMatrix.ARRAY_TYPE(2);\r\n out[0] = a[0];\r\n out[1] = a[1];\r\n return out;\r\n}\r\n\r\n/**\r\n * Creates a new vec2 initialized with the given values\r\n *\r\n * @param {Number} x X component\r\n * @param {Number} y Y component\r\n * @returns {vec2} a new 2D vector\r\n */\r\nexport function fromValues(x, y) {\r\n var out = new glMatrix.ARRAY_TYPE(2);\r\n out[0] = x;\r\n out[1] = y;\r\n return out;\r\n}\r\n\r\n/**\r\n * Copy the values from one vec2 to another\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {vec2} a the source vector\r\n * @returns {vec2} out\r\n */\r\nexport function copy(out, a) {\r\n out[0] = a[0];\r\n out[1] = a[1];\r\n return out;\r\n}\r\n\r\n/**\r\n * Set the components of a vec2 to the given values\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {Number} x X component\r\n * @param {Number} y Y component\r\n * @returns {vec2} out\r\n */\r\nexport function set(out, x, y) {\r\n out[0] = x;\r\n out[1] = y;\r\n return out;\r\n}\r\n\r\n/**\r\n * Adds two vec2's\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {vec2} a the first operand\r\n * @param {vec2} b the second operand\r\n * @returns {vec2} out\r\n */\r\nexport function add(out, a, b) {\r\n out[0] = a[0] + b[0];\r\n out[1] = a[1] + b[1];\r\n return out;\r\n}\r\n\r\n/**\r\n * Subtracts vector b from vector a\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {vec2} a the first operand\r\n * @param {vec2} b the second operand\r\n * @returns {vec2} out\r\n */\r\nexport function subtract(out, a, b) {\r\n out[0] = a[0] - b[0];\r\n out[1] = a[1] - b[1];\r\n return out;\r\n}\r\n\r\n/**\r\n * Multiplies two vec2's\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {vec2} a the first operand\r\n * @param {vec2} b the second operand\r\n * @returns {vec2} out\r\n */\r\nexport function multiply(out, a, b) {\r\n out[0] = a[0] * b[0];\r\n out[1] = a[1] * b[1];\r\n return out;\r\n}\r\n\r\n/**\r\n * Divides two vec2's\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {vec2} a the first operand\r\n * @param {vec2} b the second operand\r\n * @returns {vec2} out\r\n */\r\nexport function divide(out, a, b) {\r\n out[0] = a[0] / b[0];\r\n out[1] = a[1] / b[1];\r\n return out;\r\n}\r\n\r\n/**\r\n * Math.ceil the components of a vec2\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {vec2} a vector to ceil\r\n * @returns {vec2} out\r\n */\r\nexport function ceil(out, a) {\r\n out[0] = Math.ceil(a[0]);\r\n out[1] = Math.ceil(a[1]);\r\n return out;\r\n}\r\n\r\n/**\r\n * Math.floor the components of a vec2\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {vec2} a vector to floor\r\n * @returns {vec2} out\r\n */\r\nexport function floor(out, a) {\r\n out[0] = Math.floor(a[0]);\r\n out[1] = Math.floor(a[1]);\r\n return out;\r\n}\r\n\r\n/**\r\n * Returns the minimum of two vec2's\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {vec2} a the first operand\r\n * @param {vec2} b the second operand\r\n * @returns {vec2} out\r\n */\r\nexport function min(out, a, b) {\r\n out[0] = Math.min(a[0], b[0]);\r\n out[1] = Math.min(a[1], b[1]);\r\n return out;\r\n}\r\n\r\n/**\r\n * Returns the maximum of two vec2's\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {vec2} a the first operand\r\n * @param {vec2} b the second operand\r\n * @returns {vec2} out\r\n */\r\nexport function max(out, a, b) {\r\n out[0] = Math.max(a[0], b[0]);\r\n out[1] = Math.max(a[1], b[1]);\r\n return out;\r\n}\r\n\r\n/**\r\n * Math.round the components of a vec2\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {vec2} a vector to round\r\n * @returns {vec2} out\r\n */\r\nexport function round(out, a) {\r\n out[0] = Math.round(a[0]);\r\n out[1] = Math.round(a[1]);\r\n return out;\r\n}\r\n\r\n/**\r\n * Scales a vec2 by a scalar number\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {vec2} a the vector to scale\r\n * @param {Number} b amount to scale the vector by\r\n * @returns {vec2} out\r\n */\r\nexport function scale(out, a, b) {\r\n out[0] = a[0] * b;\r\n out[1] = a[1] * b;\r\n return out;\r\n}\r\n\r\n/**\r\n * Adds two vec2's after scaling the second operand by a scalar value\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {vec2} a the first operand\r\n * @param {vec2} b the second operand\r\n * @param {Number} scale the amount to scale b by before adding\r\n * @returns {vec2} out\r\n */\r\nexport function scaleAndAdd(out, a, b, scale) {\r\n out[0] = a[0] + b[0] * scale;\r\n out[1] = a[1] + b[1] * scale;\r\n return out;\r\n}\r\n\r\n/**\r\n * Calculates the euclidian distance between two vec2's\r\n *\r\n * @param {vec2} a the first operand\r\n * @param {vec2} b the second operand\r\n * @returns {Number} distance between a and b\r\n */\r\nexport function distance(a, b) {\r\n var x = b[0] - a[0],\r\n y = b[1] - a[1];\r\n return Math.sqrt(x * x + y * y);\r\n}\r\n\r\n/**\r\n * Calculates the squared euclidian distance between two vec2's\r\n *\r\n * @param {vec2} a the first operand\r\n * @param {vec2} b the second operand\r\n * @returns {Number} squared distance between a and b\r\n */\r\nexport function squaredDistance(a, b) {\r\n var x = b[0] - a[0],\r\n y = b[1] - a[1];\r\n return x * x + y * y;\r\n}\r\n\r\n/**\r\n * Calculates the length of a vec2\r\n *\r\n * @param {vec2} a vector to calculate length of\r\n * @returns {Number} length of a\r\n */\r\nexport function length(a) {\r\n var x = a[0],\r\n y = a[1];\r\n return Math.sqrt(x * x + y * y);\r\n}\r\n\r\n/**\r\n * Calculates the squared length of a vec2\r\n *\r\n * @param {vec2} a vector to calculate squared length of\r\n * @returns {Number} squared length of a\r\n */\r\nexport function squaredLength(a) {\r\n var x = a[0],\r\n y = a[1];\r\n return x * x + y * y;\r\n}\r\n\r\n/**\r\n * Negates the components of a vec2\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {vec2} a vector to negate\r\n * @returns {vec2} out\r\n */\r\nexport function negate(out, a) {\r\n out[0] = -a[0];\r\n out[1] = -a[1];\r\n return out;\r\n}\r\n\r\n/**\r\n * Returns the inverse of the components of a vec2\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {vec2} a vector to invert\r\n * @returns {vec2} out\r\n */\r\nexport function inverse(out, a) {\r\n out[0] = 1.0 / a[0];\r\n out[1] = 1.0 / a[1];\r\n return out;\r\n}\r\n\r\n/**\r\n * Normalize a vec2\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {vec2} a vector to normalize\r\n * @returns {vec2} out\r\n */\r\nexport function normalize(out, a) {\r\n var x = a[0],\r\n y = a[1];\r\n var len = x * x + y * y;\r\n if (len > 0) {\r\n //TODO: evaluate use of glm_invsqrt here?\r\n len = 1 / Math.sqrt(len);\r\n out[0] = a[0] * len;\r\n out[1] = a[1] * len;\r\n }\r\n return out;\r\n}\r\n\r\n/**\r\n * Calculates the dot product of two vec2's\r\n *\r\n * @param {vec2} a the first operand\r\n * @param {vec2} b the second operand\r\n * @returns {Number} dot product of a and b\r\n */\r\nexport function dot(a, b) {\r\n return a[0] * b[0] + a[1] * b[1];\r\n}\r\n\r\n/**\r\n * Computes the cross product of two vec2's\r\n * Note that the cross product must by definition produce a 3D vector\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {vec2} a the first operand\r\n * @param {vec2} b the second operand\r\n * @returns {vec3} out\r\n */\r\nexport function cross(out, a, b) {\r\n var z = a[0] * b[1] - a[1] * b[0];\r\n out[0] = out[1] = 0;\r\n out[2] = z;\r\n return out;\r\n}\r\n\r\n/**\r\n * Performs a linear interpolation between two vec2's\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {vec2} a the first operand\r\n * @param {vec2} b the second operand\r\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\r\n * @returns {vec2} out\r\n */\r\nexport function lerp(out, a, b, t) {\r\n var ax = a[0],\r\n ay = a[1];\r\n out[0] = ax + t * (b[0] - ax);\r\n out[1] = ay + t * (b[1] - ay);\r\n return out;\r\n}\r\n\r\n/**\r\n * Generates a random vector with the given scale\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {Number} [scale] Length of the resulting vector. If ommitted, a unit vector will be returned\r\n * @returns {vec2} out\r\n */\r\nexport function random(out, scale) {\r\n scale = scale || 1.0;\r\n var r = glMatrix.RANDOM() * 2.0 * Math.PI;\r\n out[0] = Math.cos(r) * scale;\r\n out[1] = Math.sin(r) * scale;\r\n return out;\r\n}\r\n\r\n/**\r\n * Transforms the vec2 with a mat2\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {vec2} a the vector to transform\r\n * @param {mat2} m matrix to transform with\r\n * @returns {vec2} out\r\n */\r\nexport function transformMat2(out, a, m) {\r\n var x = a[0],\r\n y = a[1];\r\n out[0] = m[0] * x + m[2] * y;\r\n out[1] = m[1] * x + m[3] * y;\r\n return out;\r\n}\r\n\r\n/**\r\n * Transforms the vec2 with a mat2d\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {vec2} a the vector to transform\r\n * @param {mat2d} m matrix to transform with\r\n * @returns {vec2} out\r\n */\r\nexport function transformMat2d(out, a, m) {\r\n var x = a[0],\r\n y = a[1];\r\n out[0] = m[0] * x + m[2] * y + m[4];\r\n out[1] = m[1] * x + m[3] * y + m[5];\r\n return out;\r\n}\r\n\r\n/**\r\n * Transforms the vec2 with a mat3\r\n * 3rd vector component is implicitly '1'\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {vec2} a the vector to transform\r\n * @param {mat3} m matrix to transform with\r\n * @returns {vec2} out\r\n */\r\nexport function transformMat3(out, a, m) {\r\n var x = a[0],\r\n y = a[1];\r\n out[0] = m[0] * x + m[3] * y + m[6];\r\n out[1] = m[1] * x + m[4] * y + m[7];\r\n return out;\r\n}\r\n\r\n/**\r\n * Transforms the vec2 with a mat4\r\n * 3rd vector component is implicitly '0'\r\n * 4th vector component is implicitly '1'\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {vec2} a the vector to transform\r\n * @param {mat4} m matrix to transform with\r\n * @returns {vec2} out\r\n */\r\nexport function transformMat4(out, a, m) {\r\n var x = a[0];\r\n var y = a[1];\r\n out[0] = m[0] * x + m[4] * y + m[12];\r\n out[1] = m[1] * x + m[5] * y + m[13];\r\n return out;\r\n}\r\n\r\n/**\r\n * Rotate a 2D vector\r\n * @param {vec2} out The receiving vec2\r\n * @param {vec2} a The vec2 point to rotate\r\n * @param {vec2} b The origin of the rotation\r\n * @param {Number} c The angle of rotation\r\n * @returns {vec2} out\r\n */\r\nexport function rotate(out, a, b, c) {\r\n //Translate point to the origin\r\n var p0 = a[0] - b[0],\r\n p1 = a[1] - b[1],\r\n sinC = Math.sin(c),\r\n cosC = Math.cos(c);\r\n\r\n //perform rotation and translate to correct position\r\n out[0] = p0 * cosC - p1 * sinC + b[0];\r\n out[1] = p0 * sinC + p1 * cosC + b[1];\r\n\r\n return out;\r\n}\r\n\r\n/**\r\n * Get the angle between two 2D vectors\r\n * @param {vec2} a The first operand\r\n * @param {vec2} b The second operand\r\n * @returns {Number} The angle in radians\r\n */\r\nexport function angle(a, b) {\r\n var x1 = a[0],\r\n y1 = a[1],\r\n x2 = b[0],\r\n y2 = b[1];\r\n\r\n var len1 = x1 * x1 + y1 * y1;\r\n if (len1 > 0) {\r\n //TODO: evaluate use of glm_invsqrt here?\r\n len1 = 1 / Math.sqrt(len1);\r\n }\r\n\r\n var len2 = x2 * x2 + y2 * y2;\r\n if (len2 > 0) {\r\n //TODO: evaluate use of glm_invsqrt here?\r\n len2 = 1 / Math.sqrt(len2);\r\n }\r\n\r\n var cosine = (x1 * x2 + y1 * y2) * len1 * len2;\r\n\r\n if (cosine > 1.0) {\r\n return 0;\r\n } else if (cosine < -1.0) {\r\n return Math.PI;\r\n } else {\r\n return Math.acos(cosine);\r\n }\r\n}\r\n\r\n/**\r\n * Returns a string representation of a vector\r\n *\r\n * @param {vec2} a vector to represent as a string\r\n * @returns {String} string representation of the vector\r\n */\r\nexport function str(a) {\r\n return 'vec2(' + a[0] + ', ' + a[1] + ')';\r\n}\r\n\r\n/**\r\n * Returns whether or not the vectors exactly have the same elements in the same position (when compared with ===)\r\n *\r\n * @param {vec2} a The first vector.\r\n * @param {vec2} b The second vector.\r\n * @returns {Boolean} True if the vectors are equal, false otherwise.\r\n */\r\nexport function exactEquals(a, b) {\r\n return a[0] === b[0] && a[1] === b[1];\r\n}\r\n\r\n/**\r\n * Returns whether or not the vectors have approximately the same elements in the same position.\r\n *\r\n * @param {vec2} a The first vector.\r\n * @param {vec2} b The second vector.\r\n * @returns {Boolean} True if the vectors are equal, false otherwise.\r\n */\r\nexport function equals(a, b) {\r\n var a0 = a[0],\r\n a1 = a[1];\r\n var b0 = b[0],\r\n b1 = b[1];\r\n return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1));\r\n}\r\n\r\n/**\r\n * Alias for {@link vec2.length}\r\n * @function\r\n */\r\nexport var len = length;\r\n\r\n/**\r\n * Alias for {@link vec2.subtract}\r\n * @function\r\n */\r\nexport var sub = subtract;\r\n\r\n/**\r\n * Alias for {@link vec2.multiply}\r\n * @function\r\n */\r\nexport var mul = multiply;\r\n\r\n/**\r\n * Alias for {@link vec2.divide}\r\n * @function\r\n */\r\nexport var div = divide;\r\n\r\n/**\r\n * Alias for {@link vec2.distance}\r\n * @function\r\n */\r\nexport var dist = distance;\r\n\r\n/**\r\n * Alias for {@link vec2.squaredDistance}\r\n * @function\r\n */\r\nexport var sqrDist = squaredDistance;\r\n\r\n/**\r\n * Alias for {@link vec2.squaredLength}\r\n * @function\r\n */\r\nexport var sqrLen = squaredLength;\r\n\r\n/**\r\n * Perform some operation over an array of vec2s.\r\n *\r\n * @param {Array} a the array of vectors to iterate over\r\n * @param {Number} stride Number of elements between the start of each vec2. If 0 assumes tightly packed\r\n * @param {Number} offset Number of elements to skip at the beginning of the array\r\n * @param {Number} count Number of vec2s to iterate over. If 0 iterates over entire array\r\n * @param {Function} fn Function to call for each vector in the array\r\n * @param {Object} [arg] additional argument to pass to fn\r\n * @returns {Array} a\r\n * @function\r\n */\r\nexport var forEach = function () {\r\n var vec = create();\r\n\r\n return function (a, stride, offset, count, fn, arg) {\r\n var i = void 0,\r\n l = void 0;\r\n if (!stride) {\r\n stride = 2;\r\n }\r\n\r\n if (!offset) {\r\n offset = 0;\r\n }\r\n\r\n if (count) {\r\n l = Math.min(count * stride + offset, a.length);\r\n } else {\r\n l = a.length;\r\n }\r\n\r\n for (i = offset; i < l; i += stride) {\r\n vec[0] = a[i];vec[1] = a[i + 1];\r\n fn(vec, vec, arg);\r\n a[i] = vec[0];a[i + 1] = vec[1];\r\n }\r\n\r\n return a;\r\n };\r\n}();","import {vec2} from 'gl-matrix';\nimport GameObject from './GameObject';\nimport Terrain from '../scene/Terrain';\nimport Coin from '../scene/Coin';\nimport Particle from '../scene/Particle';\nimport Baddie from '../scene/Baddie';\nimport Tile from '../geometry/Tile';\nimport Background from '../geometry/Background';\nimport {gl} from '../globals';\nimport Camera from '../Camera';\nimport OpenGlRenderer from '../rendering/gl/OpenGLRenderer';\nimport ShaderProgram, {Shader} from '../rendering/gl/ShaderProgram';\nimport Texture2D from '../rendering/Texture2D';\nimport LevelGenerator from '../LevelGenerator/LevelGenerator';\nimport sceneAttributes from '../scene/SceneAttributes';\n\nconst spriteSheet = require('../assets/sprites.png');\nconst backgrounds = require('../assets/backgrounds.png');\n\nclass GameEngine {\n\n private static engine: GameEngine;\n\n static getEngine() {\n if (GameEngine.engine) {\n return GameEngine.engine;\n }\n else {\n let tile: Tile = new Tile();\n let background: Background = new Background();\n tile.create();\n background.create()\n GameEngine.engine = new GameEngine(tile, background);\n return GameEngine.engine;\n }\n }\n\n private gameObjects: GameObject[];\n terrainObjects: Terrain[];\n private collidableObjects: GameObject[];\n private lastTick: number;\n private tile: Tile;\n private background: Background;\n private spriteShader: ShaderProgram;\n private backgroundShader: ShaderProgram;\n private renderer: OpenGlRenderer;\n private camera: Camera;\n private downkeys: Set\n private ticks: number;\n private win: boolean = false;\n\n private constructor(_tile: Tile, _background: Background) {\n this.gameObjects = [];\n this.terrainObjects = [];\n this.collidableObjects = [];\n this.tile = _tile;\n this.background = _background;\n this.camera = new Camera(vec2.fromValues(0, -3), 20);\n this.downkeys = new Set();\n this.ticks = 0;\n\n this.spriteShader = new ShaderProgram([\n new Shader(gl.VERTEX_SHADER, require('../shaders/tile-vert.glsl')),\n new Shader(gl.FRAGMENT_SHADER, require('../shaders/tile-frag.glsl')),\n ]);\n //const spriteSheet = 'http://' + window.location.host + '/src/assets/sprites.png'\n let spriteTex: Texture2D = new Texture2D(spriteSheet, 0)\n this.spriteShader.setSpriteTex(spriteTex);\n\n this.backgroundShader = new ShaderProgram([\n new Shader(gl.VERTEX_SHADER, require('../shaders/background-vert.glsl')),\n new Shader(gl.FRAGMENT_SHADER, require('../shaders/background-frag.glsl')),\n ])\n //const backgrounds = 'http://' + window.location.host + '/src/assets/backgrounds.png'\n let backgroundTex: Texture2D = new Texture2D(backgrounds, 1);\n this.backgroundShader.setSpriteTex(backgroundTex);\n\n window.addEventListener(\"keydown\", (keyEvent) => {\n if (!this.downkeys.has(keyEvent.key)) {\n this.gameObjects.forEach((go: GameObject) => {go.onKeyDown(keyEvent.key)});\n }\n this.downkeys.add(keyEvent.key);\n });\n window.addEventListener(\"keyup\", (keyEvent) => {\n this.downkeys.delete(keyEvent.key);\n this.gameObjects.forEach((go: GameObject) => {go.onKeyUp(keyEvent.key)});\n });\n }\n\n generateLevel() {\n let terrain: Terrain = new Terrain();\n this.setTerrain(terrain);\n let densities = [];\n if (sceneAttributes.rhythmType === 3) {\n densities = [0.5, 0, 0.5];\n }\n else {\n for (let i = 0; i < 3; i++) {\n densities.push(sceneAttributes.rhythmType === i ? 1 : 0);\n }\n }\n let levelGen = new LevelGenerator(\n sceneAttributes.numberOfGroups,\n terrain,\n sceneAttributes.rhythmGroupLength,\n sceneAttributes.rhythmGroupLength,\n sceneAttributes.levelDensity,\n 1.0,\n densities\n );\n levelGen.generateRhythms();\n let topTiles = levelGen.generateGeometry();\n levelGen.addCoins(topTiles);\n }\n\n setRenderer(renderer: OpenGlRenderer) {\n this.renderer = renderer;\n }\n\n setTerrain(terrain: Terrain) {\n this.terrainObjects.push(terrain);\n }\n\n getCamera(): Camera {\n return this.camera;\n }\n\n onWin() {\n this.win = true;\n }\n\n drawGameObjects() {\n let tilePositions: vec2[] = [];\n let tileUvs: vec2[] = [];\n let tileMirrors: boolean[] = [];\n let tileScales: number[] = [];\n for (let i = 0; i < this.gameObjects.length; i++) {\n let go: GameObject = this.gameObjects[this.gameObjects.length - i - 1];\n tilePositions.push(go.getPosition());\n tileUvs.push(go.getSpriteUv());\n tileMirrors.push(go.facingLeft());\n tileScales.push(go.size);\n }\n for (let ter of this.terrainObjects) {\n for (let x of ter.tiles.keys()) {\n for (let y of ter.tiles.get(x)) {\n let horCamDist = Math.abs(x + this.camera.position[0]);\n let verCamDist = Math.abs(y + this.camera.position[1]);\n if (horCamDist > this.camera.getWidth() / 2 + 1 ||\n verCamDist > this.camera.getHeight() / 2 + 1\n ) {\n continue;\n }\n tilePositions.push(vec2.fromValues(x, y));\n tileUvs.push(ter.getSpritePosition(x, y));\n tileMirrors.push(false);\n tileScales.push(1);\n }\n }\n }\n\n let totalPositions: vec2\n this.tile.setInstanceVBOs(tilePositions, tileUvs, tileMirrors, tileScales);\n this.tile.setNumInstances(tilePositions.length);\n\n this.backgroundShader.setWin(this.win);\n this.spriteShader.setWin(this.win);\n\n this.renderer.render(this.camera, this.backgroundShader, [this.background]);\n this.renderer.render(this.camera, this.spriteShader, [this.tile]);\n }\n\n // Only call from GameObject class\n addGameObject(go: GameObject) {\n if (this.gameObjects.indexOf(go) < 0) {\n this.gameObjects.push(go);\n if (go.isCollidable() && !go.isPassive()) {\n this.collidableObjects.push(go);\n }\n }\n }\n\n // Only call from the GameObject cass\n destroyGameObject(go: GameObject) {\n let idx = this.gameObjects.indexOf(go);\n if (idx >= 0) {\n this.gameObjects.splice(idx, 1);\n }\n idx = this.collidableObjects.indexOf(go);\n if (idx >= 0) {\n this.collidableObjects.splice(idx, 1);\n }\n }\n\n getCollidableObjects() {\n return this.collidableObjects;\n }\n\n private updateGameObjects(deltaTime: number) {\n\n for (let go of this.gameObjects) {\n if (!this.win) {\n go.physicsUpdate(deltaTime);\n }\n go.onUpdate(deltaTime);\n for (let key of this.downkeys) {\n go.onKeyPress(key);\n }\n }\n\n for (let go1 of this.gameObjects) {\n if (go1.isPassive() || !go1.isCollidable) {\n continue;\n }\n for (let go2 of this.gameObjects) {\n if (!go2.isCollidable || go1 === go2) {\n continue;\n }\n go1.checkObjectCollisions(go2);\n }\n }\n\n this.camera.update();\n }\n\n startGame() {\n this.lastTick = Date.now();\n }\n\n tick() {\n this.ticks++;\n this.backgroundShader.setTime(this.ticks);\n this.spriteShader.setTime(this.ticks);\n let curTime = Date.now();\n let deltaTime = curTime - this.lastTick;\n this.lastTick = curTime;\n this.updateGameObjects(deltaTime / 1000.0);\n }\n}\n\nexport default GameEngine;","import {vec2, vec3} from 'gl-matrix';\nimport GameObject from '../engine/GameObject';\nimport sceneAttributes from '../scene/SceneAttributes';\nimport {spriteCoordinates} from '../constants';\n\nfunction random1(p: vec2, seed: vec2) : number {\n let fract = (n: number) => n - Math.floor(n);\n return fract(Math.sin(vec2.dot(\n vec2.add(vec2.create(), p, seed),\n vec2.fromValues(127.1, 311.7))\n ) * 41352.5245);\n} \n\nclass Terrain {\n\n tiles: Map>;\n randomOffset: number;\n\n constructor() {\n this.tiles = new Map();\n this.randomOffset = Math.random();\n }\n\n static makeTestTerrain(): Terrain {\n let terrain: Terrain = new Terrain();\n for (let i = -2; i < 15; i++) {\n if (i < 4 || i > 7) {\n terrain.setTileAt([i, -3]);\n terrain.setTileAt([i, -4]);\n }\n if (i > 9) {\n terrain.setTileAt([i, -2]);\n }\n if (i > 11) {\n terrain.setTileAt([i, -1]);\n terrain.setTileAt([i, 0]);\n }\n }\n\n terrain.setTileAt([18, 0]);\n terrain.setTileAt([23, 2]);\n return terrain;\n }\n\n tileAt(x: number, y: number): boolean {\n x = Math.floor(x);\n y = Math.floor(y);\n if (this.tiles.has(x)) {\n return this.tiles.get(x).has(y);\n }\n return false;\n }\n\n setTileAt(pos: number[] | vec2) {\n let [x, y] = pos;\n x = Math.floor(x);\n y = Math.floor(y);\n if (this.tiles.has(x)) {\n this.tiles.get(x).add(y);\n }\n else {\n this.tiles.set(x, new Set([y]));\n }\n }\n\n setColumnAt(pos: number[] | vec2) {\n let [x, y] = pos;\n for (let i = sceneAttributes.deathHeight - 1; i <= y; i++) {\n this.setTileAt([x, i]);\n }\n }\n\n getSpritePosition(x: number, y: number): vec2 {\n x = Math.floor(x);\n y = Math.floor(y);\n let tl = this.tileAt(x - 1, y + 1);\n let tc = this.tileAt(x + 0, y + 1);\n let tr = this.tileAt(x + 1, y + 1);\n let cl = this.tileAt(x - 1, y + 0);\n let cr = this.tileAt(x + 1, y + 0);\n let bl = this.tileAt(x - 1, y - 1);\n let bc = this.tileAt(x + 0, y - 1);\n let br = this.tileAt(x + 1, y - 1);\n\n if (!cr && !cl && !tc && !bc) {\n return spriteCoordinates.SPRITE_TERRAIN_SINGLE;\n }\n else if (tc && !cr && !cl) {\n return spriteCoordinates.SPRITE_TERRAIN_COLUMN;\n }\n else if (!cr && !cl) {\n return spriteCoordinates.SPRITE_TERRAIN_CAP;\n }\n else if (!tc && cl && cr) {\n return spriteCoordinates.SPRITE_TERRAIN_TOP;\n }\n else if (!bc && cl && cr) {\n return spriteCoordinates.SPRITE_TERRAIN_BOTTOM;\n }\n else if (!cr && tc && bc) {\n return spriteCoordinates.SPRITE_TERRAIN_RIGHT;\n }\n else if (!cl && tc && bc) {\n return spriteCoordinates.SPRITE_TERRAIN_LEFT;\n }\n else if (!tc && !cl) {\n return spriteCoordinates.SPRITE_TERRAIN_TOP_LEFT;\n }\n else if (!tc && !cr) {\n return spriteCoordinates.SPRITE_TERRAIN_TOP_RIGHT;\n }\n else if (!br && !bc && !cr) {\n return spriteCoordinates.SPRITE_TERRAIN_BOTTOM_RIGHT;\n }\n else if (!bl && !bc && !cl) {\n return spriteCoordinates.SPRITE_TERRAIN_BOTTOM_LEFT;\n }\n else if (!tl && tc && cl && bc && cr) {\n return spriteCoordinates.SPRITE_TERRAIN_LEFT_INNER_CORNER;\n }\n else if (!tr && tc && cl && bc && cr) {\n return spriteCoordinates.SPRITE_TERRAIN_RIGHT_INNER_CORNER;\n }\n else {\n let tileRng = random1(vec2.fromValues(x, y), vec2.fromValues(0.1324, 0.4234 + this.randomOffset));\n if (tileRng < 0.05) {\n return spriteCoordinates.SPRITE_TERRAIN_MIDDLE_ALT_1;\n }\n else if (tileRng < 0.10) {\n return spriteCoordinates.SPRITE_TERRAIN_MIDDLE_ALT_2;\n }\n else if (tileRng < 0.15) {\n return spriteCoordinates.SPRITE_TERRAIN_MIDDLE_ALT_3;\n }\n else if (tileRng < 0.20) {\n return spriteCoordinates.SPRITE_TERRAIN_MIDDLE_ALT_4;\n }\n else {\n return spriteCoordinates.SPRITE_TERRAIN_MIDDLE;\n }\n }\n }\n}\n\nexport default Terrain;","let sceneAttributes = {\n rhythmType: 0,\n rhythmGroupLength: 20,\n levelDensity: 1,\n numberOfGroups: 3,\n\n gravity: 2.5,\n playerSpeed: 9.5,\n playerJump: 5.5,\n maxJumpHold: 0.4,\n maxObjectSpeed: 55,\n deathHeight: -25,\n}\n\nexport default sceneAttributes","import {vec2} from 'gl-matrix';\n\nexport const spriteCoordinates = {\n\n // Terrain\n SPRITE_TERRAIN_TOP_LEFT: vec2.fromValues(0, 0),\n SPRITE_TERRAIN_TOP: vec2.fromValues(1, 0),\n SPRITE_TERRAIN_TOP_RIGHT: vec2.fromValues(2, 0),\n SPRITE_TERRAIN_LEFT: vec2.fromValues(0, 1),\n SPRITE_TERRAIN_MIDDLE: vec2.fromValues(1, 1),\n SPRITE_TERRAIN_MIDDLE_ALT_1: vec2.fromValues(5, 2),\n SPRITE_TERRAIN_MIDDLE_ALT_2: vec2.fromValues(5, 3),\n SPRITE_TERRAIN_MIDDLE_ALT_3: vec2.fromValues(6, 3),\n SPRITE_TERRAIN_MIDDLE_ALT_4: vec2.fromValues(6, 1),\n SPRITE_TERRAIN_RIGHT: vec2.fromValues(2, 1),\n SPRITE_TERRAIN_BOTTOM_LEFT: vec2.fromValues(0, 2),\n SPRITE_TERRAIN_BOTTOM: vec2.fromValues(1, 2),\n SPRITE_TERRAIN_BOTTOM_RIGHT: vec2.fromValues(2, 2),\n SPRITE_TERRAIN_SINGLE: vec2.fromValues(4, 0),\n SPRITE_TERRAIN_LEFT_INNER_CORNER: vec2.fromValues(5, 1),\n SPRITE_TERRAIN_RIGHT_INNER_CORNER: vec2.fromValues(6, 2),\n SPRITE_TERRAIN_COLUMN: vec2.fromValues(7, 1),\n SPRITE_TERRAIN_CAP: vec2.fromValues(7, 0),\n\n // Entities\n SPRITE_PICKUP: vec2.fromValues(0, 3),\n SPRITE_SPIKE: vec2.fromValues(3, 2),\n SPRITE_PLATFORM_LEFT: vec2.fromValues(5, 4),\n SPRITE_PLATFORM_RIGHT: vec2.fromValues(6, 4),\n\n // Player\n SPRITE_PLAYER_STAND: vec2.fromValues(0, 7),\n SPRITE_PLAYER_JUMP: vec2.fromValues(1, 7),\n SPRITE_PLAYER_WALK_1: vec2.fromValues(2, 7),\n SPRITE_PLAYER_WALK_2: vec2.fromValues(3, 7),\n SPRITE_PLAYER_CROUCH: vec2.fromValues(4, 7),\n SPRITE_PLAYER_IDLE1: vec2.fromValues(5, 7),\n SPRITE_PLAYER_IDLE2: vec2.fromValues(6, 7),\n SPRITE_PLAYER_DEATH: vec2.fromValues(7, 7),\n\n // Coin\n SPRITE_COIN_1: vec2.fromValues(0, 3),\n SPRITE_COIN_2: vec2.fromValues(1, 3),\n SPRITE_COIN_3: vec2.fromValues(2, 3),\n SPRITE_COIN_4: vec2.fromValues(0, 4),\n SPRITE_COIN_5: vec2.fromValues(1, 4),\n SPRITE_GEM: vec2.fromValues(6, 5),\n\n // Particles\n SPRITE_Z: vec2.fromValues(6, 6),\n SPRITE_POFF: vec2.fromValues(7, 6),\n SPRITE_SPARKLE: vec2.fromValues(5, 6),\n\n // Enemy\n SPRITE_BADDIE_1: vec2.fromValues(0, 5),\n SPRITE_BADDIE_2: vec2.fromValues(1, 5),\n\n // Checkpoint\n SPRITE_FLAG_1: vec2.fromValues(2, 4),\n SPRITE_FLAG_2: vec2.fromValues(3, 4),\n SPRITE_FLAG_3: vec2.fromValues(4, 4),\n SPRITE_CHECK_1: vec2.fromValues(2, 5),\n SPRITE_CHECK_2: vec2.fromValues(3, 5),\n SPRITE_CHECK_3: vec2.fromValues(4, 5),\n}","import {vec2, vec3} from 'gl-matrix';\nimport Drawable from '../rendering/gl/Drawable';\nimport {gl} from '../globals';\n\nclass Tile extends Drawable {\n indices: Uint32Array;\n positions: Float32Array;\n uvs: Float32Array;\n offsets: Float32Array;\n mirrors: Int32Array;\n scales: Float32Array;\n\n constructor() {\n super();\n }\n\n create() {\n this.indices = new Uint32Array([0, 1, 2, 0, 2, 3]);\n this.positions = new Float32Array([\n 0, 0,\n 1, 0,\n 1, 1,\n 0, 1\n ]);\n\n this.count = this.indices.length;\n\n this.generateIdx();\n this.generatePos();\n this.generateUV();\n this.generateOff();\n this.generateMir();\n this.generateScale();\n\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.bufIdx);\n gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, this.indices, gl.STATIC_DRAW);\n \n gl.bindBuffer(gl.ARRAY_BUFFER, this.bufPos);\n gl.bufferData(gl.ARRAY_BUFFER, this.positions, gl.STATIC_DRAW);\n }\n\n isInstanced() {\n return true;\n }\n\n setInstanceVBOs(posOffsets: vec2[], uvOffsets: vec2[], mirrors: boolean[], scales: number[]) {\n let posOffsetArray = [];\n let uvOffsetArray = [];\n let mirrorArray = [];\n for (let posOffset of posOffsets) {\n posOffsetArray.push(posOffset[0], posOffset[1]);\n }\n for (let uvOffset of uvOffsets) {\n uvOffsetArray.push(uvOffset[0], uvOffset[1]);\n }\n for (let mirror of mirrors) {\n mirrorArray.push(mirror ? 1 : 0);\n }\n this.offsets = new Float32Array(posOffsetArray);\n this.uvs = new Float32Array(uvOffsetArray);\n this.mirrors = new Int32Array(mirrorArray);\n this.scales = new Float32Array(scales);\n gl.bindBuffer(gl.ARRAY_BUFFER, this.bufOff);\n gl.bufferData(gl.ARRAY_BUFFER, this.offsets, gl.STATIC_DRAW);\n gl.bindBuffer(gl.ARRAY_BUFFER, this.bufUV);\n gl.bufferData(gl.ARRAY_BUFFER, this.uvs, gl.STATIC_DRAW);\n gl.bindBuffer(gl.ARRAY_BUFFER, this.bufMir);\n gl.bufferData(gl.ARRAY_BUFFER, this.mirrors, gl.STATIC_DRAW);\n gl.bindBuffer(gl.ARRAY_BUFFER, this.bufScale);\n gl.bufferData(gl.ARRAY_BUFFER, this.scales, gl.STATIC_DRAW);\n }\n}\n\nexport default Tile;","import {gl} from '../../globals';\n\nabstract class Drawable {\n count: number = 0;\n\n bufIdx: WebGLBuffer;\n bufPos: WebGLBuffer;\n bufOff: WebGLBuffer;\n bufUV: WebGLBuffer;\n bufMir: WebGLBuffer;\n bufScale: WebGLBuffer;\n \n idxGenerated: boolean = false;\n posGenerated: boolean = false;\n uvGenerated: boolean = false;\n offGenerated: boolean = false;\n mirGenerated: boolean = false;\n scaleGenerated: boolean = false;\n \n numInstances: number = 0; // How many instances of this Drawable the shader program should draw\n \n abstract create() : void;\n\n abstract isInstanced() : boolean;\n \n destroy() {\n gl.deleteBuffer(this.bufIdx);\n gl.deleteBuffer(this.bufPos);\n gl.deleteBuffer(this.bufOff);\n gl.deleteBuffer(this.bufUV);\n gl.deleteBuffer(this.bufMir);\n gl.deleteBuffer(this.bufScale);\n }\n \n generateIdx() {\n this.idxGenerated = true;\n this.bufIdx = gl.createBuffer();\n }\n \n generatePos() {\n this.posGenerated = true;\n this.bufPos = gl.createBuffer();\n }\n \n generateUV() {\n this.uvGenerated = true;\n this.bufUV = gl.createBuffer();\n }\n\n generateOff() {\n this.offGenerated = true;\n this.bufOff = gl.createBuffer();\n }\n\n generateMir() {\n this.mirGenerated = true;\n this.bufMir = gl.createBuffer();\n }\n\n generateScale() {\n this.scaleGenerated = true;\n this.bufScale = gl.createBuffer();\n }\n \n bindIdx(): boolean {\n if (this.idxGenerated) {\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.bufIdx);\n }\n return this.idxGenerated;\n }\n \n bindPos(): boolean {\n if (this.posGenerated) {\n gl.bindBuffer(gl.ARRAY_BUFFER, this.bufPos);\n }\n return this.posGenerated;\n }\n \n bindUV(): boolean {\n if (this.uvGenerated) {\n gl.bindBuffer(gl.ARRAY_BUFFER, this.bufUV);\n }\n return this.uvGenerated;\n }\n\n bindOff(): boolean {\n if (this.offGenerated) {\n gl.bindBuffer(gl.ARRAY_BUFFER, this.bufOff);\n }\n return this.offGenerated;\n }\n\n bindMir(): boolean {\n if (this.mirGenerated) {\n gl.bindBuffer(gl.ARRAY_BUFFER, this.bufMir);\n }\n return this.mirGenerated;\n }\n\n bindScale(): boolean {\n if (this.scaleGenerated) {\n gl.bindBuffer(gl.ARRAY_BUFFER, this.bufScale);\n }\n return this.scaleGenerated;\n }\n \n elemCount(): number {\n return this.count;\n }\n \n drawMode(): GLenum {\n return gl.TRIANGLES;\n }\n \n setNumInstances(num: number) {\n this.numInstances = num;\n }\n};\n\nexport default Drawable;\n","import {vec2, vec3} from 'gl-matrix';\nimport Drawable from '../rendering/gl/Drawable';\nimport {gl} from '../globals';\n\nclass Background extends Drawable {\n indices: Uint32Array;\n positions: Float32Array;\n uvs: Float32Array;\n offsets: Float32Array;\n mirrors: Int32Array;\n scales: Float32Array;\n\n constructor() {\n super();\n this.numInstances = 1;\n }\n\n create() {\n this.indices = new Uint32Array([0, 1, 2, 0, 2, 3]);\n this.positions = new Float32Array([\n -1.0, -1.0,\n 1.0, -1.0,\n 1.0, 1.0,\n -1.0, 1.0\n ]);\n this.uvs = new Float32Array([\n 0, 1,\n 1, 1,\n 1, 0,\n 0, 0\n ]);\n this.count = this.indices.length;\n\n this.generateIdx();\n this.generatePos();\n this.generateUV();\n\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.bufIdx);\n gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, this.indices, gl.STATIC_DRAW);\n \n gl.bindBuffer(gl.ARRAY_BUFFER, this.bufPos);\n gl.bufferData(gl.ARRAY_BUFFER, this.positions, gl.STATIC_DRAW);\n\n gl.bindBuffer(gl.ARRAY_BUFFER, this.bufUV);\n gl.bufferData(gl.ARRAY_BUFFER, this.uvs, gl.STATIC_DRAW);\n }\n\n isInstanced() {\n return false;\n }\n}\n\nexport default Background;","import {vec2, mat4} from 'gl-matrix';\nimport GameObject from './engine/GameObject';\nimport sceneAttributes from './scene/SceneAttributes';\nimport Player from './scene/Player';\n\nclass Camera {\n controls: any;\n projectionMatrix: mat4 = mat4.create();\n viewMatrix: mat4 = mat4.create();\n aspectRatio: number = 1;\n position: vec2 = vec2.create();\n child: Player = null;\n width: number;\n height: number;\n \n constructor(position: vec2, height: number) {\n this.position = vec2.fromValues(position[0], position[1]);\n this.height = height;\n this.width = height;\n }\n \n setAspectRatio(aspectRatio: number) {\n this.aspectRatio = aspectRatio;\n this.width = this.height * aspectRatio;\n }\n\n getWidth(): number {\n return this.width;\n }\n\n getHeight(): number {\n return this.height;\n }\n \n updateProjectionMatrix() {\n let w = this.width / 2;\n let h = this.height / 2;\n mat4.ortho(this.projectionMatrix, -w, w, -h, h, -1, 1);\n }\n\n setPosition(newPos: vec2 | number[]) {\n this.position = vec2.fromValues(newPos[0], newPos[1]);\n mat4.translate(this.viewMatrix, mat4.create(), [newPos[0], newPos[1], 0]);\n }\n\n translate(amount: vec2 | number[]) {\n vec2.add(this.position, this.position, amount);\n mat4.translate(this.viewMatrix, mat4.create(), [this.position[0], this.position[1], 0]);\n }\n\n\n makeParent(child: Player) {\n this.child = child;\n }\n\n update(): void {\n if (this.child) {\n let yPos = this.position[1];\n let offset = this.child.sPressed && this.child.isGrounded ? -3 : 2\n let goalPos = -Math.max(this.child.getPosition()[1] + offset, sceneAttributes.deathHeight + 10);\n\n if (this.child.isGrounded && Math.abs(yPos - goalPos) > 0.01) {\n yPos += (goalPos - yPos) * 0.06;\n }\n else {\n yPos += (goalPos - yPos) * 0.015;\n }\n this.setPosition([-this.child.getPosition()[0], yPos]); \n }\n }\n};\n\nexport default Camera;\n","import {vec2, vec4, mat4, mat3} from 'gl-matrix';\nimport Drawable from './Drawable';\nimport Texture2D from '../Texture2D';\nimport {gl} from '../../globals';\n\nvar activeProgram: WebGLProgram = null;\n\nexport class Shader {\n shader: WebGLShader;\n \n constructor(type: number, source: string) {\n this.shader = gl.createShader(type);\n gl.shaderSource(this.shader, source);\n gl.compileShader(this.shader);\n \n if (!gl.getShaderParameter(this.shader, gl.COMPILE_STATUS)) {\n throw gl.getShaderInfoLog(this.shader);\n }\n }\n};\n\nclass ShaderProgram {\n prog: WebGLProgram;\n \n attrPos: number;\n attrUV: number;\n attrOff: number;\n attrMir: number;\n attrScale: number;\n \n unifModel: WebGLUniformLocation;\n unifModelInvTr: WebGLUniformLocation;\n unifViewProj: WebGLUniformLocation;\n unifTime: WebGLUniformLocation;\n unifCam: WebGLUniformLocation;\n unifDimensions: WebGLUniformLocation;\n unifSpriteTex: WebGLUniformLocation;\n unifWin: WebGLUniformLocation;\n \n constructor(shaders: Array) {\n this.prog = gl.createProgram();\n \n for (let shader of shaders) {\n gl.attachShader(this.prog, shader.shader);\n }\n gl.linkProgram(this.prog);\n if (!gl.getProgramParameter(this.prog, gl.LINK_STATUS)) {\n throw gl.getProgramInfoLog(this.prog);\n }\n \n this.attrPos = gl.getAttribLocation(this.prog, \"vs_Pos\");\n this.attrUV = gl.getAttribLocation(this.prog, \"vs_UV\");\n this.attrOff = gl.getAttribLocation(this.prog, \"vs_Offset\");\n this.attrMir = gl.getAttribLocation(this.prog, \"vs_MirrorUv\");\n this.attrScale = gl.getAttribLocation(this.prog, \"vs_Scale\");\n \n this.unifModel = gl.getUniformLocation(this.prog, \"u_Model\");\n this.unifModelInvTr = gl.getUniformLocation(this.prog, \"u_ModelInvTr\");\n this.unifViewProj = gl.getUniformLocation(this.prog, \"u_ViewProj\");\n this.unifDimensions = gl.getUniformLocation(this.prog, \"u_Dimensions\");\n this.unifTime = gl.getUniformLocation(this.prog, \"u_Time\");\n this.unifCam = gl.getUniformLocation(this.prog, \"u_CameraPos\");\n this.unifSpriteTex = gl.getUniformLocation(this.prog, \"u_SpriteTex\");\n this.unifWin = gl.getUniformLocation(this.prog, \"u_Win\");\n }\n \n use() {\n if (activeProgram !== this.prog) {\n gl.useProgram(this.prog);\n activeProgram = this.prog;\n }\n }\n \n setCameraPos(pos: vec2) {\n this.use();\n if(this.unifCam !== -1) {\n gl.uniform2f(this.unifCam, pos[0], pos[1]);\n }\n }\n \n setDimensions(width: number, height: number) {\n this.use();\n if(this.unifDimensions !== -1) {\n gl.uniform2f(this.unifDimensions, width, height);\n }\n }\n\n setWin(win: boolean) {\n this.use();\n if (this.unifWin !== -1) {\n gl.uniform1i(this.unifWin, win ? 1 : 0);\n }\n } \n \n setModelMatrix(model: mat4) {\n this.use();\n if (this.unifModel !== -1) {\n gl.uniformMatrix4fv(this.unifModel, false, model);\n }\n \n if (this.unifModelInvTr !== -1) {\n let modelinvtr: mat4 = mat4.create();\n mat4.transpose(modelinvtr, model);\n mat4.invert(modelinvtr, modelinvtr);\n gl.uniformMatrix4fv(this.unifModelInvTr, false, modelinvtr);\n }\n }\n \n setViewProjMatrix(vp: mat4) {\n this.use();\n if (this.unifViewProj !== -1) {\n gl.uniformMatrix4fv(this.unifViewProj, false, vp);\n }\n }\n \n setTime(t: number) {\n this.use();\n if (this.unifTime !== -1) {\n gl.uniform1f(this.unifTime, t);\n }\n }\n\n setSpriteTex(tex: Texture2D) {\n this.use();\n if (this.unifSpriteTex !== -1) {\n tex.loadTexture();\n gl.uniform1i(this.unifSpriteTex, tex.slot);\n }\n }\n \n draw(d: Drawable) {\n this.use();\n \n if (this.attrPos != -1 && d.bindPos()) {\n gl.enableVertexAttribArray(this.attrPos);\n gl.vertexAttribPointer(this.attrPos, 2, gl.FLOAT, false, 0, 0);\n gl.vertexAttribDivisor(this.attrPos, 0); // Advance 1 index in pos VBO for each vertex\n }\n \n if (this.attrUV != -1 && d.bindUV()) {\n gl.enableVertexAttribArray(this.attrUV);\n gl.vertexAttribPointer(this.attrUV, 2, gl.FLOAT, false, 0, 0);\n gl.vertexAttribDivisor(this.attrUV, d.isInstanced() ? 1 : 0);\n }\n\n if (this.attrOff != -1 && d.bindOff()) {\n gl.enableVertexAttribArray(this.attrOff);\n gl.vertexAttribPointer(this.attrOff, 2, gl.FLOAT, false, 0, 0);\n gl.vertexAttribDivisor(this.attrOff, 1);\n }\n\n if (this.attrMir != -1 && d.bindMir()) {\n gl.enableVertexAttribArray(this.attrMir);\n gl.vertexAttribIPointer(this.attrMir, 1, gl.INT, 0, 0);\n gl.vertexAttribDivisor(this.attrMir, 1);\n }\n\n if (this.attrScale != -1 && d.bindScale()) {\n gl.enableVertexAttribArray(this.attrScale);\n gl.vertexAttribPointer(this.attrScale, 1, gl.FLOAT, false, 0, 0);\n gl.vertexAttribDivisor(this.attrScale, 1);\n }\n \n d.bindIdx();\n if (d.isInstanced) {\n gl.drawElementsInstanced(d.drawMode(), d.elemCount(), gl.UNSIGNED_INT, 0, d.numInstances);\n }\n else {\n gl.drawElements(d.drawMode(), d.elemCount(), gl.UNSIGNED_INT, 0);\n }\n \n if (this.attrPos != -1) {\n gl.disableVertexAttribArray(this.attrPos);\n }\n if (this.attrUV != -1) {\n gl.disableVertexAttribArray(this.attrUV);\n }\n if (this.attrOff != -1) {\n gl.disableVertexAttribArray(this.attrOff);\n }\n }\n};\n\nexport default ShaderProgram;\n","import {gl} from '../globals';\n\n// https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API/Tutorial/Using_textures_in_WebGL\n\nclass Texture2D {\n image: HTMLImageElement;\n slot: number;\n loaded: boolean;\n\n constructor(path: string, slot: number = 0) {\n this.loaded = false;\n this.image = new Image();\n this.image.onload = () => {this.loaded = true}\n this.image.src = path;\n this.slot = slot;\n }\n\n private loadTextureCallback(texture: WebGLTexture): void {\n this.loaded = true;\n gl.activeTexture(gl.TEXTURE0 + this.slot);\n gl.bindTexture(gl.TEXTURE_2D, texture);\n\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, this.image);\n }\n\n loadTexture(): void {\n const texture = gl.createTexture();\n if (this.loaded) {\n this.loadTextureCallback(texture);\n }\n else {\n gl.bindTexture(gl.TEXTURE_2D, texture)\n this.image.onload = () => {this.loadTextureCallback(texture)};\n }\n }\n}\n\nexport default Texture2D;","import {vec2} from 'gl-matrix';\nimport RhythmGroup from './RhythmGroup';\nimport RhythmGroupGenerator from './RhythmGroupGenerator';\nimport GeometryGenerator from './GeometryGenerator';\nimport Terrain from '../scene/Terrain';\nimport Coin from '../scene/Coin';\nimport Spike from '../scene/Spike';\nimport Baddie from '../scene/Baddie';\n\nexport default class LevelGenerator {\n \n totalGroups: number;\n terrain: Terrain\n groupGenerator: RhythmGroupGenerator;\n geometryGenerator: GeometryGenerator;\n rhythmGroups: RhythmGroup[];\n\n constructor(\n _totalGroups: number,\n _terrain: Terrain,\n minGroupDuration: number,\n maxGroupDuration: number,\n density: number,\n jumpFrequency: number,\n beatFrequencies: number[]\n ) {\n this.totalGroups = _totalGroups;\n this.terrain = _terrain;\n this.rhythmGroups = [];\n\n // Create the rhythm generator\n this.groupGenerator = new RhythmGroupGenerator(\n minGroupDuration,\n maxGroupDuration,\n density,\n jumpFrequency,\n beatFrequencies\n );\n\n // Create the geometry generator\n this.geometryGenerator = new GeometryGenerator(this.terrain);\n }\n\n generateRhythms() {\n for (let i = 0; i < this.totalGroups; i++) {\n this.rhythmGroups.push(this.groupGenerator.generateRhythmGroup());\n }\n }\n\n generateGeometry(): Set {\n this.geometryGenerator.generateStartArea();\n for (let i = 0; i < this.rhythmGroups.length; i++) {\n let group = this.rhythmGroups[i];\n this.geometryGenerator.generateGroupGeometry(group);\n this.geometryGenerator.generateRestArea(14, i == this.rhythmGroups.length - 1);\n }\n return this.geometryGenerator.topTiles;\n }\n\n addCoins(topTiles: Set) {\n let topTileCopy = new Map();\n for (let tt of topTiles) {\n let tile = [tt[0], tt[1]];\n topTileCopy.set(tile.toString(), tile);\n }\n let platforms = [];\n let leftmost = -1;\n let rightmost = -1;\n while (topTileCopy.size > 0) {\n let curPlatform: number[][] = [];\n let curTile = topTileCopy.values().next().value;\n let curKey = curTile.toString();\n curPlatform.push(curTile);\n leftmost = curTile[0];\n rightmost = curTile[0];\n topTileCopy.delete(curKey);\n while (topTileCopy.has([leftmost - 1, curTile[1]].toString())) {\n let leftTile = [leftmost - 1, curTile[1]];\n curPlatform.push(leftTile)\n topTileCopy.delete(leftTile.toString());\n leftmost--;\n }\n while (topTileCopy.has([rightmost + 1, curTile[1]].toString())) {\n let rightTile = [rightmost + 1, curTile[1]];\n curPlatform.push(rightTile)\n topTileCopy.delete(rightTile.toString());\n rightmost++;\n }\n platforms.push(curPlatform);\n }\n\n let firstPlatform = true;\n for (let platform of platforms) {\n if (Math.random() < 0.25) {\n for (let tile of platform) {\n new Coin([tile[0], tile[1] + 1]);\n }\n }\n else if (\n platform.length >= 3 &&\n Math.random() < 0.2 &&\n !firstPlatform &&\n !this.geometryGenerator.isRestTile(platform[0])\n ) {\n let pos = platform[Math.floor(Math.random() * platform.length)];\n new Baddie([pos[0], pos[1] + 1], this.terrain);\n }\n firstPlatform = false;\n }\n }\n}","import RhythmGroup, {Verb, JumpType} from './RhythmGroup';\nimport sceneAttributes from '../scene/SceneAttributes';\n\nexport enum BeatPattern {\n REGULAR = 0,\n RANDOM = 1,\n SWING = 2\n}\n\nclass RhythmGroupGenerator {\n minGroupDuration: number;\n maxGroupDuration: number;\n patternFrequencies: Map;\n density: number;\n jumpFrequency: number;\n\n constructor(\n minDuration: number,\n maxDuration: number,\n density: number,\n jumpFrequency: number,\n beatFrequencies: number[],\n ) {\n this.minGroupDuration = minDuration;\n this.maxGroupDuration = maxDuration;\n this.patternFrequencies = new Map();\n this.jumpFrequency = jumpFrequency;\n\n let normalizer = beatFrequencies.reduce((prev: number, cur: number) => prev + cur);\n let patterns = [BeatPattern.REGULAR, BeatPattern.RANDOM, BeatPattern.SWING];\n for (let idx = 0; idx < patterns.length; idx++) {\n this.patternFrequencies.set(patterns[idx], beatFrequencies[idx] / normalizer);\n }\n this.density = density;\n }\n\n private getBeatTimes(groupDuration: number, pattern: BeatPattern): number[] {\n let out: number[] = [];\n let amount = Math.floor(groupDuration * this.density);\n\n let shortBeat = groupDuration / (2 * amount - 1.0);\n let longBeat = 3 * shortBeat;\n\n for (let i = 0; i < amount; i++) {\n if (pattern === BeatPattern.REGULAR) {\n out.push(i * (groupDuration * 1.0 / amount))\n }\n else if (pattern === BeatPattern.RANDOM) {\n out.push(Math.random() * groupDuration);\n }\n else if (pattern === BeatPattern.SWING) {\n if (i % 2 == 0) {\n out.push((i / 2) * (longBeat + shortBeat));\n }\n else {\n out.push(((i - 1) / 2) * (longBeat + shortBeat) + longBeat);\n }\n }\n }\n return out;\n }\n\n generateRhythmGroup(): RhythmGroup {\n let groupDuration: number = this.minGroupDuration === this.maxGroupDuration ?\n this.maxGroupDuration :\n Math.abs(Math.random() * (this.maxGroupDuration - this.minGroupDuration) + this.minGroupDuration);\n\n // Decide the beat pattern randomly\n let rng = Math.random();\n let cumulative = 0;\n let chosenPattern: BeatPattern;\n for (let frequency of this.patternFrequencies) {\n cumulative += frequency[1];\n if (cumulative > rng) {\n chosenPattern = frequency[0];\n break;\n }\n }\n\n let group: RhythmGroup = new RhythmGroup(groupDuration);\n let beatTimes: number[] = this.getBeatTimes(groupDuration, chosenPattern);\n\n let maxJumpHold = sceneAttributes.maxJumpHold;\n let jumpLengths = [JumpType.SHORT, JumpType.MEDIUM, JumpType.LONG];\n\n let lastJumpTime = -1;\n let lastJumpDuration = 0;\n group.addAction(Verb.MOVE, 0, groupDuration);\n for (let time of beatTimes) {\n if (time > lastJumpTime + lastJumpDuration) {\n if (Math.random() < this.jumpFrequency) {\n let jumpType = Math.floor(Math.random() * jumpLengths.length);\n group.addAction(Verb.JUMP, time, jumpLengths[jumpType]);\n }\n }\n }\n\n return group\n }\n}\n\nexport default RhythmGroupGenerator;","import sceneAttributes from '../scene/SceneAttributes';\n\nexport enum Verb {\n MOVE,\n JUMP\n}\n\nexport enum JumpType {\n SHORT = sceneAttributes.maxJumpHold * 0.75,\n MEDIUM = sceneAttributes.maxJumpHold * 0.875,\n LONG = sceneAttributes.maxJumpHold,\n}\n\nexport class Action {\n type: Verb;\n startTime: number;\n duration: number;\n\n constructor(_type: Verb, _startTime: number, _duration: number) {\n this.type = _type;\n this.startTime = _startTime;\n this.duration = _duration;\n }\n}\n\nclass RhythmGroup {\n\n actions: Action[];\n duration: number;\n\n constructor(_duration: number) {\n this.duration = _duration;\n this.actions = [];\n }\n\n addAction(type: Verb, startTime: number, actionDuration: number): boolean {\n\n let groupDuration = this.duration;\n if (startTime > groupDuration) {\n return false;\n }\n\n if (startTime + actionDuration > groupDuration && type !== Verb.JUMP) {\n actionDuration = groupDuration - startTime;\n }\n let newAction = new Action(type, startTime, actionDuration);\n this.actions.push(newAction);\n return true;\n }\n}\n\nexport default RhythmGroup;","import {vec2} from 'gl-matrix';\nimport RhythmGroupGenerator from './RhythmGroupGenerator'\nimport RhythmGroup, {Action, Verb, JumpType} from './RhythmGroup';\nimport sceneAttributes from '../scene/SceneAttributes';\nimport Terrain from '../scene/Terrain';\nimport Spike from '../scene/Spike';\nimport Coin from '../scene/Coin';\nimport Checkpoint from '../scene/Checkpoint';\nimport Gem from '../scene/Gem';\nimport Platform from '../scene/Platform';\nimport {spriteCoordinates} from '../constants';\n\ntype MovementState = {state: string, duration: number}\ntype JumpState = {startTime: number, jumpHold: number};\n\nexport default class GeometryGenerator {\n\n terrain: Terrain;\n currentPos: vec2;\n jumpHeights: Map\n curTime: number;\n topTiles: Set;\n restTiles: Map>;\n\n constructor(_terrain: Terrain) {\n this.terrain = _terrain;\n this.currentPos = vec2.fromValues(-3, -1);\n this.jumpHeights = new Map();\n this.jumpHeights.set(JumpType.SHORT, this.getJumpHeight(JumpType.SHORT));\n this.jumpHeights.set(JumpType.MEDIUM, this.getJumpHeight(JumpType.MEDIUM));\n this.jumpHeights.set(JumpType.LONG, this.getJumpHeight(JumpType.LONG));\n this.topTiles = new Set();\n this.restTiles = new Map();\n }\n\n private queuesFromRhythm(rhythm: RhythmGroup): {moveStates: MovementState[], jumpStates: JumpState[]} {\n let movement: MovementState[] = [];\n let jumps: JumpState[] = [];\n let lastMoveStartTime: number = 0;\n let lastMoveDuration: number = 0;\n for (let action of rhythm.actions) {\n if (action.type === Verb.MOVE) {\n if (movement.length > 0) {\n let curMoveStartTime = action.startTime;\n let lastMove = movement[movement.length - 1];\n movement.push({\n state: \"waiting\",\n duration: curMoveStartTime - (lastMoveStartTime + lastMoveDuration)\n });\n }\n lastMoveDuration = action.duration;\n movement.push({\n state: \"moving\",\n duration: action.duration\n })\n }\n else if (action.type === Verb.JUMP) {\n jumps.push({\n startTime: action.startTime,\n jumpHold: action.duration,\n });\n }\n }\n return {moveStates: movement, jumpStates: jumps};\n }\n\n // Calculate the height of a jump when the jump button is held for a specified amount of time\n // Also find the time it takes to get to that height\n private getJumpHeight(jumpHold: number): {height: number, time: number} {\n // This is, at its core, a ballistics problem. However, it's complicated by the fact\n // that the velocity is controlled by the player even after the jump begins. This means \n // that to find the max height, we have to separate the jump into 2 parts: the part \n // where the jump key is being held, and the part afterward. We have to find the height\n // and upward velocity acheived at the end of the first part, and then the second part\n // just becomes a simple physics problem. Getting those vectors will rely heavily on the\n // jumping implementation though.\n let gravity = sceneAttributes.gravity;\n let jumpVel = sceneAttributes.playerJump;\n\n // To simplify the math (and because it wouldn't be entirely accurate anyway)\n // I am just going to simulate jumping (assuming perfect framerate)\n let vel = 0;\n let inputvel = 0;\n let pos = 0;\n let jumpTime = jumpHold;\n let totalTime = 0;\n let flag = 0\n while (true) {\n if (flag > 1) {\n if (vel - gravity < 0) {\n break;\n }\n vel -= gravity;\n }\n flag++;\n vel += inputvel;\n pos += vel / 60.0;\n if (jumpTime > 0) {\n jumpTime -= 0.016;\n let t = Math.max(0, jumpTime / 0.4);\n inputvel = t * sceneAttributes.playerJump;\n }\n else {\n inputvel = 0\n }\n totalTime += 1.0 / 60;\n }\n return {height: pos, time: totalTime};\n }\n\n private addTopTile(tile: number[]|vec2, rest: boolean = false) {\n this.topTiles.add([tile[0], tile[1]]);\n if (rest) {\n if (this.restTiles.has(tile[0])) {\n this.restTiles.get(tile[0]).add(tile[1]);\n }\n else {\n this.restTiles.set(tile[0], new Set([tile[1]]));\n }\n }\n }\n\n isRestTile(tile: vec2|number[]): boolean {\n if (this.restTiles.has(tile[0])) {\n return this.restTiles.get(tile[0]).has(tile[1]);\n }\n return false;\n }\n\n private generateSimpleJump(jumpType: JumpType) {\n let height = this.jumpHeights.get(jumpType);\n let minHeight = Math.max(-4, sceneAttributes.deathHeight + 5 - this.currentPos[1]);\n let endHeight = Math.floor(Math.random() * (height.height - minHeight) + minHeight);\n let totalFrames = height.time * 60 + Math.sqrt((height.height - endHeight) / (sceneAttributes.gravity / 60));\n let totalDistance = Math.floor(sceneAttributes.playerSpeed * totalFrames / 60);\n\n if (totalDistance === 2 && endHeight === 0){\n endHeight = 1\n }\n\n this.currentPos[0] += totalDistance;\n this.currentPos[1] += endHeight;\n this.terrain.setTileAt(this.currentPos);\n this.addTopTile(this.currentPos);\n }\n\n private generateSpikeJump(jumpType: JumpType) {\n let height = this.jumpHeights.get(jumpType);\n let peakDistance = Math.floor(sceneAttributes.playerSpeed * height.time);\n let totalFrames = height.time * 60 + Math.sqrt(height.height / (sceneAttributes.gravity / 60));\n let totalDistance = Math.floor(sceneAttributes.playerSpeed * totalFrames / 60) + 2;\n \n for (let i = 0; i <= totalDistance; i++) {\n if (i === peakDistance) {\n this.terrain.setColumnAt([this.currentPos[0] + i, this.currentPos[1] - 1]);\n }\n else {\n this.terrain.setColumnAt([this.currentPos[0] + i, this.currentPos[1]]);\n this.addTopTile([this.currentPos[0] + i, this.currentPos[1]]);\n }\n }\n\n for (let i = 0; i < height.height; i++) {\n new Spike([this.currentPos[0] + peakDistance, this.currentPos[1] + i]);\n }\n for (let i = 0; i < 4; i++) {\n new Spike([\n this.currentPos[0] + peakDistance,\n height.height + this.currentPos[1] + 4 + i]);\n }\n\n if (Math.random() < 0.25) {\n new Coin([this.currentPos[0] + peakDistance + 0, this.currentPos[1] + height.height + 1]);\n }\n\n for (let i = -1; i <= 1; i++) {\n for (let j = 0; j <= 1; j++) {\n this.terrain.setTileAt([\n this.currentPos[0] + peakDistance + i,\n height.height + this.currentPos[1] + 9 + j\n ]);\n }\n }\n\n this.currentPos[0] += totalDistance;\n }\n\n generateSpikeGap (jumpType: JumpType) {\n let height = this.jumpHeights.get(jumpType);\n let totalFrames = height.time * 60 + Math.sqrt((height.height) / (sceneAttributes.gravity / 60));\n let totalDistance = Math.floor(sceneAttributes.playerSpeed * totalFrames / 60);\n let peakDistance = Math.floor(sceneAttributes.playerSpeed * height.time);\n\n for (let jump of this.jumpHeights.keys()) {\n if (jumpType != jump) {\n new Spike([\n this.currentPos[0] + peakDistance,\n this.currentPos[1] + this.jumpHeights.get(jump).height\n ])\n }\n else {\n new Coin([\n this.currentPos[0] + peakDistance,\n this.currentPos[1] + this.jumpHeights.get(jump).height\n ])\n }\n }\n\n this.currentPos[0] += totalDistance;\n this.terrain.setTileAt(this.currentPos);\n this.addTopTile(this.currentPos);\n }\n\n private generateStraightPath(length: number) {\n for (let i = 0; i < Math.round(length); i++) {\n this.terrain.setColumnAt(this.currentPos);\n this.addTopTile(this.currentPos);\n this.currentPos[0] += 1;\n }\n }\n\n private gentleDecline(length: number, decline: number) {\n let currentHeight = this.currentPos[1];\n for (let i = 0; i < Math.round(length); i++) {\n this.terrain.setColumnAt(this.currentPos);\n this.addTopTile(this.currentPos);\n currentHeight -= decline / length;\n this.currentPos[0] += 1;\n this.currentPos[1] = Math.round(currentHeight);\n }\n }\n\n generateGroupGeometry(rhythm: RhythmGroup) {\n let playerSpeed = sceneAttributes.playerSpeed;\n let queues = this.queuesFromRhythm(rhythm);\n let curTime = 0;\n\n for (let i = 0; i < queues.jumpStates.length; i++) {\n\n let jump = queues.jumpStates[i];\n let beatDuration = rhythm.duration - jump.startTime;\n if (i < queues.jumpStates.length - 1) {\n beatDuration = queues.jumpStates[i + 1].startTime - jump.startTime;\n }\n\n let prevX = this.currentPos[0];\n let obstacleType = Math.random();\n if (obstacleType < 0.2) {\n this.generateSpikeGap(jump.jumpHold);\n }\n else if (obstacleType < 0.4) {\n this.generateSpikeJump(jump.jumpHold);\n }\n else {\n this.generateSimpleJump(jump.jumpHold);\n }\n let jumpTime = (this.currentPos[0] - prevX) / playerSpeed;\n let remainingTime = beatDuration - jumpTime;\n if (remainingTime > 0) {\n let remainingLength = remainingTime * playerSpeed;\n if (Math.random() < 0.25) {\n this.gentleDecline(remainingLength, Math.random() < 0.5 ? 1 : 2);\n }\n else {\n this.generateStraightPath(remainingLength);\n }\n }\n }\n }\n\n\n generateRestArea(length: number, lastRest: boolean = false) {\n for (let i = 1; i <= length; i++) {\n this.addTopTile([this.currentPos[0] + i, this.currentPos[1] - 1], true);\n this.terrain.setTileAt([this.currentPos[0] + i, this.currentPos[1] - 1]);\n this.terrain.setTileAt([this.currentPos[0] + i, this.currentPos[1] - 2]);\n }\n\n this.terrain.setColumnAt([this.currentPos[0] + 1, this.currentPos[1] - 2])\n this.terrain.setColumnAt([this.currentPos[0] + length, this.currentPos[1] - 2])\n\n this.currentPos[0] += length;\n this.currentPos[1] -= 1;\n\n if (lastRest) {\n new Gem([\n Math.floor(this.currentPos[0] - length / 2),\n this.currentPos[1] + 2\n ]);\n }\n else {\n new Checkpoint([\n Math.floor(this.currentPos[0] - length / 2),\n this.currentPos[1] + 1\n ]);\n } \n }\n\n generateStartArea() {\n for (let i = -4; i <= 4; i++) {\n this.terrain.setTileAt([i, 0]);\n this.terrain.setTileAt([i, -1]);\n this.terrain.setTileAt([i, -3]);\n this.terrain.setTileAt([i, -4]);\n\n if (i !== -2 && i !== 2) {\n this.terrain.setTileAt([i, -2]);\n }\n this.currentPos[0] = 4;\n this.currentPos[1] = 0;\n }\n\n for (let i = sceneAttributes.deathHeight; i < -4; i++) {\n this.terrain.setTileAt([-4, i]);\n this.terrain.setTileAt([4, i]);\n }\n\n let m = (time: number) => {\n return vec2.fromValues(\n 0,\n 1 - Math.cos(time)\n );\n }\n }\n}\n","import {vec2, vec3} from 'gl-matrix';\nimport GameObject from '../engine/GameObject';\nimport sceneAttributes from './SceneAttributes';\nimport Particle from './Particle';\nimport {spriteCoordinates} from '../constants';\n\nclass Spike extends GameObject {\n\n constructor(pos: vec2 | number[]) {\n super(false, true, true);\n this.setPosition(pos);\n }\n\n getSpriteUv() {\n return spriteCoordinates.SPRITE_SPIKE;\n }\n}\n\nexport default Spike","import {vec2} from 'gl-matrix';\nimport Drawable from './../rendering/gl/Drawable';\nimport GameEngine from './GameEngine';\nimport Terrain from '../scene/Terrain';\nimport sceneAttributes from '../scene/SceneAttributes';\n\nabstract class GameObject {\n private drawable: Drawable;\n private position: vec2;\n private velocity: vec2;\n public size: number;\n protected inputVelocity: vec2;\n protected prevInputVelocty: vec2;\n protected passive: boolean;\n protected collidable: boolean;\n protected dynamic: boolean;\n protected grounded: boolean;\n protected direction: number;\n protected goCollide: boolean;\n get isGrounded() : boolean {\n return this.grounded;\n }\n\n constructor(isDynamic: boolean, isPassive: boolean, isCollidable: boolean) {\n this.dynamic = isDynamic;\n this.passive = isPassive;\n this.collidable = isCollidable;\n this.position = vec2.fromValues(0, 0);\n this.velocity = vec2.fromValues(0, 0);\n this.inputVelocity = vec2.fromValues(0, 0);\n this.prevInputVelocty = vec2.fromValues(0, 0);\n this.direction = 1;\n this.size = 1;\n\n GameEngine.getEngine().addGameObject(this);\n }\n\n destroy(): void {\n GameEngine.getEngine().destroyGameObject(this);\n this.drawable = null;\n }\n\n isPassive(): boolean {\n return this.passive;\n }\n\n isCollidable(): boolean {\n return this.collidable;\n }\n\n facingLeft(): boolean {\n return this.direction === -1;\n }\n\n getPosition(): vec2 {\n return vec2.fromValues(this.position[0], this.position[1]);\n }\n\n setPosition(newPosition: vec2 | number[]): void {\n this.position[0] = newPosition[0];\n this.position[1] = newPosition[1];\n }\n\n scale(amount: number) {\n this.size *= amount;\n }\n\n setSize(size: number) {\n this.size = size;\n }\n\n abstract getSpriteUv(): vec2;\n\n translate(amount: vec2|number[]): void {\n vec2.add(this.position, this.position, amount);\n }\n\n getVelocity(): vec2 {\n return vec2.fromValues(this.velocity[0], this.velocity[1]);\n }\n\n physicsUpdate(delta: number): void {\n if (!this.dynamic) {\n return;\n }\n\n let prevVelocity: vec2 = this.velocity;\n //this.velocity = vec2.fromValues(0, 0);\n\n // Apply gravity\n if (this.grounded) {\n this.velocity[1] = 0;\n }\n else {\n this.velocity[1] -= sceneAttributes.gravity;\n }\n\n // Apply non-physical motion\n if (Math.abs(this.inputVelocity[0]) > 0.001) {\n let influence = this.grounded ? 0.2 : 0.11;\n this.velocity[0] = (1 - influence) * this.velocity[0] + influence * this.inputVelocity[0];\n }\n else if (this.grounded) {\n this.velocity[0] *= 0.7;\n }\n else {\n this.velocity[0] *= 0.95;\n }\n this.velocity[1] += this.inputVelocity[1];\n // Scale back velocity if it's too high\n let speed: number = vec2.length(this.velocity);\n if (speed > sceneAttributes.maxObjectSpeed) {\n vec2.scale(this.velocity, this.velocity, sceneAttributes.maxObjectSpeed / speed);\n }\n\n // Update the object position, accounting for collisions\n // We assume that before applying any motion this frame, the object is not intersecting anything\n // We will use the following technique to do this:\n // - Apply the velocity vector to our position in the x axis only\n // - Check if, in this new position, the object intersects with the terrain (in all axes)\n // - If the object is now intersecting with a tile, we respond by pushing back the object by\n // the amount of the overlap\n // - Note that this pushback will only have to be in the x axis\n // - Repeat with the y-axis\n let deltaPos: vec2 = vec2.scale(vec2.create(), this.velocity, 1.0 / 60);\n this.goCollide = false;\n for (let axis = 0; axis < 2; axis++) {\n if (Math.abs(deltaPos[axis]) > 10e-6) {\n this.position[axis] += deltaPos[axis];\n let adjacentTiles: number[][] = this.getAdjacentTiles();\n for (let tile of adjacentTiles) {\n for (let terrain of GameEngine.getEngine().terrainObjects) {\n let response: vec2 = this.testTerrainCollision(terrain, tile, axis);\n vec2.add(this.position, this.position, response)\n }\n }\n for (let go of GameEngine.getEngine().getCollidableObjects()) {\n if (go.constructor.name === \"Platform\") {\n let response: vec2 = this.goCollisionResponse(go, axis);\n if (response[1] > 0.0001) {\n this.goCollide = true;\n }\n vec2.add(this.position, this.position, response);\n }\n }\n }\n }\n\n let groundedCheck = this.checkIfGrounded();\n if (!this.grounded && groundedCheck) {\n this.onGrounded(this.velocity[1]);\n }\n this.grounded = groundedCheck;\n vec2.copy(this.prevInputVelocty, this.inputVelocity);\n this.inputVelocity = vec2.fromValues(0, 0);\n }\n\n checkObjectCollisions(other: GameObject) {\n if (this.testGameObjectCollision(other)) {\n this.onCollision(other);\n }\n }\n\n private getAdjacentTiles(): number[][] {\n let x = Math.floor(this.position[0]);\n let y = Math.floor(this.position[1]);\n return [\n [x - 1, y + 1], [x + 0, y + 1], [x + 1, y + 1],\n [x - 1, y + 0], [x + 0, y + 0], [x + 1, y + 0],\n [x - 1, y - 1], [x + 0, y - 1], [x + 1, y - 1]\n ];\n }\n\n private testTerrainCollision(terrain: Terrain, tile: vec2 | number[], axis: number): vec2 {\n let tX = tile[0];\n let tY = tile[1];\n let pX = this.position[0];\n let pY = this.position[1];\n\n if (!terrain.tileAt(tX, tY)) {\n return vec2.create();\n }\n \n let xIntersect: boolean = pX < (tX + 1) && tX < (pX + 1);\n let yIntersect: boolean = pY < (tY + 1) && tY < (pY + 1);\n let isIntersecting: boolean = xIntersect && yIntersect;\n\n let axisVelocity: number = this.velocity[axis];\n if (isIntersecting) {\n let pushback: vec2 = vec2.create();\n if (axisVelocity > 0) {\n let isY = (axis == 1) ? 0 : 0;\n pushback[axis] = tile[axis] - (this.position[axis] + 1 + isY);\n }\n else {\n pushback[axis] = (tile[axis] + 1) - this.position[axis];\n }\n return pushback;\n }\n else {\n return vec2.create();\n }\n }\n\n private testGameObjectCollision(other: GameObject): boolean {\n let tX = other.getPosition()[0];\n let tY = other.getPosition()[1];\n let pX = this.position[0];\n let pY = this.position[1];\n\n // Anti-frustration feature\n if (other.constructor.name === \"Spike\" || other.constructor.name === \"Baddie\") {\n tX += 0.5;\n tY += 0.5;\n let xIntersect: boolean = tX > pX && tX < pX + 1;\n let yIntersect: boolean = tY > pY && tY < pY + 1;\n return xIntersect && yIntersect;;\n }\n \n let xIntersect: boolean = pX < (tX + 0.99) && tX < (pX + 0.99);\n let yIntersect: boolean = pY < (tY + 0.99) && tY < (pY + 0.99);\n let isIntersecting: boolean = xIntersect && yIntersect;\n return isIntersecting;\n }\n\n private goCollisionResponse(other: GameObject, axis: number): vec2 {\n let tX = other.position[0];\n let tY = other.position[1];\n let pX = this.position[0];\n let pY = this.position[1];\n\n if (other.passive || !other.collidable) {\n return vec2.create();\n }\n \n let xIntersect: boolean = pX < (tX + 1) && tX < (pX + 1);\n let yIntersect: boolean = pY < (tY + 1) && tY < (pY + 1);\n let isIntersecting: boolean = xIntersect && yIntersect;\n\n let axisVelocity: number = this.velocity[axis];\n if (isIntersecting) {\n let pushback: vec2 = vec2.create();\n if (axisVelocity > 0) {\n let isY = (axis == 1) ? 0 : 0;\n pushback[axis] = other.position[axis] - (this.position[axis] + 1 + isY);\n }\n else {\n pushback[axis] = (other.position[axis] + 1) - this.position[axis];\n }\n return pushback;\n }\n else {\n return vec2.create();\n }\n }\n\n private checkIfGrounded(): boolean {\n\n // Check if we would be colliding with a block if we were just a teensy bit lower\n let newPos: vec2 = vec2.subtract(vec2.create(), this.position, vec2.fromValues(0, 0.05));\n let gridPosition: vec2 = vec2.fromValues(\n Math.floor(newPos[0]),\n Math.floor(newPos[1])\n );\n\n for (let x = 0; x < 2; x++) {\n let tX = gridPosition[0] + x;\n let tY = gridPosition[1];\n let existsTile = false;\n for (let terrain of GameEngine.getEngine().terrainObjects) {\n if (terrain.tileAt(tX, tY)) {\n existsTile = true;\n break;\n }\n }\n if (!existsTile) {\n continue;\n }\n if (newPos[0] < (tX + 1) && tX < (newPos[0] + 1) &&\n newPos[1] < (tY + 1) && tY < (newPos[1] + 1))\n {\n return true;\n }\n }\n\n let oldPos = [this.position[0], this.position[1]];\n this.setPosition(newPos);\n for (let go of GameEngine.getEngine().getCollidableObjects()) {\n if (go.constructor.name === \"Platform\" && this.testGameObjectCollision(go)) {\n this.setPosition(oldPos);\n return true;\n }\n }\n this.setPosition(oldPos);\n return false;\n }\n\n onUpdate(delta: number): void {/* Please implement me*/};\n\n onKeyPress(key: string): void {/* Or don't */};\n\n onKeyDown(key: string): void {/* I don't really care too much at this point */};\n\n onKeyUp(key: string): void {/* I'm just holding out til graduation at this point */}\n\n protected onGrounded(verticalVelocity: number): void {}\n\n protected onCollision(other: GameObject): void {}\n\n}\n\nexport default GameObject;","import {vec2, vec3} from 'gl-matrix';\nimport GameObject from '../engine/GameObject';\nimport sceneAttributes from './SceneAttributes';\nimport Particle from './Particle';\nimport {spriteCoordinates} from '../constants';\n\nconst ANIMATION_FRAME_LENGTH: number = 5;\n\nclass Coin extends GameObject {\n\n animationFrame: number;\n\n constructor(pos: vec2 | number[]) {\n super(false, true, true);\n this.animationFrame = 0;\n this.setPosition(pos);\n this.direction = 1;\n }\n\n onUpdate(delta: number) {\n this.animationFrame = (this.animationFrame + 1) % (ANIMATION_FRAME_LENGTH * 8);\n if (Math.random() < 0.01) {\n let sparkle = new Particle(\n spriteCoordinates.SPRITE_SPARKLE,\n vec2.fromValues(\n this.getPosition()[0] + Math.random() - 0.5,\n this.getPosition()[1] + Math.random() - 0.5,\n ),\n 0.5\n );\n sparkle.setMovement((time: number) => {\n sparkle.setSize(time * (0.5 - time) * 8);\n return vec2.create();\n });\n }\n }\n\n getSpriteUv(): vec2 {\n if (this.animationFrame < ANIMATION_FRAME_LENGTH * 1) {\n return spriteCoordinates.SPRITE_COIN_1\n }\n else if (this.animationFrame < ANIMATION_FRAME_LENGTH * 2) {\n return spriteCoordinates.SPRITE_COIN_2;\n }\n else if (this.animationFrame < ANIMATION_FRAME_LENGTH * 3) {\n return spriteCoordinates.SPRITE_COIN_3;\n }\n else if (this.animationFrame < ANIMATION_FRAME_LENGTH * 4) {\n return spriteCoordinates.SPRITE_COIN_4;\n }\n else if (this.animationFrame < ANIMATION_FRAME_LENGTH * 5) {\n //this.direction = this.direction = -1;\n return spriteCoordinates.SPRITE_COIN_5;\n }\n else if (this.animationFrame < ANIMATION_FRAME_LENGTH * 6) {\n return spriteCoordinates.SPRITE_COIN_4;\n }\n else if (this.animationFrame < ANIMATION_FRAME_LENGTH * 7) {\n return spriteCoordinates.SPRITE_COIN_3;\n }\n else if (this.animationFrame < ANIMATION_FRAME_LENGTH * 8) {\n return spriteCoordinates.SPRITE_COIN_2;\n }\n\n }\n}\n\nexport default Coin;","import {vec2, vec3} from 'gl-matrix';\nimport GameObject from '../engine/GameObject';\n\nexport default class Particle extends GameObject {\n\n private spriteUv: vec2;\n private lifetime: number;\n private time: number;\n private movement: (t: number) => vec2;\n private startingPos: vec2;\n\n\n constructor (_spriteUv: vec2, _startingPos: vec2, _lifetime: number = Infinity) {\n super(false, true, false);\n this.spriteUv = _spriteUv;\n this.lifetime = _lifetime;\n this.time = 0;\n this.startingPos = _startingPos;\n this.movement = () => vec2.create();;\n }\n\n setMovement(move: (time: number) => vec2) {\n this.movement = move;\n }\n\n onUpdate (delta: number) {\n this.time += delta;\n if (this.time > this.lifetime) {\n this.destroy();\n }\n this.setPosition(vec2.add(vec2.create(), this.movement(this.time), this.startingPos));\n }\n\n getSpriteUv() {\n return this.spriteUv;\n }\n\n}","import {vec2, vec3} from 'gl-matrix';\nimport GameObject from '../engine/GameObject';\nimport sceneAttributes from './SceneAttributes';\nimport Particle from './Particle';\nimport {spriteCoordinates} from '../constants';\n\nconst ANIMATION_FRAME_LENGTH: number = 10;\n\nfunction random1(p: vec2, seed: vec2) : number {\n let fract = (n: number) => n - Math.floor(n);\n return fract(Math.sin(vec2.dot(\n vec2.add(vec2.create(), p, seed),\n vec2.fromValues(127.1, 311.7))\n ) * 41352.5245);\n} \n\nclass Checkpoint extends GameObject {\n\n animationFrame: number;\n claimed: boolean;\n\n constructor(pos: vec2 | number[]) {\n super(false, false, true);\n this.animationFrame = 0;\n this.setPosition(pos);\n this.claimed = false;\n }\n\n onUpdate(delta: number) {\n this.animationFrame = (this.animationFrame + 1) % (ANIMATION_FRAME_LENGTH * 3);\n }\n\n onCollision(other: GameObject) {\n if (other.constructor.name === \"Player\" && !this.claimed) {\n this.claimed = true;\n let numParticles = 30;\n for (let i = 0; i < numParticles; i++) {\n let p = new Particle(\n spriteCoordinates.SPRITE_SPARKLE,\n this.getPosition(),\n 1\n );\n p.setMovement((time: number) => {\n let angle = 2 * Math.floor(i / 2) * Math.PI / numParticles;\n let offset = random1(vec2.fromValues(i, 0), vec2.fromValues(0.231, 0.5436)) * 0.5;\n p.setSize(1 - time);\n return vec2.fromValues(\n Math.cos(angle) * time * 8 + offset,\n Math.sin(angle) * time * 8 + offset - time * time * 10\n );\n })\n }\n }\n }\n\n getSpriteUv(): vec2 {\n if (this.claimed) {\n if (this.animationFrame < 1 * ANIMATION_FRAME_LENGTH) {\n return spriteCoordinates.SPRITE_CHECK_1;\n }\n else if (this.animationFrame < 2 * ANIMATION_FRAME_LENGTH) {\n return spriteCoordinates.SPRITE_CHECK_2;\n }\n else {\n return spriteCoordinates.SPRITE_CHECK_3;\n }\n }\n else {\n if (this.animationFrame < 1 * ANIMATION_FRAME_LENGTH) {\n return spriteCoordinates.SPRITE_FLAG_1;\n }\n else if (this.animationFrame < 2 * ANIMATION_FRAME_LENGTH) {\n return spriteCoordinates.SPRITE_FLAG_2;\n }\n else {\n return spriteCoordinates.SPRITE_FLAG_3;\n }\n }\n }\n}\n\nexport default Checkpoint;","import {vec2, vec3} from 'gl-matrix';\nimport GameObject from '../engine/GameObject';\nimport GameEngine from '../engine/GameEngine';\nimport sceneAttributes from './SceneAttributes';\nimport Particle from './Particle';\nimport {spriteCoordinates} from '../constants';\n\nexport default class Gem extends GameObject {\n\n constructor(pos: vec2 | number[]) {\n super(false, false, true);\n this.setPosition(pos);\n }\n\n getSpriteUv(): vec2 {\n return spriteCoordinates.SPRITE_GEM;\n }\n\n onUpdate(delta: number) {\n if (Math.random() < 0.02) {\n let sparkle = new Particle(\n spriteCoordinates.SPRITE_SPARKLE,\n vec2.fromValues(\n this.getPosition()[0] + Math.random() - 0.5,\n this.getPosition()[1] + Math.random() - 0.5,\n ),\n 0.5\n );\n sparkle.setMovement((time: number) => {\n sparkle.setSize(time * (0.5 - time) * 8);\n return vec2.create();\n });\n }\n }\n\n onCollision(other: GameObject) {\n if (other.constructor.name === \"Player\") {\n GameEngine.getEngine().onWin();\n this.destroy();\n }\n }\n\n}","import {vec2, vec3} from 'gl-matrix';\nimport GameObject from '../engine/GameObject';\nimport sceneAttributes from './SceneAttributes';\nimport Particle from './Particle';\nimport {spriteCoordinates} from '../constants';\nimport Terrain from './Terrain';\n\nconst ANIMATION_FRAME_LENGTH: number = 12;\nconst ENEMY_SPEED: number = 4;\n\nclass Baddie extends GameObject {\n animationFrame: number;\n terrain: Terrain;\n\n constructor(pos: vec2 | number[], terrain: Terrain) {\n super(false, false, true);\n this.animationFrame = 0;\n this.setPosition(pos);\n this.direction = 1;\n this.terrain = terrain;\n }\n\n onUpdate(delta: number) {\n this.animationFrame = (this.animationFrame + 1) % ANIMATION_FRAME_LENGTH;\n let tileBelow = [this.getPosition()[0] + 0.01 * this.direction, this.getPosition()[1] - 0.01];\n let tileInFront = [this.getPosition()[0] + 0.01 * this.direction, this.getPosition()[1]];\n if (this.direction === 1) {\n tileInFront[0] += 1;\n tileBelow[0] += 1;\n }\n\n if (\n this.terrain.tileAt(tileInFront[0], tileInFront[1]) ||\n !this.terrain.tileAt(tileBelow[0], tileBelow[1])\n ) {\n this.direction *= -1;\n }\n this.translate([ENEMY_SPEED * 1.0 / 60 * this.direction, 0]);\n }\n\n getSpriteUv() {\n return this.animationFrame > ANIMATION_FRAME_LENGTH / 2 ? \n spriteCoordinates.SPRITE_BADDIE_1:\n spriteCoordinates.SPRITE_BADDIE_2;\n }\n}\n\nexport default Baddie;","module.exports = __webpack_public_path__ + \"e587b3e60139101eee5ff6d25a56bd70.png\";","module.exports = __webpack_public_path__ + \"ee6dced03346586918eef24f9eab9290.png\";","module.exports = \"#version 300 es\\nprecision highp float;\\n\\nuniform mat4 u_ViewProj;\\nuniform mat4 u_Model;\\n\\nin vec2 vs_Pos;\\nin vec2 vs_Offset;\\nin vec2 vs_UV;\\nin float vs_Scale;\\nin int vs_MirrorUv;\\nout vec2 fs_Pos;\\nout vec2 fs_UV;\\n\\nvoid main() {\\n fs_Pos = vs_Pos;\\n bool mirrorUv = vs_MirrorUv == 1;\\n fs_UV = vs_UV + vec2(mirrorUv ? 1.0 - vs_Pos.x : vs_Pos.x, 1.0 - vs_Pos.y);\\n\\n vec2 actualPos = (vs_Pos - vec2(0.5, 0.5)) * vs_Scale + vs_Offset + vec2(0.0, 0.0);\\n gl_Position = u_ViewProj * u_Model * vec4(actualPos, 0.5, 1);\\n}\\n\"","module.exports = \"#version 300 es\\nprecision highp float;\\n\\nuniform sampler2D u_SpriteTex;\\nuniform int u_Win;\\nuniform float u_Time;\\n\\nin vec2 fs_Pos;\\nin vec2 fs_UV;\\n\\nout vec4 out_Col;\\n\\n\\nvoid main() {\\n vec4 color = texture(u_SpriteTex, fs_UV / 8.0);\\n if (color.a < 0.5) {\\n discard;\\n }\\n if (u_Win == 1) {\\n color = vec4(0, 0, 0, 1);\\n }\\n out_Col = color;\\n}\\n\"","module.exports = \"#version 300 es\\nprecision highp float;\\n\\nuniform vec2 u_CameraPos;\\n\\nin vec2 vs_Pos;\\nin vec2 vs_UV;\\nout vec2 fs_Pos;\\nout vec2 fs_UV1;\\nout vec2 fs_UV2;\\n\\nvoid main() {\\n fs_Pos = vs_Pos;\\n const float squish1 = 1.8;\\n fs_UV1 = vec2(\\n vs_UV[0] / 1.5 - u_CameraPos[0] / 150.0,\\n (vs_UV[1] / 4.0) * squish1 - (squish1 / 4.0 - 0.25) + (u_CameraPos[1] + 2.0) / 100.0\\n );\\n\\n const float squish2 = 1.0;\\n fs_UV2 = vec2(\\n vs_UV[0] / 2.0 - u_CameraPos[0] / 300.0,\\n (vs_UV[1] / 4.0 + 0.25) * squish2 - (squish2 / 4.0 - 0.25) + (u_CameraPos[1] + 2.0) / 200.0\\n );\\n\\n gl_Position = vec4(vs_Pos, 0, 1);\\n}\\n\"","module.exports = \"#version 300 es\\nprecision highp float;\\n\\nuniform sampler2D u_SpriteTex;\\nuniform vec2 u_CameraPos;\\nuniform float u_Time;\\nuniform int u_Win;\\n\\nin vec2 fs_Pos;\\nin vec2 fs_UV1;\\nin vec2 fs_UV2;\\n\\nout vec4 out_Col;\\n\\nconst vec2 SEED2 = vec2(0.31415, 0.6456);\\n\\nvec3 palette(in float t, in vec3 a, in vec3 b, in vec3 c, in vec3 d){\\n return a + b*cos( 6.28318*(c*t+d) );\\n}\\n\\nfloat random1(vec2 p) {\\n return fract(sin(dot(p + SEED2, vec2(127.1, 311.7))) * 43758.5453);\\n}\\n\\nvec2 random2( vec2 p , vec2 seed) {\\n return fract(sin(vec2(dot(p + seed, vec2(311.7, 127.1)), dot(p + seed, vec2(269.5, 183.3)))) * 85734.3545);\\n}\\n\\nfloat worley(vec2 noisePos, float frequency) {\\n vec2 point = noisePos * frequency;\\n vec2 cell = floor(point);\\n\\n // Check the neighboring cells for the closest cell point\\n float closestDistance = 2.0;\\n for (int i = 0; i < 9; i++) {\\n vec2 curCell = cell + vec2(i % 3 - 1, floor(float(i / 3) - 1.0));\\n vec2 cellPoint = vec2(curCell) + random2(vec2(curCell), SEED2);\\n closestDistance = min(closestDistance, distance(cellPoint, point));\\n }\\n return clamp(0.0, 1.0, closestDistance);\\n}\\n\\nfloat brownianNoise(vec2 noisePos, vec2 seed) {\\n vec2 boxPos = vec2(floor(noisePos.x), floor(noisePos.y));\\n\\n // Get the noise at the corners of the cells\\n float corner0 = random1(boxPos + vec2(0.0, 0.0));\\n float corner1 = random1(boxPos + vec2(1.0, 0.0));\\n float corner2 = random1(boxPos + vec2(0.0, 1.0));\\n float corner3 = random1(boxPos + vec2(1.0, 1.0));\\n\\n // Get cubic interpolation factors\\n float tx = smoothstep(0.0, 1.0, fract(noisePos.x));\\n float ty = smoothstep(0.0, 1.0, fract(noisePos.y));\\n\\n // Perform bicubic interpolation\\n return mix(mix(corner0, corner1, tx), mix(corner2, corner3, tx), ty);\\n}\\n\\nfloat fbm(vec2 noisePos, int numOctaves, float startFrequency) {\\n float totalNoise = 0.0;\\n float normalizer = 0.0;\\n const float PERSISTENCE = 0.5;\\n\\n float frequency = startFrequency;\\n float amplitude = PERSISTENCE;\\n\\n for (int i = 0; i < numOctaves; i++) {\\n normalizer += amplitude;\\n totalNoise += brownianNoise(noisePos * frequency, SEED2) * amplitude;\\n frequency *= 2.0;\\n amplitude *= PERSISTENCE;\\n }\\n return totalNoise / normalizer;\\n}\\n\\nvoid main() {\\n vec2 uv1 = vec2(fs_UV1.x, clamp(fs_UV1.y, 0.000, 0.249));\\n vec2 uv2 = vec2(fs_UV2.x, clamp(fs_UV2.y, 0.251, 0.499));\\n float starRadius = 0.01 + abs(sin(u_Time * 0.01 + random1(fs_Pos) * 100.0)) * 0.01;\\n vec3 stars = worley(fs_Pos, 10.0) < starRadius ? vec3(1) : vec3(0);\\n vec4 sky = mix(vec4(0.3, 0.3, 0.25, 1.0), vec4(stars, 1), pow((fs_Pos[1] + 1.0) / 2.0, 0.5));\\n\\n vec4 layer1 = texture(u_SpriteTex, uv1);\\n vec4 layer2 = texture(u_SpriteTex, uv2);\\n\\n if (u_Win == 1) {\\n float t1 = cos(fs_Pos[0] + fs_Pos[1] + u_Time * 0.01);\\n float t2 = (sin(-2.0 * fs_Pos[1] + u_Time * 0.01) * cos(2.0 * fs_Pos[0] + u_Time * 0.01));\\n\\n float t3 = pow(fbm(fs_Pos - vec2(u_Time * 0.005) + vec2(\\n fbm(fs_Pos + vec2(u_Time * 0.001), 2, 2.5),\\n worley(fs_Pos, 10.0)\\n ), \\n 3, 5.0), 2.0);\\n\\n layer1.rgb = palette(t1, vec3(0.5), vec3(0.5), vec3(1), vec3(0, 0.33, 0.67)) * 0.2;\\n layer2.rgb = palette(t2, vec3(0.5), vec3(0.5), vec3(1), vec3(0, 0.33, 0.67)) * 0.4;\\n vec3 skyColor = palette(t3, vec3(0.5), vec3(0.5), vec3(1), vec3(0, 0.33, 0.67)) * 0.8;\\n sky.rgb = worley(fs_Pos, 10.0) < starRadius ? vec3(1) - skyColor : skyColor;\\n }\\n\\n vec4 color = \\n layer1.a > 0.5 ? layer1 :\\n layer2.a > 0.5 ? layer2 :\\n sky;\\n\\n out_Col = vec4(color.rgb, 1);\\n}\\n\"","import {vec2, vec3} from 'gl-matrix';\nimport GameObject from '../engine/GameObject';\nimport sceneAttributes from './SceneAttributes';\nimport Particle from './Particle';\nimport {spriteCoordinates} from '../constants';\n\nconst WALK_CYCLE_LENGTH: number = 10;\n\nclass Player extends GameObject {\n\n // Whether or not the player is affecting their jump by holding the jump button\n jumping: boolean;\n\n // The amount of time the player has been holding the jump button\n jumpTime: number;\n\n // Prevents the player from regrounding the frist frame of a jump\n groundedImmunity: boolean;\n\n // The direction the player is currently facing: 1 for right, -1 for left\n direction: number;\n\n // The current frame of the player's walk cycle\n walkFrame: number;\n\n // Whether or not the player is moving horizontally\n moving: boolean;\n\n aPressed: boolean;\n dPressed: boolean;\n sPressed: boolean;\n\n private startPos: vec2;\n private dead: boolean;\n private idleTime: number;\n private zTime: number;\n private deathTimer: number;\n win: boolean;\n\n constructor(_startPos: vec2 | number[]) {\n super(true, false, true);\n this.jumping = false;\n this.groundedImmunity = false;\n this.direction = 1;\n this.walkFrame = 0;\n this.moving = false;\n this.aPressed = false;\n this.dPressed = false;\n this.sPressed = false;\n this.startPos = vec2.create();\n vec2.copy(this.startPos, _startPos);\n this.setPosition(this.startPos);\n this.idleTime = 0;\n this.zTime = 0;\n this.dead = false;\n this.deathTimer = 0;\n this.win = false;\n }\n\n onUpdate(delta: number) {\n if (this.win) {\n return\n }\n if (this.dead) {\n this.dynamic = false;\n this.grounded = true;\n this.deathTimer++;\n this.direction = this.deathTimer % 20 < 10 ? 1 : -1;\n if (this.deathTimer > 40 && this.deathTimer < 70) {\n this.translate([0, (70 - this.deathTimer) * 0.025 - 15.0 / 60]);\n }\n if (this.deathTimer > 70) {\n this.translate([0, -15.0 / 60])\n }\n }\n if (this.jumping) {\n // I have decided to perform this operation in units of frames instead of seconds to ensure\n // that the jump height is consistent. It makes geometry generator calculations easier too\n this.jumpTime -= 0.016;\n let t = Math.max(0, this.jumpTime / 0.4);\n this.inputVelocity[1] = t * sceneAttributes.playerJump;\n }\n if (this.jumpTime <= 0 || (this.isGrounded && !this.groundedImmunity)) {\n this.jumping = false;\n }\n this.groundedImmunity = false;\n\n if (!this.aPressed && !this.dPressed || (this.aPressed && this.dPressed)) {\n this.moving = false;\n } \n\n if (this.moving) {\n this.walkFrame++;\n let skidThresh = sceneAttributes.playerSpeed / 4\n if (this.isGrounded && (\n (this.aPressed && this.getVelocity()[0] > skidThresh) ||\n (this.dPressed && this.getVelocity()[0] < -skidThresh))\n ) {\n let poff1 = new Particle(\n spriteCoordinates.SPRITE_POFF,\n vec2.fromValues(this.getPosition()[0], this.getPosition()[1] - 0.5),\n 0.25\n );\n poff1.scale(0.5)\n poff1.setMovement((time: number) => {\n poff1.scale(1.03)\n return vec2.fromValues(0, time * time * 10);\n })\n let poff2 = new Particle(\n spriteCoordinates.SPRITE_POFF,\n vec2.fromValues(this.getPosition()[0], this.getPosition()[1] - 0.5),\n 0.25\n );\n poff2.scale(0.5)\n poff2.setMovement((time: number) => {\n poff2.scale(1.03)\n return vec2.fromValues(0, time * time * 5);\n })\n }\n }\n else {\n this.walkFrame = 0;\n };\n\n if (this.getPosition()[1] < sceneAttributes.deathHeight) {\n this.onDeath();\n }\n\n if (!this.isGrounded || this.sPressed || this.moving) {\n this.idleTime = 0;\n }\n else {\n this.idleTime += delta;\n }\n\n if (this.idleTime > 20) {\n if (this.zTime > 2) {\n let z: Particle = new Particle(\n spriteCoordinates.SPRITE_Z,\n vec2.fromValues(this.getPosition()[0], this.getPosition()[1]),\n 3.5\n )\n z.setMovement((time: number) => {\n if (time > 1) {\n z.scale(0.99);\n }\n return vec2.fromValues(time, Math.sin(time * 3) * 0.3 + time);\n })\n this.zTime = 0;\n }\n this.zTime += delta;\n }\n else {\n this.zTime = 0;\n }\n }\n\n onGrounded(verticalVelocity: number) {\n if (verticalVelocity < -40) {\n let thisPos = this.getPosition();\n let poff1: Particle = new Particle(\n spriteCoordinates.SPRITE_POFF,\n vec2.fromValues(thisPos[0], thisPos[1] - 0.5),\n 3);\n poff1.setMovement((time: number) => {\n poff1.scale(1 - time / 3);\n return vec2.fromValues(4 * time, 5 * time * time);\n })\n let poff2: Particle = new Particle(\n spriteCoordinates.SPRITE_POFF,\n vec2.fromValues(thisPos[0], thisPos[1] - 0.5),\n 3);\n poff2.setMovement((time: number) => {\n poff2.scale(1 - time / 3);\n return vec2.fromValues(-4 * time, 5 * time * time);\n })\n }\n }\n\n onKeyPress(key: string) {\n if (this.dead || this.win) {\n return;\n }\n let playerMovement = this.isGrounded ? sceneAttributes.playerSpeed : sceneAttributes.playerSpeed;\n if (key === \"a\" || key === \"ArrowLeft\") {\n vec2.add(this.inputVelocity, this.inputVelocity, vec2.fromValues(-playerMovement, 0));\n this.direction = -1;\n this.moving = true;\n }\n else if (key === \"d\" || key === \"ArrowRight\") {\n vec2.add(this.inputVelocity, this.inputVelocity, vec2.fromValues(playerMovement, 0));\n this.direction = 1;\n this.moving = true;\n }\n }\n\n onKeyDown(key: string) {\n if (this.dead || this.win) {\n return;\n }\n if ((key === 'w' || key === \" \" || key === \"ArrowUp\") && this.isGrounded) {\n this.jumping = true;\n this.jumpTime = sceneAttributes.maxJumpHold;\n this.groundedImmunity = true;\n }\n else if (key === 'a' || key === \"ArrowLeft\") {\n this.aPressed = true;\n }\n else if (key === 'd' || key === \"ArrowRight\") {\n this.dPressed = true;\n }\n else if (key === 's' || key === \"ArrowDown\") {\n this.sPressed = true;\n }\n }\n\n onKeyUp(key: string) {\n if (key === 'w' || key === \" \" || key === \"ArrowUp\") {\n this.jumping = false;\n this.jumpTime = 0;\n }\n else if (key === 'a' || key === \"ArrowLeft\") {\n this.aPressed = false;\n }\n else if (key === 'd' || key === \"ArrowRight\") {\n this.dPressed = false;\n }\n else if (key === 's' || key === \"ArrowDown\") {\n this.sPressed = false;\n }\n }\n\n onCollision(other: GameObject) {\n if (other.constructor.name === \"Coin\") {\n for (let i = 0; i < 8; i++) {\n let angle = i * Math.PI * 2 / 8;\n let direction = vec2.fromValues(Math.cos(angle), Math.sin(angle));\n let sparkle = new Particle(\n spriteCoordinates.SPRITE_SPARKLE,\n vec2.add(vec2.create(), other.getPosition(), vec2.scale(vec2.create(), direction, 0.3)),\n 0.2\n );\n sparkle.setSize(0.5);\n sparkle.setMovement((time: number) => {\n return vec2.scale(vec2.create(), direction, time * 2);\n })\n }\n other.destroy();\n }\n else if (other.constructor.name === \"Spike\" || other.constructor.name === \"Baddie\") {\n this.dead = true;\n }\n else if (other.constructor.name === \"Checkpoint\") {\n vec2.copy(this.startPos, other.getPosition());\n }\n else if (other.constructor.name === \"Gem\") {\n this.win = true;\n }\n }\n\n onDeath() {\n this.setPosition(this.startPos);\n this.dead = false;\n this.dynamic = true;\n this.deathTimer = 0;\n }\n\n getSpriteUv() {\n if (this.dead) {\n return spriteCoordinates.SPRITE_PLAYER_DEATH;\n }\n if (!this.isGrounded) {\n return spriteCoordinates.SPRITE_PLAYER_JUMP;\n }\n else if (this.moving) {\n return this.walkFrame % WALK_CYCLE_LENGTH < WALK_CYCLE_LENGTH / 2 ?\n spriteCoordinates.SPRITE_PLAYER_WALK_1 : \n spriteCoordinates.SPRITE_PLAYER_WALK_2;\n }\n else if (this.sPressed) {\n return spriteCoordinates.SPRITE_PLAYER_CROUCH;\n }\n else if (this.idleTime >= 20) {\n return spriteCoordinates.SPRITE_PLAYER_IDLE2;\n }\n else if (this.idleTime >= 10) {\n return spriteCoordinates.SPRITE_PLAYER_IDLE1;\n }\n return spriteCoordinates.SPRITE_PLAYER_STAND;\n }\n}\n\nexport default Player;"],"sourceRoot":""} \ No newline at end of file diff --git a/src/LevelGenerator/GeometryGenerator.ts b/src/LevelGenerator/GeometryGenerator.ts index 00b150e..853b8cd 100644 --- a/src/LevelGenerator/GeometryGenerator.ts +++ b/src/LevelGenerator/GeometryGenerator.ts @@ -285,13 +285,13 @@ export default class GeometryGenerator { if (lastRest) { new Gem([ Math.floor(this.currentPos[0] - length / 2), - this.currentPos[1] + 1 + this.currentPos[1] + 2 ]); } else { new Checkpoint([ Math.floor(this.currentPos[0] - length / 2), - this.currentPos[1] + 2 + this.currentPos[1] + 1 ]); } }