diff --git a/README.md b/README.md
deleted file mode 100644
index ac2156b..0000000
--- a/README.md
+++ /dev/null
@@ -1,19 +0,0 @@
-chuck.js
-========
-
-Physical JavaScript Action Browser Multiplayer Game - it will be awesome!
-
-Follow the development at http://chuck-game.tumblr.com/
-
-How to run:
-
-* git clone https://github.com/logsol/chuck.js.git
-* cd chuck.js
-* npm install
-* node server.js
-
-Open in browser http://localhost:1234
-
-
-
-This game is licensed under the GPLv3 licence http://www.gnu.org/licenses/gpl-3.0.html
\ No newline at end of file
diff --git a/TODO.txt b/TODO.txt
deleted file mode 100644
index 6e4980b..0000000
--- a/TODO.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-1. add Event Notification Center and Trigger Mechanism - http://addyosmani.com/resources/essentialjsdesignpatterns/book/#observerpatternjavascript
-2. use assemble for game command creation
-3. use NULL for command option default value
-4. Rename Input Control Unit
-5. Rename ServerProcessor.updateWorld && game.updateClientsWorld broadcastWorldUpdate
-6. updateWorld add update intervall (15) to Settings
-7. rename channel.sendCommandToAllUsers to broadcastCommand(..,..,except)
-8. Networker - remove spawning from onJoinSuccess. create initital World update flag -> spawn
-9. on client side - change naming user -> player
-10. Repair Collision Detection, split between local and server detection
-11. Rethink Useres, Clients, Players on server and client side
-23. Rethink Project Structure
\ No newline at end of file
diff --git a/client.js b/client.js
deleted file mode 100755
index e704a47..0000000
--- a/client.js
+++ /dev/null
@@ -1,12 +0,0 @@
-requirejs.config({
- baseUrl: 'lib'
-});
-
-var inspector = {};
-
-requirejs(["Client/Networker", "Vendor/SocketIO"], function(Networker, SocketIO) {
- var socket = SocketIO.connect(location.href);
- var networker = new Networker(socket);
-
- inspector.networker = networker;
-});
\ No newline at end of file
diff --git a/.tests/editor/img/sh.png b/editor/img/sh.png
similarity index 100%
rename from .tests/editor/img/sh.png
rename to editor/img/sh.png
diff --git a/.tests/editor/img/tile_shape_rotation_map.jpg b/editor/img/tile_shape_rotation_map.jpg
similarity index 100%
rename from .tests/editor/img/tile_shape_rotation_map.jpg
rename to editor/img/tile_shape_rotation_map.jpg
diff --git a/.tests/editor/img/tile_shape_rotation_map_view.jpg b/editor/img/tile_shape_rotation_map_view.jpg
similarity index 100%
rename from .tests/editor/img/tile_shape_rotation_map_view.jpg
rename to editor/img/tile_shape_rotation_map_view.jpg
diff --git a/.tests/editor/index.html b/editor/index.html
similarity index 100%
rename from .tests/editor/index.html
rename to editor/index.html
diff --git a/.tests/editor/script/Button.js b/editor/script/Button.js
similarity index 100%
rename from .tests/editor/script/Button.js
rename to editor/script/Button.js
diff --git a/.tests/editor/script/Debug.js b/editor/script/Debug.js
similarity index 100%
rename from .tests/editor/script/Debug.js
rename to editor/script/Debug.js
diff --git a/.tests/editor/script/Game.js b/editor/script/Game.js
similarity index 100%
rename from .tests/editor/script/Game.js
rename to editor/script/Game.js
diff --git a/.tests/editor/script/Start.js b/editor/script/Start.js
similarity index 100%
rename from .tests/editor/script/Start.js
rename to editor/script/Start.js
diff --git a/.tests/editor/script/Tile.js b/editor/script/Tile.js
similarity index 100%
rename from .tests/editor/script/Tile.js
rename to editor/script/Tile.js
diff --git a/.tests/editor/script/jquery.js b/editor/script/jquery.js
similarity index 100%
rename from .tests/editor/script/jquery.js
rename to editor/script/jquery.js
diff --git a/.tests/editor/script/jquery.mousewheel.js b/editor/script/jquery.mousewheel.js
similarity index 100%
rename from .tests/editor/script/jquery.mousewheel.js
rename to editor/script/jquery.mousewheel.js
diff --git a/.tests/editor/script/main.js b/editor/script/main.js
similarity index 100%
rename from .tests/editor/script/main.js
rename to editor/script/main.js
diff --git a/.tests/editor/style/style.css b/editor/style/style.css
similarity index 100%
rename from .tests/editor/style/style.css
rename to editor/style/style.css
diff --git a/.tests/game-draft/css/style.css b/game-draft/css/style.css
similarity index 100%
rename from .tests/game-draft/css/style.css
rename to game-draft/css/style.css
diff --git a/.tests/game-draft/index.html b/game-draft/index.html
similarity index 100%
rename from .tests/game-draft/index.html
rename to game-draft/index.html
diff --git a/.tests/game-draft/js/Box2d/Box2dWeb-2.1.a.3.js b/game-draft/js/Box2d/Box2dWeb-2.1.a.3.js
similarity index 100%
rename from .tests/game-draft/js/Box2d/Box2dWeb-2.1.a.3.js
rename to game-draft/js/Box2d/Box2dWeb-2.1.a.3.js
diff --git a/.tests/game-draft/js/Box2d/Box2dWeb-2.1.a.3.min.js b/game-draft/js/Box2d/Box2dWeb-2.1.a.3.min.js
similarity index 100%
rename from .tests/game-draft/js/Box2d/Box2dWeb-2.1.a.3.min.js
rename to game-draft/js/Box2d/Box2dWeb-2.1.a.3.min.js
diff --git a/.tests/game-draft/js/Chuck/Collision/Detector.js b/game-draft/js/Chuck/Collision/Detector.js
similarity index 100%
rename from .tests/game-draft/js/Chuck/Collision/Detector.js
rename to game-draft/js/Chuck/Collision/Detector.js
diff --git a/.tests/game-draft/js/Chuck/Config/Setup.js b/game-draft/js/Chuck/Config/Setup.js
similarity index 100%
rename from .tests/game-draft/js/Chuck/Config/Setup.js
rename to game-draft/js/Chuck/Config/Setup.js
diff --git a/.tests/game-draft/js/Chuck/Control/InputControlUnit.js b/game-draft/js/Chuck/Control/InputControlUnit.js
similarity index 100%
rename from .tests/game-draft/js/Chuck/Control/InputControlUnit.js
rename to game-draft/js/Chuck/Control/InputControlUnit.js
diff --git a/.tests/game-draft/js/Chuck/Control/Key.js b/game-draft/js/Chuck/Control/Key.js
similarity index 100%
rename from .tests/game-draft/js/Chuck/Control/Key.js
rename to game-draft/js/Chuck/Control/Key.js
diff --git a/.tests/game-draft/js/Chuck/Control/KeyboardInput.js b/game-draft/js/Chuck/Control/KeyboardInput.js
similarity index 100%
rename from .tests/game-draft/js/Chuck/Control/KeyboardInput.js
rename to game-draft/js/Chuck/Control/KeyboardInput.js
diff --git a/.tests/game-draft/js/Chuck/Loader/Level.js b/game-draft/js/Chuck/Loader/Level.js
similarity index 100%
rename from .tests/game-draft/js/Chuck/Loader/Level.js
rename to game-draft/js/Chuck/Loader/Level.js
diff --git a/.tests/game-draft/js/Chuck/Main.js b/game-draft/js/Chuck/Main.js
similarity index 100%
rename from .tests/game-draft/js/Chuck/Main.js
rename to game-draft/js/Chuck/Main.js
diff --git a/.tests/game-draft/js/Chuck/Physics/Doll.js b/game-draft/js/Chuck/Physics/Doll.js
similarity index 100%
rename from .tests/game-draft/js/Chuck/Physics/Doll.js
rename to game-draft/js/Chuck/Physics/Doll.js
diff --git a/.tests/game-draft/js/Chuck/Physics/Engine.js b/game-draft/js/Chuck/Physics/Engine.js
similarity index 100%
rename from .tests/game-draft/js/Chuck/Physics/Engine.js
rename to game-draft/js/Chuck/Physics/Engine.js
diff --git a/.tests/game-draft/js/Chuck/Player.js b/game-draft/js/Chuck/Player.js
similarity index 100%
rename from .tests/game-draft/js/Chuck/Player.js
rename to game-draft/js/Chuck/Player.js
diff --git a/.tests/game-draft/js/Chuck/Processor.js b/game-draft/js/Chuck/Processor.js
similarity index 100%
rename from .tests/game-draft/js/Chuck/Processor.js
rename to game-draft/js/Chuck/Processor.js
diff --git a/.tests/game-draft/js/Chuck/View.js b/game-draft/js/Chuck/View.js
similarity index 100%
rename from .tests/game-draft/js/Chuck/View.js
rename to game-draft/js/Chuck/View.js
diff --git a/.tests/game-draft/js/JQuery/jquery.1.7.2.min.js b/game-draft/js/JQuery/jquery.1.7.2.min.js
similarity index 100%
rename from .tests/game-draft/js/JQuery/jquery.1.7.2.min.js
rename to game-draft/js/JQuery/jquery.1.7.2.min.js
diff --git a/.tests/game-draft/xml/level.xml b/game-draft/xml/level.xml
similarity index 100%
rename from .tests/game-draft/xml/level.xml
rename to game-draft/xml/level.xml
diff --git a/lib/Chuck/ClientGame.js b/lib/Chuck/ClientGame.js
deleted file mode 100644
index 91c0f16..0000000
--- a/lib/Chuck/ClientGame.js
+++ /dev/null
@@ -1,38 +0,0 @@
-define(["Chuck/Processors/ClientProcessor"], function(ClientProcessor) {
-
- function ClientGame(networker, id) {
- this.networker = networker;
- this.clientProcessor = new ClientProcessor(this);
- this.clientProcessor.spawnMeWithId(id);
-
- this.players = {};
- }
-
- ClientGame.prototype.loadLevel = function(path) {
- this.clientProcessor.loadLevel(path);
- }
-
- ClientGame.prototype.userJoined = function(userId) {
- this.players[userId] = this.clientProcessor.spawnNewPlayerWithId(userId);
- }
-
- ClientGame.prototype.userLeft = function(userId) {
- var player = this.players[userId];
- player.destroy();
- delete this.players[userId];
- }
-
- ClientGame.prototype.processGameCommand = function(command, options){
- this.clientProcessor.processGameCommand(command, options);
- }
-
- ClientGame.prototype.sendGameCommand = function(command, options) {
- this.networker.sendGameCommand(command, options);
- }
-
- ClientGame.prototype.destruct = function(){
- this.clientProcessor.destruct();
- }
-
- return ClientGame;
-});
\ No newline at end of file
diff --git a/lib/Chuck/Collision/Detector.js b/lib/Chuck/Collision/Detector.js
deleted file mode 100644
index f9a18fb..0000000
--- a/lib/Chuck/Collision/Detector.js
+++ /dev/null
@@ -1,38 +0,0 @@
-define(["Vendor/Box2D"], function(Box2D) {
-
- function Detector(me) {
- this.me = me;
-
- this.listener = new Box2D.Dynamics.b2ContactListener();
- this.listener.chuckDetector = this;
- this.listener.BeginContact = this.BeginContact;
- this.listener.PostSolve = this.PostSolve;
- this.listener.EndContact = this.EndContact;
- }
-
- Detector.prototype.getListener = function() {
- return this.listener;
- }
-
- Detector.prototype.handleStand = function(point, isColliding) {
- if (point.GetFixtureA().GetUserData() == 'myFeet' || point.GetFixtureB().GetUserData() == 'myFeet') {
- this.me.onFootSensorDetection(isColliding);
- }
- }
-
- /** Extension **/
-
- Detector.prototype.BeginContact = function(point) {
- this.chuckDetector.handleStand(point, true);
- }
-
- Detector.prototype.PostSolve = function(point, impulse) {
- this.chuckDetector.handleStand(point, true);
- }
-
- Detector.prototype.EndContact = function(point) {
- this.chuckDetector.handleStand(point, false);
- }
-
- return Detector;
-});
\ No newline at end of file
diff --git a/lib/Chuck/Constants.js b/lib/Chuck/Constants.js
deleted file mode 100644
index 435d77f..0000000
--- a/lib/Chuck/Constants.js
+++ /dev/null
@@ -1 +0,0 @@
-Constants.js
\ No newline at end of file
diff --git a/lib/Chuck/Control/InputControlUnit.js b/lib/Chuck/Control/InputControlUnit.js
deleted file mode 100755
index 86d7c99..0000000
--- a/lib/Chuck/Control/InputControlUnit.js
+++ /dev/null
@@ -1,94 +0,0 @@
-define(["Chuck/Control/InputController", "Chuck/Control/KeyboardInput"], function(InputController, KeyboardInput){
-
- function InputControlUnit(me, clientProcessor) {
-
- this.clientProcessor = clientProcessor;
- this.inputController = new InputController(me);
-
- this.keyboardInput = new KeyboardInput(this);
-
- var keys = {
- w:87,
- a:65,
- s:83,
- d:68,
-
- up: 38,
- left: 37,
- down: 40,
- right: 39
- }
-
- this.init(keys);
- }
-
- InputControlUnit.prototype.init = function(keys) {
-
- this.keyboardInput.registerKey(keys.a, 'moveLeft', 'stop', 'moveLeft');
- this.keyboardInput.registerKey(keys.left, 'moveLeft', 'stop', 'moveLeft');
-
- this.keyboardInput.registerKey(keys.d, 'moveRight', 'stop', 'moveRight');
- this.keyboardInput.registerKey(keys.right, 'moveRight', 'stop', 'moveRight');
-
- this.keyboardInput.registerKey(keys.w, 'jump', 'jumped', 'jumping');
- this.keyboardInput.registerKey(keys.up, 'jump', 'jumped', 'jumping');
-
- this.keyboardInput.registerKey(keys.s, 'duck', 'standUp', 'duck');
- this.keyboardInput.registerKey(keys.down, 'duck', 'standUp', 'duck');
-
- this.keyboardInput.registerKey(keys.s, 'activateShift', 'activateShift', 'deactivateShift');
- this.keyboardInput.registerKey(keys.down, 'activateShift', 'activateShift', 'deactivateShift');
- }
-
- InputControlUnit.prototype.moveLeft = function() {
- this.inputController.moveLeft();
- this.clientProcessor.sendGameCommand('moveLeft');
- }
-
- InputControlUnit.prototype.moveRight = function() {
- this.inputController.moveRight();
- this.clientProcessor.sendGameCommand('moveRight');
- }
-
- InputControlUnit.prototype.stop = function() {
- this.inputController.stop();
- this.clientProcessor.sendGameCommand('stop');
- }
-
- InputControlUnit.prototype.jump = function() {
- this.inputController.jump();
- this.clientProcessor.sendGameCommand('jump');
- }
-
- InputControlUnit.prototype.jumped = function() {
- this.inputController.jumped();
- }
-
- InputControlUnit.prototype.jumping = function() {
- this.inputController.jumping();
- }
-
- InputControlUnit.prototype.duck = function() {
- this.inputController.duck();
- this.clientProcessor.sendGameCommand('duck');
- }
-
- InputControlUnit.prototype.standUp = function() {
- this.inputController.standUp();
- }
-
- InputControlUnit.prototype.activateShift = function() {
- this.inputController.activateShift();
- this.clientProcessor.sendGameCommand('activateShift');
- }
-
- InputControlUnit.prototype.deactivateShift = function() {
- this.inputController.deactivateShift();
- }
-
- InputControlUnit.prototype.update = function() {
- this.keyboardInput.update();
- }
-
- return InputControlUnit;
-});
\ No newline at end of file
diff --git a/lib/Chuck/Control/InputController.js b/lib/Chuck/Control/InputController.js
deleted file mode 100644
index db85b7b..0000000
--- a/lib/Chuck/Control/InputController.js
+++ /dev/null
@@ -1,59 +0,0 @@
-define(function(){
-
- function InputController(player) {
-
- this.player = player;
-
- this._shift;
- this._isJumping;
- }
-
- InputController.prototype.moveLeft = function() {
- this.player.move(-1);
- }
-
- InputController.prototype.moveRight = function() {
- this.player.move(1);
- }
-
- InputController.prototype.stop = function() {
- this.player.stop();
- }
-
- InputController.prototype.jump = function() {
- this._isJumping = true;
- this.player.jump();
- }
-
- InputController.prototype.jumped = function() {
- this._isJumping = false;
- }
-
- InputController.prototype.jumping = function() {
- if (this._isJumping) {
- this.player.jumping();
- }
- }
-
- InputController.prototype.duck = function() {
- this.player.duck();
- }
-
- InputController.prototype.standUp = function() {
- this.player.standUp();
- }
-
- InputController.prototype.activateShift = function() {
- this._shift = true;
- }
-
- InputController.prototype.deactivateShift = function() {
- this._shift = false;
- }
-
- InputController.prototype.update = function() {
-
- }
-
- return InputController;
-});
\ No newline at end of file
diff --git a/lib/Chuck/Control/Key.js b/lib/Chuck/Control/Key.js
deleted file mode 100755
index 19a174c..0000000
--- a/lib/Chuck/Control/Key.js
+++ /dev/null
@@ -1,61 +0,0 @@
-define(function(){
-
- function Key () {
- this._active = false;
- this._activityUpdateStatus = false;
- this._activityUpdateNeeded = false;
- this._keyDownFunction = null;
- this._keyUpFunction = null;
- this._keyFrameFunction = null;
- }
-
- Key.prototype.setActivityUpdateStatus = function(active) {
- this._activityUpdateStatus = active;
- }
-
- Key.prototype.getActivityUpdateStatus = function() {
- return this._activityUpdateStatus;
- }
-
- Key.prototype.setActivityUpdateNeeded = function(need) {
- this._activityUpdateNeeded = need;
- }
-
- Key.prototype.getActivityUpdateNeeded = function() {
- return this._activityUpdateNeeded;
- }
-
- Key.prototype.setActive = function(active) {
- this._active = active;
- }
-
- Key.prototype.getActive = function() {
- return this._active;
- }
-
- Key.prototype.setKeyDownFunction = function(f) {
- this._keyDownFunction = f;
- }
-
- Key.prototype.getKeyDownFunction = function() {
- return this._keyDownFunction;
- }
-
- Key.prototype.setKeyUpFunction = function(f) {
- this._keyUpFunction = f;
- }
-
- Key.prototype.getKeyUpFunction = function() {
- return this._keyUpFunction;
- }
-
- Key.prototype.setKeyFrameFunction = function(f) {
- this._keyFrameFunction = f;
- }
-
- Key.prototype.getKeyFrameFunction = function() {
- return this._keyFrameFunction;
- }
-
- return Key;
-});
\ No newline at end of file
diff --git a/lib/Chuck/Control/KeyboardInput.js b/lib/Chuck/Control/KeyboardInput.js
deleted file mode 100755
index c2720d8..0000000
--- a/lib/Chuck/Control/KeyboardInput.js
+++ /dev/null
@@ -1,74 +0,0 @@
-define(["Chuck/Control/Key"], function(Key){
-
- function KeyboardInput (inputControlUnit) {
-
- this._registry = {};
- this._inputControlUnit = inputControlUnit;
-
- this.init();
- }
-
- KeyboardInput.prototype.init = function() {
- $(window).keydown($.proxy(this._onKeyDown, this));
- $(window).keyup($.proxy(this._onKeyUp, this));
- }
-
- KeyboardInput.prototype.registerKey = function(keyCode, onKeyDown, onKeyUp, onKeyFrame) {
- var key = new Key();
- key.setKeyDownFunction(onKeyDown);
- key.setKeyUpFunction(onKeyUp);
- key.setKeyFrameFunction(onKeyFrame);
- this._registry[keyCode] = key;
- }
-
- KeyboardInput.prototype._getKeyByKeyCode = function(keyCode) {
- return this._registry[keyCode];
- }
-
- KeyboardInput.prototype._onKeyDown = function(e) {
- var key = this._getKeyByKeyCode(e.keyCode);
- if (key && key.getActive() == false) {
- key.setActivityUpdateStatus(true);
- key.setActivityUpdateNeeded(true);
- }
- }
-
- KeyboardInput.prototype._onKeyUp = function(e) {
- var key = this._getKeyByKeyCode(e.keyCode);
- if (key != null) {
- key.setActivityUpdateStatus(false);
- key.setActivityUpdateNeeded(true);
- }
- }
-
- KeyboardInput.prototype.update = function() {
- var callback = null;
- var self = this;
- $.each(this._registry, function(keyCode, key) {
- if (key.getActivityUpdateNeeded()) {
- if (key.getActivityUpdateStatus() == true) {
- callback = key.getKeyDownFunction();
- key.setActive(true);
- } else {
- callback = key.getKeyUpFunction();
- key.setActive(false);
- }
- key.setActivityUpdateNeeded(false);
- }
-
- if (callback) {
- self._inputControlUnit[callback]();
- } else {
- if (key.getActive()) {
- callback = key.getKeyFrameFunction();
- if (callback) {
- self._inputControlUnit[callback]();
- }
- }
- }
- callback = null;
- });
- }
-
- return KeyboardInput;
-});
\ No newline at end of file
diff --git a/lib/Chuck/Game.js b/lib/Chuck/Game.js
deleted file mode 100644
index a2eb3a9..0000000
--- a/lib/Chuck/Game.js
+++ /dev/null
@@ -1,30 +0,0 @@
-define(["Chuck/Settings", "Chuck/Processors/ServerProcessor", "Chuck/Processors/ClientProcessor"], function(Settings, ServerProcessor, ClientProcessor){
-
- function Game(networker){
- this.networker = networker;
- this.processor = this.createProcessor();
-
- this.processor.loadLevel("default.json");
- }
-
- Game.prototype.createProcessor = function(){
- var processor;
-
- if(Settings.IS_BROWSER_ENVIRONMENT){
- processor = new ClientProcessor();
- } else {
- processor = new ServerProcessor();
- }
- return processor;
- }
-
- Game.prototype.processGameCommand = function(command, options){
- console.log('(not implemented) processGameCommand:', command, options);
- }
-
- Game.prototype.destruct = function(){
- this.processor.destruct();
- }
-
- return Game;
-});
\ No newline at end of file
diff --git a/lib/Chuck/Loader/Level.js b/lib/Chuck/Loader/Level.js
deleted file mode 100644
index acc7f0e..0000000
--- a/lib/Chuck/Loader/Level.js
+++ /dev/null
@@ -1,263 +0,0 @@
-define(["Chuck/Settings", "Vendor/Box2D"], function(Settings, Box2D) {
-
- // Public
- function Level(path, engine) {
- this.path = path;
- this.engine = engine;
- this.levelObject = null;
- }
-
- Level.prototype.loadLevelInToEngine = function() {
- this.loadLevelObjectFromPath(this.path);
- this.createPhysicTiles();
- }
-
- Level.prototype.unload = function() {
- // TODO unload level from engine if necessary
- // Perhaps just remove all bodies?
- }
-
- // Private
-
- Level.prototype.createPhysicTiles = function () {
- if (!this.levelObject || !this.levelObject.tiles || this.levelObject.tiles.length < 1) {
- throw "Level: Can't create physic tiles, no tiles found";
- }
-
- var tiles = this.levelObject.tiles;
- for (var i = tiles.length - 1; i >= 0; i--) {
- this.createPhysicTile(tiles[i]);
- }
- }
-
- Level.prototype.createPhysicTile = function(tile) {
- tile.r = tile.r || 0;
- var vertices = this.createVertices(tile);
-
- var bodyDef = new Box2D.Dynamics.b2BodyDef();
- bodyDef.type = Box2D.Dynamics.b2Body.b2_staticBody;
- bodyDef.position.x = tile.x * Settings.TILE_SIZE / Settings.RATIO;
- bodyDef.position.y = tile.y * Settings.TILE_SIZE / Settings.RATIO;
- bodyDef.angle = tile.r * 90 * Math.PI / 180;
-
- var tileShape = new Box2D.Collision.Shapes.b2PolygonShape();
-
- tileShape.SetAsArray(vertices, vertices.length);
-
- var fixtureDef = new Box2D.Dynamics.b2FixtureDef();
- fixtureDef.shape = tileShape;
- fixtureDef.density = 0;
- fixtureDef.friction = Settings.TILE_FRICTION;
- fixtureDef.restitution = Settings.TILE_RESTITUTION;
- fixtureDef.isSensor = false;
- fixtureDef.userData = 'tile';
-
- this.engine.createBody(bodyDef).CreateFixture(fixtureDef);
- }
-
- Level.prototype.createVertices = function(tile) {
- var vs = [];
-
- switch(tile.s) {
- case 1:
- this.addVec(vs, -1, -1); // o o o
- this.addVec(vs, 1, -1); // o o o
- this.addVec(vs, 1, 1); // o o o
- this.addVec(vs, -1, 1);
- break;
-
- case 2:
- this.addVec(vs, -1, -1); // o
- this.addVec(vs, 1, 1); // o o
- this.addVec(vs, -1, 1); // o o o
- break;
-
- case 3:
- this.addVec(vs, -1, -1); // o
- this.addVec(vs, 0, 1); // o
- this.addVec(vs, -1, 1); // o o
- break;
-
- case 4:
- this.addVec(vs, -1, -1); // o
- this.addVec(vs, 1, 0); // o o o
- this.addVec(vs, 1, 1); // o o o
- this.addVec(vs, -1, 1);
- break;
-
- case 5:
- this.addVec(vs, 1, -1); // o
- this.addVec(vs, 1, 1); // o
- this.addVec(vs, 0, 1); // o o
- break;
-
- case 6:
- this.addVec(vs, 1, -1); // o
- this.addVec(vs, 1, 1); // o o o
- this.addVec(vs, -1, 1); // o o o
- this.addVec(vs, -1, 0);
- break;
-
- case 7:
- this.addVec(vs, -1, 0); //
- this.addVec(vs, 0, 1); // o
- this.addVec(vs, -1, 1); // o o
- break;
-
- case 8:
- this.addVec(vs, -1, -1); // o o
- this.addVec(vs, 0, -1); // o o o
- this.addVec(vs, 1, 0); // o o o
- this.addVec(vs, 1, 1);
- this.addVec(vs, -1, 1);
- break;
-
- default:
- break;
- }
-
- return vs;
- }
-
- Level.prototype.mkArg = function(multiplier) {
- return Settings.TILE_SIZE / 2 / Settings.RATIO * multiplier;
- }
-
- Level.prototype.addVec = function(vs, m1, m2) {
- return vs.push(new Box2D.Common.Math.b2Vec2(this.mkArg(m1), this.mkArg(m2)));
- }
-
- Level.prototype.loadLevelObjectFromPath = function(path) {
-
- // TODO: load JSON levelObject from path
- // s: shape
- // x: x-position
- // y: y-position
- // r: rotation (optional)
-
- // Shapes:
-
- // 1
- // o o o
- // o o o
- // o o o
-
- // 2
- // o
- // o o
- // o o o
-
- // 3
- // o
- // o
- // o o
-
- // 4
- // o
- // o o o
- // o o o
-
- // 5
- // o
- // o
- // o o
-
- // 6
- // o
- // o o o
- // o o o
-
- // 7
- //
- // o
- // o o
-
- // 8
- // o o
- // o o o
- // o o o
-
- this.levelObject = {
- tiles: [
-{s:1, x:3, y:18},
-{s:1, x:37, y:27},
-{s:1, x:20, y:24},
-{s:1, x:24, y:27},
-{s:1, x:37, y:26},
-{s:1, x:9, y:18},
-{s:2, x:32, y:25, r:1},
-{s:1, x:23, y:27},
-{s:3, x:34, y:24, r:1},
-{s:1, x:35, y:28},
-{s:4, x:17, y:21},
-{s:2, x:21, y:24},
-{s:2, x:42, y:23, r:3},
-{s:3, x:30, y:24, r:3},
-{s:2, x:22, y:25},
-{s:1, x:40, y:25},
-{s:1, x:38, y:26},
-{s:1, x:8, y:18},
-{s:1, x:38, y:25},
-{s:1, x:28, y:28},
-{s:1, x:36, y:27},
-{s:1, x:7, y:18},
-{s:2, x:20, y:23},
-{s:2, x:43, y:23, r:1},
-{s:6, x:31, y:24},
-{s:1, x:16, y:21},
-{s:1, x:1, y:18},
-{s:1, x:31, y:29},
-{s:2, x:30, y:25, r:2},
-{s:4, x:11, y:18},
-{s:1, x:28, y:27},
-{s:1, x:28, y:26},
-{s:1, x:28, y:29},
-{s:1, x:19, y:23},
-{s:5, x:12, y:18, r:1},
-{s:1, x:42, y:24},
-{s:6, x:33, y:24, r:2},
-{s:1, x:39, y:25},
-{s:1, x:33, y:29},
-{s:1, x:29, y:29},
-{s:1, x:21, y:25},
-{s:1, x:27, y:27},
-{s:5, x:16, y:20, r:1},
-{s:1, x:5, y:18},
-{s:5, x:18, y:21, r:1},
-{s:4, x:13, y:19},
-{s:1, x:14, y:20},
-{s:1, x:30, y:29},
-{s:1, x:4, y:18},
-{s:1, x:6, y:18},
-{s:1, x:2, y:18},
-{s:1, x:32, y:24},
-{s:1, x:34, y:29},
-{s:1, x:32, y:29},
-{s:2, x:1, y:16},
-{s:1, x:10, y:18},
-{s:1, x:42, y:25},
-{s:2, x:28, y:25, r:3},
-{s:2, x:0, y:16, r:2},
-{s:1, x:22, y:27},
-{s:1, x:25, y:27},
-{s:1, x:31, y:25},
-{s:5, x:14, y:19, r:1},
-{s:1, x:41, y:25},
-{s:1, x:36, y:28},
-{s:4, x:15, y:20},
-{s:2, x:19, y:22},
-{s:3, x:26, y:26, r:3},
-{s:1, x:26, y:27},
-{s:1, x:18, y:22},
-{s:6, x:27, y:26},
-{s:1, x:22, y:26},
-{s:1, x:1, y:17},
-{s:1, x:35, y:29},
-{s:1, x:12, y:19}
-
- ]
- }
- }
-
- return Level;
-})
\ No newline at end of file
diff --git a/lib/Chuck/Physics/Doll.js b/lib/Chuck/Physics/Doll.js
deleted file mode 100644
index a9455ff..0000000
--- a/lib/Chuck/Physics/Doll.js
+++ /dev/null
@@ -1,114 +0,0 @@
-define(["Vendor/Box2D", "Chuck/Settings"], function(Box2D, Settings){
-
- function Doll (physicsEngine, id){
- this.id = id;
- this.physicsEngine = physicsEngine;
- this.body;
- this.legs;
- this.contactPoint;
-
- this.init(this.physicsEngine.getWorld());
- }
-
- Doll.prototype.init = function (world) {
-
- var bodyDef = new Box2D.Dynamics.b2BodyDef();
- bodyDef.position.x = 220 / Settings.RATIO;
- bodyDef.position.y = 0 / Settings.RATIO;
- bodyDef.fixedRotation = true;
- bodyDef.linearDamping = Settings.PLAYER_LINEAR_DAMPING;
- bodyDef.type = Box2D.Dynamics.b2Body.b2_dynamicBody;
- bodyDef.userData = 'player-' + this.id;
-
- this.body = world.CreateBody(bodyDef);
-
- var fixtureDef = new Box2D.Dynamics.b2FixtureDef();
- fixtureDef.density = Settings.PLAYER_DENSITY;
- fixtureDef.friction = 0;
- fixtureDef.restitution = Settings.PLAYER_RESTITUTION;
-
- var headShape = new Box2D.Collision.Shapes.b2CircleShape();
- headShape.SetRadius(5 / Settings.RATIO);
- headShape.SetLocalPosition(new Box2D.Common.Math.b2Vec2(0 / Settings.RATIO, -37 / Settings.RATIO));
- fixtureDef.shape = headShape;
- fixtureDef.isSensor = false;
- fixtureDef.userData = 'myHead-' + this.id;
- this.body.CreateFixture(fixtureDef);
-
- var bodyShape = new Box2D.Collision.Shapes.b2PolygonShape();
- bodyShape.SetAsOrientedBox(5 / Settings.RATIO, 16 / Settings.RATIO, new Box2D.Common.Math.b2Vec2(0 / Settings.RATIO, -21 / Settings.RATIO));
- fixtureDef.shape = bodyShape;
- fixtureDef.isSensor = false;
- fixtureDef.userData = 'myBody-' + this.id;
- this.body.CreateFixture(fixtureDef);
-
- var legsShape = new Box2D.Collision.Shapes.b2CircleShape();
- legsShape.SetRadius(5 / Settings.RATIO);
- legsShape.SetLocalPosition(new Box2D.Common.Math.b2Vec2(0 / Settings.RATIO, -5 / Settings.RATIO));
- fixtureDef.shape = legsShape;
- fixtureDef.friction = Settings.PLAYER_FRICTION;
- fixtureDef.isSensor = false;
- fixtureDef.userData = 'myLegs-' + this.id;
- this.legs = this.body.CreateFixture(fixtureDef);
-
- var feetShape = new Box2D.Collision.Shapes.b2CircleShape();
- feetShape.SetRadius(4 / Settings.RATIO);
- feetShape.SetLocalPosition(new Box2D.Common.Math.b2Vec2(0 / Settings.RATIO, 0 / Settings.RATIO));
- fixtureDef.shape = feetShape;
- fixtureDef.isSensor = true;
- fixtureDef.userData = 'myFeet-' + this.id;
- this.body.CreateFixture(fixtureDef);
-
- this.body.SetActive(false);
- }
-
- Doll.prototype.spawn = function (x, y) {
- this.body.SetPosition(new Box2D.Common.Math.b2Vec2(x / Settings.RATIO, y / Settings.RATIO));
- this.body.SetActive(true);
- }
-
- Doll.prototype.getBody = function () {
- return this.body;
- }
-
- Doll.prototype.setFriction = function (friction) {
- if(!friction) friction = -1;
-
- if (this.legs.GetFriction() != friction)
- {
- this.legs.SetFriction(friction);
- }
- }
-
- Doll.prototype.move = function (direction, speed) {
- this.setFriction(Settings.PLAYER_MOTION_FRICTION);
- this.body.SetAwake(true);
- var vector = new Box2D.Common.Math.b2Vec2(speed * direction, this.body.GetLinearVelocity().y);
- this.body.SetLinearVelocity(vector);
- }
-
- Doll.prototype.stop = function () {
- this.setFriction(Settings.PLAYER_FRICTION);
- }
-
- Doll.prototype.jump = function () {
- this.body.SetAwake(true);
-
- var vector = new Box2D.Common.Math.b2Vec2(0, -Settings.JUMP_SPEED);
- this.body.ApplyImpulse(vector, this.body.GetPosition());
-
- // maybe change to a constant force instead of applying of force?
- // to prevent higher jumping running uphill, etc.
- }
-
- Doll.prototype.jumping = function () {
- var vector = new Box2D.Common.Math.b2Vec2(0, -0.05);
- this.body.ApplyImpulse(vector, this.body.GetPosition());
- }
-
- Doll.prototype.destroy = function() {
- this.body.GetWorld().DestroyBody(this.body);
- }
-
- return Doll;
-});
\ No newline at end of file
diff --git a/lib/Chuck/Physics/Engine.js b/lib/Chuck/Physics/Engine.js
deleted file mode 100755
index 47605d1..0000000
--- a/lib/Chuck/Physics/Engine.js
+++ /dev/null
@@ -1,63 +0,0 @@
-define(["Chuck/Settings", "Client/Dom", "Vendor/Box2D", "Chuck/Collision/Detector"], function(Settings, Dom, Box2D, CollisionDetector){
-
- function Engine () {
- this.world;
- this.init();
- }
-
- Engine.prototype.init = function() {
- this.world = new Box2D.Dynamics.b2World(new Box2D.Common.Math.b2Vec2(0, Settings.BOX2D_GRAVITY), Settings.BOX2D_ALLOW_SLEEP);
-
- if(Settings.IS_BROWSER_ENVIRONMENT && Settings.DEBUG_MODE) {
- this.setupDebugDraw();
- }
- }
-
- Engine.prototype.getWorld = function() {
- return this.world;
- }
-
- Engine.prototype.setCollisionDetector = function(me) {
-
- var detector = new CollisionDetector(me);
- this.world.SetContactListener(detector.getListener());
- }
-
- Engine.prototype.setupDebugDraw = function() {
- //var debugSprite = Settings.DEBUG_DRAW_CANVAS_SPRITE;
- var debugSprite = Dom.getDebugCanvas().getContext("2d");
-
- // set debug draw
- var debugDraw = new Box2D.Dynamics.b2DebugDraw();
-
- debugDraw.SetSprite(debugSprite);
- debugDraw.SetDrawScale(Settings.RATIO);
- debugDraw.SetFillAlpha(0.5);
- debugDraw.SetLineThickness(1.0);
-
- debugDraw.SetFlags(null
- | Box2D.Dynamics.b2DebugDraw.e_shapeBit
- | Box2D.Dynamics.b2DebugDraw.e_jointBit
- //| Box2D.Dynamics.b2DebugDraw.e_coreShapeBit
- //| Box2D.Dynamics.b2DebugDraw.e_aabbBit
- //| Box2D.Dynamics.b2DebugDraw.e_centerOfMassBit
- //| Box2D.Dynamics.b2DebugDraw.e_obbBit
- //| Box2D.Dynamics.b2DebugDraw.e_pairBit
- );
-
- this.world.SetDebugDraw(debugDraw);
- this.world.SetWarmStarting(true);
- }
-
- Engine.prototype.createBody = function(bodyDef) {
- return this.world.CreateBody(bodyDef);
- }
-
- Engine.prototype.update = function() {
- this.world.Step(Settings.BOX2D_TIME_STEP, Settings.BOX2D_VELOCITY_ITERATIONS, Settings.BOX2D_POSITION_ITERATIONS);
- this.world.ClearForces();
- this.world.DrawDebugData();
- }
-
- return Engine;
-})
\ No newline at end of file
diff --git a/lib/Chuck/Player.js b/lib/Chuck/Player.js
deleted file mode 100644
index 4d54cf3..0000000
--- a/lib/Chuck/Player.js
+++ /dev/null
@@ -1,188 +0,0 @@
-define(["Chuck/Physics/Doll", "Chuck/Settings"], function(Doll, Settings){
-
- function Player (physicsEngine, id, repository) {
- this.physicsEngine = physicsEngine;
- this.id = id;
- this.repository = repository;
- this.standing = false;
- this.doll;
- this.mc;
- this.currentAnimationState = 'stand';
- this.lookDirection = 1;
- this.moveDirection = 0;
-
- this.init(id);
- }
-
- Player.prototype.init = function(id) {
- this.doll = new Doll(this.physicsEngine, id);
- //this.mc = EmbedHandler.load(EmbedHandler.CHUCK);
- //this.mc.stop();
- //var mclp = new MovieClipLabelParser();
- //mclp.parse(this.mc);
- }
-
- Player.prototype.spawn = function(x, y) {
- //this.repository.createModel(this.mc, this.doll.getBody());
- this.doll.spawn(x, y);
- }
-
- Player.prototype.getDoll = function() {
- return this.doll;
- }
-
- Player.prototype.getBody = function() {
- return this.doll.getBody();
- }
-
- Player.prototype.setStanding = function(isStanding) {
- var resetStates = ['jump', 'jumploop'];
- if (resetStates.indexOf(this.currentAnimationState)>=0 && !this.standing && isStanding) {
- this.animate('stand');
- }
- this.standing = isStanding;
- }
-
- Player.prototype.isStanding = function() {
- return this.standing;
- }
-
- Player.prototype.move = function(direction) {
- this.moveDirection = direction;
-
- switch(true) {
- case direction == this.lookDirection && this.isStanding():
- this.doll.move(direction, Settings.RUN_SPEED);
- break;
-
- case !this.isStanding():
- this.doll.move(direction, Settings.FLY_SPEED);
- break;
-
- default:
- this.doll.move(direction, Settings.WALK_SPEED);
- break;
- }
-
- if (this.isStanding()) {
- this.animate(this.calculateWalkAnimation());
- }
- }
-
- Player.prototype.stop = function() {
- this.moveDirection = 0;
- this.doll.stop();
- if (this.isWalking() || this.standing) {
- this.animate('stand');
- }
- }
-
- Player.prototype.jump = function() {
- if (this.isStanding()) {
- this.doll.jump();
- this.animate('jump');
- this.setStanding(false);
- }
- }
-
- Player.prototype.jumping = function() {
- if (!this.isStanding()) {
- this.doll.jumping();
- }
- }
-
- Player.prototype.duck = function() {
- if (this.standing && !this.isWalking()) {
- this.animate('duck');
- }
- }
-
- Player.prototype.standUp = function() {
- if (this.standing) {
- this.animate('standup');
- }
- }
-
- Player.prototype.animate = function(type) {
- if (type == this.currentAnimationState) {
- return;
- }
-
- //this.mc.gotoAndPlay(type);
-
- this.currentAnimationState = type;
- }
-
- Player.prototype.calculateWalkAnimation = function() {
- if (this.moveDirection == this.lookDirection) {
- return 'run';
- }
- return 'walkback';
- }
-
- Player.prototype.look = function(x, y) {
- /*
- var degree = Math.atan2(Settings.STAGE_WIDTH / 2 - x, Settings.STAGE_HEIGHT / 2 - 25 - y) / (Math.PI / 180);
- var lastLookDirection = this.lookDirection;
-
- if (x < Settings.STAGE_WIDTH / 2) {
- this.mc.scaleX = -1;
- this.lookDirection = -1;
- degree = (-45 + degree / 2);
- this.mc.head.rotation = degree;
- } else if (x >= Settings.STAGE_WIDTH / 2) {
- this.mc.scaleX = 1;
- this.lookDirection = 1;
- degree = (45 + -degree / 2) - 90;
- this.mc.head.rotation = degree;
- }
-
- if (this.lookDirection != lastLookDirection && this.isWalking()) {
- this.animate(this.calculateWalkAnimation());
- }*/
- }
-
- Player.prototype.isWalking = function() {
- var states = ['walk', 'walkback', 'run'];
-
- if (states.indexOf(this.currentAnimationState) >= 0) {
- return true;
- }
- return false;
- }
-
- // called by CollisionDetection
- Player.prototype.onFootSensorDetection = function(isColliding) {
- if(isColliding) {
- if(this.doll.getBody().GetLinearVelocity().y < -Settings.JUMP_SPEED && !this.isStanding()) {
- return;
- }
- this.setStanding(true);
- } else {
- // TODO This needs some more thought to it.
- // maybe take a look at collision groups for collision detection,
- // to group all tiles together
-
- //this.setStanding(false);
- //this.animate('jumploop');
- }
- }
-
- Player.prototype.update = function() {
- //this.mc.head.y = this.mc.head_posmask.y;
-
- if (this.doll.getBody().GetLinearVelocity().x == 0 && this.isWalking()) {
- this.stop();
- }
-
- if (!this.doll.getBody().IsAwake()) {
- this.setStanding(true);
- }
- }
-
- Player.prototype.destroy = function() {
- this.doll.destroy();
- }
-
- return Player;
-});
diff --git a/lib/Chuck/Processors/ClientProcessor.js b/lib/Chuck/Processors/ClientProcessor.js
deleted file mode 100755
index a39a7e6..0000000
--- a/lib/Chuck/Processors/ClientProcessor.js
+++ /dev/null
@@ -1,106 +0,0 @@
-var requires = [
- "Chuck/View/ViewController",
- "Chuck/Physics/Engine",
- "Chuck/Player",
- "Chuck/Control/InputControlUnit",
- "Chuck/Settings",
- "Vendor/Box2D",
- "Chuck/Loader/Level",
- "RequestAnimationFrame"
-];
-
-define(requires,
- function(ViewController, PhysicsEngine, Player, InputControlUnit, Settings, Box2D, Level, requestAnimFrame) {
-
- function ClientProcessor (clientGame) {
- this.clientGame = clientGame;
- this.init();
- };
-
- ClientProcessor.prototype.init = function() {
- this.viewController = new ViewController();
- this.physicsEngine = new PhysicsEngine();
-
- this.update();
- }
-
- ClientProcessor.prototype.loadLevel = function(path) {
- if (this.level) {
- this.level.unload();
- }
-
- this.level = new Level(path, this.physicsEngine);
- this.level.loadLevelInToEngine();
- }
-
- ClientProcessor.prototype.getPhysicsEngine = function() {
- return this.physicsEngine;
- }
-
- ClientProcessor.prototype.getMe = function() {
- return this.me;
- }
-
- ClientProcessor.prototype.update = function() {
-
- requestAnimFrame(this.update.bind(this));
-
- this.physicsEngine.update();
- this.viewController.update();
-
- if(this.me) {
- this.inputControlUnit.update();
- this.me.update();
- }
- }
-
- ClientProcessor.prototype.destruct = function() {
-
- }
-
- ClientProcessor.prototype.spawnNewPlayerWithId = function(id) {
- var player = new Player(this.physicsEngine, id, null);
- player.spawn(100, 0);
- this.physicsEngine.setCollisionDetector(player);
- return player;
- }
-
- ClientProcessor.prototype.spawnMeWithId = function(id) {
- this.me = this.spawnNewPlayerWithId(id);
- this.inputControlUnit = new InputControlUnit(this.me, this);
- }
-
- ClientProcessor.prototype.userIdLeft = function(userId) {
- // body...
- };
-
- ClientProcessor.prototype.sendGameCommand = function(command, options) {
- this.clientGame.sendGameCommand(command, options);
- }
-
- ClientProcessor.prototype.processGameCommand = function(command, options) {
-
- if (command == "worldUpdate") {
-
- var body = this.physicsEngine.world.GetBodyList();
- do {
- var userData = body.GetUserData();
- if(userData && options[userData]) {
- var update = options[userData];
-
- //console.log('position difference:', (body.GetPosition().y - update.p.y) * 30, body.GetLinearVelocity().y);
-
- body.SetAwake(true);
- body.SetPosition(update.p);
- body.SetAngle(update.a);
- body.SetLinearVelocity(update.lv);
- body.SetAngularVelocity(update.av);
- }
- } while (body = body.GetNext());
-
- }
-
- }
-
- return ClientProcessor;
-});
diff --git a/lib/Chuck/Processors/ServerProcessor.js b/lib/Chuck/Processors/ServerProcessor.js
deleted file mode 100755
index 03e0d7e..0000000
--- a/lib/Chuck/Processors/ServerProcessor.js
+++ /dev/null
@@ -1,103 +0,0 @@
-var requires = [
- "Chuck/Physics/Engine",
- "Chuck/Player",
- "Vendor/Box2D",
- "Chuck/Loader/Level",
- "Chuck/Control/InputController",
- "RequestAnimationFrame"
-];
-
-define(requires, function(PhysicsEngine, Player, Box2D, Level, InputController, requestAnimFrame){
-
- function ServerProcessor (serverGame) {
- this.serverGame = serverGame;
- this.players = {};
- this.init();
- };
-
- ServerProcessor.prototype.init = function() {
- this.physicsEngine = new PhysicsEngine();
-
- this.update();
- this.updateWorld();
- }
-
- ServerProcessor.prototype.loadLevel = function(path) {
- if (this.level) {
- this.level.unload();
- }
-
- this.level = new Level(path, this.physicsEngine);
- this.level.loadLevelInToEngine();
- }
-
- ServerProcessor.prototype.getPhysicsEngine = function() {
- return this.physicsEngine;
- }
-
- ServerProcessor.prototype.update = function() {
-
- requestAnimFrame(this.update.bind(this));
-
- this.physicsEngine.update();
- for(var id in this.players) {
- this.players[id].player.update();
- }
- }
-
- ServerProcessor.prototype.destruct = function() {
-
- }
-
- ServerProcessor.prototype.createPlayerWithId = function(id) {
- var player = new Player(this.physicsEngine, id, null);
- this.players[id] = {
- player: player,
- inputController: new InputController(player)
- };
-
- player.spawn(100, 0);
- this.physicsEngine.setCollisionDetector(player);
- }
-
- ServerProcessor.prototype.progressGameCommandFromId = function(command, options, id) {
- var inputController = this.players[id].inputController;
- if (typeof inputController[command] == 'function') {
- inputController[command](options);
- }
- }
-
- ServerProcessor.prototype.userIdLeft = function(id) {
- var player = this.players[id].player;
- player.destroy();
- }
-
- ServerProcessor.prototype.updateWorld = function() {
-
- var update = {};
- var isUpdateNeeded = false;
-
- var body = this.physicsEngine.world.GetBodyList();
- do {
- var userData = body.GetUserData();
-
- if(userData && body.IsAwake()){
- update[userData] = {
- p: body.GetPosition(),
- a: body.GetAngle(),
- lv: body.GetLinearVelocity(),
- av: body.GetAngularVelocity()
- };
- isUpdateNeeded = true;
- }
- } while (body = body.GetNext());
-
- if(isUpdateNeeded) {
- this.serverGame.updateClientsWorld(update);
- }
-
- setTimeout(this.updateWorld.bind(this), 15); // FIXME: do this a different hearbeat
- }
-
- return ServerProcessor;
-});
diff --git a/lib/Chuck/Server.js b/lib/Chuck/Server.js
deleted file mode 100644
index 9306fdb..0000000
--- a/lib/Chuck/Server.js
+++ /dev/null
@@ -1 +0,0 @@
-Server.js
\ No newline at end of file
diff --git a/lib/Chuck/ServerGame.js b/lib/Chuck/ServerGame.js
deleted file mode 100644
index b2f14b1..0000000
--- a/lib/Chuck/ServerGame.js
+++ /dev/null
@@ -1,33 +0,0 @@
-define(["Chuck/Processors/ServerProcessor"], function(ServerProcessor) {
-
- function ServerGame(channel) {
- this.channel = channel;
- this.serverProcessor = new ServerProcessor(this);
- }
-
- ServerGame.prototype.loadLevel = function(path) {
- this.serverProcessor.loadLevel(path);
- }
-
- ServerGame.prototype.progressGameCommandFromUser = function(command, options, user) {
- this.serverProcessor.progressGameCommandFromId(command, options, user.id);
- }
-
- ServerGame.prototype.destruct = function() {
- this.serverProcessor.destruct();
- }
-
- ServerGame.prototype.createPlayerForUser = function(user) {
- this.serverProcessor.createPlayerWithId(user.id);
- }
-
- ServerGame.prototype.userIdLeft = function(userId) {
- this.serverProcessor.userIdLeft(userId);
- };
-
- ServerGame.prototype.updateClientsWorld = function(update_world) {
- this.channel.sendCommandToAllUsers('gameCommand', {worldUpdate: update_world});
- }
-
- return ServerGame;
-});
\ No newline at end of file
diff --git a/lib/Chuck/Settings.js b/lib/Chuck/Settings.js
deleted file mode 100755
index 6aa36ea..0000000
--- a/lib/Chuck/Settings.js
+++ /dev/null
@@ -1,56 +0,0 @@
-define(function() {
-
- var Settings = {
- STAGE_WIDTH: 600,
- STAGE_HEIGHT: 400,
-
- // BOX2D INITIALATORS
- RATIO: 35,
- BOX2D_WORLD_AABB_SIZE: 3000,
- BOX2D_ALLOW_SLEEP: true,
- BOX2D_GRAVITY: 16,
- BOX2D_VELOCITY_ITERATIONS: 5,
- BOX2D_POSITION_ITERATIONS: 5,
- BOX2D_TIME_STEP: 1 / 60,
-
- // GRAPHIC PATHS
- GRAPHICS_PATH: 'static/img/',
- GRAPHICS_SUBPATH_ITEMS: 'items/',
- GRAPHICS_SUBPATH_CHARACTERS: 'characters/',
-
- TILE_SIZE: 15,
-
- // GAME PLAY
- WALK_SPEED: 2.5,
- RUN_SPEED: 4.0,
- FLY_SPEED: 3.2,
- JUMP_SPEED: 3.0,
- JUMP_UPLIFT: 0.05,
-
- // restitution: bouncyness, friction: rubbing, density: mass
- TILE_FRICTION: 0.99,
- TILE_RESTITUTION: 0.1,
-
- PLAYER_DENSITY: 0.96,
- PLAYER_FRICTION: 5,
- PLAYER_MOTION_FRICTION: 0.1,
- PLAYER_RESTITUTION: 0.0,
- PLAYER_LINEAR_DAMPING: .5,
-
-
- ITEM_DENSITY: 0.9,
- ITEM_FRICTION: 0.99,
- ITEM_RESTITUTION: 0.02,
-
- CANVAS_DOM_ID: 'canvasContainer',
- IS_BROWSER_ENVIRONMENT: isBrowserEnvironment(),
-
- DEBUG_MODE: true
- };
-
- function isBrowserEnvironment(){
- return typeof window !== 'undefined';
- }
-
- return Settings;
-})
\ No newline at end of file
diff --git a/lib/Chuck/View/CameraController.js b/lib/Chuck/View/CameraController.js
deleted file mode 100755
index 76e17be..0000000
--- a/lib/Chuck/View/CameraController.js
+++ /dev/null
@@ -1,50 +0,0 @@
-define(['Vendor/Three', 'Chuck/Settings'], function(Three, Settings) {
-
- function CameraController(isOrthographic) {
-
- isOrthographic = typeof isOrthographic == 'undefined'
- ? true
- : isOrthographic;
-
-
- if(isOrthographic) {
-
- this.camera = new Three.OrthographicCamera(
- -Settings.STAGE_WIDTH/2,
- Settings.STAGE_WIDTH/2,
- Settings.STAGE_HEIGHT/2,
- -Settings.STAGE_HEIGHT/2,
- -2000,
- 1000
- );
-
- } else {
-
- this.camera = new Three.PerspectiveCamera(
- 45,
- Settings.STAGE_WIDTH / Settings.STAGE_HEIGHT,
- -2000,
- 1000
- );
- }
-
- this.camera.position.z = 481;
- }
-
- CameraController.prototype.getCamera = function(){
- return this.camera;
- }
-
- CameraController.prototype.setPosition = function(x, y){
- this.camera.position.x = x;
- this.camera.position.y = y;
- }
-
-
- CameraController.prototype.setZoom = function(z){
- this.camera.position.z = z;
- }
-
- return CameraController;
-
-});
\ No newline at end of file
diff --git a/lib/Chuck/View/ViewController.js b/lib/Chuck/View/ViewController.js
deleted file mode 100755
index fc868f6..0000000
--- a/lib/Chuck/View/ViewController.js
+++ /dev/null
@@ -1,94 +0,0 @@
-define(["Client/Dom", "Vendor/Three", "Chuck/Settings", "Chuck/View/CameraController"], function(Dom, Three, Settings, CameraController){
-
- function ViewController(){
-
- this.mesh = null;
- this.scene = null;
- this.renderer = null;
- this.cameraController = new CameraController();
-
- this.init();
- }
-
- ViewController.prototype.init = function(){
-
- var self = this;
-
- this.renderer = new Three.WebGLRenderer({
- //antialias: true,
- preserveDrawingBuffer: true
- });
-
- //this.renderer = new THREE.CanvasRenderer();
-
- this.renderer.setClearColorHex(0x333333, 1);
- this.renderer.setSize(Settings.STAGE_WIDTH, Settings.STAGE_HEIGHT);
-
- Dom.setCanvas(this.renderer.domElement);
-
- if(Settings.DEBUG_MODE){
- Dom.createDebugCanvas();
- }
-
- this.scene = new Three.Scene();
- this.scene.add(this.cameraController.getCamera());
-
-
- var ambientLight = new Three.AmbientLight(0xffffff);
- this.scene.add(ambientLight);
-
- var directionalLight = new Three.DirectionalLight(0xffffff);
- directionalLight.position.set(1, 0, 10).normalize();
- this.scene.add(directionalLight);
-
-
- this.createMesh(100, 100, 100, 100, 'static/img/100.png', function(mesh){
- self.mesh = mesh;
- self.scene.add(mesh);
- });
-/*
- this.createMesh(50, 50, 200, 100, 'static/img/100.png', function(mesh){
- self.scene.add(mesh);
- });
-*/
-
- //this.animate(this);
- }
-
- ViewController.prototype.update = function() {
-
- if(this.mesh) {
- this.mesh.rotation.z += .01;
- this.mesh.position.z += 1;
- this.mesh.position.x += .4;
- this.mesh.position.y += .4;
- }
-
- this.render();
- }
-
- ViewController.prototype.render = function() {
-
- this.renderer.render(this.scene, this.cameraController.getCamera());
- }
-
- ViewController.prototype.createMesh = function(width, height, x, y, imgPath, callback) {
- var textureImg = new Image();
- textureImg.onload = function(){
- var material = new Three.MeshLambertMaterial({
- map: Three.ImageUtils.loadTexture(imgPath)
- });
-
- var mesh = new Three.Mesh(new Three.PlaneGeometry(width, height), material);
- mesh.overdraw = true;/*
- mesh.position.z = 0;
- mesh.position.x = x;
- mesh.position.y = y;
- */
- callback(mesh);
- };
- textureImg.src = imgPath;
- }
-
- return ViewController;
-});
\ No newline at end of file
diff --git a/lib/Client/Dom.js b/lib/Client/Dom.js
deleted file mode 100755
index 81c9079..0000000
--- a/lib/Client/Dom.js
+++ /dev/null
@@ -1,53 +0,0 @@
-define(['Chuck/Settings'], function(Settings) {
-
- var Dom = {
- canvas: null,
- debugCanvas: null
- };
-
- Dom.getCanvasContainer = function(){
- var container = document.getElementById(Settings.CANVAS_DOM_ID);
-
- if(container) {
- return container;
- } else {
- throw 'Canvas Container missing: #' + Settings.CANVAS_DOM_ID;
- }
- }
-
- Dom.getCanvas = function(){
- return Dom.canvas;
- }
-
- Dom.setCanvas = function(canvas){
-
- var container = Dom.getCanvasContainer();
- if(Dom.canvas){
- container.removeChild(Dom.canvas);
- }
-
- Dom.canvas = canvas;
- container.appendChild(canvas);
- }
-
- Dom.getDebugCanvas = function(){
- return Dom.debugCanvas;
- }
-
- Dom.createDebugCanvas = function(){
-
- var container = Dom.getCanvasContainer();
- if(Dom.debugCanvas){
- container.removeChild(Dom.debugCanvas);
- }
-
- var canvas = document.createElement('canvas');
- canvas.width = Settings.STAGE_WIDTH;
- canvas.height = Settings.STAGE_HEIGHT;
- Dom.debugCanvas = canvas;
- container.appendChild(canvas);
- }
-
- return Dom;
-
-});
\ No newline at end of file
diff --git a/lib/Client/Networker.js b/lib/Client/Networker.js
deleted file mode 100644
index efb3270..0000000
--- a/lib/Client/Networker.js
+++ /dev/null
@@ -1,106 +0,0 @@
-define(["Protocol/Helper", "Chuck/ClientGame"], function(ProtocolHelper, ClientGame) {
-
- function Networker(socketLink) {
- this.socketLink = socketLink;
- this.clientGame = null;
-
- this.init();
- }
-
- Networker.prototype.init = function() {
-
- var self = this;
-
- this.socketLink.on('connect', function() {
- self.onConnect();
- });
-
- this.socketLink.on('message', function(message) {
- self.onMessage(message);
- });
-
- this.socketLink.on('disconnect', function() {
- self.onDisconnect();
- });
- }
-
- Networker.prototype.onConnect = function() {
- this.join('dungeon');
- }
-
- Networker.prototype.onMessage = function(message) {
- var self = this;
- ProtocolHelper.runCommands(message, function(command, options) {
- self.processControlCommand(command, options);
- });
- }
-
- Networker.prototype.onDisconnect = function() {
- this.clientGame.destruct();
- this.clientGame = null;
- }
-
- Networker.prototype.join = function(channelName){
- this.sendCommand('join', channelName);
- }
-
- Networker.prototype.sendCommand = function(command, options) {
- var message = ProtocolHelper.encodeCommand(command, options);
- this.socketLink.send(message);
- }
-
- Networker.prototype.onJoinSuccess = function(options) {
- this.clientGame = new ClientGame(this, options.id);
- this.clientGame.loadLevel("default.json")
- console.log("Joined " + options.channelName);
-
- if (options.userIds && options.userIds.length > 0) {
- for(var i = 0; i < options.userIds.length; i++) {
- this.clientGame.userJoined(options.userIds[i])
- }
- }
- }
-
- Networker.prototype.onUserJoined = function(userId) {
- this.clientGame.userJoined(userId);
- console.log("User " + userId + " joined");
- }
-
- Networker.prototype.sendGameCommand = function(command, options) {
- var message = {};
- message[command] = options || true;
- this.sendCommand('gameCommand', message);
- }
-
- Networker.prototype.onUserLeft = function(userId) {
- this.clientGame.userLeft(userId);
- }
-
- Networker.prototype.processControlCommand = function(command, options) {
- switch(command) {
- case 'joinSuccess':
- this.onJoinSuccess(options);
- break;
-
- case 'gameCommand':
- for(var c in options) {
- this.clientGame.processGameCommand(c, options[c]);
- }
- break;
-
- case 'userJoined':
- this.onUserJoined(options);
- break;
-
- case 'userLeft':
- this.onUserLeft(options);
- break;
-
- default:
- break;
- }
- }
-
- return Networker;
-
-});
\ No newline at end of file
diff --git a/lib/Protocol/Helper.js b/lib/Protocol/Helper.js
deleted file mode 100644
index a383a0e..0000000
--- a/lib/Protocol/Helper.js
+++ /dev/null
@@ -1,25 +0,0 @@
-define(["Protocol/Parser"], function(Parser) {
-
- var Helper = {}
-
- Helper.encodeCommand = function(command, options){
- return Parser.encode(Helper.assemble(command, options));
- }
-
- Helper.assemble = function(command, options){
- var commands = {};
- commands[command] = options;
- return commands;
- }
-
- Helper.runCommands = function(message, callback){
- var commands = Parser.decode(message);
-
- for(var command in commands) {
- callback(command, commands[command]);
- }
- }
-
- return Helper;
-
-});
\ No newline at end of file
diff --git a/lib/Protocol/Parser.js b/lib/Protocol/Parser.js
deleted file mode 100644
index fbc0426..0000000
--- a/lib/Protocol/Parser.js
+++ /dev/null
@@ -1,14 +0,0 @@
-define(function() {
-
- var Parser = {};
-
- Parser.encode = function(message){
- return JSON.stringify(message);
- }
-
- Parser.decode = function(message){
- return JSON.parse(message);
- }
-
- return Parser;
-});
\ No newline at end of file
diff --git a/lib/RequestAnimationFrame.js b/lib/RequestAnimationFrame.js
deleted file mode 100644
index 4682cae..0000000
--- a/lib/RequestAnimationFrame.js
+++ /dev/null
@@ -1,25 +0,0 @@
-define(['Chuck/Settings'], function(Settings) {
-
- var requestAnimFrame = (function(){
-
- var _setTimeout = function( callback ){
- setTimeout(callback, Settings.BOX2D_TIME_STEP * 1000);
- }
-
- if (typeof window != 'undefined') {
-
- return window.requestAnimationFrame ||
- window.webkitRequestAnimationFrame ||
- window.mozRequestAnimationFrame ||
- window.oRequestAnimationFrame ||
- window.msRequestAnimationFrame ||
- _setTimeout;
-
- } else {
- return _setTimeout;
- }
-
- })();
-
- return requestAnimFrame;
-});
\ No newline at end of file
diff --git a/lib/Server/Channel.js b/lib/Server/Channel.js
deleted file mode 100644
index 8dfe7e6..0000000
--- a/lib/Server/Channel.js
+++ /dev/null
@@ -1,52 +0,0 @@
-define(["Chuck/ServerGame"], function(ServerGame) {
-
- function Channel(name) {
- this.name = name;
- this.users = {};
- this.serverGame = new ServerGame(this);
- this.serverGame.loadLevel("default.json")
- }
-
- Channel.validateName = function(name){
- return true;
- }
-
- Channel.prototype.addUser = function(user){
- var userIds = Object.keys(this.users);
-
- this.users[user.id] = user;
-
- user.sendCommand('joinSuccess', {channelName: this.name, id: user.id, userIds: userIds});
- this.sendCommandToAllUsersExcept('userJoined', user.id, user);
-
- this.serverGame.createPlayerForUser(user)
- }
-
- Channel.prototype.releaseUser = function(user) {
- this.serverGame.userIdLeft(user.id);
-
- this.sendCommandToAllUsersExcept("userLeft", user.id, user);
- delete this.users[user.id];
- }
-
- Channel.prototype.sendCommandToAllUsers = function(command, options) {
- for(var id in this.users) {
- this.users[id].sendCommand(command, options);
- }
- }
-
- Channel.prototype.sendCommandToAllUsersExcept = function(command, options, except_user) {
- for(var id in this.users) {
- if (id != except_user.id) {
- this.users[id].sendCommand(command, options);
- }
- }
- }
-
- Channel.prototype.processGameCommandFromUser = function(command, options, user) {
- this.serverGame.progressGameCommandFromUser(command, options, user);
- }
-
- return Channel;
-
-});
\ No newline at end of file
diff --git a/lib/Server/Coordinator.js b/lib/Server/Coordinator.js
deleted file mode 100644
index cd5d1da..0000000
--- a/lib/Server/Coordinator.js
+++ /dev/null
@@ -1,52 +0,0 @@
-define(["Server/User", "Server/Channel"], function(User, Channel) {
-
- function Coordinator() {
- this.channels = {};
- this.lobbyUsers = {};
- }
-
- Coordinator.prototype.createUser = function(socketLink){
- var user = new User(socketLink, this);
- this.assignUserToLobby(user);
- }
-
- Coordinator.prototype.assignUserToLobby = function(user){
- if(user.channel) {
- user.channel.releaseUser(user);
- }
- this.lobbyUsers[user.id] = user;
- }
-
- Coordinator.prototype.assignUserToChannel = function(user, channelName){
-
- if(user.channel) {
- user.channel.releaseUser(user);
- }
-
- if(!Channel.validateName(channelName)){
- //TODO send validation error
- return false;
- }
-
- var channel = this.channels[channelName];
- if(!channel) {
- channel = new Channel(channelName);
- this.channels[channelName] = channel;
- }
-
- channel.addUser(user);
- user.setChannel(channel);
-
- delete this.lobbyUsers[user.id];
- }
-
- Coordinator.prototype.removeUser = function(user){
- delete this.lobbyUsers[user.id];
- if(user.channel) {
- user.channel.releaseUser(user);
- }
- }
-
- return Coordinator;
-
-});
\ No newline at end of file
diff --git a/lib/Server/HttpServer.js b/lib/Server/HttpServer.js
deleted file mode 100644
index 20b24ef..0000000
--- a/lib/Server/HttpServer.js
+++ /dev/null
@@ -1,66 +0,0 @@
-define(['http', 'node-static'], function(http, nodeStatic) {
-
- function HttpServer(options) {
- options.port = options.port || 1234;
- options.caching = typeof options.caching != 'undefined' ? options.caching : true;
- options.rootDirectory = options.rootDirectory || './';
-
- this.server = null;
-
- this.init(options);
- }
-
- HttpServer.prototype.init = function(options) {
- var self = this;
-
- var fileServer = new nodeStatic.Server(options.rootDirectory, { cache: options.caching });
-
- this.server = http.createServer(
- function(req, res){
- req.addListener('end', function () {
- switch(true) {
- case req.url == '/':
- fileServer.serveFile('./static/html/index.html', 200, {}, req, res);
- break;
-
- case req.url == '/client.js':
- fileServer.serveFile('./client.js', 200, {}, req, res);
- break;
-
- case req.url == '/require.js':
- fileServer.serveFile('./node_modules/requirejs/require.js', 200, {}, req, res);
- break;
-
- case new RegExp(/^\/lib/).test(req.url):
- fileServer.serve(req, res, function(){
- self.handleFileError(res)
- });
- break;
-
- case new RegExp(/^\/static/).test(req.url):
- fileServer.serve(req, res, function(){
- self.handleFileError(res)
- });
- break;
-
- default:
- self.handleFileError(res);
- break;
- }
- });
- }
- );
- this.server.listen(options.port);
- }
-
- HttpServer.prototype.getServer = function(){
- return this.server;
- }
-
- HttpServer.prototype.handleFileError = function (res){
- res.writeHead(404, {'Content-Type': 'text/html'});
- res.end('
404 not ... found
');
- }
-
- return HttpServer;
-});
\ No newline at end of file
diff --git a/lib/Server/Socket.js b/lib/Server/Socket.js
deleted file mode 100644
index c903dc8..0000000
--- a/lib/Server/Socket.js
+++ /dev/null
@@ -1,29 +0,0 @@
-define(['socket.io'], function(io) {
-
- function Socket(server, coordinator) {
- this.coordinator = coordinator;
- this.socket = io.listen(server);
-
- this.init(server);
- }
-
- Socket.prototype.init = function(){
-
- var self = this;
-
- this.socket.configure('development', function(){
- this.set('log level', 0);
- });
-
- this.socket.on('connection', function(user){
- self.onConnection(user);
- });
- }
-
- Socket.prototype.onConnection = function(socketLink){
- this.coordinator.createUser(socketLink);
- }
-
- return Socket;
-
-});
\ No newline at end of file
diff --git a/lib/Server/User.js b/lib/Server/User.js
deleted file mode 100644
index 3ea4f4e..0000000
--- a/lib/Server/User.js
+++ /dev/null
@@ -1,74 +0,0 @@
-define(["Protocol/Helper"], function(ProtocolHelper) {
-
- function User(socketLink, coordinator) {
-
- this.id = socketLink.id;
- this.socketLink = socketLink;
- this.coordinator = coordinator;
- this.channel = null;
-
- this.init(socketLink);
- }
-
- User.prototype.init = function(socketLink){
-
- var self = this;
-
- socketLink.on('message', function(message){
- self.onMessage(message);
- });
-
- socketLink.on('disconnect', function(){
- self.onDisconnect();
- });
- }
-
- User.prototype.setChannel = function(channel){
- this.channel = channel;
- }
-
- User.prototype.sendCommand = function(command, options) {
- var message = ProtocolHelper.encodeCommand(command, options);
- this.socketLink.send(message);
- }
-
- User.prototype.onMessage = function(message){
- var self = this;
- ProtocolHelper.runCommands(message, function(command, options){
- self.processControlCommand(command, options);
- });
- }
-
- User.prototype.onDisconnect = function(){
- this.coordinator.removeUser(this);
- }
-
- User.prototype.processControlCommand = function(command, options){
- switch(command) {
-
- case 'join':
- this.coordinator.assignUserToChannel(this, options);
- break;
-
- case 'leave':
- this.coordinator.assignUserToLobby(this);
- break;
-
- case 'gameCommand':
- for(var c in options) {
- this.channel.processGameCommandFromUser(c, options[c], this);
- }
- break;
-
- default:
- break;
- }
- }
-
- User.prototype.toString = function() {
- return "[User " + this.id + "]";
- };
-
- return User;
-
-});
\ No newline at end of file
diff --git a/lib/Vendor/.DS_Store b/lib/Vendor/.DS_Store
deleted file mode 100644
index 5008ddf..0000000
Binary files a/lib/Vendor/.DS_Store and /dev/null differ
diff --git a/lib/Vendor/Box2D.js b/lib/Vendor/Box2D.js
deleted file mode 100644
index c059918..0000000
--- a/lib/Vendor/Box2D.js
+++ /dev/null
@@ -1,10866 +0,0 @@
-define(function() {
-
-/*
-* Copyright (c) 2006-2007 Erin Catto http://www.gphysics.com
-*
-* This software is provided 'as-is', without any express or implied
-* warranty. In no event will the authors be held liable for any damages
-* arising from the use of this software.
-* Permission is granted to anyone to use this software for any purpose,
-* including commercial applications, and to alter it and redistribute it
-* freely, subject to the following restrictions:
-* 1. The origin of this software must not be misrepresented; you must not
-* claim that you wrote the original software. If you use this software
-* in a product, an acknowledgment in the product documentation would be
-* appreciated but is not required.
-* 2. Altered source versions must be plainly marked as such, and must not be
-* misrepresented as being the original software.
-* 3. This notice may not be removed or altered from any source distribution.
-*/
-var Box2D = {};
-
-(function (a2j, undefined) {
-
- function emptyFn() {};
- a2j.inherit = function(cls, base) {
- var tmpCtr = cls;
- emptyFn.prototype = base.prototype;
- cls.prototype = new emptyFn;
- cls.prototype.constructor = tmpCtr;
- };
-
- a2j.generateCallback = function generateCallback(context, cb) {
- return function () {
- cb.apply(context, arguments);
- };
- };
-
- a2j.NVector = function NVector(length) {
- if (length === undefined) length = 0;
- var tmp = new Array(length || 0);
- for (var i = 0; i < length; ++i)
- tmp[i] = 0;
- return tmp;
- };
-
- a2j.is = function is(o1, o2) {
- if (o1 === null) return false;
- if ((o2 instanceof Function) && (o1 instanceof o2)) return true;
- if ((o1.constructor.__implements != undefined) && (o1.constructor.__implements[o2])) return true;
- return false;
- };
-
- a2j.parseUInt = function(v) {
- return Math.abs(parseInt(v));
- }
-
-})(Box2D);
-
-//#TODO remove assignments from global namespace
-var Vector = Array;
-var Vector_a2j_Number = Box2D.NVector;
-//package structure
-if (typeof(Box2D) === "undefined") Box2D = {};
-if (typeof(Box2D.Collision) === "undefined") Box2D.Collision = {};
-if (typeof(Box2D.Collision.Shapes) === "undefined") Box2D.Collision.Shapes = {};
-if (typeof(Box2D.Common) === "undefined") Box2D.Common = {};
-if (typeof(Box2D.Common.Math) === "undefined") Box2D.Common.Math = {};
-if (typeof(Box2D.Dynamics) === "undefined") Box2D.Dynamics = {};
-if (typeof(Box2D.Dynamics.Contacts) === "undefined") Box2D.Dynamics.Contacts = {};
-if (typeof(Box2D.Dynamics.Controllers) === "undefined") Box2D.Dynamics.Controllers = {};
-if (typeof(Box2D.Dynamics.Joints) === "undefined") Box2D.Dynamics.Joints = {};
-//pre-definitions
-(function () {
- Box2D.Collision.IBroadPhase = 'Box2D.Collision.IBroadPhase';
-
- function b2AABB() {
- b2AABB.b2AABB.apply(this, arguments);
- };
- Box2D.Collision.b2AABB = b2AABB;
-
- function b2Bound() {
- b2Bound.b2Bound.apply(this, arguments);
- };
- Box2D.Collision.b2Bound = b2Bound;
-
- function b2BoundValues() {
- b2BoundValues.b2BoundValues.apply(this, arguments);
- if (this.constructor === b2BoundValues) this.b2BoundValues.apply(this, arguments);
- };
- Box2D.Collision.b2BoundValues = b2BoundValues;
-
- function b2Collision() {
- b2Collision.b2Collision.apply(this, arguments);
- };
- Box2D.Collision.b2Collision = b2Collision;
-
- function b2ContactID() {
- b2ContactID.b2ContactID.apply(this, arguments);
- if (this.constructor === b2ContactID) this.b2ContactID.apply(this, arguments);
- };
- Box2D.Collision.b2ContactID = b2ContactID;
-
- function b2ContactPoint() {
- b2ContactPoint.b2ContactPoint.apply(this, arguments);
- };
- Box2D.Collision.b2ContactPoint = b2ContactPoint;
-
- function b2Distance() {
- b2Distance.b2Distance.apply(this, arguments);
- };
- Box2D.Collision.b2Distance = b2Distance;
-
- function b2DistanceInput() {
- b2DistanceInput.b2DistanceInput.apply(this, arguments);
- };
- Box2D.Collision.b2DistanceInput = b2DistanceInput;
-
- function b2DistanceOutput() {
- b2DistanceOutput.b2DistanceOutput.apply(this, arguments);
- };
- Box2D.Collision.b2DistanceOutput = b2DistanceOutput;
-
- function b2DistanceProxy() {
- b2DistanceProxy.b2DistanceProxy.apply(this, arguments);
- };
- Box2D.Collision.b2DistanceProxy = b2DistanceProxy;
-
- function b2DynamicTree() {
- b2DynamicTree.b2DynamicTree.apply(this, arguments);
- if (this.constructor === b2DynamicTree) this.b2DynamicTree.apply(this, arguments);
- };
- Box2D.Collision.b2DynamicTree = b2DynamicTree;
-
- function b2DynamicTreeBroadPhase() {
- b2DynamicTreeBroadPhase.b2DynamicTreeBroadPhase.apply(this, arguments);
- };
- Box2D.Collision.b2DynamicTreeBroadPhase = b2DynamicTreeBroadPhase;
-
- function b2DynamicTreeNode() {
- b2DynamicTreeNode.b2DynamicTreeNode.apply(this, arguments);
- };
- Box2D.Collision.b2DynamicTreeNode = b2DynamicTreeNode;
-
- function b2DynamicTreePair() {
- b2DynamicTreePair.b2DynamicTreePair.apply(this, arguments);
- };
- Box2D.Collision.b2DynamicTreePair = b2DynamicTreePair;
-
- function b2Manifold() {
- b2Manifold.b2Manifold.apply(this, arguments);
- if (this.constructor === b2Manifold) this.b2Manifold.apply(this, arguments);
- };
- Box2D.Collision.b2Manifold = b2Manifold;
-
- function b2ManifoldPoint() {
- b2ManifoldPoint.b2ManifoldPoint.apply(this, arguments);
- if (this.constructor === b2ManifoldPoint) this.b2ManifoldPoint.apply(this, arguments);
- };
- Box2D.Collision.b2ManifoldPoint = b2ManifoldPoint;
-
- function b2Point() {
- b2Point.b2Point.apply(this, arguments);
- };
- Box2D.Collision.b2Point = b2Point;
-
- function b2RayCastInput() {
- b2RayCastInput.b2RayCastInput.apply(this, arguments);
- if (this.constructor === b2RayCastInput) this.b2RayCastInput.apply(this, arguments);
- };
- Box2D.Collision.b2RayCastInput = b2RayCastInput;
-
- function b2RayCastOutput() {
- b2RayCastOutput.b2RayCastOutput.apply(this, arguments);
- };
- Box2D.Collision.b2RayCastOutput = b2RayCastOutput;
-
- function b2Segment() {
- b2Segment.b2Segment.apply(this, arguments);
- };
- Box2D.Collision.b2Segment = b2Segment;
-
- function b2SeparationFunction() {
- b2SeparationFunction.b2SeparationFunction.apply(this, arguments);
- };
- Box2D.Collision.b2SeparationFunction = b2SeparationFunction;
-
- function b2Simplex() {
- b2Simplex.b2Simplex.apply(this, arguments);
- if (this.constructor === b2Simplex) this.b2Simplex.apply(this, arguments);
- };
- Box2D.Collision.b2Simplex = b2Simplex;
-
- function b2SimplexCache() {
- b2SimplexCache.b2SimplexCache.apply(this, arguments);
- };
- Box2D.Collision.b2SimplexCache = b2SimplexCache;
-
- function b2SimplexVertex() {
- b2SimplexVertex.b2SimplexVertex.apply(this, arguments);
- };
- Box2D.Collision.b2SimplexVertex = b2SimplexVertex;
-
- function b2TimeOfImpact() {
- b2TimeOfImpact.b2TimeOfImpact.apply(this, arguments);
- };
- Box2D.Collision.b2TimeOfImpact = b2TimeOfImpact;
-
- function b2TOIInput() {
- b2TOIInput.b2TOIInput.apply(this, arguments);
- };
- Box2D.Collision.b2TOIInput = b2TOIInput;
-
- function b2WorldManifold() {
- b2WorldManifold.b2WorldManifold.apply(this, arguments);
- if (this.constructor === b2WorldManifold) this.b2WorldManifold.apply(this, arguments);
- };
- Box2D.Collision.b2WorldManifold = b2WorldManifold;
-
- function ClipVertex() {
- ClipVertex.ClipVertex.apply(this, arguments);
- };
- Box2D.Collision.ClipVertex = ClipVertex;
-
- function Features() {
- Features.Features.apply(this, arguments);
- };
- Box2D.Collision.Features = Features;
-
- function b2CircleShape() {
- b2CircleShape.b2CircleShape.apply(this, arguments);
- if (this.constructor === b2CircleShape) this.b2CircleShape.apply(this, arguments);
- };
- Box2D.Collision.Shapes.b2CircleShape = b2CircleShape;
-
- function b2EdgeChainDef() {
- b2EdgeChainDef.b2EdgeChainDef.apply(this, arguments);
- if (this.constructor === b2EdgeChainDef) this.b2EdgeChainDef.apply(this, arguments);
- };
- Box2D.Collision.Shapes.b2EdgeChainDef = b2EdgeChainDef;
-
- function b2EdgeShape() {
- b2EdgeShape.b2EdgeShape.apply(this, arguments);
- if (this.constructor === b2EdgeShape) this.b2EdgeShape.apply(this, arguments);
- };
- Box2D.Collision.Shapes.b2EdgeShape = b2EdgeShape;
-
- function b2MassData() {
- b2MassData.b2MassData.apply(this, arguments);
- };
- Box2D.Collision.Shapes.b2MassData = b2MassData;
-
- function b2PolygonShape() {
- b2PolygonShape.b2PolygonShape.apply(this, arguments);
- if (this.constructor === b2PolygonShape) this.b2PolygonShape.apply(this, arguments);
- };
- Box2D.Collision.Shapes.b2PolygonShape = b2PolygonShape;
-
- function b2Shape() {
- b2Shape.b2Shape.apply(this, arguments);
- if (this.constructor === b2Shape) this.b2Shape.apply(this, arguments);
- };
- Box2D.Collision.Shapes.b2Shape = b2Shape;
- Box2D.Common.b2internal = 'Box2D.Common.b2internal';
-
- function b2Color() {
- b2Color.b2Color.apply(this, arguments);
- if (this.constructor === b2Color) this.b2Color.apply(this, arguments);
- };
- Box2D.Common.b2Color = b2Color;
-
- function b2Settings() {
- b2Settings.b2Settings.apply(this, arguments);
- };
- Box2D.Common.b2Settings = b2Settings;
-
- function b2Mat22() {
- b2Mat22.b2Mat22.apply(this, arguments);
- if (this.constructor === b2Mat22) this.b2Mat22.apply(this, arguments);
- };
- Box2D.Common.Math.b2Mat22 = b2Mat22;
-
- function b2Mat33() {
- b2Mat33.b2Mat33.apply(this, arguments);
- if (this.constructor === b2Mat33) this.b2Mat33.apply(this, arguments);
- };
- Box2D.Common.Math.b2Mat33 = b2Mat33;
-
- function b2Math() {
- b2Math.b2Math.apply(this, arguments);
- };
- Box2D.Common.Math.b2Math = b2Math;
-
- function b2Sweep() {
- b2Sweep.b2Sweep.apply(this, arguments);
- };
- Box2D.Common.Math.b2Sweep = b2Sweep;
-
- function b2Transform() {
- b2Transform.b2Transform.apply(this, arguments);
- if (this.constructor === b2Transform) this.b2Transform.apply(this, arguments);
- };
- Box2D.Common.Math.b2Transform = b2Transform;
-
- function b2Vec2() {
- b2Vec2.b2Vec2.apply(this, arguments);
- if (this.constructor === b2Vec2) this.b2Vec2.apply(this, arguments);
- };
- Box2D.Common.Math.b2Vec2 = b2Vec2;
-
- function b2Vec3() {
- b2Vec3.b2Vec3.apply(this, arguments);
- if (this.constructor === b2Vec3) this.b2Vec3.apply(this, arguments);
- };
- Box2D.Common.Math.b2Vec3 = b2Vec3;
-
- function b2Body() {
- b2Body.b2Body.apply(this, arguments);
- if (this.constructor === b2Body) this.b2Body.apply(this, arguments);
- };
- Box2D.Dynamics.b2Body = b2Body;
-
- function b2BodyDef() {
- b2BodyDef.b2BodyDef.apply(this, arguments);
- if (this.constructor === b2BodyDef) this.b2BodyDef.apply(this, arguments);
- };
- Box2D.Dynamics.b2BodyDef = b2BodyDef;
-
- function b2ContactFilter() {
- b2ContactFilter.b2ContactFilter.apply(this, arguments);
- };
- Box2D.Dynamics.b2ContactFilter = b2ContactFilter;
-
- function b2ContactImpulse() {
- b2ContactImpulse.b2ContactImpulse.apply(this, arguments);
- };
- Box2D.Dynamics.b2ContactImpulse = b2ContactImpulse;
-
- function b2ContactListener() {
- b2ContactListener.b2ContactListener.apply(this, arguments);
- };
- Box2D.Dynamics.b2ContactListener = b2ContactListener;
-
- function b2ContactManager() {
- b2ContactManager.b2ContactManager.apply(this, arguments);
- if (this.constructor === b2ContactManager) this.b2ContactManager.apply(this, arguments);
- };
- Box2D.Dynamics.b2ContactManager = b2ContactManager;
-
- function b2DebugDraw() {
- b2DebugDraw.b2DebugDraw.apply(this, arguments);
- if (this.constructor === b2DebugDraw) this.b2DebugDraw.apply(this, arguments);
- };
- Box2D.Dynamics.b2DebugDraw = b2DebugDraw;
-
- function b2DestructionListener() {
- b2DestructionListener.b2DestructionListener.apply(this, arguments);
- };
- Box2D.Dynamics.b2DestructionListener = b2DestructionListener;
-
- function b2FilterData() {
- b2FilterData.b2FilterData.apply(this, arguments);
- };
- Box2D.Dynamics.b2FilterData = b2FilterData;
-
- function b2Fixture() {
- b2Fixture.b2Fixture.apply(this, arguments);
- if (this.constructor === b2Fixture) this.b2Fixture.apply(this, arguments);
- };
- Box2D.Dynamics.b2Fixture = b2Fixture;
-
- function b2FixtureDef() {
- b2FixtureDef.b2FixtureDef.apply(this, arguments);
- if (this.constructor === b2FixtureDef) this.b2FixtureDef.apply(this, arguments);
- };
- Box2D.Dynamics.b2FixtureDef = b2FixtureDef;
-
- function b2Island() {
- b2Island.b2Island.apply(this, arguments);
- if (this.constructor === b2Island) this.b2Island.apply(this, arguments);
- };
- Box2D.Dynamics.b2Island = b2Island;
-
- function b2TimeStep() {
- b2TimeStep.b2TimeStep.apply(this, arguments);
- };
- Box2D.Dynamics.b2TimeStep = b2TimeStep;
-
- function b2World() {
- b2World.b2World.apply(this, arguments);
- if (this.constructor === b2World) this.b2World.apply(this, arguments);
- };
- Box2D.Dynamics.b2World = b2World;
-
- function b2CircleContact() {
- b2CircleContact.b2CircleContact.apply(this, arguments);
- };
- Box2D.Dynamics.Contacts.b2CircleContact = b2CircleContact;
-
- function b2Contact() {
- b2Contact.b2Contact.apply(this, arguments);
- if (this.constructor === b2Contact) this.b2Contact.apply(this, arguments);
- };
- Box2D.Dynamics.Contacts.b2Contact = b2Contact;
-
- function b2ContactConstraint() {
- b2ContactConstraint.b2ContactConstraint.apply(this, arguments);
- if (this.constructor === b2ContactConstraint) this.b2ContactConstraint.apply(this, arguments);
- };
- Box2D.Dynamics.Contacts.b2ContactConstraint = b2ContactConstraint;
-
- function b2ContactConstraintPoint() {
- b2ContactConstraintPoint.b2ContactConstraintPoint.apply(this, arguments);
- };
- Box2D.Dynamics.Contacts.b2ContactConstraintPoint = b2ContactConstraintPoint;
-
- function b2ContactEdge() {
- b2ContactEdge.b2ContactEdge.apply(this, arguments);
- };
- Box2D.Dynamics.Contacts.b2ContactEdge = b2ContactEdge;
-
- function b2ContactFactory() {
- b2ContactFactory.b2ContactFactory.apply(this, arguments);
- if (this.constructor === b2ContactFactory) this.b2ContactFactory.apply(this, arguments);
- };
- Box2D.Dynamics.Contacts.b2ContactFactory = b2ContactFactory;
-
- function b2ContactRegister() {
- b2ContactRegister.b2ContactRegister.apply(this, arguments);
- };
- Box2D.Dynamics.Contacts.b2ContactRegister = b2ContactRegister;
-
- function b2ContactResult() {
- b2ContactResult.b2ContactResult.apply(this, arguments);
- };
- Box2D.Dynamics.Contacts.b2ContactResult = b2ContactResult;
-
- function b2ContactSolver() {
- b2ContactSolver.b2ContactSolver.apply(this, arguments);
- if (this.constructor === b2ContactSolver) this.b2ContactSolver.apply(this, arguments);
- };
- Box2D.Dynamics.Contacts.b2ContactSolver = b2ContactSolver;
-
- function b2EdgeAndCircleContact() {
- b2EdgeAndCircleContact.b2EdgeAndCircleContact.apply(this, arguments);
- };
- Box2D.Dynamics.Contacts.b2EdgeAndCircleContact = b2EdgeAndCircleContact;
-
- function b2NullContact() {
- b2NullContact.b2NullContact.apply(this, arguments);
- if (this.constructor === b2NullContact) this.b2NullContact.apply(this, arguments);
- };
- Box2D.Dynamics.Contacts.b2NullContact = b2NullContact;
-
- function b2PolyAndCircleContact() {
- b2PolyAndCircleContact.b2PolyAndCircleContact.apply(this, arguments);
- };
- Box2D.Dynamics.Contacts.b2PolyAndCircleContact = b2PolyAndCircleContact;
-
- function b2PolyAndEdgeContact() {
- b2PolyAndEdgeContact.b2PolyAndEdgeContact.apply(this, arguments);
- };
- Box2D.Dynamics.Contacts.b2PolyAndEdgeContact = b2PolyAndEdgeContact;
-
- function b2PolygonContact() {
- b2PolygonContact.b2PolygonContact.apply(this, arguments);
- };
- Box2D.Dynamics.Contacts.b2PolygonContact = b2PolygonContact;
-
- function b2PositionSolverManifold() {
- b2PositionSolverManifold.b2PositionSolverManifold.apply(this, arguments);
- if (this.constructor === b2PositionSolverManifold) this.b2PositionSolverManifold.apply(this, arguments);
- };
- Box2D.Dynamics.Contacts.b2PositionSolverManifold = b2PositionSolverManifold;
-
- function b2BuoyancyController() {
- b2BuoyancyController.b2BuoyancyController.apply(this, arguments);
- };
- Box2D.Dynamics.Controllers.b2BuoyancyController = b2BuoyancyController;
-
- function b2ConstantAccelController() {
- b2ConstantAccelController.b2ConstantAccelController.apply(this, arguments);
- };
- Box2D.Dynamics.Controllers.b2ConstantAccelController = b2ConstantAccelController;
-
- function b2ConstantForceController() {
- b2ConstantForceController.b2ConstantForceController.apply(this, arguments);
- };
- Box2D.Dynamics.Controllers.b2ConstantForceController = b2ConstantForceController;
-
- function b2Controller() {
- b2Controller.b2Controller.apply(this, arguments);
- };
- Box2D.Dynamics.Controllers.b2Controller = b2Controller;
-
- function b2ControllerEdge() {
- b2ControllerEdge.b2ControllerEdge.apply(this, arguments);
- };
- Box2D.Dynamics.Controllers.b2ControllerEdge = b2ControllerEdge;
-
- function b2GravityController() {
- b2GravityController.b2GravityController.apply(this, arguments);
- };
- Box2D.Dynamics.Controllers.b2GravityController = b2GravityController;
-
- function b2TensorDampingController() {
- b2TensorDampingController.b2TensorDampingController.apply(this, arguments);
- };
- Box2D.Dynamics.Controllers.b2TensorDampingController = b2TensorDampingController;
-
- function b2DistanceJoint() {
- b2DistanceJoint.b2DistanceJoint.apply(this, arguments);
- if (this.constructor === b2DistanceJoint) this.b2DistanceJoint.apply(this, arguments);
- };
- Box2D.Dynamics.Joints.b2DistanceJoint = b2DistanceJoint;
-
- function b2DistanceJointDef() {
- b2DistanceJointDef.b2DistanceJointDef.apply(this, arguments);
- if (this.constructor === b2DistanceJointDef) this.b2DistanceJointDef.apply(this, arguments);
- };
- Box2D.Dynamics.Joints.b2DistanceJointDef = b2DistanceJointDef;
-
- function b2FrictionJoint() {
- b2FrictionJoint.b2FrictionJoint.apply(this, arguments);
- if (this.constructor === b2FrictionJoint) this.b2FrictionJoint.apply(this, arguments);
- };
- Box2D.Dynamics.Joints.b2FrictionJoint = b2FrictionJoint;
-
- function b2FrictionJointDef() {
- b2FrictionJointDef.b2FrictionJointDef.apply(this, arguments);
- if (this.constructor === b2FrictionJointDef) this.b2FrictionJointDef.apply(this, arguments);
- };
- Box2D.Dynamics.Joints.b2FrictionJointDef = b2FrictionJointDef;
-
- function b2GearJoint() {
- b2GearJoint.b2GearJoint.apply(this, arguments);
- if (this.constructor === b2GearJoint) this.b2GearJoint.apply(this, arguments);
- };
- Box2D.Dynamics.Joints.b2GearJoint = b2GearJoint;
-
- function b2GearJointDef() {
- b2GearJointDef.b2GearJointDef.apply(this, arguments);
- if (this.constructor === b2GearJointDef) this.b2GearJointDef.apply(this, arguments);
- };
- Box2D.Dynamics.Joints.b2GearJointDef = b2GearJointDef;
-
- function b2Jacobian() {
- b2Jacobian.b2Jacobian.apply(this, arguments);
- };
- Box2D.Dynamics.Joints.b2Jacobian = b2Jacobian;
-
- function b2Joint() {
- b2Joint.b2Joint.apply(this, arguments);
- if (this.constructor === b2Joint) this.b2Joint.apply(this, arguments);
- };
- Box2D.Dynamics.Joints.b2Joint = b2Joint;
-
- function b2JointDef() {
- b2JointDef.b2JointDef.apply(this, arguments);
- if (this.constructor === b2JointDef) this.b2JointDef.apply(this, arguments);
- };
- Box2D.Dynamics.Joints.b2JointDef = b2JointDef;
-
- function b2JointEdge() {
- b2JointEdge.b2JointEdge.apply(this, arguments);
- };
- Box2D.Dynamics.Joints.b2JointEdge = b2JointEdge;
-
- function b2LineJoint() {
- b2LineJoint.b2LineJoint.apply(this, arguments);
- if (this.constructor === b2LineJoint) this.b2LineJoint.apply(this, arguments);
- };
- Box2D.Dynamics.Joints.b2LineJoint = b2LineJoint;
-
- function b2LineJointDef() {
- b2LineJointDef.b2LineJointDef.apply(this, arguments);
- if (this.constructor === b2LineJointDef) this.b2LineJointDef.apply(this, arguments);
- };
- Box2D.Dynamics.Joints.b2LineJointDef = b2LineJointDef;
-
- function b2MouseJoint() {
- b2MouseJoint.b2MouseJoint.apply(this, arguments);
- if (this.constructor === b2MouseJoint) this.b2MouseJoint.apply(this, arguments);
- };
- Box2D.Dynamics.Joints.b2MouseJoint = b2MouseJoint;
-
- function b2MouseJointDef() {
- b2MouseJointDef.b2MouseJointDef.apply(this, arguments);
- if (this.constructor === b2MouseJointDef) this.b2MouseJointDef.apply(this, arguments);
- };
- Box2D.Dynamics.Joints.b2MouseJointDef = b2MouseJointDef;
-
- function b2PrismaticJoint() {
- b2PrismaticJoint.b2PrismaticJoint.apply(this, arguments);
- if (this.constructor === b2PrismaticJoint) this.b2PrismaticJoint.apply(this, arguments);
- };
- Box2D.Dynamics.Joints.b2PrismaticJoint = b2PrismaticJoint;
-
- function b2PrismaticJointDef() {
- b2PrismaticJointDef.b2PrismaticJointDef.apply(this, arguments);
- if (this.constructor === b2PrismaticJointDef) this.b2PrismaticJointDef.apply(this, arguments);
- };
- Box2D.Dynamics.Joints.b2PrismaticJointDef = b2PrismaticJointDef;
-
- function b2PulleyJoint() {
- b2PulleyJoint.b2PulleyJoint.apply(this, arguments);
- if (this.constructor === b2PulleyJoint) this.b2PulleyJoint.apply(this, arguments);
- };
- Box2D.Dynamics.Joints.b2PulleyJoint = b2PulleyJoint;
-
- function b2PulleyJointDef() {
- b2PulleyJointDef.b2PulleyJointDef.apply(this, arguments);
- if (this.constructor === b2PulleyJointDef) this.b2PulleyJointDef.apply(this, arguments);
- };
- Box2D.Dynamics.Joints.b2PulleyJointDef = b2PulleyJointDef;
-
- function b2RevoluteJoint() {
- b2RevoluteJoint.b2RevoluteJoint.apply(this, arguments);
- if (this.constructor === b2RevoluteJoint) this.b2RevoluteJoint.apply(this, arguments);
- };
- Box2D.Dynamics.Joints.b2RevoluteJoint = b2RevoluteJoint;
-
- function b2RevoluteJointDef() {
- b2RevoluteJointDef.b2RevoluteJointDef.apply(this, arguments);
- if (this.constructor === b2RevoluteJointDef) this.b2RevoluteJointDef.apply(this, arguments);
- };
- Box2D.Dynamics.Joints.b2RevoluteJointDef = b2RevoluteJointDef;
-
- function b2WeldJoint() {
- b2WeldJoint.b2WeldJoint.apply(this, arguments);
- if (this.constructor === b2WeldJoint) this.b2WeldJoint.apply(this, arguments);
- };
- Box2D.Dynamics.Joints.b2WeldJoint = b2WeldJoint;
-
- function b2WeldJointDef() {
- b2WeldJointDef.b2WeldJointDef.apply(this, arguments);
- if (this.constructor === b2WeldJointDef) this.b2WeldJointDef.apply(this, arguments);
- };
- Box2D.Dynamics.Joints.b2WeldJointDef = b2WeldJointDef;
-})(); //definitions
-Box2D.postDefs = [];
-(function () {
- var b2CircleShape = Box2D.Collision.Shapes.b2CircleShape,
- b2EdgeChainDef = Box2D.Collision.Shapes.b2EdgeChainDef,
- b2EdgeShape = Box2D.Collision.Shapes.b2EdgeShape,
- b2MassData = Box2D.Collision.Shapes.b2MassData,
- b2PolygonShape = Box2D.Collision.Shapes.b2PolygonShape,
- b2Shape = Box2D.Collision.Shapes.b2Shape,
- b2Color = Box2D.Common.b2Color,
- b2internal = Box2D.Common.b2internal,
- b2Settings = Box2D.Common.b2Settings,
- b2Mat22 = Box2D.Common.Math.b2Mat22,
- b2Mat33 = Box2D.Common.Math.b2Mat33,
- b2Math = Box2D.Common.Math.b2Math,
- b2Sweep = Box2D.Common.Math.b2Sweep,
- b2Transform = Box2D.Common.Math.b2Transform,
- b2Vec2 = Box2D.Common.Math.b2Vec2,
- b2Vec3 = Box2D.Common.Math.b2Vec3,
- b2AABB = Box2D.Collision.b2AABB,
- b2Bound = Box2D.Collision.b2Bound,
- b2BoundValues = Box2D.Collision.b2BoundValues,
- b2Collision = Box2D.Collision.b2Collision,
- b2ContactID = Box2D.Collision.b2ContactID,
- b2ContactPoint = Box2D.Collision.b2ContactPoint,
- b2Distance = Box2D.Collision.b2Distance,
- b2DistanceInput = Box2D.Collision.b2DistanceInput,
- b2DistanceOutput = Box2D.Collision.b2DistanceOutput,
- b2DistanceProxy = Box2D.Collision.b2DistanceProxy,
- b2DynamicTree = Box2D.Collision.b2DynamicTree,
- b2DynamicTreeBroadPhase = Box2D.Collision.b2DynamicTreeBroadPhase,
- b2DynamicTreeNode = Box2D.Collision.b2DynamicTreeNode,
- b2DynamicTreePair = Box2D.Collision.b2DynamicTreePair,
- b2Manifold = Box2D.Collision.b2Manifold,
- b2ManifoldPoint = Box2D.Collision.b2ManifoldPoint,
- b2Point = Box2D.Collision.b2Point,
- b2RayCastInput = Box2D.Collision.b2RayCastInput,
- b2RayCastOutput = Box2D.Collision.b2RayCastOutput,
- b2Segment = Box2D.Collision.b2Segment,
- b2SeparationFunction = Box2D.Collision.b2SeparationFunction,
- b2Simplex = Box2D.Collision.b2Simplex,
- b2SimplexCache = Box2D.Collision.b2SimplexCache,
- b2SimplexVertex = Box2D.Collision.b2SimplexVertex,
- b2TimeOfImpact = Box2D.Collision.b2TimeOfImpact,
- b2TOIInput = Box2D.Collision.b2TOIInput,
- b2WorldManifold = Box2D.Collision.b2WorldManifold,
- ClipVertex = Box2D.Collision.ClipVertex,
- Features = Box2D.Collision.Features,
- IBroadPhase = Box2D.Collision.IBroadPhase;
-
- b2AABB.b2AABB = function () {
- this.lowerBound = new b2Vec2();
- this.upperBound = new b2Vec2();
- };
- b2AABB.prototype.IsValid = function () {
- var dX = this.upperBound.x - this.lowerBound.x;
- var dY = this.upperBound.y - this.lowerBound.y;
- var valid = dX >= 0.0 && dY >= 0.0;
- valid = valid && this.lowerBound.IsValid() && this.upperBound.IsValid();
- return valid;
- }
- b2AABB.prototype.GetCenter = function () {
- return new b2Vec2((this.lowerBound.x + this.upperBound.x) / 2, (this.lowerBound.y + this.upperBound.y) / 2);
- }
- b2AABB.prototype.GetExtents = function () {
- return new b2Vec2((this.upperBound.x - this.lowerBound.x) / 2, (this.upperBound.y - this.lowerBound.y) / 2);
- }
- b2AABB.prototype.Contains = function (aabb) {
- var result = true;
- result = result && this.lowerBound.x <= aabb.lowerBound.x;
- result = result && this.lowerBound.y <= aabb.lowerBound.y;
- result = result && aabb.upperBound.x <= this.upperBound.x;
- result = result && aabb.upperBound.y <= this.upperBound.y;
- return result;
- }
- b2AABB.prototype.RayCast = function (output, input) {
- var tmin = (-Number.MAX_VALUE);
- var tmax = Number.MAX_VALUE;
- var pX = input.p1.x;
- var pY = input.p1.y;
- var dX = input.p2.x - input.p1.x;
- var dY = input.p2.y - input.p1.y;
- var absDX = Math.abs(dX);
- var absDY = Math.abs(dY);
- var normal = output.normal;
- var inv_d = 0;
- var t1 = 0;
- var t2 = 0;
- var t3 = 0;
- var s = 0; {
- if (absDX < Number.MIN_VALUE) {
- if (pX < this.lowerBound.x || this.upperBound.x < pX) return false;
- }
- else {
- inv_d = 1.0 / dX;
- t1 = (this.lowerBound.x - pX) * inv_d;
- t2 = (this.upperBound.x - pX) * inv_d;
- s = (-1.0);
- if (t1 > t2) {
- t3 = t1;
- t1 = t2;
- t2 = t3;
- s = 1.0;
- }
- if (t1 > tmin) {
- normal.x = s;
- normal.y = 0;
- tmin = t1;
- }
- tmax = Math.min(tmax, t2);
- if (tmin > tmax) return false;
- }
- } {
- if (absDY < Number.MIN_VALUE) {
- if (pY < this.lowerBound.y || this.upperBound.y < pY) return false;
- }
- else {
- inv_d = 1.0 / dY;
- t1 = (this.lowerBound.y - pY) * inv_d;
- t2 = (this.upperBound.y - pY) * inv_d;
- s = (-1.0);
- if (t1 > t2) {
- t3 = t1;
- t1 = t2;
- t2 = t3;
- s = 1.0;
- }
- if (t1 > tmin) {
- normal.y = s;
- normal.x = 0;
- tmin = t1;
- }
- tmax = Math.min(tmax, t2);
- if (tmin > tmax) return false;
- }
- }
- output.fraction = tmin;
- return true;
- }
- b2AABB.prototype.TestOverlap = function (other) {
- var d1X = other.lowerBound.x - this.upperBound.x;
- var d1Y = other.lowerBound.y - this.upperBound.y;
- var d2X = this.lowerBound.x - other.upperBound.x;
- var d2Y = this.lowerBound.y - other.upperBound.y;
- if (d1X > 0.0 || d1Y > 0.0) return false;
- if (d2X > 0.0 || d2Y > 0.0) return false;
- return true;
- }
- b2AABB.Combine = function (aabb1, aabb2) {
- var aabb = new b2AABB();
- aabb.Combine(aabb1, aabb2);
- return aabb;
- }
- b2AABB.prototype.Combine = function (aabb1, aabb2) {
- this.lowerBound.x = Math.min(aabb1.lowerBound.x, aabb2.lowerBound.x);
- this.lowerBound.y = Math.min(aabb1.lowerBound.y, aabb2.lowerBound.y);
- this.upperBound.x = Math.max(aabb1.upperBound.x, aabb2.upperBound.x);
- this.upperBound.y = Math.max(aabb1.upperBound.y, aabb2.upperBound.y);
- }
- b2Bound.b2Bound = function () {};
- b2Bound.prototype.IsLower = function () {
- return (this.value & 1) == 0;
- }
- b2Bound.prototype.IsUpper = function () {
- return (this.value & 1) == 1;
- }
- b2Bound.prototype.Swap = function (b) {
- var tempValue = this.value;
- var tempProxy = this.proxy;
- var tempStabbingCount = this.stabbingCount;
- this.value = b.value;
- this.proxy = b.proxy;
- this.stabbingCount = b.stabbingCount;
- b.value = tempValue;
- b.proxy = tempProxy;
- b.stabbingCount = tempStabbingCount;
- }
- b2BoundValues.b2BoundValues = function () {};
- b2BoundValues.prototype.b2BoundValues = function () {
- this.lowerValues = new Vector_a2j_Number();
- this.lowerValues[0] = 0.0;
- this.lowerValues[1] = 0.0;
- this.upperValues = new Vector_a2j_Number();
- this.upperValues[0] = 0.0;
- this.upperValues[1] = 0.0;
- }
- b2Collision.b2Collision = function () {};
- b2Collision.ClipSegmentToLine = function (vOut, vIn, normal, offset) {
- if (offset === undefined) offset = 0;
- var cv;
- var numOut = 0;
- cv = vIn[0];
- var vIn0 = cv.v;
- cv = vIn[1];
- var vIn1 = cv.v;
- var distance0 = normal.x * vIn0.x + normal.y * vIn0.y - offset;
- var distance1 = normal.x * vIn1.x + normal.y * vIn1.y - offset;
- if (distance0 <= 0.0) vOut[numOut++].Set(vIn[0]);
- if (distance1 <= 0.0) vOut[numOut++].Set(vIn[1]);
- if (distance0 * distance1 < 0.0) {
- var interp = distance0 / (distance0 - distance1);
- cv = vOut[numOut];
- var tVec = cv.v;
- tVec.x = vIn0.x + interp * (vIn1.x - vIn0.x);
- tVec.y = vIn0.y + interp * (vIn1.y - vIn0.y);
- cv = vOut[numOut];
- var cv2;
- if (distance0 > 0.0) {
- cv2 = vIn[0];
- cv.id = cv2.id;
- }
- else {
- cv2 = vIn[1];
- cv.id = cv2.id;
- }++numOut;
- }
- return numOut;
- }
- b2Collision.EdgeSeparation = function (poly1, xf1, edge1, poly2, xf2) {
- if (edge1 === undefined) edge1 = 0;
- var count1 = parseInt(poly1.m_vertexCount);
- var vertices1 = poly1.m_vertices;
- var normals1 = poly1.m_normals;
- var count2 = parseInt(poly2.m_vertexCount);
- var vertices2 = poly2.m_vertices;
- var tMat;
- var tVec;
- tMat = xf1.R;
- tVec = normals1[edge1];
- var normal1WorldX = (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y);
- var normal1WorldY = (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y);
- tMat = xf2.R;
- var normal1X = (tMat.col1.x * normal1WorldX + tMat.col1.y * normal1WorldY);
- var normal1Y = (tMat.col2.x * normal1WorldX + tMat.col2.y * normal1WorldY);
- var index = 0;
- var minDot = Number.MAX_VALUE;
- for (var i = 0; i < count2; ++i) {
- tVec = vertices2[i];
- var dot = tVec.x * normal1X + tVec.y * normal1Y;
- if (dot < minDot) {
- minDot = dot;
- index = i;
- }
- }
- tVec = vertices1[edge1];
- tMat = xf1.R;
- var v1X = xf1.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y);
- var v1Y = xf1.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y);
- tVec = vertices2[index];
- tMat = xf2.R;
- var v2X = xf2.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y);
- var v2Y = xf2.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y);
- v2X -= v1X;
- v2Y -= v1Y;
- var separation = v2X * normal1WorldX + v2Y * normal1WorldY;
- return separation;
- }
- b2Collision.FindMaxSeparation = function (edgeIndex, poly1, xf1, poly2, xf2) {
- var count1 = parseInt(poly1.m_vertexCount);
- var normals1 = poly1.m_normals;
- var tVec;
- var tMat;
- tMat = xf2.R;
- tVec = poly2.m_centroid;
- var dX = xf2.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y);
- var dY = xf2.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y);
- tMat = xf1.R;
- tVec = poly1.m_centroid;
- dX -= xf1.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y);
- dY -= xf1.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y);
- var dLocal1X = (dX * xf1.R.col1.x + dY * xf1.R.col1.y);
- var dLocal1Y = (dX * xf1.R.col2.x + dY * xf1.R.col2.y);
- var edge = 0;
- var maxDot = (-Number.MAX_VALUE);
- for (var i = 0; i < count1; ++i) {
- tVec = normals1[i];
- var dot = (tVec.x * dLocal1X + tVec.y * dLocal1Y);
- if (dot > maxDot) {
- maxDot = dot;
- edge = i;
- }
- }
- var s = b2Collision.EdgeSeparation(poly1, xf1, edge, poly2, xf2);
- var prevEdge = parseInt(edge - 1 >= 0 ? edge - 1 : count1 - 1);
- var sPrev = b2Collision.EdgeSeparation(poly1, xf1, prevEdge, poly2, xf2);
- var nextEdge = parseInt(edge + 1 < count1 ? edge + 1 : 0);
- var sNext = b2Collision.EdgeSeparation(poly1, xf1, nextEdge, poly2, xf2);
- var bestEdge = 0;
- var bestSeparation = 0;
- var increment = 0;
- if (sPrev > s && sPrev > sNext) {
- increment = (-1);
- bestEdge = prevEdge;
- bestSeparation = sPrev;
- }
- else if (sNext > s) {
- increment = 1;
- bestEdge = nextEdge;
- bestSeparation = sNext;
- }
- else {
- edgeIndex[0] = edge;
- return s;
- }
- while (true) {
- if (increment == (-1)) edge = bestEdge - 1 >= 0 ? bestEdge - 1 : count1 - 1;
- else edge = bestEdge + 1 < count1 ? bestEdge + 1 : 0;s = b2Collision.EdgeSeparation(poly1, xf1, edge, poly2, xf2);
- if (s > bestSeparation) {
- bestEdge = edge;
- bestSeparation = s;
- }
- else {
- break;
- }
- }
- edgeIndex[0] = bestEdge;
- return bestSeparation;
- }
- b2Collision.FindIncidentEdge = function (c, poly1, xf1, edge1, poly2, xf2) {
- if (edge1 === undefined) edge1 = 0;
- var count1 = parseInt(poly1.m_vertexCount);
- var normals1 = poly1.m_normals;
- var count2 = parseInt(poly2.m_vertexCount);
- var vertices2 = poly2.m_vertices;
- var normals2 = poly2.m_normals;
- var tMat;
- var tVec;
- tMat = xf1.R;
- tVec = normals1[edge1];
- var normal1X = (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y);
- var normal1Y = (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y);
- tMat = xf2.R;
- var tX = (tMat.col1.x * normal1X + tMat.col1.y * normal1Y);
- normal1Y = (tMat.col2.x * normal1X + tMat.col2.y * normal1Y);
- normal1X = tX;
- var index = 0;
- var minDot = Number.MAX_VALUE;
- for (var i = 0; i < count2; ++i) {
- tVec = normals2[i];
- var dot = (normal1X * tVec.x + normal1Y * tVec.y);
- if (dot < minDot) {
- minDot = dot;
- index = i;
- }
- }
- var tClip;
- var i1 = parseInt(index);
- var i2 = parseInt(i1 + 1 < count2 ? i1 + 1 : 0);
- tClip = c[0];
- tVec = vertices2[i1];
- tMat = xf2.R;
- tClip.v.x = xf2.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y);
- tClip.v.y = xf2.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y);
- tClip.id.features.referenceEdge = edge1;
- tClip.id.features.incidentEdge = i1;
- tClip.id.features.incidentVertex = 0;
- tClip = c[1];
- tVec = vertices2[i2];
- tMat = xf2.R;
- tClip.v.x = xf2.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y);
- tClip.v.y = xf2.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y);
- tClip.id.features.referenceEdge = edge1;
- tClip.id.features.incidentEdge = i2;
- tClip.id.features.incidentVertex = 1;
- }
- b2Collision.MakeClipPointVector = function () {
- var r = new Vector(2);
- r[0] = new ClipVertex();
- r[1] = new ClipVertex();
- return r;
- }
- b2Collision.CollidePolygons = function (manifold, polyA, xfA, polyB, xfB) {
- var cv;
- manifold.m_pointCount = 0;
- var totalRadius = polyA.m_radius + polyB.m_radius;
- var edgeA = 0;
- b2Collision.s_edgeAO[0] = edgeA;
- var separationA = b2Collision.FindMaxSeparation(b2Collision.s_edgeAO, polyA, xfA, polyB, xfB);
- edgeA = b2Collision.s_edgeAO[0];
- if (separationA > totalRadius) return;
- var edgeB = 0;
- b2Collision.s_edgeBO[0] = edgeB;
- var separationB = b2Collision.FindMaxSeparation(b2Collision.s_edgeBO, polyB, xfB, polyA, xfA);
- edgeB = b2Collision.s_edgeBO[0];
- if (separationB > totalRadius) return;
- var poly1;
- var poly2;
- var xf1;
- var xf2;
- var edge1 = 0;
- var flip = 0;
- var k_relativeTol = 0.98;
- var k_absoluteTol = 0.001;
- var tMat;
- if (separationB > k_relativeTol * separationA + k_absoluteTol) {
- poly1 = polyB;
- poly2 = polyA;
- xf1 = xfB;
- xf2 = xfA;
- edge1 = edgeB;
- manifold.m_type = b2Manifold.e_faceB;
- flip = 1;
- }
- else {
- poly1 = polyA;
- poly2 = polyB;
- xf1 = xfA;
- xf2 = xfB;
- edge1 = edgeA;
- manifold.m_type = b2Manifold.e_faceA;
- flip = 0;
- }
- var incidentEdge = b2Collision.s_incidentEdge;
- b2Collision.FindIncidentEdge(incidentEdge, poly1, xf1, edge1, poly2, xf2);
- var count1 = parseInt(poly1.m_vertexCount);
- var vertices1 = poly1.m_vertices;
- var local_v11 = vertices1[edge1];
- var local_v12;
- if (edge1 + 1 < count1) {
- local_v12 = vertices1[parseInt(edge1 + 1)];
- }
- else {
- local_v12 = vertices1[0];
- }
- var localTangent = b2Collision.s_localTangent;
- localTangent.Set(local_v12.x - local_v11.x, local_v12.y - local_v11.y);
- localTangent.Normalize();
- var localNormal = b2Collision.s_localNormal;
- localNormal.x = localTangent.y;
- localNormal.y = (-localTangent.x);
- var planePoint = b2Collision.s_planePoint;
- planePoint.Set(0.5 * (local_v11.x + local_v12.x), 0.5 * (local_v11.y + local_v12.y));
- var tangent = b2Collision.s_tangent;
- tMat = xf1.R;
- tangent.x = (tMat.col1.x * localTangent.x + tMat.col2.x * localTangent.y);
- tangent.y = (tMat.col1.y * localTangent.x + tMat.col2.y * localTangent.y);
- var tangent2 = b2Collision.s_tangent2;
- tangent2.x = (-tangent.x);
- tangent2.y = (-tangent.y);
- var normal = b2Collision.s_normal;
- normal.x = tangent.y;
- normal.y = (-tangent.x);
- var v11 = b2Collision.s_v11;
- var v12 = b2Collision.s_v12;
- v11.x = xf1.position.x + (tMat.col1.x * local_v11.x + tMat.col2.x * local_v11.y);
- v11.y = xf1.position.y + (tMat.col1.y * local_v11.x + tMat.col2.y * local_v11.y);
- v12.x = xf1.position.x + (tMat.col1.x * local_v12.x + tMat.col2.x * local_v12.y);
- v12.y = xf1.position.y + (tMat.col1.y * local_v12.x + tMat.col2.y * local_v12.y);
- var frontOffset = normal.x * v11.x + normal.y * v11.y;
- var sideOffset1 = (-tangent.x * v11.x) - tangent.y * v11.y + totalRadius;
- var sideOffset2 = tangent.x * v12.x + tangent.y * v12.y + totalRadius;
- var clipPoints1 = b2Collision.s_clipPoints1;
- var clipPoints2 = b2Collision.s_clipPoints2;
- var np = 0;
- np = b2Collision.ClipSegmentToLine(clipPoints1, incidentEdge, tangent2, sideOffset1);
- if (np < 2) return;
- np = b2Collision.ClipSegmentToLine(clipPoints2, clipPoints1, tangent, sideOffset2);
- if (np < 2) return;
- manifold.m_localPlaneNormal.SetV(localNormal);
- manifold.m_localPoint.SetV(planePoint);
- var pointCount = 0;
- for (var i = 0; i < b2Settings.b2_maxManifoldPoints; ++i) {
- cv = clipPoints2[i];
- var separation = normal.x * cv.v.x + normal.y * cv.v.y - frontOffset;
- if (separation <= totalRadius) {
- var cp = manifold.m_points[pointCount];
- tMat = xf2.R;
- var tX = cv.v.x - xf2.position.x;
- var tY = cv.v.y - xf2.position.y;
- cp.m_localPoint.x = (tX * tMat.col1.x + tY * tMat.col1.y);
- cp.m_localPoint.y = (tX * tMat.col2.x + tY * tMat.col2.y);
- cp.m_id.Set(cv.id);
- cp.m_id.features.flip = flip;
- ++pointCount;
- }
- }
- manifold.m_pointCount = pointCount;
- }
- b2Collision.CollideCircles = function (manifold, circle1, xf1, circle2, xf2) {
- manifold.m_pointCount = 0;
- var tMat;
- var tVec;
- tMat = xf1.R;
- tVec = circle1.m_p;
- var p1X = xf1.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y);
- var p1Y = xf1.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y);
- tMat = xf2.R;
- tVec = circle2.m_p;
- var p2X = xf2.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y);
- var p2Y = xf2.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y);
- var dX = p2X - p1X;
- var dY = p2Y - p1Y;
- var distSqr = dX * dX + dY * dY;
- var radius = circle1.m_radius + circle2.m_radius;
- if (distSqr > radius * radius) {
- return;
- }
- manifold.m_type = b2Manifold.e_circles;
- manifold.m_localPoint.SetV(circle1.m_p);
- manifold.m_localPlaneNormal.SetZero();
- manifold.m_pointCount = 1;
- manifold.m_points[0].m_localPoint.SetV(circle2.m_p);
- manifold.m_points[0].m_id.key = 0;
- }
- b2Collision.CollidePolygonAndCircle = function (manifold, polygon, xf1, circle, xf2) {
- manifold.m_pointCount = 0;
- var tPoint;
- var dX = 0;
- var dY = 0;
- var positionX = 0;
- var positionY = 0;
- var tVec;
- var tMat;
- tMat = xf2.R;
- tVec = circle.m_p;
- var cX = xf2.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y);
- var cY = xf2.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y);
- dX = cX - xf1.position.x;
- dY = cY - xf1.position.y;
- tMat = xf1.R;
- var cLocalX = (dX * tMat.col1.x + dY * tMat.col1.y);
- var cLocalY = (dX * tMat.col2.x + dY * tMat.col2.y);
- var dist = 0;
- var normalIndex = 0;
- var separation = (-Number.MAX_VALUE);
- var radius = polygon.m_radius + circle.m_radius;
- var vertexCount = parseInt(polygon.m_vertexCount);
- var vertices = polygon.m_vertices;
- var normals = polygon.m_normals;
- for (var i = 0; i < vertexCount; ++i) {
- tVec = vertices[i];
- dX = cLocalX - tVec.x;
- dY = cLocalY - tVec.y;
- tVec = normals[i];
- var s = tVec.x * dX + tVec.y * dY;
- if (s > radius) {
- return;
- }
- if (s > separation) {
- separation = s;
- normalIndex = i;
- }
- }
- var vertIndex1 = parseInt(normalIndex);
- var vertIndex2 = parseInt(vertIndex1 + 1 < vertexCount ? vertIndex1 + 1 : 0);
- var v1 = vertices[vertIndex1];
- var v2 = vertices[vertIndex2];
- if (separation < Number.MIN_VALUE) {
- manifold.m_pointCount = 1;
- manifold.m_type = b2Manifold.e_faceA;
- manifold.m_localPlaneNormal.SetV(normals[normalIndex]);
- manifold.m_localPoint.x = 0.5 * (v1.x + v2.x);
- manifold.m_localPoint.y = 0.5 * (v1.y + v2.y);
- manifold.m_points[0].m_localPoint.SetV(circle.m_p);
- manifold.m_points[0].m_id.key = 0;
- return;
- }
- var u1 = (cLocalX - v1.x) * (v2.x - v1.x) + (cLocalY - v1.y) * (v2.y - v1.y);
- var u2 = (cLocalX - v2.x) * (v1.x - v2.x) + (cLocalY - v2.y) * (v1.y - v2.y);
- if (u1 <= 0.0) {
- if ((cLocalX - v1.x) * (cLocalX - v1.x) + (cLocalY - v1.y) * (cLocalY - v1.y) > radius * radius) return;
- manifold.m_pointCount = 1;
- manifold.m_type = b2Manifold.e_faceA;
- manifold.m_localPlaneNormal.x = cLocalX - v1.x;
- manifold.m_localPlaneNormal.y = cLocalY - v1.y;
- manifold.m_localPlaneNormal.Normalize();
- manifold.m_localPoint.SetV(v1);
- manifold.m_points[0].m_localPoint.SetV(circle.m_p);
- manifold.m_points[0].m_id.key = 0;
- }
- else if (u2 <= 0) {
- if ((cLocalX - v2.x) * (cLocalX - v2.x) + (cLocalY - v2.y) * (cLocalY - v2.y) > radius * radius) return;
- manifold.m_pointCount = 1;
- manifold.m_type = b2Manifold.e_faceA;
- manifold.m_localPlaneNormal.x = cLocalX - v2.x;
- manifold.m_localPlaneNormal.y = cLocalY - v2.y;
- manifold.m_localPlaneNormal.Normalize();
- manifold.m_localPoint.SetV(v2);
- manifold.m_points[0].m_localPoint.SetV(circle.m_p);
- manifold.m_points[0].m_id.key = 0;
- }
- else {
- var faceCenterX = 0.5 * (v1.x + v2.x);
- var faceCenterY = 0.5 * (v1.y + v2.y);
- separation = (cLocalX - faceCenterX) * normals[vertIndex1].x + (cLocalY - faceCenterY) * normals[vertIndex1].y;
- if (separation > radius) return;
- manifold.m_pointCount = 1;
- manifold.m_type = b2Manifold.e_faceA;
- manifold.m_localPlaneNormal.x = normals[vertIndex1].x;
- manifold.m_localPlaneNormal.y = normals[vertIndex1].y;
- manifold.m_localPlaneNormal.Normalize();
- manifold.m_localPoint.Set(faceCenterX, faceCenterY);
- manifold.m_points[0].m_localPoint.SetV(circle.m_p);
- manifold.m_points[0].m_id.key = 0;
- }
- }
- b2Collision.TestOverlap = function (a, b) {
- var t1 = b.lowerBound;
- var t2 = a.upperBound;
- var d1X = t1.x - t2.x;
- var d1Y = t1.y - t2.y;
- t1 = a.lowerBound;
- t2 = b.upperBound;
- var d2X = t1.x - t2.x;
- var d2Y = t1.y - t2.y;
- if (d1X > 0.0 || d1Y > 0.0) return false;
- if (d2X > 0.0 || d2Y > 0.0) return false;
- return true;
- }
- Box2D.postDefs.push(function () {
- Box2D.Collision.b2Collision.s_incidentEdge = b2Collision.MakeClipPointVector();
- Box2D.Collision.b2Collision.s_clipPoints1 = b2Collision.MakeClipPointVector();
- Box2D.Collision.b2Collision.s_clipPoints2 = b2Collision.MakeClipPointVector();
- Box2D.Collision.b2Collision.s_edgeAO = new Vector_a2j_Number(1);
- Box2D.Collision.b2Collision.s_edgeBO = new Vector_a2j_Number(1);
- Box2D.Collision.b2Collision.s_localTangent = new b2Vec2();
- Box2D.Collision.b2Collision.s_localNormal = new b2Vec2();
- Box2D.Collision.b2Collision.s_planePoint = new b2Vec2();
- Box2D.Collision.b2Collision.s_normal = new b2Vec2();
- Box2D.Collision.b2Collision.s_tangent = new b2Vec2();
- Box2D.Collision.b2Collision.s_tangent2 = new b2Vec2();
- Box2D.Collision.b2Collision.s_v11 = new b2Vec2();
- Box2D.Collision.b2Collision.s_v12 = new b2Vec2();
- Box2D.Collision.b2Collision.b2CollidePolyTempVec = new b2Vec2();
- Box2D.Collision.b2Collision.b2_nullFeature = 0x000000ff;
- });
- b2ContactID.b2ContactID = function () {
- this.features = new Features();
- };
- b2ContactID.prototype.b2ContactID = function () {
- this.features._m_id = this;
- }
- b2ContactID.prototype.Set = function (id) {
- this.key = id._key;
- }
- b2ContactID.prototype.Copy = function () {
- var id = new b2ContactID();
- id.key = this.key;
- return id;
- }
- Object.defineProperty(b2ContactID.prototype, 'key', {
- enumerable: false,
- configurable: true,
- get: function () {
- return this._key;
- }
- });
- Object.defineProperty(b2ContactID.prototype, 'key', {
- enumerable: false,
- configurable: true,
- set: function (value) {
- if (value === undefined) value = 0;
- this._key = value;
- this.features._referenceEdge = this._key & 0x000000ff;
- this.features._incidentEdge = ((this._key & 0x0000ff00) >> 8) & 0x000000ff;
- this.features._incidentVertex = ((this._key & 0x00ff0000) >> 16) & 0x000000ff;
- this.features._flip = ((this._key & 0xff000000) >> 24) & 0x000000ff;
- }
- });
- b2ContactPoint.b2ContactPoint = function () {
- this.position = new b2Vec2();
- this.velocity = new b2Vec2();
- this.normal = new b2Vec2();
- this.id = new b2ContactID();
- };
- b2Distance.b2Distance = function () {};
- b2Distance.Distance = function (output, cache, input) {
- ++b2Distance.b2_gjkCalls;
- var proxyA = input.proxyA;
- var proxyB = input.proxyB;
- var transformA = input.transformA;
- var transformB = input.transformB;
- var simplex = b2Distance.s_simplex;
- simplex.ReadCache(cache, proxyA, transformA, proxyB, transformB);
- var vertices = simplex.m_vertices;
- var k_maxIters = 20;
- var saveA = b2Distance.s_saveA;
- var saveB = b2Distance.s_saveB;
- var saveCount = 0;
- var closestPoint = simplex.GetClosestPoint();
- var distanceSqr1 = closestPoint.LengthSquared();
- var distanceSqr2 = distanceSqr1;
- var i = 0;
- var p;
- var iter = 0;
- while (iter < k_maxIters) {
- saveCount = simplex.m_count;
- for (i = 0;
- i < saveCount; i++) {
- saveA[i] = vertices[i].indexA;
- saveB[i] = vertices[i].indexB;
- }
- switch (simplex.m_count) {
- case 1:
- break;
- case 2:
- simplex.Solve2();
- break;
- case 3:
- simplex.Solve3();
- break;
- default:
- b2Settings.b2Assert(false);
- }
- if (simplex.m_count == 3) {
- break;
- }
- p = simplex.GetClosestPoint();
- distanceSqr2 = p.LengthSquared();
- if (distanceSqr2 > distanceSqr1) {}
- distanceSqr1 = distanceSqr2;
- var d = simplex.GetSearchDirection();
- if (d.LengthSquared() < Number.MIN_VALUE * Number.MIN_VALUE) {
- break;
- }
- var vertex = vertices[simplex.m_count];
- vertex.indexA = proxyA.GetSupport(b2Math.MulTMV(transformA.R, d.GetNegative()));
- vertex.wA = b2Math.MulX(transformA, proxyA.GetVertex(vertex.indexA));
- vertex.indexB = proxyB.GetSupport(b2Math.MulTMV(transformB.R, d));
- vertex.wB = b2Math.MulX(transformB, proxyB.GetVertex(vertex.indexB));
- vertex.w = b2Math.SubtractVV(vertex.wB, vertex.wA);
- ++iter;
- ++b2Distance.b2_gjkIters;
- var duplicate = false;
- for (i = 0;
- i < saveCount; i++) {
- if (vertex.indexA == saveA[i] && vertex.indexB == saveB[i]) {
- duplicate = true;
- break;
- }
- }
- if (duplicate) {
- break;
- }++simplex.m_count;
- }
- b2Distance.b2_gjkMaxIters = b2Math.Max(b2Distance.b2_gjkMaxIters, iter);
- simplex.GetWitnessPoints(output.pointA, output.pointB);
- output.distance = b2Math.SubtractVV(output.pointA, output.pointB).Length();
- output.iterations = iter;
- simplex.WriteCache(cache);
- if (input.useRadii) {
- var rA = proxyA.m_radius;
- var rB = proxyB.m_radius;
- if (output.distance > rA + rB && output.distance > Number.MIN_VALUE) {
- output.distance -= rA + rB;
- var normal = b2Math.SubtractVV(output.pointB, output.pointA);
- normal.Normalize();
- output.pointA.x += rA * normal.x;
- output.pointA.y += rA * normal.y;
- output.pointB.x -= rB * normal.x;
- output.pointB.y -= rB * normal.y;
- }
- else {
- p = new b2Vec2();
- p.x = .5 * (output.pointA.x + output.pointB.x);
- p.y = .5 * (output.pointA.y + output.pointB.y);
- output.pointA.x = output.pointB.x = p.x;
- output.pointA.y = output.pointB.y = p.y;
- output.distance = 0.0;
- }
- }
- }
- Box2D.postDefs.push(function () {
- Box2D.Collision.b2Distance.s_simplex = new b2Simplex();
- Box2D.Collision.b2Distance.s_saveA = new Vector_a2j_Number(3);
- Box2D.Collision.b2Distance.s_saveB = new Vector_a2j_Number(3);
- });
- b2DistanceInput.b2DistanceInput = function () {};
- b2DistanceOutput.b2DistanceOutput = function () {
- this.pointA = new b2Vec2();
- this.pointB = new b2Vec2();
- };
- b2DistanceProxy.b2DistanceProxy = function () {};
- b2DistanceProxy.prototype.Set = function (shape) {
- switch (shape.GetType()) {
- case b2Shape.e_circleShape:
- {
- var circle = (shape instanceof b2CircleShape ? shape : null);
- this.m_vertices = new Vector(1, true);
- this.m_vertices[0] = circle.m_p;
- this.m_count = 1;
- this.m_radius = circle.m_radius;
- }
- break;
- case b2Shape.e_polygonShape:
- {
- var polygon = (shape instanceof b2PolygonShape ? shape : null);
- this.m_vertices = polygon.m_vertices;
- this.m_count = polygon.m_vertexCount;
- this.m_radius = polygon.m_radius;
- }
- break;
- default:
- b2Settings.b2Assert(false);
- }
- }
- b2DistanceProxy.prototype.GetSupport = function (d) {
- var bestIndex = 0;
- var bestValue = this.m_vertices[0].x * d.x + this.m_vertices[0].y * d.y;
- for (var i = 1; i < this.m_count; ++i) {
- var value = this.m_vertices[i].x * d.x + this.m_vertices[i].y * d.y;
- if (value > bestValue) {
- bestIndex = i;
- bestValue = value;
- }
- }
- return bestIndex;
- }
- b2DistanceProxy.prototype.GetSupportVertex = function (d) {
- var bestIndex = 0;
- var bestValue = this.m_vertices[0].x * d.x + this.m_vertices[0].y * d.y;
- for (var i = 1; i < this.m_count; ++i) {
- var value = this.m_vertices[i].x * d.x + this.m_vertices[i].y * d.y;
- if (value > bestValue) {
- bestIndex = i;
- bestValue = value;
- }
- }
- return this.m_vertices[bestIndex];
- }
- b2DistanceProxy.prototype.GetVertexCount = function () {
- return this.m_count;
- }
- b2DistanceProxy.prototype.GetVertex = function (index) {
- if (index === undefined) index = 0;
- b2Settings.b2Assert(0 <= index && index < this.m_count);
- return this.m_vertices[index];
- }
- b2DynamicTree.b2DynamicTree = function () {};
- b2DynamicTree.prototype.b2DynamicTree = function () {
- this.m_root = null;
- this.m_freeList = null;
- this.m_path = 0;
- this.m_insertionCount = 0;
- }
- b2DynamicTree.prototype.CreateProxy = function (aabb, userData) {
- var node = this.AllocateNode();
- var extendX = b2Settings.b2_aabbExtension;
- var extendY = b2Settings.b2_aabbExtension;
- node.aabb.lowerBound.x = aabb.lowerBound.x - extendX;
- node.aabb.lowerBound.y = aabb.lowerBound.y - extendY;
- node.aabb.upperBound.x = aabb.upperBound.x + extendX;
- node.aabb.upperBound.y = aabb.upperBound.y + extendY;
- node.userData = userData;
- this.InsertLeaf(node);
- return node;
- }
- b2DynamicTree.prototype.DestroyProxy = function (proxy) {
- this.RemoveLeaf(proxy);
- this.FreeNode(proxy);
- }
- b2DynamicTree.prototype.MoveProxy = function (proxy, aabb, displacement) {
- b2Settings.b2Assert(proxy.IsLeaf());
- if (proxy.aabb.Contains(aabb)) {
- return false;
- }
- this.RemoveLeaf(proxy);
- var extendX = b2Settings.b2_aabbExtension + b2Settings.b2_aabbMultiplier * (displacement.x > 0 ? displacement.x : (-displacement.x));
- var extendY = b2Settings.b2_aabbExtension + b2Settings.b2_aabbMultiplier * (displacement.y > 0 ? displacement.y : (-displacement.y));
- proxy.aabb.lowerBound.x = aabb.lowerBound.x - extendX;
- proxy.aabb.lowerBound.y = aabb.lowerBound.y - extendY;
- proxy.aabb.upperBound.x = aabb.upperBound.x + extendX;
- proxy.aabb.upperBound.y = aabb.upperBound.y + extendY;
- this.InsertLeaf(proxy);
- return true;
- }
- b2DynamicTree.prototype.Rebalance = function (iterations) {
- if (iterations === undefined) iterations = 0;
- if (this.m_root == null) return;
- for (var i = 0; i < iterations; i++) {
- var node = this.m_root;
- var bit = 0;
- while (node.IsLeaf() == false) {
- node = (this.m_path >> bit) & 1 ? node.child2 : node.child1;
- bit = (bit + 1) & 31;
- }++this.m_path;
- this.RemoveLeaf(node);
- this.InsertLeaf(node);
- }
- }
- b2DynamicTree.prototype.GetFatAABB = function (proxy) {
- return proxy.aabb;
- }
- b2DynamicTree.prototype.GetUserData = function (proxy) {
- return proxy.userData;
- }
- b2DynamicTree.prototype.Query = function (callback, aabb) {
- if (this.m_root == null) return;
- var stack = new Vector();
- var count = 0;
- stack[count++] = this.m_root;
- while (count > 0) {
- var node = stack[--count];
- if (node.aabb.TestOverlap(aabb)) {
- if (node.IsLeaf()) {
- var proceed = callback(node);
- if (!proceed) return;
- }
- else {
- stack[count++] = node.child1;
- stack[count++] = node.child2;
- }
- }
- }
- }
- b2DynamicTree.prototype.RayCast = function (callback, input) {
- if (this.m_root == null) return;
- var p1 = input.p1;
- var p2 = input.p2;
- var r = b2Math.SubtractVV(p1, p2);
- r.Normalize();
- var v = b2Math.CrossFV(1.0, r);
- var abs_v = b2Math.AbsV(v);
- var maxFraction = input.maxFraction;
- var segmentAABB = new b2AABB();
- var tX = 0;
- var tY = 0; {
- tX = p1.x + maxFraction * (p2.x - p1.x);
- tY = p1.y + maxFraction * (p2.y - p1.y);
- segmentAABB.lowerBound.x = Math.min(p1.x, tX);
- segmentAABB.lowerBound.y = Math.min(p1.y, tY);
- segmentAABB.upperBound.x = Math.max(p1.x, tX);
- segmentAABB.upperBound.y = Math.max(p1.y, tY);
- }
- var stack = new Vector();
- var count = 0;
- stack[count++] = this.m_root;
- while (count > 0) {
- var node = stack[--count];
- if (node.aabb.TestOverlap(segmentAABB) == false) {
- continue;
- }
- var c = node.aabb.GetCenter();
- var h = node.aabb.GetExtents();
- var separation = Math.abs(v.x * (p1.x - c.x) + v.y * (p1.y - c.y)) - abs_v.x * h.x - abs_v.y * h.y;
- if (separation > 0.0) continue;
- if (node.IsLeaf()) {
- var subInput = new b2RayCastInput();
- subInput.p1 = input.p1;
- subInput.p2 = input.p2;
- subInput.maxFraction = input.maxFraction;
- maxFraction = callback(subInput, node);
- if (maxFraction == 0.0) return;
- if (maxFraction > 0.0) {
- tX = p1.x + maxFraction * (p2.x - p1.x);
- tY = p1.y + maxFraction * (p2.y - p1.y);
- segmentAABB.lowerBound.x = Math.min(p1.x, tX);
- segmentAABB.lowerBound.y = Math.min(p1.y, tY);
- segmentAABB.upperBound.x = Math.max(p1.x, tX);
- segmentAABB.upperBound.y = Math.max(p1.y, tY);
- }
- }
- else {
- stack[count++] = node.child1;
- stack[count++] = node.child2;
- }
- }
- }
- b2DynamicTree.prototype.AllocateNode = function () {
- if (this.m_freeList) {
- var node = this.m_freeList;
- this.m_freeList = node.parent;
- node.parent = null;
- node.child1 = null;
- node.child2 = null;
- return node;
- }
- return new b2DynamicTreeNode();
- }
- b2DynamicTree.prototype.FreeNode = function (node) {
- node.parent = this.m_freeList;
- this.m_freeList = node;
- }
- b2DynamicTree.prototype.InsertLeaf = function (leaf) {
- ++this.m_insertionCount;
- if (this.m_root == null) {
- this.m_root = leaf;
- this.m_root.parent = null;
- return;
- }
- var center = leaf.aabb.GetCenter();
- var sibling = this.m_root;
- if (sibling.IsLeaf() == false) {
- do {
- var child1 = sibling.child1;
- var child2 = sibling.child2;
- var norm1 = Math.abs((child1.aabb.lowerBound.x + child1.aabb.upperBound.x) / 2 - center.x) + Math.abs((child1.aabb.lowerBound.y + child1.aabb.upperBound.y) / 2 - center.y);
- var norm2 = Math.abs((child2.aabb.lowerBound.x + child2.aabb.upperBound.x) / 2 - center.x) + Math.abs((child2.aabb.lowerBound.y + child2.aabb.upperBound.y) / 2 - center.y);
- if (norm1 < norm2) {
- sibling = child1;
- }
- else {
- sibling = child2;
- }
- }
- while (sibling.IsLeaf() == false)
- }
- var node1 = sibling.parent;
- var node2 = this.AllocateNode();
- node2.parent = node1;
- node2.userData = null;
- node2.aabb.Combine(leaf.aabb, sibling.aabb);
- if (node1) {
- if (sibling.parent.child1 == sibling) {
- node1.child1 = node2;
- }
- else {
- node1.child2 = node2;
- }
- node2.child1 = sibling;
- node2.child2 = leaf;
- sibling.parent = node2;
- leaf.parent = node2;
- do {
- if (node1.aabb.Contains(node2.aabb)) break;
- node1.aabb.Combine(node1.child1.aabb, node1.child2.aabb);
- node2 = node1;
- node1 = node1.parent;
- }
- while (node1)
- }
- else {
- node2.child1 = sibling;
- node2.child2 = leaf;
- sibling.parent = node2;
- leaf.parent = node2;
- this.m_root = node2;
- }
- }
- b2DynamicTree.prototype.RemoveLeaf = function (leaf) {
- if (leaf == this.m_root) {
- this.m_root = null;
- return;
- }
- var node2 = leaf.parent;
- var node1 = node2.parent;
- var sibling;
- if (node2.child1 == leaf) {
- sibling = node2.child2;
- }
- else {
- sibling = node2.child1;
- }
- if (node1) {
- if (node1.child1 == node2) {
- node1.child1 = sibling;
- }
- else {
- node1.child2 = sibling;
- }
- sibling.parent = node1;
- this.FreeNode(node2);
- while (node1) {
- var oldAABB = node1.aabb;
- node1.aabb = b2AABB.Combine(node1.child1.aabb, node1.child2.aabb);
- if (oldAABB.Contains(node1.aabb)) break;
- node1 = node1.parent;
- }
- }
- else {
- this.m_root = sibling;
- sibling.parent = null;
- this.FreeNode(node2);
- }
- }
- b2DynamicTreeBroadPhase.b2DynamicTreeBroadPhase = function () {
- this.m_tree = new b2DynamicTree();
- this.m_moveBuffer = new Vector();
- this.m_pairBuffer = new Vector();
- this.m_pairCount = 0;
- };
- b2DynamicTreeBroadPhase.prototype.CreateProxy = function (aabb, userData) {
- var proxy = this.m_tree.CreateProxy(aabb, userData);
- ++this.m_proxyCount;
- this.BufferMove(proxy);
- return proxy;
- }
- b2DynamicTreeBroadPhase.prototype.DestroyProxy = function (proxy) {
- this.UnBufferMove(proxy);
- --this.m_proxyCount;
- this.m_tree.DestroyProxy(proxy);
- }
- b2DynamicTreeBroadPhase.prototype.MoveProxy = function (proxy, aabb, displacement) {
- var buffer = this.m_tree.MoveProxy(proxy, aabb, displacement);
- if (buffer) {
- this.BufferMove(proxy);
- }
- }
- b2DynamicTreeBroadPhase.prototype.TestOverlap = function (proxyA, proxyB) {
- var aabbA = this.m_tree.GetFatAABB(proxyA);
- var aabbB = this.m_tree.GetFatAABB(proxyB);
- return aabbA.TestOverlap(aabbB);
- }
- b2DynamicTreeBroadPhase.prototype.GetUserData = function (proxy) {
- return this.m_tree.GetUserData(proxy);
- }
- b2DynamicTreeBroadPhase.prototype.GetFatAABB = function (proxy) {
- return this.m_tree.GetFatAABB(proxy);
- }
- b2DynamicTreeBroadPhase.prototype.GetProxyCount = function () {
- return this.m_proxyCount;
- }
- b2DynamicTreeBroadPhase.prototype.UpdatePairs = function (callback) {
- var __this = this;
- __this.m_pairCount = 0;
- var i = 0,
- queryProxy;
- for (i = 0;
- i < __this.m_moveBuffer.length; ++i) {
- queryProxy = __this.m_moveBuffer[i];
-
- function QueryCallback(proxy) {
- if (proxy == queryProxy) return true;
- if (__this.m_pairCount == __this.m_pairBuffer.length) {
- __this.m_pairBuffer[__this.m_pairCount] = new b2DynamicTreePair();
- }
- var pair = __this.m_pairBuffer[__this.m_pairCount];
- pair.proxyA = proxy < queryProxy ? proxy : queryProxy;
- pair.proxyB = proxy >= queryProxy ? proxy : queryProxy;++__this.m_pairCount;
- return true;
- };
- var fatAABB = __this.m_tree.GetFatAABB(queryProxy);
- __this.m_tree.Query(QueryCallback, fatAABB);
- }
- __this.m_moveBuffer.length = 0;
- for (var i = 0; i < __this.m_pairCount;) {
- var primaryPair = __this.m_pairBuffer[i];
- var userDataA = __this.m_tree.GetUserData(primaryPair.proxyA);
- var userDataB = __this.m_tree.GetUserData(primaryPair.proxyB);
- callback(userDataA, userDataB);
- ++i;
- while (i < __this.m_pairCount) {
- var pair = __this.m_pairBuffer[i];
- if (pair.proxyA != primaryPair.proxyA || pair.proxyB != primaryPair.proxyB) {
- break;
- }++i;
- }
- }
- }
- b2DynamicTreeBroadPhase.prototype.Query = function (callback, aabb) {
- this.m_tree.Query(callback, aabb);
- }
- b2DynamicTreeBroadPhase.prototype.RayCast = function (callback, input) {
- this.m_tree.RayCast(callback, input);
- }
- b2DynamicTreeBroadPhase.prototype.Validate = function () {}
- b2DynamicTreeBroadPhase.prototype.Rebalance = function (iterations) {
- if (iterations === undefined) iterations = 0;
- this.m_tree.Rebalance(iterations);
- }
- b2DynamicTreeBroadPhase.prototype.BufferMove = function (proxy) {
- this.m_moveBuffer[this.m_moveBuffer.length] = proxy;
- }
- b2DynamicTreeBroadPhase.prototype.UnBufferMove = function (proxy) {
- var i = parseInt(this.m_moveBuffer.indexOf(proxy));
- this.m_moveBuffer.splice(i, 1);
- }
- b2DynamicTreeBroadPhase.prototype.ComparePairs = function (pair1, pair2) {
- return 0;
- }
- b2DynamicTreeBroadPhase.__implements = {};
- b2DynamicTreeBroadPhase.__implements[IBroadPhase] = true;
- b2DynamicTreeNode.b2DynamicTreeNode = function () {
- this.aabb = new b2AABB();
- };
- b2DynamicTreeNode.prototype.IsLeaf = function () {
- return this.child1 == null;
- }
- b2DynamicTreePair.b2DynamicTreePair = function () {};
- b2Manifold.b2Manifold = function () {
- this.m_pointCount = 0;
- };
- b2Manifold.prototype.b2Manifold = function () {
- this.m_points = new Vector(b2Settings.b2_maxManifoldPoints);
- for (var i = 0; i < b2Settings.b2_maxManifoldPoints; i++) {
- this.m_points[i] = new b2ManifoldPoint();
- }
- this.m_localPlaneNormal = new b2Vec2();
- this.m_localPoint = new b2Vec2();
- }
- b2Manifold.prototype.Reset = function () {
- for (var i = 0; i < b2Settings.b2_maxManifoldPoints; i++) {
- ((this.m_points[i] instanceof b2ManifoldPoint ? this.m_points[i] : null)).Reset();
- }
- this.m_localPlaneNormal.SetZero();
- this.m_localPoint.SetZero();
- this.m_type = 0;
- this.m_pointCount = 0;
- }
- b2Manifold.prototype.Set = function (m) {
- this.m_pointCount = m.m_pointCount;
- for (var i = 0; i < b2Settings.b2_maxManifoldPoints; i++) {
- ((this.m_points[i] instanceof b2ManifoldPoint ? this.m_points[i] : null)).Set(m.m_points[i]);
- }
- this.m_localPlaneNormal.SetV(m.m_localPlaneNormal);
- this.m_localPoint.SetV(m.m_localPoint);
- this.m_type = m.m_type;
- }
- b2Manifold.prototype.Copy = function () {
- var copy = new b2Manifold();
- copy.Set(this);
- return copy;
- }
- Box2D.postDefs.push(function () {
- Box2D.Collision.b2Manifold.e_circles = 0x0001;
- Box2D.Collision.b2Manifold.e_faceA = 0x0002;
- Box2D.Collision.b2Manifold.e_faceB = 0x0004;
- });
- b2ManifoldPoint.b2ManifoldPoint = function () {
- this.m_localPoint = new b2Vec2();
- this.m_id = new b2ContactID();
- };
- b2ManifoldPoint.prototype.b2ManifoldPoint = function () {
- this.Reset();
- }
- b2ManifoldPoint.prototype.Reset = function () {
- this.m_localPoint.SetZero();
- this.m_normalImpulse = 0.0;
- this.m_tangentImpulse = 0.0;
- this.m_id.key = 0;
- }
- b2ManifoldPoint.prototype.Set = function (m) {
- this.m_localPoint.SetV(m.m_localPoint);
- this.m_normalImpulse = m.m_normalImpulse;
- this.m_tangentImpulse = m.m_tangentImpulse;
- this.m_id.Set(m.m_id);
- }
- b2Point.b2Point = function () {
- this.p = new b2Vec2();
- };
- b2Point.prototype.Support = function (xf, vX, vY) {
- if (vX === undefined) vX = 0;
- if (vY === undefined) vY = 0;
- return this.p;
- }
- b2Point.prototype.GetFirstVertex = function (xf) {
- return this.p;
- }
- b2RayCastInput.b2RayCastInput = function () {
- this.p1 = new b2Vec2();
- this.p2 = new b2Vec2();
- };
- b2RayCastInput.prototype.b2RayCastInput = function (p1, p2, maxFraction) {
- if (p1 === undefined) p1 = null;
- if (p2 === undefined) p2 = null;
- if (maxFraction === undefined) maxFraction = 1;
- if (p1) this.p1.SetV(p1);
- if (p2) this.p2.SetV(p2);
- this.maxFraction = maxFraction;
- }
- b2RayCastOutput.b2RayCastOutput = function () {
- this.normal = new b2Vec2();
- };
- b2Segment.b2Segment = function () {
- this.p1 = new b2Vec2();
- this.p2 = new b2Vec2();
- };
- b2Segment.prototype.TestSegment = function (lambda, normal, segment, maxLambda) {
- if (maxLambda === undefined) maxLambda = 0;
- var s = segment.p1;
- var rX = segment.p2.x - s.x;
- var rY = segment.p2.y - s.y;
- var dX = this.p2.x - this.p1.x;
- var dY = this.p2.y - this.p1.y;
- var nX = dY;
- var nY = (-dX);
- var k_slop = 100.0 * Number.MIN_VALUE;
- var denom = (-(rX * nX + rY * nY));
- if (denom > k_slop) {
- var bX = s.x - this.p1.x;
- var bY = s.y - this.p1.y;
- var a = (bX * nX + bY * nY);
- if (0.0 <= a && a <= maxLambda * denom) {
- var mu2 = (-rX * bY) + rY * bX;
- if ((-k_slop * denom) <= mu2 && mu2 <= denom * (1.0 + k_slop)) {
- a /= denom;
- var nLen = Math.sqrt(nX * nX + nY * nY);
- nX /= nLen;
- nY /= nLen;
- lambda[0] = a;
- normal.Set(nX, nY);
- return true;
- }
- }
- }
- return false;
- }
- b2Segment.prototype.Extend = function (aabb) {
- this.ExtendForward(aabb);
- this.ExtendBackward(aabb);
- }
-
-
-
-
- b2Segment.prototype.ExtendForward = function (aabb) {
- var dX = this.p2.x - this.p1.x;
- var dY = this.p2.y - this.p1.y;
- var lambda = Math.min(dX > 0 ? (aabb.upperBound.x - this.p1.x) / dX : dX < 0 ? (aabb.lowerBound.x - this.p1.x) / dX : Number.POSITIVE_INFINITY,
- dY > 0 ? (aabb.upperBound.y - this.p1.y) / dY : dY < 0 ? (aabb.lowerBound.y - this.p1.y) / dY : Number.POSITIVE_INFINITY);
- this.p2.x = this.p1.x + dX * lambda;
- this.p2.y = this.p1.y + dY * lambda;
- }
- b2Segment.prototype.ExtendBackward = function (aabb) {
- var dX = (-this.p2.x) + this.p1.x;
- var dY = (-this.p2.y) + this.p1.y;
- var lambda = Math.min(dX > 0 ? (aabb.upperBound.x - this.p2.x) / dX : dX < 0 ? (aabb.lowerBound.x - this.p2.x) / dX : Number.POSITIVE_INFINITY,
- dY > 0 ? (aabb.upperBound.y - this.p2.y) / dY : dY < 0 ? (aabb.lowerBound.y - this.p2.y) / dY : Number.POSITIVE_INFINITY);
- this.p1.x = this.p2.x + dX * lambda;
- this.p1.y = this.p2.y + dY * lambda;
- }
- b2SeparationFunction.b2SeparationFunction = function () {
- this.m_localPoint = new b2Vec2();
- this.m_axis = new b2Vec2();
- };
- b2SeparationFunction.prototype.Initialize = function (cache, proxyA, transformA, proxyB, transformB) {
- this.m_proxyA = proxyA;
- this.m_proxyB = proxyB;
- var count = parseInt(cache.count);
- b2Settings.b2Assert(0 < count && count < 3);
- var localPointA;
- var localPointA1;
- var localPointA2;
- var localPointB;
- var localPointB1;
- var localPointB2;
- var pointAX = 0;
- var pointAY = 0;
- var pointBX = 0;
- var pointBY = 0;
- var normalX = 0;
- var normalY = 0;
- var tMat;
- var tVec;
- var s = 0;
- var sgn = 0;
- if (count == 1) {
- this.m_type = b2SeparationFunction.e_points;
- localPointA = this.m_proxyA.GetVertex(cache.indexA[0]);
- localPointB = this.m_proxyB.GetVertex(cache.indexB[0]);
- tVec = localPointA;
- tMat = transformA.R;
- pointAX = transformA.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y);
- pointAY = transformA.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y);
- tVec = localPointB;
- tMat = transformB.R;
- pointBX = transformB.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y);
- pointBY = transformB.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y);
- this.m_axis.x = pointBX - pointAX;
- this.m_axis.y = pointBY - pointAY;
- this.m_axis.Normalize();
- }
- else if (cache.indexB[0] == cache.indexB[1]) {
- this.m_type = b2SeparationFunction.e_faceA;
- localPointA1 = this.m_proxyA.GetVertex(cache.indexA[0]);
- localPointA2 = this.m_proxyA.GetVertex(cache.indexA[1]);
- localPointB = this.m_proxyB.GetVertex(cache.indexB[0]);
- this.m_localPoint.x = 0.5 * (localPointA1.x + localPointA2.x);
- this.m_localPoint.y = 0.5 * (localPointA1.y + localPointA2.y);
- this.m_axis = b2Math.CrossVF(b2Math.SubtractVV(localPointA2, localPointA1), 1.0);
- this.m_axis.Normalize();
- tVec = this.m_axis;
- tMat = transformA.R;
- normalX = tMat.col1.x * tVec.x + tMat.col2.x * tVec.y;
- normalY = tMat.col1.y * tVec.x + tMat.col2.y * tVec.y;
- tVec = this.m_localPoint;
- tMat = transformA.R;
- pointAX = transformA.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y);
- pointAY = transformA.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y);
- tVec = localPointB;
- tMat = transformB.R;
- pointBX = transformB.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y);
- pointBY = transformB.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y);
- s = (pointBX - pointAX) * normalX + (pointBY - pointAY) * normalY;
- if (s < 0.0) {
- this.m_axis.NegativeSelf();
- }
- }
- else if (cache.indexA[0] == cache.indexA[0]) {
- this.m_type = b2SeparationFunction.e_faceB;
- localPointB1 = this.m_proxyB.GetVertex(cache.indexB[0]);
- localPointB2 = this.m_proxyB.GetVertex(cache.indexB[1]);
- localPointA = this.m_proxyA.GetVertex(cache.indexA[0]);
- this.m_localPoint.x = 0.5 * (localPointB1.x + localPointB2.x);
- this.m_localPoint.y = 0.5 * (localPointB1.y + localPointB2.y);
- this.m_axis = b2Math.CrossVF(b2Math.SubtractVV(localPointB2, localPointB1), 1.0);
- this.m_axis.Normalize();
- tVec = this.m_axis;
- tMat = transformB.R;
- normalX = tMat.col1.x * tVec.x + tMat.col2.x * tVec.y;
- normalY = tMat.col1.y * tVec.x + tMat.col2.y * tVec.y;
- tVec = this.m_localPoint;
- tMat = transformB.R;
- pointBX = transformB.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y);
- pointBY = transformB.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y);
- tVec = localPointA;
- tMat = transformA.R;
- pointAX = transformA.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y);
- pointAY = transformA.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y);
- s = (pointAX - pointBX) * normalX + (pointAY - pointBY) * normalY;
- if (s < 0.0) {
- this.m_axis.NegativeSelf();
- }
- }
- else {
- localPointA1 = this.m_proxyA.GetVertex(cache.indexA[0]);
- localPointA2 = this.m_proxyA.GetVertex(cache.indexA[1]);
- localPointB1 = this.m_proxyB.GetVertex(cache.indexB[0]);
- localPointB2 = this.m_proxyB.GetVertex(cache.indexB[1]);
- var pA = b2Math.MulX(transformA, localPointA);
- var dA = b2Math.MulMV(transformA.R, b2Math.SubtractVV(localPointA2, localPointA1));
- var pB = b2Math.MulX(transformB, localPointB);
- var dB = b2Math.MulMV(transformB.R, b2Math.SubtractVV(localPointB2, localPointB1));
- var a = dA.x * dA.x + dA.y * dA.y;
- var e = dB.x * dB.x + dB.y * dB.y;
- var r = b2Math.SubtractVV(dB, dA);
- var c = dA.x * r.x + dA.y * r.y;
- var f = dB.x * r.x + dB.y * r.y;
- var b = dA.x * dB.x + dA.y * dB.y;
- var denom = a * e - b * b;
- s = 0.0;
- if (denom != 0.0) {
- s = b2Math.Clamp((b * f - c * e) / denom, 0.0, 1.0);
- }
- var t = (b * s + f) / e;
- if (t < 0.0) {
- t = 0.0;
- s = b2Math.Clamp((b - c) / a, 0.0, 1.0);
- }
- localPointA = new b2Vec2();
- localPointA.x = localPointA1.x + s * (localPointA2.x - localPointA1.x);
- localPointA.y = localPointA1.y + s * (localPointA2.y - localPointA1.y);
- localPointB = new b2Vec2();
- localPointB.x = localPointB1.x + s * (localPointB2.x - localPointB1.x);
- localPointB.y = localPointB1.y + s * (localPointB2.y - localPointB1.y);
- if (s == 0.0 || s == 1.0) {
- this.m_type = b2SeparationFunction.e_faceB;
- this.m_axis = b2Math.CrossVF(b2Math.SubtractVV(localPointB2, localPointB1), 1.0);
- this.m_axis.Normalize();
- this.m_localPoint = localPointB;
- tVec = this.m_axis;
- tMat = transformB.R;
- normalX = tMat.col1.x * tVec.x + tMat.col2.x * tVec.y;
- normalY = tMat.col1.y * tVec.x + tMat.col2.y * tVec.y;
- tVec = this.m_localPoint;
- tMat = transformB.R;
- pointBX = transformB.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y);
- pointBY = transformB.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y);
- tVec = localPointA;
- tMat = transformA.R;
- pointAX = transformA.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y);
- pointAY = transformA.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y);
- sgn = (pointAX - pointBX) * normalX + (pointAY - pointBY) * normalY;
- if (s < 0.0) {
- this.m_axis.NegativeSelf();
- }
- }
- else {
- this.m_type = b2SeparationFunction.e_faceA;
- this.m_axis = b2Math.CrossVF(b2Math.SubtractVV(localPointA2, localPointA1), 1.0);
- this.m_localPoint = localPointA;
- tVec = this.m_axis;
- tMat = transformA.R;
- normalX = tMat.col1.x * tVec.x + tMat.col2.x * tVec.y;
- normalY = tMat.col1.y * tVec.x + tMat.col2.y * tVec.y;
- tVec = this.m_localPoint;
- tMat = transformA.R;
- pointAX = transformA.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y);
- pointAY = transformA.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y);
- tVec = localPointB;
- tMat = transformB.R;
- pointBX = transformB.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y);
- pointBY = transformB.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y);
- sgn = (pointBX - pointAX) * normalX + (pointBY - pointAY) * normalY;
- if (s < 0.0) {
- this.m_axis.NegativeSelf();
- }
- }
- }
- }
- b2SeparationFunction.prototype.Evaluate = function (transformA, transformB) {
- var axisA;
- var axisB;
- var localPointA;
- var localPointB;
- var pointA;
- var pointB;
- var seperation = 0;
- var normal;
- switch (this.m_type) {
- case b2SeparationFunction.e_points:
- {
- axisA = b2Math.MulTMV(transformA.R, this.m_axis);
- axisB = b2Math.MulTMV(transformB.R, this.m_axis.GetNegative());
- localPointA = this.m_proxyA.GetSupportVertex(axisA);
- localPointB = this.m_proxyB.GetSupportVertex(axisB);
- pointA = b2Math.MulX(transformA, localPointA);
- pointB = b2Math.MulX(transformB, localPointB);
- seperation = (pointB.x - pointA.x) * this.m_axis.x + (pointB.y - pointA.y) * this.m_axis.y;
- return seperation;
- }
- case b2SeparationFunction.e_faceA:
- {
- normal = b2Math.MulMV(transformA.R, this.m_axis);
- pointA = b2Math.MulX(transformA, this.m_localPoint);
- axisB = b2Math.MulTMV(transformB.R, normal.GetNegative());
- localPointB = this.m_proxyB.GetSupportVertex(axisB);
- pointB = b2Math.MulX(transformB, localPointB);
- seperation = (pointB.x - pointA.x) * normal.x + (pointB.y - pointA.y) * normal.y;
- return seperation;
- }
- case b2SeparationFunction.e_faceB:
- {
- normal = b2Math.MulMV(transformB.R, this.m_axis);
- pointB = b2Math.MulX(transformB, this.m_localPoint);
- axisA = b2Math.MulTMV(transformA.R, normal.GetNegative());
- localPointA = this.m_proxyA.GetSupportVertex(axisA);
- pointA = b2Math.MulX(transformA, localPointA);
- seperation = (pointA.x - pointB.x) * normal.x + (pointA.y - pointB.y) * normal.y;
- return seperation;
- }
- default:
- b2Settings.b2Assert(false);
- return 0.0;
- }
- }
- Box2D.postDefs.push(function () {
- Box2D.Collision.b2SeparationFunction.e_points = 0x01;
- Box2D.Collision.b2SeparationFunction.e_faceA = 0x02;
- Box2D.Collision.b2SeparationFunction.e_faceB = 0x04;
- });
- b2Simplex.b2Simplex = function () {
- this.m_v1 = new b2SimplexVertex();
- this.m_v2 = new b2SimplexVertex();
- this.m_v3 = new b2SimplexVertex();
- this.m_vertices = new Vector(3);
- };
- b2Simplex.prototype.b2Simplex = function () {
- this.m_vertices[0] = this.m_v1;
- this.m_vertices[1] = this.m_v2;
- this.m_vertices[2] = this.m_v3;
- }
- b2Simplex.prototype.ReadCache = function (cache, proxyA, transformA, proxyB, transformB) {
- b2Settings.b2Assert(0 <= cache.count && cache.count <= 3);
- var wALocal;
- var wBLocal;
- this.m_count = cache.count;
- var vertices = this.m_vertices;
- for (var i = 0; i < this.m_count; i++) {
- var v = vertices[i];
- v.indexA = cache.indexA[i];
- v.indexB = cache.indexB[i];
- wALocal = proxyA.GetVertex(v.indexA);
- wBLocal = proxyB.GetVertex(v.indexB);
- v.wA = b2Math.MulX(transformA, wALocal);
- v.wB = b2Math.MulX(transformB, wBLocal);
- v.w = b2Math.SubtractVV(v.wB, v.wA);
- v.a = 0;
- }
- if (this.m_count > 1) {
- var metric1 = cache.metric;
- var metric2 = this.GetMetric();
- if (metric2 < .5 * metric1 || 2.0 * metric1 < metric2 || metric2 < Number.MIN_VALUE) {
- this.m_count = 0;
- }
- }
- if (this.m_count == 0) {
- v = vertices[0];
- v.indexA = 0;
- v.indexB = 0;
- wALocal = proxyA.GetVertex(0);
- wBLocal = proxyB.GetVertex(0);
- v.wA = b2Math.MulX(transformA, wALocal);
- v.wB = b2Math.MulX(transformB, wBLocal);
- v.w = b2Math.SubtractVV(v.wB, v.wA);
- this.m_count = 1;
- }
- }
- b2Simplex.prototype.WriteCache = function (cache) {
- cache.metric = this.GetMetric();
- cache.count = Box2D.parseUInt(this.m_count);
- var vertices = this.m_vertices;
- for (var i = 0; i < this.m_count; i++) {
- cache.indexA[i] = Box2D.parseUInt(vertices[i].indexA);
- cache.indexB[i] = Box2D.parseUInt(vertices[i].indexB);
- }
- }
- b2Simplex.prototype.GetSearchDirection = function () {
- switch (this.m_count) {
- case 1:
- return this.m_v1.w.GetNegative();
- case 2:
- {
- var e12 = b2Math.SubtractVV(this.m_v2.w, this.m_v1.w);
- var sgn = b2Math.CrossVV(e12, this.m_v1.w.GetNegative());
- if (sgn > 0.0) {
- return b2Math.CrossFV(1.0, e12);
- }
- else {
- return b2Math.CrossVF(e12, 1.0);
- }
- }
- default:
- b2Settings.b2Assert(false);
- return new b2Vec2();
- }
- }
- b2Simplex.prototype.GetClosestPoint = function () {
- switch (this.m_count) {
- case 0:
- b2Settings.b2Assert(false);
- return new b2Vec2();
- case 1:
- return this.m_v1.w;
- case 2:
- return new b2Vec2(this.m_v1.a * this.m_v1.w.x + this.m_v2.a * this.m_v2.w.x, this.m_v1.a * this.m_v1.w.y + this.m_v2.a * this.m_v2.w.y);
- default:
- b2Settings.b2Assert(false);
- return new b2Vec2();
- }
- }
- b2Simplex.prototype.GetWitnessPoints = function (pA, pB) {
- switch (this.m_count) {
- case 0:
- b2Settings.b2Assert(false);
- break;
- case 1:
- pA.SetV(this.m_v1.wA);
- pB.SetV(this.m_v1.wB);
- break;
- case 2:
- pA.x = this.m_v1.a * this.m_v1.wA.x + this.m_v2.a * this.m_v2.wA.x;
- pA.y = this.m_v1.a * this.m_v1.wA.y + this.m_v2.a * this.m_v2.wA.y;
- pB.x = this.m_v1.a * this.m_v1.wB.x + this.m_v2.a * this.m_v2.wB.x;
- pB.y = this.m_v1.a * this.m_v1.wB.y + this.m_v2.a * this.m_v2.wB.y;
- break;
- case 3:
- pB.x = pA.x = this.m_v1.a * this.m_v1.wA.x + this.m_v2.a * this.m_v2.wA.x + this.m_v3.a * this.m_v3.wA.x;
- pB.y = pA.y = this.m_v1.a * this.m_v1.wA.y + this.m_v2.a * this.m_v2.wA.y + this.m_v3.a * this.m_v3.wA.y;
- break;
- default:
- b2Settings.b2Assert(false);
- break;
- }
- }
- b2Simplex.prototype.GetMetric = function () {
- switch (this.m_count) {
- case 0:
- b2Settings.b2Assert(false);
- return 0.0;
- case 1:
- return 0.0;
- case 2:
- return b2Math.SubtractVV(this.m_v1.w, this.m_v2.w).Length();
- case 3:
- return b2Math.CrossVV(b2Math.SubtractVV(this.m_v2.w, this.m_v1.w), b2Math.SubtractVV(this.m_v3.w, this.m_v1.w));
- default:
- b2Settings.b2Assert(false);
- return 0.0;
- }
- }
- b2Simplex.prototype.Solve2 = function () {
- var w1 = this.m_v1.w;
- var w2 = this.m_v2.w;
- var e12 = b2Math.SubtractVV(w2, w1);
- var d12_2 = (-(w1.x * e12.x + w1.y * e12.y));
- if (d12_2 <= 0.0) {
- this.m_v1.a = 1.0;
- this.m_count = 1;
- return;
- }
- var d12_1 = (w2.x * e12.x + w2.y * e12.y);
- if (d12_1 <= 0.0) {
- this.m_v2.a = 1.0;
- this.m_count = 1;
- this.m_v1.Set(this.m_v2);
- return;
- }
- var inv_d12 = 1.0 / (d12_1 + d12_2);
- this.m_v1.a = d12_1 * inv_d12;
- this.m_v2.a = d12_2 * inv_d12;
- this.m_count = 2;
- }
- b2Simplex.prototype.Solve3 = function () {
- var w1 = this.m_v1.w;
- var w2 = this.m_v2.w;
- var w3 = this.m_v3.w;
- var e12 = b2Math.SubtractVV(w2, w1);
- var w1e12 = b2Math.Dot(w1, e12);
- var w2e12 = b2Math.Dot(w2, e12);
- var d12_1 = w2e12;
- var d12_2 = (-w1e12);
- var e13 = b2Math.SubtractVV(w3, w1);
- var w1e13 = b2Math.Dot(w1, e13);
- var w3e13 = b2Math.Dot(w3, e13);
- var d13_1 = w3e13;
- var d13_2 = (-w1e13);
- var e23 = b2Math.SubtractVV(w3, w2);
- var w2e23 = b2Math.Dot(w2, e23);
- var w3e23 = b2Math.Dot(w3, e23);
- var d23_1 = w3e23;
- var d23_2 = (-w2e23);
- var n123 = b2Math.CrossVV(e12, e13);
- var d123_1 = n123 * b2Math.CrossVV(w2, w3);
- var d123_2 = n123 * b2Math.CrossVV(w3, w1);
- var d123_3 = n123 * b2Math.CrossVV(w1, w2);
- if (d12_2 <= 0.0 && d13_2 <= 0.0) {
- this.m_v1.a = 1.0;
- this.m_count = 1;
- return;
- }
- if (d12_1 > 0.0 && d12_2 > 0.0 && d123_3 <= 0.0) {
- var inv_d12 = 1.0 / (d12_1 + d12_2);
- this.m_v1.a = d12_1 * inv_d12;
- this.m_v2.a = d12_2 * inv_d12;
- this.m_count = 2;
- return;
- }
- if (d13_1 > 0.0 && d13_2 > 0.0 && d123_2 <= 0.0) {
- var inv_d13 = 1.0 / (d13_1 + d13_2);
- this.m_v1.a = d13_1 * inv_d13;
- this.m_v3.a = d13_2 * inv_d13;
- this.m_count = 2;
- this.m_v2.Set(this.m_v3);
- return;
- }
- if (d12_1 <= 0.0 && d23_2 <= 0.0) {
- this.m_v2.a = 1.0;
- this.m_count = 1;
- this.m_v1.Set(this.m_v2);
- return;
- }
- if (d13_1 <= 0.0 && d23_1 <= 0.0) {
- this.m_v3.a = 1.0;
- this.m_count = 1;
- this.m_v1.Set(this.m_v3);
- return;
- }
- if (d23_1 > 0.0 && d23_2 > 0.0 && d123_1 <= 0.0) {
- var inv_d23 = 1.0 / (d23_1 + d23_2);
- this.m_v2.a = d23_1 * inv_d23;
- this.m_v3.a = d23_2 * inv_d23;
- this.m_count = 2;
- this.m_v1.Set(this.m_v3);
- return;
- }
- var inv_d123 = 1.0 / (d123_1 + d123_2 + d123_3);
- this.m_v1.a = d123_1 * inv_d123;
- this.m_v2.a = d123_2 * inv_d123;
- this.m_v3.a = d123_3 * inv_d123;
- this.m_count = 3;
- }
- b2SimplexCache.b2SimplexCache = function () {
- this.indexA = new Vector_a2j_Number(3);
- this.indexB = new Vector_a2j_Number(3);
- };
- b2SimplexVertex.b2SimplexVertex = function () {};
- b2SimplexVertex.prototype.Set = function (other) {
- this.wA.SetV(other.wA);
- this.wB.SetV(other.wB);
- this.w.SetV(other.w);
- this.a = other.a;
- this.indexA = other.indexA;
- this.indexB = other.indexB;
- }
- b2TimeOfImpact.b2TimeOfImpact = function () {};
- b2TimeOfImpact.TimeOfImpact = function (input) {
- ++b2TimeOfImpact.b2_toiCalls;
- var proxyA = input.proxyA;
- var proxyB = input.proxyB;
- var sweepA = input.sweepA;
- var sweepB = input.sweepB;
- b2Settings.b2Assert(sweepA.t0 == sweepB.t0);
- b2Settings.b2Assert(1.0 - sweepA.t0 > Number.MIN_VALUE);
- var radius = proxyA.m_radius + proxyB.m_radius;
- var tolerance = input.tolerance;
- var alpha = 0.0;
- var k_maxIterations = 1000;
- var iter = 0;
- var target = 0.0;
- b2TimeOfImpact.s_cache.count = 0;
- b2TimeOfImpact.s_distanceInput.useRadii = false;
- for (;;) {
- sweepA.GetTransform(b2TimeOfImpact.s_xfA, alpha);
- sweepB.GetTransform(b2TimeOfImpact.s_xfB, alpha);
- b2TimeOfImpact.s_distanceInput.proxyA = proxyA;
- b2TimeOfImpact.s_distanceInput.proxyB = proxyB;
- b2TimeOfImpact.s_distanceInput.transformA = b2TimeOfImpact.s_xfA;
- b2TimeOfImpact.s_distanceInput.transformB = b2TimeOfImpact.s_xfB;
- b2Distance.Distance(b2TimeOfImpact.s_distanceOutput, b2TimeOfImpact.s_cache, b2TimeOfImpact.s_distanceInput);
- if (b2TimeOfImpact.s_distanceOutput.distance <= 0.0) {
- alpha = 1.0;
- break;
- }
- b2TimeOfImpact.s_fcn.Initialize(b2TimeOfImpact.s_cache, proxyA, b2TimeOfImpact.s_xfA, proxyB, b2TimeOfImpact.s_xfB);
- var separation = b2TimeOfImpact.s_fcn.Evaluate(b2TimeOfImpact.s_xfA, b2TimeOfImpact.s_xfB);
- if (separation <= 0.0) {
- alpha = 1.0;
- break;
- }
- if (iter == 0) {
- if (separation > radius) {
- target = b2Math.Max(radius - tolerance, 0.75 * radius);
- }
- else {
- target = b2Math.Max(separation - tolerance, 0.02 * radius);
- }
- }
- if (separation - target < 0.5 * tolerance) {
- if (iter == 0) {
- alpha = 1.0;
- break;
- }
- break;
- }
- var newAlpha = alpha; {
- var x1 = alpha;
- var x2 = 1.0;
- var f1 = separation;
- sweepA.GetTransform(b2TimeOfImpact.s_xfA, x2);
- sweepB.GetTransform(b2TimeOfImpact.s_xfB, x2);
- var f2 = b2TimeOfImpact.s_fcn.Evaluate(b2TimeOfImpact.s_xfA, b2TimeOfImpact.s_xfB);
- if (f2 >= target) {
- alpha = 1.0;
- break;
- }
- var rootIterCount = 0;
- for (;;) {
- var x = 0;
- if (rootIterCount & 1) {
- x = x1 + (target - f1) * (x2 - x1) / (f2 - f1);
- }
- else {
- x = 0.5 * (x1 + x2);
- }
- sweepA.GetTransform(b2TimeOfImpact.s_xfA, x);
- sweepB.GetTransform(b2TimeOfImpact.s_xfB, x);
- var f = b2TimeOfImpact.s_fcn.Evaluate(b2TimeOfImpact.s_xfA, b2TimeOfImpact.s_xfB);
- if (b2Math.Abs(f - target) < 0.025 * tolerance) {
- newAlpha = x;
- break;
- }
- if (f > target) {
- x1 = x;
- f1 = f;
- }
- else {
- x2 = x;
- f2 = f;
- }++rootIterCount;
- ++b2TimeOfImpact.b2_toiRootIters;
- if (rootIterCount == 50) {
- break;
- }
- }
- b2TimeOfImpact.b2_toiMaxRootIters = b2Math.Max(b2TimeOfImpact.b2_toiMaxRootIters, rootIterCount);
- }
- if (newAlpha < (1.0 + 100.0 * Number.MIN_VALUE) * alpha) {
- break;
- }
- alpha = newAlpha;
- iter++;
- ++b2TimeOfImpact.b2_toiIters;
- if (iter == k_maxIterations) {
- break;
- }
- }
- b2TimeOfImpact.b2_toiMaxIters = b2Math.Max(b2TimeOfImpact.b2_toiMaxIters, iter);
- return alpha;
- }
- Box2D.postDefs.push(function () {
- Box2D.Collision.b2TimeOfImpact.b2_toiCalls = 0;
- Box2D.Collision.b2TimeOfImpact.b2_toiIters = 0;
- Box2D.Collision.b2TimeOfImpact.b2_toiMaxIters = 0;
- Box2D.Collision.b2TimeOfImpact.b2_toiRootIters = 0;
- Box2D.Collision.b2TimeOfImpact.b2_toiMaxRootIters = 0;
- Box2D.Collision.b2TimeOfImpact.s_cache = new b2SimplexCache();
- Box2D.Collision.b2TimeOfImpact.s_distanceInput = new b2DistanceInput();
- Box2D.Collision.b2TimeOfImpact.s_xfA = new b2Transform();
- Box2D.Collision.b2TimeOfImpact.s_xfB = new b2Transform();
- Box2D.Collision.b2TimeOfImpact.s_fcn = new b2SeparationFunction();
- Box2D.Collision.b2TimeOfImpact.s_distanceOutput = new b2DistanceOutput();
- });
- b2TOIInput.b2TOIInput = function () {
- this.proxyA = new b2DistanceProxy();
- this.proxyB = new b2DistanceProxy();
- this.sweepA = new b2Sweep();
- this.sweepB = new b2Sweep();
- };
- b2WorldManifold.b2WorldManifold = function () {
- this.m_normal = new b2Vec2();
- };
- b2WorldManifold.prototype.b2WorldManifold = function () {
- this.m_points = new Vector(b2Settings.b2_maxManifoldPoints);
- for (var i = 0; i < b2Settings.b2_maxManifoldPoints; i++) {
- this.m_points[i] = new b2Vec2();
- }
- }
- b2WorldManifold.prototype.Initialize = function (manifold, xfA, radiusA, xfB, radiusB) {
- if (radiusA === undefined) radiusA = 0;
- if (radiusB === undefined) radiusB = 0;
- if (manifold.m_pointCount == 0) {
- return;
- }
- var i = 0;
- var tVec;
- var tMat;
- var normalX = 0;
- var normalY = 0;
- var planePointX = 0;
- var planePointY = 0;
- var clipPointX = 0;
- var clipPointY = 0;
- switch (manifold.m_type) {
- case b2Manifold.e_circles:
- {
- tMat = xfA.R;
- tVec = manifold.m_localPoint;
- var pointAX = xfA.position.x + tMat.col1.x * tVec.x + tMat.col2.x * tVec.y;
- var pointAY = xfA.position.y + tMat.col1.y * tVec.x + tMat.col2.y * tVec.y;
- tMat = xfB.R;
- tVec = manifold.m_points[0].m_localPoint;
- var pointBX = xfB.position.x + tMat.col1.x * tVec.x + tMat.col2.x * tVec.y;
- var pointBY = xfB.position.y + tMat.col1.y * tVec.x + tMat.col2.y * tVec.y;
- var dX = pointBX - pointAX;
- var dY = pointBY - pointAY;
- var d2 = dX * dX + dY * dY;
- if (d2 > Number.MIN_VALUE * Number.MIN_VALUE) {
- var d = Math.sqrt(d2);
- this.m_normal.x = dX / d;
- this.m_normal.y = dY / d;
- }
- else {
- this.m_normal.x = 1;
- this.m_normal.y = 0;
- }
- var cAX = pointAX + radiusA * this.m_normal.x;
- var cAY = pointAY + radiusA * this.m_normal.y;
- var cBX = pointBX - radiusB * this.m_normal.x;
- var cBY = pointBY - radiusB * this.m_normal.y;
- this.m_points[0].x = 0.5 * (cAX + cBX);
- this.m_points[0].y = 0.5 * (cAY + cBY);
- }
- break;
- case b2Manifold.e_faceA:
- {
- tMat = xfA.R;
- tVec = manifold.m_localPlaneNormal;
- normalX = tMat.col1.x * tVec.x + tMat.col2.x * tVec.y;
- normalY = tMat.col1.y * tVec.x + tMat.col2.y * tVec.y;
- tMat = xfA.R;
- tVec = manifold.m_localPoint;
- planePointX = xfA.position.x + tMat.col1.x * tVec.x + tMat.col2.x * tVec.y;
- planePointY = xfA.position.y + tMat.col1.y * tVec.x + tMat.col2.y * tVec.y;
- this.m_normal.x = normalX;
- this.m_normal.y = normalY;
- for (i = 0;
- i < manifold.m_pointCount; i++) {
- tMat = xfB.R;
- tVec = manifold.m_points[i].m_localPoint;
- clipPointX = xfB.position.x + tMat.col1.x * tVec.x + tMat.col2.x * tVec.y;
- clipPointY = xfB.position.y + tMat.col1.y * tVec.x + tMat.col2.y * tVec.y;
- this.m_points[i].x = clipPointX + 0.5 * (radiusA - (clipPointX - planePointX) * normalX - (clipPointY - planePointY) * normalY - radiusB) * normalX;
- this.m_points[i].y = clipPointY + 0.5 * (radiusA - (clipPointX - planePointX) * normalX - (clipPointY - planePointY) * normalY - radiusB) * normalY;
- }
- }
- break;
- case b2Manifold.e_faceB:
- {
- tMat = xfB.R;
- tVec = manifold.m_localPlaneNormal;
- normalX = tMat.col1.x * tVec.x + tMat.col2.x * tVec.y;
- normalY = tMat.col1.y * tVec.x + tMat.col2.y * tVec.y;
- tMat = xfB.R;
- tVec = manifold.m_localPoint;
- planePointX = xfB.position.x + tMat.col1.x * tVec.x + tMat.col2.x * tVec.y;
- planePointY = xfB.position.y + tMat.col1.y * tVec.x + tMat.col2.y * tVec.y;
- this.m_normal.x = (-normalX);
- this.m_normal.y = (-normalY);
- for (i = 0;
- i < manifold.m_pointCount; i++) {
- tMat = xfA.R;
- tVec = manifold.m_points[i].m_localPoint;
- clipPointX = xfA.position.x + tMat.col1.x * tVec.x + tMat.col2.x * tVec.y;
- clipPointY = xfA.position.y + tMat.col1.y * tVec.x + tMat.col2.y * tVec.y;
- this.m_points[i].x = clipPointX + 0.5 * (radiusB - (clipPointX - planePointX) * normalX - (clipPointY - planePointY) * normalY - radiusA) * normalX;
- this.m_points[i].y = clipPointY + 0.5 * (radiusB - (clipPointX - planePointX) * normalX - (clipPointY - planePointY) * normalY - radiusA) * normalY;
- }
- }
- break;
- }
- }
- ClipVertex.ClipVertex = function () {
- this.v = new b2Vec2();
- this.id = new b2ContactID();
- };
- ClipVertex.prototype.Set = function (other) {
- this.v.SetV(other.v);
- this.id.Set(other.id);
- }
- Features.Features = function () {};
- Object.defineProperty(Features.prototype, 'referenceEdge', {
- enumerable: false,
- configurable: true,
- get: function () {
- return this._referenceEdge;
- }
- });
- Object.defineProperty(Features.prototype, 'referenceEdge', {
- enumerable: false,
- configurable: true,
- set: function (value) {
- if (value === undefined) value = 0;
- this._referenceEdge = value;
- this._m_id._key = (this._m_id._key & 0xffffff00) | (this._referenceEdge & 0x000000ff);
- }
- });
- Object.defineProperty(Features.prototype, 'incidentEdge', {
- enumerable: false,
- configurable: true,
- get: function () {
- return this._incidentEdge;
- }
- });
- Object.defineProperty(Features.prototype, 'incidentEdge', {
- enumerable: false,
- configurable: true,
- set: function (value) {
- if (value === undefined) value = 0;
- this._incidentEdge = value;
- this._m_id._key = (this._m_id._key & 0xffff00ff) | ((this._incidentEdge << 8) & 0x0000ff00);
- }
- });
- Object.defineProperty(Features.prototype, 'incidentVertex', {
- enumerable: false,
- configurable: true,
- get: function () {
- return this._incidentVertex;
- }
- });
- Object.defineProperty(Features.prototype, 'incidentVertex', {
- enumerable: false,
- configurable: true,
- set: function (value) {
- if (value === undefined) value = 0;
- this._incidentVertex = value;
- this._m_id._key = (this._m_id._key & 0xff00ffff) | ((this._incidentVertex << 16) & 0x00ff0000);
- }
- });
- Object.defineProperty(Features.prototype, 'flip', {
- enumerable: false,
- configurable: true,
- get: function () {
- return this._flip;
- }
- });
- Object.defineProperty(Features.prototype, 'flip', {
- enumerable: false,
- configurable: true,
- set: function (value) {
- if (value === undefined) value = 0;
- this._flip = value;
- this._m_id._key = (this._m_id._key & 0x00ffffff) | ((this._flip << 24) & 0xff000000);
- }
- });
-})();
-(function () {
- var b2Color = Box2D.Common.b2Color,
- b2internal = Box2D.Common.b2internal,
- b2Settings = Box2D.Common.b2Settings,
- b2CircleShape = Box2D.Collision.Shapes.b2CircleShape,
- b2EdgeChainDef = Box2D.Collision.Shapes.b2EdgeChainDef,
- b2EdgeShape = Box2D.Collision.Shapes.b2EdgeShape,
- b2MassData = Box2D.Collision.Shapes.b2MassData,
- b2PolygonShape = Box2D.Collision.Shapes.b2PolygonShape,
- b2Shape = Box2D.Collision.Shapes.b2Shape,
- b2Mat22 = Box2D.Common.Math.b2Mat22,
- b2Mat33 = Box2D.Common.Math.b2Mat33,
- b2Math = Box2D.Common.Math.b2Math,
- b2Sweep = Box2D.Common.Math.b2Sweep,
- b2Transform = Box2D.Common.Math.b2Transform,
- b2Vec2 = Box2D.Common.Math.b2Vec2,
- b2Vec3 = Box2D.Common.Math.b2Vec3,
- b2Body = Box2D.Dynamics.b2Body,
- b2BodyDef = Box2D.Dynamics.b2BodyDef,
- b2ContactFilter = Box2D.Dynamics.b2ContactFilter,
- b2ContactImpulse = Box2D.Dynamics.b2ContactImpulse,
- b2ContactListener = Box2D.Dynamics.b2ContactListener,
- b2ContactManager = Box2D.Dynamics.b2ContactManager,
- b2DebugDraw = Box2D.Dynamics.b2DebugDraw,
- b2DestructionListener = Box2D.Dynamics.b2DestructionListener,
- b2FilterData = Box2D.Dynamics.b2FilterData,
- b2Fixture = Box2D.Dynamics.b2Fixture,
- b2FixtureDef = Box2D.Dynamics.b2FixtureDef,
- b2Island = Box2D.Dynamics.b2Island,
- b2TimeStep = Box2D.Dynamics.b2TimeStep,
- b2World = Box2D.Dynamics.b2World,
- b2AABB = Box2D.Collision.b2AABB,
- b2Bound = Box2D.Collision.b2Bound,
- b2BoundValues = Box2D.Collision.b2BoundValues,
- b2Collision = Box2D.Collision.b2Collision,
- b2ContactID = Box2D.Collision.b2ContactID,
- b2ContactPoint = Box2D.Collision.b2ContactPoint,
- b2Distance = Box2D.Collision.b2Distance,
- b2DistanceInput = Box2D.Collision.b2DistanceInput,
- b2DistanceOutput = Box2D.Collision.b2DistanceOutput,
- b2DistanceProxy = Box2D.Collision.b2DistanceProxy,
- b2DynamicTree = Box2D.Collision.b2DynamicTree,
- b2DynamicTreeBroadPhase = Box2D.Collision.b2DynamicTreeBroadPhase,
- b2DynamicTreeNode = Box2D.Collision.b2DynamicTreeNode,
- b2DynamicTreePair = Box2D.Collision.b2DynamicTreePair,
- b2Manifold = Box2D.Collision.b2Manifold,
- b2ManifoldPoint = Box2D.Collision.b2ManifoldPoint,
- b2Point = Box2D.Collision.b2Point,
- b2RayCastInput = Box2D.Collision.b2RayCastInput,
- b2RayCastOutput = Box2D.Collision.b2RayCastOutput,
- b2Segment = Box2D.Collision.b2Segment,
- b2SeparationFunction = Box2D.Collision.b2SeparationFunction,
- b2Simplex = Box2D.Collision.b2Simplex,
- b2SimplexCache = Box2D.Collision.b2SimplexCache,
- b2SimplexVertex = Box2D.Collision.b2SimplexVertex,
- b2TimeOfImpact = Box2D.Collision.b2TimeOfImpact,
- b2TOIInput = Box2D.Collision.b2TOIInput,
- b2WorldManifold = Box2D.Collision.b2WorldManifold,
- ClipVertex = Box2D.Collision.ClipVertex,
- Features = Box2D.Collision.Features,
- IBroadPhase = Box2D.Collision.IBroadPhase;
-
- Box2D.inherit(b2CircleShape, Box2D.Collision.Shapes.b2Shape);
- b2CircleShape.prototype.__super = Box2D.Collision.Shapes.b2Shape.prototype;
- b2CircleShape.b2CircleShape = function () {
- Box2D.Collision.Shapes.b2Shape.b2Shape.apply(this, arguments);
- this.m_p = new b2Vec2();
- };
- b2CircleShape.prototype.Copy = function () {
- var s = new b2CircleShape();
- s.Set(this);
- return s;
- }
- b2CircleShape.prototype.Set = function (other) {
- this.__super.Set.call(this, other);
- if (Box2D.is(other, b2CircleShape)) {
- var other2 = (other instanceof b2CircleShape ? other : null);
- this.m_p.SetV(other2.m_p);
- }
- }
- b2CircleShape.prototype.TestPoint = function (transform, p) {
- var tMat = transform.R;
- var dX = transform.position.x + (tMat.col1.x * this.m_p.x + tMat.col2.x * this.m_p.y);
- var dY = transform.position.y + (tMat.col1.y * this.m_p.x + tMat.col2.y * this.m_p.y);
- dX = p.x - dX;
- dY = p.y - dY;
- return (dX * dX + dY * dY) <= this.m_radius * this.m_radius;
- }
- b2CircleShape.prototype.RayCast = function (output, input, transform) {
- var tMat = transform.R;
- var positionX = transform.position.x + (tMat.col1.x * this.m_p.x + tMat.col2.x * this.m_p.y);
- var positionY = transform.position.y + (tMat.col1.y * this.m_p.x + tMat.col2.y * this.m_p.y);
- var sX = input.p1.x - positionX;
- var sY = input.p1.y - positionY;
- var b = (sX * sX + sY * sY) - this.m_radius * this.m_radius;
- var rX = input.p2.x - input.p1.x;
- var rY = input.p2.y - input.p1.y;
- var c = (sX * rX + sY * rY);
- var rr = (rX * rX + rY * rY);
- var sigma = c * c - rr * b;
- if (sigma < 0.0 || rr < Number.MIN_VALUE) {
- return false;
- }
- var a = (-(c + Math.sqrt(sigma)));
- if (0.0 <= a && a <= input.maxFraction * rr) {
- a /= rr;
- output.fraction = a;
- output.normal.x = sX + a * rX;
- output.normal.y = sY + a * rY;
- output.normal.Normalize();
- return true;
- }
- return false;
- }
- b2CircleShape.prototype.ComputeAABB = function (aabb, transform) {
- var tMat = transform.R;
- var pX = transform.position.x + (tMat.col1.x * this.m_p.x + tMat.col2.x * this.m_p.y);
- var pY = transform.position.y + (tMat.col1.y * this.m_p.x + tMat.col2.y * this.m_p.y);
- aabb.lowerBound.Set(pX - this.m_radius, pY - this.m_radius);
- aabb.upperBound.Set(pX + this.m_radius, pY + this.m_radius);
- }
- b2CircleShape.prototype.ComputeMass = function (massData, density) {
- if (density === undefined) density = 0;
- massData.mass = density * b2Settings.b2_pi * this.m_radius * this.m_radius;
- massData.center.SetV(this.m_p);
- massData.I = massData.mass * (0.5 * this.m_radius * this.m_radius + (this.m_p.x * this.m_p.x + this.m_p.y * this.m_p.y));
- }
- b2CircleShape.prototype.ComputeSubmergedArea = function (normal, offset, xf, c) {
- if (offset === undefined) offset = 0;
- var p = b2Math.MulX(xf, this.m_p);
- var l = (-(b2Math.Dot(normal, p) - offset));
- if (l < (-this.m_radius) + Number.MIN_VALUE) {
- return 0;
- }
- if (l > this.m_radius) {
- c.SetV(p);
- return Math.PI * this.m_radius * this.m_radius;
- }
- var r2 = this.m_radius * this.m_radius;
- var l2 = l * l;
- var area = r2 * (Math.asin(l / this.m_radius) + Math.PI / 2) + l * Math.sqrt(r2 - l2);
- var com = (-2 / 3 * Math.pow(r2 - l2, 1.5) / area);
- c.x = p.x + normal.x * com;
- c.y = p.y + normal.y * com;
- return area;
- }
- b2CircleShape.prototype.GetLocalPosition = function () {
- return this.m_p;
- }
- b2CircleShape.prototype.SetLocalPosition = function (position) {
- this.m_p.SetV(position);
- }
- b2CircleShape.prototype.GetRadius = function () {
- return this.m_radius;
- }
- b2CircleShape.prototype.SetRadius = function (radius) {
- if (radius === undefined) radius = 0;
- this.m_radius = radius;
- }
- b2CircleShape.prototype.b2CircleShape = function (radius) {
- if (radius === undefined) radius = 0;
- this.__super.b2Shape.call(this);
- this.m_type = b2Shape.e_circleShape;
- this.m_radius = radius;
- }
- b2EdgeChainDef.b2EdgeChainDef = function () {};
- b2EdgeChainDef.prototype.b2EdgeChainDef = function () {
- this.vertexCount = 0;
- this.isALoop = true;
- this.vertices = [];
- }
- Box2D.inherit(b2EdgeShape, Box2D.Collision.Shapes.b2Shape);
- b2EdgeShape.prototype.__super = Box2D.Collision.Shapes.b2Shape.prototype;
- b2EdgeShape.b2EdgeShape = function () {
- Box2D.Collision.Shapes.b2Shape.b2Shape.apply(this, arguments);
- this.s_supportVec = new b2Vec2();
- this.m_v1 = new b2Vec2();
- this.m_v2 = new b2Vec2();
- this.m_coreV1 = new b2Vec2();
- this.m_coreV2 = new b2Vec2();
- this.m_normal = new b2Vec2();
- this.m_direction = new b2Vec2();
- this.m_cornerDir1 = new b2Vec2();
- this.m_cornerDir2 = new b2Vec2();
- };
- b2EdgeShape.prototype.TestPoint = function (transform, p) {
- return false;
- }
- b2EdgeShape.prototype.RayCast = function (output, input, transform) {
- var tMat;
- var rX = input.p2.x - input.p1.x;
- var rY = input.p2.y - input.p1.y;
- tMat = transform.R;
- var v1X = transform.position.x + (tMat.col1.x * this.m_v1.x + tMat.col2.x * this.m_v1.y);
- var v1Y = transform.position.y + (tMat.col1.y * this.m_v1.x + tMat.col2.y * this.m_v1.y);
- var nX = transform.position.y + (tMat.col1.y * this.m_v2.x + tMat.col2.y * this.m_v2.y) - v1Y;
- var nY = (-(transform.position.x + (tMat.col1.x * this.m_v2.x + tMat.col2.x * this.m_v2.y) - v1X));
- var k_slop = 100.0 * Number.MIN_VALUE;
- var denom = (-(rX * nX + rY * nY));
- if (denom > k_slop) {
- var bX = input.p1.x - v1X;
- var bY = input.p1.y - v1Y;
- var a = (bX * nX + bY * nY);
- if (0.0 <= a && a <= input.maxFraction * denom) {
- var mu2 = (-rX * bY) + rY * bX;
- if ((-k_slop * denom) <= mu2 && mu2 <= denom * (1.0 + k_slop)) {
- a /= denom;
- output.fraction = a;
- var nLen = Math.sqrt(nX * nX + nY * nY);
- output.normal.x = nX / nLen;
- output.normal.y = nY / nLen;
- return true;
- }
- }
- }
- return false;
- }
- b2EdgeShape.prototype.ComputeAABB = function (aabb, transform) {
- var tMat = transform.R;
- var v1X = transform.position.x + (tMat.col1.x * this.m_v1.x + tMat.col2.x * this.m_v1.y);
- var v1Y = transform.position.y + (tMat.col1.y * this.m_v1.x + tMat.col2.y * this.m_v1.y);
- var v2X = transform.position.x + (tMat.col1.x * this.m_v2.x + tMat.col2.x * this.m_v2.y);
- var v2Y = transform.position.y + (tMat.col1.y * this.m_v2.x + tMat.col2.y * this.m_v2.y);
- if (v1X < v2X) {
- aabb.lowerBound.x = v1X;
- aabb.upperBound.x = v2X;
- }
- else {
- aabb.lowerBound.x = v2X;
- aabb.upperBound.x = v1X;
- }
- if (v1Y < v2Y) {
- aabb.lowerBound.y = v1Y;
- aabb.upperBound.y = v2Y;
- }
- else {
- aabb.lowerBound.y = v2Y;
- aabb.upperBound.y = v1Y;
- }
- }
- b2EdgeShape.prototype.ComputeMass = function (massData, density) {
- if (density === undefined) density = 0;
- massData.mass = 0;
- massData.center.SetV(this.m_v1);
- massData.I = 0;
- }
- b2EdgeShape.prototype.ComputeSubmergedArea = function (normal, offset, xf, c) {
- if (offset === undefined) offset = 0;
- var v0 = new b2Vec2(normal.x * offset, normal.y * offset);
- var v1 = b2Math.MulX(xf, this.m_v1);
- var v2 = b2Math.MulX(xf, this.m_v2);
- var d1 = b2Math.Dot(normal, v1) - offset;
- var d2 = b2Math.Dot(normal, v2) - offset;
- if (d1 > 0) {
- if (d2 > 0) {
- return 0;
- }
- else {
- v1.x = (-d2 / (d1 - d2) * v1.x) + d1 / (d1 - d2) * v2.x;
- v1.y = (-d2 / (d1 - d2) * v1.y) + d1 / (d1 - d2) * v2.y;
- }
- }
- else {
- if (d2 > 0) {
- v2.x = (-d2 / (d1 - d2) * v1.x) + d1 / (d1 - d2) * v2.x;
- v2.y = (-d2 / (d1 - d2) * v1.y) + d1 / (d1 - d2) * v2.y;
- }
- else {}
- }
- c.x = (v0.x + v1.x + v2.x) / 3;
- c.y = (v0.y + v1.y + v2.y) / 3;
- return 0.5 * ((v1.x - v0.x) * (v2.y - v0.y) - (v1.y - v0.y) * (v2.x - v0.x));
- }
- b2EdgeShape.prototype.GetLength = function () {
- return this.m_length;
- }
- b2EdgeShape.prototype.GetVertex1 = function () {
- return this.m_v1;
- }
- b2EdgeShape.prototype.GetVertex2 = function () {
- return this.m_v2;
- }
- b2EdgeShape.prototype.GetCoreVertex1 = function () {
- return this.m_coreV1;
- }
- b2EdgeShape.prototype.GetCoreVertex2 = function () {
- return this.m_coreV2;
- }
- b2EdgeShape.prototype.GetNormalVector = function () {
- return this.m_normal;
- }
- b2EdgeShape.prototype.GetDirectionVector = function () {
- return this.m_direction;
- }
- b2EdgeShape.prototype.GetCorner1Vector = function () {
- return this.m_cornerDir1;
- }
- b2EdgeShape.prototype.GetCorner2Vector = function () {
- return this.m_cornerDir2;
- }
- b2EdgeShape.prototype.Corner1IsConvex = function () {
- return this.m_cornerConvex1;
- }
- b2EdgeShape.prototype.Corner2IsConvex = function () {
- return this.m_cornerConvex2;
- }
- b2EdgeShape.prototype.GetFirstVertex = function (xf) {
- var tMat = xf.R;
- return new b2Vec2(xf.position.x + (tMat.col1.x * this.m_coreV1.x + tMat.col2.x * this.m_coreV1.y), xf.position.y + (tMat.col1.y * this.m_coreV1.x + tMat.col2.y * this.m_coreV1.y));
- }
- b2EdgeShape.prototype.GetNextEdge = function () {
- return this.m_nextEdge;
- }
- b2EdgeShape.prototype.GetPrevEdge = function () {
- return this.m_prevEdge;
- }
- b2EdgeShape.prototype.Support = function (xf, dX, dY) {
- if (dX === undefined) dX = 0;
- if (dY === undefined) dY = 0;
- var tMat = xf.R;
- var v1X = xf.position.x + (tMat.col1.x * this.m_coreV1.x + tMat.col2.x * this.m_coreV1.y);
- var v1Y = xf.position.y + (tMat.col1.y * this.m_coreV1.x + tMat.col2.y * this.m_coreV1.y);
- var v2X = xf.position.x + (tMat.col1.x * this.m_coreV2.x + tMat.col2.x * this.m_coreV2.y);
- var v2Y = xf.position.y + (tMat.col1.y * this.m_coreV2.x + tMat.col2.y * this.m_coreV2.y);
- if ((v1X * dX + v1Y * dY) > (v2X * dX + v2Y * dY)) {
- this.s_supportVec.x = v1X;
- this.s_supportVec.y = v1Y;
- }
- else {
- this.s_supportVec.x = v2X;
- this.s_supportVec.y = v2Y;
- }
- return this.s_supportVec;
- }
- b2EdgeShape.prototype.b2EdgeShape = function (v1, v2) {
- this.__super.b2Shape.call(this);
- this.m_type = b2Shape.e_edgeShape;
- this.m_prevEdge = null;
- this.m_nextEdge = null;
- this.m_v1 = v1;
- this.m_v2 = v2;
- this.m_direction.Set(this.m_v2.x - this.m_v1.x, this.m_v2.y - this.m_v1.y);
- this.m_length = this.m_direction.Normalize();
- this.m_normal.Set(this.m_direction.y, (-this.m_direction.x));
- this.m_coreV1.Set((-b2Settings.b2_toiSlop * (this.m_normal.x - this.m_direction.x)) + this.m_v1.x, (-b2Settings.b2_toiSlop * (this.m_normal.y - this.m_direction.y)) + this.m_v1.y);
- this.m_coreV2.Set((-b2Settings.b2_toiSlop * (this.m_normal.x + this.m_direction.x)) + this.m_v2.x, (-b2Settings.b2_toiSlop * (this.m_normal.y + this.m_direction.y)) + this.m_v2.y);
- this.m_cornerDir1 = this.m_normal;
- this.m_cornerDir2.Set((-this.m_normal.x), (-this.m_normal.y));
- }
- b2EdgeShape.prototype.SetPrevEdge = function (edge, core, cornerDir, convex) {
- this.m_prevEdge = edge;
- this.m_coreV1 = core;
- this.m_cornerDir1 = cornerDir;
- this.m_cornerConvex1 = convex;
- }
- b2EdgeShape.prototype.SetNextEdge = function (edge, core, cornerDir, convex) {
- this.m_nextEdge = edge;
- this.m_coreV2 = core;
- this.m_cornerDir2 = cornerDir;
- this.m_cornerConvex2 = convex;
- }
- b2MassData.b2MassData = function () {
- this.mass = 0.0;
- this.center = new b2Vec2(0, 0);
- this.I = 0.0;
- };
- Box2D.inherit(b2PolygonShape, Box2D.Collision.Shapes.b2Shape);
- b2PolygonShape.prototype.__super = Box2D.Collision.Shapes.b2Shape.prototype;
- b2PolygonShape.b2PolygonShape = function () {
- Box2D.Collision.Shapes.b2Shape.b2Shape.apply(this, arguments);
- };
- b2PolygonShape.prototype.Copy = function () {
- var s = new b2PolygonShape();
- s.Set(this);
- return s;
- }
- b2PolygonShape.prototype.Set = function (other) {
- this.__super.Set.call(this, other);
- if (Box2D.is(other, b2PolygonShape)) {
- var other2 = (other instanceof b2PolygonShape ? other : null);
- this.m_centroid.SetV(other2.m_centroid);
- this.m_vertexCount = other2.m_vertexCount;
- this.Reserve(this.m_vertexCount);
- for (var i = 0; i < this.m_vertexCount; i++) {
- this.m_vertices[i].SetV(other2.m_vertices[i]);
- this.m_normals[i].SetV(other2.m_normals[i]);
- }
- }
- }
- b2PolygonShape.prototype.SetAsArray = function (vertices, vertexCount) {
- if (vertexCount === undefined) vertexCount = 0;
- var v = new Vector();
- var i = 0,
- tVec;
- for (i = 0;
- i < vertices.length; ++i) {
- tVec = vertices[i];
- v.push(tVec);
- }
- this.SetAsVector(v, vertexCount);
- }
- b2PolygonShape.AsArray = function (vertices, vertexCount) {
- if (vertexCount === undefined) vertexCount = 0;
- var polygonShape = new b2PolygonShape();
- polygonShape.SetAsArray(vertices, vertexCount);
- return polygonShape;
- }
- b2PolygonShape.prototype.SetAsVector = function (vertices, vertexCount) {
- if (vertexCount === undefined) vertexCount = 0;
- if (vertexCount == 0) vertexCount = vertices.length;
- b2Settings.b2Assert(2 <= vertexCount);
- this.m_vertexCount = vertexCount;
- this.Reserve(vertexCount);
- var i = 0;
- for (i = 0;
- i < this.m_vertexCount; i++) {
- this.m_vertices[i].SetV(vertices[i]);
- }
- for (i = 0;
- i < this.m_vertexCount; ++i) {
- var i1 = parseInt(i);
- var i2 = parseInt(i + 1 < this.m_vertexCount ? i + 1 : 0);
- var edge = b2Math.SubtractVV(this.m_vertices[i2], this.m_vertices[i1]);
- b2Settings.b2Assert(edge.LengthSquared() > Number.MIN_VALUE);
- this.m_normals[i].SetV(b2Math.CrossVF(edge, 1.0));
- this.m_normals[i].Normalize();
- }
- this.m_centroid = b2PolygonShape.ComputeCentroid(this.m_vertices, this.m_vertexCount);
- }
- b2PolygonShape.AsVector = function (vertices, vertexCount) {
- if (vertexCount === undefined) vertexCount = 0;
- var polygonShape = new b2PolygonShape();
- polygonShape.SetAsVector(vertices, vertexCount);
- return polygonShape;
- }
- b2PolygonShape.prototype.SetAsBox = function (hx, hy) {
- if (hx === undefined) hx = 0;
- if (hy === undefined) hy = 0;
- this.m_vertexCount = 4;
- this.Reserve(4);
- this.m_vertices[0].Set((-hx), (-hy));
- this.m_vertices[1].Set(hx, (-hy));
- this.m_vertices[2].Set(hx, hy);
- this.m_vertices[3].Set((-hx), hy);
- this.m_normals[0].Set(0.0, (-1.0));
- this.m_normals[1].Set(1.0, 0.0);
- this.m_normals[2].Set(0.0, 1.0);
- this.m_normals[3].Set((-1.0), 0.0);
- this.m_centroid.SetZero();
- }
- b2PolygonShape.AsBox = function (hx, hy) {
- if (hx === undefined) hx = 0;
- if (hy === undefined) hy = 0;
- var polygonShape = new b2PolygonShape();
- polygonShape.SetAsBox(hx, hy);
- return polygonShape;
- }
- b2PolygonShape.prototype.SetAsOrientedBox = function (hx, hy, center, angle) {
- if (hx === undefined) hx = 0;
- if (hy === undefined) hy = 0;
- if (center === undefined) center = null;
- if (angle === undefined) angle = 0.0;
- this.m_vertexCount = 4;
- this.Reserve(4);
- this.m_vertices[0].Set((-hx), (-hy));
- this.m_vertices[1].Set(hx, (-hy));
- this.m_vertices[2].Set(hx, hy);
- this.m_vertices[3].Set((-hx), hy);
- this.m_normals[0].Set(0.0, (-1.0));
- this.m_normals[1].Set(1.0, 0.0);
- this.m_normals[2].Set(0.0, 1.0);
- this.m_normals[3].Set((-1.0), 0.0);
- this.m_centroid = center;
- var xf = new b2Transform();
- xf.position = center;
- xf.R.Set(angle);
- for (var i = 0; i < this.m_vertexCount; ++i) {
- this.m_vertices[i] = b2Math.MulX(xf, this.m_vertices[i]);
- this.m_normals[i] = b2Math.MulMV(xf.R, this.m_normals[i]);
- }
- }
- b2PolygonShape.AsOrientedBox = function (hx, hy, center, angle) {
- if (hx === undefined) hx = 0;
- if (hy === undefined) hy = 0;
- if (center === undefined) center = null;
- if (angle === undefined) angle = 0.0;
- var polygonShape = new b2PolygonShape();
- polygonShape.SetAsOrientedBox(hx, hy, center, angle);
- return polygonShape;
- }
- b2PolygonShape.prototype.SetAsEdge = function (v1, v2) {
- this.m_vertexCount = 2;
- this.Reserve(2);
- this.m_vertices[0].SetV(v1);
- this.m_vertices[1].SetV(v2);
- this.m_centroid.x = 0.5 * (v1.x + v2.x);
- this.m_centroid.y = 0.5 * (v1.y + v2.y);
- this.m_normals[0] = b2Math.CrossVF(b2Math.SubtractVV(v2, v1), 1.0);
- this.m_normals[0].Normalize();
- this.m_normals[1].x = (-this.m_normals[0].x);
- this.m_normals[1].y = (-this.m_normals[0].y);
- }
- b2PolygonShape.AsEdge = function (v1, v2) {
- var polygonShape = new b2PolygonShape();
- polygonShape.SetAsEdge(v1, v2);
- return polygonShape;
- }
- b2PolygonShape.prototype.TestPoint = function (xf, p) {
- var tVec;
- var tMat = xf.R;
- var tX = p.x - xf.position.x;
- var tY = p.y - xf.position.y;
- var pLocalX = (tX * tMat.col1.x + tY * tMat.col1.y);
- var pLocalY = (tX * tMat.col2.x + tY * tMat.col2.y);
- for (var i = 0; i < this.m_vertexCount; ++i) {
- tVec = this.m_vertices[i];
- tX = pLocalX - tVec.x;
- tY = pLocalY - tVec.y;
- tVec = this.m_normals[i];
- var dot = (tVec.x * tX + tVec.y * tY);
- if (dot > 0.0) {
- return false;
- }
- }
- return true;
- }
- b2PolygonShape.prototype.RayCast = function (output, input, transform) {
- var lower = 0.0;
- var upper = input.maxFraction;
- var tX = 0;
- var tY = 0;
- var tMat;
- var tVec;
- tX = input.p1.x - transform.position.x;
- tY = input.p1.y - transform.position.y;
- tMat = transform.R;
- var p1X = (tX * tMat.col1.x + tY * tMat.col1.y);
- var p1Y = (tX * tMat.col2.x + tY * tMat.col2.y);
- tX = input.p2.x - transform.position.x;
- tY = input.p2.y - transform.position.y;
- tMat = transform.R;
- var p2X = (tX * tMat.col1.x + tY * tMat.col1.y);
- var p2Y = (tX * tMat.col2.x + tY * tMat.col2.y);
- var dX = p2X - p1X;
- var dY = p2Y - p1Y;
- var index = parseInt((-1));
- for (var i = 0; i < this.m_vertexCount; ++i) {
- tVec = this.m_vertices[i];
- tX = tVec.x - p1X;
- tY = tVec.y - p1Y;
- tVec = this.m_normals[i];
- var numerator = (tVec.x * tX + tVec.y * tY);
- var denominator = (tVec.x * dX + tVec.y * dY);
- if (denominator == 0.0) {
- if (numerator < 0.0) {
- return false;
- }
- }
- else {
- if (denominator < 0.0 && numerator < lower * denominator) {
- lower = numerator / denominator;
- index = i;
- }
- else if (denominator > 0.0 && numerator < upper * denominator) {
- upper = numerator / denominator;
- }
- }
- if (upper < lower - Number.MIN_VALUE) {
- return false;
- }
- }
- if (index >= 0) {
- output.fraction = lower;
- tMat = transform.R;
- tVec = this.m_normals[index];
- output.normal.x = (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y);
- output.normal.y = (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y);
- return true;
- }
- return false;
- }
- b2PolygonShape.prototype.ComputeAABB = function (aabb, xf) {
- var tMat = xf.R;
- var tVec = this.m_vertices[0];
- var lowerX = xf.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y);
- var lowerY = xf.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y);
- var upperX = lowerX;
- var upperY = lowerY;
- for (var i = 1; i < this.m_vertexCount; ++i) {
- tVec = this.m_vertices[i];
- var vX = xf.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y);
- var vY = xf.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y);
- lowerX = lowerX < vX ? lowerX : vX;
- lowerY = lowerY < vY ? lowerY : vY;
- upperX = upperX > vX ? upperX : vX;
- upperY = upperY > vY ? upperY : vY;
- }
- aabb.lowerBound.x = lowerX - this.m_radius;
- aabb.lowerBound.y = lowerY - this.m_radius;
- aabb.upperBound.x = upperX + this.m_radius;
- aabb.upperBound.y = upperY + this.m_radius;
- }
- b2PolygonShape.prototype.ComputeMass = function (massData, density) {
- if (density === undefined) density = 0;
- if (this.m_vertexCount == 2) {
- massData.center.x = 0.5 * (this.m_vertices[0].x + this.m_vertices[1].x);
- massData.center.y = 0.5 * (this.m_vertices[0].y + this.m_vertices[1].y);
- massData.mass = 0.0;
- massData.I = 0.0;
- return;
- }
- var centerX = 0.0;
- var centerY = 0.0;
- var area = 0.0;
- var I = 0.0;
- var p1X = 0.0;
- var p1Y = 0.0;
- var k_inv3 = 1.0 / 3.0;
- for (var i = 0; i < this.m_vertexCount; ++i) {
- var p2 = this.m_vertices[i];
- var p3 = i + 1 < this.m_vertexCount ? this.m_vertices[parseInt(i + 1)] : this.m_vertices[0];
- var e1X = p2.x - p1X;
- var e1Y = p2.y - p1Y;
- var e2X = p3.x - p1X;
- var e2Y = p3.y - p1Y;
- var D = e1X * e2Y - e1Y * e2X;
- var triangleArea = 0.5 * D;area += triangleArea;
- centerX += triangleArea * k_inv3 * (p1X + p2.x + p3.x);
- centerY += triangleArea * k_inv3 * (p1Y + p2.y + p3.y);
- var px = p1X;
- var py = p1Y;
- var ex1 = e1X;
- var ey1 = e1Y;
- var ex2 = e2X;
- var ey2 = e2Y;
- var intx2 = k_inv3 * (0.25 * (ex1 * ex1 + ex2 * ex1 + ex2 * ex2) + (px * ex1 + px * ex2)) + 0.5 * px * px;
- var inty2 = k_inv3 * (0.25 * (ey1 * ey1 + ey2 * ey1 + ey2 * ey2) + (py * ey1 + py * ey2)) + 0.5 * py * py;I += D * (intx2 + inty2);
- }
- massData.mass = density * area;
- centerX *= 1.0 / area;
- centerY *= 1.0 / area;
- massData.center.Set(centerX, centerY);
- massData.I = density * I;
- }
- b2PolygonShape.prototype.ComputeSubmergedArea = function (normal, offset, xf, c) {
- if (offset === undefined) offset = 0;
- var normalL = b2Math.MulTMV(xf.R, normal);
- var offsetL = offset - b2Math.Dot(normal, xf.position);
- var depths = new Vector_a2j_Number();
- var diveCount = 0;
- var intoIndex = parseInt((-1));
- var outoIndex = parseInt((-1));
- var lastSubmerged = false;
- var i = 0;
- for (i = 0;
- i < this.m_vertexCount; ++i) {
- depths[i] = b2Math.Dot(normalL, this.m_vertices[i]) - offsetL;
- var isSubmerged = depths[i] < (-Number.MIN_VALUE);
- if (i > 0) {
- if (isSubmerged) {
- if (!lastSubmerged) {
- intoIndex = i - 1;
- diveCount++;
- }
- }
- else {
- if (lastSubmerged) {
- outoIndex = i - 1;
- diveCount++;
- }
- }
- }
- lastSubmerged = isSubmerged;
- }
- switch (diveCount) {
- case 0:
- if (lastSubmerged) {
- var md = new b2MassData();
- this.ComputeMass(md, 1);
- c.SetV(b2Math.MulX(xf, md.center));
- return md.mass;
- }
- else {
- return 0;
- }
- break;
- case 1:
- if (intoIndex == (-1)) {
- intoIndex = this.m_vertexCount - 1;
- }
- else {
- outoIndex = this.m_vertexCount - 1;
- }
- break;
- }
- var intoIndex2 = parseInt((intoIndex + 1) % this.m_vertexCount);
- var outoIndex2 = parseInt((outoIndex + 1) % this.m_vertexCount);
- var intoLamdda = (0 - depths[intoIndex]) / (depths[intoIndex2] - depths[intoIndex]);
- var outoLamdda = (0 - depths[outoIndex]) / (depths[outoIndex2] - depths[outoIndex]);
- var intoVec = new b2Vec2(this.m_vertices[intoIndex].x * (1 - intoLamdda) + this.m_vertices[intoIndex2].x * intoLamdda, this.m_vertices[intoIndex].y * (1 - intoLamdda) + this.m_vertices[intoIndex2].y * intoLamdda);
- var outoVec = new b2Vec2(this.m_vertices[outoIndex].x * (1 - outoLamdda) + this.m_vertices[outoIndex2].x * outoLamdda, this.m_vertices[outoIndex].y * (1 - outoLamdda) + this.m_vertices[outoIndex2].y * outoLamdda);
- var area = 0;
- var center = new b2Vec2();
- var p2 = this.m_vertices[intoIndex2];
- var p3;
- i = intoIndex2;
- while (i != outoIndex2) {
- i = (i + 1) % this.m_vertexCount;
- if (i == outoIndex2) p3 = outoVec;
- else p3 = this.m_vertices[i];
- var triangleArea = 0.5 * ((p2.x - intoVec.x) * (p3.y - intoVec.y) - (p2.y - intoVec.y) * (p3.x - intoVec.x));
- area += triangleArea;
- center.x += triangleArea * (intoVec.x + p2.x + p3.x) / 3;
- center.y += triangleArea * (intoVec.y + p2.y + p3.y) / 3;
- p2 = p3;
- }
- center.Multiply(1 / area);
- c.SetV(b2Math.MulX(xf, center));
- return area;
- }
- b2PolygonShape.prototype.GetVertexCount = function () {
- return this.m_vertexCount;
- }
- b2PolygonShape.prototype.GetVertices = function () {
- return this.m_vertices;
- }
- b2PolygonShape.prototype.GetNormals = function () {
- return this.m_normals;
- }
- b2PolygonShape.prototype.GetSupport = function (d) {
- var bestIndex = 0;
- var bestValue = this.m_vertices[0].x * d.x + this.m_vertices[0].y * d.y;
- for (var i = 1; i < this.m_vertexCount; ++i) {
- var value = this.m_vertices[i].x * d.x + this.m_vertices[i].y * d.y;
- if (value > bestValue) {
- bestIndex = i;
- bestValue = value;
- }
- }
- return bestIndex;
- }
- b2PolygonShape.prototype.GetSupportVertex = function (d) {
- var bestIndex = 0;
- var bestValue = this.m_vertices[0].x * d.x + this.m_vertices[0].y * d.y;
- for (var i = 1; i < this.m_vertexCount; ++i) {
- var value = this.m_vertices[i].x * d.x + this.m_vertices[i].y * d.y;
- if (value > bestValue) {
- bestIndex = i;
- bestValue = value;
- }
- }
- return this.m_vertices[bestIndex];
- }
- b2PolygonShape.prototype.Validate = function () {
- return false;
- }
- b2PolygonShape.prototype.b2PolygonShape = function () {
- this.__super.b2Shape.call(this);
- this.m_type = b2Shape.e_polygonShape;
- this.m_centroid = new b2Vec2();
- this.m_vertices = new Vector();
- this.m_normals = new Vector();
- }
- b2PolygonShape.prototype.Reserve = function (count) {
- if (count === undefined) count = 0;
- for (var i = parseInt(this.m_vertices.length); i < count; i++) {
- this.m_vertices[i] = new b2Vec2();
- this.m_normals[i] = new b2Vec2();
- }
- }
- b2PolygonShape.ComputeCentroid = function (vs, count) {
- if (count === undefined) count = 0;
- var c = new b2Vec2();
- var area = 0.0;
- var p1X = 0.0;
- var p1Y = 0.0;
- var inv3 = 1.0 / 3.0;
- for (var i = 0; i < count; ++i) {
- var p2 = vs[i];
- var p3 = i + 1 < count ? vs[parseInt(i + 1)] : vs[0];
- var e1X = p2.x - p1X;
- var e1Y = p2.y - p1Y;
- var e2X = p3.x - p1X;
- var e2Y = p3.y - p1Y;
- var D = (e1X * e2Y - e1Y * e2X);
- var triangleArea = 0.5 * D;area += triangleArea;
- c.x += triangleArea * inv3 * (p1X + p2.x + p3.x);
- c.y += triangleArea * inv3 * (p1Y + p2.y + p3.y);
- }
- c.x *= 1.0 / area;
- c.y *= 1.0 / area;
- return c;
- }
- b2PolygonShape.ComputeOBB = function (obb, vs, count) {
- if (count === undefined) count = 0;
- var i = 0;
- var p = new Vector(count + 1);
- for (i = 0;
- i < count; ++i) {
- p[i] = vs[i];
- }
- p[count] = p[0];
- var minArea = Number.MAX_VALUE;
- for (i = 1;
- i <= count; ++i) {
- var root = p[parseInt(i - 1)];
- var uxX = p[i].x - root.x;
- var uxY = p[i].y - root.y;
- var length = Math.sqrt(uxX * uxX + uxY * uxY);
- uxX /= length;
- uxY /= length;
- var uyX = (-uxY);
- var uyY = uxX;
- var lowerX = Number.MAX_VALUE;
- var lowerY = Number.MAX_VALUE;
- var upperX = (-Number.MAX_VALUE);
- var upperY = (-Number.MAX_VALUE);
- for (var j = 0; j < count; ++j) {
- var dX = p[j].x - root.x;
- var dY = p[j].y - root.y;
- var rX = (uxX * dX + uxY * dY);
- var rY = (uyX * dX + uyY * dY);
- if (rX < lowerX) lowerX = rX;
- if (rY < lowerY) lowerY = rY;
- if (rX > upperX) upperX = rX;
- if (rY > upperY) upperY = rY;
- }
- var area = (upperX - lowerX) * (upperY - lowerY);
- if (area < 0.95 * minArea) {
- minArea = area;
- obb.R.col1.x = uxX;
- obb.R.col1.y = uxY;
- obb.R.col2.x = uyX;
- obb.R.col2.y = uyY;
- var centerX = 0.5 * (lowerX + upperX);
- var centerY = 0.5 * (lowerY + upperY);
- var tMat = obb.R;
- obb.center.x = root.x + (tMat.col1.x * centerX + tMat.col2.x * centerY);
- obb.center.y = root.y + (tMat.col1.y * centerX + tMat.col2.y * centerY);
- obb.extents.x = 0.5 * (upperX - lowerX);
- obb.extents.y = 0.5 * (upperY - lowerY);
- }
- }
- }
- Box2D.postDefs.push(function () {
- Box2D.Collision.Shapes.b2PolygonShape.s_mat = new b2Mat22();
- });
- b2Shape.b2Shape = function () {};
- b2Shape.prototype.Copy = function () {
- return null;
- }
- b2Shape.prototype.Set = function (other) {
- this.m_radius = other.m_radius;
- }
- b2Shape.prototype.GetType = function () {
- return this.m_type;
- }
- b2Shape.prototype.TestPoint = function (xf, p) {
- return false;
- }
- b2Shape.prototype.RayCast = function (output, input, transform) {
- return false;
- }
- b2Shape.prototype.ComputeAABB = function (aabb, xf) {}
- b2Shape.prototype.ComputeMass = function (massData, density) {
- if (density === undefined) density = 0;
- }
- b2Shape.prototype.ComputeSubmergedArea = function (normal, offset, xf, c) {
- if (offset === undefined) offset = 0;
- return 0;
- }
- b2Shape.TestOverlap = function (shape1, transform1, shape2, transform2) {
- var input = new b2DistanceInput();
- input.proxyA = new b2DistanceProxy();
- input.proxyA.Set(shape1);
- input.proxyB = new b2DistanceProxy();
- input.proxyB.Set(shape2);
- input.transformA = transform1;
- input.transformB = transform2;
- input.useRadii = true;
- var simplexCache = new b2SimplexCache();
- simplexCache.count = 0;
- var output = new b2DistanceOutput();
- b2Distance.Distance(output, simplexCache, input);
- return output.distance < 10.0 * Number.MIN_VALUE;
- }
- b2Shape.prototype.b2Shape = function () {
- this.m_type = b2Shape.e_unknownShape;
- this.m_radius = b2Settings.b2_linearSlop;
- }
- Box2D.postDefs.push(function () {
- Box2D.Collision.Shapes.b2Shape.e_unknownShape = parseInt((-1));
- Box2D.Collision.Shapes.b2Shape.e_circleShape = 0;
- Box2D.Collision.Shapes.b2Shape.e_polygonShape = 1;
- Box2D.Collision.Shapes.b2Shape.e_edgeShape = 2;
- Box2D.Collision.Shapes.b2Shape.e_shapeTypeCount = 3;
- Box2D.Collision.Shapes.b2Shape.e_hitCollide = 1;
- Box2D.Collision.Shapes.b2Shape.e_missCollide = 0;
- Box2D.Collision.Shapes.b2Shape.e_startsInsideCollide = parseInt((-1));
- });
-})();
-(function () {
- var b2Color = Box2D.Common.b2Color,
- b2internal = Box2D.Common.b2internal,
- b2Settings = Box2D.Common.b2Settings,
- b2Mat22 = Box2D.Common.Math.b2Mat22,
- b2Mat33 = Box2D.Common.Math.b2Mat33,
- b2Math = Box2D.Common.Math.b2Math,
- b2Sweep = Box2D.Common.Math.b2Sweep,
- b2Transform = Box2D.Common.Math.b2Transform,
- b2Vec2 = Box2D.Common.Math.b2Vec2,
- b2Vec3 = Box2D.Common.Math.b2Vec3;
-
- b2Color.b2Color = function () {
- this._r = 0;
- this._g = 0;
- this._b = 0;
- };
- b2Color.prototype.b2Color = function (rr, gg, bb) {
- if (rr === undefined) rr = 0;
- if (gg === undefined) gg = 0;
- if (bb === undefined) bb = 0;
- this._r = Box2D.parseUInt(255 * b2Math.Clamp(rr, 0.0, 1.0));
- this._g = Box2D.parseUInt(255 * b2Math.Clamp(gg, 0.0, 1.0));
- this._b = Box2D.parseUInt(255 * b2Math.Clamp(bb, 0.0, 1.0));
- }
- b2Color.prototype.Set = function (rr, gg, bb) {
- if (rr === undefined) rr = 0;
- if (gg === undefined) gg = 0;
- if (bb === undefined) bb = 0;
- this._r = Box2D.parseUInt(255 * b2Math.Clamp(rr, 0.0, 1.0));
- this._g = Box2D.parseUInt(255 * b2Math.Clamp(gg, 0.0, 1.0));
- this._b = Box2D.parseUInt(255 * b2Math.Clamp(bb, 0.0, 1.0));
- }
- Object.defineProperty(b2Color.prototype, 'r', {
- enumerable: false,
- configurable: true,
- set: function (rr) {
- if (rr === undefined) rr = 0;
- this._r = Box2D.parseUInt(255 * b2Math.Clamp(rr, 0.0, 1.0));
- }
- });
- Object.defineProperty(b2Color.prototype, 'g', {
- enumerable: false,
- configurable: true,
- set: function (gg) {
- if (gg === undefined) gg = 0;
- this._g = Box2D.parseUInt(255 * b2Math.Clamp(gg, 0.0, 1.0));
- }
- });
- Object.defineProperty(b2Color.prototype, 'b', {
- enumerable: false,
- configurable: true,
- set: function (bb) {
- if (bb === undefined) bb = 0;
- this._b = Box2D.parseUInt(255 * b2Math.Clamp(bb, 0.0, 1.0));
- }
- });
- Object.defineProperty(b2Color.prototype, 'color', {
- enumerable: false,
- configurable: true,
- get: function () {
- return (this._r << 16) | (this._g << 8) | (this._b);
- }
- });
- b2Settings.b2Settings = function () {};
- b2Settings.b2MixFriction = function (friction1, friction2) {
- if (friction1 === undefined) friction1 = 0;
- if (friction2 === undefined) friction2 = 0;
- return Math.sqrt(friction1 * friction2);
- }
- b2Settings.b2MixRestitution = function (restitution1, restitution2) {
- if (restitution1 === undefined) restitution1 = 0;
- if (restitution2 === undefined) restitution2 = 0;
- return restitution1 > restitution2 ? restitution1 : restitution2;
- }
- b2Settings.b2Assert = function (a) {
- if (!a) {
- throw "Assertion Failed";
- }
- }
- Box2D.postDefs.push(function () {
- Box2D.Common.b2Settings.VERSION = "2.1alpha";
- Box2D.Common.b2Settings.USHRT_MAX = 0x0000ffff;
- Box2D.Common.b2Settings.b2_pi = Math.PI;
- Box2D.Common.b2Settings.b2_maxManifoldPoints = 2;
- Box2D.Common.b2Settings.b2_aabbExtension = 0.1;
- Box2D.Common.b2Settings.b2_aabbMultiplier = 2.0;
- Box2D.Common.b2Settings.b2_polygonRadius = 2.0 * b2Settings.b2_linearSlop;
- Box2D.Common.b2Settings.b2_linearSlop = 0.005;
- Box2D.Common.b2Settings.b2_angularSlop = 2.0 / 180.0 * b2Settings.b2_pi;
- Box2D.Common.b2Settings.b2_toiSlop = 8.0 * b2Settings.b2_linearSlop;
- Box2D.Common.b2Settings.b2_maxTOIContactsPerIsland = 32;
- Box2D.Common.b2Settings.b2_maxTOIJointsPerIsland = 32;
- Box2D.Common.b2Settings.b2_velocityThreshold = 1.0;
- Box2D.Common.b2Settings.b2_maxLinearCorrection = 0.2;
- Box2D.Common.b2Settings.b2_maxAngularCorrection = 8.0 / 180.0 * b2Settings.b2_pi;
- Box2D.Common.b2Settings.b2_maxTranslation = 2.0;
- Box2D.Common.b2Settings.b2_maxTranslationSquared = b2Settings.b2_maxTranslation * b2Settings.b2_maxTranslation;
- Box2D.Common.b2Settings.b2_maxRotation = 0.5 * b2Settings.b2_pi;
- Box2D.Common.b2Settings.b2_maxRotationSquared = b2Settings.b2_maxRotation * b2Settings.b2_maxRotation;
- Box2D.Common.b2Settings.b2_contactBaumgarte = 0.2;
- Box2D.Common.b2Settings.b2_timeToSleep = 0.5;
- Box2D.Common.b2Settings.b2_linearSleepTolerance = 0.01;
- Box2D.Common.b2Settings.b2_angularSleepTolerance = 2.0 / 180.0 * b2Settings.b2_pi;
- });
-})();
-(function () {
- var b2AABB = Box2D.Collision.b2AABB,
- b2Color = Box2D.Common.b2Color,
- b2internal = Box2D.Common.b2internal,
- b2Settings = Box2D.Common.b2Settings,
- b2Mat22 = Box2D.Common.Math.b2Mat22,
- b2Mat33 = Box2D.Common.Math.b2Mat33,
- b2Math = Box2D.Common.Math.b2Math,
- b2Sweep = Box2D.Common.Math.b2Sweep,
- b2Transform = Box2D.Common.Math.b2Transform,
- b2Vec2 = Box2D.Common.Math.b2Vec2,
- b2Vec3 = Box2D.Common.Math.b2Vec3;
-
- b2Mat22.b2Mat22 = function () {
- this.col1 = new b2Vec2();
- this.col2 = new b2Vec2();
- };
- b2Mat22.prototype.b2Mat22 = function () {
- this.SetIdentity();
- }
- b2Mat22.FromAngle = function (angle) {
- if (angle === undefined) angle = 0;
- var mat = new b2Mat22();
- mat.Set(angle);
- return mat;
- }
- b2Mat22.FromVV = function (c1, c2) {
- var mat = new b2Mat22();
- mat.SetVV(c1, c2);
- return mat;
- }
- b2Mat22.prototype.Set = function (angle) {
- if (angle === undefined) angle = 0;
- var c = Math.cos(angle);
- var s = Math.sin(angle);
- this.col1.x = c;
- this.col2.x = (-s);
- this.col1.y = s;
- this.col2.y = c;
- }
- b2Mat22.prototype.SetVV = function (c1, c2) {
- this.col1.SetV(c1);
- this.col2.SetV(c2);
- }
- b2Mat22.prototype.Copy = function () {
- var mat = new b2Mat22();
- mat.SetM(this);
- return mat;
- }
- b2Mat22.prototype.SetM = function (m) {
- this.col1.SetV(m.col1);
- this.col2.SetV(m.col2);
- }
- b2Mat22.prototype.AddM = function (m) {
- this.col1.x += m.col1.x;
- this.col1.y += m.col1.y;
- this.col2.x += m.col2.x;
- this.col2.y += m.col2.y;
- }
- b2Mat22.prototype.SetIdentity = function () {
- this.col1.x = 1.0;
- this.col2.x = 0.0;
- this.col1.y = 0.0;
- this.col2.y = 1.0;
- }
- b2Mat22.prototype.SetZero = function () {
- this.col1.x = 0.0;
- this.col2.x = 0.0;
- this.col1.y = 0.0;
- this.col2.y = 0.0;
- }
- b2Mat22.prototype.GetAngle = function () {
- return Math.atan2(this.col1.y, this.col1.x);
- }
- b2Mat22.prototype.GetInverse = function (out) {
- var a = this.col1.x;
- var b = this.col2.x;
- var c = this.col1.y;
- var d = this.col2.y;
- var det = a * d - b * c;
- if (det != 0.0) {
- det = 1.0 / det;
- }
- out.col1.x = det * d;
- out.col2.x = (-det * b);
- out.col1.y = (-det * c);
- out.col2.y = det * a;
- return out;
- }
- b2Mat22.prototype.Solve = function (out, bX, bY) {
- if (bX === undefined) bX = 0;
- if (bY === undefined) bY = 0;
- var a11 = this.col1.x;
- var a12 = this.col2.x;
- var a21 = this.col1.y;
- var a22 = this.col2.y;
- var det = a11 * a22 - a12 * a21;
- if (det != 0.0) {
- det = 1.0 / det;
- }
- out.x = det * (a22 * bX - a12 * bY);
- out.y = det * (a11 * bY - a21 * bX);
- return out;
- }
- b2Mat22.prototype.Abs = function () {
- this.col1.Abs();
- this.col2.Abs();
- }
- b2Mat33.b2Mat33 = function () {
- this.col1 = new b2Vec3();
- this.col2 = new b2Vec3();
- this.col3 = new b2Vec3();
- };
- b2Mat33.prototype.b2Mat33 = function (c1, c2, c3) {
- if (c1 === undefined) c1 = null;
- if (c2 === undefined) c2 = null;
- if (c3 === undefined) c3 = null;
- if (!c1 && !c2 && !c3) {
- this.col1.SetZero();
- this.col2.SetZero();
- this.col3.SetZero();
- }
- else {
- this.col1.SetV(c1);
- this.col2.SetV(c2);
- this.col3.SetV(c3);
- }
- }
- b2Mat33.prototype.SetVVV = function (c1, c2, c3) {
- this.col1.SetV(c1);
- this.col2.SetV(c2);
- this.col3.SetV(c3);
- }
- b2Mat33.prototype.Copy = function () {
- return new b2Mat33(this.col1, this.col2, this.col3);
- }
- b2Mat33.prototype.SetM = function (m) {
- this.col1.SetV(m.col1);
- this.col2.SetV(m.col2);
- this.col3.SetV(m.col3);
- }
- b2Mat33.prototype.AddM = function (m) {
- this.col1.x += m.col1.x;
- this.col1.y += m.col1.y;
- this.col1.z += m.col1.z;
- this.col2.x += m.col2.x;
- this.col2.y += m.col2.y;
- this.col2.z += m.col2.z;
- this.col3.x += m.col3.x;
- this.col3.y += m.col3.y;
- this.col3.z += m.col3.z;
- }
- b2Mat33.prototype.SetIdentity = function () {
- this.col1.x = 1.0;
- this.col2.x = 0.0;
- this.col3.x = 0.0;
- this.col1.y = 0.0;
- this.col2.y = 1.0;
- this.col3.y = 0.0;
- this.col1.z = 0.0;
- this.col2.z = 0.0;
- this.col3.z = 1.0;
- }
- b2Mat33.prototype.SetZero = function () {
- this.col1.x = 0.0;
- this.col2.x = 0.0;
- this.col3.x = 0.0;
- this.col1.y = 0.0;
- this.col2.y = 0.0;
- this.col3.y = 0.0;
- this.col1.z = 0.0;
- this.col2.z = 0.0;
- this.col3.z = 0.0;
- }
- b2Mat33.prototype.Solve22 = function (out, bX, bY) {
- if (bX === undefined) bX = 0;
- if (bY === undefined) bY = 0;
- var a11 = this.col1.x;
- var a12 = this.col2.x;
- var a21 = this.col1.y;
- var a22 = this.col2.y;
- var det = a11 * a22 - a12 * a21;
- if (det != 0.0) {
- det = 1.0 / det;
- }
- out.x = det * (a22 * bX - a12 * bY);
- out.y = det * (a11 * bY - a21 * bX);
- return out;
- }
- b2Mat33.prototype.Solve33 = function (out, bX, bY, bZ) {
- if (bX === undefined) bX = 0;
- if (bY === undefined) bY = 0;
- if (bZ === undefined) bZ = 0;
- var a11 = this.col1.x;
- var a21 = this.col1.y;
- var a31 = this.col1.z;
- var a12 = this.col2.x;
- var a22 = this.col2.y;
- var a32 = this.col2.z;
- var a13 = this.col3.x;
- var a23 = this.col3.y;
- var a33 = this.col3.z;
- var det = a11 * (a22 * a33 - a32 * a23) + a21 * (a32 * a13 - a12 * a33) + a31 * (a12 * a23 - a22 * a13);
- if (det != 0.0) {
- det = 1.0 / det;
- }
- out.x = det * (bX * (a22 * a33 - a32 * a23) + bY * (a32 * a13 - a12 * a33) + bZ * (a12 * a23 - a22 * a13));
- out.y = det * (a11 * (bY * a33 - bZ * a23) + a21 * (bZ * a13 - bX * a33) + a31 * (bX * a23 - bY * a13));
- out.z = det * (a11 * (a22 * bZ - a32 * bY) + a21 * (a32 * bX - a12 * bZ) + a31 * (a12 * bY - a22 * bX));
- return out;
- }
- b2Math.b2Math = function () {};
- b2Math.IsValid = function (x) {
- if (x === undefined) x = 0;
- return isFinite(x);
- }
- b2Math.Dot = function (a, b) {
- return a.x * b.x + a.y * b.y;
- }
- b2Math.CrossVV = function (a, b) {
- return a.x * b.y - a.y * b.x;
- }
- b2Math.CrossVF = function (a, s) {
- if (s === undefined) s = 0;
- var v = new b2Vec2(s * a.y, (-s * a.x));
- return v;
- }
- b2Math.CrossFV = function (s, a) {
- if (s === undefined) s = 0;
- var v = new b2Vec2((-s * a.y), s * a.x);
- return v;
- }
- b2Math.MulMV = function (A, v) {
- var u = new b2Vec2(A.col1.x * v.x + A.col2.x * v.y, A.col1.y * v.x + A.col2.y * v.y);
- return u;
- }
- b2Math.MulTMV = function (A, v) {
- var u = new b2Vec2(b2Math.Dot(v, A.col1), b2Math.Dot(v, A.col2));
- return u;
- }
- b2Math.MulX = function (T, v) {
- var a = b2Math.MulMV(T.R, v);
- a.x += T.position.x;
- a.y += T.position.y;
- return a;
- }
- b2Math.MulXT = function (T, v) {
- var a = b2Math.SubtractVV(v, T.position);
- var tX = (a.x * T.R.col1.x + a.y * T.R.col1.y);
- a.y = (a.x * T.R.col2.x + a.y * T.R.col2.y);
- a.x = tX;
- return a;
- }
- b2Math.AddVV = function (a, b) {
- var v = new b2Vec2(a.x + b.x, a.y + b.y);
- return v;
- }
- b2Math.SubtractVV = function (a, b) {
- var v = new b2Vec2(a.x - b.x, a.y - b.y);
- return v;
- }
- b2Math.Distance = function (a, b) {
- var cX = a.x - b.x;
- var cY = a.y - b.y;
- return Math.sqrt(cX * cX + cY * cY);
- }
- b2Math.DistanceSquared = function (a, b) {
- var cX = a.x - b.x;
- var cY = a.y - b.y;
- return (cX * cX + cY * cY);
- }
- b2Math.MulFV = function (s, a) {
- if (s === undefined) s = 0;
- var v = new b2Vec2(s * a.x, s * a.y);
- return v;
- }
- b2Math.AddMM = function (A, B) {
- var C = b2Mat22.FromVV(b2Math.AddVV(A.col1, B.col1), b2Math.AddVV(A.col2, B.col2));
- return C;
- }
- b2Math.MulMM = function (A, B) {
- var C = b2Mat22.FromVV(b2Math.MulMV(A, B.col1), b2Math.MulMV(A, B.col2));
- return C;
- }
- b2Math.MulTMM = function (A, B) {
- var c1 = new b2Vec2(b2Math.Dot(A.col1, B.col1), b2Math.Dot(A.col2, B.col1));
- var c2 = new b2Vec2(b2Math.Dot(A.col1, B.col2), b2Math.Dot(A.col2, B.col2));
- var C = b2Mat22.FromVV(c1, c2);
- return C;
- }
- b2Math.Abs = function (a) {
- if (a === undefined) a = 0;
- return a > 0.0 ? a : (-a);
- }
- b2Math.AbsV = function (a) {
- var b = new b2Vec2(b2Math.Abs(a.x), b2Math.Abs(a.y));
- return b;
- }
- b2Math.AbsM = function (A) {
- var B = b2Mat22.FromVV(b2Math.AbsV(A.col1), b2Math.AbsV(A.col2));
- return B;
- }
- b2Math.Min = function (a, b) {
- if (a === undefined) a = 0;
- if (b === undefined) b = 0;
- return a < b ? a : b;
- }
- b2Math.MinV = function (a, b) {
- var c = new b2Vec2(b2Math.Min(a.x, b.x), b2Math.Min(a.y, b.y));
- return c;
- }
- b2Math.Max = function (a, b) {
- if (a === undefined) a = 0;
- if (b === undefined) b = 0;
- return a > b ? a : b;
- }
- b2Math.MaxV = function (a, b) {
- var c = new b2Vec2(b2Math.Max(a.x, b.x), b2Math.Max(a.y, b.y));
- return c;
- }
- b2Math.Clamp = function (a, low, high) {
- if (a === undefined) a = 0;
- if (low === undefined) low = 0;
- if (high === undefined) high = 0;
- return a < low ? low : a > high ? high : a;
- }
- b2Math.ClampV = function (a, low, high) {
- return b2Math.MaxV(low, b2Math.MinV(a, high));
- }
- b2Math.Swap = function (a, b) {
- var tmp = a[0];
- a[0] = b[0];
- b[0] = tmp;
- }
- b2Math.Random = function () {
- return Math.random() * 2 - 1;
- }
- b2Math.RandomRange = function (lo, hi) {
- if (lo === undefined) lo = 0;
- if (hi === undefined) hi = 0;
- var r = Math.random();
- r = (hi - lo) * r + lo;
- return r;
- }
- b2Math.NextPowerOfTwo = function (x) {
- if (x === undefined) x = 0;
- x |= (x >> 1) & 0x7FFFFFFF;
- x |= (x >> 2) & 0x3FFFFFFF;
- x |= (x >> 4) & 0x0FFFFFFF;
- x |= (x >> 8) & 0x00FFFFFF;
- x |= (x >> 16) & 0x0000FFFF;
- return x + 1;
- }
- b2Math.IsPowerOfTwo = function (x) {
- if (x === undefined) x = 0;
- var result = x > 0 && (x & (x - 1)) == 0;
- return result;
- }
- Box2D.postDefs.push(function () {
- Box2D.Common.Math.b2Math.b2Vec2_zero = new b2Vec2(0.0, 0.0);
- Box2D.Common.Math.b2Math.b2Mat22_identity = b2Mat22.FromVV(new b2Vec2(1.0, 0.0), new b2Vec2(0.0, 1.0));
- Box2D.Common.Math.b2Math.b2Transform_identity = new b2Transform(b2Math.b2Vec2_zero, b2Math.b2Mat22_identity);
- });
- b2Sweep.b2Sweep = function () {
- this.localCenter = new b2Vec2();
- this.c0 = new b2Vec2;
- this.c = new b2Vec2();
- };
- b2Sweep.prototype.Set = function (other) {
- this.localCenter.SetV(other.localCenter);
- this.c0.SetV(other.c0);
- this.c.SetV(other.c);
- this.a0 = other.a0;
- this.a = other.a;
- this.t0 = other.t0;
- }
- b2Sweep.prototype.Copy = function () {
- var copy = new b2Sweep();
- copy.localCenter.SetV(this.localCenter);
- copy.c0.SetV(this.c0);
- copy.c.SetV(this.c);
- copy.a0 = this.a0;
- copy.a = this.a;
- copy.t0 = this.t0;
- return copy;
- }
- b2Sweep.prototype.GetTransform = function (xf, alpha) {
- if (alpha === undefined) alpha = 0;
- xf.position.x = (1.0 - alpha) * this.c0.x + alpha * this.c.x;
- xf.position.y = (1.0 - alpha) * this.c0.y + alpha * this.c.y;
- var angle = (1.0 - alpha) * this.a0 + alpha * this.a;
- xf.R.Set(angle);
- var tMat = xf.R;
- xf.position.x -= (tMat.col1.x * this.localCenter.x + tMat.col2.x * this.localCenter.y);
- xf.position.y -= (tMat.col1.y * this.localCenter.x + tMat.col2.y * this.localCenter.y);
- }
- b2Sweep.prototype.Advance = function (t) {
- if (t === undefined) t = 0;
- if (this.t0 < t && 1.0 - this.t0 > Number.MIN_VALUE) {
- var alpha = (t - this.t0) / (1.0 - this.t0);
- this.c0.x = (1.0 - alpha) * this.c0.x + alpha * this.c.x;
- this.c0.y = (1.0 - alpha) * this.c0.y + alpha * this.c.y;
- this.a0 = (1.0 - alpha) * this.a0 + alpha * this.a;
- this.t0 = t;
- }
- }
- b2Transform.b2Transform = function () {
- this.position = new b2Vec2;
- this.R = new b2Mat22();
- };
- b2Transform.prototype.b2Transform = function (pos, r) {
- if (pos === undefined) pos = null;
- if (r === undefined) r = null;
- if (pos) {
- this.position.SetV(pos);
- this.R.SetM(r);
- }
- }
- b2Transform.prototype.Initialize = function (pos, r) {
- this.position.SetV(pos);
- this.R.SetM(r);
- }
- b2Transform.prototype.SetIdentity = function () {
- this.position.SetZero();
- this.R.SetIdentity();
- }
- b2Transform.prototype.Set = function (x) {
- this.position.SetV(x.position);
- this.R.SetM(x.R);
- }
- b2Transform.prototype.GetAngle = function () {
- return Math.atan2(this.R.col1.y, this.R.col1.x);
- }
- b2Vec2.b2Vec2 = function () {};
- b2Vec2.prototype.b2Vec2 = function (x_, y_) {
- if (x_ === undefined) x_ = 0;
- if (y_ === undefined) y_ = 0;
- this.x = x_;
- this.y = y_;
- }
- b2Vec2.prototype.SetZero = function () {
- this.x = 0.0;
- this.y = 0.0;
- }
- b2Vec2.prototype.Set = function (x_, y_) {
- if (x_ === undefined) x_ = 0;
- if (y_ === undefined) y_ = 0;
- this.x = x_;
- this.y = y_;
- }
- b2Vec2.prototype.SetV = function (v) {
- this.x = v.x;
- this.y = v.y;
- }
- b2Vec2.prototype.GetNegative = function () {
- return new b2Vec2((-this.x), (-this.y));
- }
- b2Vec2.prototype.NegativeSelf = function () {
- this.x = (-this.x);
- this.y = (-this.y);
- }
- b2Vec2.Make = function (x_, y_) {
- if (x_ === undefined) x_ = 0;
- if (y_ === undefined) y_ = 0;
- return new b2Vec2(x_, y_);
- }
- b2Vec2.prototype.Copy = function () {
- return new b2Vec2(this.x, this.y);
- }
- b2Vec2.prototype.Add = function (v) {
- this.x += v.x;
- this.y += v.y;
- }
- b2Vec2.prototype.Subtract = function (v) {
- this.x -= v.x;
- this.y -= v.y;
- }
- b2Vec2.prototype.Multiply = function (a) {
- if (a === undefined) a = 0;
- this.x *= a;
- this.y *= a;
- }
- b2Vec2.prototype.MulM = function (A) {
- var tX = this.x;
- this.x = A.col1.x * tX + A.col2.x * this.y;
- this.y = A.col1.y * tX + A.col2.y * this.y;
- }
- b2Vec2.prototype.MulTM = function (A) {
- var tX = b2Math.Dot(this, A.col1);
- this.y = b2Math.Dot(this, A.col2);
- this.x = tX;
- }
- b2Vec2.prototype.CrossVF = function (s) {
- if (s === undefined) s = 0;
- var tX = this.x;
- this.x = s * this.y;
- this.y = (-s * tX);
- }
- b2Vec2.prototype.CrossFV = function (s) {
- if (s === undefined) s = 0;
- var tX = this.x;
- this.x = (-s * this.y);
- this.y = s * tX;
- }
- b2Vec2.prototype.MinV = function (b) {
- this.x = this.x < b.x ? this.x : b.x;
- this.y = this.y < b.y ? this.y : b.y;
- }
- b2Vec2.prototype.MaxV = function (b) {
- this.x = this.x > b.x ? this.x : b.x;
- this.y = this.y > b.y ? this.y : b.y;
- }
- b2Vec2.prototype.Abs = function () {
- if (this.x < 0) this.x = (-this.x);
- if (this.y < 0) this.y = (-this.y);
- }
- b2Vec2.prototype.Length = function () {
- return Math.sqrt(this.x * this.x + this.y * this.y);
- }
- b2Vec2.prototype.LengthSquared = function () {
- return (this.x * this.x + this.y * this.y);
- }
- b2Vec2.prototype.Normalize = function () {
- var length = Math.sqrt(this.x * this.x + this.y * this.y);
- if (length < Number.MIN_VALUE) {
- return 0.0;
- }
- var invLength = 1.0 / length;
- this.x *= invLength;
- this.y *= invLength;
- return length;
- }
- b2Vec2.prototype.IsValid = function () {
- return b2Math.IsValid(this.x) && b2Math.IsValid(this.y);
- }
- b2Vec3.b2Vec3 = function () {};
- b2Vec3.prototype.b2Vec3 = function (x, y, z) {
- if (x === undefined) x = 0;
- if (y === undefined) y = 0;
- if (z === undefined) z = 0;
- this.x = x;
- this.y = y;
- this.z = z;
- }
- b2Vec3.prototype.SetZero = function () {
- this.x = this.y = this.z = 0.0;
- }
- b2Vec3.prototype.Set = function (x, y, z) {
- if (x === undefined) x = 0;
- if (y === undefined) y = 0;
- if (z === undefined) z = 0;
- this.x = x;
- this.y = y;
- this.z = z;
- }
- b2Vec3.prototype.SetV = function (v) {
- this.x = v.x;
- this.y = v.y;
- this.z = v.z;
- }
- b2Vec3.prototype.GetNegative = function () {
- return new b2Vec3((-this.x), (-this.y), (-this.z));
- }
- b2Vec3.prototype.NegativeSelf = function () {
- this.x = (-this.x);
- this.y = (-this.y);
- this.z = (-this.z);
- }
- b2Vec3.prototype.Copy = function () {
- return new b2Vec3(this.x, this.y, this.z);
- }
- b2Vec3.prototype.Add = function (v) {
- this.x += v.x;
- this.y += v.y;
- this.z += v.z;
- }
- b2Vec3.prototype.Subtract = function (v) {
- this.x -= v.x;
- this.y -= v.y;
- this.z -= v.z;
- }
- b2Vec3.prototype.Multiply = function (a) {
- if (a === undefined) a = 0;
- this.x *= a;
- this.y *= a;
- this.z *= a;
- }
-})();
-(function () {
- var b2ControllerEdge = Box2D.Dynamics.Controllers.b2ControllerEdge,
- b2Mat22 = Box2D.Common.Math.b2Mat22,
- b2Mat33 = Box2D.Common.Math.b2Mat33,
- b2Math = Box2D.Common.Math.b2Math,
- b2Sweep = Box2D.Common.Math.b2Sweep,
- b2Transform = Box2D.Common.Math.b2Transform,
- b2Vec2 = Box2D.Common.Math.b2Vec2,
- b2Vec3 = Box2D.Common.Math.b2Vec3,
- b2Color = Box2D.Common.b2Color,
- b2internal = Box2D.Common.b2internal,
- b2Settings = Box2D.Common.b2Settings,
- b2AABB = Box2D.Collision.b2AABB,
- b2Bound = Box2D.Collision.b2Bound,
- b2BoundValues = Box2D.Collision.b2BoundValues,
- b2Collision = Box2D.Collision.b2Collision,
- b2ContactID = Box2D.Collision.b2ContactID,
- b2ContactPoint = Box2D.Collision.b2ContactPoint,
- b2Distance = Box2D.Collision.b2Distance,
- b2DistanceInput = Box2D.Collision.b2DistanceInput,
- b2DistanceOutput = Box2D.Collision.b2DistanceOutput,
- b2DistanceProxy = Box2D.Collision.b2DistanceProxy,
- b2DynamicTree = Box2D.Collision.b2DynamicTree,
- b2DynamicTreeBroadPhase = Box2D.Collision.b2DynamicTreeBroadPhase,
- b2DynamicTreeNode = Box2D.Collision.b2DynamicTreeNode,
- b2DynamicTreePair = Box2D.Collision.b2DynamicTreePair,
- b2Manifold = Box2D.Collision.b2Manifold,
- b2ManifoldPoint = Box2D.Collision.b2ManifoldPoint,
- b2Point = Box2D.Collision.b2Point,
- b2RayCastInput = Box2D.Collision.b2RayCastInput,
- b2RayCastOutput = Box2D.Collision.b2RayCastOutput,
- b2Segment = Box2D.Collision.b2Segment,
- b2SeparationFunction = Box2D.Collision.b2SeparationFunction,
- b2Simplex = Box2D.Collision.b2Simplex,
- b2SimplexCache = Box2D.Collision.b2SimplexCache,
- b2SimplexVertex = Box2D.Collision.b2SimplexVertex,
- b2TimeOfImpact = Box2D.Collision.b2TimeOfImpact,
- b2TOIInput = Box2D.Collision.b2TOIInput,
- b2WorldManifold = Box2D.Collision.b2WorldManifold,
- ClipVertex = Box2D.Collision.ClipVertex,
- Features = Box2D.Collision.Features,
- IBroadPhase = Box2D.Collision.IBroadPhase,
- b2CircleShape = Box2D.Collision.Shapes.b2CircleShape,
- b2EdgeChainDef = Box2D.Collision.Shapes.b2EdgeChainDef,
- b2EdgeShape = Box2D.Collision.Shapes.b2EdgeShape,
- b2MassData = Box2D.Collision.Shapes.b2MassData,
- b2PolygonShape = Box2D.Collision.Shapes.b2PolygonShape,
- b2Shape = Box2D.Collision.Shapes.b2Shape,
- b2Body = Box2D.Dynamics.b2Body,
- b2BodyDef = Box2D.Dynamics.b2BodyDef,
- b2ContactFilter = Box2D.Dynamics.b2ContactFilter,
- b2ContactImpulse = Box2D.Dynamics.b2ContactImpulse,
- b2ContactListener = Box2D.Dynamics.b2ContactListener,
- b2ContactManager = Box2D.Dynamics.b2ContactManager,
- b2DebugDraw = Box2D.Dynamics.b2DebugDraw,
- b2DestructionListener = Box2D.Dynamics.b2DestructionListener,
- b2FilterData = Box2D.Dynamics.b2FilterData,
- b2Fixture = Box2D.Dynamics.b2Fixture,
- b2FixtureDef = Box2D.Dynamics.b2FixtureDef,
- b2Island = Box2D.Dynamics.b2Island,
- b2TimeStep = Box2D.Dynamics.b2TimeStep,
- b2World = Box2D.Dynamics.b2World,
- b2CircleContact = Box2D.Dynamics.Contacts.b2CircleContact,
- b2Contact = Box2D.Dynamics.Contacts.b2Contact,
- b2ContactConstraint = Box2D.Dynamics.Contacts.b2ContactConstraint,
- b2ContactConstraintPoint = Box2D.Dynamics.Contacts.b2ContactConstraintPoint,
- b2ContactEdge = Box2D.Dynamics.Contacts.b2ContactEdge,
- b2ContactFactory = Box2D.Dynamics.Contacts.b2ContactFactory,
- b2ContactRegister = Box2D.Dynamics.Contacts.b2ContactRegister,
- b2ContactResult = Box2D.Dynamics.Contacts.b2ContactResult,
- b2ContactSolver = Box2D.Dynamics.Contacts.b2ContactSolver,
- b2EdgeAndCircleContact = Box2D.Dynamics.Contacts.b2EdgeAndCircleContact,
- b2NullContact = Box2D.Dynamics.Contacts.b2NullContact,
- b2PolyAndCircleContact = Box2D.Dynamics.Contacts.b2PolyAndCircleContact,
- b2PolyAndEdgeContact = Box2D.Dynamics.Contacts.b2PolyAndEdgeContact,
- b2PolygonContact = Box2D.Dynamics.Contacts.b2PolygonContact,
- b2PositionSolverManifold = Box2D.Dynamics.Contacts.b2PositionSolverManifold,
- b2Controller = Box2D.Dynamics.Controllers.b2Controller,
- b2DistanceJoint = Box2D.Dynamics.Joints.b2DistanceJoint,
- b2DistanceJointDef = Box2D.Dynamics.Joints.b2DistanceJointDef,
- b2FrictionJoint = Box2D.Dynamics.Joints.b2FrictionJoint,
- b2FrictionJointDef = Box2D.Dynamics.Joints.b2FrictionJointDef,
- b2GearJoint = Box2D.Dynamics.Joints.b2GearJoint,
- b2GearJointDef = Box2D.Dynamics.Joints.b2GearJointDef,
- b2Jacobian = Box2D.Dynamics.Joints.b2Jacobian,
- b2Joint = Box2D.Dynamics.Joints.b2Joint,
- b2JointDef = Box2D.Dynamics.Joints.b2JointDef,
- b2JointEdge = Box2D.Dynamics.Joints.b2JointEdge,
- b2LineJoint = Box2D.Dynamics.Joints.b2LineJoint,
- b2LineJointDef = Box2D.Dynamics.Joints.b2LineJointDef,
- b2MouseJoint = Box2D.Dynamics.Joints.b2MouseJoint,
- b2MouseJointDef = Box2D.Dynamics.Joints.b2MouseJointDef,
- b2PrismaticJoint = Box2D.Dynamics.Joints.b2PrismaticJoint,
- b2PrismaticJointDef = Box2D.Dynamics.Joints.b2PrismaticJointDef,
- b2PulleyJoint = Box2D.Dynamics.Joints.b2PulleyJoint,
- b2PulleyJointDef = Box2D.Dynamics.Joints.b2PulleyJointDef,
- b2RevoluteJoint = Box2D.Dynamics.Joints.b2RevoluteJoint,
- b2RevoluteJointDef = Box2D.Dynamics.Joints.b2RevoluteJointDef,
- b2WeldJoint = Box2D.Dynamics.Joints.b2WeldJoint,
- b2WeldJointDef = Box2D.Dynamics.Joints.b2WeldJointDef;
-
- b2Body.b2Body = function () {
- this.m_xf = new b2Transform();
- this.m_sweep = new b2Sweep();
- this.m_linearVelocity = new b2Vec2();
- this.m_force = new b2Vec2();
- };
- b2Body.prototype.connectEdges = function (s1, s2, angle1) {
- if (angle1 === undefined) angle1 = 0;
- var angle2 = Math.atan2(s2.GetDirectionVector().y, s2.GetDirectionVector().x);
- var coreOffset = Math.tan((angle2 - angle1) * 0.5);
- var core = b2Math.MulFV(coreOffset, s2.GetDirectionVector());
- core = b2Math.SubtractVV(core, s2.GetNormalVector());
- core = b2Math.MulFV(b2Settings.b2_toiSlop, core);
- core = b2Math.AddVV(core, s2.GetVertex1());
- var cornerDir = b2Math.AddVV(s1.GetDirectionVector(), s2.GetDirectionVector());
- cornerDir.Normalize();
- var convex = b2Math.Dot(s1.GetDirectionVector(), s2.GetNormalVector()) > 0.0;
- s1.SetNextEdge(s2, core, cornerDir, convex);
- s2.SetPrevEdge(s1, core, cornerDir, convex);
- return angle2;
- }
- b2Body.prototype.CreateFixture = function (def) {
- if (this.m_world.IsLocked() == true) {
- return null;
- }
- var fixture = new b2Fixture();
- fixture.Create(this, this.m_xf, def);
- if (this.m_flags & b2Body.e_activeFlag) {
- var broadPhase = this.m_world.m_contactManager.m_broadPhase;
- fixture.CreateProxy(broadPhase, this.m_xf);
- }
- fixture.m_next = this.m_fixtureList;
- this.m_fixtureList = fixture;
- ++this.m_fixtureCount;
- fixture.m_body = this;
- if (fixture.m_density > 0.0) {
- this.ResetMassData();
- }
- this.m_world.m_flags |= b2World.e_newFixture;
- return fixture;
- }
- b2Body.prototype.CreateFixture2 = function (shape, density) {
- if (density === undefined) density = 0.0;
- var def = new b2FixtureDef();
- def.shape = shape;
- def.density = density;
- return this.CreateFixture(def);
- }
- b2Body.prototype.DestroyFixture = function (fixture) {
- if (this.m_world.IsLocked() == true) {
- return;
- }
- var node = this.m_fixtureList;
- var ppF = null;
- var found = false;
- while (node != null) {
- if (node == fixture) {
- if (ppF) ppF.m_next = fixture.m_next;
- else this.m_fixtureList = fixture.m_next;
- found = true;
- break;
- }
- ppF = node;
- node = node.m_next;
- }
- var edge = this.m_contactList;
- while (edge) {
- var c = edge.contact;
- edge = edge.next;
- var fixtureA = c.GetFixtureA();
- var fixtureB = c.GetFixtureB();
- if (fixture == fixtureA || fixture == fixtureB) {
- this.m_world.m_contactManager.Destroy(c);
- }
- }
- if (this.m_flags & b2Body.e_activeFlag) {
- var broadPhase = this.m_world.m_contactManager.m_broadPhase;
- fixture.DestroyProxy(broadPhase);
- }
- else {}
- fixture.Destroy();
- fixture.m_body = null;
- fixture.m_next = null;
- --this.m_fixtureCount;
- this.ResetMassData();
- }
- b2Body.prototype.SetPositionAndAngle = function (position, angle) {
- if (angle === undefined) angle = 0;
- var f;
- if (this.m_world.IsLocked() == true) {
- return;
- }
- this.m_xf.R.Set(angle);
- this.m_xf.position.SetV(position);
- var tMat = this.m_xf.R;
- var tVec = this.m_sweep.localCenter;
- this.m_sweep.c.x = (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y);
- this.m_sweep.c.y = (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y);
- this.m_sweep.c.x += this.m_xf.position.x;
- this.m_sweep.c.y += this.m_xf.position.y;
- this.m_sweep.c0.SetV(this.m_sweep.c);
- this.m_sweep.a0 = this.m_sweep.a = angle;
- var broadPhase = this.m_world.m_contactManager.m_broadPhase;
- for (f = this.m_fixtureList;
- f; f = f.m_next) {
- f.Synchronize(broadPhase, this.m_xf, this.m_xf);
- }
- this.m_world.m_contactManager.FindNewContacts();
- }
- b2Body.prototype.SetTransform = function (xf) {
- this.SetPositionAndAngle(xf.position, xf.GetAngle());
- }
- b2Body.prototype.GetTransform = function () {
- return this.m_xf;
- }
- b2Body.prototype.GetPosition = function () {
- return this.m_xf.position;
- }
- b2Body.prototype.SetPosition = function (position) {
- this.SetPositionAndAngle(position, this.GetAngle());
- }
- b2Body.prototype.GetAngle = function () {
- return this.m_sweep.a;
- }
- b2Body.prototype.SetAngle = function (angle) {
- if (angle === undefined) angle = 0;
- this.SetPositionAndAngle(this.GetPosition(), angle);
- }
- b2Body.prototype.GetWorldCenter = function () {
- return this.m_sweep.c;
- }
- b2Body.prototype.GetLocalCenter = function () {
- return this.m_sweep.localCenter;
- }
- b2Body.prototype.SetLinearVelocity = function (v) {
- if (this.m_type == b2Body.b2_staticBody) {
- return;
- }
- this.m_linearVelocity.SetV(v);
- }
- b2Body.prototype.GetLinearVelocity = function () {
- return this.m_linearVelocity;
- }
- b2Body.prototype.SetAngularVelocity = function (omega) {
- if (omega === undefined) omega = 0;
- if (this.m_type == b2Body.b2_staticBody) {
- return;
- }
- this.m_angularVelocity = omega;
- }
- b2Body.prototype.GetAngularVelocity = function () {
- return this.m_angularVelocity;
- }
- b2Body.prototype.GetDefinition = function () {
- var bd = new b2BodyDef();
- bd.type = this.GetType();
- bd.allowSleep = (this.m_flags & b2Body.e_allowSleepFlag) == b2Body.e_allowSleepFlag;
- bd.angle = this.GetAngle();
- bd.angularDamping = this.m_angularDamping;
- bd.angularVelocity = this.m_angularVelocity;
- bd.fixedRotation = (this.m_flags & b2Body.e_fixedRotationFlag) == b2Body.e_fixedRotationFlag;
- bd.bullet = (this.m_flags & b2Body.e_bulletFlag) == b2Body.e_bulletFlag;
- bd.awake = (this.m_flags & b2Body.e_awakeFlag) == b2Body.e_awakeFlag;
- bd.linearDamping = this.m_linearDamping;
- bd.linearVelocity.SetV(this.GetLinearVelocity());
- bd.position = this.GetPosition();
- bd.userData = this.GetUserData();
- return bd;
- }
- b2Body.prototype.ApplyForce = function (force, point) {
- if (this.m_type != b2Body.b2_dynamicBody) {
- return;
- }
- if (this.IsAwake() == false) {
- this.SetAwake(true);
- }
- this.m_force.x += force.x;
- this.m_force.y += force.y;
- this.m_torque += ((point.x - this.m_sweep.c.x) * force.y - (point.y - this.m_sweep.c.y) * force.x);
- }
- b2Body.prototype.ApplyTorque = function (torque) {
- if (torque === undefined) torque = 0;
- if (this.m_type != b2Body.b2_dynamicBody) {
- return;
- }
- if (this.IsAwake() == false) {
- this.SetAwake(true);
- }
- this.m_torque += torque;
- }
- b2Body.prototype.ApplyImpulse = function (impulse, point) {
- if (this.m_type != b2Body.b2_dynamicBody) {
- return;
- }
- if (this.IsAwake() == false) {
- this.SetAwake(true);
- }
- this.m_linearVelocity.x += this.m_invMass * impulse.x;
- this.m_linearVelocity.y += this.m_invMass * impulse.y;
- this.m_angularVelocity += this.m_invI * ((point.x - this.m_sweep.c.x) * impulse.y - (point.y - this.m_sweep.c.y) * impulse.x);
- }
- b2Body.prototype.Split = function (callback) {
- var linearVelocity = this.GetLinearVelocity().Copy();
- var angularVelocity = this.GetAngularVelocity();
- var center = this.GetWorldCenter();
- var body1 = this;
- var body2 = this.m_world.CreateBody(this.GetDefinition());
- var prev;
- for (var f = body1.m_fixtureList; f;) {
- if (callback(f)) {
- var next = f.m_next;
- if (prev) {
- prev.m_next = next;
- }
- else {
- body1.m_fixtureList = next;
- }
- body1.m_fixtureCount--;
- f.m_next = body2.m_fixtureList;
- body2.m_fixtureList = f;
- body2.m_fixtureCount++;
- f.m_body = body2;
- f = next;
- }
- else {
- prev = f;
- f = f.m_next;
- }
- }
- body1.ResetMassData();
- body2.ResetMassData();
- var center1 = body1.GetWorldCenter();
- var center2 = body2.GetWorldCenter();
- var velocity1 = b2Math.AddVV(linearVelocity, b2Math.CrossFV(angularVelocity, b2Math.SubtractVV(center1, center)));
- var velocity2 = b2Math.AddVV(linearVelocity, b2Math.CrossFV(angularVelocity, b2Math.SubtractVV(center2, center)));
- body1.SetLinearVelocity(velocity1);
- body2.SetLinearVelocity(velocity2);
- body1.SetAngularVelocity(angularVelocity);
- body2.SetAngularVelocity(angularVelocity);
- body1.SynchronizeFixtures();
- body2.SynchronizeFixtures();
- return body2;
- }
- b2Body.prototype.Merge = function (other) {
- var f;
- for (f = other.m_fixtureList;
- f;) {
- var next = f.m_next;
- other.m_fixtureCount--;
- f.m_next = this.m_fixtureList;
- this.m_fixtureList = f;
- this.m_fixtureCount++;
- f.m_body = body2;
- f = next;
- }
- body1.m_fixtureCount = 0;
- var body1 = this;
-
- var body2 = other;
- var center1 = body1.GetWorldCenter();
- var center2 = body2.GetWorldCenter();
- var velocity1 = body1.GetLinearVelocity().Copy();
- var velocity2 = body2.GetLinearVelocity().Copy();
- var angular1 = body1.GetAngularVelocity();
- var angular = body2.GetAngularVelocity();
- body1.ResetMassData();
- this.SynchronizeFixtures();
- }
- b2Body.prototype.GetMass = function () {
- return this.m_mass;
- }
- b2Body.prototype.GetInertia = function () {
- return this.m_I;
- }
- b2Body.prototype.GetMassData = function (data) {
- data.mass = this.m_mass;
- data.I = this.m_I;
- data.center.SetV(this.m_sweep.localCenter);
- }
- b2Body.prototype.SetMassData = function (massData) {
- b2Settings.b2Assert(this.m_world.IsLocked() == false);
- if (this.m_world.IsLocked() == true) {
- return;
- }
- if (this.m_type != b2Body.b2_dynamicBody) {
- return;
- }
- this.m_invMass = 0.0;
- this.m_I = 0.0;
- this.m_invI = 0.0;
- this.m_mass = massData.mass;
- if (this.m_mass <= 0.0) {
- this.m_mass = 1.0;
- }
- this.m_invMass = 1.0 / this.m_mass;
- if (massData.I > 0.0 && (this.m_flags & b2Body.e_fixedRotationFlag) == 0) {
- this.m_I = massData.I - this.m_mass * (massData.center.x * massData.center.x + massData.center.y * massData.center.y);
- this.m_invI = 1.0 / this.m_I;
- }
- var oldCenter = this.m_sweep.c.Copy();
- this.m_sweep.localCenter.SetV(massData.center);
- this.m_sweep.c0.SetV(b2Math.MulX(this.m_xf, this.m_sweep.localCenter));
- this.m_sweep.c.SetV(this.m_sweep.c0);
- this.m_linearVelocity.x += this.m_angularVelocity * (-(this.m_sweep.c.y - oldCenter.y));
- this.m_linearVelocity.y += this.m_angularVelocity * (+(this.m_sweep.c.x - oldCenter.x));
- }
- b2Body.prototype.ResetMassData = function () {
- this.m_mass = 0.0;
- this.m_invMass = 0.0;
- this.m_I = 0.0;
- this.m_invI = 0.0;
- this.m_sweep.localCenter.SetZero();
- if (this.m_type == b2Body.b2_staticBody || this.m_type == b2Body.b2_kinematicBody) {
- return;
- }
- var center = b2Vec2.Make(0, 0);
- for (var f = this.m_fixtureList; f; f = f.m_next) {
- if (f.m_density == 0.0) {
- continue;
- }
- var massData = f.GetMassData();
- this.m_mass += massData.mass;
- center.x += massData.center.x * massData.mass;
- center.y += massData.center.y * massData.mass;
- this.m_I += massData.I;
- }
- if (this.m_mass > 0.0) {
- this.m_invMass = 1.0 / this.m_mass;
- center.x *= this.m_invMass;
- center.y *= this.m_invMass;
- }
- else {
- this.m_mass = 1.0;
- this.m_invMass = 1.0;
- }
- if (this.m_I > 0.0 && (this.m_flags & b2Body.e_fixedRotationFlag) == 0) {
- this.m_I -= this.m_mass * (center.x * center.x + center.y * center.y);
- this.m_I *= this.m_inertiaScale;
- b2Settings.b2Assert(this.m_I > 0);
- this.m_invI = 1.0 / this.m_I;
- }
- else {
- this.m_I = 0.0;
- this.m_invI = 0.0;
- }
- var oldCenter = this.m_sweep.c.Copy();
- this.m_sweep.localCenter.SetV(center);
- this.m_sweep.c0.SetV(b2Math.MulX(this.m_xf, this.m_sweep.localCenter));
- this.m_sweep.c.SetV(this.m_sweep.c0);
- this.m_linearVelocity.x += this.m_angularVelocity * (-(this.m_sweep.c.y - oldCenter.y));
- this.m_linearVelocity.y += this.m_angularVelocity * (+(this.m_sweep.c.x - oldCenter.x));
- }
- b2Body.prototype.GetWorldPoint = function (localPoint) {
- var A = this.m_xf.R;
- var u = new b2Vec2(A.col1.x * localPoint.x + A.col2.x * localPoint.y, A.col1.y * localPoint.x + A.col2.y * localPoint.y);
- u.x += this.m_xf.position.x;
- u.y += this.m_xf.position.y;
- return u;
- }
- b2Body.prototype.GetWorldVector = function (localVector) {
- return b2Math.MulMV(this.m_xf.R, localVector);
- }
- b2Body.prototype.GetLocalPoint = function (worldPoint) {
- return b2Math.MulXT(this.m_xf, worldPoint);
- }
- b2Body.prototype.GetLocalVector = function (worldVector) {
- return b2Math.MulTMV(this.m_xf.R, worldVector);
- }
- b2Body.prototype.GetLinearVelocityFromWorldPoint = function (worldPoint) {
- return new b2Vec2(this.m_linearVelocity.x - this.m_angularVelocity * (worldPoint.y - this.m_sweep.c.y), this.m_linearVelocity.y + this.m_angularVelocity * (worldPoint.x - this.m_sweep.c.x));
- }
- b2Body.prototype.GetLinearVelocityFromLocalPoint = function (localPoint) {
- var A = this.m_xf.R;
- var worldPoint = new b2Vec2(A.col1.x * localPoint.x + A.col2.x * localPoint.y, A.col1.y * localPoint.x + A.col2.y * localPoint.y);
- worldPoint.x += this.m_xf.position.x;
- worldPoint.y += this.m_xf.position.y;
- return new b2Vec2(this.m_linearVelocity.x - this.m_angularVelocity * (worldPoint.y - this.m_sweep.c.y), this.m_linearVelocity.y + this.m_angularVelocity * (worldPoint.x - this.m_sweep.c.x));
- }
- b2Body.prototype.GetLinearDamping = function () {
- return this.m_linearDamping;
- }
- b2Body.prototype.SetLinearDamping = function (linearDamping) {
- if (linearDamping === undefined) linearDamping = 0;
- this.m_linearDamping = linearDamping;
- }
- b2Body.prototype.GetAngularDamping = function () {
- return this.m_angularDamping;
- }
- b2Body.prototype.SetAngularDamping = function (angularDamping) {
- if (angularDamping === undefined) angularDamping = 0;
- this.m_angularDamping = angularDamping;
- }
- b2Body.prototype.SetType = function (type) {
- if (type === undefined) type = 0;
- if (this.m_type == type) {
- return;
- }
- this.m_type = type;
- this.ResetMassData();
- if (this.m_type == b2Body.b2_staticBody) {
- this.m_linearVelocity.SetZero();
- this.m_angularVelocity = 0.0;
- }
- this.SetAwake(true);
- this.m_force.SetZero();
- this.m_torque = 0.0;
- for (var ce = this.m_contactList; ce; ce = ce.next) {
- ce.contact.FlagForFiltering();
- }
- }
- b2Body.prototype.GetType = function () {
- return this.m_type;
- }
- b2Body.prototype.SetBullet = function (flag) {
- if (flag) {
- this.m_flags |= b2Body.e_bulletFlag;
- }
- else {
- this.m_flags &= ~b2Body.e_bulletFlag;
- }
- }
- b2Body.prototype.IsBullet = function () {
- return (this.m_flags & b2Body.e_bulletFlag) == b2Body.e_bulletFlag;
- }
- b2Body.prototype.SetSleepingAllowed = function (flag) {
- if (flag) {
- this.m_flags |= b2Body.e_allowSleepFlag;
- }
- else {
- this.m_flags &= ~b2Body.e_allowSleepFlag;
- this.SetAwake(true);
- }
- }
- b2Body.prototype.SetAwake = function (flag) {
- if (flag) {
- this.m_flags |= b2Body.e_awakeFlag;
- this.m_sleepTime = 0.0;
- }
- else {
- this.m_flags &= ~b2Body.e_awakeFlag;
- this.m_sleepTime = 0.0;
- this.m_linearVelocity.SetZero();
- this.m_angularVelocity = 0.0;
- this.m_force.SetZero();
- this.m_torque = 0.0;
- }
- }
- b2Body.prototype.IsAwake = function () {
- return (this.m_flags & b2Body.e_awakeFlag) == b2Body.e_awakeFlag;
- }
- b2Body.prototype.SetFixedRotation = function (fixed) {
- if (fixed) {
- this.m_flags |= b2Body.e_fixedRotationFlag;
- }
- else {
- this.m_flags &= ~b2Body.e_fixedRotationFlag;
- }
- this.ResetMassData();
- }
- b2Body.prototype.IsFixedRotation = function () {
- return (this.m_flags & b2Body.e_fixedRotationFlag) == b2Body.e_fixedRotationFlag;
- }
- b2Body.prototype.SetActive = function (flag) {
- if (flag == this.IsActive()) {
- return;
- }
- var broadPhase;
- var f;
- if (flag) {
- this.m_flags |= b2Body.e_activeFlag;
- broadPhase = this.m_world.m_contactManager.m_broadPhase;
- for (f = this.m_fixtureList;
- f; f = f.m_next) {
- f.CreateProxy(broadPhase, this.m_xf);
- }
- }
- else {
- this.m_flags &= ~b2Body.e_activeFlag;
- broadPhase = this.m_world.m_contactManager.m_broadPhase;
- for (f = this.m_fixtureList;
- f; f = f.m_next) {
- f.DestroyProxy(broadPhase);
- }
- var ce = this.m_contactList;
- while (ce) {
- var ce0 = ce;
- ce = ce.next;
- this.m_world.m_contactManager.Destroy(ce0.contact);
- }
- this.m_contactList = null;
- }
- }
- b2Body.prototype.IsActive = function () {
- return (this.m_flags & b2Body.e_activeFlag) == b2Body.e_activeFlag;
- }
- b2Body.prototype.IsSleepingAllowed = function () {
- return (this.m_flags & b2Body.e_allowSleepFlag) == b2Body.e_allowSleepFlag;
- }
- b2Body.prototype.GetFixtureList = function () {
- return this.m_fixtureList;
- }
- b2Body.prototype.GetJointList = function () {
- return this.m_jointList;
- }
- b2Body.prototype.GetControllerList = function () {
- return this.m_controllerList;
- }
- b2Body.prototype.GetContactList = function () {
- return this.m_contactList;
- }
- b2Body.prototype.GetNext = function () {
- return this.m_next;
- }
- b2Body.prototype.GetUserData = function () {
- return this.m_userData;
- }
- b2Body.prototype.SetUserData = function (data) {
- this.m_userData = data;
- }
- b2Body.prototype.GetWorld = function () {
- return this.m_world;
- }
- b2Body.prototype.b2Body = function (bd, world) {
- this.m_flags = 0;
- if (bd.bullet) {
- this.m_flags |= b2Body.e_bulletFlag;
- }
- if (bd.fixedRotation) {
- this.m_flags |= b2Body.e_fixedRotationFlag;
- }
- if (bd.allowSleep) {
- this.m_flags |= b2Body.e_allowSleepFlag;
- }
- if (bd.awake) {
- this.m_flags |= b2Body.e_awakeFlag;
- }
- if (bd.active) {
- this.m_flags |= b2Body.e_activeFlag;
- }
- this.m_world = world;
- this.m_xf.position.SetV(bd.position);
- this.m_xf.R.Set(bd.angle);
- this.m_sweep.localCenter.SetZero();
- this.m_sweep.t0 = 1.0;
- this.m_sweep.a0 = this.m_sweep.a = bd.angle;
- var tMat = this.m_xf.R;
- var tVec = this.m_sweep.localCenter;
- this.m_sweep.c.x = (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y);
- this.m_sweep.c.y = (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y);
- this.m_sweep.c.x += this.m_xf.position.x;
- this.m_sweep.c.y += this.m_xf.position.y;
- this.m_sweep.c0.SetV(this.m_sweep.c);
- this.m_jointList = null;
- this.m_controllerList = null;
- this.m_contactList = null;
- this.m_controllerCount = 0;
- this.m_prev = null;
- this.m_next = null;
- this.m_linearVelocity.SetV(bd.linearVelocity);
- this.m_angularVelocity = bd.angularVelocity;
- this.m_linearDamping = bd.linearDamping;
- this.m_angularDamping = bd.angularDamping;
- this.m_force.Set(0.0, 0.0);
- this.m_torque = 0.0;
- this.m_sleepTime = 0.0;
- this.m_type = bd.type;
- if (this.m_type == b2Body.b2_dynamicBody) {
- this.m_mass = 1.0;
- this.m_invMass = 1.0;
- }
- else {
- this.m_mass = 0.0;
- this.m_invMass = 0.0;
- }
- this.m_I = 0.0;
- this.m_invI = 0.0;
- this.m_inertiaScale = bd.inertiaScale;
- this.m_userData = bd.userData;
- this.m_fixtureList = null;
- this.m_fixtureCount = 0;
- }
- b2Body.prototype.SynchronizeFixtures = function () {
- var xf1 = b2Body.s_xf1;
- xf1.R.Set(this.m_sweep.a0);
- var tMat = xf1.R;
- var tVec = this.m_sweep.localCenter;
- xf1.position.x = this.m_sweep.c0.x - (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y);
- xf1.position.y = this.m_sweep.c0.y - (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y);
- var f;
- var broadPhase = this.m_world.m_contactManager.m_broadPhase;
- for (f = this.m_fixtureList;
- f; f = f.m_next) {
- f.Synchronize(broadPhase, xf1, this.m_xf);
- }
- }
- b2Body.prototype.SynchronizeTransform = function () {
- this.m_xf.R.Set(this.m_sweep.a);
- var tMat = this.m_xf.R;
- var tVec = this.m_sweep.localCenter;
- this.m_xf.position.x = this.m_sweep.c.x - (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y);
- this.m_xf.position.y = this.m_sweep.c.y - (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y);
- }
- b2Body.prototype.ShouldCollide = function (other) {
- if (this.m_type != b2Body.b2_dynamicBody && other.m_type != b2Body.b2_dynamicBody) {
- return false;
- }
- for (var jn = this.m_jointList; jn; jn = jn.next) {
- if (jn.other == other) if (jn.joint.m_collideConnected == false) {
- return false;
- }
- }
- return true;
- }
- b2Body.prototype.Advance = function (t) {
- if (t === undefined) t = 0;
- this.m_sweep.Advance(t);
- this.m_sweep.c.SetV(this.m_sweep.c0);
- this.m_sweep.a = this.m_sweep.a0;
- this.SynchronizeTransform();
- }
- Box2D.postDefs.push(function () {
- Box2D.Dynamics.b2Body.s_xf1 = new b2Transform();
- Box2D.Dynamics.b2Body.e_islandFlag = 0x0001;
- Box2D.Dynamics.b2Body.e_awakeFlag = 0x0002;
- Box2D.Dynamics.b2Body.e_allowSleepFlag = 0x0004;
- Box2D.Dynamics.b2Body.e_bulletFlag = 0x0008;
- Box2D.Dynamics.b2Body.e_fixedRotationFlag = 0x0010;
- Box2D.Dynamics.b2Body.e_activeFlag = 0x0020;
- Box2D.Dynamics.b2Body.b2_staticBody = 0;
- Box2D.Dynamics.b2Body.b2_kinematicBody = 1;
- Box2D.Dynamics.b2Body.b2_dynamicBody = 2;
- });
- b2BodyDef.b2BodyDef = function () {
- this.position = new b2Vec2();
- this.linearVelocity = new b2Vec2();
- };
- b2BodyDef.prototype.b2BodyDef = function () {
- this.userData = null;
- this.position.Set(0.0, 0.0);
- this.angle = 0.0;
- this.linearVelocity.Set(0, 0);
- this.angularVelocity = 0.0;
- this.linearDamping = 0.0;
- this.angularDamping = 0.0;
- this.allowSleep = true;
- this.awake = true;
- this.fixedRotation = false;
- this.bullet = false;
- this.type = b2Body.b2_staticBody;
- this.active = true;
- this.inertiaScale = 1.0;
- }
- b2ContactFilter.b2ContactFilter = function () {};
- b2ContactFilter.prototype.ShouldCollide = function (fixtureA, fixtureB) {
- var filter1 = fixtureA.GetFilterData();
- var filter2 = fixtureB.GetFilterData();
- if (filter1.groupIndex == filter2.groupIndex && filter1.groupIndex != 0) {
- return filter1.groupIndex > 0;
- }
- var collide = (filter1.maskBits & filter2.categoryBits) != 0 && (filter1.categoryBits & filter2.maskBits) != 0;
- return collide;
- }
- b2ContactFilter.prototype.RayCollide = function (userData, fixture) {
- if (!userData) return true;
- return this.ShouldCollide((userData instanceof b2Fixture ? userData : null), fixture);
- }
- Box2D.postDefs.push(function () {
- Box2D.Dynamics.b2ContactFilter.b2_defaultFilter = new b2ContactFilter();
- });
- b2ContactImpulse.b2ContactImpulse = function () {
- this.normalImpulses = new Vector_a2j_Number(b2Settings.b2_maxManifoldPoints);
- this.tangentImpulses = new Vector_a2j_Number(b2Settings.b2_maxManifoldPoints);
- };
- b2ContactListener.b2ContactListener = function () {};
- b2ContactListener.prototype.BeginContact = function (contact) {}
- b2ContactListener.prototype.EndContact = function (contact) {}
- b2ContactListener.prototype.PreSolve = function (contact, oldManifold) {}
- b2ContactListener.prototype.PostSolve = function (contact, impulse) {}
- Box2D.postDefs.push(function () {
- Box2D.Dynamics.b2ContactListener.b2_defaultListener = new b2ContactListener();
- });
- b2ContactManager.b2ContactManager = function () {};
- b2ContactManager.prototype.b2ContactManager = function () {
- this.m_world = null;
- this.m_contactCount = 0;
- this.m_contactFilter = b2ContactFilter.b2_defaultFilter;
- this.m_contactListener = b2ContactListener.b2_defaultListener;
- this.m_contactFactory = new b2ContactFactory(this.m_allocator);
- this.m_broadPhase = new b2DynamicTreeBroadPhase();
- }
- b2ContactManager.prototype.AddPair = function (proxyUserDataA, proxyUserDataB) {
- var fixtureA = (proxyUserDataA instanceof b2Fixture ? proxyUserDataA : null);
- var fixtureB = (proxyUserDataB instanceof b2Fixture ? proxyUserDataB : null);
- var bodyA = fixtureA.GetBody();
- var bodyB = fixtureB.GetBody();
- if (bodyA == bodyB) return;
- var edge = bodyB.GetContactList();
- while (edge) {
- if (edge.other == bodyA) {
- var fA = edge.contact.GetFixtureA();
- var fB = edge.contact.GetFixtureB();
- if (fA == fixtureA && fB == fixtureB) return;
- if (fA == fixtureB && fB == fixtureA) return;
- }
- edge = edge.next;
- }
- if (bodyB.ShouldCollide(bodyA) == false) {
- return;
- }
- if (this.m_contactFilter.ShouldCollide(fixtureA, fixtureB) == false) {
- return;
- }
- var c = this.m_contactFactory.Create(fixtureA, fixtureB);
- fixtureA = c.GetFixtureA();
- fixtureB = c.GetFixtureB();
- bodyA = fixtureA.m_body;
- bodyB = fixtureB.m_body;
- c.m_prev = null;
- c.m_next = this.m_world.m_contactList;
- if (this.m_world.m_contactList != null) {
- this.m_world.m_contactList.m_prev = c;
- }
- this.m_world.m_contactList = c;
- c.m_nodeA.contact = c;
- c.m_nodeA.other = bodyB;
- c.m_nodeA.prev = null;
- c.m_nodeA.next = bodyA.m_contactList;
- if (bodyA.m_contactList != null) {
- bodyA.m_contactList.prev = c.m_nodeA;
- }
- bodyA.m_contactList = c.m_nodeA;
- c.m_nodeB.contact = c;
- c.m_nodeB.other = bodyA;
- c.m_nodeB.prev = null;
- c.m_nodeB.next = bodyB.m_contactList;
- if (bodyB.m_contactList != null) {
- bodyB.m_contactList.prev = c.m_nodeB;
- }
- bodyB.m_contactList = c.m_nodeB;
- ++this.m_world.m_contactCount;
- return;
- }
- b2ContactManager.prototype.FindNewContacts = function () {
- this.m_broadPhase.UpdatePairs(Box2D.generateCallback(this, this.AddPair));
- }
- b2ContactManager.prototype.Destroy = function (c) {
- var fixtureA = c.GetFixtureA();
- var fixtureB = c.GetFixtureB();
- var bodyA = fixtureA.GetBody();
- var bodyB = fixtureB.GetBody();
- if (c.IsTouching()) {
- this.m_contactListener.EndContact(c);
- }
- if (c.m_prev) {
- c.m_prev.m_next = c.m_next;
- }
- if (c.m_next) {
- c.m_next.m_prev = c.m_prev;
- }
- if (c == this.m_world.m_contactList) {
- this.m_world.m_contactList = c.m_next;
- }
- if (c.m_nodeA.prev) {
- c.m_nodeA.prev.next = c.m_nodeA.next;
- }
- if (c.m_nodeA.next) {
- c.m_nodeA.next.prev = c.m_nodeA.prev;
- }
- if (c.m_nodeA == bodyA.m_contactList) {
- bodyA.m_contactList = c.m_nodeA.next;
- }
- if (c.m_nodeB.prev) {
- c.m_nodeB.prev.next = c.m_nodeB.next;
- }
- if (c.m_nodeB.next) {
- c.m_nodeB.next.prev = c.m_nodeB.prev;
- }
- if (c.m_nodeB == bodyB.m_contactList) {
- bodyB.m_contactList = c.m_nodeB.next;
- }
- this.m_contactFactory.Destroy(c);
- --this.m_contactCount;
- }
- b2ContactManager.prototype.Collide = function () {
- var c = this.m_world.m_contactList;
- while (c) {
- var fixtureA = c.GetFixtureA();
- var fixtureB = c.GetFixtureB();
- var bodyA = fixtureA.GetBody();
- var bodyB = fixtureB.GetBody();
- if (bodyA.IsAwake() == false && bodyB.IsAwake() == false) {
- c = c.GetNext();
- continue;
- }
- if (c.m_flags & b2Contact.e_filterFlag) {
- if (bodyB.ShouldCollide(bodyA) == false) {
- var cNuke = c;
- c = cNuke.GetNext();
- this.Destroy(cNuke);
- continue;
- }
- if (this.m_contactFilter.ShouldCollide(fixtureA, fixtureB) == false) {
- cNuke = c;
- c = cNuke.GetNext();
- this.Destroy(cNuke);
- continue;
- }
- c.m_flags &= ~b2Contact.e_filterFlag;
- }
- var proxyA = fixtureA.m_proxy;
- var proxyB = fixtureB.m_proxy;
- var overlap = this.m_broadPhase.TestOverlap(proxyA, proxyB);
- if (overlap == false) {
- cNuke = c;
- c = cNuke.GetNext();
- this.Destroy(cNuke);
- continue;
- }
- c.Update(this.m_contactListener);
- c = c.GetNext();
- }
- }
- Box2D.postDefs.push(function () {
- Box2D.Dynamics.b2ContactManager.s_evalCP = new b2ContactPoint();
- });
- b2DebugDraw.b2DebugDraw = function () {};
- b2DebugDraw.prototype.b2DebugDraw = function () {}
- b2DebugDraw.prototype.SetFlags = function (flags) {
- if (flags === undefined) flags = 0;
- }
- b2DebugDraw.prototype.GetFlags = function () {}
- b2DebugDraw.prototype.AppendFlags = function (flags) {
- if (flags === undefined) flags = 0;
- }
- b2DebugDraw.prototype.ClearFlags = function (flags) {
- if (flags === undefined) flags = 0;
- }
- b2DebugDraw.prototype.SetSprite = function (sprite) {}
- b2DebugDraw.prototype.GetSprite = function () {}
- b2DebugDraw.prototype.SetDrawScale = function (drawScale) {
- if (drawScale === undefined) drawScale = 0;
- }
- b2DebugDraw.prototype.GetDrawScale = function () {}
- b2DebugDraw.prototype.SetLineThickness = function (lineThickness) {
- if (lineThickness === undefined) lineThickness = 0;
- }
- b2DebugDraw.prototype.GetLineThickness = function () {}
- b2DebugDraw.prototype.SetAlpha = function (alpha) {
- if (alpha === undefined) alpha = 0;
- }
- b2DebugDraw.prototype.GetAlpha = function () {}
- b2DebugDraw.prototype.SetFillAlpha = function (alpha) {
- if (alpha === undefined) alpha = 0;
- }
- b2DebugDraw.prototype.GetFillAlpha = function () {}
- b2DebugDraw.prototype.SetXFormScale = function (xformScale) {
- if (xformScale === undefined) xformScale = 0;
- }
- b2DebugDraw.prototype.GetXFormScale = function () {}
- b2DebugDraw.prototype.DrawPolygon = function (vertices, vertexCount, color) {
- if (vertexCount === undefined) vertexCount = 0;
- }
- b2DebugDraw.prototype.DrawSolidPolygon = function (vertices, vertexCount, color) {
- if (vertexCount === undefined) vertexCount = 0;
- }
- b2DebugDraw.prototype.DrawCircle = function (center, radius, color) {
- if (radius === undefined) radius = 0;
- }
- b2DebugDraw.prototype.DrawSolidCircle = function (center, radius, axis, color) {
- if (radius === undefined) radius = 0;
- }
- b2DebugDraw.prototype.DrawSegment = function (p1, p2, color) {}
- b2DebugDraw.prototype.DrawTransform = function (xf) {}
- Box2D.postDefs.push(function () {
- Box2D.Dynamics.b2DebugDraw.e_shapeBit = 0x0001;
- Box2D.Dynamics.b2DebugDraw.e_jointBit = 0x0002;
- Box2D.Dynamics.b2DebugDraw.e_aabbBit = 0x0004;
- Box2D.Dynamics.b2DebugDraw.e_pairBit = 0x0008;
- Box2D.Dynamics.b2DebugDraw.e_centerOfMassBit = 0x0010;
- Box2D.Dynamics.b2DebugDraw.e_controllerBit = 0x0020;
- });
- b2DestructionListener.b2DestructionListener = function () {};
- b2DestructionListener.prototype.SayGoodbyeJoint = function (joint) {}
- b2DestructionListener.prototype.SayGoodbyeFixture = function (fixture) {}
- b2FilterData.b2FilterData = function () {
- this.categoryBits = 0x0001;
- this.maskBits = 0xFFFF;
- this.groupIndex = 0;
- };
- b2FilterData.prototype.Copy = function () {
- var copy = new b2FilterData();
- copy.categoryBits = this.categoryBits;
- copy.maskBits = this.maskBits;
- copy.groupIndex = this.groupIndex;
- return copy;
- }
- b2Fixture.b2Fixture = function () {
- this.m_filter = new b2FilterData();
- };
- b2Fixture.prototype.GetType = function () {
- return this.m_shape.GetType();
- }
- b2Fixture.prototype.GetShape = function () {
- return this.m_shape;
- }
- b2Fixture.prototype.SetSensor = function (sensor) {
- if (this.m_isSensor == sensor) return;
- this.m_isSensor = sensor;
- if (this.m_body == null) return;
- var edge = this.m_body.GetContactList();
- while (edge) {
- var contact = edge.contact;
- var fixtureA = contact.GetFixtureA();
- var fixtureB = contact.GetFixtureB();
- if (fixtureA == this || fixtureB == this) contact.SetSensor(fixtureA.IsSensor() || fixtureB.IsSensor());
- edge = edge.next;
- }
- }
- b2Fixture.prototype.IsSensor = function () {
- return this.m_isSensor;
- }
- b2Fixture.prototype.SetFilterData = function (filter) {
- this.m_filter = filter.Copy();
- if (this.m_body) return;
- var edge = this.m_body.GetContactList();
- while (edge) {
- var contact = edge.contact;
- var fixtureA = contact.GetFixtureA();
- var fixtureB = contact.GetFixtureB();
- if (fixtureA == this || fixtureB == this) contact.FlagForFiltering();
- edge = edge.next;
- }
- }
- b2Fixture.prototype.GetFilterData = function () {
- return this.m_filter.Copy();
- }
- b2Fixture.prototype.GetBody = function () {
- return this.m_body;
- }
- b2Fixture.prototype.GetNext = function () {
- return this.m_next;
- }
- b2Fixture.prototype.GetUserData = function () {
- return this.m_userData;
- }
- b2Fixture.prototype.SetUserData = function (data) {
- this.m_userData = data;
- }
- b2Fixture.prototype.TestPoint = function (p) {
- return this.m_shape.TestPoint(this.m_body.GetTransform(), p);
- }
- b2Fixture.prototype.RayCast = function (output, input) {
- return this.m_shape.RayCast(output, input, this.m_body.GetTransform());
- }
- b2Fixture.prototype.GetMassData = function (massData) {
- if (massData === undefined) massData = null;
- if (massData == null) {
- massData = new b2MassData();
- }
- this.m_shape.ComputeMass(massData, this.m_density);
- return massData;
- }
- b2Fixture.prototype.SetDensity = function (density) {
- if (density === undefined) density = 0;
- this.m_density = density;
- }
- b2Fixture.prototype.GetDensity = function () {
- return this.m_density;
- }
- b2Fixture.prototype.GetFriction = function () {
- return this.m_friction;
- }
- b2Fixture.prototype.SetFriction = function (friction) {
- if (friction === undefined) friction = 0;
- this.m_friction = friction;
- }
- b2Fixture.prototype.GetRestitution = function () {
- return this.m_restitution;
- }
- b2Fixture.prototype.SetRestitution = function (restitution) {
- if (restitution === undefined) restitution = 0;
- this.m_restitution = restitution;
- }
- b2Fixture.prototype.GetAABB = function () {
- return this.m_aabb;
- }
- b2Fixture.prototype.b2Fixture = function () {
- this.m_aabb = new b2AABB();
- this.m_userData = null;
- this.m_body = null;
- this.m_next = null;
- this.m_shape = null;
- this.m_density = 0.0;
- this.m_friction = 0.0;
- this.m_restitution = 0.0;
- }
- b2Fixture.prototype.Create = function (body, xf, def) {
- this.m_userData = def.userData;
- this.m_friction = def.friction;
- this.m_restitution = def.restitution;
- this.m_body = body;
- this.m_next = null;
- this.m_filter = def.filter.Copy();
- this.m_isSensor = def.isSensor;
- this.m_shape = def.shape.Copy();
- this.m_density = def.density;
- }
- b2Fixture.prototype.Destroy = function () {
- this.m_shape = null;
- }
- b2Fixture.prototype.CreateProxy = function (broadPhase, xf) {
- this.m_shape.ComputeAABB(this.m_aabb, xf);
- this.m_proxy = broadPhase.CreateProxy(this.m_aabb, this);
- }
- b2Fixture.prototype.DestroyProxy = function (broadPhase) {
- if (this.m_proxy == null) {
- return;
- }
- broadPhase.DestroyProxy(this.m_proxy);
- this.m_proxy = null;
- }
- b2Fixture.prototype.Synchronize = function (broadPhase, transform1, transform2) {
- if (!this.m_proxy) return;
- var aabb1 = new b2AABB();
- var aabb2 = new b2AABB();
- this.m_shape.ComputeAABB(aabb1, transform1);
- this.m_shape.ComputeAABB(aabb2, transform2);
- this.m_aabb.Combine(aabb1, aabb2);
- var displacement = b2Math.SubtractVV(transform2.position, transform1.position);
- broadPhase.MoveProxy(this.m_proxy, this.m_aabb, displacement);
- }
- b2FixtureDef.b2FixtureDef = function () {
- this.filter = new b2FilterData();
- };
- b2FixtureDef.prototype.b2FixtureDef = function () {
- this.shape = null;
- this.userData = null;
- this.friction = 0.2;
- this.restitution = 0.0;
- this.density = 0.0;
- this.filter.categoryBits = 0x0001;
- this.filter.maskBits = 0xFFFF;
- this.filter.groupIndex = 0;
- this.isSensor = false;
- }
- b2Island.b2Island = function () {};
- b2Island.prototype.b2Island = function () {
- this.m_bodies = new Vector();
- this.m_contacts = new Vector();
- this.m_joints = new Vector();
- }
- b2Island.prototype.Initialize = function (bodyCapacity, contactCapacity, jointCapacity, allocator, listener, contactSolver) {
- if (bodyCapacity === undefined) bodyCapacity = 0;
- if (contactCapacity === undefined) contactCapacity = 0;
- if (jointCapacity === undefined) jointCapacity = 0;
- var i = 0;
- this.m_bodyCapacity = bodyCapacity;
- this.m_contactCapacity = contactCapacity;
- this.m_jointCapacity = jointCapacity;
- this.m_bodyCount = 0;
- this.m_contactCount = 0;
- this.m_jointCount = 0;
- this.m_allocator = allocator;
- this.m_listener = listener;
- this.m_contactSolver = contactSolver;
- for (i = this.m_bodies.length;
- i < bodyCapacity; i++)
- this.m_bodies[i] = null;
- for (i = this.m_contacts.length;
- i < contactCapacity; i++)
- this.m_contacts[i] = null;
- for (i = this.m_joints.length;
- i < jointCapacity; i++)
- this.m_joints[i] = null;
- }
- b2Island.prototype.Clear = function () {
- this.m_bodyCount = 0;
- this.m_contactCount = 0;
- this.m_jointCount = 0;
- }
- b2Island.prototype.Solve = function (step, gravity, allowSleep) {
- var i = 0;
- var j = 0;
- var b;
- var joint;
- for (i = 0;
- i < this.m_bodyCount; ++i) {
- b = this.m_bodies[i];
- if (b.GetType() != b2Body.b2_dynamicBody) continue;
- b.m_linearVelocity.x += step.dt * (gravity.x + b.m_invMass * b.m_force.x);
- b.m_linearVelocity.y += step.dt * (gravity.y + b.m_invMass * b.m_force.y);
- b.m_angularVelocity += step.dt * b.m_invI * b.m_torque;
- b.m_linearVelocity.Multiply(b2Math.Clamp(1.0 - step.dt * b.m_linearDamping, 0.0, 1.0));
- b.m_angularVelocity *= b2Math.Clamp(1.0 - step.dt * b.m_angularDamping, 0.0, 1.0);
- }
- this.m_contactSolver.Initialize(step, this.m_contacts, this.m_contactCount, this.m_allocator);
- var contactSolver = this.m_contactSolver;
- contactSolver.InitVelocityConstraints(step);
- for (i = 0;
- i < this.m_jointCount; ++i) {
- joint = this.m_joints[i];
- joint.InitVelocityConstraints(step);
- }
- for (i = 0;
- i < step.velocityIterations; ++i) {
- for (j = 0;
- j < this.m_jointCount; ++j) {
- joint = this.m_joints[j];
- joint.SolveVelocityConstraints(step);
- }
- contactSolver.SolveVelocityConstraints();
- }
- for (i = 0;
- i < this.m_jointCount; ++i) {
- joint = this.m_joints[i];
- joint.FinalizeVelocityConstraints();
- }
- contactSolver.FinalizeVelocityConstraints();
- for (i = 0;
- i < this.m_bodyCount; ++i) {
- b = this.m_bodies[i];
- if (b.GetType() == b2Body.b2_staticBody) continue;
- var translationX = step.dt * b.m_linearVelocity.x;
- var translationY = step.dt * b.m_linearVelocity.y;
- if ((translationX * translationX + translationY * translationY) > b2Settings.b2_maxTranslationSquared) {
- b.m_linearVelocity.Normalize();
- b.m_linearVelocity.x *= b2Settings.b2_maxTranslation * step.inv_dt;
- b.m_linearVelocity.y *= b2Settings.b2_maxTranslation * step.inv_dt;
- }
- var rotation = step.dt * b.m_angularVelocity;
- if (rotation * rotation > b2Settings.b2_maxRotationSquared) {
- if (b.m_angularVelocity < 0.0) {
- b.m_angularVelocity = (-b2Settings.b2_maxRotation * step.inv_dt);
- }
- else {
- b.m_angularVelocity = b2Settings.b2_maxRotation * step.inv_dt;
- }
- }
- b.m_sweep.c0.SetV(b.m_sweep.c);
- b.m_sweep.a0 = b.m_sweep.a;
- b.m_sweep.c.x += step.dt * b.m_linearVelocity.x;
- b.m_sweep.c.y += step.dt * b.m_linearVelocity.y;
- b.m_sweep.a += step.dt * b.m_angularVelocity;
- b.SynchronizeTransform();
- }
- for (i = 0;
- i < step.positionIterations; ++i) {
- var contactsOkay = contactSolver.SolvePositionConstraints(b2Settings.b2_contactBaumgarte);
- var jointsOkay = true;
- for (j = 0;
- j < this.m_jointCount; ++j) {
- joint = this.m_joints[j];
- var jointOkay = joint.SolvePositionConstraints(b2Settings.b2_contactBaumgarte);
- jointsOkay = jointsOkay && jointOkay;
- }
- if (contactsOkay && jointsOkay) {
- break;
- }
- }
- this.Report(contactSolver.m_constraints);
- if (allowSleep) {
- var minSleepTime = Number.MAX_VALUE;
- var linTolSqr = b2Settings.b2_linearSleepTolerance * b2Settings.b2_linearSleepTolerance;
- var angTolSqr = b2Settings.b2_angularSleepTolerance * b2Settings.b2_angularSleepTolerance;
- for (i = 0;
- i < this.m_bodyCount; ++i) {
- b = this.m_bodies[i];
- if (b.GetType() == b2Body.b2_staticBody) {
- continue;
- }
- if ((b.m_flags & b2Body.e_allowSleepFlag) == 0) {
- b.m_sleepTime = 0.0;
- minSleepTime = 0.0;
- }
- if ((b.m_flags & b2Body.e_allowSleepFlag) == 0 || b.m_angularVelocity * b.m_angularVelocity > angTolSqr || b2Math.Dot(b.m_linearVelocity, b.m_linearVelocity) > linTolSqr) {
- b.m_sleepTime = 0.0;
- minSleepTime = 0.0;
- }
- else {
- b.m_sleepTime += step.dt;
- minSleepTime = b2Math.Min(minSleepTime, b.m_sleepTime);
- }
- }
- if (minSleepTime >= b2Settings.b2_timeToSleep) {
- for (i = 0;
- i < this.m_bodyCount; ++i) {
- b = this.m_bodies[i];
- b.SetAwake(false);
- }
- }
- }
- }
- b2Island.prototype.SolveTOI = function (subStep) {
- var i = 0;
- var j = 0;
- this.m_contactSolver.Initialize(subStep, this.m_contacts, this.m_contactCount, this.m_allocator);
- var contactSolver = this.m_contactSolver;
- for (i = 0;
- i < this.m_jointCount; ++i) {
- this.m_joints[i].InitVelocityConstraints(subStep);
- }
- for (i = 0;
- i < subStep.velocityIterations; ++i) {
- contactSolver.SolveVelocityConstraints();
- for (j = 0;
- j < this.m_jointCount; ++j) {
- this.m_joints[j].SolveVelocityConstraints(subStep);
- }
- }
- for (i = 0;
- i < this.m_bodyCount; ++i) {
- var b = this.m_bodies[i];
- if (b.GetType() == b2Body.b2_staticBody) continue;
- var translationX = subStep.dt * b.m_linearVelocity.x;
- var translationY = subStep.dt * b.m_linearVelocity.y;
- if ((translationX * translationX + translationY * translationY) > b2Settings.b2_maxTranslationSquared) {
- b.m_linearVelocity.Normalize();
- b.m_linearVelocity.x *= b2Settings.b2_maxTranslation * subStep.inv_dt;
- b.m_linearVelocity.y *= b2Settings.b2_maxTranslation * subStep.inv_dt;
- }
- var rotation = subStep.dt * b.m_angularVelocity;
- if (rotation * rotation > b2Settings.b2_maxRotationSquared) {
- if (b.m_angularVelocity < 0.0) {
- b.m_angularVelocity = (-b2Settings.b2_maxRotation * subStep.inv_dt);
- }
- else {
- b.m_angularVelocity = b2Settings.b2_maxRotation * subStep.inv_dt;
- }
- }
- b.m_sweep.c0.SetV(b.m_sweep.c);
- b.m_sweep.a0 = b.m_sweep.a;
- b.m_sweep.c.x += subStep.dt * b.m_linearVelocity.x;
- b.m_sweep.c.y += subStep.dt * b.m_linearVelocity.y;
- b.m_sweep.a += subStep.dt * b.m_angularVelocity;
- b.SynchronizeTransform();
- }
- var k_toiBaumgarte = 0.75;
- for (i = 0;
- i < subStep.positionIterations; ++i) {
- var contactsOkay = contactSolver.SolvePositionConstraints(k_toiBaumgarte);
- var jointsOkay = true;
- for (j = 0;
- j < this.m_jointCount; ++j) {
- var jointOkay = this.m_joints[j].SolvePositionConstraints(b2Settings.b2_contactBaumgarte);
- jointsOkay = jointsOkay && jointOkay;
- }
- if (contactsOkay && jointsOkay) {
- break;
- }
- }
- this.Report(contactSolver.m_constraints);
- }
- b2Island.prototype.Report = function (constraints) {
- if (this.m_listener == null) {
- return;
- }
- for (var i = 0; i < this.m_contactCount; ++i) {
- var c = this.m_contacts[i];
- var cc = constraints[i];
- for (var j = 0; j < cc.pointCount; ++j) {
- b2Island.s_impulse.normalImpulses[j] = cc.points[j].normalImpulse;
- b2Island.s_impulse.tangentImpulses[j] = cc.points[j].tangentImpulse;
- }
- this.m_listener.PostSolve(c, b2Island.s_impulse);
- }
- }
- b2Island.prototype.AddBody = function (body) {
- body.m_islandIndex = this.m_bodyCount;
- this.m_bodies[this.m_bodyCount++] = body;
- }
- b2Island.prototype.AddContact = function (contact) {
- this.m_contacts[this.m_contactCount++] = contact;
- }
- b2Island.prototype.AddJoint = function (joint) {
- this.m_joints[this.m_jointCount++] = joint;
- }
- Box2D.postDefs.push(function () {
- Box2D.Dynamics.b2Island.s_impulse = new b2ContactImpulse();
- });
- b2TimeStep.b2TimeStep = function () {};
- b2TimeStep.prototype.Set = function (step) {
- this.dt = step.dt;
- this.inv_dt = step.inv_dt;
- this.positionIterations = step.positionIterations;
- this.velocityIterations = step.velocityIterations;
- this.warmStarting = step.warmStarting;
- }
- b2World.b2World = function () {
- this.s_stack = new Vector();
- this.m_contactManager = new b2ContactManager();
- this.m_contactSolver = new b2ContactSolver();
- this.m_island = new b2Island();
- };
- b2World.prototype.b2World = function (gravity, doSleep) {
- this.m_destructionListener = null;
- this.m_debugDraw = null;
- this.m_bodyList = null;
- this.m_contactList = null;
- this.m_jointList = null;
- this.m_controllerList = null;
- this.m_bodyCount = 0;
- this.m_contactCount = 0;
- this.m_jointCount = 0;
- this.m_controllerCount = 0;
- b2World.m_warmStarting = true;
- b2World.m_continuousPhysics = true;
- this.m_allowSleep = doSleep;
- this.m_gravity = gravity;
- this.m_inv_dt0 = 0.0;
- this.m_contactManager.m_world = this;
- var bd = new b2BodyDef();
- this.m_groundBody = this.CreateBody(bd);
- }
- b2World.prototype.SetDestructionListener = function (listener) {
- this.m_destructionListener = listener;
- }
- b2World.prototype.SetContactFilter = function (filter) {
- this.m_contactManager.m_contactFilter = filter;
- }
- b2World.prototype.SetContactListener = function (listener) {
- this.m_contactManager.m_contactListener = listener;
- }
- b2World.prototype.SetDebugDraw = function (debugDraw) {
- this.m_debugDraw = debugDraw;
- }
- b2World.prototype.SetBroadPhase = function (broadPhase) {
- var oldBroadPhase = this.m_contactManager.m_broadPhase;
- this.m_contactManager.m_broadPhase = broadPhase;
- for (var b = this.m_bodyList; b; b = b.m_next) {
- for (var f = b.m_fixtureList; f; f = f.m_next) {
- f.m_proxy = broadPhase.CreateProxy(oldBroadPhase.GetFatAABB(f.m_proxy), f);
- }
- }
- }
- b2World.prototype.Validate = function () {
- this.m_contactManager.m_broadPhase.Validate();
- }
- b2World.prototype.GetProxyCount = function () {
- return this.m_contactManager.m_broadPhase.GetProxyCount();
- }
- b2World.prototype.CreateBody = function (def) {
- if (this.IsLocked() == true) {
- return null;
- }
- var b = new b2Body(def, this);
- b.m_prev = null;
- b.m_next = this.m_bodyList;
- if (this.m_bodyList) {
- this.m_bodyList.m_prev = b;
- }
- this.m_bodyList = b;
- ++this.m_bodyCount;
- return b;
- }
- b2World.prototype.DestroyBody = function (b) {
- if (this.IsLocked() == true) {
- return;
- }
- var jn = b.m_jointList;
- while (jn) {
- var jn0 = jn;
- jn = jn.next;
- if (this.m_destructionListener) {
- this.m_destructionListener.SayGoodbyeJoint(jn0.joint);
- }
- this.DestroyJoint(jn0.joint);
- }
- var coe = b.m_controllerList;
- while (coe) {
- var coe0 = coe;
- coe = coe.nextController;
- coe0.controller.RemoveBody(b);
- }
- var ce = b.m_contactList;
- while (ce) {
- var ce0 = ce;
- ce = ce.next;
- this.m_contactManager.Destroy(ce0.contact);
- }
- b.m_contactList = null;
- var f = b.m_fixtureList;
- while (f) {
- var f0 = f;
- f = f.m_next;
- if (this.m_destructionListener) {
- this.m_destructionListener.SayGoodbyeFixture(f0);
- }
- f0.DestroyProxy(this.m_contactManager.m_broadPhase);
- f0.Destroy();
- }
- b.m_fixtureList = null;
- b.m_fixtureCount = 0;
- if (b.m_prev) {
- b.m_prev.m_next = b.m_next;
- }
- if (b.m_next) {
- b.m_next.m_prev = b.m_prev;
- }
- if (b == this.m_bodyList) {
- this.m_bodyList = b.m_next;
- }--this.m_bodyCount;
- }
- b2World.prototype.CreateJoint = function (def) {
- var j = b2Joint.Create(def, null);
- j.m_prev = null;
- j.m_next = this.m_jointList;
- if (this.m_jointList) {
- this.m_jointList.m_prev = j;
- }
- this.m_jointList = j;
- ++this.m_jointCount;
- j.m_edgeA.joint = j;
- j.m_edgeA.other = j.m_bodyB;
- j.m_edgeA.prev = null;
- j.m_edgeA.next = j.m_bodyA.m_jointList;
- if (j.m_bodyA.m_jointList) j.m_bodyA.m_jointList.prev = j.m_edgeA;
- j.m_bodyA.m_jointList = j.m_edgeA;
- j.m_edgeB.joint = j;
- j.m_edgeB.other = j.m_bodyA;
- j.m_edgeB.prev = null;
- j.m_edgeB.next = j.m_bodyB.m_jointList;
- if (j.m_bodyB.m_jointList) j.m_bodyB.m_jointList.prev = j.m_edgeB;
- j.m_bodyB.m_jointList = j.m_edgeB;
- var bodyA = def.bodyA;
- var bodyB = def.bodyB;
- if (def.collideConnected == false) {
- var edge = bodyB.GetContactList();
- while (edge) {
- if (edge.other == bodyA) {
- edge.contact.FlagForFiltering();
- }
- edge = edge.next;
- }
- }
- return j;
- }
- b2World.prototype.DestroyJoint = function (j) {
- var collideConnected = j.m_collideConnected;
- if (j.m_prev) {
- j.m_prev.m_next = j.m_next;
- }
- if (j.m_next) {
- j.m_next.m_prev = j.m_prev;
- }
- if (j == this.m_jointList) {
- this.m_jointList = j.m_next;
- }
- var bodyA = j.m_bodyA;
- var bodyB = j.m_bodyB;
- bodyA.SetAwake(true);
- bodyB.SetAwake(true);
- if (j.m_edgeA.prev) {
- j.m_edgeA.prev.next = j.m_edgeA.next;
- }
- if (j.m_edgeA.next) {
- j.m_edgeA.next.prev = j.m_edgeA.prev;
- }
- if (j.m_edgeA == bodyA.m_jointList) {
- bodyA.m_jointList = j.m_edgeA.next;
- }
- j.m_edgeA.prev = null;
- j.m_edgeA.next = null;
- if (j.m_edgeB.prev) {
- j.m_edgeB.prev.next = j.m_edgeB.next;
- }
- if (j.m_edgeB.next) {
- j.m_edgeB.next.prev = j.m_edgeB.prev;
- }
- if (j.m_edgeB == bodyB.m_jointList) {
- bodyB.m_jointList = j.m_edgeB.next;
- }
- j.m_edgeB.prev = null;
- j.m_edgeB.next = null;
- b2Joint.Destroy(j, null);
- --this.m_jointCount;
- if (collideConnected == false) {
- var edge = bodyB.GetContactList();
- while (edge) {
- if (edge.other == bodyA) {
- edge.contact.FlagForFiltering();
- }
- edge = edge.next;
- }
- }
- }
- b2World.prototype.AddController = function (c) {
- c.m_next = this.m_controllerList;
- c.m_prev = null;
- this.m_controllerList = c;
- c.m_world = this;
- this.m_controllerCount++;
- return c;
- }
- b2World.prototype.RemoveController = function (c) {
- if (c.m_prev) c.m_prev.m_next = c.m_next;
- if (c.m_next) c.m_next.m_prev = c.m_prev;
- if (this.m_controllerList == c) this.m_controllerList = c.m_next;
- this.m_controllerCount--;
- }
- b2World.prototype.CreateController = function (controller) {
- if (controller.m_world != this) throw new Error("Controller can only be a member of one world");
- controller.m_next = this.m_controllerList;
- controller.m_prev = null;
- if (this.m_controllerList) this.m_controllerList.m_prev = controller;
- this.m_controllerList = controller;
- ++this.m_controllerCount;
- controller.m_world = this;
- return controller;
- }
- b2World.prototype.DestroyController = function (controller) {
- controller.Clear();
- if (controller.m_next) controller.m_next.m_prev = controller.m_prev;
- if (controller.m_prev) controller.m_prev.m_next = controller.m_next;
- if (controller == this.m_controllerList) this.m_controllerList = controller.m_next;
- --this.m_controllerCount;
- }
- b2World.prototype.SetWarmStarting = function (flag) {
- b2World.m_warmStarting = flag;
- }
- b2World.prototype.SetContinuousPhysics = function (flag) {
- b2World.m_continuousPhysics = flag;
- }
- b2World.prototype.GetBodyCount = function () {
- return this.m_bodyCount;
- }
- b2World.prototype.GetJointCount = function () {
- return this.m_jointCount;
- }
- b2World.prototype.GetContactCount = function () {
- return this.m_contactCount;
- }
- b2World.prototype.SetGravity = function (gravity) {
- this.m_gravity = gravity;
- }
- b2World.prototype.GetGravity = function () {
- return this.m_gravity;
- }
- b2World.prototype.GetGroundBody = function () {
- return this.m_groundBody;
- }
- b2World.prototype.Step = function (dt, velocityIterations, positionIterations) {
- if (dt === undefined) dt = 0;
- if (velocityIterations === undefined) velocityIterations = 0;
- if (positionIterations === undefined) positionIterations = 0;
- if (this.m_flags & b2World.e_newFixture) {
- this.m_contactManager.FindNewContacts();
- this.m_flags &= ~b2World.e_newFixture;
- }
- this.m_flags |= b2World.e_locked;
- var step = b2World.s_timestep2;
- step.dt = dt;
- step.velocityIterations = velocityIterations;
- step.positionIterations = positionIterations;
- if (dt > 0.0) {
- step.inv_dt = 1.0 / dt;
- }
- else {
- step.inv_dt = 0.0;
- }
- step.dtRatio = this.m_inv_dt0 * dt;
- step.warmStarting = b2World.m_warmStarting;
- this.m_contactManager.Collide();
- if (step.dt > 0.0) {
- this.Solve(step);
- }
- if (b2World.m_continuousPhysics && step.dt > 0.0) {
- this.SolveTOI(step);
- }
- if (step.dt > 0.0) {
- this.m_inv_dt0 = step.inv_dt;
- }
- this.m_flags &= ~b2World.e_locked;
- }
- b2World.prototype.ClearForces = function () {
- for (var body = this.m_bodyList; body; body = body.m_next) {
- body.m_force.SetZero();
- body.m_torque = 0.0;
- }
- }
- b2World.prototype.DrawDebugData = function () {
- if (this.m_debugDraw == null) {
- return;
- }
- this.m_debugDraw.m_sprite.graphics.clear();
- var flags = this.m_debugDraw.GetFlags();
- var i = 0;
- var b;
- var f;
- var s;
- var j;
- var bp;
- var invQ = new b2Vec2;
- var x1 = new b2Vec2;
- var x2 = new b2Vec2;
- var xf;
- var b1 = new b2AABB();
- var b2 = new b2AABB();
- var vs = [new b2Vec2(), new b2Vec2(), new b2Vec2(), new b2Vec2()];
- var color = new b2Color(0, 0, 0);
- if (flags & b2DebugDraw.e_shapeBit) {
- for (b = this.m_bodyList;
- b; b = b.m_next) {
- xf = b.m_xf;
- for (f = b.GetFixtureList();
- f; f = f.m_next) {
- s = f.GetShape();
- if (b.IsActive() == false) {
- color.Set(0.5, 0.5, 0.3);
- this.DrawShape(s, xf, color);
- }
- else if (b.GetType() == b2Body.b2_staticBody) {
- color.Set(0.5, 0.9, 0.5);
- this.DrawShape(s, xf, color);
- }
- else if (b.GetType() == b2Body.b2_kinematicBody) {
- color.Set(0.5, 0.5, 0.9);
- this.DrawShape(s, xf, color);
- }
- else if (b.IsAwake() == false) {
- color.Set(0.6, 0.6, 0.6);
- this.DrawShape(s, xf, color);
- }
- else {
- color.Set(0.9, 0.7, 0.7);
- this.DrawShape(s, xf, color);
- }
- }
- }
- }
- if (flags & b2DebugDraw.e_jointBit) {
- for (j = this.m_jointList;
- j; j = j.m_next) {
- this.DrawJoint(j);
- }
- }
- if (flags & b2DebugDraw.e_controllerBit) {
- for (var c = this.m_controllerList; c; c = c.m_next) {
- c.Draw(this.m_debugDraw);
- }
- }
- if (flags & b2DebugDraw.e_pairBit) {
- color.Set(0.3, 0.9, 0.9);
- for (var contact = this.m_contactManager.m_contactList; contact; contact = contact.GetNext()) {
- var fixtureA = contact.GetFixtureA();
- var fixtureB = contact.GetFixtureB();
- var cA = fixtureA.GetAABB().GetCenter();
- var cB = fixtureB.GetAABB().GetCenter();
- this.m_debugDraw.DrawSegment(cA, cB, color);
- }
- }
- if (flags & b2DebugDraw.e_aabbBit) {
- bp = this.m_contactManager.m_broadPhase;
- vs = [new b2Vec2(), new b2Vec2(), new b2Vec2(), new b2Vec2()];
- for (b = this.m_bodyList;
- b; b = b.GetNext()) {
- if (b.IsActive() == false) {
- continue;
- }
- for (f = b.GetFixtureList();
- f; f = f.GetNext()) {
- var aabb = bp.GetFatAABB(f.m_proxy);
- vs[0].Set(aabb.lowerBound.x, aabb.lowerBound.y);
- vs[1].Set(aabb.upperBound.x, aabb.lowerBound.y);
- vs[2].Set(aabb.upperBound.x, aabb.upperBound.y);
- vs[3].Set(aabb.lowerBound.x, aabb.upperBound.y);
- this.m_debugDraw.DrawPolygon(vs, 4, color);
- }
- }
- }
- if (flags & b2DebugDraw.e_centerOfMassBit) {
- for (b = this.m_bodyList;
- b; b = b.m_next) {
- xf = b2World.s_xf;
- xf.R = b.m_xf.R;
- xf.position = b.GetWorldCenter();
- this.m_debugDraw.DrawTransform(xf);
- }
- }
- }
- b2World.prototype.QueryAABB = function (callback, aabb) {
- var __this = this;
- var broadPhase = __this.m_contactManager.m_broadPhase;
-
- function WorldQueryWrapper(proxy) {
- return callback(broadPhase.GetUserData(proxy));
- };
- broadPhase.Query(WorldQueryWrapper, aabb);
- }
- b2World.prototype.QueryShape = function (callback, shape, transform) {
- var __this = this;
- if (transform === undefined) transform = null;
- if (transform == null) {
- transform = new b2Transform();
- transform.SetIdentity();
- }
- var broadPhase = __this.m_contactManager.m_broadPhase;
-
- function WorldQueryWrapper(proxy) {
- var fixture = (broadPhase.GetUserData(proxy) instanceof b2Fixture ? broadPhase.GetUserData(proxy) : null);
- if (b2Shape.TestOverlap(shape, transform, fixture.GetShape(), fixture.GetBody().GetTransform())) return callback(fixture);
- return true;
- };
- var aabb = new b2AABB();
- shape.ComputeAABB(aabb, transform);
- broadPhase.Query(WorldQueryWrapper, aabb);
- }
- b2World.prototype.QueryPoint = function (callback, p) {
- var __this = this;
- var broadPhase = __this.m_contactManager.m_broadPhase;
-
- function WorldQueryWrapper(proxy) {
- var fixture = (broadPhase.GetUserData(proxy) instanceof b2Fixture ? broadPhase.GetUserData(proxy) : null);
- if (fixture.TestPoint(p)) return callback(fixture);
- return true;
- };
- var aabb = new b2AABB();
- aabb.lowerBound.Set(p.x - b2Settings.b2_linearSlop, p.y - b2Settings.b2_linearSlop);
- aabb.upperBound.Set(p.x + b2Settings.b2_linearSlop, p.y + b2Settings.b2_linearSlop);
- broadPhase.Query(WorldQueryWrapper, aabb);
- }
- b2World.prototype.RayCast = function (callback, point1, point2) {
- var __this = this;
- var broadPhase = __this.m_contactManager.m_broadPhase;
- var output = new b2RayCastOutput;
-
- function RayCastWrapper(input, proxy) {
- var userData = broadPhase.GetUserData(proxy);
- var fixture = (userData instanceof b2Fixture ? userData : null);
- var hit = fixture.RayCast(output, input);
- if (hit) {
- var fraction = output.fraction;
- var point = new b2Vec2((1.0 - fraction) * point1.x + fraction * point2.x, (1.0 - fraction) * point1.y + fraction * point2.y);
- return callback(fixture, point, output.normal, fraction);
- }
- return input.maxFraction;
- };
- var input = new b2RayCastInput(point1, point2);
- broadPhase.RayCast(RayCastWrapper, input);
- }
- b2World.prototype.RayCastOne = function (point1, point2) {
- var __this = this;
- var result;
-
- function RayCastOneWrapper(fixture, point, normal, fraction) {
- if (fraction === undefined) fraction = 0;
- result = fixture;
- return fraction;
- };
- __this.RayCast(RayCastOneWrapper, point1, point2);
- return result;
- }
- b2World.prototype.RayCastAll = function (point1, point2) {
- var __this = this;
- var result = new Vector();
-
- function RayCastAllWrapper(fixture, point, normal, fraction) {
- if (fraction === undefined) fraction = 0;
- result[result.length] = fixture;
- return 1;
- };
- __this.RayCast(RayCastAllWrapper, point1, point2);
- return result;
- }
- b2World.prototype.GetBodyList = function () {
- return this.m_bodyList;
- }
- b2World.prototype.GetJointList = function () {
- return this.m_jointList;
- }
- b2World.prototype.GetContactList = function () {
- return this.m_contactList;
- }
- b2World.prototype.IsLocked = function () {
- return (this.m_flags & b2World.e_locked) > 0;
- }
- b2World.prototype.Solve = function (step) {
- var b;
- for (var controller = this.m_controllerList; controller; controller = controller.m_next) {
- controller.Step(step);
- }
- var island = this.m_island;
- island.Initialize(this.m_bodyCount, this.m_contactCount, this.m_jointCount, null, this.m_contactManager.m_contactListener, this.m_contactSolver);
- for (b = this.m_bodyList;
- b; b = b.m_next) {
- b.m_flags &= ~b2Body.e_islandFlag;
- }
- for (var c = this.m_contactList; c; c = c.m_next) {
- c.m_flags &= ~b2Contact.e_islandFlag;
- }
- for (var j = this.m_jointList; j; j = j.m_next) {
- j.m_islandFlag = false;
- }
- var stackSize = parseInt(this.m_bodyCount);
- var stack = this.s_stack;
- for (var seed = this.m_bodyList; seed; seed = seed.m_next) {
- if (seed.m_flags & b2Body.e_islandFlag) {
- continue;
- }
- if (seed.IsAwake() == false || seed.IsActive() == false) {
- continue;
- }
- if (seed.GetType() == b2Body.b2_staticBody) {
- continue;
- }
- island.Clear();
- var stackCount = 0;
- stack[stackCount++] = seed;
- seed.m_flags |= b2Body.e_islandFlag;
- while (stackCount > 0) {
- b = stack[--stackCount];
- island.AddBody(b);
- if (b.IsAwake() == false) {
- b.SetAwake(true);
- }
- if (b.GetType() == b2Body.b2_staticBody) {
- continue;
- }
- var other;
- for (var ce = b.m_contactList; ce; ce = ce.next) {
- if (ce.contact.m_flags & b2Contact.e_islandFlag) {
- continue;
- }
- if (ce.contact.IsSensor() == true || ce.contact.IsEnabled() == false || ce.contact.IsTouching() == false) {
- continue;
- }
- island.AddContact(ce.contact);
- ce.contact.m_flags |= b2Contact.e_islandFlag;
- other = ce.other;
- if (other.m_flags & b2Body.e_islandFlag) {
- continue;
- }
- stack[stackCount++] = other;
- other.m_flags |= b2Body.e_islandFlag;
- }
- for (var jn = b.m_jointList; jn; jn = jn.next) {
- if (jn.joint.m_islandFlag == true) {
- continue;
- }
- other = jn.other;
- if (other.IsActive() == false) {
- continue;
- }
- island.AddJoint(jn.joint);
- jn.joint.m_islandFlag = true;
- if (other.m_flags & b2Body.e_islandFlag) {
- continue;
- }
- stack[stackCount++] = other;
- other.m_flags |= b2Body.e_islandFlag;
- }
- }
- island.Solve(step, this.m_gravity, this.m_allowSleep);
- for (var i = 0; i < island.m_bodyCount; ++i) {
- b = island.m_bodies[i];
- if (b.GetType() == b2Body.b2_staticBody) {
- b.m_flags &= ~b2Body.e_islandFlag;
- }
- }
- }
- for (i = 0;
- i < stack.length; ++i) {
- if (!stack[i]) break;
- stack[i] = null;
- }
- for (b = this.m_bodyList;
- b; b = b.m_next) {
- if (b.IsAwake() == false || b.IsActive() == false) {
- continue;
- }
- if (b.GetType() == b2Body.b2_staticBody) {
- continue;
- }
- b.SynchronizeFixtures();
- }
- this.m_contactManager.FindNewContacts();
- }
- b2World.prototype.SolveTOI = function (step) {
- var b;
- var fA;
- var fB;
- var bA;
- var bB;
- var cEdge;
- var j;
- var island = this.m_island;
- island.Initialize(this.m_bodyCount, b2Settings.b2_maxTOIContactsPerIsland, b2Settings.b2_maxTOIJointsPerIsland, null, this.m_contactManager.m_contactListener, this.m_contactSolver);
- var queue = b2World.s_queue;
- for (b = this.m_bodyList;
- b; b = b.m_next) {
- b.m_flags &= ~b2Body.e_islandFlag;
- b.m_sweep.t0 = 0.0;
- }
- var c;
- for (c = this.m_contactList;
- c; c = c.m_next) {
- c.m_flags &= ~ (b2Contact.e_toiFlag | b2Contact.e_islandFlag);
- }
- for (j = this.m_jointList;
- j; j = j.m_next) {
- j.m_islandFlag = false;
- }
- for (;;) {
- var minContact = null;
- var minTOI = 1.0;
- for (c = this.m_contactList;
- c; c = c.m_next) {
- if (c.IsSensor() == true || c.IsEnabled() == false || c.IsContinuous() == false) {
- continue;
- }
- var toi = 1.0;
- if (c.m_flags & b2Contact.e_toiFlag) {
- toi = c.m_toi;
- }
- else {
- fA = c.m_fixtureA;
- fB = c.m_fixtureB;
- bA = fA.m_body;
- bB = fB.m_body;
- if ((bA.GetType() != b2Body.b2_dynamicBody || bA.IsAwake() == false) && (bB.GetType() != b2Body.b2_dynamicBody || bB.IsAwake() == false)) {
- continue;
- }
- var t0 = bA.m_sweep.t0;
- if (bA.m_sweep.t0 < bB.m_sweep.t0) {
- t0 = bB.m_sweep.t0;
- bA.m_sweep.Advance(t0);
- }
- else if (bB.m_sweep.t0 < bA.m_sweep.t0) {
- t0 = bA.m_sweep.t0;
- bB.m_sweep.Advance(t0);
- }
- toi = c.ComputeTOI(bA.m_sweep, bB.m_sweep);
- b2Settings.b2Assert(0.0 <= toi && toi <= 1.0);
- if (toi > 0.0 && toi < 1.0) {
- toi = (1.0 - toi) * t0 + toi;
- if (toi > 1) toi = 1;
- }
- c.m_toi = toi;
- c.m_flags |= b2Contact.e_toiFlag;
- }
- if (Number.MIN_VALUE < toi && toi < minTOI) {
- minContact = c;
- minTOI = toi;
- }
- }
- if (minContact == null || 1.0 - 100.0 * Number.MIN_VALUE < minTOI) {
- break;
- }
- fA = minContact.m_fixtureA;
- fB = minContact.m_fixtureB;
- bA = fA.m_body;
- bB = fB.m_body;
- b2World.s_backupA.Set(bA.m_sweep);
- b2World.s_backupB.Set(bB.m_sweep);
- bA.Advance(minTOI);
- bB.Advance(minTOI);
- minContact.Update(this.m_contactManager.m_contactListener);
- minContact.m_flags &= ~b2Contact.e_toiFlag;
- if (minContact.IsSensor() == true || minContact.IsEnabled() == false) {
- bA.m_sweep.Set(b2World.s_backupA);
- bB.m_sweep.Set(b2World.s_backupB);
- bA.SynchronizeTransform();
- bB.SynchronizeTransform();
- continue;
- }
- if (minContact.IsTouching() == false) {
- continue;
- }
- var seed = bA;
- if (seed.GetType() != b2Body.b2_dynamicBody) {
- seed = bB;
- }
- island.Clear();
- var queueStart = 0;
- var queueSize = 0;
- queue[queueStart + queueSize++] = seed;
- seed.m_flags |= b2Body.e_islandFlag;
- while (queueSize > 0) {
- b = queue[queueStart++];
- --queueSize;
- island.AddBody(b);
- if (b.IsAwake() == false) {
- b.SetAwake(true);
- }
- if (b.GetType() != b2Body.b2_dynamicBody) {
- continue;
- }
- for (cEdge = b.m_contactList;
- cEdge; cEdge = cEdge.next) {
- if (island.m_contactCount == island.m_contactCapacity) {
- break;
- }
- if (cEdge.contact.m_flags & b2Contact.e_islandFlag) {
- continue;
- }
- if (cEdge.contact.IsSensor() == true || cEdge.contact.IsEnabled() == false || cEdge.contact.IsTouching() == false) {
- continue;
- }
- island.AddContact(cEdge.contact);
- cEdge.contact.m_flags |= b2Contact.e_islandFlag;
- var other = cEdge.other;
- if (other.m_flags & b2Body.e_islandFlag) {
- continue;
- }
- if (other.GetType() != b2Body.b2_staticBody) {
- other.Advance(minTOI);
- other.SetAwake(true);
- }
- queue[queueStart + queueSize] = other;
- ++queueSize;
- other.m_flags |= b2Body.e_islandFlag;
- }
- for (var jEdge = b.m_jointList; jEdge; jEdge = jEdge.next) {
- if (island.m_jointCount == island.m_jointCapacity) continue;
- if (jEdge.joint.m_islandFlag == true) continue;
- other = jEdge.other;
- if (other.IsActive() == false) {
- continue;
- }
- island.AddJoint(jEdge.joint);
- jEdge.joint.m_islandFlag = true;
- if (other.m_flags & b2Body.e_islandFlag) continue;
- if (other.GetType() != b2Body.b2_staticBody) {
- other.Advance(minTOI);
- other.SetAwake(true);
- }
- queue[queueStart + queueSize] = other;
- ++queueSize;
- other.m_flags |= b2Body.e_islandFlag;
- }
- }
- var subStep = b2World.s_timestep;
- subStep.warmStarting = false;
- subStep.dt = (1.0 - minTOI) * step.dt;
- subStep.inv_dt = 1.0 / subStep.dt;
- subStep.dtRatio = 0.0;
- subStep.velocityIterations = step.velocityIterations;
- subStep.positionIterations = step.positionIterations;
- island.SolveTOI(subStep);
- var i = 0;
- for (i = 0;
- i < island.m_bodyCount; ++i) {
- b = island.m_bodies[i];
- b.m_flags &= ~b2Body.e_islandFlag;
- if (b.IsAwake() == false) {
- continue;
- }
- if (b.GetType() != b2Body.b2_dynamicBody) {
- continue;
- }
- b.SynchronizeFixtures();
- for (cEdge = b.m_contactList;
- cEdge; cEdge = cEdge.next) {
- cEdge.contact.m_flags &= ~b2Contact.e_toiFlag;
- }
- }
- for (i = 0;
- i < island.m_contactCount; ++i) {
- c = island.m_contacts[i];
- c.m_flags &= ~ (b2Contact.e_toiFlag | b2Contact.e_islandFlag);
- }
- for (i = 0;
- i < island.m_jointCount; ++i) {
- j = island.m_joints[i];
- j.m_islandFlag = false;
- }
- this.m_contactManager.FindNewContacts();
- }
- }
- b2World.prototype.DrawJoint = function (joint) {
- var b1 = joint.GetBodyA();
- var b2 = joint.GetBodyB();
- var xf1 = b1.m_xf;
- var xf2 = b2.m_xf;
- var x1 = xf1.position;
- var x2 = xf2.position;
- var p1 = joint.GetAnchorA();
- var p2 = joint.GetAnchorB();
- var color = b2World.s_jointColor;
- switch (joint.m_type) {
- case b2Joint.e_distanceJoint:
- this.m_debugDraw.DrawSegment(p1, p2, color);
- break;
- case b2Joint.e_pulleyJoint:
- {
- var pulley = ((joint instanceof b2PulleyJoint ? joint : null));
- var s1 = pulley.GetGroundAnchorA();
- var s2 = pulley.GetGroundAnchorB();
- this.m_debugDraw.DrawSegment(s1, p1, color);
- this.m_debugDraw.DrawSegment(s2, p2, color);
- this.m_debugDraw.DrawSegment(s1, s2, color);
- }
- break;
- case b2Joint.e_mouseJoint:
- this.m_debugDraw.DrawSegment(p1, p2, color);
- break;
- default:
- if (b1 != this.m_groundBody) this.m_debugDraw.DrawSegment(x1, p1, color);
- this.m_debugDraw.DrawSegment(p1, p2, color);
- if (b2 != this.m_groundBody) this.m_debugDraw.DrawSegment(x2, p2, color);
- }
- }
- b2World.prototype.DrawShape = function (shape, xf, color) {
- switch (shape.m_type) {
- case b2Shape.e_circleShape:
- {
- var circle = ((shape instanceof b2CircleShape ? shape : null));
- var center = b2Math.MulX(xf, circle.m_p);
- var radius = circle.m_radius;
- var axis = xf.R.col1;
- this.m_debugDraw.DrawSolidCircle(center, radius, axis, color);
- }
- break;
- case b2Shape.e_polygonShape:
- {
- var i = 0;
- var poly = ((shape instanceof b2PolygonShape ? shape : null));
- var vertexCount = parseInt(poly.GetVertexCount());
- var localVertices = poly.GetVertices();
- var vertices = new Vector(vertexCount);
- for (i = 0;
- i < vertexCount; ++i) {
- vertices[i] = b2Math.MulX(xf, localVertices[i]);
- }
- this.m_debugDraw.DrawSolidPolygon(vertices, vertexCount, color);
- }
- break;
- case b2Shape.e_edgeShape:
- {
- var edge = (shape instanceof b2EdgeShape ? shape : null);
- this.m_debugDraw.DrawSegment(b2Math.MulX(xf, edge.GetVertex1()), b2Math.MulX(xf, edge.GetVertex2()), color);
- }
- break;
- }
- }
- Box2D.postDefs.push(function () {
- Box2D.Dynamics.b2World.s_timestep2 = new b2TimeStep();
- Box2D.Dynamics.b2World.s_xf = new b2Transform();
- Box2D.Dynamics.b2World.s_backupA = new b2Sweep();
- Box2D.Dynamics.b2World.s_backupB = new b2Sweep();
- Box2D.Dynamics.b2World.s_timestep = new b2TimeStep();
- Box2D.Dynamics.b2World.s_queue = new Vector();
- Box2D.Dynamics.b2World.s_jointColor = new b2Color(0.5, 0.8, 0.8);
- Box2D.Dynamics.b2World.e_newFixture = 0x0001;
- Box2D.Dynamics.b2World.e_locked = 0x0002;
- });
-})();
-(function () {
- var b2CircleShape = Box2D.Collision.Shapes.b2CircleShape,
- b2EdgeChainDef = Box2D.Collision.Shapes.b2EdgeChainDef,
- b2EdgeShape = Box2D.Collision.Shapes.b2EdgeShape,
- b2MassData = Box2D.Collision.Shapes.b2MassData,
- b2PolygonShape = Box2D.Collision.Shapes.b2PolygonShape,
- b2Shape = Box2D.Collision.Shapes.b2Shape,
- b2CircleContact = Box2D.Dynamics.Contacts.b2CircleContact,
- b2Contact = Box2D.Dynamics.Contacts.b2Contact,
- b2ContactConstraint = Box2D.Dynamics.Contacts.b2ContactConstraint,
- b2ContactConstraintPoint = Box2D.Dynamics.Contacts.b2ContactConstraintPoint,
- b2ContactEdge = Box2D.Dynamics.Contacts.b2ContactEdge,
- b2ContactFactory = Box2D.Dynamics.Contacts.b2ContactFactory,
- b2ContactRegister = Box2D.Dynamics.Contacts.b2ContactRegister,
- b2ContactResult = Box2D.Dynamics.Contacts.b2ContactResult,
- b2ContactSolver = Box2D.Dynamics.Contacts.b2ContactSolver,
- b2EdgeAndCircleContact = Box2D.Dynamics.Contacts.b2EdgeAndCircleContact,
- b2NullContact = Box2D.Dynamics.Contacts.b2NullContact,
- b2PolyAndCircleContact = Box2D.Dynamics.Contacts.b2PolyAndCircleContact,
- b2PolyAndEdgeContact = Box2D.Dynamics.Contacts.b2PolyAndEdgeContact,
- b2PolygonContact = Box2D.Dynamics.Contacts.b2PolygonContact,
- b2PositionSolverManifold = Box2D.Dynamics.Contacts.b2PositionSolverManifold,
- b2Body = Box2D.Dynamics.b2Body,
- b2BodyDef = Box2D.Dynamics.b2BodyDef,
- b2ContactFilter = Box2D.Dynamics.b2ContactFilter,
- b2ContactImpulse = Box2D.Dynamics.b2ContactImpulse,
- b2ContactListener = Box2D.Dynamics.b2ContactListener,
- b2ContactManager = Box2D.Dynamics.b2ContactManager,
- b2DebugDraw = Box2D.Dynamics.b2DebugDraw,
- b2DestructionListener = Box2D.Dynamics.b2DestructionListener,
- b2FilterData = Box2D.Dynamics.b2FilterData,
- b2Fixture = Box2D.Dynamics.b2Fixture,
- b2FixtureDef = Box2D.Dynamics.b2FixtureDef,
- b2Island = Box2D.Dynamics.b2Island,
- b2TimeStep = Box2D.Dynamics.b2TimeStep,
- b2World = Box2D.Dynamics.b2World,
- b2Color = Box2D.Common.b2Color,
- b2internal = Box2D.Common.b2internal,
- b2Settings = Box2D.Common.b2Settings,
- b2Mat22 = Box2D.Common.Math.b2Mat22,
- b2Mat33 = Box2D.Common.Math.b2Mat33,
- b2Math = Box2D.Common.Math.b2Math,
- b2Sweep = Box2D.Common.Math.b2Sweep,
- b2Transform = Box2D.Common.Math.b2Transform,
- b2Vec2 = Box2D.Common.Math.b2Vec2,
- b2Vec3 = Box2D.Common.Math.b2Vec3,
- b2AABB = Box2D.Collision.b2AABB,
- b2Bound = Box2D.Collision.b2Bound,
- b2BoundValues = Box2D.Collision.b2BoundValues,
- b2Collision = Box2D.Collision.b2Collision,
- b2ContactID = Box2D.Collision.b2ContactID,
- b2ContactPoint = Box2D.Collision.b2ContactPoint,
- b2Distance = Box2D.Collision.b2Distance,
- b2DistanceInput = Box2D.Collision.b2DistanceInput,
- b2DistanceOutput = Box2D.Collision.b2DistanceOutput,
- b2DistanceProxy = Box2D.Collision.b2DistanceProxy,
- b2DynamicTree = Box2D.Collision.b2DynamicTree,
- b2DynamicTreeBroadPhase = Box2D.Collision.b2DynamicTreeBroadPhase,
- b2DynamicTreeNode = Box2D.Collision.b2DynamicTreeNode,
- b2DynamicTreePair = Box2D.Collision.b2DynamicTreePair,
- b2Manifold = Box2D.Collision.b2Manifold,
- b2ManifoldPoint = Box2D.Collision.b2ManifoldPoint,
- b2Point = Box2D.Collision.b2Point,
- b2RayCastInput = Box2D.Collision.b2RayCastInput,
- b2RayCastOutput = Box2D.Collision.b2RayCastOutput,
- b2Segment = Box2D.Collision.b2Segment,
- b2SeparationFunction = Box2D.Collision.b2SeparationFunction,
- b2Simplex = Box2D.Collision.b2Simplex,
- b2SimplexCache = Box2D.Collision.b2SimplexCache,
- b2SimplexVertex = Box2D.Collision.b2SimplexVertex,
- b2TimeOfImpact = Box2D.Collision.b2TimeOfImpact,
- b2TOIInput = Box2D.Collision.b2TOIInput,
- b2WorldManifold = Box2D.Collision.b2WorldManifold,
- ClipVertex = Box2D.Collision.ClipVertex,
- Features = Box2D.Collision.Features,
- IBroadPhase = Box2D.Collision.IBroadPhase;
-
- Box2D.inherit(b2CircleContact, Box2D.Dynamics.Contacts.b2Contact);
- b2CircleContact.prototype.__super = Box2D.Dynamics.Contacts.b2Contact.prototype;
- b2CircleContact.b2CircleContact = function () {
- Box2D.Dynamics.Contacts.b2Contact.b2Contact.apply(this, arguments);
- };
- b2CircleContact.Create = function (allocator) {
- return new b2CircleContact();
- }
- b2CircleContact.Destroy = function (contact, allocator) {}
- b2CircleContact.prototype.Reset = function (fixtureA, fixtureB) {
- this.__super.Reset.call(this, fixtureA, fixtureB);
- }
- b2CircleContact.prototype.Evaluate = function () {
- var bA = this.m_fixtureA.GetBody();
- var bB = this.m_fixtureB.GetBody();
- b2Collision.CollideCircles(this.m_manifold, (this.m_fixtureA.GetShape() instanceof b2CircleShape ? this.m_fixtureA.GetShape() : null), bA.m_xf, (this.m_fixtureB.GetShape() instanceof b2CircleShape ? this.m_fixtureB.GetShape() : null), bB.m_xf);
- }
- b2Contact.b2Contact = function () {
- this.m_nodeA = new b2ContactEdge();
- this.m_nodeB = new b2ContactEdge();
- this.m_manifold = new b2Manifold();
- this.m_oldManifold = new b2Manifold();
- };
- b2Contact.prototype.GetManifold = function () {
- return this.m_manifold;
- }
- b2Contact.prototype.GetWorldManifold = function (worldManifold) {
- var bodyA = this.m_fixtureA.GetBody();
- var bodyB = this.m_fixtureB.GetBody();
- var shapeA = this.m_fixtureA.GetShape();
- var shapeB = this.m_fixtureB.GetShape();
- worldManifold.Initialize(this.m_manifold, bodyA.GetTransform(), shapeA.m_radius, bodyB.GetTransform(), shapeB.m_radius);
- }
- b2Contact.prototype.IsTouching = function () {
- return (this.m_flags & b2Contact.e_touchingFlag) == b2Contact.e_touchingFlag;
- }
- b2Contact.prototype.IsContinuous = function () {
- return (this.m_flags & b2Contact.e_continuousFlag) == b2Contact.e_continuousFlag;
- }
- b2Contact.prototype.SetSensor = function (sensor) {
- if (sensor) {
- this.m_flags |= b2Contact.e_sensorFlag;
- }
- else {
- this.m_flags &= ~b2Contact.e_sensorFlag;
- }
- }
- b2Contact.prototype.IsSensor = function () {
- return (this.m_flags & b2Contact.e_sensorFlag) == b2Contact.e_sensorFlag;
- }
- b2Contact.prototype.SetEnabled = function (flag) {
- if (flag) {
- this.m_flags |= b2Contact.e_enabledFlag;
- }
- else {
- this.m_flags &= ~b2Contact.e_enabledFlag;
- }
- }
- b2Contact.prototype.IsEnabled = function () {
- return (this.m_flags & b2Contact.e_enabledFlag) == b2Contact.e_enabledFlag;
- }
- b2Contact.prototype.GetNext = function () {
- return this.m_next;
- }
- b2Contact.prototype.GetFixtureA = function () {
- return this.m_fixtureA;
- }
- b2Contact.prototype.GetFixtureB = function () {
- return this.m_fixtureB;
- }
- b2Contact.prototype.FlagForFiltering = function () {
- this.m_flags |= b2Contact.e_filterFlag;
- }
- b2Contact.prototype.b2Contact = function () {}
- b2Contact.prototype.Reset = function (fixtureA, fixtureB) {
- if (fixtureA === undefined) fixtureA = null;
- if (fixtureB === undefined) fixtureB = null;
- this.m_flags = b2Contact.e_enabledFlag;
- if (!fixtureA || !fixtureB) {
- this.m_fixtureA = null;
- this.m_fixtureB = null;
- return;
- }
- if (fixtureA.IsSensor() || fixtureB.IsSensor()) {
- this.m_flags |= b2Contact.e_sensorFlag;
- }
- var bodyA = fixtureA.GetBody();
- var bodyB = fixtureB.GetBody();
- if (bodyA.GetType() != b2Body.b2_dynamicBody || bodyA.IsBullet() || bodyB.GetType() != b2Body.b2_dynamicBody || bodyB.IsBullet()) {
- this.m_flags |= b2Contact.e_continuousFlag;
- }
- this.m_fixtureA = fixtureA;
- this.m_fixtureB = fixtureB;
- this.m_manifold.m_pointCount = 0;
- this.m_prev = null;
- this.m_next = null;
- this.m_nodeA.contact = null;
- this.m_nodeA.prev = null;
- this.m_nodeA.next = null;
- this.m_nodeA.other = null;
- this.m_nodeB.contact = null;
- this.m_nodeB.prev = null;
- this.m_nodeB.next = null;
- this.m_nodeB.other = null;
- }
- b2Contact.prototype.Update = function (listener) {
- var tManifold = this.m_oldManifold;
- this.m_oldManifold = this.m_manifold;
- this.m_manifold = tManifold;
- this.m_flags |= b2Contact.e_enabledFlag;
- var touching = false;
- var wasTouching = (this.m_flags & b2Contact.e_touchingFlag) == b2Contact.e_touchingFlag;
- var bodyA = this.m_fixtureA.m_body;
- var bodyB = this.m_fixtureB.m_body;
- var aabbOverlap = this.m_fixtureA.m_aabb.TestOverlap(this.m_fixtureB.m_aabb);
- if (this.m_flags & b2Contact.e_sensorFlag) {
- if (aabbOverlap) {
- var shapeA = this.m_fixtureA.GetShape();
- var shapeB = this.m_fixtureB.GetShape();
- var xfA = bodyA.GetTransform();
- var xfB = bodyB.GetTransform();
- touching = b2Shape.TestOverlap(shapeA, xfA, shapeB, xfB);
- }
- this.m_manifold.m_pointCount = 0;
- }
- else {
- if (bodyA.GetType() != b2Body.b2_dynamicBody || bodyA.IsBullet() || bodyB.GetType() != b2Body.b2_dynamicBody || bodyB.IsBullet()) {
- this.m_flags |= b2Contact.e_continuousFlag;
- }
- else {
- this.m_flags &= ~b2Contact.e_continuousFlag;
- }
- if (aabbOverlap) {
- this.Evaluate();
- touching = this.m_manifold.m_pointCount > 0;
- for (var i = 0; i < this.m_manifold.m_pointCount; ++i) {
- var mp2 = this.m_manifold.m_points[i];
- mp2.m_normalImpulse = 0.0;
- mp2.m_tangentImpulse = 0.0;
- var id2 = mp2.m_id;
- for (var j = 0; j < this.m_oldManifold.m_pointCount; ++j) {
- var mp1 = this.m_oldManifold.m_points[j];
- if (mp1.m_id.key == id2.key) {
- mp2.m_normalImpulse = mp1.m_normalImpulse;
- mp2.m_tangentImpulse = mp1.m_tangentImpulse;
- break;
- }
- }
- }
- }
- else {
- this.m_manifold.m_pointCount = 0;
- }
- if (touching != wasTouching) {
- bodyA.SetAwake(true);
- bodyB.SetAwake(true);
- }
- }
- if (touching) {
- this.m_flags |= b2Contact.e_touchingFlag;
- }
- else {
- this.m_flags &= ~b2Contact.e_touchingFlag;
- }
- if (wasTouching == false && touching == true) {
- listener.BeginContact(this);
- }
- if (wasTouching == true && touching == false) {
- listener.EndContact(this);
- }
- if ((this.m_flags & b2Contact.e_sensorFlag) == 0) {
- listener.PreSolve(this, this.m_oldManifold);
- }
- }
- b2Contact.prototype.Evaluate = function () {}
- b2Contact.prototype.ComputeTOI = function (sweepA, sweepB) {
- b2Contact.s_input.proxyA.Set(this.m_fixtureA.GetShape());
- b2Contact.s_input.proxyB.Set(this.m_fixtureB.GetShape());
- b2Contact.s_input.sweepA = sweepA;
- b2Contact.s_input.sweepB = sweepB;
- b2Contact.s_input.tolerance = b2Settings.b2_linearSlop;
- return b2TimeOfImpact.TimeOfImpact(b2Contact.s_input);
- }
- Box2D.postDefs.push(function () {
- Box2D.Dynamics.Contacts.b2Contact.e_sensorFlag = 0x0001;
- Box2D.Dynamics.Contacts.b2Contact.e_continuousFlag = 0x0002;
- Box2D.Dynamics.Contacts.b2Contact.e_islandFlag = 0x0004;
- Box2D.Dynamics.Contacts.b2Contact.e_toiFlag = 0x0008;
- Box2D.Dynamics.Contacts.b2Contact.e_touchingFlag = 0x0010;
- Box2D.Dynamics.Contacts.b2Contact.e_enabledFlag = 0x0020;
- Box2D.Dynamics.Contacts.b2Contact.e_filterFlag = 0x0040;
- Box2D.Dynamics.Contacts.b2Contact.s_input = new b2TOIInput();
- });
- b2ContactConstraint.b2ContactConstraint = function () {
- this.localPlaneNormal = new b2Vec2();
- this.localPoint = new b2Vec2();
- this.normal = new b2Vec2();
- this.normalMass = new b2Mat22();
- this.K = new b2Mat22();
- };
- b2ContactConstraint.prototype.b2ContactConstraint = function () {
- this.points = new Vector(b2Settings.b2_maxManifoldPoints);
- for (var i = 0; i < b2Settings.b2_maxManifoldPoints; i++) {
- this.points[i] = new b2ContactConstraintPoint();
- }
- }
- b2ContactConstraintPoint.b2ContactConstraintPoint = function () {
- this.localPoint = new b2Vec2();
- this.rA = new b2Vec2();
- this.rB = new b2Vec2();
- };
- b2ContactEdge.b2ContactEdge = function () {};
- b2ContactFactory.b2ContactFactory = function () {};
- b2ContactFactory.prototype.b2ContactFactory = function (allocator) {
- this.m_allocator = allocator;
- this.InitializeRegisters();
- }
- b2ContactFactory.prototype.AddType = function (createFcn, destroyFcn, type1, type2) {
- if (type1 === undefined) type1 = 0;
- if (type2 === undefined) type2 = 0;
- this.m_registers[type1][type2].createFcn = createFcn;
- this.m_registers[type1][type2].destroyFcn = destroyFcn;
- this.m_registers[type1][type2].primary = true;
- if (type1 != type2) {
- this.m_registers[type2][type1].createFcn = createFcn;
- this.m_registers[type2][type1].destroyFcn = destroyFcn;
- this.m_registers[type2][type1].primary = false;
- }
- }
- b2ContactFactory.prototype.InitializeRegisters = function () {
- this.m_registers = new Vector(b2Shape.e_shapeTypeCount);
- for (var i = 0; i < b2Shape.e_shapeTypeCount; i++) {
- this.m_registers[i] = new Vector(b2Shape.e_shapeTypeCount);
- for (var j = 0; j < b2Shape.e_shapeTypeCount; j++) {
- this.m_registers[i][j] = new b2ContactRegister();
- }
- }
- this.AddType(b2CircleContact.Create, b2CircleContact.Destroy, b2Shape.e_circleShape, b2Shape.e_circleShape);
- this.AddType(b2PolyAndCircleContact.Create, b2PolyAndCircleContact.Destroy, b2Shape.e_polygonShape, b2Shape.e_circleShape);
- this.AddType(b2PolygonContact.Create, b2PolygonContact.Destroy, b2Shape.e_polygonShape, b2Shape.e_polygonShape);
- this.AddType(b2EdgeAndCircleContact.Create, b2EdgeAndCircleContact.Destroy, b2Shape.e_edgeShape, b2Shape.e_circleShape);
- this.AddType(b2PolyAndEdgeContact.Create, b2PolyAndEdgeContact.Destroy, b2Shape.e_polygonShape, b2Shape.e_edgeShape);
- }
- b2ContactFactory.prototype.Create = function (fixtureA, fixtureB) {
- var type1 = parseInt(fixtureA.GetType());
- var type2 = parseInt(fixtureB.GetType());
- var reg = this.m_registers[type1][type2];
- var c;
- if (reg.pool) {
- c = reg.pool;
- reg.pool = c.m_next;
- reg.poolCount--;
- c.Reset(fixtureA, fixtureB);
- return c;
- }
- var createFcn = reg.createFcn;
- if (createFcn != null) {
- if (reg.primary) {
- c = createFcn(this.m_allocator);
- c.Reset(fixtureA, fixtureB);
- return c;
- }
- else {
- c = createFcn(this.m_allocator);
- c.Reset(fixtureB, fixtureA);
- return c;
- }
- }
- else {
- return null;
- }
- }
- b2ContactFactory.prototype.Destroy = function (contact) {
- if (contact.m_manifold.m_pointCount > 0) {
- contact.m_fixtureA.m_body.SetAwake(true);
- contact.m_fixtureB.m_body.SetAwake(true);
- }
- var type1 = parseInt(contact.m_fixtureA.GetType());
- var type2 = parseInt(contact.m_fixtureB.GetType());
- var reg = this.m_registers[type1][type2];
- if (true) {
- reg.poolCount++;
- contact.m_next = reg.pool;
- reg.pool = contact;
- }
- var destroyFcn = reg.destroyFcn;
- destroyFcn(contact, this.m_allocator);
- }
- b2ContactRegister.b2ContactRegister = function () {};
- b2ContactResult.b2ContactResult = function () {
- this.position = new b2Vec2();
- this.normal = new b2Vec2();
- this.id = new b2ContactID();
- };
- b2ContactSolver.b2ContactSolver = function () {
- this.m_step = new b2TimeStep();
- this.m_constraints = new Vector();
- };
- b2ContactSolver.prototype.b2ContactSolver = function () {}
- b2ContactSolver.prototype.Initialize = function (step, contacts, contactCount, allocator) {
- if (contactCount === undefined) contactCount = 0;
- var contact;
- this.m_step.Set(step);
- this.m_allocator = allocator;
- var i = 0;
- var tVec;
- var tMat;
- this.m_constraintCount = contactCount;
- while (this.m_constraints.length < this.m_constraintCount) {
- this.m_constraints[this.m_constraints.length] = new b2ContactConstraint();
- }
- for (i = 0;
- i < contactCount; ++i) {
- contact = contacts[i];
- var fixtureA = contact.m_fixtureA;
- var fixtureB = contact.m_fixtureB;
- var shapeA = fixtureA.m_shape;
- var shapeB = fixtureB.m_shape;
- var radiusA = shapeA.m_radius;
- var radiusB = shapeB.m_radius;
- var bodyA = fixtureA.m_body;
- var bodyB = fixtureB.m_body;
- var manifold = contact.GetManifold();
- var friction = b2Settings.b2MixFriction(fixtureA.GetFriction(), fixtureB.GetFriction());
- var restitution = b2Settings.b2MixRestitution(fixtureA.GetRestitution(), fixtureB.GetRestitution());
- var vAX = bodyA.m_linearVelocity.x;
- var vAY = bodyA.m_linearVelocity.y;
- var vBX = bodyB.m_linearVelocity.x;
- var vBY = bodyB.m_linearVelocity.y;
- var wA = bodyA.m_angularVelocity;
- var wB = bodyB.m_angularVelocity;
- b2Settings.b2Assert(manifold.m_pointCount > 0);
- b2ContactSolver.s_worldManifold.Initialize(manifold, bodyA.m_xf, radiusA, bodyB.m_xf, radiusB);
- var normalX = b2ContactSolver.s_worldManifold.m_normal.x;
- var normalY = b2ContactSolver.s_worldManifold.m_normal.y;
- var cc = this.m_constraints[i];
- cc.bodyA = bodyA;
- cc.bodyB = bodyB;
- cc.manifold = manifold;
- cc.normal.x = normalX;
- cc.normal.y = normalY;
- cc.pointCount = manifold.m_pointCount;
- cc.friction = friction;
- cc.restitution = restitution;
- cc.localPlaneNormal.x = manifold.m_localPlaneNormal.x;
- cc.localPlaneNormal.y = manifold.m_localPlaneNormal.y;
- cc.localPoint.x = manifold.m_localPoint.x;
- cc.localPoint.y = manifold.m_localPoint.y;
- cc.radius = radiusA + radiusB;
- cc.type = manifold.m_type;
- for (var k = 0; k < cc.pointCount; ++k) {
- var cp = manifold.m_points[k];
- var ccp = cc.points[k];
- ccp.normalImpulse = cp.m_normalImpulse;
- ccp.tangentImpulse = cp.m_tangentImpulse;
- ccp.localPoint.SetV(cp.m_localPoint);
- var rAX = ccp.rA.x = b2ContactSolver.s_worldManifold.m_points[k].x - bodyA.m_sweep.c.x;
- var rAY = ccp.rA.y = b2ContactSolver.s_worldManifold.m_points[k].y - bodyA.m_sweep.c.y;
- var rBX = ccp.rB.x = b2ContactSolver.s_worldManifold.m_points[k].x - bodyB.m_sweep.c.x;
- var rBY = ccp.rB.y = b2ContactSolver.s_worldManifold.m_points[k].y - bodyB.m_sweep.c.y;
- var rnA = rAX * normalY - rAY * normalX;
- var rnB = rBX * normalY - rBY * normalX;
- rnA *= rnA;
- rnB *= rnB;
- var kNormal = bodyA.m_invMass + bodyB.m_invMass + bodyA.m_invI * rnA + bodyB.m_invI * rnB;
- ccp.normalMass = 1.0 / kNormal;
- var kEqualized = bodyA.m_mass * bodyA.m_invMass + bodyB.m_mass * bodyB.m_invMass;
- kEqualized += bodyA.m_mass * bodyA.m_invI * rnA + bodyB.m_mass * bodyB.m_invI * rnB;
- ccp.equalizedMass = 1.0 / kEqualized;
- var tangentX = normalY;
- var tangentY = (-normalX);
- var rtA = rAX * tangentY - rAY * tangentX;
- var rtB = rBX * tangentY - rBY * tangentX;
- rtA *= rtA;
- rtB *= rtB;
- var kTangent = bodyA.m_invMass + bodyB.m_invMass + bodyA.m_invI * rtA + bodyB.m_invI * rtB;
- ccp.tangentMass = 1.0 / kTangent;
- ccp.velocityBias = 0.0;
- var tX = vBX + ((-wB * rBY)) - vAX - ((-wA * rAY));
- var tY = vBY + (wB * rBX) - vAY - (wA * rAX);
- var vRel = cc.normal.x * tX + cc.normal.y * tY;
- if (vRel < (-b2Settings.b2_velocityThreshold)) {
- ccp.velocityBias += (-cc.restitution * vRel);
- }
- }
- if (cc.pointCount == 2) {
- var ccp1 = cc.points[0];
- var ccp2 = cc.points[1];
- var invMassA = bodyA.m_invMass;
- var invIA = bodyA.m_invI;
- var invMassB = bodyB.m_invMass;
- var invIB = bodyB.m_invI;
- var rn1A = ccp1.rA.x * normalY - ccp1.rA.y * normalX;
- var rn1B = ccp1.rB.x * normalY - ccp1.rB.y * normalX;
- var rn2A = ccp2.rA.x * normalY - ccp2.rA.y * normalX;
- var rn2B = ccp2.rB.x * normalY - ccp2.rB.y * normalX;
- var k11 = invMassA + invMassB + invIA * rn1A * rn1A + invIB * rn1B * rn1B;
- var k22 = invMassA + invMassB + invIA * rn2A * rn2A + invIB * rn2B * rn2B;
- var k12 = invMassA + invMassB + invIA * rn1A * rn2A + invIB * rn1B * rn2B;
- var k_maxConditionNumber = 100.0;
- if (k11 * k11 < k_maxConditionNumber * (k11 * k22 - k12 * k12)) {
- cc.K.col1.Set(k11, k12);
- cc.K.col2.Set(k12, k22);
- cc.K.GetInverse(cc.normalMass);
- }
- else {
- cc.pointCount = 1;
- }
- }
- }
- }
- b2ContactSolver.prototype.InitVelocityConstraints = function (step) {
- var tVec;
- var tVec2;
- var tMat;
- for (var i = 0; i < this.m_constraintCount; ++i) {
- var c = this.m_constraints[i];
- var bodyA = c.bodyA;
- var bodyB = c.bodyB;
- var invMassA = bodyA.m_invMass;
- var invIA = bodyA.m_invI;
- var invMassB = bodyB.m_invMass;
- var invIB = bodyB.m_invI;
- var normalX = c.normal.x;
- var normalY = c.normal.y;
- var tangentX = normalY;
- var tangentY = (-normalX);
- var tX = 0;
- var j = 0;
- var tCount = 0;
- if (step.warmStarting) {
- tCount = c.pointCount;
- for (j = 0;
- j < tCount; ++j) {
- var ccp = c.points[j];
- ccp.normalImpulse *= step.dtRatio;
- ccp.tangentImpulse *= step.dtRatio;
- var PX = ccp.normalImpulse * normalX + ccp.tangentImpulse * tangentX;
- var PY = ccp.normalImpulse * normalY + ccp.tangentImpulse * tangentY;
- bodyA.m_angularVelocity -= invIA * (ccp.rA.x * PY - ccp.rA.y * PX);
- bodyA.m_linearVelocity.x -= invMassA * PX;
- bodyA.m_linearVelocity.y -= invMassA * PY;
- bodyB.m_angularVelocity += invIB * (ccp.rB.x * PY - ccp.rB.y * PX);
- bodyB.m_linearVelocity.x += invMassB * PX;
- bodyB.m_linearVelocity.y += invMassB * PY;
- }
- }
- else {
- tCount = c.pointCount;
- for (j = 0;
- j < tCount; ++j) {
- var ccp2 = c.points[j];
- ccp2.normalImpulse = 0.0;
- ccp2.tangentImpulse = 0.0;
- }
- }
- }
- }
- b2ContactSolver.prototype.SolveVelocityConstraints = function () {
- var j = 0;
- var ccp;
- var rAX = 0;
- var rAY = 0;
- var rBX = 0;
- var rBY = 0;
- var dvX = 0;
- var dvY = 0;
- var vn = 0;
- var vt = 0;
- var lambda = 0;
- var maxFriction = 0;
- var newImpulse = 0;
- var PX = 0;
- var PY = 0;
- var dX = 0;
- var dY = 0;
- var P1X = 0;
- var P1Y = 0;
- var P2X = 0;
- var P2Y = 0;
- var tMat;
- var tVec;
- for (var i = 0; i < this.m_constraintCount; ++i) {
- var c = this.m_constraints[i];
- var bodyA = c.bodyA;
- var bodyB = c.bodyB;
- var wA = bodyA.m_angularVelocity;
- var wB = bodyB.m_angularVelocity;
- var vA = bodyA.m_linearVelocity;
- var vB = bodyB.m_linearVelocity;
- var invMassA = bodyA.m_invMass;
- var invIA = bodyA.m_invI;
- var invMassB = bodyB.m_invMass;
- var invIB = bodyB.m_invI;
- var normalX = c.normal.x;
- var normalY = c.normal.y;
- var tangentX = normalY;
- var tangentY = (-normalX);
- var friction = c.friction;
- var tX = 0;
- for (j = 0;
- j < c.pointCount; j++) {
- ccp = c.points[j];
- dvX = vB.x - wB * ccp.rB.y - vA.x + wA * ccp.rA.y;
- dvY = vB.y + wB * ccp.rB.x - vA.y - wA * ccp.rA.x;
- vt = dvX * tangentX + dvY * tangentY;
- lambda = ccp.tangentMass * (-vt);
- maxFriction = friction * ccp.normalImpulse;
- newImpulse = b2Math.Clamp(ccp.tangentImpulse + lambda, (-maxFriction), maxFriction);
- lambda = newImpulse - ccp.tangentImpulse;
- PX = lambda * tangentX;
- PY = lambda * tangentY;
- vA.x -= invMassA * PX;
- vA.y -= invMassA * PY;
- wA -= invIA * (ccp.rA.x * PY - ccp.rA.y * PX);
- vB.x += invMassB * PX;
- vB.y += invMassB * PY;
- wB += invIB * (ccp.rB.x * PY - ccp.rB.y * PX);
- ccp.tangentImpulse = newImpulse;
- }
- var tCount = parseInt(c.pointCount);
- if (c.pointCount == 1) {
- ccp = c.points[0];
- dvX = vB.x + ((-wB * ccp.rB.y)) - vA.x - ((-wA * ccp.rA.y));
- dvY = vB.y + (wB * ccp.rB.x) - vA.y - (wA * ccp.rA.x);
- vn = dvX * normalX + dvY * normalY;
- lambda = (-ccp.normalMass * (vn - ccp.velocityBias));
- newImpulse = ccp.normalImpulse + lambda;
- newImpulse = newImpulse > 0 ? newImpulse : 0.0;
- lambda = newImpulse - ccp.normalImpulse;
- PX = lambda * normalX;
- PY = lambda * normalY;
- vA.x -= invMassA * PX;
- vA.y -= invMassA * PY;
- wA -= invIA * (ccp.rA.x * PY - ccp.rA.y * PX);
- vB.x += invMassB * PX;
- vB.y += invMassB * PY;
- wB += invIB * (ccp.rB.x * PY - ccp.rB.y * PX);
- ccp.normalImpulse = newImpulse;
- }
- else {
- var cp1 = c.points[0];
- var cp2 = c.points[1];
- var aX = cp1.normalImpulse;
- var aY = cp2.normalImpulse;
- var dv1X = vB.x - wB * cp1.rB.y - vA.x + wA * cp1.rA.y;
- var dv1Y = vB.y + wB * cp1.rB.x - vA.y - wA * cp1.rA.x;
- var dv2X = vB.x - wB * cp2.rB.y - vA.x + wA * cp2.rA.y;
- var dv2Y = vB.y + wB * cp2.rB.x - vA.y - wA * cp2.rA.x;
- var vn1 = dv1X * normalX + dv1Y * normalY;
- var vn2 = dv2X * normalX + dv2Y * normalY;
- var bX = vn1 - cp1.velocityBias;
- var bY = vn2 - cp2.velocityBias;
- tMat = c.K;
- bX -= tMat.col1.x * aX + tMat.col2.x * aY;
- bY -= tMat.col1.y * aX + tMat.col2.y * aY;
- var k_errorTol = 0.001;
- for (;;) {
- tMat = c.normalMass;
- var xX = (-(tMat.col1.x * bX + tMat.col2.x * bY));
- var xY = (-(tMat.col1.y * bX + tMat.col2.y * bY));
- if (xX >= 0.0 && xY >= 0.0) {
- dX = xX - aX;
- dY = xY - aY;
- P1X = dX * normalX;
- P1Y = dX * normalY;
- P2X = dY * normalX;
- P2Y = dY * normalY;
- vA.x -= invMassA * (P1X + P2X);
- vA.y -= invMassA * (P1Y + P2Y);
- wA -= invIA * (cp1.rA.x * P1Y - cp1.rA.y * P1X + cp2.rA.x * P2Y - cp2.rA.y * P2X);
- vB.x += invMassB * (P1X + P2X);
- vB.y += invMassB * (P1Y + P2Y);
- wB += invIB * (cp1.rB.x * P1Y - cp1.rB.y * P1X + cp2.rB.x * P2Y - cp2.rB.y * P2X);
- cp1.normalImpulse = xX;
- cp2.normalImpulse = xY;
- break;
- }
- xX = (-cp1.normalMass * bX);
- xY = 0.0;
- vn1 = 0.0;
- vn2 = c.K.col1.y * xX + bY;
- if (xX >= 0.0 && vn2 >= 0.0) {
- dX = xX - aX;
- dY = xY - aY;
- P1X = dX * normalX;
- P1Y = dX * normalY;
- P2X = dY * normalX;
- P2Y = dY * normalY;
- vA.x -= invMassA * (P1X + P2X);
- vA.y -= invMassA * (P1Y + P2Y);
- wA -= invIA * (cp1.rA.x * P1Y - cp1.rA.y * P1X + cp2.rA.x * P2Y - cp2.rA.y * P2X);
- vB.x += invMassB * (P1X + P2X);
- vB.y += invMassB * (P1Y + P2Y);
- wB += invIB * (cp1.rB.x * P1Y - cp1.rB.y * P1X + cp2.rB.x * P2Y - cp2.rB.y * P2X);
- cp1.normalImpulse = xX;
- cp2.normalImpulse = xY;
- break;
- }
- xX = 0.0;
- xY = (-cp2.normalMass * bY);
- vn1 = c.K.col2.x * xY + bX;
- vn2 = 0.0;
- if (xY >= 0.0 && vn1 >= 0.0) {
- dX = xX - aX;
- dY = xY - aY;
- P1X = dX * normalX;
- P1Y = dX * normalY;
- P2X = dY * normalX;
- P2Y = dY * normalY;
- vA.x -= invMassA * (P1X + P2X);
- vA.y -= invMassA * (P1Y + P2Y);
- wA -= invIA * (cp1.rA.x * P1Y - cp1.rA.y * P1X + cp2.rA.x * P2Y - cp2.rA.y * P2X);
- vB.x += invMassB * (P1X + P2X);
- vB.y += invMassB * (P1Y + P2Y);
- wB += invIB * (cp1.rB.x * P1Y - cp1.rB.y * P1X + cp2.rB.x * P2Y - cp2.rB.y * P2X);
- cp1.normalImpulse = xX;
- cp2.normalImpulse = xY;
- break;
- }
- xX = 0.0;
- xY = 0.0;
- vn1 = bX;
- vn2 = bY;
- if (vn1 >= 0.0 && vn2 >= 0.0) {
- dX = xX - aX;
- dY = xY - aY;
- P1X = dX * normalX;
- P1Y = dX * normalY;
- P2X = dY * normalX;
- P2Y = dY * normalY;
- vA.x -= invMassA * (P1X + P2X);
- vA.y -= invMassA * (P1Y + P2Y);
- wA -= invIA * (cp1.rA.x * P1Y - cp1.rA.y * P1X + cp2.rA.x * P2Y - cp2.rA.y * P2X);
- vB.x += invMassB * (P1X + P2X);
- vB.y += invMassB * (P1Y + P2Y);
- wB += invIB * (cp1.rB.x * P1Y - cp1.rB.y * P1X + cp2.rB.x * P2Y - cp2.rB.y * P2X);
- cp1.normalImpulse = xX;
- cp2.normalImpulse = xY;
- break;
- }
- break;
- }
- }
- bodyA.m_angularVelocity = wA;
- bodyB.m_angularVelocity = wB;
- }
- }
- b2ContactSolver.prototype.FinalizeVelocityConstraints = function () {
- for (var i = 0; i < this.m_constraintCount; ++i) {
- var c = this.m_constraints[i];
- var m = c.manifold;
- for (var j = 0; j < c.pointCount; ++j) {
- var point1 = m.m_points[j];
- var point2 = c.points[j];
- point1.m_normalImpulse = point2.normalImpulse;
- point1.m_tangentImpulse = point2.tangentImpulse;
- }
- }
- }
- b2ContactSolver.prototype.SolvePositionConstraints = function (baumgarte) {
- if (baumgarte === undefined) baumgarte = 0;
- var minSeparation = 0.0;
- for (var i = 0; i < this.m_constraintCount; i++) {
- var c = this.m_constraints[i];
- var bodyA = c.bodyA;
- var bodyB = c.bodyB;
- var invMassA = bodyA.m_mass * bodyA.m_invMass;
- var invIA = bodyA.m_mass * bodyA.m_invI;
- var invMassB = bodyB.m_mass * bodyB.m_invMass;
- var invIB = bodyB.m_mass * bodyB.m_invI;
- b2ContactSolver.s_psm.Initialize(c);
- var normal = b2ContactSolver.s_psm.m_normal;
- for (var j = 0; j < c.pointCount; j++) {
- var ccp = c.points[j];
- var point = b2ContactSolver.s_psm.m_points[j];
- var separation = b2ContactSolver.s_psm.m_separations[j];
- var rAX = point.x - bodyA.m_sweep.c.x;
- var rAY = point.y - bodyA.m_sweep.c.y;
- var rBX = point.x - bodyB.m_sweep.c.x;
- var rBY = point.y - bodyB.m_sweep.c.y;
- minSeparation = minSeparation < separation ? minSeparation : separation;
- var C = b2Math.Clamp(baumgarte * (separation + b2Settings.b2_linearSlop), (-b2Settings.b2_maxLinearCorrection), 0.0);
- var impulse = (-ccp.equalizedMass * C);
- var PX = impulse * normal.x;
- var PY = impulse * normal.y;bodyA.m_sweep.c.x -= invMassA * PX;
- bodyA.m_sweep.c.y -= invMassA * PY;
- bodyA.m_sweep.a -= invIA * (rAX * PY - rAY * PX);
- bodyA.SynchronizeTransform();
- bodyB.m_sweep.c.x += invMassB * PX;
- bodyB.m_sweep.c.y += invMassB * PY;
- bodyB.m_sweep.a += invIB * (rBX * PY - rBY * PX);
- bodyB.SynchronizeTransform();
- }
- }
- return minSeparation > (-1.5 * b2Settings.b2_linearSlop);
- }
- Box2D.postDefs.push(function () {
- Box2D.Dynamics.Contacts.b2ContactSolver.s_worldManifold = new b2WorldManifold();
- Box2D.Dynamics.Contacts.b2ContactSolver.s_psm = new b2PositionSolverManifold();
- });
- Box2D.inherit(b2EdgeAndCircleContact, Box2D.Dynamics.Contacts.b2Contact);
- b2EdgeAndCircleContact.prototype.__super = Box2D.Dynamics.Contacts.b2Contact.prototype;
- b2EdgeAndCircleContact.b2EdgeAndCircleContact = function () {
- Box2D.Dynamics.Contacts.b2Contact.b2Contact.apply(this, arguments);
- };
- b2EdgeAndCircleContact.Create = function (allocator) {
- return new b2EdgeAndCircleContact();
- }
- b2EdgeAndCircleContact.Destroy = function (contact, allocator) {}
- b2EdgeAndCircleContact.prototype.Reset = function (fixtureA, fixtureB) {
- this.__super.Reset.call(this, fixtureA, fixtureB);
- }
- b2EdgeAndCircleContact.prototype.Evaluate = function () {
- var bA = this.m_fixtureA.GetBody();
- var bB = this.m_fixtureB.GetBody();
- this.b2CollideEdgeAndCircle(this.m_manifold, (this.m_fixtureA.GetShape() instanceof b2EdgeShape ? this.m_fixtureA.GetShape() : null), bA.m_xf, (this.m_fixtureB.GetShape() instanceof b2CircleShape ? this.m_fixtureB.GetShape() : null), bB.m_xf);
- }
- b2EdgeAndCircleContact.prototype.b2CollideEdgeAndCircle = function (manifold, edge, xf1, circle, xf2) {}
- Box2D.inherit(b2NullContact, Box2D.Dynamics.Contacts.b2Contact);
- b2NullContact.prototype.__super = Box2D.Dynamics.Contacts.b2Contact.prototype;
- b2NullContact.b2NullContact = function () {
- Box2D.Dynamics.Contacts.b2Contact.b2Contact.apply(this, arguments);
- };
- b2NullContact.prototype.b2NullContact = function () {
- this.__super.b2Contact.call(this);
- }
- b2NullContact.prototype.Evaluate = function () {}
- Box2D.inherit(b2PolyAndCircleContact, Box2D.Dynamics.Contacts.b2Contact);
- b2PolyAndCircleContact.prototype.__super = Box2D.Dynamics.Contacts.b2Contact.prototype;
- b2PolyAndCircleContact.b2PolyAndCircleContact = function () {
- Box2D.Dynamics.Contacts.b2Contact.b2Contact.apply(this, arguments);
- };
- b2PolyAndCircleContact.Create = function (allocator) {
- return new b2PolyAndCircleContact();
- }
- b2PolyAndCircleContact.Destroy = function (contact, allocator) {}
- b2PolyAndCircleContact.prototype.Reset = function (fixtureA, fixtureB) {
- this.__super.Reset.call(this, fixtureA, fixtureB);
- b2Settings.b2Assert(fixtureA.GetType() == b2Shape.e_polygonShape);
- b2Settings.b2Assert(fixtureB.GetType() == b2Shape.e_circleShape);
- }
- b2PolyAndCircleContact.prototype.Evaluate = function () {
- var bA = this.m_fixtureA.m_body;
- var bB = this.m_fixtureB.m_body;
- b2Collision.CollidePolygonAndCircle(this.m_manifold, (this.m_fixtureA.GetShape() instanceof b2PolygonShape ? this.m_fixtureA.GetShape() : null), bA.m_xf, (this.m_fixtureB.GetShape() instanceof b2CircleShape ? this.m_fixtureB.GetShape() : null), bB.m_xf);
- }
- Box2D.inherit(b2PolyAndEdgeContact, Box2D.Dynamics.Contacts.b2Contact);
- b2PolyAndEdgeContact.prototype.__super = Box2D.Dynamics.Contacts.b2Contact.prototype;
- b2PolyAndEdgeContact.b2PolyAndEdgeContact = function () {
- Box2D.Dynamics.Contacts.b2Contact.b2Contact.apply(this, arguments);
- };
- b2PolyAndEdgeContact.Create = function (allocator) {
- return new b2PolyAndEdgeContact();
- }
- b2PolyAndEdgeContact.Destroy = function (contact, allocator) {}
- b2PolyAndEdgeContact.prototype.Reset = function (fixtureA, fixtureB) {
- this.__super.Reset.call(this, fixtureA, fixtureB);
- b2Settings.b2Assert(fixtureA.GetType() == b2Shape.e_polygonShape);
- b2Settings.b2Assert(fixtureB.GetType() == b2Shape.e_edgeShape);
- }
- b2PolyAndEdgeContact.prototype.Evaluate = function () {
- var bA = this.m_fixtureA.GetBody();
- var bB = this.m_fixtureB.GetBody();
- this.b2CollidePolyAndEdge(this.m_manifold, (this.m_fixtureA.GetShape() instanceof b2PolygonShape ? this.m_fixtureA.GetShape() : null), bA.m_xf, (this.m_fixtureB.GetShape() instanceof b2EdgeShape ? this.m_fixtureB.GetShape() : null), bB.m_xf);
- }
- b2PolyAndEdgeContact.prototype.b2CollidePolyAndEdge = function (manifold, polygon, xf1, edge, xf2) {}
- Box2D.inherit(b2PolygonContact, Box2D.Dynamics.Contacts.b2Contact);
- b2PolygonContact.prototype.__super = Box2D.Dynamics.Contacts.b2Contact.prototype;
- b2PolygonContact.b2PolygonContact = function () {
- Box2D.Dynamics.Contacts.b2Contact.b2Contact.apply(this, arguments);
- };
- b2PolygonContact.Create = function (allocator) {
- return new b2PolygonContact();
- }
- b2PolygonContact.Destroy = function (contact, allocator) {}
- b2PolygonContact.prototype.Reset = function (fixtureA, fixtureB) {
- this.__super.Reset.call(this, fixtureA, fixtureB);
- }
- b2PolygonContact.prototype.Evaluate = function () {
- var bA = this.m_fixtureA.GetBody();
- var bB = this.m_fixtureB.GetBody();
- b2Collision.CollidePolygons(this.m_manifold, (this.m_fixtureA.GetShape() instanceof b2PolygonShape ? this.m_fixtureA.GetShape() : null), bA.m_xf, (this.m_fixtureB.GetShape() instanceof b2PolygonShape ? this.m_fixtureB.GetShape() : null), bB.m_xf);
- }
- b2PositionSolverManifold.b2PositionSolverManifold = function () {};
- b2PositionSolverManifold.prototype.b2PositionSolverManifold = function () {
- this.m_normal = new b2Vec2();
- this.m_separations = new Vector_a2j_Number(b2Settings.b2_maxManifoldPoints);
- this.m_points = new Vector(b2Settings.b2_maxManifoldPoints);
- for (var i = 0; i < b2Settings.b2_maxManifoldPoints; i++) {
- this.m_points[i] = new b2Vec2();
- }
- }
- b2PositionSolverManifold.prototype.Initialize = function (cc) {
- b2Settings.b2Assert(cc.pointCount > 0);
- var i = 0;
- var clipPointX = 0;
- var clipPointY = 0;
- var tMat;
- var tVec;
- var planePointX = 0;
- var planePointY = 0;
- switch (cc.type) {
- case b2Manifold.e_circles:
- {
- tMat = cc.bodyA.m_xf.R;
- tVec = cc.localPoint;
- var pointAX = cc.bodyA.m_xf.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y);
- var pointAY = cc.bodyA.m_xf.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y);
- tMat = cc.bodyB.m_xf.R;
- tVec = cc.points[0].localPoint;
- var pointBX = cc.bodyB.m_xf.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y);
- var pointBY = cc.bodyB.m_xf.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y);
- var dX = pointBX - pointAX;
- var dY = pointBY - pointAY;
- var d2 = dX * dX + dY * dY;
- if (d2 > Number.MIN_VALUE * Number.MIN_VALUE) {
- var d = Math.sqrt(d2);
- this.m_normal.x = dX / d;
- this.m_normal.y = dY / d;
- }
- else {
- this.m_normal.x = 1.0;
- this.m_normal.y = 0.0;
- }
- this.m_points[0].x = 0.5 * (pointAX + pointBX);
- this.m_points[0].y = 0.5 * (pointAY + pointBY);
- this.m_separations[0] = dX * this.m_normal.x + dY * this.m_normal.y - cc.radius;
- }
- break;
- case b2Manifold.e_faceA:
- {
- tMat = cc.bodyA.m_xf.R;
- tVec = cc.localPlaneNormal;
- this.m_normal.x = tMat.col1.x * tVec.x + tMat.col2.x * tVec.y;
- this.m_normal.y = tMat.col1.y * tVec.x + tMat.col2.y * tVec.y;
- tMat = cc.bodyA.m_xf.R;
- tVec = cc.localPoint;
- planePointX = cc.bodyA.m_xf.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y);
- planePointY = cc.bodyA.m_xf.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y);
- tMat = cc.bodyB.m_xf.R;
- for (i = 0;
- i < cc.pointCount; ++i) {
- tVec = cc.points[i].localPoint;
- clipPointX = cc.bodyB.m_xf.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y);
- clipPointY = cc.bodyB.m_xf.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y);
- this.m_separations[i] = (clipPointX - planePointX) * this.m_normal.x + (clipPointY - planePointY) * this.m_normal.y - cc.radius;
- this.m_points[i].x = clipPointX;
- this.m_points[i].y = clipPointY;
- }
- }
- break;
- case b2Manifold.e_faceB:
- {
- tMat = cc.bodyB.m_xf.R;
- tVec = cc.localPlaneNormal;
- this.m_normal.x = tMat.col1.x * tVec.x + tMat.col2.x * tVec.y;
- this.m_normal.y = tMat.col1.y * tVec.x + tMat.col2.y * tVec.y;
- tMat = cc.bodyB.m_xf.R;
- tVec = cc.localPoint;
- planePointX = cc.bodyB.m_xf.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y);
- planePointY = cc.bodyB.m_xf.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y);
- tMat = cc.bodyA.m_xf.R;
- for (i = 0;
- i < cc.pointCount; ++i) {
- tVec = cc.points[i].localPoint;
- clipPointX = cc.bodyA.m_xf.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y);
- clipPointY = cc.bodyA.m_xf.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y);
- this.m_separations[i] = (clipPointX - planePointX) * this.m_normal.x + (clipPointY - planePointY) * this.m_normal.y - cc.radius;
- this.m_points[i].Set(clipPointX, clipPointY);
- }
- this.m_normal.x *= (-1);
- this.m_normal.y *= (-1);
- }
- break;
- }
- }
- Box2D.postDefs.push(function () {
- Box2D.Dynamics.Contacts.b2PositionSolverManifold.circlePointA = new b2Vec2();
- Box2D.Dynamics.Contacts.b2PositionSolverManifold.circlePointB = new b2Vec2();
- });
-})();
-(function () {
- var b2Body = Box2D.Dynamics.b2Body,
- b2BodyDef = Box2D.Dynamics.b2BodyDef,
- b2ContactFilter = Box2D.Dynamics.b2ContactFilter,
- b2ContactImpulse = Box2D.Dynamics.b2ContactImpulse,
- b2ContactListener = Box2D.Dynamics.b2ContactListener,
- b2ContactManager = Box2D.Dynamics.b2ContactManager,
- b2DebugDraw = Box2D.Dynamics.b2DebugDraw,
- b2DestructionListener = Box2D.Dynamics.b2DestructionListener,
- b2FilterData = Box2D.Dynamics.b2FilterData,
- b2Fixture = Box2D.Dynamics.b2Fixture,
- b2FixtureDef = Box2D.Dynamics.b2FixtureDef,
- b2Island = Box2D.Dynamics.b2Island,
- b2TimeStep = Box2D.Dynamics.b2TimeStep,
- b2World = Box2D.Dynamics.b2World,
- b2Mat22 = Box2D.Common.Math.b2Mat22,
- b2Mat33 = Box2D.Common.Math.b2Mat33,
- b2Math = Box2D.Common.Math.b2Math,
- b2Sweep = Box2D.Common.Math.b2Sweep,
- b2Transform = Box2D.Common.Math.b2Transform,
- b2Vec2 = Box2D.Common.Math.b2Vec2,
- b2Vec3 = Box2D.Common.Math.b2Vec3,
- b2Color = Box2D.Common.b2Color,
- b2internal = Box2D.Common.b2internal,
- b2Settings = Box2D.Common.b2Settings,
- b2CircleShape = Box2D.Collision.Shapes.b2CircleShape,
- b2EdgeChainDef = Box2D.Collision.Shapes.b2EdgeChainDef,
- b2EdgeShape = Box2D.Collision.Shapes.b2EdgeShape,
- b2MassData = Box2D.Collision.Shapes.b2MassData,
- b2PolygonShape = Box2D.Collision.Shapes.b2PolygonShape,
- b2Shape = Box2D.Collision.Shapes.b2Shape,
- b2BuoyancyController = Box2D.Dynamics.Controllers.b2BuoyancyController,
- b2ConstantAccelController = Box2D.Dynamics.Controllers.b2ConstantAccelController,
- b2ConstantForceController = Box2D.Dynamics.Controllers.b2ConstantForceController,
- b2Controller = Box2D.Dynamics.Controllers.b2Controller,
- b2ControllerEdge = Box2D.Dynamics.Controllers.b2ControllerEdge,
- b2GravityController = Box2D.Dynamics.Controllers.b2GravityController,
- b2TensorDampingController = Box2D.Dynamics.Controllers.b2TensorDampingController;
-
- Box2D.inherit(b2BuoyancyController, Box2D.Dynamics.Controllers.b2Controller);
- b2BuoyancyController.prototype.__super = Box2D.Dynamics.Controllers.b2Controller.prototype;
- b2BuoyancyController.b2BuoyancyController = function () {
- Box2D.Dynamics.Controllers.b2Controller.b2Controller.apply(this, arguments);
- this.normal = new b2Vec2(0, (-1));
- this.offset = 0;
- this.density = 0;
- this.velocity = new b2Vec2(0, 0);
- this.linearDrag = 2;
- this.angularDrag = 1;
- this.useDensity = false;
- this.useWorldGravity = true;
- this.gravity = null;
- };
- b2BuoyancyController.prototype.Step = function (step) {
- if (!this.m_bodyList) return;
- if (this.useWorldGravity) {
- this.gravity = this.GetWorld().GetGravity().Copy();
- }
- for (var i = this.m_bodyList; i; i = i.nextBody) {
- var body = i.body;
- if (body.IsAwake() == false) {
- continue;
- }
- var areac = new b2Vec2();
- var massc = new b2Vec2();
- var area = 0.0;
- var mass = 0.0;
- for (var fixture = body.GetFixtureList(); fixture; fixture = fixture.GetNext()) {
- var sc = new b2Vec2();
- var sarea = fixture.GetShape().ComputeSubmergedArea(this.normal, this.offset, body.GetTransform(), sc);
- area += sarea;
- areac.x += sarea * sc.x;
- areac.y += sarea * sc.y;
- var shapeDensity = 0;
- if (this.useDensity) {
- shapeDensity = 1;
- }
- else {
- shapeDensity = 1;
- }
- mass += sarea * shapeDensity;
- massc.x += sarea * sc.x * shapeDensity;
- massc.y += sarea * sc.y * shapeDensity;
- }
- areac.x /= area;
- areac.y /= area;
- massc.x /= mass;
- massc.y /= mass;
- if (area < Number.MIN_VALUE) continue;
- var buoyancyForce = this.gravity.GetNegative();
- buoyancyForce.Multiply(this.density * area);
- body.ApplyForce(buoyancyForce, massc);
- var dragForce = body.GetLinearVelocityFromWorldPoint(areac);
- dragForce.Subtract(this.velocity);
- dragForce.Multiply((-this.linearDrag * area));
- body.ApplyForce(dragForce, areac);
- body.ApplyTorque((-body.GetInertia() / body.GetMass() * area * body.GetAngularVelocity() * this.angularDrag));
- }
- }
- b2BuoyancyController.prototype.Draw = function (debugDraw) {
- var r = 1000;
- var p1 = new b2Vec2();
- var p2 = new b2Vec2();
- p1.x = this.normal.x * this.offset + this.normal.y * r;
- p1.y = this.normal.y * this.offset - this.normal.x * r;
- p2.x = this.normal.x * this.offset - this.normal.y * r;
- p2.y = this.normal.y * this.offset + this.normal.x * r;
- var color = new b2Color(0, 0, 1);
- debugDraw.DrawSegment(p1, p2, color);
- }
- Box2D.inherit(b2ConstantAccelController, Box2D.Dynamics.Controllers.b2Controller);
- b2ConstantAccelController.prototype.__super = Box2D.Dynamics.Controllers.b2Controller.prototype;
- b2ConstantAccelController.b2ConstantAccelController = function () {
- Box2D.Dynamics.Controllers.b2Controller.b2Controller.apply(this, arguments);
- this.A = new b2Vec2(0, 0);
- };
- b2ConstantAccelController.prototype.Step = function (step) {
- var smallA = new b2Vec2(this.A.x * step.dt, this.A.y * step.dt);
- for (var i = this.m_bodyList; i; i = i.nextBody) {
- var body = i.body;
- if (!body.IsAwake()) continue;
- body.SetLinearVelocity(new b2Vec2(body.GetLinearVelocity().x + smallA.x, body.GetLinearVelocity().y + smallA.y));
- }
- }
- Box2D.inherit(b2ConstantForceController, Box2D.Dynamics.Controllers.b2Controller);
- b2ConstantForceController.prototype.__super = Box2D.Dynamics.Controllers.b2Controller.prototype;
- b2ConstantForceController.b2ConstantForceController = function () {
- Box2D.Dynamics.Controllers.b2Controller.b2Controller.apply(this, arguments);
- this.F = new b2Vec2(0, 0);
- };
- b2ConstantForceController.prototype.Step = function (step) {
- for (var i = this.m_bodyList; i; i = i.nextBody) {
- var body = i.body;
- if (!body.IsAwake()) continue;
- body.ApplyForce(this.F, body.GetWorldCenter());
- }
- }
- b2Controller.b2Controller = function () {};
- b2Controller.prototype.Step = function (step) {}
- b2Controller.prototype.Draw = function (debugDraw) {}
- b2Controller.prototype.AddBody = function (body) {
- var edge = new b2ControllerEdge();
- edge.controller = this;
- edge.body = body;
- edge.nextBody = this.m_bodyList;
- edge.prevBody = null;
- this.m_bodyList = edge;
- if (edge.nextBody) edge.nextBody.prevBody = edge;
- this.m_bodyCount++;
- edge.nextController = body.m_controllerList;
- edge.prevController = null;
- body.m_controllerList = edge;
- if (edge.nextController) edge.nextController.prevController = edge;
- body.m_controllerCount++;
- }
- b2Controller.prototype.RemoveBody = function (body) {
- var edge = body.m_controllerList;
- while (edge && edge.controller != this)
- edge = edge.nextController;
- if (edge.prevBody) edge.prevBody.nextBody = edge.nextBody;
- if (edge.nextBody) edge.nextBody.prevBody = edge.prevBody;
- if (edge.nextController) edge.nextController.prevController = edge.prevController;
- if (edge.prevController) edge.prevController.nextController = edge.nextController;
- if (this.m_bodyList == edge) this.m_bodyList = edge.nextBody;
- if (body.m_controllerList == edge) body.m_controllerList = edge.nextController;
- body.m_controllerCount--;
- this.m_bodyCount--;
- }
- b2Controller.prototype.Clear = function () {
- while (this.m_bodyList)
- this.RemoveBody(this.m_bodyList.body);
- }
- b2Controller.prototype.GetNext = function () {
- return this.m_next;
- }
- b2Controller.prototype.GetWorld = function () {
- return this.m_world;
- }
- b2Controller.prototype.GetBodyList = function () {
- return this.m_bodyList;
- }
- b2ControllerEdge.b2ControllerEdge = function () {};
- Box2D.inherit(b2GravityController, Box2D.Dynamics.Controllers.b2Controller);
- b2GravityController.prototype.__super = Box2D.Dynamics.Controllers.b2Controller.prototype;
- b2GravityController.b2GravityController = function () {
- Box2D.Dynamics.Controllers.b2Controller.b2Controller.apply(this, arguments);
- this.G = 1;
- this.invSqr = true;
- };
- b2GravityController.prototype.Step = function (step) {
- var i = null;
- var body1 = null;
- var p1 = null;
- var mass1 = 0;
- var j = null;
- var body2 = null;
- var p2 = null;
- var dx = 0;
- var dy = 0;
- var r2 = 0;
- var f = null;
- if (this.invSqr) {
- for (i = this.m_bodyList;
- i; i = i.nextBody) {
- body1 = i.body;
- p1 = body1.GetWorldCenter();
- mass1 = body1.GetMass();
- for (j = this.m_bodyList;
- j != i; j = j.nextBody) {
- body2 = j.body;
- p2 = body2.GetWorldCenter();
- dx = p2.x - p1.x;
- dy = p2.y - p1.y;
- r2 = dx * dx + dy * dy;
- if (r2 < Number.MIN_VALUE) continue;
- f = new b2Vec2(dx, dy);
- f.Multiply(this.G / r2 / Math.sqrt(r2) * mass1 * body2.GetMass());
- if (body1.IsAwake()) body1.ApplyForce(f, p1);
- f.Multiply((-1));
- if (body2.IsAwake()) body2.ApplyForce(f, p2);
- }
- }
- }
- else {
- for (i = this.m_bodyList;
- i; i = i.nextBody) {
- body1 = i.body;
- p1 = body1.GetWorldCenter();
- mass1 = body1.GetMass();
- for (j = this.m_bodyList;
- j != i; j = j.nextBody) {
- body2 = j.body;
- p2 = body2.GetWorldCenter();
- dx = p2.x - p1.x;
- dy = p2.y - p1.y;
- r2 = dx * dx + dy * dy;
- if (r2 < Number.MIN_VALUE) continue;
- f = new b2Vec2(dx, dy);
- f.Multiply(this.G / r2 * mass1 * body2.GetMass());
- if (body1.IsAwake()) body1.ApplyForce(f, p1);
- f.Multiply((-1));
- if (body2.IsAwake()) body2.ApplyForce(f, p2);
- }
- }
- }
- }
- Box2D.inherit(b2TensorDampingController, Box2D.Dynamics.Controllers.b2Controller);
- b2TensorDampingController.prototype.__super = Box2D.Dynamics.Controllers.b2Controller.prototype;
- b2TensorDampingController.b2TensorDampingController = function () {
- Box2D.Dynamics.Controllers.b2Controller.b2Controller.apply(this, arguments);
- this.T = new b2Mat22();
- this.maxTimestep = 0;
- };
- b2TensorDampingController.prototype.SetAxisAligned = function (xDamping, yDamping) {
- if (xDamping === undefined) xDamping = 0;
- if (yDamping === undefined) yDamping = 0;
- this.T.col1.x = (-xDamping);
- this.T.col1.y = 0;
- this.T.col2.x = 0;
- this.T.col2.y = (-yDamping);
- if (xDamping > 0 || yDamping > 0) {
- this.maxTimestep = 1 / Math.max(xDamping, yDamping);
- }
- else {
- this.maxTimestep = 0;
- }
- }
- b2TensorDampingController.prototype.Step = function (step) {
- var timestep = step.dt;
- if (timestep <= Number.MIN_VALUE) return;
- if (timestep > this.maxTimestep && this.maxTimestep > 0) timestep = this.maxTimestep;
- for (var i = this.m_bodyList; i; i = i.nextBody) {
- var body = i.body;
- if (!body.IsAwake()) {
- continue;
- }
- var damping = body.GetWorldVector(b2Math.MulMV(this.T, body.GetLocalVector(body.GetLinearVelocity())));
- body.SetLinearVelocity(new b2Vec2(body.GetLinearVelocity().x + damping.x * timestep, body.GetLinearVelocity().y + damping.y * timestep));
- }
- }
-})();
-(function () {
- var b2Color = Box2D.Common.b2Color,
- b2internal = Box2D.Common.b2internal,
- b2Settings = Box2D.Common.b2Settings,
- b2Mat22 = Box2D.Common.Math.b2Mat22,
- b2Mat33 = Box2D.Common.Math.b2Mat33,
- b2Math = Box2D.Common.Math.b2Math,
- b2Sweep = Box2D.Common.Math.b2Sweep,
- b2Transform = Box2D.Common.Math.b2Transform,
- b2Vec2 = Box2D.Common.Math.b2Vec2,
- b2Vec3 = Box2D.Common.Math.b2Vec3,
- b2DistanceJoint = Box2D.Dynamics.Joints.b2DistanceJoint,
- b2DistanceJointDef = Box2D.Dynamics.Joints.b2DistanceJointDef,
- b2FrictionJoint = Box2D.Dynamics.Joints.b2FrictionJoint,
- b2FrictionJointDef = Box2D.Dynamics.Joints.b2FrictionJointDef,
- b2GearJoint = Box2D.Dynamics.Joints.b2GearJoint,
- b2GearJointDef = Box2D.Dynamics.Joints.b2GearJointDef,
- b2Jacobian = Box2D.Dynamics.Joints.b2Jacobian,
- b2Joint = Box2D.Dynamics.Joints.b2Joint,
- b2JointDef = Box2D.Dynamics.Joints.b2JointDef,
- b2JointEdge = Box2D.Dynamics.Joints.b2JointEdge,
- b2LineJoint = Box2D.Dynamics.Joints.b2LineJoint,
- b2LineJointDef = Box2D.Dynamics.Joints.b2LineJointDef,
- b2MouseJoint = Box2D.Dynamics.Joints.b2MouseJoint,
- b2MouseJointDef = Box2D.Dynamics.Joints.b2MouseJointDef,
- b2PrismaticJoint = Box2D.Dynamics.Joints.b2PrismaticJoint,
- b2PrismaticJointDef = Box2D.Dynamics.Joints.b2PrismaticJointDef,
- b2PulleyJoint = Box2D.Dynamics.Joints.b2PulleyJoint,
- b2PulleyJointDef = Box2D.Dynamics.Joints.b2PulleyJointDef,
- b2RevoluteJoint = Box2D.Dynamics.Joints.b2RevoluteJoint,
- b2RevoluteJointDef = Box2D.Dynamics.Joints.b2RevoluteJointDef,
- b2WeldJoint = Box2D.Dynamics.Joints.b2WeldJoint,
- b2WeldJointDef = Box2D.Dynamics.Joints.b2WeldJointDef,
- b2Body = Box2D.Dynamics.b2Body,
- b2BodyDef = Box2D.Dynamics.b2BodyDef,
- b2ContactFilter = Box2D.Dynamics.b2ContactFilter,
- b2ContactImpulse = Box2D.Dynamics.b2ContactImpulse,
- b2ContactListener = Box2D.Dynamics.b2ContactListener,
- b2ContactManager = Box2D.Dynamics.b2ContactManager,
- b2DebugDraw = Box2D.Dynamics.b2DebugDraw,
- b2DestructionListener = Box2D.Dynamics.b2DestructionListener,
- b2FilterData = Box2D.Dynamics.b2FilterData,
- b2Fixture = Box2D.Dynamics.b2Fixture,
- b2FixtureDef = Box2D.Dynamics.b2FixtureDef,
- b2Island = Box2D.Dynamics.b2Island,
- b2TimeStep = Box2D.Dynamics.b2TimeStep,
- b2World = Box2D.Dynamics.b2World;
-
- Box2D.inherit(b2DistanceJoint, Box2D.Dynamics.Joints.b2Joint);
- b2DistanceJoint.prototype.__super = Box2D.Dynamics.Joints.b2Joint.prototype;
- b2DistanceJoint.b2DistanceJoint = function () {
- Box2D.Dynamics.Joints.b2Joint.b2Joint.apply(this, arguments);
- this.m_localAnchor1 = new b2Vec2();
- this.m_localAnchor2 = new b2Vec2();
- this.m_u = new b2Vec2();
- };
- b2DistanceJoint.prototype.GetAnchorA = function () {
- return this.m_bodyA.GetWorldPoint(this.m_localAnchor1);
- }
- b2DistanceJoint.prototype.GetAnchorB = function () {
- return this.m_bodyB.GetWorldPoint(this.m_localAnchor2);
- }
- b2DistanceJoint.prototype.GetReactionForce = function (inv_dt) {
- if (inv_dt === undefined) inv_dt = 0;
- return new b2Vec2(inv_dt * this.m_impulse * this.m_u.x, inv_dt * this.m_impulse * this.m_u.y);
- }
- b2DistanceJoint.prototype.GetReactionTorque = function (inv_dt) {
- if (inv_dt === undefined) inv_dt = 0;
- return 0.0;
- }
- b2DistanceJoint.prototype.GetLength = function () {
- return this.m_length;
- }
- b2DistanceJoint.prototype.SetLength = function (length) {
- if (length === undefined) length = 0;
- this.m_length = length;
- }
- b2DistanceJoint.prototype.GetFrequency = function () {
- return this.m_frequencyHz;
- }
- b2DistanceJoint.prototype.SetFrequency = function (hz) {
- if (hz === undefined) hz = 0;
- this.m_frequencyHz = hz;
- }
- b2DistanceJoint.prototype.GetDampingRatio = function () {
- return this.m_dampingRatio;
- }
- b2DistanceJoint.prototype.SetDampingRatio = function (ratio) {
- if (ratio === undefined) ratio = 0;
- this.m_dampingRatio = ratio;
- }
- b2DistanceJoint.prototype.b2DistanceJoint = function (def) {
- this.__super.b2Joint.call(this, def);
- var tMat;
- var tX = 0;
- var tY = 0;
- this.m_localAnchor1.SetV(def.localAnchorA);
- this.m_localAnchor2.SetV(def.localAnchorB);
- this.m_length = def.length;
- this.m_frequencyHz = def.frequencyHz;
- this.m_dampingRatio = def.dampingRatio;
- this.m_impulse = 0.0;
- this.m_gamma = 0.0;
- this.m_bias = 0.0;
- }
- b2DistanceJoint.prototype.InitVelocityConstraints = function (step) {
- var tMat;
- var tX = 0;
- var bA = this.m_bodyA;
- var bB = this.m_bodyB;
- tMat = bA.m_xf.R;
- var r1X = this.m_localAnchor1.x - bA.m_sweep.localCenter.x;
- var r1Y = this.m_localAnchor1.y - bA.m_sweep.localCenter.y;
- tX = (tMat.col1.x * r1X + tMat.col2.x * r1Y);
- r1Y = (tMat.col1.y * r1X + tMat.col2.y * r1Y);
- r1X = tX;
- tMat = bB.m_xf.R;
- var r2X = this.m_localAnchor2.x - bB.m_sweep.localCenter.x;
- var r2Y = this.m_localAnchor2.y - bB.m_sweep.localCenter.y;
- tX = (tMat.col1.x * r2X + tMat.col2.x * r2Y);
- r2Y = (tMat.col1.y * r2X + tMat.col2.y * r2Y);
- r2X = tX;
- this.m_u.x = bB.m_sweep.c.x + r2X - bA.m_sweep.c.x - r1X;
- this.m_u.y = bB.m_sweep.c.y + r2Y - bA.m_sweep.c.y - r1Y;
- var length = Math.sqrt(this.m_u.x * this.m_u.x + this.m_u.y * this.m_u.y);
- if (length > b2Settings.b2_linearSlop) {
- this.m_u.Multiply(1.0 / length);
- }
- else {
- this.m_u.SetZero();
- }
- var cr1u = (r1X * this.m_u.y - r1Y * this.m_u.x);
- var cr2u = (r2X * this.m_u.y - r2Y * this.m_u.x);
- var invMass = bA.m_invMass + bA.m_invI * cr1u * cr1u + bB.m_invMass + bB.m_invI * cr2u * cr2u;
- this.m_mass = invMass != 0.0 ? 1.0 / invMass : 0.0;
- if (this.m_frequencyHz > 0.0) {
- var C = length - this.m_length;
- var omega = 2.0 * Math.PI * this.m_frequencyHz;
- var d = 2.0 * this.m_mass * this.m_dampingRatio * omega;
- var k = this.m_mass * omega * omega;
- this.m_gamma = step.dt * (d + step.dt * k);
- this.m_gamma = this.m_gamma != 0.0 ? 1 / this.m_gamma : 0.0;
- this.m_bias = C * step.dt * k * this.m_gamma;
- this.m_mass = invMass + this.m_gamma;
- this.m_mass = this.m_mass != 0.0 ? 1.0 / this.m_mass : 0.0;
- }
- if (step.warmStarting) {
- this.m_impulse *= step.dtRatio;
- var PX = this.m_impulse * this.m_u.x;
- var PY = this.m_impulse * this.m_u.y;
- bA.m_linearVelocity.x -= bA.m_invMass * PX;
- bA.m_linearVelocity.y -= bA.m_invMass * PY;
- bA.m_angularVelocity -= bA.m_invI * (r1X * PY - r1Y * PX);
- bB.m_linearVelocity.x += bB.m_invMass * PX;
- bB.m_linearVelocity.y += bB.m_invMass * PY;
- bB.m_angularVelocity += bB.m_invI * (r2X * PY - r2Y * PX);
- }
- else {
- this.m_impulse = 0.0;
- }
- }
- b2DistanceJoint.prototype.SolveVelocityConstraints = function (step) {
- var tMat;
- var bA = this.m_bodyA;
- var bB = this.m_bodyB;
- tMat = bA.m_xf.R;
- var r1X = this.m_localAnchor1.x - bA.m_sweep.localCenter.x;
- var r1Y = this.m_localAnchor1.y - bA.m_sweep.localCenter.y;
- var tX = (tMat.col1.x * r1X + tMat.col2.x * r1Y);
- r1Y = (tMat.col1.y * r1X + tMat.col2.y * r1Y);
- r1X = tX;
- tMat = bB.m_xf.R;
- var r2X = this.m_localAnchor2.x - bB.m_sweep.localCenter.x;
- var r2Y = this.m_localAnchor2.y - bB.m_sweep.localCenter.y;
- tX = (tMat.col1.x * r2X + tMat.col2.x * r2Y);
- r2Y = (tMat.col1.y * r2X + tMat.col2.y * r2Y);
- r2X = tX;
- var v1X = bA.m_linearVelocity.x + ((-bA.m_angularVelocity * r1Y));
- var v1Y = bA.m_linearVelocity.y + (bA.m_angularVelocity * r1X);
- var v2X = bB.m_linearVelocity.x + ((-bB.m_angularVelocity * r2Y));
- var v2Y = bB.m_linearVelocity.y + (bB.m_angularVelocity * r2X);
- var Cdot = (this.m_u.x * (v2X - v1X) + this.m_u.y * (v2Y - v1Y));
- var impulse = (-this.m_mass * (Cdot + this.m_bias + this.m_gamma * this.m_impulse));
- this.m_impulse += impulse;
- var PX = impulse * this.m_u.x;
- var PY = impulse * this.m_u.y;
- bA.m_linearVelocity.x -= bA.m_invMass * PX;
- bA.m_linearVelocity.y -= bA.m_invMass * PY;
- bA.m_angularVelocity -= bA.m_invI * (r1X * PY - r1Y * PX);
- bB.m_linearVelocity.x += bB.m_invMass * PX;
- bB.m_linearVelocity.y += bB.m_invMass * PY;
- bB.m_angularVelocity += bB.m_invI * (r2X * PY - r2Y * PX);
- }
- b2DistanceJoint.prototype.SolvePositionConstraints = function (baumgarte) {
- if (baumgarte === undefined) baumgarte = 0;
- var tMat;
- if (this.m_frequencyHz > 0.0) {
- return true;
- }
- var bA = this.m_bodyA;
- var bB = this.m_bodyB;
- tMat = bA.m_xf.R;
- var r1X = this.m_localAnchor1.x - bA.m_sweep.localCenter.x;
- var r1Y = this.m_localAnchor1.y - bA.m_sweep.localCenter.y;
- var tX = (tMat.col1.x * r1X + tMat.col2.x * r1Y);
- r1Y = (tMat.col1.y * r1X + tMat.col2.y * r1Y);
- r1X = tX;
- tMat = bB.m_xf.R;
- var r2X = this.m_localAnchor2.x - bB.m_sweep.localCenter.x;
- var r2Y = this.m_localAnchor2.y - bB.m_sweep.localCenter.y;
- tX = (tMat.col1.x * r2X + tMat.col2.x * r2Y);
- r2Y = (tMat.col1.y * r2X + tMat.col2.y * r2Y);
- r2X = tX;
- var dX = bB.m_sweep.c.x + r2X - bA.m_sweep.c.x - r1X;
- var dY = bB.m_sweep.c.y + r2Y - bA.m_sweep.c.y - r1Y;
- var length = Math.sqrt(dX * dX + dY * dY);
- dX /= length;
- dY /= length;
- var C = length - this.m_length;
- C = b2Math.Clamp(C, (-b2Settings.b2_maxLinearCorrection), b2Settings.b2_maxLinearCorrection);
- var impulse = (-this.m_mass * C);
- this.m_u.Set(dX, dY);
- var PX = impulse * this.m_u.x;
- var PY = impulse * this.m_u.y;
- bA.m_sweep.c.x -= bA.m_invMass * PX;
- bA.m_sweep.c.y -= bA.m_invMass * PY;
- bA.m_sweep.a -= bA.m_invI * (r1X * PY - r1Y * PX);
- bB.m_sweep.c.x += bB.m_invMass * PX;
- bB.m_sweep.c.y += bB.m_invMass * PY;
- bB.m_sweep.a += bB.m_invI * (r2X * PY - r2Y * PX);
- bA.SynchronizeTransform();
- bB.SynchronizeTransform();
- return b2Math.Abs(C) < b2Settings.b2_linearSlop;
- }
- Box2D.inherit(b2DistanceJointDef, Box2D.Dynamics.Joints.b2JointDef);
- b2DistanceJointDef.prototype.__super = Box2D.Dynamics.Joints.b2JointDef.prototype;
- b2DistanceJointDef.b2DistanceJointDef = function () {
- Box2D.Dynamics.Joints.b2JointDef.b2JointDef.apply(this, arguments);
- this.localAnchorA = new b2Vec2();
- this.localAnchorB = new b2Vec2();
- };
- b2DistanceJointDef.prototype.b2DistanceJointDef = function () {
- this.__super.b2JointDef.call(this);
- this.type = b2Joint.e_distanceJoint;
- this.length = 1.0;
- this.frequencyHz = 0.0;
- this.dampingRatio = 0.0;
- }
- b2DistanceJointDef.prototype.Initialize = function (bA, bB, anchorA, anchorB) {
- this.bodyA = bA;
- this.bodyB = bB;
- this.localAnchorA.SetV(this.bodyA.GetLocalPoint(anchorA));
- this.localAnchorB.SetV(this.bodyB.GetLocalPoint(anchorB));
- var dX = anchorB.x - anchorA.x;
- var dY = anchorB.y - anchorA.y;
- this.length = Math.sqrt(dX * dX + dY * dY);
- this.frequencyHz = 0.0;
- this.dampingRatio = 0.0;
- }
- Box2D.inherit(b2FrictionJoint, Box2D.Dynamics.Joints.b2Joint);
- b2FrictionJoint.prototype.__super = Box2D.Dynamics.Joints.b2Joint.prototype;
- b2FrictionJoint.b2FrictionJoint = function () {
- Box2D.Dynamics.Joints.b2Joint.b2Joint.apply(this, arguments);
- this.m_localAnchorA = new b2Vec2();
- this.m_localAnchorB = new b2Vec2();
- this.m_linearMass = new b2Mat22();
- this.m_linearImpulse = new b2Vec2();
- };
- b2FrictionJoint.prototype.GetAnchorA = function () {
- return this.m_bodyA.GetWorldPoint(this.m_localAnchorA);
- }
- b2FrictionJoint.prototype.GetAnchorB = function () {
- return this.m_bodyB.GetWorldPoint(this.m_localAnchorB);
- }
- b2FrictionJoint.prototype.GetReactionForce = function (inv_dt) {
- if (inv_dt === undefined) inv_dt = 0;
- return new b2Vec2(inv_dt * this.m_linearImpulse.x, inv_dt * this.m_linearImpulse.y);
- }
- b2FrictionJoint.prototype.GetReactionTorque = function (inv_dt) {
- if (inv_dt === undefined) inv_dt = 0;
- return inv_dt * this.m_angularImpulse;
- }
- b2FrictionJoint.prototype.SetMaxForce = function (force) {
- if (force === undefined) force = 0;
- this.m_maxForce = force;
- }
- b2FrictionJoint.prototype.GetMaxForce = function () {
- return this.m_maxForce;
- }
- b2FrictionJoint.prototype.SetMaxTorque = function (torque) {
- if (torque === undefined) torque = 0;
- this.m_maxTorque = torque;
- }
- b2FrictionJoint.prototype.GetMaxTorque = function () {
- return this.m_maxTorque;
- }
- b2FrictionJoint.prototype.b2FrictionJoint = function (def) {
- this.__super.b2Joint.call(this, def);
- this.m_localAnchorA.SetV(def.localAnchorA);
- this.m_localAnchorB.SetV(def.localAnchorB);
- this.m_linearMass.SetZero();
- this.m_angularMass = 0.0;
- this.m_linearImpulse.SetZero();
- this.m_angularImpulse = 0.0;
- this.m_maxForce = def.maxForce;
- this.m_maxTorque = def.maxTorque;
- }
- b2FrictionJoint.prototype.InitVelocityConstraints = function (step) {
- var tMat;
- var tX = 0;
- var bA = this.m_bodyA;
- var bB = this.m_bodyB;
- tMat = bA.m_xf.R;
- var rAX = this.m_localAnchorA.x - bA.m_sweep.localCenter.x;
- var rAY = this.m_localAnchorA.y - bA.m_sweep.localCenter.y;
- tX = (tMat.col1.x * rAX + tMat.col2.x * rAY);
- rAY = (tMat.col1.y * rAX + tMat.col2.y * rAY);
- rAX = tX;
- tMat = bB.m_xf.R;
- var rBX = this.m_localAnchorB.x - bB.m_sweep.localCenter.x;
- var rBY = this.m_localAnchorB.y - bB.m_sweep.localCenter.y;
- tX = (tMat.col1.x * rBX + tMat.col2.x * rBY);
- rBY = (tMat.col1.y * rBX + tMat.col2.y * rBY);
- rBX = tX;
- var mA = bA.m_invMass;
- var mB = bB.m_invMass;
- var iA = bA.m_invI;
- var iB = bB.m_invI;
- var K = new b2Mat22();
- K.col1.x = mA + mB;
- K.col2.x = 0.0;
- K.col1.y = 0.0;
- K.col2.y = mA + mB;
- K.col1.x += iA * rAY * rAY;
- K.col2.x += (-iA * rAX * rAY);
- K.col1.y += (-iA * rAX * rAY);
- K.col2.y += iA * rAX * rAX;
- K.col1.x += iB * rBY * rBY;
- K.col2.x += (-iB * rBX * rBY);
- K.col1.y += (-iB * rBX * rBY);
- K.col2.y += iB * rBX * rBX;
- K.GetInverse(this.m_linearMass);
- this.m_angularMass = iA + iB;
- if (this.m_angularMass > 0.0) {
- this.m_angularMass = 1.0 / this.m_angularMass;
- }
- if (step.warmStarting) {
- this.m_linearImpulse.x *= step.dtRatio;
- this.m_linearImpulse.y *= step.dtRatio;
- this.m_angularImpulse *= step.dtRatio;
- var P = this.m_linearImpulse;
- bA.m_linearVelocity.x -= mA * P.x;
- bA.m_linearVelocity.y -= mA * P.y;
- bA.m_angularVelocity -= iA * (rAX * P.y - rAY * P.x + this.m_angularImpulse);
- bB.m_linearVelocity.x += mB * P.x;
- bB.m_linearVelocity.y += mB * P.y;
- bB.m_angularVelocity += iB * (rBX * P.y - rBY * P.x + this.m_angularImpulse);
- }
- else {
- this.m_linearImpulse.SetZero();
- this.m_angularImpulse = 0.0;
- }
- }
- b2FrictionJoint.prototype.SolveVelocityConstraints = function (step) {
- var tMat;
- var tX = 0;
- var bA = this.m_bodyA;
- var bB = this.m_bodyB;
- var vA = bA.m_linearVelocity;
- var wA = bA.m_angularVelocity;
- var vB = bB.m_linearVelocity;
- var wB = bB.m_angularVelocity;
- var mA = bA.m_invMass;
- var mB = bB.m_invMass;
- var iA = bA.m_invI;
- var iB = bB.m_invI;
- tMat = bA.m_xf.R;
- var rAX = this.m_localAnchorA.x - bA.m_sweep.localCenter.x;
- var rAY = this.m_localAnchorA.y - bA.m_sweep.localCenter.y;
- tX = (tMat.col1.x * rAX + tMat.col2.x * rAY);
- rAY = (tMat.col1.y * rAX + tMat.col2.y * rAY);
- rAX = tX;
- tMat = bB.m_xf.R;
- var rBX = this.m_localAnchorB.x - bB.m_sweep.localCenter.x;
- var rBY = this.m_localAnchorB.y - bB.m_sweep.localCenter.y;
- tX = (tMat.col1.x * rBX + tMat.col2.x * rBY);
- rBY = (tMat.col1.y * rBX + tMat.col2.y * rBY);
- rBX = tX;
- var maxImpulse = 0; {
- var Cdot = wB - wA;
- var impulse = (-this.m_angularMass * Cdot);
- var oldImpulse = this.m_angularImpulse;
- maxImpulse = step.dt * this.m_maxTorque;
- this.m_angularImpulse = b2Math.Clamp(this.m_angularImpulse + impulse, (-maxImpulse), maxImpulse);
- impulse = this.m_angularImpulse - oldImpulse;
- wA -= iA * impulse;
- wB += iB * impulse;
- } {
- var CdotX = vB.x - wB * rBY - vA.x + wA * rAY;
- var CdotY = vB.y + wB * rBX - vA.y - wA * rAX;
- var impulseV = b2Math.MulMV(this.m_linearMass, new b2Vec2((-CdotX), (-CdotY)));
- var oldImpulseV = this.m_linearImpulse.Copy();
- this.m_linearImpulse.Add(impulseV);
- maxImpulse = step.dt * this.m_maxForce;
- if (this.m_linearImpulse.LengthSquared() > maxImpulse * maxImpulse) {
- this.m_linearImpulse.Normalize();
- this.m_linearImpulse.Multiply(maxImpulse);
- }
- impulseV = b2Math.SubtractVV(this.m_linearImpulse, oldImpulseV);
- vA.x -= mA * impulseV.x;
- vA.y -= mA * impulseV.y;
- wA -= iA * (rAX * impulseV.y - rAY * impulseV.x);
- vB.x += mB * impulseV.x;
- vB.y += mB * impulseV.y;
- wB += iB * (rBX * impulseV.y - rBY * impulseV.x);
- }
- bA.m_angularVelocity = wA;
- bB.m_angularVelocity = wB;
- }
- b2FrictionJoint.prototype.SolvePositionConstraints = function (baumgarte) {
- if (baumgarte === undefined) baumgarte = 0;
- return true;
- }
- Box2D.inherit(b2FrictionJointDef, Box2D.Dynamics.Joints.b2JointDef);
- b2FrictionJointDef.prototype.__super = Box2D.Dynamics.Joints.b2JointDef.prototype;
- b2FrictionJointDef.b2FrictionJointDef = function () {
- Box2D.Dynamics.Joints.b2JointDef.b2JointDef.apply(this, arguments);
- this.localAnchorA = new b2Vec2();
- this.localAnchorB = new b2Vec2();
- };
- b2FrictionJointDef.prototype.b2FrictionJointDef = function () {
- this.__super.b2JointDef.call(this);
- this.type = b2Joint.e_frictionJoint;
- this.maxForce = 0.0;
- this.maxTorque = 0.0;
- }
- b2FrictionJointDef.prototype.Initialize = function (bA, bB, anchor) {
- this.bodyA = bA;
- this.bodyB = bB;
- this.localAnchorA.SetV(this.bodyA.GetLocalPoint(anchor));
- this.localAnchorB.SetV(this.bodyB.GetLocalPoint(anchor));
- }
- Box2D.inherit(b2GearJoint, Box2D.Dynamics.Joints.b2Joint);
- b2GearJoint.prototype.__super = Box2D.Dynamics.Joints.b2Joint.prototype;
- b2GearJoint.b2GearJoint = function () {
- Box2D.Dynamics.Joints.b2Joint.b2Joint.apply(this, arguments);
- this.m_groundAnchor1 = new b2Vec2();
- this.m_groundAnchor2 = new b2Vec2();
- this.m_localAnchor1 = new b2Vec2();
- this.m_localAnchor2 = new b2Vec2();
- this.m_J = new b2Jacobian();
- };
- b2GearJoint.prototype.GetAnchorA = function () {
- return this.m_bodyA.GetWorldPoint(this.m_localAnchor1);
- }
- b2GearJoint.prototype.GetAnchorB = function () {
- return this.m_bodyB.GetWorldPoint(this.m_localAnchor2);
- }
- b2GearJoint.prototype.GetReactionForce = function (inv_dt) {
- if (inv_dt === undefined) inv_dt = 0;
- return new b2Vec2(inv_dt * this.m_impulse * this.m_J.linearB.x, inv_dt * this.m_impulse * this.m_J.linearB.y);
- }
- b2GearJoint.prototype.GetReactionTorque = function (inv_dt) {
- if (inv_dt === undefined) inv_dt = 0;
- var tMat = this.m_bodyB.m_xf.R;
- var rX = this.m_localAnchor1.x - this.m_bodyB.m_sweep.localCenter.x;
- var rY = this.m_localAnchor1.y - this.m_bodyB.m_sweep.localCenter.y;
- var tX = tMat.col1.x * rX + tMat.col2.x * rY;
- rY = tMat.col1.y * rX + tMat.col2.y * rY;
- rX = tX;
- var PX = this.m_impulse * this.m_J.linearB.x;
- var PY = this.m_impulse * this.m_J.linearB.y;
- return inv_dt * (this.m_impulse * this.m_J.angularB - rX * PY + rY * PX);
- }
- b2GearJoint.prototype.GetRatio = function () {
- return this.m_ratio;
- }
- b2GearJoint.prototype.SetRatio = function (ratio) {
- if (ratio === undefined) ratio = 0;
- this.m_ratio = ratio;
- }
- b2GearJoint.prototype.b2GearJoint = function (def) {
- this.__super.b2Joint.call(this, def);
- var type1 = parseInt(def.joint1.m_type);
- var type2 = parseInt(def.joint2.m_type);
- this.m_revolute1 = null;
- this.m_prismatic1 = null;
- this.m_revolute2 = null;
- this.m_prismatic2 = null;
- var coordinate1 = 0;
- var coordinate2 = 0;
- this.m_ground1 = def.joint1.GetBodyA();
- this.m_bodyA = def.joint1.GetBodyB();
- if (type1 == b2Joint.e_revoluteJoint) {
- this.m_revolute1 = (def.joint1 instanceof b2RevoluteJoint ? def.joint1 : null);
- this.m_groundAnchor1.SetV(this.m_revolute1.m_localAnchor1);
- this.m_localAnchor1.SetV(this.m_revolute1.m_localAnchor2);
- coordinate1 = this.m_revolute1.GetJointAngle();
- }
- else {
- this.m_prismatic1 = (def.joint1 instanceof b2PrismaticJoint ? def.joint1 : null);
- this.m_groundAnchor1.SetV(this.m_prismatic1.m_localAnchor1);
- this.m_localAnchor1.SetV(this.m_prismatic1.m_localAnchor2);
- coordinate1 = this.m_prismatic1.GetJointTranslation();
- }
- this.m_ground2 = def.joint2.GetBodyA();
- this.m_bodyB = def.joint2.GetBodyB();
- if (type2 == b2Joint.e_revoluteJoint) {
- this.m_revolute2 = (def.joint2 instanceof b2RevoluteJoint ? def.joint2 : null);
- this.m_groundAnchor2.SetV(this.m_revolute2.m_localAnchor1);
- this.m_localAnchor2.SetV(this.m_revolute2.m_localAnchor2);
- coordinate2 = this.m_revolute2.GetJointAngle();
- }
- else {
- this.m_prismatic2 = (def.joint2 instanceof b2PrismaticJoint ? def.joint2 : null);
- this.m_groundAnchor2.SetV(this.m_prismatic2.m_localAnchor1);
- this.m_localAnchor2.SetV(this.m_prismatic2.m_localAnchor2);
- coordinate2 = this.m_prismatic2.GetJointTranslation();
- }
- this.m_ratio = def.ratio;
- this.m_constant = coordinate1 + this.m_ratio * coordinate2;
- this.m_impulse = 0.0;
- }
- b2GearJoint.prototype.InitVelocityConstraints = function (step) {
- var g1 = this.m_ground1;
- var g2 = this.m_ground2;
- var bA = this.m_bodyA;
- var bB = this.m_bodyB;
- var ugX = 0;
- var ugY = 0;
- var rX = 0;
- var rY = 0;
- var tMat;
- var tVec;
- var crug = 0;
- var tX = 0;
- var K = 0.0;
- this.m_J.SetZero();
- if (this.m_revolute1) {
- this.m_J.angularA = (-1.0);
- K += bA.m_invI;
- }
- else {
- tMat = g1.m_xf.R;
- tVec = this.m_prismatic1.m_localXAxis1;
- ugX = tMat.col1.x * tVec.x + tMat.col2.x * tVec.y;
- ugY = tMat.col1.y * tVec.x + tMat.col2.y * tVec.y;
- tMat = bA.m_xf.R;
- rX = this.m_localAnchor1.x - bA.m_sweep.localCenter.x;
- rY = this.m_localAnchor1.y - bA.m_sweep.localCenter.y;
- tX = tMat.col1.x * rX + tMat.col2.x * rY;
- rY = tMat.col1.y * rX + tMat.col2.y * rY;
- rX = tX;
- crug = rX * ugY - rY * ugX;
- this.m_J.linearA.Set((-ugX), (-ugY));
- this.m_J.angularA = (-crug);
- K += bA.m_invMass + bA.m_invI * crug * crug;
- }
- if (this.m_revolute2) {
- this.m_J.angularB = (-this.m_ratio);
- K += this.m_ratio * this.m_ratio * bB.m_invI;
- }
- else {
- tMat = g2.m_xf.R;
- tVec = this.m_prismatic2.m_localXAxis1;
- ugX = tMat.col1.x * tVec.x + tMat.col2.x * tVec.y;
- ugY = tMat.col1.y * tVec.x + tMat.col2.y * tVec.y;
- tMat = bB.m_xf.R;
- rX = this.m_localAnchor2.x - bB.m_sweep.localCenter.x;
- rY = this.m_localAnchor2.y - bB.m_sweep.localCenter.y;
- tX = tMat.col1.x * rX + tMat.col2.x * rY;
- rY = tMat.col1.y * rX + tMat.col2.y * rY;
- rX = tX;
- crug = rX * ugY - rY * ugX;
- this.m_J.linearB.Set((-this.m_ratio * ugX), (-this.m_ratio * ugY));
- this.m_J.angularB = (-this.m_ratio * crug);
- K += this.m_ratio * this.m_ratio * (bB.m_invMass + bB.m_invI * crug * crug);
- }
- this.m_mass = K > 0.0 ? 1.0 / K : 0.0;
- if (step.warmStarting) {
- bA.m_linearVelocity.x += bA.m_invMass * this.m_impulse * this.m_J.linearA.x;
- bA.m_linearVelocity.y += bA.m_invMass * this.m_impulse * this.m_J.linearA.y;
- bA.m_angularVelocity += bA.m_invI * this.m_impulse * this.m_J.angularA;
- bB.m_linearVelocity.x += bB.m_invMass * this.m_impulse * this.m_J.linearB.x;
- bB.m_linearVelocity.y += bB.m_invMass * this.m_impulse * this.m_J.linearB.y;
- bB.m_angularVelocity += bB.m_invI * this.m_impulse * this.m_J.angularB;
- }
- else {
- this.m_impulse = 0.0;
- }
- }
- b2GearJoint.prototype.SolveVelocityConstraints = function (step) {
- var bA = this.m_bodyA;
- var bB = this.m_bodyB;
- var Cdot = this.m_J.Compute(bA.m_linearVelocity, bA.m_angularVelocity, bB.m_linearVelocity, bB.m_angularVelocity);
- var impulse = (-this.m_mass * Cdot);
- this.m_impulse += impulse;
- bA.m_linearVelocity.x += bA.m_invMass * impulse * this.m_J.linearA.x;
- bA.m_linearVelocity.y += bA.m_invMass * impulse * this.m_J.linearA.y;
- bA.m_angularVelocity += bA.m_invI * impulse * this.m_J.angularA;
- bB.m_linearVelocity.x += bB.m_invMass * impulse * this.m_J.linearB.x;
- bB.m_linearVelocity.y += bB.m_invMass * impulse * this.m_J.linearB.y;
- bB.m_angularVelocity += bB.m_invI * impulse * this.m_J.angularB;
- }
- b2GearJoint.prototype.SolvePositionConstraints = function (baumgarte) {
- if (baumgarte === undefined) baumgarte = 0;
- var linearError = 0.0;
- var bA = this.m_bodyA;
- var bB = this.m_bodyB;
- var coordinate1 = 0;
- var coordinate2 = 0;
- if (this.m_revolute1) {
- coordinate1 = this.m_revolute1.GetJointAngle();
- }
- else {
- coordinate1 = this.m_prismatic1.GetJointTranslation();
- }
- if (this.m_revolute2) {
- coordinate2 = this.m_revolute2.GetJointAngle();
- }
- else {
- coordinate2 = this.m_prismatic2.GetJointTranslation();
- }
- var C = this.m_constant - (coordinate1 + this.m_ratio * coordinate2);
- var impulse = (-this.m_mass * C);
- bA.m_sweep.c.x += bA.m_invMass * impulse * this.m_J.linearA.x;
- bA.m_sweep.c.y += bA.m_invMass * impulse * this.m_J.linearA.y;
- bA.m_sweep.a += bA.m_invI * impulse * this.m_J.angularA;
- bB.m_sweep.c.x += bB.m_invMass * impulse * this.m_J.linearB.x;
- bB.m_sweep.c.y += bB.m_invMass * impulse * this.m_J.linearB.y;
- bB.m_sweep.a += bB.m_invI * impulse * this.m_J.angularB;
- bA.SynchronizeTransform();
- bB.SynchronizeTransform();
- return linearError < b2Settings.b2_linearSlop;
- }
- Box2D.inherit(b2GearJointDef, Box2D.Dynamics.Joints.b2JointDef);
- b2GearJointDef.prototype.__super = Box2D.Dynamics.Joints.b2JointDef.prototype;
- b2GearJointDef.b2GearJointDef = function () {
- Box2D.Dynamics.Joints.b2JointDef.b2JointDef.apply(this, arguments);
- };
- b2GearJointDef.prototype.b2GearJointDef = function () {
- this.__super.b2JointDef.call(this);
- this.type = b2Joint.e_gearJoint;
- this.joint1 = null;
- this.joint2 = null;
- this.ratio = 1.0;
- }
- b2Jacobian.b2Jacobian = function () {
- this.linearA = new b2Vec2();
- this.linearB = new b2Vec2();
- };
- b2Jacobian.prototype.SetZero = function () {
- this.linearA.SetZero();
- this.angularA = 0.0;
- this.linearB.SetZero();
- this.angularB = 0.0;
- }
- b2Jacobian.prototype.Set = function (x1, a1, x2, a2) {
- if (a1 === undefined) a1 = 0;
- if (a2 === undefined) a2 = 0;
- this.linearA.SetV(x1);
- this.angularA = a1;
- this.linearB.SetV(x2);
- this.angularB = a2;
- }
- b2Jacobian.prototype.Compute = function (x1, a1, x2, a2) {
- if (a1 === undefined) a1 = 0;
- if (a2 === undefined) a2 = 0;
- return (this.linearA.x * x1.x + this.linearA.y * x1.y) + this.angularA * a1 + (this.linearB.x * x2.x + this.linearB.y * x2.y) + this.angularB * a2;
- }
- b2Joint.b2Joint = function () {
- this.m_edgeA = new b2JointEdge();
- this.m_edgeB = new b2JointEdge();
- this.m_localCenterA = new b2Vec2();
- this.m_localCenterB = new b2Vec2();
- };
- b2Joint.prototype.GetType = function () {
- return this.m_type;
- }
- b2Joint.prototype.GetAnchorA = function () {
- return null;
- }
- b2Joint.prototype.GetAnchorB = function () {
- return null;
- }
- b2Joint.prototype.GetReactionForce = function (inv_dt) {
- if (inv_dt === undefined) inv_dt = 0;
- return null;
- }
- b2Joint.prototype.GetReactionTorque = function (inv_dt) {
- if (inv_dt === undefined) inv_dt = 0;
- return 0.0;
- }
- b2Joint.prototype.GetBodyA = function () {
- return this.m_bodyA;
- }
- b2Joint.prototype.GetBodyB = function () {
- return this.m_bodyB;
- }
- b2Joint.prototype.GetNext = function () {
- return this.m_next;
- }
- b2Joint.prototype.GetUserData = function () {
- return this.m_userData;
- }
- b2Joint.prototype.SetUserData = function (data) {
- this.m_userData = data;
- }
- b2Joint.prototype.IsActive = function () {
- return this.m_bodyA.IsActive() && this.m_bodyB.IsActive();
- }
- b2Joint.Create = function (def, allocator) {
- var joint = null;
- switch (def.type) {
- case b2Joint.e_distanceJoint:
- {
- joint = new b2DistanceJoint((def instanceof b2DistanceJointDef ? def : null));
- }
- break;
- case b2Joint.e_mouseJoint:
- {
- joint = new b2MouseJoint((def instanceof b2MouseJointDef ? def : null));
- }
- break;
- case b2Joint.e_prismaticJoint:
- {
- joint = new b2PrismaticJoint((def instanceof b2PrismaticJointDef ? def : null));
- }
- break;
- case b2Joint.e_revoluteJoint:
- {
- joint = new b2RevoluteJoint((def instanceof b2RevoluteJointDef ? def : null));
- }
- break;
- case b2Joint.e_pulleyJoint:
- {
- joint = new b2PulleyJoint((def instanceof b2PulleyJointDef ? def : null));
- }
- break;
- case b2Joint.e_gearJoint:
- {
- joint = new b2GearJoint((def instanceof b2GearJointDef ? def : null));
- }
- break;
- case b2Joint.e_lineJoint:
- {
- joint = new b2LineJoint((def instanceof b2LineJointDef ? def : null));
- }
- break;
- case b2Joint.e_weldJoint:
- {
- joint = new b2WeldJoint((def instanceof b2WeldJointDef ? def : null));
- }
- break;
- case b2Joint.e_frictionJoint:
- {
- joint = new b2FrictionJoint((def instanceof b2FrictionJointDef ? def : null));
- }
- break;
- default:
- break;
- }
- return joint;
- }
- b2Joint.Destroy = function (joint, allocator) {}
- b2Joint.prototype.b2Joint = function (def) {
- b2Settings.b2Assert(def.bodyA != def.bodyB);
- this.m_type = def.type;
- this.m_prev = null;
- this.m_next = null;
- this.m_bodyA = def.bodyA;
- this.m_bodyB = def.bodyB;
- this.m_collideConnected = def.collideConnected;
- this.m_islandFlag = false;
- this.m_userData = def.userData;
- }
- b2Joint.prototype.InitVelocityConstraints = function (step) {}
- b2Joint.prototype.SolveVelocityConstraints = function (step) {}
- b2Joint.prototype.FinalizeVelocityConstraints = function () {}
- b2Joint.prototype.SolvePositionConstraints = function (baumgarte) {
- if (baumgarte === undefined) baumgarte = 0;
- return false;
- }
- Box2D.postDefs.push(function () {
- Box2D.Dynamics.Joints.b2Joint.e_unknownJoint = 0;
- Box2D.Dynamics.Joints.b2Joint.e_revoluteJoint = 1;
- Box2D.Dynamics.Joints.b2Joint.e_prismaticJoint = 2;
- Box2D.Dynamics.Joints.b2Joint.e_distanceJoint = 3;
- Box2D.Dynamics.Joints.b2Joint.e_pulleyJoint = 4;
- Box2D.Dynamics.Joints.b2Joint.e_mouseJoint = 5;
- Box2D.Dynamics.Joints.b2Joint.e_gearJoint = 6;
- Box2D.Dynamics.Joints.b2Joint.e_lineJoint = 7;
- Box2D.Dynamics.Joints.b2Joint.e_weldJoint = 8;
- Box2D.Dynamics.Joints.b2Joint.e_frictionJoint = 9;
- Box2D.Dynamics.Joints.b2Joint.e_inactiveLimit = 0;
- Box2D.Dynamics.Joints.b2Joint.e_atLowerLimit = 1;
- Box2D.Dynamics.Joints.b2Joint.e_atUpperLimit = 2;
- Box2D.Dynamics.Joints.b2Joint.e_equalLimits = 3;
- });
- b2JointDef.b2JointDef = function () {};
- b2JointDef.prototype.b2JointDef = function () {
- this.type = b2Joint.e_unknownJoint;
- this.userData = null;
- this.bodyA = null;
- this.bodyB = null;
- this.collideConnected = false;
- }
- b2JointEdge.b2JointEdge = function () {};
- Box2D.inherit(b2LineJoint, Box2D.Dynamics.Joints.b2Joint);
- b2LineJoint.prototype.__super = Box2D.Dynamics.Joints.b2Joint.prototype;
- b2LineJoint.b2LineJoint = function () {
- Box2D.Dynamics.Joints.b2Joint.b2Joint.apply(this, arguments);
- this.m_localAnchor1 = new b2Vec2();
- this.m_localAnchor2 = new b2Vec2();
- this.m_localXAxis1 = new b2Vec2();
- this.m_localYAxis1 = new b2Vec2();
- this.m_axis = new b2Vec2();
- this.m_perp = new b2Vec2();
- this.m_K = new b2Mat22();
- this.m_impulse = new b2Vec2();
- };
- b2LineJoint.prototype.GetAnchorA = function () {
- return this.m_bodyA.GetWorldPoint(this.m_localAnchor1);
- }
- b2LineJoint.prototype.GetAnchorB = function () {
- return this.m_bodyB.GetWorldPoint(this.m_localAnchor2);
- }
- b2LineJoint.prototype.GetReactionForce = function (inv_dt) {
- if (inv_dt === undefined) inv_dt = 0;
- return new b2Vec2(inv_dt * (this.m_impulse.x * this.m_perp.x + (this.m_motorImpulse + this.m_impulse.y) * this.m_axis.x), inv_dt * (this.m_impulse.x * this.m_perp.y + (this.m_motorImpulse + this.m_impulse.y) * this.m_axis.y));
- }
- b2LineJoint.prototype.GetReactionTorque = function (inv_dt) {
- if (inv_dt === undefined) inv_dt = 0;
- return inv_dt * this.m_impulse.y;
- }
- b2LineJoint.prototype.GetJointTranslation = function () {
- var bA = this.m_bodyA;
- var bB = this.m_bodyB;
- var tMat;
- var p1 = bA.GetWorldPoint(this.m_localAnchor1);
- var p2 = bB.GetWorldPoint(this.m_localAnchor2);
- var dX = p2.x - p1.x;
- var dY = p2.y - p1.y;
- var axis = bA.GetWorldVector(this.m_localXAxis1);
- var translation = axis.x * dX + axis.y * dY;
- return translation;
- }
- b2LineJoint.prototype.GetJointSpeed = function () {
- var bA = this.m_bodyA;
- var bB = this.m_bodyB;
- var tMat;
- tMat = bA.m_xf.R;
- var r1X = this.m_localAnchor1.x - bA.m_sweep.localCenter.x;
- var r1Y = this.m_localAnchor1.y - bA.m_sweep.localCenter.y;
- var tX = (tMat.col1.x * r1X + tMat.col2.x * r1Y);
- r1Y = (tMat.col1.y * r1X + tMat.col2.y * r1Y);
- r1X = tX;
- tMat = bB.m_xf.R;
- var r2X = this.m_localAnchor2.x - bB.m_sweep.localCenter.x;
- var r2Y = this.m_localAnchor2.y - bB.m_sweep.localCenter.y;
- tX = (tMat.col1.x * r2X + tMat.col2.x * r2Y);
- r2Y = (tMat.col1.y * r2X + tMat.col2.y * r2Y);
- r2X = tX;
- var p1X = bA.m_sweep.c.x + r1X;
- var p1Y = bA.m_sweep.c.y + r1Y;
- var p2X = bB.m_sweep.c.x + r2X;
- var p2Y = bB.m_sweep.c.y + r2Y;
- var dX = p2X - p1X;
- var dY = p2Y - p1Y;
- var axis = bA.GetWorldVector(this.m_localXAxis1);
- var v1 = bA.m_linearVelocity;
- var v2 = bB.m_linearVelocity;
- var w1 = bA.m_angularVelocity;
- var w2 = bB.m_angularVelocity;
- var speed = (dX * ((-w1 * axis.y)) + dY * (w1 * axis.x)) + (axis.x * (((v2.x + ((-w2 * r2Y))) - v1.x) - ((-w1 * r1Y))) + axis.y * (((v2.y + (w2 * r2X)) - v1.y) - (w1 * r1X)));
- return speed;
- }
- b2LineJoint.prototype.IsLimitEnabled = function () {
- return this.m_enableLimit;
- }
- b2LineJoint.prototype.EnableLimit = function (flag) {
- this.m_bodyA.SetAwake(true);
- this.m_bodyB.SetAwake(true);
- this.m_enableLimit = flag;
- }
- b2LineJoint.prototype.GetLowerLimit = function () {
- return this.m_lowerTranslation;
- }
- b2LineJoint.prototype.GetUpperLimit = function () {
- return this.m_upperTranslation;
- }
- b2LineJoint.prototype.SetLimits = function (lower, upper) {
- if (lower === undefined) lower = 0;
- if (upper === undefined) upper = 0;
- this.m_bodyA.SetAwake(true);
- this.m_bodyB.SetAwake(true);
- this.m_lowerTranslation = lower;
- this.m_upperTranslation = upper;
- }
- b2LineJoint.prototype.IsMotorEnabled = function () {
- return this.m_enableMotor;
- }
- b2LineJoint.prototype.EnableMotor = function (flag) {
- this.m_bodyA.SetAwake(true);
- this.m_bodyB.SetAwake(true);
- this.m_enableMotor = flag;
- }
- b2LineJoint.prototype.SetMotorSpeed = function (speed) {
- if (speed === undefined) speed = 0;
- this.m_bodyA.SetAwake(true);
- this.m_bodyB.SetAwake(true);
- this.m_motorSpeed = speed;
- }
- b2LineJoint.prototype.GetMotorSpeed = function () {
- return this.m_motorSpeed;
- }
- b2LineJoint.prototype.SetMaxMotorForce = function (force) {
- if (force === undefined) force = 0;
- this.m_bodyA.SetAwake(true);
- this.m_bodyB.SetAwake(true);
- this.m_maxMotorForce = force;
- }
- b2LineJoint.prototype.GetMaxMotorForce = function () {
- return this.m_maxMotorForce;
- }
- b2LineJoint.prototype.GetMotorForce = function () {
- return this.m_motorImpulse;
- }
- b2LineJoint.prototype.b2LineJoint = function (def) {
- this.__super.b2Joint.call(this, def);
- var tMat;
- var tX = 0;
- var tY = 0;
- this.m_localAnchor1.SetV(def.localAnchorA);
- this.m_localAnchor2.SetV(def.localAnchorB);
- this.m_localXAxis1.SetV(def.localAxisA);
- this.m_localYAxis1.x = (-this.m_localXAxis1.y);
- this.m_localYAxis1.y = this.m_localXAxis1.x;
- this.m_impulse.SetZero();
- this.m_motorMass = 0.0;
- this.m_motorImpulse = 0.0;
- this.m_lowerTranslation = def.lowerTranslation;
- this.m_upperTranslation = def.upperTranslation;
- this.m_maxMotorForce = def.maxMotorForce;
- this.m_motorSpeed = def.motorSpeed;
- this.m_enableLimit = def.enableLimit;
- this.m_enableMotor = def.enableMotor;
- this.m_limitState = b2Joint.e_inactiveLimit;
- this.m_axis.SetZero();
- this.m_perp.SetZero();
- }
- b2LineJoint.prototype.InitVelocityConstraints = function (step) {
- var bA = this.m_bodyA;
- var bB = this.m_bodyB;
- var tMat;
- var tX = 0;
- this.m_localCenterA.SetV(bA.GetLocalCenter());
- this.m_localCenterB.SetV(bB.GetLocalCenter());
- var xf1 = bA.GetTransform();
- var xf2 = bB.GetTransform();
- tMat = bA.m_xf.R;
- var r1X = this.m_localAnchor1.x - this.m_localCenterA.x;
- var r1Y = this.m_localAnchor1.y - this.m_localCenterA.y;
- tX = (tMat.col1.x * r1X + tMat.col2.x * r1Y);
- r1Y = (tMat.col1.y * r1X + tMat.col2.y * r1Y);
- r1X = tX;
- tMat = bB.m_xf.R;
- var r2X = this.m_localAnchor2.x - this.m_localCenterB.x;
- var r2Y = this.m_localAnchor2.y - this.m_localCenterB.y;
- tX = (tMat.col1.x * r2X + tMat.col2.x * r2Y);
- r2Y = (tMat.col1.y * r2X + tMat.col2.y * r2Y);
- r2X = tX;
- var dX = bB.m_sweep.c.x + r2X - bA.m_sweep.c.x - r1X;
- var dY = bB.m_sweep.c.y + r2Y - bA.m_sweep.c.y - r1Y;
- this.m_invMassA = bA.m_invMass;
- this.m_invMassB = bB.m_invMass;
- this.m_invIA = bA.m_invI;
- this.m_invIB = bB.m_invI; {
- this.m_axis.SetV(b2Math.MulMV(xf1.R, this.m_localXAxis1));
- this.m_a1 = (dX + r1X) * this.m_axis.y - (dY + r1Y) * this.m_axis.x;
- this.m_a2 = r2X * this.m_axis.y - r2Y * this.m_axis.x;
- this.m_motorMass = this.m_invMassA + this.m_invMassB + this.m_invIA * this.m_a1 * this.m_a1 + this.m_invIB * this.m_a2 * this.m_a2;
- this.m_motorMass = this.m_motorMass > Number.MIN_VALUE ? 1.0 / this.m_motorMass : 0.0;
- } {
- this.m_perp.SetV(b2Math.MulMV(xf1.R, this.m_localYAxis1));
- this.m_s1 = (dX + r1X) * this.m_perp.y - (dY + r1Y) * this.m_perp.x;
- this.m_s2 = r2X * this.m_perp.y - r2Y * this.m_perp.x;
- var m1 = this.m_invMassA;
- var m2 = this.m_invMassB;
- var i1 = this.m_invIA;
- var i2 = this.m_invIB;
- this.m_K.col1.x = m1 + m2 + i1 * this.m_s1 * this.m_s1 + i2 * this.m_s2 * this.m_s2;
- this.m_K.col1.y = i1 * this.m_s1 * this.m_a1 + i2 * this.m_s2 * this.m_a2;
- this.m_K.col2.x = this.m_K.col1.y;
- this.m_K.col2.y = m1 + m2 + i1 * this.m_a1 * this.m_a1 + i2 * this.m_a2 * this.m_a2;
- }
- if (this.m_enableLimit) {
- var jointTransition = this.m_axis.x * dX + this.m_axis.y * dY;
- if (b2Math.Abs(this.m_upperTranslation - this.m_lowerTranslation) < 2.0 * b2Settings.b2_linearSlop) {
- this.m_limitState = b2Joint.e_equalLimits;
- }
- else if (jointTransition <= this.m_lowerTranslation) {
- if (this.m_limitState != b2Joint.e_atLowerLimit) {
- this.m_limitState = b2Joint.e_atLowerLimit;
- this.m_impulse.y = 0.0;
- }
- }
- else if (jointTransition >= this.m_upperTranslation) {
- if (this.m_limitState != b2Joint.e_atUpperLimit) {
- this.m_limitState = b2Joint.e_atUpperLimit;
- this.m_impulse.y = 0.0;
- }
- }
- else {
- this.m_limitState = b2Joint.e_inactiveLimit;
- this.m_impulse.y = 0.0;
- }
- }
- else {
- this.m_limitState = b2Joint.e_inactiveLimit;
- }
- if (this.m_enableMotor == false) {
- this.m_motorImpulse = 0.0;
- }
- if (step.warmStarting) {
- this.m_impulse.x *= step.dtRatio;
- this.m_impulse.y *= step.dtRatio;
- this.m_motorImpulse *= step.dtRatio;
- var PX = this.m_impulse.x * this.m_perp.x + (this.m_motorImpulse + this.m_impulse.y) * this.m_axis.x;
- var PY = this.m_impulse.x * this.m_perp.y + (this.m_motorImpulse + this.m_impulse.y) * this.m_axis.y;
- var L1 = this.m_impulse.x * this.m_s1 + (this.m_motorImpulse + this.m_impulse.y) * this.m_a1;
- var L2 = this.m_impulse.x * this.m_s2 + (this.m_motorImpulse + this.m_impulse.y) * this.m_a2;
- bA.m_linearVelocity.x -= this.m_invMassA * PX;
- bA.m_linearVelocity.y -= this.m_invMassA * PY;
- bA.m_angularVelocity -= this.m_invIA * L1;
- bB.m_linearVelocity.x += this.m_invMassB * PX;
- bB.m_linearVelocity.y += this.m_invMassB * PY;
- bB.m_angularVelocity += this.m_invIB * L2;
- }
- else {
- this.m_impulse.SetZero();
- this.m_motorImpulse = 0.0;
- }
- }
- b2LineJoint.prototype.SolveVelocityConstraints = function (step) {
- var bA = this.m_bodyA;
- var bB = this.m_bodyB;
- var v1 = bA.m_linearVelocity;
- var w1 = bA.m_angularVelocity;
- var v2 = bB.m_linearVelocity;
- var w2 = bB.m_angularVelocity;
- var PX = 0;
- var PY = 0;
- var L1 = 0;
- var L2 = 0;
- if (this.m_enableMotor && this.m_limitState != b2Joint.e_equalLimits) {
- var Cdot = this.m_axis.x * (v2.x - v1.x) + this.m_axis.y * (v2.y - v1.y) + this.m_a2 * w2 - this.m_a1 * w1;
- var impulse = this.m_motorMass * (this.m_motorSpeed - Cdot);
- var oldImpulse = this.m_motorImpulse;
- var maxImpulse = step.dt * this.m_maxMotorForce;
- this.m_motorImpulse = b2Math.Clamp(this.m_motorImpulse + impulse, (-maxImpulse), maxImpulse);
- impulse = this.m_motorImpulse - oldImpulse;
- PX = impulse * this.m_axis.x;
- PY = impulse * this.m_axis.y;
- L1 = impulse * this.m_a1;
- L2 = impulse * this.m_a2;
- v1.x -= this.m_invMassA * PX;
- v1.y -= this.m_invMassA * PY;
- w1 -= this.m_invIA * L1;
- v2.x += this.m_invMassB * PX;
- v2.y += this.m_invMassB * PY;
- w2 += this.m_invIB * L2;
- }
- var Cdot1 = this.m_perp.x * (v2.x - v1.x) + this.m_perp.y * (v2.y - v1.y) + this.m_s2 * w2 - this.m_s1 * w1;
- if (this.m_enableLimit && this.m_limitState != b2Joint.e_inactiveLimit) {
- var Cdot2 = this.m_axis.x * (v2.x - v1.x) + this.m_axis.y * (v2.y - v1.y) + this.m_a2 * w2 - this.m_a1 * w1;
- var f1 = this.m_impulse.Copy();
- var df = this.m_K.Solve(new b2Vec2(), (-Cdot1), (-Cdot2));
- this.m_impulse.Add(df);
- if (this.m_limitState == b2Joint.e_atLowerLimit) {
- this.m_impulse.y = b2Math.Max(this.m_impulse.y, 0.0);
- }
- else if (this.m_limitState == b2Joint.e_atUpperLimit) {
- this.m_impulse.y = b2Math.Min(this.m_impulse.y, 0.0);
- }
- var b = (-Cdot1) - (this.m_impulse.y - f1.y) * this.m_K.col2.x;
- var f2r = 0;
- if (this.m_K.col1.x != 0.0) {
- f2r = b / this.m_K.col1.x + f1.x;
- }
- else {
- f2r = f1.x;
- }
- this.m_impulse.x = f2r;
- df.x = this.m_impulse.x - f1.x;
- df.y = this.m_impulse.y - f1.y;
- PX = df.x * this.m_perp.x + df.y * this.m_axis.x;
- PY = df.x * this.m_perp.y + df.y * this.m_axis.y;
- L1 = df.x * this.m_s1 + df.y * this.m_a1;
- L2 = df.x * this.m_s2 + df.y * this.m_a2;
- v1.x -= this.m_invMassA * PX;
- v1.y -= this.m_invMassA * PY;
- w1 -= this.m_invIA * L1;
- v2.x += this.m_invMassB * PX;
- v2.y += this.m_invMassB * PY;
- w2 += this.m_invIB * L2;
- }
- else {
- var df2 = 0;
- if (this.m_K.col1.x != 0.0) {
- df2 = ((-Cdot1)) / this.m_K.col1.x;
- }
- else {
- df2 = 0.0;
- }
- this.m_impulse.x += df2;
- PX = df2 * this.m_perp.x;
- PY = df2 * this.m_perp.y;
- L1 = df2 * this.m_s1;
- L2 = df2 * this.m_s2;
- v1.x -= this.m_invMassA * PX;
- v1.y -= this.m_invMassA * PY;
- w1 -= this.m_invIA * L1;
- v2.x += this.m_invMassB * PX;
- v2.y += this.m_invMassB * PY;
- w2 += this.m_invIB * L2;
- }
- bA.m_linearVelocity.SetV(v1);
- bA.m_angularVelocity = w1;
- bB.m_linearVelocity.SetV(v2);
- bB.m_angularVelocity = w2;
- }
- b2LineJoint.prototype.SolvePositionConstraints = function (baumgarte) {
- if (baumgarte === undefined) baumgarte = 0;
- var limitC = 0;
- var oldLimitImpulse = 0;
- var bA = this.m_bodyA;
- var bB = this.m_bodyB;
- var c1 = bA.m_sweep.c;
- var a1 = bA.m_sweep.a;
- var c2 = bB.m_sweep.c;
- var a2 = bB.m_sweep.a;
- var tMat;
- var tX = 0;
- var m1 = 0;
- var m2 = 0;
- var i1 = 0;
- var i2 = 0;
- var linearError = 0.0;
- var angularError = 0.0;
- var active = false;
- var C2 = 0.0;
- var R1 = b2Mat22.FromAngle(a1);
- var R2 = b2Mat22.FromAngle(a2);
- tMat = R1;
- var r1X = this.m_localAnchor1.x - this.m_localCenterA.x;
- var r1Y = this.m_localAnchor1.y - this.m_localCenterA.y;
- tX = (tMat.col1.x * r1X + tMat.col2.x * r1Y);
- r1Y = (tMat.col1.y * r1X + tMat.col2.y * r1Y);
- r1X = tX;
- tMat = R2;
- var r2X = this.m_localAnchor2.x - this.m_localCenterB.x;
- var r2Y = this.m_localAnchor2.y - this.m_localCenterB.y;
- tX = (tMat.col1.x * r2X + tMat.col2.x * r2Y);
- r2Y = (tMat.col1.y * r2X + tMat.col2.y * r2Y);
- r2X = tX;
- var dX = c2.x + r2X - c1.x - r1X;
- var dY = c2.y + r2Y - c1.y - r1Y;
- if (this.m_enableLimit) {
- this.m_axis = b2Math.MulMV(R1, this.m_localXAxis1);
- this.m_a1 = (dX + r1X) * this.m_axis.y - (dY + r1Y) * this.m_axis.x;
- this.m_a2 = r2X * this.m_axis.y - r2Y * this.m_axis.x;
- var translation = this.m_axis.x * dX + this.m_axis.y * dY;
- if (b2Math.Abs(this.m_upperTranslation - this.m_lowerTranslation) < 2.0 * b2Settings.b2_linearSlop) {
- C2 = b2Math.Clamp(translation, (-b2Settings.b2_maxLinearCorrection), b2Settings.b2_maxLinearCorrection);
- linearError = b2Math.Abs(translation);
- active = true;
- }
- else if (translation <= this.m_lowerTranslation) {
- C2 = b2Math.Clamp(translation - this.m_lowerTranslation + b2Settings.b2_linearSlop, (-b2Settings.b2_maxLinearCorrection), 0.0);
- linearError = this.m_lowerTranslation - translation;
- active = true;
- }
- else if (translation >= this.m_upperTranslation) {
- C2 = b2Math.Clamp(translation - this.m_upperTranslation + b2Settings.b2_linearSlop, 0.0, b2Settings.b2_maxLinearCorrection);
- linearError = translation - this.m_upperTranslation;
- active = true;
- }
- }
- this.m_perp = b2Math.MulMV(R1, this.m_localYAxis1);
- this.m_s1 = (dX + r1X) * this.m_perp.y - (dY + r1Y) * this.m_perp.x;
- this.m_s2 = r2X * this.m_perp.y - r2Y * this.m_perp.x;
- var impulse = new b2Vec2();
- var C1 = this.m_perp.x * dX + this.m_perp.y * dY;
- linearError = b2Math.Max(linearError, b2Math.Abs(C1));
- angularError = 0.0;
- if (active) {
- m1 = this.m_invMassA;
- m2 = this.m_invMassB;
- i1 = this.m_invIA;
- i2 = this.m_invIB;
- this.m_K.col1.x = m1 + m2 + i1 * this.m_s1 * this.m_s1 + i2 * this.m_s2 * this.m_s2;
- this.m_K.col1.y = i1 * this.m_s1 * this.m_a1 + i2 * this.m_s2 * this.m_a2;
- this.m_K.col2.x = this.m_K.col1.y;
- this.m_K.col2.y = m1 + m2 + i1 * this.m_a1 * this.m_a1 + i2 * this.m_a2 * this.m_a2;
- this.m_K.Solve(impulse, (-C1), (-C2));
- }
- else {
- m1 = this.m_invMassA;
- m2 = this.m_invMassB;
- i1 = this.m_invIA;
- i2 = this.m_invIB;
- var k11 = m1 + m2 + i1 * this.m_s1 * this.m_s1 + i2 * this.m_s2 * this.m_s2;
- var impulse1 = 0;
- if (k11 != 0.0) {
- impulse1 = ((-C1)) / k11;
- }
- else {
- impulse1 = 0.0;
- }
- impulse.x = impulse1;
- impulse.y = 0.0;
- }
- var PX = impulse.x * this.m_perp.x + impulse.y * this.m_axis.x;
- var PY = impulse.x * this.m_perp.y + impulse.y * this.m_axis.y;
- var L1 = impulse.x * this.m_s1 + impulse.y * this.m_a1;
- var L2 = impulse.x * this.m_s2 + impulse.y * this.m_a2;
- c1.x -= this.m_invMassA * PX;
- c1.y -= this.m_invMassA * PY;
- a1 -= this.m_invIA * L1;
- c2.x += this.m_invMassB * PX;
- c2.y += this.m_invMassB * PY;
- a2 += this.m_invIB * L2;
- bA.m_sweep.a = a1;
- bB.m_sweep.a = a2;
- bA.SynchronizeTransform();
- bB.SynchronizeTransform();
-
- return linearError <= b2Settings.b2_linearSlop && angularError <= b2Settings.b2_angularSlop;
- }
- Box2D.inherit(b2LineJointDef, Box2D.Dynamics.Joints.b2JointDef);
- b2LineJointDef.prototype.__super = Box2D.Dynamics.Joints.b2JointDef.prototype;
- b2LineJointDef.b2LineJointDef = function () {
- Box2D.Dynamics.Joints.b2JointDef.b2JointDef.apply(this, arguments);
- this.localAnchorA = new b2Vec2();
- this.localAnchorB = new b2Vec2();
- this.localAxisA = new b2Vec2();
- };
- b2LineJointDef.prototype.b2LineJointDef = function () {
- this.__super.b2JointDef.call(this);
- this.type = b2Joint.e_lineJoint;
- this.localAxisA.Set(1.0, 0.0);
- this.enableLimit = false;
- this.lowerTranslation = 0.0;
- this.upperTranslation = 0.0;
- this.enableMotor = false;
- this.maxMotorForce = 0.0;
- this.motorSpeed = 0.0;
- }
- b2LineJointDef.prototype.Initialize = function (bA, bB, anchor, axis) {
- this.bodyA = bA;
- this.bodyB = bB;
- this.localAnchorA = this.bodyA.GetLocalPoint(anchor);
- this.localAnchorB = this.bodyB.GetLocalPoint(anchor);
- this.localAxisA = this.bodyA.GetLocalVector(axis);
- }
- Box2D.inherit(b2MouseJoint, Box2D.Dynamics.Joints.b2Joint);
- b2MouseJoint.prototype.__super = Box2D.Dynamics.Joints.b2Joint.prototype;
- b2MouseJoint.b2MouseJoint = function () {
- Box2D.Dynamics.Joints.b2Joint.b2Joint.apply(this, arguments);
- this.K = new b2Mat22();
- this.K1 = new b2Mat22();
- this.K2 = new b2Mat22();
- this.m_localAnchor = new b2Vec2();
- this.m_target = new b2Vec2();
- this.m_impulse = new b2Vec2();
- this.m_mass = new b2Mat22();
- this.m_C = new b2Vec2();
- };
- b2MouseJoint.prototype.GetAnchorA = function () {
- return this.m_target;
- }
- b2MouseJoint.prototype.GetAnchorB = function () {
- return this.m_bodyB.GetWorldPoint(this.m_localAnchor);
- }
- b2MouseJoint.prototype.GetReactionForce = function (inv_dt) {
- if (inv_dt === undefined) inv_dt = 0;
- return new b2Vec2(inv_dt * this.m_impulse.x, inv_dt * this.m_impulse.y);
- }
- b2MouseJoint.prototype.GetReactionTorque = function (inv_dt) {
- if (inv_dt === undefined) inv_dt = 0;
- return 0.0;
- }
- b2MouseJoint.prototype.GetTarget = function () {
- return this.m_target;
- }
- b2MouseJoint.prototype.SetTarget = function (target) {
- if (this.m_bodyB.IsAwake() == false) {
- this.m_bodyB.SetAwake(true);
- }
- this.m_target = target;
- }
- b2MouseJoint.prototype.GetMaxForce = function () {
- return this.m_maxForce;
- }
- b2MouseJoint.prototype.SetMaxForce = function (maxForce) {
- if (maxForce === undefined) maxForce = 0;
- this.m_maxForce = maxForce;
- }
- b2MouseJoint.prototype.GetFrequency = function () {
- return this.m_frequencyHz;
- }
- b2MouseJoint.prototype.SetFrequency = function (hz) {
- if (hz === undefined) hz = 0;
- this.m_frequencyHz = hz;
- }
- b2MouseJoint.prototype.GetDampingRatio = function () {
- return this.m_dampingRatio;
- }
- b2MouseJoint.prototype.SetDampingRatio = function (ratio) {
- if (ratio === undefined) ratio = 0;
- this.m_dampingRatio = ratio;
- }
- b2MouseJoint.prototype.b2MouseJoint = function (def) {
- this.__super.b2Joint.call(this, def);
- this.m_target.SetV(def.target);
- var tX = this.m_target.x - this.m_bodyB.m_xf.position.x;
- var tY = this.m_target.y - this.m_bodyB.m_xf.position.y;
- var tMat = this.m_bodyB.m_xf.R;
- this.m_localAnchor.x = (tX * tMat.col1.x + tY * tMat.col1.y);
- this.m_localAnchor.y = (tX * tMat.col2.x + tY * tMat.col2.y);
- this.m_maxForce = def.maxForce;
- this.m_impulse.SetZero();
- this.m_frequencyHz = def.frequencyHz;
- this.m_dampingRatio = def.dampingRatio;
- this.m_beta = 0.0;
- this.m_gamma = 0.0;
- }
- b2MouseJoint.prototype.InitVelocityConstraints = function (step) {
- var b = this.m_bodyB;
- var mass = b.GetMass();
- var omega = 2.0 * Math.PI * this.m_frequencyHz;
- var d = 2.0 * mass * this.m_dampingRatio * omega;
- var k = mass * omega * omega;
- this.m_gamma = step.dt * (d + step.dt * k);
- this.m_gamma = this.m_gamma != 0 ? 1 / this.m_gamma : 0.0;
- this.m_beta = step.dt * k * this.m_gamma;
- var tMat;tMat = b.m_xf.R;
- var rX = this.m_localAnchor.x - b.m_sweep.localCenter.x;
- var rY = this.m_localAnchor.y - b.m_sweep.localCenter.y;
- var tX = (tMat.col1.x * rX + tMat.col2.x * rY);rY = (tMat.col1.y * rX + tMat.col2.y * rY);
- rX = tX;
- var invMass = b.m_invMass;
- var invI = b.m_invI;this.K1.col1.x = invMass;
- this.K1.col2.x = 0.0;
- this.K1.col1.y = 0.0;
- this.K1.col2.y = invMass;
- this.K2.col1.x = invI * rY * rY;
- this.K2.col2.x = (-invI * rX * rY);
- this.K2.col1.y = (-invI * rX * rY);
- this.K2.col2.y = invI * rX * rX;
- this.K.SetM(this.K1);
- this.K.AddM(this.K2);
- this.K.col1.x += this.m_gamma;
- this.K.col2.y += this.m_gamma;
- this.K.GetInverse(this.m_mass);
- this.m_C.x = b.m_sweep.c.x + rX - this.m_target.x;
- this.m_C.y = b.m_sweep.c.y + rY - this.m_target.y;
- b.m_angularVelocity *= 0.98;
- this.m_impulse.x *= step.dtRatio;
- this.m_impulse.y *= step.dtRatio;
- b.m_linearVelocity.x += invMass * this.m_impulse.x;
- b.m_linearVelocity.y += invMass * this.m_impulse.y;
- b.m_angularVelocity += invI * (rX * this.m_impulse.y - rY * this.m_impulse.x);
- }
- b2MouseJoint.prototype.SolveVelocityConstraints = function (step) {
- var b = this.m_bodyB;
- var tMat;
- var tX = 0;
- var tY = 0;
- tMat = b.m_xf.R;
- var rX = this.m_localAnchor.x - b.m_sweep.localCenter.x;
- var rY = this.m_localAnchor.y - b.m_sweep.localCenter.y;
- tX = (tMat.col1.x * rX + tMat.col2.x * rY);
- rY = (tMat.col1.y * rX + tMat.col2.y * rY);
- rX = tX;
- var CdotX = b.m_linearVelocity.x + ((-b.m_angularVelocity * rY));
- var CdotY = b.m_linearVelocity.y + (b.m_angularVelocity * rX);
- tMat = this.m_mass;
- tX = CdotX + this.m_beta * this.m_C.x + this.m_gamma * this.m_impulse.x;
- tY = CdotY + this.m_beta * this.m_C.y + this.m_gamma * this.m_impulse.y;
- var impulseX = (-(tMat.col1.x * tX + tMat.col2.x * tY));
- var impulseY = (-(tMat.col1.y * tX + tMat.col2.y * tY));
- var oldImpulseX = this.m_impulse.x;
- var oldImpulseY = this.m_impulse.y;
- this.m_impulse.x += impulseX;
- this.m_impulse.y += impulseY;
- var maxImpulse = step.dt * this.m_maxForce;
- if (this.m_impulse.LengthSquared() > maxImpulse * maxImpulse) {
- this.m_impulse.Multiply(maxImpulse / this.m_impulse.Length());
- }
- impulseX = this.m_impulse.x - oldImpulseX;
- impulseY = this.m_impulse.y - oldImpulseY;
- b.m_linearVelocity.x += b.m_invMass * impulseX;
- b.m_linearVelocity.y += b.m_invMass * impulseY;
- b.m_angularVelocity += b.m_invI * (rX * impulseY - rY * impulseX);
- }
- b2MouseJoint.prototype.SolvePositionConstraints = function (baumgarte) {
- if (baumgarte === undefined) baumgarte = 0;
- return true;
- }
- Box2D.inherit(b2MouseJointDef, Box2D.Dynamics.Joints.b2JointDef);
- b2MouseJointDef.prototype.__super = Box2D.Dynamics.Joints.b2JointDef.prototype;
- b2MouseJointDef.b2MouseJointDef = function () {
- Box2D.Dynamics.Joints.b2JointDef.b2JointDef.apply(this, arguments);
- this.target = new b2Vec2();
- };
- b2MouseJointDef.prototype.b2MouseJointDef = function () {
- this.__super.b2JointDef.call(this);
- this.type = b2Joint.e_mouseJoint;
- this.maxForce = 0.0;
- this.frequencyHz = 5.0;
- this.dampingRatio = 0.7;
- }
- Box2D.inherit(b2PrismaticJoint, Box2D.Dynamics.Joints.b2Joint);
- b2PrismaticJoint.prototype.__super = Box2D.Dynamics.Joints.b2Joint.prototype;
- b2PrismaticJoint.b2PrismaticJoint = function () {
- Box2D.Dynamics.Joints.b2Joint.b2Joint.apply(this, arguments);
- this.m_localAnchor1 = new b2Vec2();
- this.m_localAnchor2 = new b2Vec2();
- this.m_localXAxis1 = new b2Vec2();
- this.m_localYAxis1 = new b2Vec2();
- this.m_axis = new b2Vec2();
- this.m_perp = new b2Vec2();
- this.m_K = new b2Mat33();
- this.m_impulse = new b2Vec3();
- };
- b2PrismaticJoint.prototype.GetAnchorA = function () {
- return this.m_bodyA.GetWorldPoint(this.m_localAnchor1);
- }
- b2PrismaticJoint.prototype.GetAnchorB = function () {
- return this.m_bodyB.GetWorldPoint(this.m_localAnchor2);
- }
- b2PrismaticJoint.prototype.GetReactionForce = function (inv_dt) {
- if (inv_dt === undefined) inv_dt = 0;
- return new b2Vec2(inv_dt * (this.m_impulse.x * this.m_perp.x + (this.m_motorImpulse + this.m_impulse.z) * this.m_axis.x), inv_dt * (this.m_impulse.x * this.m_perp.y + (this.m_motorImpulse + this.m_impulse.z) * this.m_axis.y));
- }
- b2PrismaticJoint.prototype.GetReactionTorque = function (inv_dt) {
- if (inv_dt === undefined) inv_dt = 0;
- return inv_dt * this.m_impulse.y;
- }
- b2PrismaticJoint.prototype.GetJointTranslation = function () {
- var bA = this.m_bodyA;
- var bB = this.m_bodyB;
- var tMat;
- var p1 = bA.GetWorldPoint(this.m_localAnchor1);
- var p2 = bB.GetWorldPoint(this.m_localAnchor2);
- var dX = p2.x - p1.x;
- var dY = p2.y - p1.y;
- var axis = bA.GetWorldVector(this.m_localXAxis1);
- var translation = axis.x * dX + axis.y * dY;
- return translation;
- }
- b2PrismaticJoint.prototype.GetJointSpeed = function () {
- var bA = this.m_bodyA;
- var bB = this.m_bodyB;
- var tMat;
- tMat = bA.m_xf.R;
- var r1X = this.m_localAnchor1.x - bA.m_sweep.localCenter.x;
- var r1Y = this.m_localAnchor1.y - bA.m_sweep.localCenter.y;
- var tX = (tMat.col1.x * r1X + tMat.col2.x * r1Y);
- r1Y = (tMat.col1.y * r1X + tMat.col2.y * r1Y);
- r1X = tX;
- tMat = bB.m_xf.R;
- var r2X = this.m_localAnchor2.x - bB.m_sweep.localCenter.x;
- var r2Y = this.m_localAnchor2.y - bB.m_sweep.localCenter.y;
- tX = (tMat.col1.x * r2X + tMat.col2.x * r2Y);
- r2Y = (tMat.col1.y * r2X + tMat.col2.y * r2Y);
- r2X = tX;
- var p1X = bA.m_sweep.c.x + r1X;
- var p1Y = bA.m_sweep.c.y + r1Y;
- var p2X = bB.m_sweep.c.x + r2X;
- var p2Y = bB.m_sweep.c.y + r2Y;
- var dX = p2X - p1X;
- var dY = p2Y - p1Y;
- var axis = bA.GetWorldVector(this.m_localXAxis1);
- var v1 = bA.m_linearVelocity;
- var v2 = bB.m_linearVelocity;
- var w1 = bA.m_angularVelocity;
- var w2 = bB.m_angularVelocity;
- var speed = (dX * ((-w1 * axis.y)) + dY * (w1 * axis.x)) + (axis.x * (((v2.x + ((-w2 * r2Y))) - v1.x) - ((-w1 * r1Y))) + axis.y * (((v2.y + (w2 * r2X)) - v1.y) - (w1 * r1X)));
- return speed;
- }
- b2PrismaticJoint.prototype.IsLimitEnabled = function () {
- return this.m_enableLimit;
- }
- b2PrismaticJoint.prototype.EnableLimit = function (flag) {
- this.m_bodyA.SetAwake(true);
- this.m_bodyB.SetAwake(true);
- this.m_enableLimit = flag;
- }
- b2PrismaticJoint.prototype.GetLowerLimit = function () {
- return this.m_lowerTranslation;
- }
- b2PrismaticJoint.prototype.GetUpperLimit = function () {
- return this.m_upperTranslation;
- }
- b2PrismaticJoint.prototype.SetLimits = function (lower, upper) {
- if (lower === undefined) lower = 0;
- if (upper === undefined) upper = 0;
- this.m_bodyA.SetAwake(true);
- this.m_bodyB.SetAwake(true);
- this.m_lowerTranslation = lower;
- this.m_upperTranslation = upper;
- }
- b2PrismaticJoint.prototype.IsMotorEnabled = function () {
- return this.m_enableMotor;
- }
- b2PrismaticJoint.prototype.EnableMotor = function (flag) {
- this.m_bodyA.SetAwake(true);
- this.m_bodyB.SetAwake(true);
- this.m_enableMotor = flag;
- }
- b2PrismaticJoint.prototype.SetMotorSpeed = function (speed) {
- if (speed === undefined) speed = 0;
- this.m_bodyA.SetAwake(true);
- this.m_bodyB.SetAwake(true);
- this.m_motorSpeed = speed;
- }
- b2PrismaticJoint.prototype.GetMotorSpeed = function () {
- return this.m_motorSpeed;
- }
- b2PrismaticJoint.prototype.SetMaxMotorForce = function (force) {
- if (force === undefined) force = 0;
- this.m_bodyA.SetAwake(true);
- this.m_bodyB.SetAwake(true);
- this.m_maxMotorForce = force;
- }
- b2PrismaticJoint.prototype.GetMotorForce = function () {
- return this.m_motorImpulse;
- }
- b2PrismaticJoint.prototype.b2PrismaticJoint = function (def) {
- this.__super.b2Joint.call(this, def);
- var tMat;
- var tX = 0;
- var tY = 0;
- this.m_localAnchor1.SetV(def.localAnchorA);
- this.m_localAnchor2.SetV(def.localAnchorB);
- this.m_localXAxis1.SetV(def.localAxisA);
- this.m_localYAxis1.x = (-this.m_localXAxis1.y);
- this.m_localYAxis1.y = this.m_localXAxis1.x;
- this.m_refAngle = def.referenceAngle;
- this.m_impulse.SetZero();
- this.m_motorMass = 0.0;
- this.m_motorImpulse = 0.0;
- this.m_lowerTranslation = def.lowerTranslation;
- this.m_upperTranslation = def.upperTranslation;
- this.m_maxMotorForce = def.maxMotorForce;
- this.m_motorSpeed = def.motorSpeed;
- this.m_enableLimit = def.enableLimit;
- this.m_enableMotor = def.enableMotor;
- this.m_limitState = b2Joint.e_inactiveLimit;
- this.m_axis.SetZero();
- this.m_perp.SetZero();
- }
- b2PrismaticJoint.prototype.InitVelocityConstraints = function (step) {
- var bA = this.m_bodyA;
- var bB = this.m_bodyB;
- var tMat;
- var tX = 0;
- this.m_localCenterA.SetV(bA.GetLocalCenter());
- this.m_localCenterB.SetV(bB.GetLocalCenter());
- var xf1 = bA.GetTransform();
- var xf2 = bB.GetTransform();
- tMat = bA.m_xf.R;
- var r1X = this.m_localAnchor1.x - this.m_localCenterA.x;
- var r1Y = this.m_localAnchor1.y - this.m_localCenterA.y;
- tX = (tMat.col1.x * r1X + tMat.col2.x * r1Y);
- r1Y = (tMat.col1.y * r1X + tMat.col2.y * r1Y);
- r1X = tX;
- tMat = bB.m_xf.R;
- var r2X = this.m_localAnchor2.x - this.m_localCenterB.x;
- var r2Y = this.m_localAnchor2.y - this.m_localCenterB.y;
- tX = (tMat.col1.x * r2X + tMat.col2.x * r2Y);
- r2Y = (tMat.col1.y * r2X + tMat.col2.y * r2Y);
- r2X = tX;
- var dX = bB.m_sweep.c.x + r2X - bA.m_sweep.c.x - r1X;
- var dY = bB.m_sweep.c.y + r2Y - bA.m_sweep.c.y - r1Y;
- this.m_invMassA = bA.m_invMass;
- this.m_invMassB = bB.m_invMass;
- this.m_invIA = bA.m_invI;
- this.m_invIB = bB.m_invI; {
- this.m_axis.SetV(b2Math.MulMV(xf1.R, this.m_localXAxis1));
- this.m_a1 = (dX + r1X) * this.m_axis.y - (dY + r1Y) * this.m_axis.x;
- this.m_a2 = r2X * this.m_axis.y - r2Y * this.m_axis.x;
- this.m_motorMass = this.m_invMassA + this.m_invMassB + this.m_invIA * this.m_a1 * this.m_a1 + this.m_invIB * this.m_a2 * this.m_a2;
- if (this.m_motorMass > Number.MIN_VALUE) this.m_motorMass = 1.0 / this.m_motorMass;
- } {
- this.m_perp.SetV(b2Math.MulMV(xf1.R, this.m_localYAxis1));
- this.m_s1 = (dX + r1X) * this.m_perp.y - (dY + r1Y) * this.m_perp.x;
- this.m_s2 = r2X * this.m_perp.y - r2Y * this.m_perp.x;
- var m1 = this.m_invMassA;
- var m2 = this.m_invMassB;
- var i1 = this.m_invIA;
- var i2 = this.m_invIB;
- this.m_K.col1.x = m1 + m2 + i1 * this.m_s1 * this.m_s1 + i2 * this.m_s2 * this.m_s2;
- this.m_K.col1.y = i1 * this.m_s1 + i2 * this.m_s2;
- this.m_K.col1.z = i1 * this.m_s1 * this.m_a1 + i2 * this.m_s2 * this.m_a2;
- this.m_K.col2.x = this.m_K.col1.y;
- this.m_K.col2.y = i1 + i2;
- this.m_K.col2.z = i1 * this.m_a1 + i2 * this.m_a2;
- this.m_K.col3.x = this.m_K.col1.z;
- this.m_K.col3.y = this.m_K.col2.z;
- this.m_K.col3.z = m1 + m2 + i1 * this.m_a1 * this.m_a1 + i2 * this.m_a2 * this.m_a2;
- }
- if (this.m_enableLimit) {
- var jointTransition = this.m_axis.x * dX + this.m_axis.y * dY;
- if (b2Math.Abs(this.m_upperTranslation - this.m_lowerTranslation) < 2.0 * b2Settings.b2_linearSlop) {
- this.m_limitState = b2Joint.e_equalLimits;
- }
- else if (jointTransition <= this.m_lowerTranslation) {
- if (this.m_limitState != b2Joint.e_atLowerLimit) {
- this.m_limitState = b2Joint.e_atLowerLimit;
- this.m_impulse.z = 0.0;
- }
- }
- else if (jointTransition >= this.m_upperTranslation) {
- if (this.m_limitState != b2Joint.e_atUpperLimit) {
- this.m_limitState = b2Joint.e_atUpperLimit;
- this.m_impulse.z = 0.0;
- }
- }
- else {
- this.m_limitState = b2Joint.e_inactiveLimit;
- this.m_impulse.z = 0.0;
- }
- }
- else {
- this.m_limitState = b2Joint.e_inactiveLimit;
- }
- if (this.m_enableMotor == false) {
- this.m_motorImpulse = 0.0;
- }
- if (step.warmStarting) {
- this.m_impulse.x *= step.dtRatio;
- this.m_impulse.y *= step.dtRatio;
- this.m_motorImpulse *= step.dtRatio;
- var PX = this.m_impulse.x * this.m_perp.x + (this.m_motorImpulse + this.m_impulse.z) * this.m_axis.x;
- var PY = this.m_impulse.x * this.m_perp.y + (this.m_motorImpulse + this.m_impulse.z) * this.m_axis.y;
- var L1 = this.m_impulse.x * this.m_s1 + this.m_impulse.y + (this.m_motorImpulse + this.m_impulse.z) * this.m_a1;
- var L2 = this.m_impulse.x * this.m_s2 + this.m_impulse.y + (this.m_motorImpulse + this.m_impulse.z) * this.m_a2;
- bA.m_linearVelocity.x -= this.m_invMassA * PX;
- bA.m_linearVelocity.y -= this.m_invMassA * PY;
- bA.m_angularVelocity -= this.m_invIA * L1;
- bB.m_linearVelocity.x += this.m_invMassB * PX;
- bB.m_linearVelocity.y += this.m_invMassB * PY;
- bB.m_angularVelocity += this.m_invIB * L2;
- }
- else {
- this.m_impulse.SetZero();
- this.m_motorImpulse = 0.0;
- }
- }
- b2PrismaticJoint.prototype.SolveVelocityConstraints = function (step) {
- var bA = this.m_bodyA;
- var bB = this.m_bodyB;
- var v1 = bA.m_linearVelocity;
- var w1 = bA.m_angularVelocity;
- var v2 = bB.m_linearVelocity;
- var w2 = bB.m_angularVelocity;
- var PX = 0;
- var PY = 0;
- var L1 = 0;
- var L2 = 0;
- if (this.m_enableMotor && this.m_limitState != b2Joint.e_equalLimits) {
- var Cdot = this.m_axis.x * (v2.x - v1.x) + this.m_axis.y * (v2.y - v1.y) + this.m_a2 * w2 - this.m_a1 * w1;
- var impulse = this.m_motorMass * (this.m_motorSpeed - Cdot);
- var oldImpulse = this.m_motorImpulse;
- var maxImpulse = step.dt * this.m_maxMotorForce;
- this.m_motorImpulse = b2Math.Clamp(this.m_motorImpulse + impulse, (-maxImpulse), maxImpulse);
- impulse = this.m_motorImpulse - oldImpulse;
- PX = impulse * this.m_axis.x;
- PY = impulse * this.m_axis.y;
- L1 = impulse * this.m_a1;
- L2 = impulse * this.m_a2;
- v1.x -= this.m_invMassA * PX;
- v1.y -= this.m_invMassA * PY;
- w1 -= this.m_invIA * L1;
- v2.x += this.m_invMassB * PX;
- v2.y += this.m_invMassB * PY;
- w2 += this.m_invIB * L2;
- }
- var Cdot1X = this.m_perp.x * (v2.x - v1.x) + this.m_perp.y * (v2.y - v1.y) + this.m_s2 * w2 - this.m_s1 * w1;
- var Cdot1Y = w2 - w1;
- if (this.m_enableLimit && this.m_limitState != b2Joint.e_inactiveLimit) {
- var Cdot2 = this.m_axis.x * (v2.x - v1.x) + this.m_axis.y * (v2.y - v1.y) + this.m_a2 * w2 - this.m_a1 * w1;
- var f1 = this.m_impulse.Copy();
- var df = this.m_K.Solve33(new b2Vec3(), (-Cdot1X), (-Cdot1Y), (-Cdot2));
- this.m_impulse.Add(df);
- if (this.m_limitState == b2Joint.e_atLowerLimit) {
- this.m_impulse.z = b2Math.Max(this.m_impulse.z, 0.0);
- }
- else if (this.m_limitState == b2Joint.e_atUpperLimit) {
- this.m_impulse.z = b2Math.Min(this.m_impulse.z, 0.0);
- }
- var bX = (-Cdot1X) - (this.m_impulse.z - f1.z) * this.m_K.col3.x;
- var bY = (-Cdot1Y) - (this.m_impulse.z - f1.z) * this.m_K.col3.y;
- var f2r = this.m_K.Solve22(new b2Vec2(), bX, bY);
- f2r.x += f1.x;
- f2r.y += f1.y;
- this.m_impulse.x = f2r.x;
- this.m_impulse.y = f2r.y;
- df.x = this.m_impulse.x - f1.x;
- df.y = this.m_impulse.y - f1.y;
- df.z = this.m_impulse.z - f1.z;
- PX = df.x * this.m_perp.x + df.z * this.m_axis.x;
- PY = df.x * this.m_perp.y + df.z * this.m_axis.y;
- L1 = df.x * this.m_s1 + df.y + df.z * this.m_a1;
- L2 = df.x * this.m_s2 + df.y + df.z * this.m_a2;
- v1.x -= this.m_invMassA * PX;
- v1.y -= this.m_invMassA * PY;
- w1 -= this.m_invIA * L1;
- v2.x += this.m_invMassB * PX;
- v2.y += this.m_invMassB * PY;
- w2 += this.m_invIB * L2;
- }
- else {
- var df2 = this.m_K.Solve22(new b2Vec2(), (-Cdot1X), (-Cdot1Y));
- this.m_impulse.x += df2.x;
- this.m_impulse.y += df2.y;
- PX = df2.x * this.m_perp.x;
- PY = df2.x * this.m_perp.y;
- L1 = df2.x * this.m_s1 + df2.y;
- L2 = df2.x * this.m_s2 + df2.y;
- v1.x -= this.m_invMassA * PX;
- v1.y -= this.m_invMassA * PY;
- w1 -= this.m_invIA * L1;
- v2.x += this.m_invMassB * PX;
- v2.y += this.m_invMassB * PY;
- w2 += this.m_invIB * L2;
- }
- bA.m_linearVelocity.SetV(v1);
- bA.m_angularVelocity = w1;
- bB.m_linearVelocity.SetV(v2);
- bB.m_angularVelocity = w2;
- }
- b2PrismaticJoint.prototype.SolvePositionConstraints = function (baumgarte) {
- if (baumgarte === undefined) baumgarte = 0;
- var limitC = 0;
- var oldLimitImpulse = 0;
- var bA = this.m_bodyA;
- var bB = this.m_bodyB;
- var c1 = bA.m_sweep.c;
- var a1 = bA.m_sweep.a;
- var c2 = bB.m_sweep.c;
- var a2 = bB.m_sweep.a;
- var tMat;
- var tX = 0;
- var m1 = 0;
- var m2 = 0;
- var i1 = 0;
- var i2 = 0;
- var linearError = 0.0;
- var angularError = 0.0;
- var active = false;
- var C2 = 0.0;
- var R1 = b2Mat22.FromAngle(a1);
- var R2 = b2Mat22.FromAngle(a2);
- tMat = R1;
- var r1X = this.m_localAnchor1.x - this.m_localCenterA.x;
- var r1Y = this.m_localAnchor1.y - this.m_localCenterA.y;
- tX = (tMat.col1.x * r1X + tMat.col2.x * r1Y);
- r1Y = (tMat.col1.y * r1X + tMat.col2.y * r1Y);
- r1X = tX;
- tMat = R2;
- var r2X = this.m_localAnchor2.x - this.m_localCenterB.x;
- var r2Y = this.m_localAnchor2.y - this.m_localCenterB.y;
- tX = (tMat.col1.x * r2X + tMat.col2.x * r2Y);
- r2Y = (tMat.col1.y * r2X + tMat.col2.y * r2Y);
- r2X = tX;
- var dX = c2.x + r2X - c1.x - r1X;
- var dY = c2.y + r2Y - c1.y - r1Y;
- if (this.m_enableLimit) {
- this.m_axis = b2Math.MulMV(R1, this.m_localXAxis1);
- this.m_a1 = (dX + r1X) * this.m_axis.y - (dY + r1Y) * this.m_axis.x;
- this.m_a2 = r2X * this.m_axis.y - r2Y * this.m_axis.x;
- var translation = this.m_axis.x * dX + this.m_axis.y * dY;
- if (b2Math.Abs(this.m_upperTranslation - this.m_lowerTranslation) < 2.0 * b2Settings.b2_linearSlop) {
- C2 = b2Math.Clamp(translation, (-b2Settings.b2_maxLinearCorrection), b2Settings.b2_maxLinearCorrection);
- linearError = b2Math.Abs(translation);
- active = true;
- }
- else if (translation <= this.m_lowerTranslation) {
- C2 = b2Math.Clamp(translation - this.m_lowerTranslation + b2Settings.b2_linearSlop, (-b2Settings.b2_maxLinearCorrection), 0.0);
- linearError = this.m_lowerTranslation - translation;
- active = true;
- }
- else if (translation >= this.m_upperTranslation) {
- C2 = b2Math.Clamp(translation - this.m_upperTranslation + b2Settings.b2_linearSlop, 0.0, b2Settings.b2_maxLinearCorrection);
- linearError = translation - this.m_upperTranslation;
- active = true;
- }
- }
- this.m_perp = b2Math.MulMV(R1, this.m_localYAxis1);
- this.m_s1 = (dX + r1X) * this.m_perp.y - (dY + r1Y) * this.m_perp.x;
- this.m_s2 = r2X * this.m_perp.y - r2Y * this.m_perp.x;
- var impulse = new b2Vec3();
- var C1X = this.m_perp.x * dX + this.m_perp.y * dY;
- var C1Y = a2 - a1 - this.m_refAngle;
- linearError = b2Math.Max(linearError, b2Math.Abs(C1X));
- angularError = b2Math.Abs(C1Y);
- if (active) {
- m1 = this.m_invMassA;
- m2 = this.m_invMassB;
- i1 = this.m_invIA;
- i2 = this.m_invIB;
- this.m_K.col1.x = m1 + m2 + i1 * this.m_s1 * this.m_s1 + i2 * this.m_s2 * this.m_s2;
- this.m_K.col1.y = i1 * this.m_s1 + i2 * this.m_s2;
- this.m_K.col1.z = i1 * this.m_s1 * this.m_a1 + i2 * this.m_s2 * this.m_a2;
- this.m_K.col2.x = this.m_K.col1.y;
- this.m_K.col2.y = i1 + i2;
- this.m_K.col2.z = i1 * this.m_a1 + i2 * this.m_a2;
- this.m_K.col3.x = this.m_K.col1.z;
- this.m_K.col3.y = this.m_K.col2.z;
- this.m_K.col3.z = m1 + m2 + i1 * this.m_a1 * this.m_a1 + i2 * this.m_a2 * this.m_a2;
- this.m_K.Solve33(impulse, (-C1X), (-C1Y), (-C2));
- }
- else {
- m1 = this.m_invMassA;
- m2 = this.m_invMassB;
- i1 = this.m_invIA;
- i2 = this.m_invIB;
- var k11 = m1 + m2 + i1 * this.m_s1 * this.m_s1 + i2 * this.m_s2 * this.m_s2;
- var k12 = i1 * this.m_s1 + i2 * this.m_s2;
- var k22 = i1 + i2;
- this.m_K.col1.Set(k11, k12, 0.0);
- this.m_K.col2.Set(k12, k22, 0.0);
- var impulse1 = this.m_K.Solve22(new b2Vec2(), (-C1X), (-C1Y));
- impulse.x = impulse1.x;
- impulse.y = impulse1.y;
- impulse.z = 0.0;
- }
- var PX = impulse.x * this.m_perp.x + impulse.z * this.m_axis.x;
- var PY = impulse.x * this.m_perp.y + impulse.z * this.m_axis.y;
- var L1 = impulse.x * this.m_s1 + impulse.y + impulse.z * this.m_a1;
- var L2 = impulse.x * this.m_s2 + impulse.y + impulse.z * this.m_a2;
- c1.x -= this.m_invMassA * PX;
- c1.y -= this.m_invMassA * PY;
- a1 -= this.m_invIA * L1;
- c2.x += this.m_invMassB * PX;
- c2.y += this.m_invMassB * PY;
- a2 += this.m_invIB * L2;
- bA.m_sweep.a = a1;
- bB.m_sweep.a = a2;
- bA.SynchronizeTransform();
- bB.SynchronizeTransform();
- return linearError <= b2Settings.b2_linearSlop && angularError <= b2Settings.b2_angularSlop;
- }
- Box2D.inherit(b2PrismaticJointDef, Box2D.Dynamics.Joints.b2JointDef);
- b2PrismaticJointDef.prototype.__super = Box2D.Dynamics.Joints.b2JointDef.prototype;
- b2PrismaticJointDef.b2PrismaticJointDef = function () {
- Box2D.Dynamics.Joints.b2JointDef.b2JointDef.apply(this, arguments);
- this.localAnchorA = new b2Vec2();
- this.localAnchorB = new b2Vec2();
- this.localAxisA = new b2Vec2();
- };
- b2PrismaticJointDef.prototype.b2PrismaticJointDef = function () {
- this.__super.b2JointDef.call(this);
- this.type = b2Joint.e_prismaticJoint;
- this.localAxisA.Set(1.0, 0.0);
- this.referenceAngle = 0.0;
- this.enableLimit = false;
- this.lowerTranslation = 0.0;
- this.upperTranslation = 0.0;
- this.enableMotor = false;
- this.maxMotorForce = 0.0;
- this.motorSpeed = 0.0;
- }
- b2PrismaticJointDef.prototype.Initialize = function (bA, bB, anchor, axis) {
- this.bodyA = bA;
- this.bodyB = bB;
- this.localAnchorA = this.bodyA.GetLocalPoint(anchor);
- this.localAnchorB = this.bodyB.GetLocalPoint(anchor);
- this.localAxisA = this.bodyA.GetLocalVector(axis);
- this.referenceAngle = this.bodyB.GetAngle() - this.bodyA.GetAngle();
- }
- Box2D.inherit(b2PulleyJoint, Box2D.Dynamics.Joints.b2Joint);
- b2PulleyJoint.prototype.__super = Box2D.Dynamics.Joints.b2Joint.prototype;
- b2PulleyJoint.b2PulleyJoint = function () {
- Box2D.Dynamics.Joints.b2Joint.b2Joint.apply(this, arguments);
- this.m_groundAnchor1 = new b2Vec2();
- this.m_groundAnchor2 = new b2Vec2();
- this.m_localAnchor1 = new b2Vec2();
- this.m_localAnchor2 = new b2Vec2();
- this.m_u1 = new b2Vec2();
- this.m_u2 = new b2Vec2();
- };
- b2PulleyJoint.prototype.GetAnchorA = function () {
- return this.m_bodyA.GetWorldPoint(this.m_localAnchor1);
- }
- b2PulleyJoint.prototype.GetAnchorB = function () {
- return this.m_bodyB.GetWorldPoint(this.m_localAnchor2);
- }
- b2PulleyJoint.prototype.GetReactionForce = function (inv_dt) {
- if (inv_dt === undefined) inv_dt = 0;
- return new b2Vec2(inv_dt * this.m_impulse * this.m_u2.x, inv_dt * this.m_impulse * this.m_u2.y);
- }
- b2PulleyJoint.prototype.GetReactionTorque = function (inv_dt) {
- if (inv_dt === undefined) inv_dt = 0;
- return 0.0;
- }
- b2PulleyJoint.prototype.GetGroundAnchorA = function () {
- var a = this.m_ground.m_xf.position.Copy();
- a.Add(this.m_groundAnchor1);
- return a;
- }
- b2PulleyJoint.prototype.GetGroundAnchorB = function () {
- var a = this.m_ground.m_xf.position.Copy();
- a.Add(this.m_groundAnchor2);
- return a;
- }
- b2PulleyJoint.prototype.GetLength1 = function () {
- var p = this.m_bodyA.GetWorldPoint(this.m_localAnchor1);
- var sX = this.m_ground.m_xf.position.x + this.m_groundAnchor1.x;
- var sY = this.m_ground.m_xf.position.y + this.m_groundAnchor1.y;
- var dX = p.x - sX;
- var dY = p.y - sY;
- return Math.sqrt(dX * dX + dY * dY);
- }
- b2PulleyJoint.prototype.GetLength2 = function () {
- var p = this.m_bodyB.GetWorldPoint(this.m_localAnchor2);
- var sX = this.m_ground.m_xf.position.x + this.m_groundAnchor2.x;
- var sY = this.m_ground.m_xf.position.y + this.m_groundAnchor2.y;
- var dX = p.x - sX;
- var dY = p.y - sY;
- return Math.sqrt(dX * dX + dY * dY);
- }
- b2PulleyJoint.prototype.GetRatio = function () {
- return this.m_ratio;
- }
- b2PulleyJoint.prototype.b2PulleyJoint = function (def) {
- this.__super.b2Joint.call(this, def);
- var tMat;
- var tX = 0;
- var tY = 0;
- this.m_ground = this.m_bodyA.m_world.m_groundBody;
- this.m_groundAnchor1.x = def.groundAnchorA.x - this.m_ground.m_xf.position.x;
- this.m_groundAnchor1.y = def.groundAnchorA.y - this.m_ground.m_xf.position.y;
- this.m_groundAnchor2.x = def.groundAnchorB.x - this.m_ground.m_xf.position.x;
- this.m_groundAnchor2.y = def.groundAnchorB.y - this.m_ground.m_xf.position.y;
- this.m_localAnchor1.SetV(def.localAnchorA);
- this.m_localAnchor2.SetV(def.localAnchorB);
- this.m_ratio = def.ratio;
- this.m_constant = def.lengthA + this.m_ratio * def.lengthB;
- this.m_maxLength1 = b2Math.Min(def.maxLengthA, this.m_constant - this.m_ratio * b2PulleyJoint.b2_minPulleyLength);
- this.m_maxLength2 = b2Math.Min(def.maxLengthB, (this.m_constant - b2PulleyJoint.b2_minPulleyLength) / this.m_ratio);
- this.m_impulse = 0.0;
- this.m_limitImpulse1 = 0.0;
- this.m_limitImpulse2 = 0.0;
- }
- b2PulleyJoint.prototype.InitVelocityConstraints = function (step) {
- var bA = this.m_bodyA;
- var bB = this.m_bodyB;
- var tMat;
- tMat = bA.m_xf.R;
- var r1X = this.m_localAnchor1.x - bA.m_sweep.localCenter.x;
- var r1Y = this.m_localAnchor1.y - bA.m_sweep.localCenter.y;
- var tX = (tMat.col1.x * r1X + tMat.col2.x * r1Y);
- r1Y = (tMat.col1.y * r1X + tMat.col2.y * r1Y);
- r1X = tX;
- tMat = bB.m_xf.R;
- var r2X = this.m_localAnchor2.x - bB.m_sweep.localCenter.x;
- var r2Y = this.m_localAnchor2.y - bB.m_sweep.localCenter.y;
- tX = (tMat.col1.x * r2X + tMat.col2.x * r2Y);
- r2Y = (tMat.col1.y * r2X + tMat.col2.y * r2Y);
- r2X = tX;
- var p1X = bA.m_sweep.c.x + r1X;
- var p1Y = bA.m_sweep.c.y + r1Y;
- var p2X = bB.m_sweep.c.x + r2X;
- var p2Y = bB.m_sweep.c.y + r2Y;
- var s1X = this.m_ground.m_xf.position.x + this.m_groundAnchor1.x;
- var s1Y = this.m_ground.m_xf.position.y + this.m_groundAnchor1.y;
- var s2X = this.m_ground.m_xf.position.x + this.m_groundAnchor2.x;
- var s2Y = this.m_ground.m_xf.position.y + this.m_groundAnchor2.y;
- this.m_u1.Set(p1X - s1X, p1Y - s1Y);
- this.m_u2.Set(p2X - s2X, p2Y - s2Y);
- var length1 = this.m_u1.Length();
- var length2 = this.m_u2.Length();
- if (length1 > b2Settings.b2_linearSlop) {
- this.m_u1.Multiply(1.0 / length1);
- }
- else {
- this.m_u1.SetZero();
- }
- if (length2 > b2Settings.b2_linearSlop) {
- this.m_u2.Multiply(1.0 / length2);
- }
- else {
- this.m_u2.SetZero();
- }
- var C = this.m_constant - length1 - this.m_ratio * length2;
- if (C > 0.0) {
- this.m_state = b2Joint.e_inactiveLimit;
- this.m_impulse = 0.0;
- }
- else {
- this.m_state = b2Joint.e_atUpperLimit;
- }
- if (length1 < this.m_maxLength1) {
- this.m_limitState1 = b2Joint.e_inactiveLimit;
- this.m_limitImpulse1 = 0.0;
- }
- else {
- this.m_limitState1 = b2Joint.e_atUpperLimit;
- }
- if (length2 < this.m_maxLength2) {
- this.m_limitState2 = b2Joint.e_inactiveLimit;
- this.m_limitImpulse2 = 0.0;
- }
- else {
- this.m_limitState2 = b2Joint.e_atUpperLimit;
- }
- var cr1u1 = r1X * this.m_u1.y - r1Y * this.m_u1.x;
- var cr2u2 = r2X * this.m_u2.y - r2Y * this.m_u2.x;
- this.m_limitMass1 = bA.m_invMass + bA.m_invI * cr1u1 * cr1u1;
- this.m_limitMass2 = bB.m_invMass + bB.m_invI * cr2u2 * cr2u2;
- this.m_pulleyMass = this.m_limitMass1 + this.m_ratio * this.m_ratio * this.m_limitMass2;
- this.m_limitMass1 = 1.0 / this.m_limitMass1;
- this.m_limitMass2 = 1.0 / this.m_limitMass2;
- this.m_pulleyMass = 1.0 / this.m_pulleyMass;
- if (step.warmStarting) {
- this.m_impulse *= step.dtRatio;
- this.m_limitImpulse1 *= step.dtRatio;
- this.m_limitImpulse2 *= step.dtRatio;
- var P1X = ((-this.m_impulse) - this.m_limitImpulse1) * this.m_u1.x;
- var P1Y = ((-this.m_impulse) - this.m_limitImpulse1) * this.m_u1.y;
- var P2X = ((-this.m_ratio * this.m_impulse) - this.m_limitImpulse2) * this.m_u2.x;
- var P2Y = ((-this.m_ratio * this.m_impulse) - this.m_limitImpulse2) * this.m_u2.y;
- bA.m_linearVelocity.x += bA.m_invMass * P1X;
- bA.m_linearVelocity.y += bA.m_invMass * P1Y;
- bA.m_angularVelocity += bA.m_invI * (r1X * P1Y - r1Y * P1X);
- bB.m_linearVelocity.x += bB.m_invMass * P2X;
- bB.m_linearVelocity.y += bB.m_invMass * P2Y;
- bB.m_angularVelocity += bB.m_invI * (r2X * P2Y - r2Y * P2X);
- }
- else {
- this.m_impulse = 0.0;
- this.m_limitImpulse1 = 0.0;
- this.m_limitImpulse2 = 0.0;
- }
- }
- b2PulleyJoint.prototype.SolveVelocityConstraints = function (step) {
- var bA = this.m_bodyA;
- var bB = this.m_bodyB;
- var tMat;
- tMat = bA.m_xf.R;
- var r1X = this.m_localAnchor1.x - bA.m_sweep.localCenter.x;
- var r1Y = this.m_localAnchor1.y - bA.m_sweep.localCenter.y;
- var tX = (tMat.col1.x * r1X + tMat.col2.x * r1Y);
- r1Y = (tMat.col1.y * r1X + tMat.col2.y * r1Y);
- r1X = tX;
- tMat = bB.m_xf.R;
- var r2X = this.m_localAnchor2.x - bB.m_sweep.localCenter.x;
- var r2Y = this.m_localAnchor2.y - bB.m_sweep.localCenter.y;
- tX = (tMat.col1.x * r2X + tMat.col2.x * r2Y);
- r2Y = (tMat.col1.y * r2X + tMat.col2.y * r2Y);
- r2X = tX;
- var v1X = 0;
- var v1Y = 0;
- var v2X = 0;
- var v2Y = 0;
- var P1X = 0;
- var P1Y = 0;
- var P2X = 0;
- var P2Y = 0;
- var Cdot = 0;
- var impulse = 0;
- var oldImpulse = 0;
- if (this.m_state == b2Joint.e_atUpperLimit) {
- v1X = bA.m_linearVelocity.x + ((-bA.m_angularVelocity * r1Y));
- v1Y = bA.m_linearVelocity.y + (bA.m_angularVelocity * r1X);
- v2X = bB.m_linearVelocity.x + ((-bB.m_angularVelocity * r2Y));
- v2Y = bB.m_linearVelocity.y + (bB.m_angularVelocity * r2X);
- Cdot = (-(this.m_u1.x * v1X + this.m_u1.y * v1Y)) - this.m_ratio * (this.m_u2.x * v2X + this.m_u2.y * v2Y);
- impulse = this.m_pulleyMass * ((-Cdot));
- oldImpulse = this.m_impulse;
- this.m_impulse = b2Math.Max(0.0, this.m_impulse + impulse);
- impulse = this.m_impulse - oldImpulse;
- P1X = (-impulse * this.m_u1.x);
- P1Y = (-impulse * this.m_u1.y);
- P2X = (-this.m_ratio * impulse * this.m_u2.x);
- P2Y = (-this.m_ratio * impulse * this.m_u2.y);
- bA.m_linearVelocity.x += bA.m_invMass * P1X;
- bA.m_linearVelocity.y += bA.m_invMass * P1Y;
- bA.m_angularVelocity += bA.m_invI * (r1X * P1Y - r1Y * P1X);
- bB.m_linearVelocity.x += bB.m_invMass * P2X;
- bB.m_linearVelocity.y += bB.m_invMass * P2Y;
- bB.m_angularVelocity += bB.m_invI * (r2X * P2Y - r2Y * P2X);
- }
- if (this.m_limitState1 == b2Joint.e_atUpperLimit) {
- v1X = bA.m_linearVelocity.x + ((-bA.m_angularVelocity * r1Y));
- v1Y = bA.m_linearVelocity.y + (bA.m_angularVelocity * r1X);
- Cdot = (-(this.m_u1.x * v1X + this.m_u1.y * v1Y));
- impulse = (-this.m_limitMass1 * Cdot);
- oldImpulse = this.m_limitImpulse1;
- this.m_limitImpulse1 = b2Math.Max(0.0, this.m_limitImpulse1 + impulse);
- impulse = this.m_limitImpulse1 - oldImpulse;
- P1X = (-impulse * this.m_u1.x);
- P1Y = (-impulse * this.m_u1.y);
- bA.m_linearVelocity.x += bA.m_invMass * P1X;
- bA.m_linearVelocity.y += bA.m_invMass * P1Y;
- bA.m_angularVelocity += bA.m_invI * (r1X * P1Y - r1Y * P1X);
- }
- if (this.m_limitState2 == b2Joint.e_atUpperLimit) {
- v2X = bB.m_linearVelocity.x + ((-bB.m_angularVelocity * r2Y));
- v2Y = bB.m_linearVelocity.y + (bB.m_angularVelocity * r2X);
- Cdot = (-(this.m_u2.x * v2X + this.m_u2.y * v2Y));
- impulse = (-this.m_limitMass2 * Cdot);
- oldImpulse = this.m_limitImpulse2;
- this.m_limitImpulse2 = b2Math.Max(0.0, this.m_limitImpulse2 + impulse);
- impulse = this.m_limitImpulse2 - oldImpulse;
- P2X = (-impulse * this.m_u2.x);
- P2Y = (-impulse * this.m_u2.y);
- bB.m_linearVelocity.x += bB.m_invMass * P2X;
- bB.m_linearVelocity.y += bB.m_invMass * P2Y;
- bB.m_angularVelocity += bB.m_invI * (r2X * P2Y - r2Y * P2X);
- }
- }
- b2PulleyJoint.prototype.SolvePositionConstraints = function (baumgarte) {
- if (baumgarte === undefined) baumgarte = 0;
- var bA = this.m_bodyA;
- var bB = this.m_bodyB;
- var tMat;
- var s1X = this.m_ground.m_xf.position.x + this.m_groundAnchor1.x;
- var s1Y = this.m_ground.m_xf.position.y + this.m_groundAnchor1.y;
- var s2X = this.m_ground.m_xf.position.x + this.m_groundAnchor2.x;
- var s2Y = this.m_ground.m_xf.position.y + this.m_groundAnchor2.y;
- var r1X = 0;
- var r1Y = 0;
- var r2X = 0;
- var r2Y = 0;
- var p1X = 0;
- var p1Y = 0;
- var p2X = 0;
- var p2Y = 0;
- var length1 = 0;
- var length2 = 0;
- var C = 0;
- var impulse = 0;
- var oldImpulse = 0;
- var oldLimitPositionImpulse = 0;
- var tX = 0;
- var linearError = 0.0;
- if (this.m_state == b2Joint.e_atUpperLimit) {
- tMat = bA.m_xf.R;
- r1X = this.m_localAnchor1.x - bA.m_sweep.localCenter.x;
- r1Y = this.m_localAnchor1.y - bA.m_sweep.localCenter.y;
- tX = (tMat.col1.x * r1X + tMat.col2.x * r1Y);
- r1Y = (tMat.col1.y * r1X + tMat.col2.y * r1Y);
- r1X = tX;
- tMat = bB.m_xf.R;
- r2X = this.m_localAnchor2.x - bB.m_sweep.localCenter.x;
- r2Y = this.m_localAnchor2.y - bB.m_sweep.localCenter.y;
- tX = (tMat.col1.x * r2X + tMat.col2.x * r2Y);
- r2Y = (tMat.col1.y * r2X + tMat.col2.y * r2Y);
- r2X = tX;
- p1X = bA.m_sweep.c.x + r1X;
- p1Y = bA.m_sweep.c.y + r1Y;
- p2X = bB.m_sweep.c.x + r2X;
- p2Y = bB.m_sweep.c.y + r2Y;
- this.m_u1.Set(p1X - s1X, p1Y - s1Y);
- this.m_u2.Set(p2X - s2X, p2Y - s2Y);
- length1 = this.m_u1.Length();
- length2 = this.m_u2.Length();
- if (length1 > b2Settings.b2_linearSlop) {
- this.m_u1.Multiply(1.0 / length1);
- }
- else {
- this.m_u1.SetZero();
- }
- if (length2 > b2Settings.b2_linearSlop) {
- this.m_u2.Multiply(1.0 / length2);
- }
- else {
- this.m_u2.SetZero();
- }
- C = this.m_constant - length1 - this.m_ratio * length2;
- linearError = b2Math.Max(linearError, (-C));
- C = b2Math.Clamp(C + b2Settings.b2_linearSlop, (-b2Settings.b2_maxLinearCorrection), 0.0);
- impulse = (-this.m_pulleyMass * C);
- p1X = (-impulse * this.m_u1.x);
- p1Y = (-impulse * this.m_u1.y);
- p2X = (-this.m_ratio * impulse * this.m_u2.x);
- p2Y = (-this.m_ratio * impulse * this.m_u2.y);
- bA.m_sweep.c.x += bA.m_invMass * p1X;
- bA.m_sweep.c.y += bA.m_invMass * p1Y;
- bA.m_sweep.a += bA.m_invI * (r1X * p1Y - r1Y * p1X);
- bB.m_sweep.c.x += bB.m_invMass * p2X;
- bB.m_sweep.c.y += bB.m_invMass * p2Y;
- bB.m_sweep.a += bB.m_invI * (r2X * p2Y - r2Y * p2X);
- bA.SynchronizeTransform();
- bB.SynchronizeTransform();
- }
- if (this.m_limitState1 == b2Joint.e_atUpperLimit) {
- tMat = bA.m_xf.R;
- r1X = this.m_localAnchor1.x - bA.m_sweep.localCenter.x;
- r1Y = this.m_localAnchor1.y - bA.m_sweep.localCenter.y;
- tX = (tMat.col1.x * r1X + tMat.col2.x * r1Y);
- r1Y = (tMat.col1.y * r1X + tMat.col2.y * r1Y);
- r1X = tX;
- p1X = bA.m_sweep.c.x + r1X;
- p1Y = bA.m_sweep.c.y + r1Y;
- this.m_u1.Set(p1X - s1X, p1Y - s1Y);
- length1 = this.m_u1.Length();
- if (length1 > b2Settings.b2_linearSlop) {
- this.m_u1.x *= 1.0 / length1;
- this.m_u1.y *= 1.0 / length1;
- }
- else {
- this.m_u1.SetZero();
- }
- C = this.m_maxLength1 - length1;
- linearError = b2Math.Max(linearError, (-C));
- C = b2Math.Clamp(C + b2Settings.b2_linearSlop, (-b2Settings.b2_maxLinearCorrection), 0.0);
- impulse = (-this.m_limitMass1 * C);
- p1X = (-impulse * this.m_u1.x);
- p1Y = (-impulse * this.m_u1.y);
- bA.m_sweep.c.x += bA.m_invMass * p1X;
- bA.m_sweep.c.y += bA.m_invMass * p1Y;
- bA.m_sweep.a += bA.m_invI * (r1X * p1Y - r1Y * p1X);
- bA.SynchronizeTransform();
- }
- if (this.m_limitState2 == b2Joint.e_atUpperLimit) {
- tMat = bB.m_xf.R;
- r2X = this.m_localAnchor2.x - bB.m_sweep.localCenter.x;
- r2Y = this.m_localAnchor2.y - bB.m_sweep.localCenter.y;
- tX = (tMat.col1.x * r2X + tMat.col2.x * r2Y);
- r2Y = (tMat.col1.y * r2X + tMat.col2.y * r2Y);
- r2X = tX;
- p2X = bB.m_sweep.c.x + r2X;
- p2Y = bB.m_sweep.c.y + r2Y;
- this.m_u2.Set(p2X - s2X, p2Y - s2Y);
- length2 = this.m_u2.Length();
- if (length2 > b2Settings.b2_linearSlop) {
- this.m_u2.x *= 1.0 / length2;
- this.m_u2.y *= 1.0 / length2;
- }
- else {
- this.m_u2.SetZero();
- }
- C = this.m_maxLength2 - length2;
- linearError = b2Math.Max(linearError, (-C));
- C = b2Math.Clamp(C + b2Settings.b2_linearSlop, (-b2Settings.b2_maxLinearCorrection), 0.0);
- impulse = (-this.m_limitMass2 * C);
- p2X = (-impulse * this.m_u2.x);
- p2Y = (-impulse * this.m_u2.y);
- bB.m_sweep.c.x += bB.m_invMass * p2X;
- bB.m_sweep.c.y += bB.m_invMass * p2Y;
- bB.m_sweep.a += bB.m_invI * (r2X * p2Y - r2Y * p2X);
- bB.SynchronizeTransform();
- }
- return linearError < b2Settings.b2_linearSlop;
- }
- Box2D.postDefs.push(function () {
- Box2D.Dynamics.Joints.b2PulleyJoint.b2_minPulleyLength = 2.0;
- });
- Box2D.inherit(b2PulleyJointDef, Box2D.Dynamics.Joints.b2JointDef);
- b2PulleyJointDef.prototype.__super = Box2D.Dynamics.Joints.b2JointDef.prototype;
- b2PulleyJointDef.b2PulleyJointDef = function () {
- Box2D.Dynamics.Joints.b2JointDef.b2JointDef.apply(this, arguments);
- this.groundAnchorA = new b2Vec2();
- this.groundAnchorB = new b2Vec2();
- this.localAnchorA = new b2Vec2();
- this.localAnchorB = new b2Vec2();
- };
- b2PulleyJointDef.prototype.b2PulleyJointDef = function () {
- this.__super.b2JointDef.call(this);
- this.type = b2Joint.e_pulleyJoint;
- this.groundAnchorA.Set((-1.0), 1.0);
- this.groundAnchorB.Set(1.0, 1.0);
- this.localAnchorA.Set((-1.0), 0.0);
- this.localAnchorB.Set(1.0, 0.0);
- this.lengthA = 0.0;
- this.maxLengthA = 0.0;
- this.lengthB = 0.0;
- this.maxLengthB = 0.0;
- this.ratio = 1.0;
- this.collideConnected = true;
- }
- b2PulleyJointDef.prototype.Initialize = function (bA, bB, gaA, gaB, anchorA, anchorB, r) {
- if (r === undefined) r = 0;
- this.bodyA = bA;
- this.bodyB = bB;
- this.groundAnchorA.SetV(gaA);
- this.groundAnchorB.SetV(gaB);
- this.localAnchorA = this.bodyA.GetLocalPoint(anchorA);
- this.localAnchorB = this.bodyB.GetLocalPoint(anchorB);
- var d1X = anchorA.x - gaA.x;
- var d1Y = anchorA.y - gaA.y;
- this.lengthA = Math.sqrt(d1X * d1X + d1Y * d1Y);
- var d2X = anchorB.x - gaB.x;
- var d2Y = anchorB.y - gaB.y;
- this.lengthB = Math.sqrt(d2X * d2X + d2Y * d2Y);
- this.ratio = r;
- var C = this.lengthA + this.ratio * this.lengthB;
- this.maxLengthA = C - this.ratio * b2PulleyJoint.b2_minPulleyLength;
- this.maxLengthB = (C - b2PulleyJoint.b2_minPulleyLength) / this.ratio;
- }
- Box2D.inherit(b2RevoluteJoint, Box2D.Dynamics.Joints.b2Joint);
- b2RevoluteJoint.prototype.__super = Box2D.Dynamics.Joints.b2Joint.prototype;
- b2RevoluteJoint.b2RevoluteJoint = function () {
- Box2D.Dynamics.Joints.b2Joint.b2Joint.apply(this, arguments);
- this.K = new b2Mat22();
- this.K1 = new b2Mat22();
- this.K2 = new b2Mat22();
- this.K3 = new b2Mat22();
- this.impulse3 = new b2Vec3();
- this.impulse2 = new b2Vec2();
- this.reduced = new b2Vec2();
- this.m_localAnchor1 = new b2Vec2();
- this.m_localAnchor2 = new b2Vec2();
- this.m_impulse = new b2Vec3();
- this.m_mass = new b2Mat33();
- };
- b2RevoluteJoint.prototype.GetAnchorA = function () {
- return this.m_bodyA.GetWorldPoint(this.m_localAnchor1);
- }
- b2RevoluteJoint.prototype.GetAnchorB = function () {
- return this.m_bodyB.GetWorldPoint(this.m_localAnchor2);
- }
- b2RevoluteJoint.prototype.GetReactionForce = function (inv_dt) {
- if (inv_dt === undefined) inv_dt = 0;
- return new b2Vec2(inv_dt * this.m_impulse.x, inv_dt * this.m_impulse.y);
- }
- b2RevoluteJoint.prototype.GetReactionTorque = function (inv_dt) {
- if (inv_dt === undefined) inv_dt = 0;
- return inv_dt * this.m_impulse.z;
- }
- b2RevoluteJoint.prototype.GetJointAngle = function () {
- return this.m_bodyB.m_sweep.a - this.m_bodyA.m_sweep.a - this.m_referenceAngle;
- }
- b2RevoluteJoint.prototype.GetJointSpeed = function () {
- return this.m_bodyB.m_angularVelocity - this.m_bodyA.m_angularVelocity;
- }
- b2RevoluteJoint.prototype.IsLimitEnabled = function () {
- return this.m_enableLimit;
- }
- b2RevoluteJoint.prototype.EnableLimit = function (flag) {
- this.m_enableLimit = flag;
- }
- b2RevoluteJoint.prototype.GetLowerLimit = function () {
- return this.m_lowerAngle;
- }
- b2RevoluteJoint.prototype.GetUpperLimit = function () {
- return this.m_upperAngle;
- }
- b2RevoluteJoint.prototype.SetLimits = function (lower, upper) {
-
- if (lower === undefined) lower = 0;
- if (upper === undefined) upper = 0;
- this.m_lowerAngle = lower;
- this.m_upperAngle = upper;
- }
- b2RevoluteJoint.prototype.IsMotorEnabled = function () {
- this.m_bodyA.SetAwake(true);
- this.m_bodyB.SetAwake(true);
- return this.m_enableMotor;
- }
- b2RevoluteJoint.prototype.EnableMotor = function (flag) {
- this.m_enableMotor = flag;
- }
- b2RevoluteJoint.prototype.SetMotorSpeed = function (speed) {
- if (speed === undefined) speed = 0;
- this.m_bodyA.SetAwake(true);
- this.m_bodyB.SetAwake(true);
- this.m_motorSpeed = speed;
- }
- b2RevoluteJoint.prototype.GetMotorSpeed = function () {
- return this.m_motorSpeed;
- }
- b2RevoluteJoint.prototype.SetMaxMotorTorque = function (torque) {
- if (torque === undefined) torque = 0;
- this.m_maxMotorTorque = torque;
- }
- b2RevoluteJoint.prototype.GetMotorTorque = function () {
- return this.m_maxMotorTorque;
- }
- b2RevoluteJoint.prototype.b2RevoluteJoint = function (def) {
- this.__super.b2Joint.call(this, def);
- this.m_localAnchor1.SetV(def.localAnchorA);
- this.m_localAnchor2.SetV(def.localAnchorB);
- this.m_referenceAngle = def.referenceAngle;
- this.m_impulse.SetZero();
- this.m_motorImpulse = 0.0;
- this.m_lowerAngle = def.lowerAngle;
- this.m_upperAngle = def.upperAngle;
- this.m_maxMotorTorque = def.maxMotorTorque;
- this.m_motorSpeed = def.motorSpeed;
- this.m_enableLimit = def.enableLimit;
- this.m_enableMotor = def.enableMotor;
- this.m_limitState = b2Joint.e_inactiveLimit;
- }
- b2RevoluteJoint.prototype.InitVelocityConstraints = function (step) {
- var bA = this.m_bodyA;
- var bB = this.m_bodyB;
- var tMat;
- var tX = 0;
- if (this.m_enableMotor || this.m_enableLimit) {}
- tMat = bA.m_xf.R;
- var r1X = this.m_localAnchor1.x - bA.m_sweep.localCenter.x;
- var r1Y = this.m_localAnchor1.y - bA.m_sweep.localCenter.y;
- tX = (tMat.col1.x * r1X + tMat.col2.x * r1Y);
- r1Y = (tMat.col1.y * r1X + tMat.col2.y * r1Y);
- r1X = tX;
- tMat = bB.m_xf.R;
- var r2X = this.m_localAnchor2.x - bB.m_sweep.localCenter.x;
- var r2Y = this.m_localAnchor2.y - bB.m_sweep.localCenter.y;
- tX = (tMat.col1.x * r2X + tMat.col2.x * r2Y);
- r2Y = (tMat.col1.y * r2X + tMat.col2.y * r2Y);
- r2X = tX;
- var m1 = bA.m_invMass;
- var m2 = bB.m_invMass;
- var i1 = bA.m_invI;
- var i2 = bB.m_invI;
- this.m_mass.col1.x = m1 + m2 + r1Y * r1Y * i1 + r2Y * r2Y * i2;
- this.m_mass.col2.x = (-r1Y * r1X * i1) - r2Y * r2X * i2;
- this.m_mass.col3.x = (-r1Y * i1) - r2Y * i2;
- this.m_mass.col1.y = this.m_mass.col2.x;
- this.m_mass.col2.y = m1 + m2 + r1X * r1X * i1 + r2X * r2X * i2;
- this.m_mass.col3.y = r1X * i1 + r2X * i2;
- this.m_mass.col1.z = this.m_mass.col3.x;
- this.m_mass.col2.z = this.m_mass.col3.y;
- this.m_mass.col3.z = i1 + i2;
- this.m_motorMass = 1.0 / (i1 + i2);
- if (this.m_enableMotor == false) {
- this.m_motorImpulse = 0.0;
- }
- if (this.m_enableLimit) {
- var jointAngle = bB.m_sweep.a - bA.m_sweep.a - this.m_referenceAngle;
- if (b2Math.Abs(this.m_upperAngle - this.m_lowerAngle) < 2.0 * b2Settings.b2_angularSlop) {
- this.m_limitState = b2Joint.e_equalLimits;
- }
- else if (jointAngle <= this.m_lowerAngle) {
- if (this.m_limitState != b2Joint.e_atLowerLimit) {
- this.m_impulse.z = 0.0;
- }
- this.m_limitState = b2Joint.e_atLowerLimit;
- }
- else if (jointAngle >= this.m_upperAngle) {
- if (this.m_limitState != b2Joint.e_atUpperLimit) {
- this.m_impulse.z = 0.0;
- }
- this.m_limitState = b2Joint.e_atUpperLimit;
- }
- else {
- this.m_limitState = b2Joint.e_inactiveLimit;
- this.m_impulse.z = 0.0;
- }
- }
- else {
- this.m_limitState = b2Joint.e_inactiveLimit;
- }
- if (step.warmStarting) {
- this.m_impulse.x *= step.dtRatio;
- this.m_impulse.y *= step.dtRatio;
- this.m_motorImpulse *= step.dtRatio;
- var PX = this.m_impulse.x;
- var PY = this.m_impulse.y;
- bA.m_linearVelocity.x -= m1 * PX;
- bA.m_linearVelocity.y -= m1 * PY;
- bA.m_angularVelocity -= i1 * ((r1X * PY - r1Y * PX) + this.m_motorImpulse + this.m_impulse.z);
- bB.m_linearVelocity.x += m2 * PX;
- bB.m_linearVelocity.y += m2 * PY;
- bB.m_angularVelocity += i2 * ((r2X * PY - r2Y * PX) + this.m_motorImpulse + this.m_impulse.z);
- }
- else {
- this.m_impulse.SetZero();
- this.m_motorImpulse = 0.0;
- }
- }
- b2RevoluteJoint.prototype.SolveVelocityConstraints = function (step) {
- var bA = this.m_bodyA;
- var bB = this.m_bodyB;
- var tMat;
- var tX = 0;
- var newImpulse = 0;
- var r1X = 0;
- var r1Y = 0;
- var r2X = 0;
- var r2Y = 0;
- var v1 = bA.m_linearVelocity;
- var w1 = bA.m_angularVelocity;
- var v2 = bB.m_linearVelocity;
- var w2 = bB.m_angularVelocity;
- var m1 = bA.m_invMass;
- var m2 = bB.m_invMass;
- var i1 = bA.m_invI;
- var i2 = bB.m_invI;
- if (this.m_enableMotor && this.m_limitState != b2Joint.e_equalLimits) {
- var Cdot = w2 - w1 - this.m_motorSpeed;
- var impulse = this.m_motorMass * ((-Cdot));
- var oldImpulse = this.m_motorImpulse;
- var maxImpulse = step.dt * this.m_maxMotorTorque;
- this.m_motorImpulse = b2Math.Clamp(this.m_motorImpulse + impulse, (-maxImpulse), maxImpulse);
- impulse = this.m_motorImpulse - oldImpulse;
- w1 -= i1 * impulse;
- w2 += i2 * impulse;
- }
- if (this.m_enableLimit && this.m_limitState != b2Joint.e_inactiveLimit) {
- tMat = bA.m_xf.R;
- r1X = this.m_localAnchor1.x - bA.m_sweep.localCenter.x;
- r1Y = this.m_localAnchor1.y - bA.m_sweep.localCenter.y;
- tX = (tMat.col1.x * r1X + tMat.col2.x * r1Y);
- r1Y = (tMat.col1.y * r1X + tMat.col2.y * r1Y);
- r1X = tX;
- tMat = bB.m_xf.R;
- r2X = this.m_localAnchor2.x - bB.m_sweep.localCenter.x;
- r2Y = this.m_localAnchor2.y - bB.m_sweep.localCenter.y;
- tX = (tMat.col1.x * r2X + tMat.col2.x * r2Y);
- r2Y = (tMat.col1.y * r2X + tMat.col2.y * r2Y);
- r2X = tX;
- var Cdot1X = v2.x + ((-w2 * r2Y)) - v1.x - ((-w1 * r1Y));
- var Cdot1Y = v2.y + (w2 * r2X) - v1.y - (w1 * r1X);
- var Cdot2 = w2 - w1;
- this.m_mass.Solve33(this.impulse3, (-Cdot1X), (-Cdot1Y), (-Cdot2));
- if (this.m_limitState == b2Joint.e_equalLimits) {
- this.m_impulse.Add(this.impulse3);
- }
- else if (this.m_limitState == b2Joint.e_atLowerLimit) {
- newImpulse = this.m_impulse.z + this.impulse3.z;
- if (newImpulse < 0.0) {
- this.m_mass.Solve22(this.reduced, (-Cdot1X), (-Cdot1Y));
- this.impulse3.x = this.reduced.x;
- this.impulse3.y = this.reduced.y;
- this.impulse3.z = (-this.m_impulse.z);
- this.m_impulse.x += this.reduced.x;
- this.m_impulse.y += this.reduced.y;
- this.m_impulse.z = 0.0;
- }
- }
- else if (this.m_limitState == b2Joint.e_atUpperLimit) {
- newImpulse = this.m_impulse.z + this.impulse3.z;
- if (newImpulse > 0.0) {
- this.m_mass.Solve22(this.reduced, (-Cdot1X), (-Cdot1Y));
- this.impulse3.x = this.reduced.x;
- this.impulse3.y = this.reduced.y;
- this.impulse3.z = (-this.m_impulse.z);
- this.m_impulse.x += this.reduced.x;
- this.m_impulse.y += this.reduced.y;
- this.m_impulse.z = 0.0;
- }
- }
- v1.x -= m1 * this.impulse3.x;
- v1.y -= m1 * this.impulse3.y;
- w1 -= i1 * (r1X * this.impulse3.y - r1Y * this.impulse3.x + this.impulse3.z);
- v2.x += m2 * this.impulse3.x;
- v2.y += m2 * this.impulse3.y;
- w2 += i2 * (r2X * this.impulse3.y - r2Y * this.impulse3.x + this.impulse3.z);
- }
- else {
- tMat = bA.m_xf.R;
- r1X = this.m_localAnchor1.x - bA.m_sweep.localCenter.x;
- r1Y = this.m_localAnchor1.y - bA.m_sweep.localCenter.y;
- tX = (tMat.col1.x * r1X + tMat.col2.x * r1Y);
- r1Y = (tMat.col1.y * r1X + tMat.col2.y * r1Y);
- r1X = tX;
- tMat = bB.m_xf.R;
- r2X = this.m_localAnchor2.x - bB.m_sweep.localCenter.x;
- r2Y = this.m_localAnchor2.y - bB.m_sweep.localCenter.y;
- tX = (tMat.col1.x * r2X + tMat.col2.x * r2Y);
- r2Y = (tMat.col1.y * r2X + tMat.col2.y * r2Y);
- r2X = tX;
- var CdotX = v2.x + ((-w2 * r2Y)) - v1.x - ((-w1 * r1Y));
- var CdotY = v2.y + (w2 * r2X) - v1.y - (w1 * r1X);
- this.m_mass.Solve22(this.impulse2, (-CdotX), (-CdotY));
- this.m_impulse.x += this.impulse2.x;
- this.m_impulse.y += this.impulse2.y;
- v1.x -= m1 * this.impulse2.x;
- v1.y -= m1 * this.impulse2.y;
- w1 -= i1 * (r1X * this.impulse2.y - r1Y * this.impulse2.x);
- v2.x += m2 * this.impulse2.x;
- v2.y += m2 * this.impulse2.y;
- w2 += i2 * (r2X * this.impulse2.y - r2Y * this.impulse2.x);
- }
- bA.m_linearVelocity.SetV(v1);
- bA.m_angularVelocity = w1;
- bB.m_linearVelocity.SetV(v2);
- bB.m_angularVelocity = w2;
- }
- b2RevoluteJoint.prototype.SolvePositionConstraints = function (baumgarte) {
- if (baumgarte === undefined) baumgarte = 0;
- var oldLimitImpulse = 0;
- var C = 0;
- var tMat;
- var bA = this.m_bodyA;
- var bB = this.m_bodyB;
- var angularError = 0.0;
- var positionError = 0.0;
- var tX = 0;
- var impulseX = 0;
- var impulseY = 0;
- if (this.m_enableLimit && this.m_limitState != b2Joint.e_inactiveLimit) {
- var angle = bB.m_sweep.a - bA.m_sweep.a - this.m_referenceAngle;
- var limitImpulse = 0.0;
- if (this.m_limitState == b2Joint.e_equalLimits) {
- C = b2Math.Clamp(angle - this.m_lowerAngle, (-b2Settings.b2_maxAngularCorrection), b2Settings.b2_maxAngularCorrection);
- limitImpulse = (-this.m_motorMass * C);
- angularError = b2Math.Abs(C);
- }
- else if (this.m_limitState == b2Joint.e_atLowerLimit) {
- C = angle - this.m_lowerAngle;
- angularError = (-C);
- C = b2Math.Clamp(C + b2Settings.b2_angularSlop, (-b2Settings.b2_maxAngularCorrection), 0.0);
- limitImpulse = (-this.m_motorMass * C);
- }
- else if (this.m_limitState == b2Joint.e_atUpperLimit) {
- C = angle - this.m_upperAngle;
- angularError = C;
- C = b2Math.Clamp(C - b2Settings.b2_angularSlop, 0.0, b2Settings.b2_maxAngularCorrection);
- limitImpulse = (-this.m_motorMass * C);
- }
- bA.m_sweep.a -= bA.m_invI * limitImpulse;
- bB.m_sweep.a += bB.m_invI * limitImpulse;
- bA.SynchronizeTransform();
- bB.SynchronizeTransform();
- } {
- tMat = bA.m_xf.R;
- var r1X = this.m_localAnchor1.x - bA.m_sweep.localCenter.x;
- var r1Y = this.m_localAnchor1.y - bA.m_sweep.localCenter.y;
- tX = (tMat.col1.x * r1X + tMat.col2.x * r1Y);
- r1Y = (tMat.col1.y * r1X + tMat.col2.y * r1Y);
- r1X = tX;
- tMat = bB.m_xf.R;
- var r2X = this.m_localAnchor2.x - bB.m_sweep.localCenter.x;
- var r2Y = this.m_localAnchor2.y - bB.m_sweep.localCenter.y;
- tX = (tMat.col1.x * r2X + tMat.col2.x * r2Y);
- r2Y = (tMat.col1.y * r2X + tMat.col2.y * r2Y);
- r2X = tX;
- var CX = bB.m_sweep.c.x + r2X - bA.m_sweep.c.x - r1X;
- var CY = bB.m_sweep.c.y + r2Y - bA.m_sweep.c.y - r1Y;
- var CLengthSquared = CX * CX + CY * CY;
- var CLength = Math.sqrt(CLengthSquared);
- positionError = CLength;
- var invMass1 = bA.m_invMass;
- var invMass2 = bB.m_invMass;
- var invI1 = bA.m_invI;
- var invI2 = bB.m_invI;
- var k_allowedStretch = 10.0 * b2Settings.b2_linearSlop;
- if (CLengthSquared > k_allowedStretch * k_allowedStretch) {
- var uX = CX / CLength;
- var uY = CY / CLength;
- var k = invMass1 + invMass2;
- var m = 1.0 / k;
- impulseX = m * ((-CX));
- impulseY = m * ((-CY));
- var k_beta = 0.5;
- bA.m_sweep.c.x -= k_beta * invMass1 * impulseX;
- bA.m_sweep.c.y -= k_beta * invMass1 * impulseY;
- bB.m_sweep.c.x += k_beta * invMass2 * impulseX;
- bB.m_sweep.c.y += k_beta * invMass2 * impulseY;
- CX = bB.m_sweep.c.x + r2X - bA.m_sweep.c.x - r1X;
- CY = bB.m_sweep.c.y + r2Y - bA.m_sweep.c.y - r1Y;
- }
- this.K1.col1.x = invMass1 + invMass2;
- this.K1.col2.x = 0.0;
- this.K1.col1.y = 0.0;
- this.K1.col2.y = invMass1 + invMass2;
- this.K2.col1.x = invI1 * r1Y * r1Y;
- this.K2.col2.x = (-invI1 * r1X * r1Y);
- this.K2.col1.y = (-invI1 * r1X * r1Y);
- this.K2.col2.y = invI1 * r1X * r1X;
- this.K3.col1.x = invI2 * r2Y * r2Y;
- this.K3.col2.x = (-invI2 * r2X * r2Y);
- this.K3.col1.y = (-invI2 * r2X * r2Y);
- this.K3.col2.y = invI2 * r2X * r2X;
- this.K.SetM(this.K1);
- this.K.AddM(this.K2);
- this.K.AddM(this.K3);
- this.K.Solve(b2RevoluteJoint.tImpulse, (-CX), (-CY));
- impulseX = b2RevoluteJoint.tImpulse.x;
- impulseY = b2RevoluteJoint.tImpulse.y;
- bA.m_sweep.c.x -= bA.m_invMass * impulseX;
- bA.m_sweep.c.y -= bA.m_invMass * impulseY;
- bA.m_sweep.a -= bA.m_invI * (r1X * impulseY - r1Y * impulseX);
- bB.m_sweep.c.x += bB.m_invMass * impulseX;
- bB.m_sweep.c.y += bB.m_invMass * impulseY;
- bB.m_sweep.a += bB.m_invI * (r2X * impulseY - r2Y * impulseX);
- bA.SynchronizeTransform();
- bB.SynchronizeTransform();
- }
- return positionError <= b2Settings.b2_linearSlop && angularError <= b2Settings.b2_angularSlop;
- }
- Box2D.postDefs.push(function () {
- Box2D.Dynamics.Joints.b2RevoluteJoint.tImpulse = new b2Vec2();
- });
- Box2D.inherit(b2RevoluteJointDef, Box2D.Dynamics.Joints.b2JointDef);
- b2RevoluteJointDef.prototype.__super = Box2D.Dynamics.Joints.b2JointDef.prototype;
- b2RevoluteJointDef.b2RevoluteJointDef = function () {
- Box2D.Dynamics.Joints.b2JointDef.b2JointDef.apply(this, arguments);
- this.localAnchorA = new b2Vec2();
- this.localAnchorB = new b2Vec2();
- };
- b2RevoluteJointDef.prototype.b2RevoluteJointDef = function () {
- this.__super.b2JointDef.call(this);
- this.type = b2Joint.e_revoluteJoint;
- this.localAnchorA.Set(0.0, 0.0);
- this.localAnchorB.Set(0.0, 0.0);
- this.referenceAngle = 0.0;
- this.lowerAngle = 0.0;
- this.upperAngle = 0.0;
- this.maxMotorTorque = 0.0;
- this.motorSpeed = 0.0;
- this.enableLimit = false;
- this.enableMotor = false;
- }
- b2RevoluteJointDef.prototype.Initialize = function (bA, bB, anchor) {
- this.bodyA = bA;
- this.bodyB = bB;
- this.localAnchorA = this.bodyA.GetLocalPoint(anchor);
- this.localAnchorB = this.bodyB.GetLocalPoint(anchor);
- this.referenceAngle = this.bodyB.GetAngle() - this.bodyA.GetAngle();
- }
- Box2D.inherit(b2WeldJoint, Box2D.Dynamics.Joints.b2Joint);
- b2WeldJoint.prototype.__super = Box2D.Dynamics.Joints.b2Joint.prototype;
- b2WeldJoint.b2WeldJoint = function () {
- Box2D.Dynamics.Joints.b2Joint.b2Joint.apply(this, arguments);
- this.m_localAnchorA = new b2Vec2();
- this.m_localAnchorB = new b2Vec2();
- this.m_impulse = new b2Vec3();
- this.m_mass = new b2Mat33();
- };
- b2WeldJoint.prototype.GetAnchorA = function () {
- return this.m_bodyA.GetWorldPoint(this.m_localAnchorA);
- }
- b2WeldJoint.prototype.GetAnchorB = function () {
- return this.m_bodyB.GetWorldPoint(this.m_localAnchorB);
- }
- b2WeldJoint.prototype.GetReactionForce = function (inv_dt) {
- if (inv_dt === undefined) inv_dt = 0;
- return new b2Vec2(inv_dt * this.m_impulse.x, inv_dt * this.m_impulse.y);
- }
- b2WeldJoint.prototype.GetReactionTorque = function (inv_dt) {
- if (inv_dt === undefined) inv_dt = 0;
- return inv_dt * this.m_impulse.z;
- }
- b2WeldJoint.prototype.b2WeldJoint = function (def) {
- this.__super.b2Joint.call(this, def);
- this.m_localAnchorA.SetV(def.localAnchorA);
- this.m_localAnchorB.SetV(def.localAnchorB);
- this.m_referenceAngle = def.referenceAngle;
- this.m_impulse.SetZero();
- this.m_mass = new b2Mat33();
- }
- b2WeldJoint.prototype.InitVelocityConstraints = function (step) {
- var tMat;
- var tX = 0;
- var bA = this.m_bodyA;
- var bB = this.m_bodyB;
- tMat = bA.m_xf.R;
- var rAX = this.m_localAnchorA.x - bA.m_sweep.localCenter.x;
- var rAY = this.m_localAnchorA.y - bA.m_sweep.localCenter.y;
- tX = (tMat.col1.x * rAX + tMat.col2.x * rAY);
- rAY = (tMat.col1.y * rAX + tMat.col2.y * rAY);
- rAX = tX;
- tMat = bB.m_xf.R;
- var rBX = this.m_localAnchorB.x - bB.m_sweep.localCenter.x;
- var rBY = this.m_localAnchorB.y - bB.m_sweep.localCenter.y;
- tX = (tMat.col1.x * rBX + tMat.col2.x * rBY);
- rBY = (tMat.col1.y * rBX + tMat.col2.y * rBY);
- rBX = tX;
- var mA = bA.m_invMass;
- var mB = bB.m_invMass;
- var iA = bA.m_invI;
- var iB = bB.m_invI;
- this.m_mass.col1.x = mA + mB + rAY * rAY * iA + rBY * rBY * iB;
- this.m_mass.col2.x = (-rAY * rAX * iA) - rBY * rBX * iB;
- this.m_mass.col3.x = (-rAY * iA) - rBY * iB;
- this.m_mass.col1.y = this.m_mass.col2.x;
- this.m_mass.col2.y = mA + mB + rAX * rAX * iA + rBX * rBX * iB;
- this.m_mass.col3.y = rAX * iA + rBX * iB;
- this.m_mass.col1.z = this.m_mass.col3.x;
- this.m_mass.col2.z = this.m_mass.col3.y;
- this.m_mass.col3.z = iA + iB;
- if (step.warmStarting) {
- this.m_impulse.x *= step.dtRatio;
- this.m_impulse.y *= step.dtRatio;
- this.m_impulse.z *= step.dtRatio;
- bA.m_linearVelocity.x -= mA * this.m_impulse.x;
- bA.m_linearVelocity.y -= mA * this.m_impulse.y;
- bA.m_angularVelocity -= iA * (rAX * this.m_impulse.y - rAY * this.m_impulse.x + this.m_impulse.z);
- bB.m_linearVelocity.x += mB * this.m_impulse.x;
- bB.m_linearVelocity.y += mB * this.m_impulse.y;
- bB.m_angularVelocity += iB * (rBX * this.m_impulse.y - rBY * this.m_impulse.x + this.m_impulse.z);
- }
- else {
- this.m_impulse.SetZero();
- }
- }
- b2WeldJoint.prototype.SolveVelocityConstraints = function (step) {
- var tMat;
- var tX = 0;
- var bA = this.m_bodyA;
- var bB = this.m_bodyB;
- var vA = bA.m_linearVelocity;
- var wA = bA.m_angularVelocity;
- var vB = bB.m_linearVelocity;
- var wB = bB.m_angularVelocity;
- var mA = bA.m_invMass;
- var mB = bB.m_invMass;
- var iA = bA.m_invI;
- var iB = bB.m_invI;
- tMat = bA.m_xf.R;
- var rAX = this.m_localAnchorA.x - bA.m_sweep.localCenter.x;
- var rAY = this.m_localAnchorA.y - bA.m_sweep.localCenter.y;
- tX = (tMat.col1.x * rAX + tMat.col2.x * rAY);
- rAY = (tMat.col1.y * rAX + tMat.col2.y * rAY);
- rAX = tX;
- tMat = bB.m_xf.R;
- var rBX = this.m_localAnchorB.x - bB.m_sweep.localCenter.x;
- var rBY = this.m_localAnchorB.y - bB.m_sweep.localCenter.y;
- tX = (tMat.col1.x * rBX + tMat.col2.x * rBY);
- rBY = (tMat.col1.y * rBX + tMat.col2.y * rBY);
- rBX = tX;
- var Cdot1X = vB.x - wB * rBY - vA.x + wA * rAY;
- var Cdot1Y = vB.y + wB * rBX - vA.y - wA * rAX;
- var Cdot2 = wB - wA;
- var impulse = new b2Vec3();
- this.m_mass.Solve33(impulse, (-Cdot1X), (-Cdot1Y), (-Cdot2));
- this.m_impulse.Add(impulse);
- vA.x -= mA * impulse.x;
- vA.y -= mA * impulse.y;
- wA -= iA * (rAX * impulse.y - rAY * impulse.x + impulse.z);
- vB.x += mB * impulse.x;
- vB.y += mB * impulse.y;
- wB += iB * (rBX * impulse.y - rBY * impulse.x + impulse.z);
- bA.m_angularVelocity = wA;
- bB.m_angularVelocity = wB;
- }
- b2WeldJoint.prototype.SolvePositionConstraints = function (baumgarte) {
- if (baumgarte === undefined) baumgarte = 0;
- var tMat;
- var tX = 0;
- var bA = this.m_bodyA;
- var bB = this.m_bodyB;
- tMat = bA.m_xf.R;
- var rAX = this.m_localAnchorA.x - bA.m_sweep.localCenter.x;
- var rAY = this.m_localAnchorA.y - bA.m_sweep.localCenter.y;
- tX = (tMat.col1.x * rAX + tMat.col2.x * rAY);
- rAY = (tMat.col1.y * rAX + tMat.col2.y * rAY);
- rAX = tX;
- tMat = bB.m_xf.R;
- var rBX = this.m_localAnchorB.x - bB.m_sweep.localCenter.x;
- var rBY = this.m_localAnchorB.y - bB.m_sweep.localCenter.y;
- tX = (tMat.col1.x * rBX + tMat.col2.x * rBY);
- rBY = (tMat.col1.y * rBX + tMat.col2.y * rBY);
- rBX = tX;
- var mA = bA.m_invMass;
- var mB = bB.m_invMass;
- var iA = bA.m_invI;
- var iB = bB.m_invI;
- var C1X = bB.m_sweep.c.x + rBX - bA.m_sweep.c.x - rAX;
- var C1Y = bB.m_sweep.c.y + rBY - bA.m_sweep.c.y - rAY;
- var C2 = bB.m_sweep.a - bA.m_sweep.a - this.m_referenceAngle;
- var k_allowedStretch = 10.0 * b2Settings.b2_linearSlop;
- var positionError = Math.sqrt(C1X * C1X + C1Y * C1Y);
- var angularError = b2Math.Abs(C2);
- if (positionError > k_allowedStretch) {
- iA *= 1.0;
- iB *= 1.0;
- }
- this.m_mass.col1.x = mA + mB + rAY * rAY * iA + rBY * rBY * iB;
- this.m_mass.col2.x = (-rAY * rAX * iA) - rBY * rBX * iB;
- this.m_mass.col3.x = (-rAY * iA) - rBY * iB;
- this.m_mass.col1.y = this.m_mass.col2.x;
- this.m_mass.col2.y = mA + mB + rAX * rAX * iA + rBX * rBX * iB;
- this.m_mass.col3.y = rAX * iA + rBX * iB;
- this.m_mass.col1.z = this.m_mass.col3.x;
- this.m_mass.col2.z = this.m_mass.col3.y;
- this.m_mass.col3.z = iA + iB;
- var impulse = new b2Vec3();
- this.m_mass.Solve33(impulse, (-C1X), (-C1Y), (-C2));
- bA.m_sweep.c.x -= mA * impulse.x;
- bA.m_sweep.c.y -= mA * impulse.y;
- bA.m_sweep.a -= iA * (rAX * impulse.y - rAY * impulse.x + impulse.z);
- bB.m_sweep.c.x += mB * impulse.x;
- bB.m_sweep.c.y += mB * impulse.y;
- bB.m_sweep.a += iB * (rBX * impulse.y - rBY * impulse.x + impulse.z);
- bA.SynchronizeTransform();
- bB.SynchronizeTransform();
- return positionError <= b2Settings.b2_linearSlop && angularError <= b2Settings.b2_angularSlop;
- }
- Box2D.inherit(b2WeldJointDef, Box2D.Dynamics.Joints.b2JointDef);
- b2WeldJointDef.prototype.__super = Box2D.Dynamics.Joints.b2JointDef.prototype;
- b2WeldJointDef.b2WeldJointDef = function () {
- Box2D.Dynamics.Joints.b2JointDef.b2JointDef.apply(this, arguments);
- this.localAnchorA = new b2Vec2();
- this.localAnchorB = new b2Vec2();
- };
- b2WeldJointDef.prototype.b2WeldJointDef = function () {
- this.__super.b2JointDef.call(this);
- this.type = b2Joint.e_weldJoint;
- this.referenceAngle = 0.0;
- }
- b2WeldJointDef.prototype.Initialize = function (bA, bB, anchor) {
- this.bodyA = bA;
- this.bodyB = bB;
- this.localAnchorA.SetV(this.bodyA.GetLocalPoint(anchor));
- this.localAnchorB.SetV(this.bodyB.GetLocalPoint(anchor));
- this.referenceAngle = this.bodyB.GetAngle() - this.bodyA.GetAngle();
- }
-})();
-(function () {
- var b2DebugDraw = Box2D.Dynamics.b2DebugDraw;
- b2DebugDraw.b2DebugDraw = function () {
- this.m_drawScale = 1.0;
- this.m_lineThickness = 1.0;
- this.m_alpha = 1.0;
- this.m_fillAlpha = 1.0;
- this.m_xformScale = 1.0;
- var __this = this;
- //#WORKAROUND
- this.m_sprite = {
- graphics: {
- clear: function () {
- __this.m_ctx.clearRect(0, 0, __this.m_ctx.canvas.width, __this.m_ctx.canvas.height)
- }
- }
- };
- };
- b2DebugDraw.prototype._color = function (color, alpha) {
- return "rgba(" + ((color & 0xFF0000) >> 16) + "," + ((color & 0xFF00) >> 8) + "," + (color & 0xFF) + "," + alpha + ")";
- };
- b2DebugDraw.prototype.b2DebugDraw = function () {
- this.m_drawFlags = 0;
- };
- b2DebugDraw.prototype.SetFlags = function (flags) {
- if (flags === undefined) flags = 0;
- this.m_drawFlags = flags;
- };
- b2DebugDraw.prototype.GetFlags = function () {
- return this.m_drawFlags;
- };
- b2DebugDraw.prototype.AppendFlags = function (flags) {
- if (flags === undefined) flags = 0;
- this.m_drawFlags |= flags;
- };
- b2DebugDraw.prototype.ClearFlags = function (flags) {
- if (flags === undefined) flags = 0;
- this.m_drawFlags &= ~flags;
- };
- b2DebugDraw.prototype.SetSprite = function (sprite) {
- this.m_ctx = sprite;
- };
- b2DebugDraw.prototype.GetSprite = function () {
- return this.m_ctx;
- };
- b2DebugDraw.prototype.SetDrawScale = function (drawScale) {
- if (drawScale === undefined) drawScale = 0;
- this.m_drawScale = drawScale;
- };
- b2DebugDraw.prototype.GetDrawScale = function () {
- return this.m_drawScale;
- };
- b2DebugDraw.prototype.SetLineThickness = function (lineThickness) {
- if (lineThickness === undefined) lineThickness = 0;
- this.m_lineThickness = lineThickness;
- this.m_ctx.strokeWidth = lineThickness;
- };
- b2DebugDraw.prototype.GetLineThickness = function () {
- return this.m_lineThickness;
- };
- b2DebugDraw.prototype.SetAlpha = function (alpha) {
- if (alpha === undefined) alpha = 0;
- this.m_alpha = alpha;
- };
- b2DebugDraw.prototype.GetAlpha = function () {
- return this.m_alpha;
- };
- b2DebugDraw.prototype.SetFillAlpha = function (alpha) {
- if (alpha === undefined) alpha = 0;
- this.m_fillAlpha = alpha;
- };
- b2DebugDraw.prototype.GetFillAlpha = function () {
- return this.m_fillAlpha;
- };
- b2DebugDraw.prototype.SetXFormScale = function (xformScale) {
- if (xformScale === undefined) xformScale = 0;
- this.m_xformScale = xformScale;
- };
- b2DebugDraw.prototype.GetXFormScale = function () {
- return this.m_xformScale;
- };
- b2DebugDraw.prototype.DrawPolygon = function (vertices, vertexCount, color) {
- if (!vertexCount) return;
- var s = this.m_ctx;
- var drawScale = this.m_drawScale;
- s.beginPath();
- s.strokeStyle = this._color(color.color, this.m_alpha);
- s.moveTo(vertices[0].x * drawScale, vertices[0].y * drawScale);
- for (var i = 1; i < vertexCount; i++) {
- s.lineTo(vertices[i].x * drawScale, vertices[i].y * drawScale);
- }
- s.lineTo(vertices[0].x * drawScale, vertices[0].y * drawScale);
- s.closePath();
- s.stroke();
- };
- b2DebugDraw.prototype.DrawSolidPolygon = function (vertices, vertexCount, color) {
- if (!vertexCount) return;
- var s = this.m_ctx;
- var drawScale = this.m_drawScale;
- s.beginPath();
- s.strokeStyle = this._color(color.color, this.m_alpha);
- s.fillStyle = this._color(color.color, this.m_fillAlpha);
- s.moveTo(vertices[0].x * drawScale, vertices[0].y * drawScale);
- for (var i = 1; i < vertexCount; i++) {
- s.lineTo(vertices[i].x * drawScale, vertices[i].y * drawScale);
- }
- s.lineTo(vertices[0].x * drawScale, vertices[0].y * drawScale);
- s.closePath();
- s.fill();
- s.stroke();
- };
- b2DebugDraw.prototype.DrawCircle = function (center, radius, color) {
- if (!radius) return;
- var s = this.m_ctx;
- var drawScale = this.m_drawScale;
- s.beginPath();
- s.strokeStyle = this._color(color.color, this.m_alpha);
- s.arc(center.x * drawScale, center.y * drawScale, radius * drawScale, 0, Math.PI * 2, true);
- s.closePath();
- s.stroke();
- };
- b2DebugDraw.prototype.DrawSolidCircle = function (center, radius, axis, color) {
- if (!radius) return;
- var s = this.m_ctx,
- drawScale = this.m_drawScale,
- cx = center.x * drawScale,
- cy = center.y * drawScale;
- s.moveTo(0, 0);
- s.beginPath();
- s.strokeStyle = this._color(color.color, this.m_alpha);
- s.fillStyle = this._color(color.color, this.m_fillAlpha);
- s.arc(cx, cy, radius * drawScale, 0, Math.PI * 2, true);
- s.moveTo(cx, cy);
- s.lineTo((center.x + axis.x * radius) * drawScale, (center.y + axis.y * radius) * drawScale);
- s.closePath();
- s.fill();
- s.stroke();
- };
- b2DebugDraw.prototype.DrawSegment = function (p1, p2, color) {
- var s = this.m_ctx,
- drawScale = this.m_drawScale;
- s.strokeStyle = this._color(color.color, this.m_alpha);
- s.beginPath();
- s.moveTo(p1.x * drawScale, p1.y * drawScale);
- s.lineTo(p2.x * drawScale, p2.y * drawScale);
- s.closePath();
- s.stroke();
- };
- b2DebugDraw.prototype.DrawTransform = function (xf) {
- var s = this.m_ctx,
- drawScale = this.m_drawScale;
- s.beginPath();
- s.strokeStyle = this._color(0xff0000, this.m_alpha);
- s.moveTo(xf.position.x * drawScale, xf.position.y * drawScale);
- s.lineTo((xf.position.x + this.m_xformScale * xf.R.col1.x) * drawScale, (xf.position.y + this.m_xformScale * xf.R.col1.y) * drawScale);
-
- s.strokeStyle = this._color(0xff00, this.m_alpha);
- s.moveTo(xf.position.x * drawScale, xf.position.y * drawScale);
- s.lineTo((xf.position.x + this.m_xformScale * xf.R.col2.x) * drawScale, (xf.position.y + this.m_xformScale * xf.R.col2.y) * drawScale);
- s.closePath();
- s.stroke();
- };
-})(); //post-definitions
-var i;
-for (i = 0; i < Box2D.postDefs.length; ++i) Box2D.postDefs[i]();
-delete Box2D.postDefs;
-
- return Box2D;
-});
\ No newline at end of file
diff --git a/lib/Vendor/SocketIO.js b/lib/Vendor/SocketIO.js
deleted file mode 100644
index 062fb3c..0000000
--- a/lib/Vendor/SocketIO.js
+++ /dev/null
@@ -1,3 +0,0 @@
-define(["/socket.io/socket.io.js"], function() {
- return io;
-});
\ No newline at end of file
diff --git a/lib/Vendor/Three.js b/lib/Vendor/Three.js
deleted file mode 100755
index f12e072..0000000
--- a/lib/Vendor/Three.js
+++ /dev/null
@@ -1,3 +0,0 @@
-define(["Vendor/Three/Three"], function() {
- return THREE;
-})
\ No newline at end of file
diff --git a/lib/Vendor/Three/Three.js b/lib/Vendor/Three/Three.js
deleted file mode 100644
index 4cd1ca1..0000000
--- a/lib/Vendor/Three/Three.js
+++ /dev/null
@@ -1,770 +0,0 @@
-// Three.js r47 - http://github.com/mrdoob/three.js
-'use strict';var THREE=THREE||{};if(!self.Int32Array)self.Int32Array=Array,self.Float32Array=Array;
-(function(){for(var a=0,b=["ms","moz","webkit","o"],c=0;c>16&255)/255;this.g=(a>>8&255)/255;this.b=(a&255)/255;return this},getHex:function(){return Math.floor(255*this.r)<<16^Math.floor(255*this.g)<<8^Math.floor(255*this.b)},getContextStyle:function(){return"rgb("+Math.floor(255*this.r)+","+Math.floor(255*this.g)+","+Math.floor(255*this.b)+")"},clone:function(){return(new THREE.Color).setRGB(this.r,this.g,this.b)}};THREE.Vector2=function(a,b){this.x=a||0;this.y=b||0};
-THREE.Vector2.prototype={constructor:THREE.Vector2,set:function(a,b){this.x=a;this.y=b;return this},copy:function(a){this.x=a.x;this.y=a.y;return this},clone:function(){return new THREE.Vector2(this.x,this.y)},add:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;return this},addSelf:function(a){this.x+=a.x;this.y+=a.y;return this},sub:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;return this},subSelf:function(a){this.x-=a.x;this.y-=a.y;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;return this},
-divideScalar:function(a){a?(this.x/=a,this.y/=a):this.set(0,0);return this},negate:function(){return this.multiplyScalar(-1)},dot:function(a){return this.x*a.x+this.y*a.y},lengthSq:function(){return this.x*this.x+this.y*this.y},length:function(){return Math.sqrt(this.lengthSq())},normalize:function(){return this.divideScalar(this.length())},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(a){var b=this.x-a.x,a=this.y-a.y;return b*b+a*a},setLength:function(a){return this.normalize().multiplyScalar(a)},
-equals:function(a){return a.x===this.x&&a.y===this.y}};THREE.Vector3=function(a,b,c){this.x=a||0;this.y=b||0;this.z=c||0};
-THREE.Vector3.prototype={constructor:THREE.Vector3,set:function(a,b,c){this.x=a;this.y=b;this.z=c;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setZ:function(a){this.z=a;return this},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;return this},clone:function(){return new THREE.Vector3(this.x,this.y,this.z)},add:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;return this},addSelf:function(a){this.x+=a.x;this.y+=a.y;this.z+=a.z;return this},
-addScalar:function(a){this.x+=a;this.y+=a;this.z+=a;return this},sub:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z-b.z;return this},subSelf:function(a){this.x-=a.x;this.y-=a.y;this.z-=a.z;return this},multiply:function(a,b){this.x=a.x*b.x;this.y=a.y*b.y;this.z=a.z*b.z;return this},multiplySelf:function(a){this.x*=a.x;this.y*=a.y;this.z*=a.z;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;this.z*=a;return this},divideSelf:function(a){this.x/=a.x;this.y/=a.y;this.z/=a.z;return this},
-divideScalar:function(a){a?(this.x/=a,this.y/=a,this.z/=a):this.z=this.y=this.x=0;return this},negate:function(){return this.multiplyScalar(-1)},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z},length:function(){return Math.sqrt(this.lengthSq())},lengthManhattan:function(){return this.x+this.y+this.z},normalize:function(){return this.divideScalar(this.length())},setLength:function(a){return this.normalize().multiplyScalar(a)},
-cross:function(a,b){this.x=a.y*b.z-a.z*b.y;this.y=a.z*b.x-a.x*b.z;this.z=a.x*b.y-a.y*b.x;return this},crossSelf:function(a){var b=this.x,c=this.y,d=this.z;this.x=c*a.z-d*a.y;this.y=d*a.x-b*a.z;this.z=b*a.y-c*a.x;return this},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(a){return(new THREE.Vector3).sub(this,a).lengthSq()},setPositionFromMatrix:function(a){this.x=a.n14;this.y=a.n24;this.z=a.n34},setRotationFromMatrix:function(a){var b=Math.cos(this.y);
-this.y=Math.asin(a.n13);1.0E-5this.lengthSq()}};THREE.Vector4=function(a,b,c,d){this.x=a||0;this.y=b||0;this.z=c||0;this.w=void 0!==d?d:1};
-THREE.Vector4.prototype={constructor:THREE.Vector4,set:function(a,b,c,d){this.x=a;this.y=b;this.z=c;this.w=d;return this},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;this.w=void 0!==a.w?a.w:1},clone:function(){return new THREE.Vector4(this.x,this.y,this.z,this.w)},add:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;this.w=a.w+b.w;return this},addSelf:function(a){this.x+=a.x;this.y+=a.y;this.z+=a.z;this.w+=a.w;return this},sub:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z-
-b.z;this.w=a.w-b.w;return this},subSelf:function(a){this.x-=a.x;this.y-=a.y;this.z-=a.z;this.w-=a.w;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;this.z*=a;this.w*=a;return this},divideScalar:function(a){a?(this.x/=a,this.y/=a,this.z/=a,this.w/=a):(this.z=this.y=this.x=0,this.w=1);return this},negate:function(){return this.multiplyScalar(-1)},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z+this.w*a.w},lengthSq:function(){return this.dot(this)},length:function(){return Math.sqrt(this.lengthSq())},
-normalize:function(){return this.divideScalar(this.length())},setLength:function(a){return this.normalize().multiplyScalar(a)},lerpSelf:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;this.z+=(a.z-this.z)*b;this.w+=(a.w-this.w)*b;return this}};THREE.Frustum=function(){this.planes=[new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4]};
-THREE.Frustum.prototype.setFromMatrix=function(a){var b,c=this.planes;c[0].set(a.n41-a.n11,a.n42-a.n12,a.n43-a.n13,a.n44-a.n14);c[1].set(a.n41+a.n11,a.n42+a.n12,a.n43+a.n13,a.n44+a.n14);c[2].set(a.n41+a.n21,a.n42+a.n22,a.n43+a.n23,a.n44+a.n24);c[3].set(a.n41-a.n21,a.n42-a.n22,a.n43-a.n23,a.n44-a.n24);c[4].set(a.n41-a.n31,a.n42-a.n32,a.n43-a.n33,a.n44-a.n34);c[5].set(a.n41+a.n31,a.n42+a.n32,a.n43+a.n33,a.n44+a.n34);for(a=0;6>a;a++)b=c[a],b.divideScalar(Math.sqrt(b.x*b.x+b.y*b.y+b.z*b.z))};
-THREE.Frustum.prototype.contains=function(a){for(var b=this.planes,c=a.matrixWorld,d=THREE.Frustum.__v1.set(c.getColumnX().length(),c.getColumnY().length(),c.getColumnZ().length()),d=-a.geometry.boundingSphere.radius*Math.max(d.x,Math.max(d.y,d.z)),e=0;6>e;e++)if(a=b[e].x*c.n14+b[e].y*c.n24+b[e].z*c.n34+b[e].w,a<=d)return!1;return!0};THREE.Frustum.__v1=new THREE.Vector3;
-THREE.Ray=function(a,b){function c(a,b,c){o.sub(c,a);r=o.dot(b);s=p.add(a,m.copy(b).multiplyScalar(r));return t=c.distanceTo(s)}function d(a,b,c,d){o.sub(d,b);p.sub(c,b);m.sub(a,b);u=o.dot(o);v=o.dot(p);x=o.dot(m);B=p.dot(p);D=p.dot(m);C=1/(u*B-v*v);A=(B*x-v*D)*C;H=(u*D-v*x)*C;return 0<=A&&0<=H&&1>A+H}this.origin=a||new THREE.Vector3;this.direction=b||new THREE.Vector3;this.intersectScene=function(a){return this.intersectObjects(a.children)};this.intersectObjects=function(a){var b,c,d=[];for(b=0,
-c=a.length;ba.scale.x)return[];b={distance:o,point:a.position,face:null,object:a};m.push(b)}else if(a instanceof THREE.Mesh){o=c(this.origin,this.direction,a.matrixWorld.getPosition());p=THREE.Frustum.__v1.set(a.matrixWorld.getColumnX().length(),a.matrixWorld.getColumnY().length(),a.matrixWorld.getColumnZ().length());if(o>a.geometry.boundingSphere.radius*Math.max(p.x,Math.max(p.y,p.z)))return m;var r,s,j=a.geometry,t=j.vertices,y;a.matrixRotationWorld.extractRotation(a.matrixWorld);
-for(o=0,p=j.faces.length;oMath.abs(r))&&(s=n.dot(k)/r,!(0>s)&&(a.doubleSided||(a.flipSided?0r))))if(q.add(i,l.multiplyScalar(s)),b instanceof THREE.Face3)e=y.multiplyVector3(e.copy(t[b.a].position)),f=y.multiplyVector3(f.copy(t[b.b].position)),g=y.multiplyVector3(g.copy(t[b.c].position)),
-d(q,e,f,g)&&(b={distance:i.distanceTo(q),point:q.clone(),face:b,object:a},m.push(b));else if(b instanceof THREE.Face4&&(e=y.multiplyVector3(e.copy(t[b.a].position)),f=y.multiplyVector3(f.copy(t[b.b].position)),g=y.multiplyVector3(g.copy(t[b.c].position)),h=y.multiplyVector3(h.copy(t[b.d].position)),d(q,e,f,h)||d(q,f,g,h)))b={distance:i.distanceTo(q),point:q.clone(),face:b,object:a},m.push(b)}return m};var o=new THREE.Vector3,p=new THREE.Vector3,m=new THREE.Vector3,r,s,t,u,v,x,B,D,C,A,H};
-THREE.Rectangle=function(){function a(){f=d-b;g=e-c}var b,c,d,e,f,g,h=!0;this.getX=function(){return b};this.getY=function(){return c};this.getWidth=function(){return f};this.getHeight=function(){return g};this.getLeft=function(){return b};this.getTop=function(){return c};this.getRight=function(){return d};this.getBottom=function(){return e};this.set=function(f,g,k,n){h=!1;b=f;c=g;d=k;e=n;a()};this.addPoint=function(f,g){h?(h=!1,b=f,c=g,d=f,e=g):(b=bf?d:f,e=e>g?e:g);a()};this.add3Points=
-function(f,g,k,n,q,o){h?(h=!1,b=fk?f>q?f:q:k>q?k:q,e=g>n?g>o?g:o:n>o?n:o):(b=fk?f>q?f>d?f:d:q>d?q:d:k>q?k>d?k:d:q>d?q:d,e=g>n?g>o?g>e?g:e:o>e?o:e:n>o?n>e?n:e:o>e?o:e);a()};this.addRectangle=function(f){h?(h=!1,b=f.getLeft(),c=f.getTop(),d=f.getRight(),e=f.getBottom()):(b=bf.getRight()?d:f.getRight(),e=e>
-f.getBottom()?e:f.getBottom());a()};this.inflate=function(f){b-=f;c-=f;d+=f;e+=f;a()};this.minSelf=function(f){b=b>f.getLeft()?b:f.getLeft();c=c>f.getTop()?c:f.getTop();d=da.getRight()||ea.getBottom()?!1:!0};this.empty=function(){h=!0;e=d=c=b=0;a()};this.isEmpty=function(){return h}};
-THREE.Math={clamp:function(a,b,c){return ac?c:a},clampBottom:function(a,b){return ae&&0>f||0>g&&0>h)return!1;0>e?c=Math.max(c,e/(e-f)):0>f&&(d=Math.min(d,e/(e-f)));0>g?c=Math.max(c,g/(g-h)):0>h&&(d=Math.min(d,g/(g-h)));if(dg&&h.positionScreen.z(R.positionScreen.x-S.positionScreen.x)*(T.positionScreen.y-S.positionScreen.y)-(R.positionScreen.y-S.positionScreen.y)*(T.positionScreen.x-
-S.positionScreen.x)))ka=q[n]=q[n]||new THREE.RenderableFace3,n++,k=ka,k.v1.copy(S),k.v2.copy(T),k.v3.copy(R);else continue;else if(y instanceof THREE.Face4)if(S=l[y.a],T=l[y.b],R=l[y.c],ka=l[y.d],S.visible&&T.visible&&R.visible&&ka.visible&&(ga.doubleSided||ga.flipSided!=(0>(ka.positionScreen.x-S.positionScreen.x)*(T.positionScreen.y-S.positionScreen.y)-(ka.positionScreen.y-S.positionScreen.y)*(T.positionScreen.x-S.positionScreen.x)||0>(T.positionScreen.x-R.positionScreen.x)*(ka.positionScreen.y-
-R.positionScreen.y)-(T.positionScreen.y-R.positionScreen.y)*(ka.positionScreen.x-R.positionScreen.x))))la=p[o]=p[o]||new THREE.RenderableFace4,o++,k=la,k.v1.copy(S),k.v2.copy(T),k.v3.copy(R),k.v4.copy(ka);else continue;k.normalWorld.copy(y.normal);ba.multiplyVector3(k.normalWorld);k.centroidWorld.copy(y.centroid);V.multiplyVector3(k.centroidWorld);k.centroidScreen.copy(k.centroidWorld);C.multiplyVector3(k.centroidScreen);R=y.vertexNormals;for(S=0,T=R.length;SD.z))g=v[u]=v[u]||new THREE.RenderableParticle,u++,t=g,t.x=
-D.x/D.w,t.y=D.y/D.w,t.z=D.z,t.rotation=ga.rotation.z,t.scale.x=ga.scale.x*Math.abs(t.x-(D.x+e.projectionMatrix.n11)/(D.w+e.projectionMatrix.n14)),t.scale.y=ga.scale.y*Math.abs(t.y-(D.y+e.projectionMatrix.n22)/(D.w+e.projectionMatrix.n24)),t.material=ga.material,x.elements.push(t);f&&x.elements.sort(c);return x}};THREE.Quaternion=function(a,b,c,d){this.set(a||0,b||0,c||0,void 0!==d?d:1)};
-THREE.Quaternion.prototype={constructor:THREE.Quaternion,set:function(a,b,c,d){this.x=a;this.y=b;this.z=c;this.w=d;return this},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;this.w=a.w;return this},setFromEuler:function(a){var b=Math.PI/360,c=a.x*b,d=a.y*b,e=a.z*b,a=Math.cos(d),d=Math.sin(d),b=Math.cos(-e),e=Math.sin(-e),f=Math.cos(c),c=Math.sin(c),g=a*b,h=d*e;this.w=g*f-h*c;this.x=g*c+h*f;this.y=d*b*f+a*e*c;this.z=a*e*f-d*b*c;return this},setFromAxisAngle:function(a,b){var c=b/2,d=Math.sin(c);
-this.x=a.x*d;this.y=a.y*d;this.z=a.z*d;this.w=Math.cos(c);return this},setFromRotationMatrix:function(a){var b=Math.pow(a.determinant(),1/3);this.w=Math.sqrt(Math.max(0,b+a.n11+a.n22+a.n33))/2;this.x=Math.sqrt(Math.max(0,b+a.n11-a.n22-a.n33))/2;this.y=Math.sqrt(Math.max(0,b-a.n11+a.n22-a.n33))/2;this.z=Math.sqrt(Math.max(0,b-a.n11-a.n22+a.n33))/2;this.x=0>a.n32-a.n23?-Math.abs(this.x):Math.abs(this.x);this.y=0>a.n13-a.n31?-Math.abs(this.y):Math.abs(this.y);this.z=0>a.n21-a.n12?-Math.abs(this.z):Math.abs(this.z);
-this.normalize();return this},calculateW:function(){this.w=-Math.sqrt(Math.abs(1-this.x*this.x-this.y*this.y-this.z*this.z));return this},inverse:function(){this.x*=-1;this.y*=-1;this.z*=-1;return this},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)},normalize:function(){var a=Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w);0===a?this.w=this.z=this.y=this.x=0:(a=1/a,this.x*=a,this.y*=a,this.z*=a,this.w*=a);return this},multiplySelf:function(a){var b=
-this.x,c=this.y,d=this.z,e=this.w,f=a.x,g=a.y,h=a.z,a=a.w;this.x=b*a+e*f+c*h-d*g;this.y=c*a+e*g+d*f-b*h;this.z=d*a+e*h+b*g-c*f;this.w=e*a-b*f-c*g-d*h;return this},multiply:function(a,b){this.x=a.x*b.w+a.y*b.z-a.z*b.y+a.w*b.x;this.y=-a.x*b.z+a.y*b.w+a.z*b.x+a.w*b.y;this.z=a.x*b.y-a.y*b.x+a.z*b.w+a.w*b.z;this.w=-a.x*b.x-a.y*b.y-a.z*b.z+a.w*b.w;return this},multiplyVector3:function(a,b){b||(b=a);var c=a.x,d=a.y,e=a.z,f=this.x,g=this.y,h=this.z,i=this.w,l=i*c+g*e-h*d,k=i*d+h*c-f*e,n=i*e+f*d-g*c,c=-f*
-c-g*d-h*e;b.x=l*i+c*-f+k*-h-n*-g;b.y=k*i+c*-g+n*-f-l*-h;b.z=n*i+c*-h+l*-g-k*-f;return b}};
-THREE.Quaternion.slerp=function(a,b,c,d){var e=a.w*b.w+a.x*b.x+a.y*b.y+a.z*b.z;0>e?(c.w=-b.w,c.x=-b.x,c.y=-b.y,c.z=-b.z,e=-e):c.copy(b);if(1<=Math.abs(e))return c.w=a.w,c.x=a.x,c.y=a.y,c.z=a.z,c;var f=Math.acos(e),e=Math.sqrt(1-e*e);if(0.001>Math.abs(e))return c.w=0.5*(a.w+b.w),c.x=0.5*(a.x+b.x),c.y=0.5*(a.y+b.y),c.z=0.5*(a.z+b.z),c;b=Math.sin((1-d)*f)/e;d=Math.sin(d*f)/e;c.w=a.w*b+c.w*d;c.x=a.x*b+c.x*d;c.y=a.y*b+c.y*d;c.z=a.z*b+c.z*d;return c};THREE.Vertex=function(a){this.position=a||new THREE.Vector3};
-THREE.Face3=function(a,b,c,d,e,f){this.a=a;this.b=b;this.c=c;this.normal=d instanceof THREE.Vector3?d:new THREE.Vector3;this.vertexNormals=d instanceof Array?d:[];this.color=e instanceof THREE.Color?e:new THREE.Color;this.vertexColors=e instanceof Array?e:[];this.vertexTangents=[];this.materialIndex=f;this.centroid=new THREE.Vector3};
-THREE.Face4=function(a,b,c,d,e,f,g){this.a=a;this.b=b;this.c=c;this.d=d;this.normal=e instanceof THREE.Vector3?e:new THREE.Vector3;this.vertexNormals=e instanceof Array?e:[];this.color=f instanceof THREE.Color?f:new THREE.Color;this.vertexColors=f instanceof Array?f:[];this.vertexTangents=[];this.materialIndex=g;this.centroid=new THREE.Vector3};THREE.UV=function(a,b){this.u=a||0;this.v=b||0};
-THREE.UV.prototype={constructor:THREE.UV,set:function(a,b){this.u=a;this.v=b;return this},copy:function(a){this.u=a.u;this.v=a.v;return this},clone:function(){return new THREE.UV(this.u,this.v)}};
-THREE.Geometry=function(){this.id=THREE.GeometryCount++;this.vertices=[];this.colors=[];this.materials=[];this.faces=[];this.faceUvs=[[]];this.faceVertexUvs=[[]];this.morphTargets=[];this.morphColors=[];this.skinWeights=[];this.skinIndices=[];this.boundingSphere=this.boundingBox=null;this.dynamic=this.hasTangents=!1};
-THREE.Geometry.prototype={constructor:THREE.Geometry,applyMatrix:function(a){var b=new THREE.Matrix4;b.extractRotation(a,new THREE.Vector3(1,1,1));for(var c=0,d=this.vertices.length;ce?-1:1,f.vertexTangents[d]=new THREE.Vector4($.x,$.y,$.z,e)}this.hasTangents=!0},computeBoundingBox:function(){if(0c.x)c.x=a.x;if(a.yc.y)c.y=a.y;if(a.zc.z)c.z=a.z}}},computeBoundingSphere:function(){for(var a,b=0,c=0,d=this.vertices.length;cb&&(b=a);this.boundingSphere={radius:b}},mergeVertices:function(){var a={},b=[],c=[],d,e=Math.pow(10,4),f,g;for(f=0,g=this.vertices.length;fthis.points.length-2?f:f+1;c[3]=f>this.points.length-3?f:f+2;l=this.points[c[0]];k=this.points[c[1]];
-n=this.points[c[2]];q=this.points[c[3]];h=g*g;i=g*h;d.x=b(l.x,k.x,n.x,q.x,g,h,i);d.y=b(l.y,k.y,n.y,q.y,g,h,i);d.z=b(l.z,k.z,n.z,q.z,g,h,i);return d};this.getControlPointsArray=function(){var a,b,c=this.points.length,d=[];for(a=0;athis.duration||0>this.time){this.direction*=-1;if(this.time>this.duration)this.time=this.duration,this.directionBackwards=!0;if(0>this.time)this.time=0,this.directionBackwards=!1}}else this.time%=this.duration;a=THREE.Math.clamp(Math.floor(this.time/b),0,this.geometry.morphTargets.length-1);if(a!=this.currentKeyframe)this.morphTargetInfluences[this.lastKeyframe]=
-0,this.morphTargetInfluences[this.currentKeyframe]=1,this.morphTargetInfluences[a]=0,this.lastKeyframe=this.currentKeyframe,this.currentKeyframe=a;b=this.time%b/b;this.directionBackwards&&(b=1-b);this.morphTargetInfluences[this.currentKeyframe]=b;this.morphTargetInfluences[this.lastKeyframe]=1-b};THREE.Ribbon=function(a,b){THREE.Object3D.call(this);this.geometry=a;this.material=b};THREE.Ribbon.prototype=new THREE.Object3D;THREE.Ribbon.prototype.constructor=THREE.Ribbon;
-THREE.LOD=function(){THREE.Object3D.call(this);this.LODs=[]};THREE.LOD.prototype=new THREE.Object3D;THREE.LOD.prototype.constructor=THREE.LOD;THREE.LOD.prototype.supr=THREE.Object3D.prototype;THREE.LOD.prototype.addLevel=function(a,b){void 0===b&&(b=0);for(var b=Math.abs(b),c=0;c=this.LODs[b].visibleAtDistance)this.LODs[b-1].object3D.visible=!1,this.LODs[b].object3D.visible=!0;else break;for(;bs&&m.clearRect(Math.floor(Ba.getX()),Math.floor(Ba.getY()),Math.floor(Ba.getWidth()),Math.floor(Ba.getHeight())),0=h||(h*=g.intensity,d.r+=aa.r*h,d.g+=aa.g*h,d.b+=aa.b*h)):g instanceof THREE.PointLight&&(j=g.matrixWorld.getPosition(),h=c.dot(Ea.sub(j,b).normalize()),0>=h||(h*=0==g.distance?1:1-Math.min(b.distanceTo(j)/g.distance,1),0!=h&&(h*=g.intensity,d.r+=aa.r*h,d.g+=aa.g*h,d.b+=aa.b*h)))}function r(a,f,g){b(g.opacity);c(g.blending);var aa,j,h,i,l,k;if(g instanceof THREE.ParticleBasicMaterial){if(g.map)i=
-g.map.image,l=i.width>>1,k=i.height>>1,g=f.scale.x*o,h=f.scale.y*p,aa=g*l,j=h*k,ja.set(a.x-aa,a.y-j,a.x+aa,a.y+j),ra.intersects(ja)&&(m.save(),m.translate(a.x,a.y),m.rotate(-f.rotation),m.scale(g,-h),m.translate(-l,-k),m.drawImage(i,0,0),m.restore())}else g instanceof THREE.ParticleCanvasMaterial&&(aa=f.scale.x*o,j=f.scale.y*p,ja.set(a.x-aa,a.y-j,a.x+aa,a.y+j),ra.intersects(ja)&&(d(g.color.getContextStyle()),e(g.color.getContextStyle()),m.save(),m.translate(a.x,a.y),m.rotate(-f.rotation),m.scale(aa,
-j),g.program(m),m.restore()))}function s(a,e,f,g){b(g.opacity);c(g.blending);m.beginPath();m.moveTo(a.positionScreen.x,a.positionScreen.y);m.lineTo(e.positionScreen.x,e.positionScreen.y);m.closePath();if(g instanceof THREE.LineBasicMaterial){a=g.linewidth;if(B!=a)m.lineWidth=B=a;a=g.linecap;if(D!=a)m.lineCap=D=a;a=g.linejoin;if(C!=a)m.lineJoin=C=a;d(g.color.getContextStyle());m.stroke();ja.inflate(2*g.linewidth)}}function t(a,d,e,g,h,l,P,O){f.info.render.vertices+=3;f.info.render.faces++;b(O.opacity);
-c(O.blending);Q=a.positionScreen.x;L=a.positionScreen.y;G=d.positionScreen.x;j=d.positionScreen.y;W=e.positionScreen.x;y=e.positionScreen.y;v(Q,L,G,j,W,y);if(O instanceof THREE.MeshBasicMaterial)if(O.map)O.map.mapping instanceof THREE.UVMapping&&(Da=P.uvs[0],Lc(Q,L,G,j,W,y,Da[g].u,Da[g].v,Da[h].u,Da[h].v,Da[l].u,Da[l].v,O.map));else if(O.envMap){if(O.envMap.mapping instanceof THREE.SphericalReflectionMapping)a=k.matrixWorldInverse,Ea.copy(P.vertexNormalsWorld[g]),$a=0.5*(Ea.x*a.n11+Ea.y*a.n12+Ea.z*
-a.n13)+0.5,Ta=0.5*-(Ea.x*a.n21+Ea.y*a.n22+Ea.z*a.n23)+0.5,Ea.copy(P.vertexNormalsWorld[h]),ib=0.5*(Ea.x*a.n11+Ea.y*a.n12+Ea.z*a.n13)+0.5,db=0.5*-(Ea.x*a.n21+Ea.y*a.n22+Ea.z*a.n23)+0.5,Ea.copy(P.vertexNormalsWorld[l]),Wa=0.5*(Ea.x*a.n11+Ea.y*a.n12+Ea.z*a.n13)+0.5,Xa=0.5*-(Ea.x*a.n21+Ea.y*a.n22+Ea.z*a.n23)+0.5,Lc(Q,L,G,j,W,y,$a,Ta,ib,db,Wa,Xa,O.envMap)}else O.wireframe?Fb(O.color,O.wireframeLinewidth,O.wireframeLinecap,O.wireframeLinejoin):Ab(O.color);else if(O instanceof THREE.MeshLambertMaterial)O.map&&
-!O.wireframe&&(O.map.mapping instanceof THREE.UVMapping&&(Da=P.uvs[0],Lc(Q,L,G,j,W,y,Da[g].u,Da[g].v,Da[h].u,Da[h].v,Da[l].u,Da[l].v,O.map)),c(THREE.SubtractiveBlending)),ab?!O.wireframe&&O.shading==THREE.SmoothShading&&3==P.vertexNormalsWorld.length?(ba.r=ca.r=da.r=aa.r,ba.g=ca.g=da.g=aa.g,ba.b=ca.b=da.b=aa.b,n(i,P.v1.positionWorld,P.vertexNormalsWorld[0],ba),n(i,P.v2.positionWorld,P.vertexNormalsWorld[1],ca),n(i,P.v3.positionWorld,P.vertexNormalsWorld[2],da),ba.r=Math.max(0,Math.min(O.color.r*ba.r,
-1)),ba.g=Math.max(0,Math.min(O.color.g*ba.g,1)),ba.b=Math.max(0,Math.min(O.color.b*ba.b,1)),ca.r=Math.max(0,Math.min(O.color.r*ca.r,1)),ca.g=Math.max(0,Math.min(O.color.g*ca.g,1)),ca.b=Math.max(0,Math.min(O.color.b*ca.b,1)),da.r=Math.max(0,Math.min(O.color.r*da.r,1)),da.g=Math.max(0,Math.min(O.color.g*da.g,1)),da.b=Math.max(0,Math.min(O.color.b*da.b,1)),ha.r=0.5*(ca.r+da.r),ha.g=0.5*(ca.g+da.g),ha.b=0.5*(ca.b+da.b),Ja=vc(ba,ca,da,ha),Yb(Q,L,G,j,W,y,0,0,1,0,0,1,Ja)):(V.r=aa.r,V.g=aa.g,V.b=aa.b,n(i,
-P.centroidWorld,P.normalWorld,V),V.r=Math.max(0,Math.min(O.color.r*V.r,1)),V.g=Math.max(0,Math.min(O.color.g*V.g,1)),V.b=Math.max(0,Math.min(O.color.b*V.b,1)),O.wireframe?Fb(V,O.wireframeLinewidth,O.wireframeLinecap,O.wireframeLinejoin):Ab(V)):O.wireframe?Fb(O.color,O.wireframeLinewidth,O.wireframeLinecap,O.wireframeLinejoin):Ab(O.color);else if(O instanceof THREE.MeshDepthMaterial)za=k.near,Aa=k.far,ba.r=ba.g=ba.b=1-Tb(a.positionScreen.z,za,Aa),ca.r=ca.g=ca.b=1-Tb(d.positionScreen.z,za,Aa),da.r=
-da.g=da.b=1-Tb(e.positionScreen.z,za,Aa),ha.r=0.5*(ca.r+da.r),ha.g=0.5*(ca.g+da.g),ha.b=0.5*(ca.b+da.b),Ja=vc(ba,ca,da,ha),Yb(Q,L,G,j,W,y,0,0,1,0,0,1,Ja);else if(O instanceof THREE.MeshNormalMaterial)V.r=Zb(P.normalWorld.x),V.g=Zb(P.normalWorld.y),V.b=Zb(P.normalWorld.z),O.wireframe?Fb(V,O.wireframeLinewidth,O.wireframeLinecap,O.wireframeLinejoin):Ab(V)}function u(a,d,e,g,h,O,l,P,m){f.info.render.vertices+=4;f.info.render.faces++;b(P.opacity);c(P.blending);if(P.map||P.envMap)t(a,d,g,0,1,3,l,P,m),
-t(h,e,O,1,2,3,l,P,m);else if(Q=a.positionScreen.x,L=a.positionScreen.y,G=d.positionScreen.x,j=d.positionScreen.y,W=e.positionScreen.x,y=e.positionScreen.y,E=g.positionScreen.x,S=g.positionScreen.y,T=h.positionScreen.x,R=h.positionScreen.y,ka=O.positionScreen.x,ga=O.positionScreen.y,P instanceof THREE.MeshBasicMaterial)x(Q,L,G,j,W,y,E,S),P.wireframe?Fb(P.color,P.wireframeLinewidth,P.wireframeLinecap,P.wireframeLinejoin):Ab(P.color);else if(P instanceof THREE.MeshLambertMaterial)ab?!P.wireframe&&P.shading==
-THREE.SmoothShading&&4==l.vertexNormalsWorld.length?(ba.r=ca.r=da.r=ha.r=aa.r,ba.g=ca.g=da.g=ha.g=aa.g,ba.b=ca.b=da.b=ha.b=aa.b,n(i,l.v1.positionWorld,l.vertexNormalsWorld[0],ba),n(i,l.v2.positionWorld,l.vertexNormalsWorld[1],ca),n(i,l.v4.positionWorld,l.vertexNormalsWorld[3],da),n(i,l.v3.positionWorld,l.vertexNormalsWorld[2],ha),ba.r=Math.max(0,Math.min(P.color.r*ba.r,1)),ba.g=Math.max(0,Math.min(P.color.g*ba.g,1)),ba.b=Math.max(0,Math.min(P.color.b*ba.b,1)),ca.r=Math.max(0,Math.min(P.color.r*ca.r,
-1)),ca.g=Math.max(0,Math.min(P.color.g*ca.g,1)),ca.b=Math.max(0,Math.min(P.color.b*ca.b,1)),da.r=Math.max(0,Math.min(P.color.r*da.r,1)),da.g=Math.max(0,Math.min(P.color.g*da.g,1)),da.b=Math.max(0,Math.min(P.color.b*da.b,1)),ha.r=Math.max(0,Math.min(P.color.r*ha.r,1)),ha.g=Math.max(0,Math.min(P.color.g*ha.g,1)),ha.b=Math.max(0,Math.min(P.color.b*ha.b,1)),Ja=vc(ba,ca,da,ha),v(Q,L,G,j,E,S),Yb(Q,L,G,j,E,S,0,0,1,0,0,1,Ja),v(T,R,W,y,ka,ga),Yb(T,R,W,y,ka,ga,1,0,1,1,0,1,Ja)):(V.r=aa.r,V.g=aa.g,V.b=aa.b,n(i,
-l.centroidWorld,l.normalWorld,V),V.r=Math.max(0,Math.min(P.color.r*V.r,1)),V.g=Math.max(0,Math.min(P.color.g*V.g,1)),V.b=Math.max(0,Math.min(P.color.b*V.b,1)),x(Q,L,G,j,W,y,E,S),P.wireframe?Fb(V,P.wireframeLinewidth,P.wireframeLinecap,P.wireframeLinejoin):Ab(V)):(x(Q,L,G,j,W,y,E,S),P.wireframe?Fb(P.color,P.wireframeLinewidth,P.wireframeLinecap,P.wireframeLinejoin):Ab(P.color));else if(P instanceof THREE.MeshNormalMaterial)V.r=Zb(l.normalWorld.x),V.g=Zb(l.normalWorld.y),V.b=Zb(l.normalWorld.z),x(Q,
-L,G,j,W,y,E,S),P.wireframe?Fb(V,P.wireframeLinewidth,P.wireframeLinecap,P.wireframeLinejoin):Ab(V);else if(P instanceof THREE.MeshDepthMaterial)za=k.near,Aa=k.far,ba.r=ba.g=ba.b=1-Tb(a.positionScreen.z,za,Aa),ca.r=ca.g=ca.b=1-Tb(d.positionScreen.z,za,Aa),da.r=da.g=da.b=1-Tb(g.positionScreen.z,za,Aa),ha.r=ha.g=ha.b=1-Tb(e.positionScreen.z,za,Aa),Ja=vc(ba,ca,da,ha),v(Q,L,G,j,E,S),Yb(Q,L,G,j,E,S,0,0,1,0,0,1,Ja),v(T,R,W,y,ka,ga),Yb(T,R,W,y,ka,ga,1,0,1,1,0,1,Ja)}function v(a,b,c,d,e,f){m.beginPath();m.moveTo(a,
-b);m.lineTo(c,d);m.lineTo(e,f);m.lineTo(a,b);m.closePath()}function x(a,b,c,d,e,f,g,aa){m.beginPath();m.moveTo(a,b);m.lineTo(c,d);m.lineTo(e,f);m.lineTo(g,aa);m.lineTo(a,b);m.closePath()}function Fb(a,b,c,e){if(B!=b)m.lineWidth=B=b;if(D!=c)m.lineCap=D=c;if(C!=e)m.lineJoin=C=e;d(a.getContextStyle());m.stroke();ja.inflate(2*b)}function Ab(a){e(a.getContextStyle());m.fill()}function Lc(a,b,c,d,f,g,aa,j,h,P,i,l,O){if(0!=O.image.width){if(!0==O.needsUpdate||void 0==Qa[O.id]){var k=O.wrapS==THREE.RepeatWrapping,
-n=O.wrapT==THREE.RepeatWrapping;Qa[O.id]=m.createPattern(O.image,k&&n?"repeat":k&&!n?"repeat-x":!k&&n?"repeat-y":"no-repeat");O.needsUpdate=!1}e(Qa[O.id]);var k=O.offset.x/O.repeat.x,n=O.offset.y/O.repeat.y,q=O.image.width*O.repeat.x,Ea=O.image.height*O.repeat.y,aa=(aa+k)*q,j=(j+n)*Ea,c=c-a,d=d-b,f=f-a,g=g-b,h=(h+k)*q-aa,P=(P+n)*Ea-j,i=(i+k)*q-aa,l=(l+n)*Ea-j,k=h*l-i*P;if(0==k){if(void 0===la[O.id])b=document.createElement("canvas"),b.width=O.image.width,b.height=O.image.height,b=b.getContext("2d"),
-b.drawImage(O.image,0,0),la[O.id]=b.getImageData(0,0,O.image.width,O.image.height).data;b=la[O.id];aa=4*(Math.floor(aa)+Math.floor(j)*O.image.width);V.setRGB(b[aa]/255,b[aa+1]/255,b[aa+2]/255);Ab(V)}else k=1/k,O=(l*c-P*f)*k,P=(l*d-P*g)*k,c=(h*f-i*c)*k,d=(h*g-i*d)*k,a=a-O*aa-c*j,aa=b-P*aa-d*j,m.save(),m.transform(O,P,c,d,a,aa),m.fill(),m.restore()}}function Yb(a,b,c,d,e,f,g,aa,j,h,P,i,O){var l,k;l=O.width-1;k=O.height-1;g*=l;aa*=k;c-=a;d-=b;e-=a;f-=b;j=j*l-g;h=h*k-aa;P=P*l-g;i=i*k-aa;k=1/(j*i-P*h);
-l=(i*c-h*e)*k;h=(i*d-h*f)*k;c=(j*e-P*c)*k;d=(j*f-P*d)*k;a=a-l*g-c*aa;b=b-h*g-d*aa;m.save();m.transform(l,h,c,d,a,b);m.clip();m.drawImage(O,0,0);m.restore()}function vc(a,b,c,d){var e=~~(255*a.r),f=~~(255*a.g),a=~~(255*a.b),g=~~(255*b.r),aa=~~(255*b.g),b=~~(255*b.b),j=~~(255*c.r),h=~~(255*c.g),c=~~(255*c.b),P=~~(255*d.r),i=~~(255*d.g),d=~~(255*d.b);eb[0]=0>e?0:255f?0:255a?0:255g?0:255aa?0:255b?0:255j?0:255h?0:255c?0:255P?0:255i?0:255d?0:255a?0:1=l||(l*=g.intensity,d.r+=h.r*l,d.g+=h.g*l,d.b+=h.b*l)):g instanceof THREE.PointLight&&(i=g.matrixWorld.getPosition(),l=c.dot(A.sub(i,b).normalize()),0>=l||(l*=0==g.distance?1:1-Math.min(b.distanceTo(i)/g.distance,1),0!=l&&(l*=g.intensity,d.r+=h.r*l,d.g+=h.g*l,d.b+=h.b*l)))}function b(a){null==H[a]&&(H[a]=document.createElementNS("http://www.w3.org/2000/svg",
-"path"),0==Q&&H[a].setAttribute("shape-rendering","crispEdges"));return H[a]}function c(a){a=0.5*(a+1);return 0>a?0:1 0\nuniform vec3 directionalLightColor[ MAX_DIR_LIGHTS ];\nuniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];\n#endif\n#if MAX_POINT_LIGHTS > 0\nuniform vec3 pointLightColor[ MAX_POINT_LIGHTS ];\nuniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];\nuniform float pointLightDistance[ MAX_POINT_LIGHTS ];\n#endif\n#ifdef WRAP_AROUND\nuniform vec3 wrapRGB;\n#endif",
-lights_lambert_vertex:"vLightWeighting = vec3( 0.0 );\n#if MAX_DIR_LIGHTS > 0\nfor( int i = 0; i < MAX_DIR_LIGHTS; i ++ ) {\nvec4 lDirection = viewMatrix * vec4( directionalLightDirection[ i ], 0.0 );\nvec3 dirVector = normalize( lDirection.xyz );\n#ifdef WRAP_AROUND\nfloat directionalLightWeightingFull = max( dot( transformedNormal, dirVector ), 0.0 );\nfloat directionalLightWeightingHalf = max( 0.5 * dot( transformedNormal, dirVector ) + 0.5, 0.0 );\nvec3 directionalLightWeighting = mix( vec3( directionalLightWeightingFull ), vec3( directionalLightWeightingHalf ), wrapRGB );\n#else\nfloat directionalLightWeighting = max( dot( transformedNormal, dirVector ), 0.0 );\n#endif\nvLightWeighting += directionalLightColor[ i ] * directionalLightWeighting;\n}\n#endif\n#if MAX_POINT_LIGHTS > 0\nfor( int i = 0; i < MAX_POINT_LIGHTS; i ++ ) {\nvec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );\nvec3 lVector = lPosition.xyz - mvPosition.xyz;\nfloat lDistance = 1.0;\nif ( pointLightDistance[ i ] > 0.0 )\nlDistance = 1.0 - min( ( length( lVector ) / pointLightDistance[ i ] ), 1.0 );\nlVector = normalize( lVector );\n#ifdef WRAP_AROUND\nfloat pointLightWeightingFull = max( dot( transformedNormal, lVector ), 0.0 );\nfloat pointLightWeightingHalf = max( 0.5 * dot( transformedNormal, lVector ) + 0.5, 0.0 );\nvec3 pointLightWeighting = mix( vec3 ( pointLightWeightingFull ), vec3( pointLightWeightingHalf ), wrapRGB );\n#else\nfloat pointLightWeighting = max( dot( transformedNormal, lVector ), 0.0 );\n#endif\nvLightWeighting += pointLightColor[ i ] * pointLightWeighting * lDistance;\n}\n#endif\nvLightWeighting = vLightWeighting * diffuse + ambient * ambientLightColor;",
-lights_phong_pars_vertex:"#if MAX_POINT_LIGHTS > 0\n#ifndef PHONG_PER_PIXEL\nuniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];\nuniform float pointLightDistance[ MAX_POINT_LIGHTS ];\nvarying vec4 vPointLight[ MAX_POINT_LIGHTS ];\n#endif\n#endif",lights_phong_vertex:"#if MAX_POINT_LIGHTS > 0\n#ifndef PHONG_PER_PIXEL\nfor( int i = 0; i < MAX_POINT_LIGHTS; i ++ ) {\nvec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );\nvec3 lVector = lPosition.xyz - mvPosition.xyz;\nfloat lDistance = 1.0;\nif ( pointLightDistance[ i ] > 0.0 )\nlDistance = 1.0 - min( ( length( lVector ) / pointLightDistance[ i ] ), 1.0 );\nvPointLight[ i ] = vec4( lVector, lDistance );\n}\n#endif\n#endif",
-lights_phong_pars_fragment:"uniform vec3 ambientLightColor;\n#if MAX_DIR_LIGHTS > 0\nuniform vec3 directionalLightColor[ MAX_DIR_LIGHTS ];\nuniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];\n#endif\n#if MAX_POINT_LIGHTS > 0\nuniform vec3 pointLightColor[ MAX_POINT_LIGHTS ];\n#ifdef PHONG_PER_PIXEL\nuniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];\nuniform float pointLightDistance[ MAX_POINT_LIGHTS ];\n#else\nvarying vec4 vPointLight[ MAX_POINT_LIGHTS ];\n#endif\n#endif\n#ifdef WRAP_AROUND\nuniform vec3 wrapRGB;\n#endif\nvarying vec3 vViewPosition;\nvarying vec3 vNormal;",
-lights_phong_fragment:"vec3 normal = normalize( vNormal );\nvec3 viewPosition = normalize( vViewPosition );\n#if MAX_POINT_LIGHTS > 0\nvec3 pointDiffuse = vec3( 0.0 );\nvec3 pointSpecular = vec3( 0.0 );\nfor ( int i = 0; i < MAX_POINT_LIGHTS; i ++ ) {\n#ifdef PHONG_PER_PIXEL\nvec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );\nvec3 lVector = lPosition.xyz + vViewPosition.xyz;\nfloat lDistance = 1.0;\nif ( pointLightDistance[ i ] > 0.0 )\nlDistance = 1.0 - min( ( length( lVector ) / pointLightDistance[ i ] ), 1.0 );\nlVector = normalize( lVector );\n#else\nvec3 lVector = normalize( vPointLight[ i ].xyz );\nfloat lDistance = vPointLight[ i ].w;\n#endif\n#ifdef WRAP_AROUND\nfloat pointDiffuseWeightFull = max( dot( normal, lVector ), 0.0 );\nfloat pointDiffuseWeightHalf = max( 0.5 * dot( normal, lVector ) + 0.5, 0.0 );\nvec3 pointDiffuseWeight = mix( vec3 ( pointDiffuseWeightFull ), vec3( pointDiffuseWeightHalf ), wrapRGB );\n#else\nfloat pointDiffuseWeight = max( dot( normal, lVector ), 0.0 );\n#endif\npointDiffuse += diffuse * pointLightColor[ i ] * pointDiffuseWeight * lDistance;\nvec3 pointHalfVector = normalize( lVector + viewPosition );\nfloat pointDotNormalHalf = max( dot( normal, pointHalfVector ), 0.0 );\nfloat pointSpecularWeight = max( pow( pointDotNormalHalf, shininess ), 0.0 );\n#ifdef PHYSICALLY_BASED_SHADING\nvec3 schlick = specular + vec3( 1.0 - specular ) * pow( dot( lVector, pointHalfVector ), 5.0 );\npointSpecular += schlick * pointLightColor[ i ] * pointSpecularWeight * pointDiffuseWeight * lDistance;\n#else\npointSpecular += specular * pointLightColor[ i ] * pointSpecularWeight * pointDiffuseWeight * lDistance;\n#endif\n}\n#endif\n#if MAX_DIR_LIGHTS > 0\nvec3 dirDiffuse = vec3( 0.0 );\nvec3 dirSpecular = vec3( 0.0 );\nfor( int i = 0; i < MAX_DIR_LIGHTS; i ++ ) {\nvec4 lDirection = viewMatrix * vec4( directionalLightDirection[ i ], 0.0 );\nvec3 dirVector = normalize( lDirection.xyz );\n#ifdef WRAP_AROUND\nfloat dirDiffuseWeightFull = max( dot( normal, dirVector ), 0.0 );\nfloat dirDiffuseWeightHalf = max( 0.5 * dot( normal, dirVector ) + 0.5, 0.0 );\nvec3 dirDiffuseWeight = mix( vec3( dirDiffuseWeightFull ), vec3( dirDiffuseWeightHalf ), wrapRGB );\n#else\nfloat dirDiffuseWeight = max( dot( normal, dirVector ), 0.0 );\n#endif\ndirDiffuse += diffuse * directionalLightColor[ i ] * dirDiffuseWeight;\nvec3 dirHalfVector = normalize( dirVector + viewPosition );\nfloat dirDotNormalHalf = max( dot( normal, dirHalfVector ), 0.0 );\nfloat dirSpecularWeight = max( pow( dirDotNormalHalf, shininess ), 0.0 );\n#ifdef PHYSICALLY_BASED_SHADING\nvec3 schlick = specular + vec3( 1.0 - specular ) * pow( dot( dirVector, dirHalfVector ), 5.0 );\ndirSpecular += schlick * directionalLightColor[ i ] * dirSpecularWeight * dirDiffuseWeight;\n#else\ndirSpecular += specular * directionalLightColor[ i ] * dirSpecularWeight * dirDiffuseWeight;\n#endif\n}\n#endif\nvec3 totalDiffuse = vec3( 0.0 );\nvec3 totalSpecular = vec3( 0.0 );\n#if MAX_DIR_LIGHTS > 0\ntotalDiffuse += dirDiffuse;\ntotalSpecular += dirSpecular;\n#endif\n#if MAX_POINT_LIGHTS > 0\ntotalDiffuse += pointDiffuse;\ntotalSpecular += pointSpecular;\n#endif\n#ifdef METAL\ngl_FragColor.xyz = gl_FragColor.xyz * ( totalDiffuse + ambientLightColor * ambient + totalSpecular );\n#else\ngl_FragColor.xyz = gl_FragColor.xyz * ( totalDiffuse + ambientLightColor * ambient ) + totalSpecular;\n#endif",
-color_pars_fragment:"#ifdef USE_COLOR\nvarying vec3 vColor;\n#endif",color_fragment:"#ifdef USE_COLOR\ngl_FragColor = gl_FragColor * vec4( vColor, opacity );\n#endif",color_pars_vertex:"#ifdef USE_COLOR\nvarying vec3 vColor;\n#endif",color_vertex:"#ifdef USE_COLOR\n#ifdef GAMMA_INPUT\nvColor = color * color;\n#else\nvColor = color;\n#endif\n#endif",skinning_pars_vertex:"#ifdef USE_SKINNING\nuniform mat4 boneGlobalMatrices[ MAX_BONES ];\n#endif",skinning_vertex:"#ifdef USE_SKINNING\ngl_Position = ( boneGlobalMatrices[ int( skinIndex.x ) ] * skinVertexA ) * skinWeight.x;\ngl_Position += ( boneGlobalMatrices[ int( skinIndex.y ) ] * skinVertexB ) * skinWeight.y;\ngl_Position = projectionMatrix * viewMatrix * objectMatrix * gl_Position;\n#endif",
-morphtarget_pars_vertex:"#ifdef USE_MORPHTARGETS\nuniform float morphTargetInfluences[ 8 ];\n#endif",morphtarget_vertex:"#ifdef USE_MORPHTARGETS\nvec3 morphed = vec3( 0.0, 0.0, 0.0 );\nmorphed += ( morphTarget0 - position ) * morphTargetInfluences[ 0 ];\nmorphed += ( morphTarget1 - position ) * morphTargetInfluences[ 1 ];\nmorphed += ( morphTarget2 - position ) * morphTargetInfluences[ 2 ];\nmorphed += ( morphTarget3 - position ) * morphTargetInfluences[ 3 ];\nmorphed += ( morphTarget4 - position ) * morphTargetInfluences[ 4 ];\nmorphed += ( morphTarget5 - position ) * morphTargetInfluences[ 5 ];\nmorphed += ( morphTarget6 - position ) * morphTargetInfluences[ 6 ];\nmorphed += ( morphTarget7 - position ) * morphTargetInfluences[ 7 ];\nmorphed += position;\ngl_Position = projectionMatrix * modelViewMatrix * vec4( morphed, 1.0 );\n#endif",
-default_vertex:"#ifndef USE_MORPHTARGETS\n#ifndef USE_SKINNING\ngl_Position = projectionMatrix * mvPosition;\n#endif\n#endif",shadowmap_pars_fragment:"#ifdef USE_SHADOWMAP\nuniform sampler2D shadowMap[ MAX_SHADOWS ];\nuniform vec2 shadowMapSize[ MAX_SHADOWS ];\nuniform float shadowDarkness[ MAX_SHADOWS ];\nuniform float shadowBias[ MAX_SHADOWS ];\nvarying vec4 vShadowCoord[ MAX_SHADOWS ];\nfloat unpackDepth( const in vec4 rgba_depth ) {\nconst vec4 bit_shift = vec4( 1.0 / ( 256.0 * 256.0 * 256.0 ), 1.0 / ( 256.0 * 256.0 ), 1.0 / 256.0, 1.0 );\nfloat depth = dot( rgba_depth, bit_shift );\nreturn depth;\n}\n#endif",
-shadowmap_fragment:"#ifdef USE_SHADOWMAP\nvec3 shadowColor = vec3( 1.0 );\nfloat fDepth;\nfor( int i = 0; i < MAX_SHADOWS; i ++ ) {\nvec3 shadowCoord = vShadowCoord[ i ].xyz / vShadowCoord[ i ].w;\nif ( shadowCoord.z <= 1.0 ) {\nshadowCoord.z += shadowBias[ i ];\nbvec4 shadowTest = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\nif ( all( shadowTest ) ) {\n#ifdef SHADOWMAP_SOFT\nfloat shadow = 0.0;\nconst float shadowDelta = 1.0 / 9.0;\nfloat xPixelOffset = 1.0 / shadowMapSize[ i ].x;\nfloat yPixelOffset = 1.0 / shadowMapSize[ i ].y;\nfloat dx0 = -1.25 * xPixelOffset;\nfloat dy0 = -1.25 * yPixelOffset;\nfloat dx1 = 1.25 * xPixelOffset;\nfloat dy1 = 1.25 * yPixelOffset;\nfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, dy0 ) ) );\nif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\nfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( 0.0, dy0 ) ) );\nif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\nfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, dy0 ) ) );\nif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\nfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, 0.0 ) ) );\nif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\nfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy ) );\nif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\nfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, 0.0 ) ) );\nif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\nfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, dy1 ) ) );\nif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\nfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( 0.0, dy1 ) ) );\nif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\nfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, dy1 ) ) );\nif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\nshadowColor = shadowColor * vec3( ( 1.0 - shadowDarkness[ i ] * shadow ) );\n#else\nvec4 rgbaDepth = texture2D( shadowMap[ i ], shadowCoord.xy );\nfloat fDepth = unpackDepth( rgbaDepth );\nif ( fDepth < shadowCoord.z )\nshadowColor = shadowColor * vec3( 1.0 - shadowDarkness[ i ] );\n#endif\n}\n}\n}\n#ifdef GAMMA_OUTPUT\nshadowColor *= shadowColor;\n#endif\ngl_FragColor.xyz = gl_FragColor.xyz * shadowColor;\n#endif",
-shadowmap_pars_vertex:"#ifdef USE_SHADOWMAP\nvarying vec4 vShadowCoord[ MAX_SHADOWS ];\nuniform mat4 shadowMatrix[ MAX_SHADOWS ];\n#endif",shadowmap_vertex:"#ifdef USE_SHADOWMAP\nfor( int i = 0; i < MAX_SHADOWS; i ++ ) {\n#ifdef USE_MORPHTARGETS\nvShadowCoord[ i ] = shadowMatrix[ i ] * objectMatrix * vec4( morphed, 1.0 );\n#else\nvShadowCoord[ i ] = shadowMatrix[ i ] * objectMatrix * vec4( position, 1.0 );\n#endif\n}\n#endif",alphatest_fragment:"#ifdef ALPHATEST\nif ( gl_FragColor.a < ALPHATEST ) discard;\n#endif",
-linear_to_gamma_fragment:"#ifdef GAMMA_OUTPUT\ngl_FragColor.xyz = sqrt( gl_FragColor.xyz );\n#endif"};
-THREE.UniformsUtils={merge:function(a){var b,c,d,e={};for(b=0;bn;n++){m=k;r=n;if(G.autoScaleCubemaps){if(s=h.image[n],E=ab,!(s.width<=E&&s.height<=E))v=Math.max(s.width,s.height),t=Math.floor(s.width*
-E/v),E=Math.floor(s.height*E/v),v=document.createElement("canvas"),v.width=t,v.height=E,v.getContext("2d").drawImage(s,0,0,s.width,s.height,0,0,t,E),s=v}else s=h.image[n];m[r]=s}n=k[0];m=0===(n.width&n.width-1)&&0===(n.height&n.height-1);r=B(h.format);s=B(h.type);u(j.TEXTURE_CUBE_MAP,h,m);for(n=0;6>n;n++)j.texImage2D(j.TEXTURE_CUBE_MAP_POSITIVE_X+n,0,r,r,s,k[n]);h.generateMipmaps&&m&&j.generateMipmap(j.TEXTURE_CUBE_MAP);h.needsUpdate=!1;if(h.onUpdated)h.onUpdated()}else j.activeTexture(j.TEXTURE0+
-k),j.bindTexture(j.TEXTURE_CUBE_MAP,h.image.__webglTextureCube)}else n instanceof THREE.WebGLRenderTargetCube?(h=n,j.activeTexture(j.TEXTURE0+k),j.bindTexture(j.TEXTURE_CUBE_MAP,h.__webglTexture)):G.setTexture(n,k)}else if("tv"===m){if(!h._array){h._array=[];for(m=0,r=h.texture.length;m
-l&&(k=n,l=h[k]);j.bindBuffer(j.ARRAY_BUFFER,e.__webglMorphTargetsBuffers[k]);j.vertexAttribPointer(c["morphTarget"+g],3,j.FLOAT,!1,0,0);f.__webglMorphTargetInfluences[g]=l;i[k]=1;l=-1;g++}}null!==d.program.uniforms.morphTargetInfluences&&j.uniform1fv(d.program.uniforms.morphTargetInfluences,f.__webglMorphTargetInfluences)}if(a){if(e.__webglCustomAttributesList)for(g=0,h=e.__webglCustomAttributesList.length;gma;ma++)Ob=ac[ma],hb[Pa]=Ob.x,hb[Pa+1]=Ob.y,hb[Pa+2]=Ob.z,Pa+=3;else for(ma=0;3>ma;ma++)hb[Pa]=Hb.x,hb[Pa+1]=Hb.y,hb[Pa+2]=Hb.z,Pa+=3;for(F=0,U=oa.length;Fma;ma++)Ob=ac[ma],hb[Pa]=Ob.x,hb[Pa+1]=Ob.y,hb[Pa+
-2]=Ob.z,Pa+=3;else for(ma=0;4>ma;ma++)hb[Pa]=Hb.x,hb[Pa+1]=Hb.y,hb[Pa+2]=Hb.z,Pa+=3;j.bindBuffer(j.ARRAY_BUFFER,ea.__webglNormalBuffer);j.bufferData(j.ARRAY_BUFFER,hb,bb)}if(ad&&Rc&&Xc){for(F=0,U=na.length;Fma;ma++)dc=bc[ma],oc[Cb]=dc.u,oc[Cb+1]=dc.v,Cb+=2;for(F=0,U=oa.length;Fma;ma++)dc=bc[ma],oc[Cb]=dc.u,oc[Cb+1]=dc.v,Cb+=2;0ma;ma++)ec=cc[ma],pc[Db]=ec.u,pc[Db+1]=ec.v,Db+=2;for(F=0,U=oa.length;Fma;ma++)ec=cc[ma],pc[Db]=ec.u,pc[Db+1]=ec.v,Db+=2;0c;c++){a.__webglFramebuffer[c]=j.createFramebuffer();a.__webglRenderbuffer[c]=j.createRenderbuffer();j.texImage2D(j.TEXTURE_CUBE_MAP_POSITIVE_X+c,0,d,a.width,a.height,0,d,e,null);var f=a,g=j.TEXTURE_CUBE_MAP_POSITIVE_X+c;j.bindFramebuffer(j.FRAMEBUFFER,a.__webglFramebuffer[c]);j.framebufferTexture2D(j.FRAMEBUFFER,j.COLOR_ATTACHMENT0,g,f.__webglTexture,0);v(a.__webglRenderbuffer[c],a)}}else a.__webglFramebuffer=
-j.createFramebuffer(),a.__webglRenderbuffer=j.createRenderbuffer(),j.bindTexture(j.TEXTURE_2D,a.__webglTexture),u(j.TEXTURE_2D,a,c),j.texImage2D(j.TEXTURE_2D,0,d,a.width,a.height,0,d,e,null),d=j.TEXTURE_2D,j.bindFramebuffer(j.FRAMEBUFFER,a.__webglFramebuffer),j.framebufferTexture2D(j.FRAMEBUFFER,j.COLOR_ATTACHMENT0,d,a.__webglTexture,0),v(a.__webglRenderbuffer,a);b?j.bindTexture(j.TEXTURE_CUBE_MAP,null):j.bindTexture(j.TEXTURE_2D,null);j.bindRenderbuffer(j.RENDERBUFFER,null);j.bindFramebuffer(j.FRAMEBUFFER,
-null)}a?(b=b?a.__webglFramebuffer[a.activeCubeFace]:a.__webglFramebuffer,d=a.width,a=a.height,c=e=0):(b=null,d=Da,a=$a,e=Aa,c=Ja);b!==E&&(j.bindFramebuffer(j.FRAMEBUFFER,b),j.viewport(e,c,d,a),E=b);Ta=d;ib=a};this.shadowMapPlugin=new THREE.ShadowMapPlugin;this.addPrePlugin(this.shadowMapPlugin);this.addPostPlugin(new THREE.SpritePlugin);this.addPostPlugin(new THREE.LensFlarePlugin)};
-THREE.WebGLRenderTarget=function(a,b,c){this.width=a;this.height=b;c=c||{};this.wrapS=void 0!==c.wrapS?c.wrapS:THREE.ClampToEdgeWrapping;this.wrapT=void 0!==c.wrapT?c.wrapT:THREE.ClampToEdgeWrapping;this.magFilter=void 0!==c.magFilter?c.magFilter:THREE.LinearFilter;this.minFilter=void 0!==c.minFilter?c.minFilter:THREE.LinearMipMapLinearFilter;this.offset=new THREE.Vector2(0,0);this.repeat=new THREE.Vector2(1,1);this.format=void 0!==c.format?c.format:THREE.RGBAFormat;this.type=void 0!==c.type?c.type:
-THREE.UnsignedByteType;this.depthBuffer=void 0!==c.depthBuffer?c.depthBuffer:!0;this.stencilBuffer=void 0!==c.stencilBuffer?c.stencilBuffer:!0;this.generateMipmaps=!0};
-THREE.WebGLRenderTarget.prototype.clone=function(){var a=new THREE.WebGLRenderTarget(this.width,this.height);a.wrapS=this.wrapS;a.wrapT=this.wrapT;a.magFilter=this.magFilter;a.minFilter=this.minFilter;a.offset.copy(this.offset);a.repeat.copy(this.repeat);a.format=this.format;a.type=this.type;a.depthBuffer=this.depthBuffer;a.stencilBuffer=this.stencilBuffer;return a};THREE.WebGLRenderTargetCube=function(a,b,c){THREE.WebGLRenderTarget.call(this,a,b,c);this.activeCubeFace=0};
-THREE.WebGLRenderTargetCube.prototype=new THREE.WebGLRenderTarget;THREE.WebGLRenderTargetCube.prototype.constructor=THREE.WebGLRenderTargetCube;THREE.RenderableVertex=function(){this.positionWorld=new THREE.Vector3;this.positionScreen=new THREE.Vector4;this.visible=!0};THREE.RenderableVertex.prototype.copy=function(a){this.positionWorld.copy(a.positionWorld);this.positionScreen.copy(a.positionScreen)};
-THREE.RenderableFace3=function(){this.v1=new THREE.RenderableVertex;this.v2=new THREE.RenderableVertex;this.v3=new THREE.RenderableVertex;this.centroidWorld=new THREE.Vector3;this.centroidScreen=new THREE.Vector3;this.normalWorld=new THREE.Vector3;this.vertexNormalsWorld=[new THREE.Vector3,new THREE.Vector3,new THREE.Vector3];this.faceMaterial=this.material=null;this.uvs=[[]];this.z=null};
-THREE.RenderableFace4=function(){this.v1=new THREE.RenderableVertex;this.v2=new THREE.RenderableVertex;this.v3=new THREE.RenderableVertex;this.v4=new THREE.RenderableVertex;this.centroidWorld=new THREE.Vector3;this.centroidScreen=new THREE.Vector3;this.normalWorld=new THREE.Vector3;this.vertexNormalsWorld=[new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3];this.faceMaterial=this.material=null;this.uvs=[[]];this.z=null};THREE.RenderableObject=function(){this.z=this.object=null};
-THREE.RenderableParticle=function(){this.rotation=this.z=this.y=this.x=null;this.scale=new THREE.Vector2;this.material=null};THREE.RenderableLine=function(){this.z=null;this.v1=new THREE.RenderableVertex;this.v2=new THREE.RenderableVertex;this.material=null};
-THREE.ColorUtils={adjustHSV:function(a,b,c,d){var e=THREE.ColorUtils.__hsv;THREE.ColorUtils.rgbToHsv(a,e);e.h=THREE.Math.clamp(e.h+b,0,1);e.s=THREE.Math.clamp(e.s+c,0,1);e.v=THREE.Math.clamp(e.v+d,0,1);a.setHSV(e.h,e.s,e.v)},rgbToHsv:function(a,b){var c=a.r,d=a.g,e=a.b,f=Math.max(Math.max(c,d),e),g=Math.min(Math.min(c,d),e);if(g===f)g=c=0;else{var h=f-g,g=h/f,c=(c===f?(d-e)/h:d===f?2+(e-c)/h:4+(c-d)/h)/6;0>c&&(c+=1);1a?b(c,e-1):l[e]n-1?e-1:n-1,o=(n+1)%e,p=0>k-1?d-1:k-1,m=(k+1)%d,r=[],s=[0,0,h[4*(n*d+k)]/255*b];r.push([-1,0,h[4*(n*d+p)]/255*b]);r.push([-1,-1,h[4*(q*d+p)]/255*b]);r.push([0,-1,h[4*(q*d+k)]/255*b]);r.push([1,
--1,h[4*(q*d+m)]/255*b]);r.push([1,0,h[4*(n*d+m)]/255*b]);r.push([1,1,h[4*(o*d+m)]/255*b]);r.push([0,1,h[4*(o*d+k)]/255*b]);r.push([-1,1,h[4*(o*d+p)]/255*b]);q=[];p=r.length;for(o=0;o 0\nuniform vec3 directionalLightColor[ MAX_DIR_LIGHTS ];\nuniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];\n#endif\n#if MAX_POINT_LIGHTS > 0\nuniform vec3 pointLightColor[ MAX_POINT_LIGHTS ];\nvarying vec4 vPointLight[ MAX_POINT_LIGHTS ];\n#endif\n#ifdef WRAP_AROUND\nuniform vec3 wrapRGB;\n#endif\nvarying vec3 vViewPosition;",
-THREE.ShaderChunk.shadowmap_pars_fragment,THREE.ShaderChunk.fog_pars_fragment,"void main() {\ngl_FragColor = vec4( vec3( 1.0 ), uOpacity );\nvec3 specularTex = vec3( 1.0 );\nvec3 normalTex = texture2D( tNormal, vUv ).xyz * 2.0 - 1.0;\nnormalTex.xy *= uNormalScale;\nnormalTex = normalize( normalTex );\nif( enableDiffuse ) {\n#ifdef GAMMA_INPUT\nvec4 texelColor = texture2D( tDiffuse, vUv );\ntexelColor.xyz *= texelColor.xyz;\ngl_FragColor = gl_FragColor * texelColor;\n#else\ngl_FragColor = gl_FragColor * texture2D( tDiffuse, vUv );\n#endif\n}\nif( enableAO ) {\n#ifdef GAMMA_INPUT\nvec4 aoColor = texture2D( tAO, vUv );\naoColor.xyz *= aoColor.xyz;\ngl_FragColor.xyz = gl_FragColor.xyz * aoColor.xyz;\n#else\ngl_FragColor.xyz = gl_FragColor.xyz * texture2D( tAO, vUv ).xyz;\n#endif\n}\nif( enableSpecular )\nspecularTex = texture2D( tSpecular, vUv ).xyz;\nmat3 tsb = mat3( normalize( vTangent ), normalize( vBinormal ), normalize( vNormal ) );\nvec3 finalNormal = tsb * normalTex;\nvec3 normal = normalize( finalNormal );\nvec3 viewPosition = normalize( vViewPosition );\n#if MAX_POINT_LIGHTS > 0\nvec3 pointDiffuse = vec3( 0.0 );\nvec3 pointSpecular = vec3( 0.0 );\nfor ( int i = 0; i < MAX_POINT_LIGHTS; i ++ ) {\nvec3 pointVector = normalize( vPointLight[ i ].xyz );\nfloat pointDistance = vPointLight[ i ].w;\n#ifdef WRAP_AROUND\nfloat pointDiffuseWeightFull = max( dot( normal, pointVector ), 0.0 );\nfloat pointDiffuseWeightHalf = max( 0.5 * dot( normal, pointVector ) + 0.5, 0.0 );\nvec3 pointDiffuseWeight = mix( vec3 ( pointDiffuseWeightFull ), vec3( pointDiffuseWeightHalf ), wrapRGB );\n#else\nfloat pointDiffuseWeight = max( dot( normal, pointVector ), 0.0 );\n#endif\npointDiffuse += pointDistance * pointLightColor[ i ] * uDiffuseColor * pointDiffuseWeight;\nvec3 pointHalfVector = normalize( pointVector + viewPosition );\nfloat pointDotNormalHalf = max( dot( normal, pointHalfVector ), 0.0 );\nfloat pointSpecularWeight = specularTex.r * max( pow( pointDotNormalHalf, uShininess ), 0.0 );\npointSpecular += pointDistance * pointLightColor[ i ] * uSpecularColor * pointSpecularWeight * pointDiffuseWeight;\n}\n#endif\n#if MAX_DIR_LIGHTS > 0\nvec3 dirDiffuse = vec3( 0.0 );\nvec3 dirSpecular = vec3( 0.0 );\nfor( int i = 0; i < MAX_DIR_LIGHTS; i++ ) {\nvec4 lDirection = viewMatrix * vec4( directionalLightDirection[ i ], 0.0 );\nvec3 dirVector = normalize( lDirection.xyz );\n#ifdef WRAP_AROUND\nfloat directionalLightWeightingFull = max( dot( normal, dirVector ), 0.0 );\nfloat directionalLightWeightingHalf = max( 0.5 * dot( normal, dirVector ) + 0.5, 0.0 );\nvec3 dirDiffuseWeight = mix( vec3( directionalLightWeightingFull ), vec3( directionalLightWeightingHalf ), wrapRGB );\n#else\nfloat dirDiffuseWeight = max( dot( normal, dirVector ), 0.0 );\n#endif\ndirDiffuse += directionalLightColor[ i ] * uDiffuseColor * dirDiffuseWeight;\nvec3 dirHalfVector = normalize( dirVector + viewPosition );\nfloat dirDotNormalHalf = max( dot( normal, dirHalfVector ), 0.0 );\nfloat dirSpecularWeight = specularTex.r * max( pow( dirDotNormalHalf, uShininess ), 0.0 );\ndirSpecular += directionalLightColor[ i ] * uSpecularColor * dirSpecularWeight * dirDiffuseWeight;\n}\n#endif\nvec3 totalDiffuse = vec3( 0.0 );\nvec3 totalSpecular = vec3( 0.0 );\n#if MAX_DIR_LIGHTS > 0\ntotalDiffuse += dirDiffuse;\ntotalSpecular += dirSpecular;\n#endif\n#if MAX_POINT_LIGHTS > 0\ntotalDiffuse += pointDiffuse;\ntotalSpecular += pointSpecular;\n#endif\ngl_FragColor.xyz = gl_FragColor.xyz * ( totalDiffuse + ambientLightColor * uAmbientColor) + totalSpecular;\nif ( enableReflection ) {\nvec3 wPos = cameraPosition - vViewPosition;\nvec3 vReflect = reflect( normalize( wPos ), normal );\nvec4 cubeColor = textureCube( tCube, vec3( -vReflect.x, vReflect.yz ) );\n#ifdef GAMMA_INPUT\ncubeColor.xyz *= cubeColor.xyz;\n#endif\ngl_FragColor.xyz = mix( gl_FragColor.xyz, cubeColor.xyz, specularTex.r * uReflectivity );\n}",
-THREE.ShaderChunk.shadowmap_fragment,THREE.ShaderChunk.linear_to_gamma_fragment,THREE.ShaderChunk.fog_fragment,"}"].join("\n"),vertexShader:["attribute vec4 tangent;\nuniform vec2 uOffset;\nuniform vec2 uRepeat;\n#ifdef VERTEX_TEXTURES\nuniform sampler2D tDisplacement;\nuniform float uDisplacementScale;\nuniform float uDisplacementBias;\n#endif\nvarying vec3 vTangent;\nvarying vec3 vBinormal;\nvarying vec3 vNormal;\nvarying vec2 vUv;\n#if MAX_POINT_LIGHTS > 0\nuniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];\nuniform float pointLightDistance[ MAX_POINT_LIGHTS ];\nvarying vec4 vPointLight[ MAX_POINT_LIGHTS ];\n#endif\nvarying vec3 vViewPosition;",
-THREE.ShaderChunk.shadowmap_pars_vertex,"void main() {\nvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\nvViewPosition = -mvPosition.xyz;\nvNormal = normalMatrix * normal;\nvTangent = normalMatrix * tangent.xyz;\nvBinormal = cross( vNormal, vTangent ) * tangent.w;\nvUv = uv * uRepeat + uOffset;\n#if MAX_POINT_LIGHTS > 0\nfor( int i = 0; i < MAX_POINT_LIGHTS; i++ ) {\nvec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );\nvec3 lVector = lPosition.xyz - mvPosition.xyz;\nfloat lDistance = 1.0;\nif ( pointLightDistance[ i ] > 0.0 )\nlDistance = 1.0 - min( ( length( lVector ) / pointLightDistance[ i ] ), 1.0 );\nlVector = normalize( lVector );\nvPointLight[ i ] = vec4( lVector, lDistance );\n}\n#endif\n#ifdef VERTEX_TEXTURES\nvec3 dv = texture2D( tDisplacement, uv ).xyz;\nfloat df = uDisplacementScale * dv.x + uDisplacementBias;\nvec4 displacedPosition = vec4( normalize( vNormal.xyz ) * df, 0.0 ) + mvPosition;\ngl_Position = projectionMatrix * displacedPosition;\n#else\ngl_Position = projectionMatrix * mvPosition;\n#endif",
-THREE.ShaderChunk.shadowmap_vertex,"}"].join("\n")},cube:{uniforms:{tCube:{type:"t",value:1,texture:null},tFlip:{type:"f",value:-1}},vertexShader:"varying vec3 vViewPosition;\nvoid main() {\nvec4 mPosition = objectMatrix * vec4( position, 1.0 );\nvViewPosition = cameraPosition - mPosition.xyz;\ngl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}",fragmentShader:"uniform samplerCube tCube;\nuniform float tFlip;\nvarying vec3 vViewPosition;\nvoid main() {\nvec3 wPos = cameraPosition - vViewPosition;\ngl_FragColor = textureCube( tCube, vec3( tFlip * wPos.x, wPos.yz ) );\n}"}}};
-THREE.BufferGeometry=function(){this.id=THREE.GeometryCount++;this.vertexColorArray=this.vertexUvArray=this.vertexNormalArray=this.vertexPositionArray=this.vertexIndexArray=this.vertexColorBuffer=this.vertexUvBuffer=this.vertexNormalBuffer=this.vertexPositionBuffer=this.vertexIndexBuffer=null;this.dynamic=!1;this.boundingSphere=this.boundingBox=null;this.morphTargets=[]};THREE.BufferGeometry.prototype={constructor:THREE.BufferGeometry,computeBoundingBox:function(){},computeBoundingSphere:function(){}};
-THREE.Curve=function(){};THREE.Curve.prototype.getPoint=function(){console.log("Warning, getPoint() not implemented!");return null};THREE.Curve.prototype.getPointAt=function(a){return this.getPoint(this.getUtoTmapping(a))};THREE.Curve.prototype.getPoints=function(a){a||(a=5);var b,c=[];for(b=0;b<=a;b++)c.push(this.getPoint(b/a));return c};THREE.Curve.prototype.getSpacedPoints=function(a){a||(a=5);var b,c=[];for(b=0;b<=a;b++)c.push(this.getPointAt(b/a));return c};
-THREE.Curve.prototype.getLength=function(){var a=this.getLengths();return a[a.length-1]};THREE.Curve.prototype.getLengths=function(a){a||(a=200);if(this.cacheArcLengths&&this.cacheArcLengths.length==a+1)return this.cacheArcLengths;var b=[],c,d=this.getPoint(0),e,f=0;b.push(0);for(e=1;e<=a;e++)c=this.getPoint(e/a),f+=c.distanceTo(d),b.push(f),d=c;return this.cacheArcLengths=b};
-THREE.Curve.prototype.getUtoTmapping=function(a,b){var c=this.getLengths(),d=0,e=c.length,f;f=b?b:a*c[e-1];for(var g=0,h=e-1,i;g<=h;)if(d=Math.floor(g+(h-g)/2),i=c[d]-f,0>i)g=d+1;else if(0b&&(b=0);1d.length-2?a:a+1;c[3]=a>d.length-3?a:a+2;b.x=THREE.Curve.Utils.interpolate(d[c[0]].x,d[c[1]].x,d[c[2]].x,d[c[3]].x,e);b.y=THREE.Curve.Utils.interpolate(d[c[0]].y,d[c[1]].y,d[c[2]].y,d[c[3]].y,e);return b};THREE.ArcCurve=function(a,b,c,d,e,f){this.aX=a;this.aY=b;this.aRadius=c;this.aStartAngle=d;this.aEndAngle=e;this.aClockwise=f};
-THREE.ArcCurve.prototype=new THREE.Curve;THREE.ArcCurve.prototype.constructor=THREE.ArcCurve;THREE.ArcCurve.prototype.getPoint=function(a){var b=this.aEndAngle-this.aStartAngle;this.aClockwise||(a=1-a);b=this.aStartAngle+a*b;a=this.aX+this.aRadius*Math.cos(b);b=this.aY+this.aRadius*Math.sin(b);return new THREE.Vector2(a,b)};
-THREE.Curve.Utils={tangentQuadraticBezier:function(a,b,c,d){return 2*(1-a)*(c-b)+2*a*(d-c)},tangentCubicBezier:function(a,b,c,d,e){return-3*b*(1-a)*(1-a)+3*c*(1-a)*(1-a)-6*a*c*(1-a)+6*a*d*(1-a)-3*a*a*d+3*a*a*e},tangentSpline:function(a){return 6*a*a-6*a+(3*a*a-4*a+1)+(-6*a*a+6*a)+(3*a*a-2*a)},interpolate:function(a,b,c,d,e){var a=0.5*(c-a),d=0.5*(d-b),f=e*e;return(2*b-2*c+a+d)*e*f+(-3*b+3*c-2*a-d)*f+a*e+b}};
-THREE.Curve.create=function(a,b){a.prototype=new THREE.Curve;a.prototype.constructor=a;a.prototype.getPoint=b;return a};THREE.LineCurve3=THREE.Curve.create(function(a,b){this.v1=a;this.v2=b},function(a){var b=new THREE.Vector3;b.sub(this.v2,this.v1);b.multiplyScalar(a);b.addSelf(this.v1);return b});
-THREE.QuadraticBezierCurve3=THREE.Curve.create(function(a,b,c){this.v0=a;this.v1=b;this.v2=c},function(a){var b,c;b=THREE.Shape.Utils.b2(a,this.v0.x,this.v1.x,this.v2.x);c=THREE.Shape.Utils.b2(a,this.v0.y,this.v1.y,this.v2.y);a=THREE.Shape.Utils.b2(a,this.v0.z,this.v1.z,this.v2.z);return new THREE.Vector3(b,c,a)});
-THREE.CubicBezierCurve3=THREE.Curve.create(function(a,b,c,d){this.v0=a;this.v1=b;this.v2=c;this.v3=d},function(a){var b,c;b=THREE.Shape.Utils.b3(a,this.v0.x,this.v1.x,this.v2.x,this.v3.x);c=THREE.Shape.Utils.b3(a,this.v0.y,this.v1.y,this.v2.y,this.v3.y);a=THREE.Shape.Utils.b3(a,this.v0.z,this.v1.z,this.v2.z,this.v3.z);return new THREE.Vector3(b,c,a)});
-THREE.SplineCurve3=THREE.Curve.create(function(a){this.points=void 0==a?[]:a},function(a){var b=new THREE.Vector3,c=[],d=this.points,e;e=(d.length-1)*a;a=Math.floor(e);e-=a;c[0]=0==a?a:a-1;c[1]=a;c[2]=a>d.length-2?a:a+1;c[3]=a>d.length-3?a:a+2;b.x=THREE.Curve.Utils.interpolate(d[c[0]].x,d[c[1]].x,d[c[2]].x,d[c[3]].x,e);b.y=THREE.Curve.Utils.interpolate(d[c[0]].y,d[c[1]].y,d[c[2]].y,d[c[3]].y,e);b.z=THREE.Curve.Utils.interpolate(d[c[0]].z,d[c[1]].z,d[c[2]].z,d[c[3]].z,e);return b});
-THREE.CurvePath=function(){this.curves=[];this.bends=[];this.autoClose=!1};THREE.CurvePath.prototype=new THREE.Curve;THREE.CurvePath.prototype.constructor=THREE.CurvePath;THREE.CurvePath.prototype.add=function(a){this.curves.push(a)};THREE.CurvePath.prototype.checkConnection=function(){};THREE.CurvePath.prototype.closePath=function(){var a=this.curves[0].getPoint(0),b=this.curves[this.curves.length-1].getPoint(1);a.equals(b)||this.curves.push(new THREE.LineCurve(b,a))};
-THREE.CurvePath.prototype.getPoint=function(a){for(var b=a*this.getLength(),c=this.getCurveLengths(),a=0;a=b)return b=c[a]-b,a=this.curves[a],b=1-b/a.getLength(),a.getPointAt(b);a++}return null};THREE.CurvePath.prototype.getLength=function(){var a=this.getCurveLengths();return a[a.length-1]};
-THREE.CurvePath.prototype.getCurveLengths=function(){if(this.cacheLengths&&this.cacheLengths.length==this.curves.length)return this.cacheLengths;var a=[],b=0,c,d=this.curves.length;for(c=0;cb)b=f.x;else if(f.xc)c=f.y;else if(f.y
-h&&(h+=c.length);h%=c.length;0>g&&(g+=l.length);g%=l.length;e=0<=h-1?h-1:c.length-1;f=0<=g-1?g-1:l.length-1;m=[l[g],c[h],c[e]];m=THREE.FontUtils.Triangulate.area(m);r=[l[g],l[f],c[h]];r=THREE.FontUtils.Triangulate.area(r);n+q>m+r&&(h=o,g=k,0>h&&(h+=c.length),h%=c.length,0>g&&(g+=l.length),g%=l.length,e=0<=h-1?h-1:c.length-1,f=0<=g-1?g-1:l.length-1);n=c.slice(0,h);q=c.slice(h);o=l.slice(g);k=l.slice(0,g);f=[l[g],l[f],c[h]];p.push([l[g],c[h],c[e]]);p.push(f);c=n.concat(o).concat(k).concat(q)}return{shape:c,
-isolatedPts:p,allpoints:d}},triangulateShape:function(a,b){var c=THREE.Shape.Utils.removeHoles(a,b),d=c.allpoints,e=c.isolatedPts,c=THREE.FontUtils.Triangulate(c.shape,!1),f,g,h,i,l={};for(f=0,g=d.length;fd;d++)i=h[d].x+":"+h[d].y,i=l[i],void 0!==i&&(h[d]=i)}for(f=0,g=e.length;fd;d++)i=h[d].x+":"+h[d].y,i=l[i],void 0!==i&&(h[d]=i)}return c.concat(e)},
-isClockWise:function(a){return 0>THREE.FontUtils.Triangulate.area(a)},b2p0:function(a,b){var c=1-a;return c*c*b},b2p1:function(a,b){return 2*(1-a)*a*b},b2p2:function(a,b){return a*a*b},b2:function(a,b,c,d){return this.b2p0(a,b)+this.b2p1(a,c)+this.b2p2(a,d)},b3p0:function(a,b){var c=1-a;return c*c*c*b},b3p1:function(a,b){var c=1-a;return 3*c*c*a*b},b3p2:function(a,b){return 3*(1-a)*a*a*b},b3p3:function(a,b){return a*a*a*b},b3:function(a,b,c,d,e){return this.b3p0(a,b)+this.b3p1(a,c)+this.b3p2(a,d)+
-this.b3p3(a,e)}};THREE.TextPath=function(a,b){THREE.Path.call(this);this.parameters=b||{};this.set(a)};THREE.TextPath.prototype.set=function(a,b){b=b||this.parameters;this.text=a;var c=void 0!==b.curveSegments?b.curveSegments:4,d=void 0!==b.font?b.font:"helvetiker",e=void 0!==b.weight?b.weight:"normal",f=void 0!==b.style?b.style:"normal";THREE.FontUtils.size=void 0!==b.size?b.size:100;THREE.FontUtils.divisions=c;THREE.FontUtils.face=d;THREE.FontUtils.weight=e;THREE.FontUtils.style=f};
-THREE.TextPath.prototype.toShapes=function(){for(var a=THREE.FontUtils.drawText(this.text).paths,b=[],c=0,d=a.length;ca.hierarchy[c].keys[d].time)a.hierarchy[c].keys[d].time=
-0;if(void 0!==a.hierarchy[c].keys[d].rot&&!(a.hierarchy[c].keys[d].rot instanceof THREE.Quaternion)){var h=a.hierarchy[c].keys[d].rot;a.hierarchy[c].keys[d].rot=new THREE.Quaternion(h[0],h[1],h[2],h[3])}}if(a.hierarchy[c].keys.length&&void 0!==a.hierarchy[c].keys[0].morphTargets){h={};for(d=0;dm;m++){c=b[m];g=i.prevKey[c];h=i.nextKey[c];if(h.time<=q){if(nd||1d?0:1;if("pos"===c)if(c=a.position,this.interpolationType===THREE.AnimationHandler.LINEAR)c.x=e[0]+(f[0]-e[0])*d,c.y=e[1]+(f[1]-e[1])*d,c.z=e[2]+(f[2]-e[2])*d;else{if(this.interpolationType===THREE.AnimationHandler.CATMULLROM||this.interpolationType===THREE.AnimationHandler.CATMULLROM_FORWARD)if(this.points[0]=
-this.getPrevKeyWith("pos",o,g.index-1).pos,this.points[1]=e,this.points[2]=f,this.points[3]=this.getNextKeyWith("pos",o,h.index+1).pos,d=0.33*d+0.33,e=this.interpolateCatmullRom(this.points,d),c.x=e[0],c.y=e[1],c.z=e[2],this.interpolationType===THREE.AnimationHandler.CATMULLROM_FORWARD)d=this.interpolateCatmullRom(this.points,1.01*d),this.target.set(d[0],d[1],d[2]),this.target.subSelf(c),this.target.y=0,this.target.normalize(),d=Math.atan2(this.target.x,this.target.z),a.rotation.set(0,d,0)}else if("rot"===
-c)THREE.Quaternion.slerp(e,f,a.quaternion,d);else if("scl"===c)c=a.scale,c.x=e[0]+(f[0]-e[0])*d,c.y=e[1]+(f[1]-e[1])*d,c.z=e[2]+(f[2]-e[2])*d}}if(this.JITCompile&&void 0===k[0][l]){this.hierarchy[0].updateMatrixWorld(!0);for(o=0;oa.length-2?f:f+1;c[3]=f>a.length-3?f:f+2;f=a[c[0]];h=a[c[1]];i=a[c[2]];l=a[c[3]];c=e*e;g=e*c;d[0]=this.interpolate(f[0],h[0],i[0],l[0],e,c,g);d[1]=this.interpolate(f[1],h[1],i[1],l[1],e,c,g);d[2]=this.interpolate(f[2],h[2],i[2],l[2],e,c,g);return d};
-THREE.Animation.prototype.interpolate=function(a,b,c,d,e,f,g){a=0.5*(c-a);d=0.5*(d-b);return(2*(b-c)+a+d)*g+(-3*(b-c)-2*a-d)*f+a*e+b};THREE.Animation.prototype.getNextKeyWith=function(a,b,c){for(var d=this.data.hierarchy[b].keys,c=this.interpolationType===THREE.AnimationHandler.CATMULLROM||this.interpolationType===THREE.AnimationHandler.CATMULLROM_FORWARD?c(a*=2)?0.5*a*a:-0.5*(--a*(a-2)-1)}function d(a,b){return function(){b.apply(a,arguments)}}function e(a,b,c,d){var e={name:c,fps:0.6,length:d,hierarchy:[]},f,g=b.getControlPointsArray(),h=b.getLength(),r=g.length,s=0;f=r-1;b={parent:-1,keys:[]};b.keys[0]={time:0,pos:g[0],rot:[0,0,0,1],scl:[1,1,1]};b.keys[f]={time:d,pos:g[f],rot:[0,0,0,1],scl:[1,1,1]};for(f=1;fi)?1:i));this.object.translateX(b*l);this.object.translateY(b*k);g&&(this.roll+=this.rollSpeed*a*h);if(this.forward.y>this.constrainVertical[1])this.forward.y=this.constrainVertical[1],this.forward.normalize();else if(this.forward.yc.maxDistance*c.maxDistance&&c.object.position.setLength(c.maxDistance),f.lengthSq()o;o++)this.materials.push(g)}o=0;r=1;p=2;s=
-3;m=4;t=5}else this.materials=[];this.sides={px:!0,nx:!0,py:!0,ny:!0,pz:!0,nz:!0};if(void 0!=h)for(var u in h)void 0!==this.sides[u]&&(this.sides[u]=h[u]);this.sides.px&&i("z","y",-1,-1,c,b,k,o);this.sides.nx&&i("z","y",1,-1,c,b,-k,r);this.sides.py&&i("x","z",1,1,a,c,n,p);this.sides.ny&&i("x","z",1,-1,a,c,-n,s);this.sides.pz&&i("x","y",1,-1,a,b,q,m);this.sides.nz&&i("x","y",-1,-1,a,b,-q,t);this.computeCentroids();this.mergeVertices()};THREE.CubeGeometry.prototype=new THREE.Geometry;
-THREE.CubeGeometry.prototype.constructor=THREE.CubeGeometry;
-THREE.CylinderGeometry=function(a,b,c,d,e,f){THREE.Geometry.call(this);var a=void 0!==a?a:20,b=void 0!==b?b:20,c=void 0!==c?c:100,g=c/2,d=d||8,e=e||1,h,i,l=[],k=[];for(i=0;i<=e;i++){var n=[],q=[],o=i/e,p=o*(b-a)+a;for(h=0;h<=d;h++){var m=h/d,r=p*Math.sin(2*m*Math.PI),s=-o*c+g,t=p*Math.cos(2*m*Math.PI);this.vertices.push(new THREE.Vertex(new THREE.Vector3(r,s,t)));n.push(this.vertices.length-1);q.push(new THREE.UV(m,o))}l.push(n);k.push(q)}for(i=0;ig?(b=Math.atan2(b.y-a.y,b.x-a.x),a=Math.atan2(c.y-a.y,c.x-a.x),b>a&&(a+=2*Math.PI),c=(b+a)/2,a=-Math.cos(c),c=-Math.sin(c),new THREE.Vector2(a,c)):d.multiplyScalar(g).addSelf(h).subSelf(a).clone()}function e(a){for(j=a.length;0<=--j;){y=j;E=j-1;0>E&&(E=a.length-1);for(var b=
-0,c=o+2*k,b=0;bh?(h=new THREE.Face3(a.index,b.index,c.index,[a.position,b.position,c.position]),h.centroid.addSelf(a.position).addSelf(b.position).addSelf(c.position).divideScalar(3),h.normal=h.centroid.clone().normalize(),
-g.faces.push(h),h=Math.atan2(h.centroid.z,-h.centroid.x),g.faceVertexUvs[0].push([f(a.uv,a.position,h),f(b.uv,b.position,h),f(c.uv,c.position,h)])):(h-=1,d(a,e(a,b),e(a,c),h),d(e(a,b),b,e(b,c),h),d(e(a,c),e(b,c),c,h),d(e(a,b),e(b,c),e(a,c),h))}function e(a,b){h[a.index]||(h[a.index]=[]);h[b.index]||(h[b.index]=[]);var d=h[a.index][b.index];void 0===d&&(h[a.index][b.index]=h[b.index][a.index]=d=c((new THREE.Vector3).add(a.position,b.position).divideScalar(2)));return d}function f(a,b,c){0>c&&1===a.u&&
-(a=new THREE.UV(a.u-1,a.v));0===b.x&&0===b.z&&(a=new THREE.UV(c/2/Math.PI+0.5,a.v));return a}THREE.Geometry.call(this);var b=b||0,g=this;c(new THREE.Vector3(1,0,0));c(new THREE.Vector3(-1,0,0));c(new THREE.Vector3(0,1,0));c(new THREE.Vector3(0,-1,0));c(new THREE.Vector3(0,0,1));c(new THREE.Vector3(0,0,-1));var h=[],i=this.vertices;d(i[0],i[2],i[4],b);d(i[0],i[4],i[3],b);d(i[0],i[3],i[5],b);d(i[0],i[5],i[2],b);d(i[1],i[2],i[5],b);d(i[1],i[5],i[3],b);d(i[1],i[3],i[4],b);d(i[1],i[4],i[2],b);this.boundingSphere=
-{radius:a}};THREE.OctahedronGeometry.prototype=new THREE.Geometry;THREE.OctahedronGeometry.prototype.constructor=THREE.OctahedronGeometry;
-THREE.PlaneGeometry=function(a,b,c,d){THREE.Geometry.call(this);for(var e=a/2,f=b/2,c=c||1,d=d||1,g=c+1,h=d+1,i=a/c,l=b/d,k=new THREE.Vector3(0,0,1),a=0;ae)return null;var f=[],g=[],h=[],i,l,k;if(0=n--){console.log("Warning, unable to triangulate polygon!");break}i=l;e<=i&&(i=0);l=i+1;e<=l&&(l=0);k=l+1;e<=k&&(k=0);var q;a:{q=a;var o=i,p=l,m=k,r=e,s=g,t=void 0,u=void 0,v=void 0,x=void 0,B=void 0,
-D=void 0,C=void 0,A=void 0,H=void 0,u=q[s[o]].x,v=q[s[o]].y,x=q[s[p]].x,B=q[s[p]].y,D=q[s[m]].x,C=q[s[m]].y;if(1.0E-10>(x-u)*(C-v)-(B-v)*(D-u))q=!1;else{for(t=0;to;o++){n=i[o];k=new THREE.Color;k.setRGB(0,0,0);for(var p=0;pu.length&&(n[o]=!0)}for(o in p)if(u=p[o],s=u[0],u=u[1],x=o.split("_"),B=x[0],x=x[1],r=new THREE.Vector3,n[o]?(r.addSelf(h[B].position),r.addSelf(h[x].position),r.multiplyScalar(0.5)):(r.addSelf(l[s]),r.addSelf(l[u]),r.addSelf(h[B].position),r.addSelf(h[x].position),r.multiplyScalar(0.25)),
-k[o]=t+d.length+v,i.push(new THREE.Vertex(r)),v++,g.supportUVs&&0!=q.length)u=new THREE.UV,u.u=q[B].u+q[x].u,u.v=q[B].v+q[x].v,u.u/=2,u.v/=2,q.push(u);var I,N;x=["123","12","2","23"];r=["123","23","3","31"];var A=["123","31","1","12"],H=["1234","12","2","23"],$=["1234","23","3","34"],K=["1234","34","4","41"],Q=["1234","41","1","12"];for(o=0,p=l.length;oa.length?"":a.join("/")+"/"},initMaterials:function(a,b,c){a.materials=[];for(var d=0;da.opacity)l.transparent=a.transparent;if(void 0!==a.depthTest)l.depthTest=a.depthTest;if(void 0!==a.vertexColors)if("face"==a.vertexColors)l.vertexColors=THREE.FaceColors;else if(a.vertexColors)l.vertexColors=
-THREE.VertexColors;if(a.colorDiffuse)l.color=g(a.colorDiffuse);else if(a.DbgColor)l.color=a.DbgColor;if(a.colorSpecular)l.specular=g(a.colorSpecular);if(a.colorAmbient)l.ambient=g(a.colorAmbient);if(a.transparency)l.opacity=a.transparency;if(a.specularCoef)l.shininess=a.specularCoef;a.mapDiffuse&&b&&f(l,"map",a.mapDiffuse,a.mapDiffuseRepeat,a.mapDiffuseOffset,a.mapDiffuseWrap);a.mapLight&&b&&f(l,"lightMap",a.mapLight,a.mapLightRepeat,a.mapLightOffset,a.mapLightWrap);a.mapNormal&&b&&f(l,"normalMap",
-a.mapNormal,a.mapNormalRepeat,a.mapNormalOffset,a.mapNormalWrap);a.mapSpecular&&b&&f(l,"specularMap",a.mapSpecular,a.mapSpecularRepeat,a.mapSpecularOffset,a.mapSpecularWrap);if(a.mapNormal){var i=THREE.ShaderUtils.lib.normal,k=THREE.UniformsUtils.clone(i.uniforms);k.tNormal.texture=l.normalMap;if(a.mapNormalFactor)k.uNormalScale.value=a.mapNormalFactor;if(l.map)k.tDiffuse.texture=l.map,k.enableDiffuse.value=!0;if(l.specularMap)k.tSpecular.texture=l.specularMap,k.enableSpecular.value=!0;if(l.lightMap)k.tAO.texture=
-l.lightMap,k.enableAO.value=!0;k.uDiffuseColor.value.setHex(l.color);k.uSpecularColor.value.setHex(l.specular);k.uAmbientColor.value.setHex(l.ambient);k.uShininess.value=l.shininess;if(void 0!==l.opacity)k.uOpacity.value=l.opacity;l=new THREE.ShaderMaterial({fragmentShader:i.fragmentShader,vertexShader:i.vertexShader,uniforms:k,lights:!0,fog:!0})}else l=new THREE[i](l);if(void 0!==a.DbgName)l.name=a.DbgName;return l}};THREE.BinaryLoader=function(a){THREE.Loader.call(this,a)};
-THREE.BinaryLoader.prototype=new THREE.Loader;THREE.BinaryLoader.prototype.constructor=THREE.BinaryLoader;THREE.BinaryLoader.prototype.supr=THREE.Loader.prototype;
-THREE.BinaryLoader.prototype.load=function(a,b,c,d){if(a instanceof Object)console.warn("DEPRECATED: BinaryLoader( parameters ) is now BinaryLoader( url, callback, texturePath, binaryPath )."),d=a,a=d.model,b=d.callback,c=d.texture_path,d=d.bin_path;var c=c?c:this.extractUrlbase(a),d=d?d:this.extractUrlbase(a),e=this.showProgress?THREE.Loader.prototype.updateProgress:null;this.onLoadStart();this.loadAjaxJSON(this,a,b,c,d,e)};
-THREE.BinaryLoader.prototype.loadAjaxJSON=function(a,b,c,d,e,f){var g=new XMLHttpRequest;g.onreadystatechange=function(){if(4==g.readyState)if(200==g.status||0==g.status)try{var h=JSON.parse(g.responseText);void 0===h.metadata||void 0===h.metadata.formatVersion||3!==h.metadata.formatVersion?console.error("Deprecated file format."):a.loadAjaxBuffers(h,c,e,d,f)}catch(i){console.error(i),console.warn("DEPRECATED: ["+b+"] seems to be using old model format")}else console.error("Couldn't load ["+b+"] ["+
-g.status+"]")};g.open("GET",b,!0);g.overrideMimeType&&g.overrideMimeType("text/plain; charset=x-user-defined");g.setRequestHeader("Content-Type","text/plain");g.send(null)};
-THREE.BinaryLoader.prototype.loadAjaxBuffers=function(a,b,c,d,e){var f=new XMLHttpRequest,g=c+"/"+a.buffers,h=0;f.onreadystatechange=function(){4==f.readyState?200==f.status||0==f.status?THREE.BinaryLoader.prototype.createBinModel(f.response,b,d,a.materials):console.error("Couldn't load ["+g+"] ["+f.status+"]"):3==f.readyState?e&&(0==h&&(h=f.getResponseHeader("Content-Length")),e({total:h,loaded:f.responseText.length})):2==f.readyState&&(h=f.getResponseHeader("Content-Length"))};f.open("GET",g,!0);
-f.responseType="arraybuffer";f.send(null)};
-THREE.BinaryLoader.prototype.createBinModel=function(a,b,c,d){var e=function(b){var c,e,i,l,k,n,q,o,p,m,r,s,t,u,v,x;function B(a){return a%4?4-a%4:0}function D(a,b){return(new Uint8Array(a,b,1))[0]}function C(a,b){return(new Uint32Array(a,b,1))[0]}function A(b,c){var d,e,f,g,h,i,l,k,m=new Uint32Array(a,c,3*b);for(d=0;da.length?"":a.join("/")+"/");if((a=V.evaluate("//dae:asset",V,W,XPathResult.ORDERED_NODE_ITERATOR_TYPE,null).iterateNext())&&a.childNodes)for(e=0;ep)break}if(!s){s=new j(p);t=-1;u=0;for(v=d.length;u=p&&(t=u);p=t;d.splice(-1==p?d.length:p,0,s)}s.addTarget(f,l,g,r)}}else console.log('Could not find transform "'+b.sid+'" in node '+
-this.id)}for(c=0;cthis.set)this.set=0;return this};D.prototype.parse=function(a){this.id=a.getAttribute("id");for(var b=0;bthis.transparency,c;for(c in this)switch(c){case "ambient":case "emission":case "diffuse":case "specular":var d=this[c];if(d instanceof A)if(d.isTexture()){if(this.effect.sampler&&this.effect.surface&&this.effect.sampler.source==this.effect.surface.sid){var e=Qa[this.effect.surface.init_from];if(e)e=THREE.ImageUtils.loadTexture(ib+e.init_from),e.wrapS=d.texOpts.wrapU?THREE.RepeatWrapping:THREE.ClampToEdgeWrapping,
-e.wrapT=d.texOpts.wrapV?THREE.RepeatWrapping:THREE.ClampToEdgeWrapping,e.offset.x=d.texOpts.offsetU,e.offset.y=d.texOpts.offsetV,e.repeat.x=d.texOpts.repeatU,e.repeat.y=d.texOpts.repeatV,a.map=e}}else"diffuse"==c?a.color=d.color.getHex():b||(a[c]=d.color.getHex());break;case "shininess":case "reflectivity":a[c]=this[c];break;case "transparency":if(b)a.transparent=!0,a.opacity=this[c],b=!0}a.shading=Xa;return this.material=new THREE.MeshLambertMaterial(a)};I.prototype.parse=function(a){for(var b=0;b<
-a.childNodes.length;b++){var c=a.childNodes[b];if(1==c.nodeType)switch(c.nodeName){case "init_from":this.init_from=c.textContent;break;case "format":this.format=c.textContent;break;default:console.log("unhandled Surface prop: "+c.nodeName)}}return this};N.prototype.parse=function(a){for(var b=0;bf||1f?0:1;if(h.length)for(var e=[],i=0;ir.parameters.opacity)r.parameters.transparent=!0;if(r.parameters.normalMap){k=THREE.ShaderUtils.lib.normal;a=THREE.UniformsUtils.clone(k.uniforms);m=r.parameters.color;N=r.parameters.specular;c=r.parameters.ambient;Q=r.parameters.shininess;a.tNormal.texture=y.textures[r.parameters.normalMap];if(r.parameters.normalMapFactor)a.uNormalScale.value=
-r.parameters.normalMapFactor;if(r.parameters.map)a.tDiffuse.texture=r.parameters.map,a.enableDiffuse.value=!0;if(r.parameters.lightMap)a.tAO.texture=r.parameters.lightMap,a.enableAO.value=!0;if(r.parameters.specularMap)a.tSpecular.texture=y.textures[r.parameters.specularMap],a.enableSpecular.value=!0;a.uDiffuseColor.value.setHex(m);a.uSpecularColor.value.setHex(N);a.uAmbientColor.value.setHex(c);a.uShininess.value=Q;if(r.parameters.opacity)a.uOpacity.value=r.parameters.opacity;r=new THREE.ShaderMaterial({fragmentShader:k.fragmentShader,
-vertexShader:k.vertexShader,uniforms:a,lights:!0,fog:!0})}else r=new THREE[r.type](r.parameters);y.materials[n]=r}e();i.callbackSync(y);h()};THREE.UTF8Loader=function(){};THREE.UTF8Loader.prototype=new THREE.UTF8Loader;THREE.UTF8Loader.prototype.constructor=THREE.UTF8Loader;
-THREE.UTF8Loader.prototype.load=function(a,b,c){if(a instanceof Object)console.warn("DEPRECATED: UTF8Loader( parameters ) is now UTF8Loader( url, callback, metaData )."),c=a,a=c.model,b=c.callback,c={scale:c.scale,offsetX:c.offsetX,offsetY:c.offsetY,offsetZ:c.offsetZ};var d=new XMLHttpRequest,e=void 0!==c.scale?c.scale:1,f=void 0!==c.offsetX?c.offsetX:0,g=void 0!==c.offsetY?c.offsetY:0,h=void 0!==c.offsetZ?c.offsetZ:0;d.onreadystatechange=function(){4==d.readyState?200==d.status||0==d.status?THREE.UTF8Loader.prototype.createModel(d.responseText,
-b,e,f,g,h):alert("Couldn't load ["+a+"] ["+d.status+"]"):3!=d.readyState&&2==d.readyState&&d.getResponseHeader("Content-Length")};d.open("GET",a,!0);d.send(null)};THREE.UTF8Loader.prototype.decompressMesh=function(a){var b=a.charCodeAt(0);57344<=b&&(b-=2048);b++;for(var c=new Float32Array(8*b),d=1,e=0;8>e;e++){for(var f=0,g=0;g>1^-(h&1));c[8*g+e]=f}d+=b}b=a.length-d;f=new Uint16Array(b);for(e=g=0;e=this.maxCount-3&&h(this)};this.begin=function(){this.count=0;
-this.hasNormal=this.hasPos=!1};this.end=function(a){if(0!==this.count){for(var b=3*this.count;bn&&(n=1);i=Math.floor(i+h);i>this.size-1&&(i=this.size-1);var q=Math.floor(l-h);1>q&&(q=1);l=Math.floor(l+h);l>this.size-1&&(l=this.size-1);var o=Math.floor(k-h);1>o&&(o=1);h=Math.floor(k+h);h>this.size-1&&(h=this.size-
-1);for(var p,m,r,s,t,u,v,k=n;kl&&(o=l);for(e=0;ek&&(p=k);for(f=0;fk&&(p=k);for(g=0;g
=b.getParameter(b.MAX_VERTEX_TEXTURE_IMAGE_UNITS)?(l=!1,k=a(THREE.ShaderFlares.lensFlare)):(l=!0,k=a(THREE.ShaderFlares.lensFlareVertexTexture));n={};q={};n.vertex=b.getAttribLocation(k,"position");n.uv=b.getAttribLocation(k,"uv");q.renderType=b.getUniformLocation(k,"renderType");q.map=b.getUniformLocation(k,"map");q.occlusionMap=b.getUniformLocation(k,"occlusionMap");q.opacity=b.getUniformLocation(k,"opacity");q.color=b.getUniformLocation(k,
-"color");q.scale=b.getUniformLocation(k,"scale");q.rotation=b.getUniformLocation(k,"rotation");q.screenPosition=b.getUniformLocation(k,"screenPosition");o=!1};this.render=function(a,d,e,s){var a=a.__webglFlares,t=a.length;if(t){var u=new THREE.Vector3,v=s/e,x=0.5*e,B=0.5*s,D=16/s,C=new THREE.Vector2(D*v,D),A=new THREE.Vector3(1,1,0),H=new THREE.Vector2(1,1),I=q,D=n;b.useProgram(k);o||(b.enableVertexAttribArray(n.vertex),b.enableVertexAttribArray(n.uv),o=!0);b.uniform1i(I.occlusionMap,0);b.uniform1i(I.map,
-1);b.bindBuffer(b.ARRAY_BUFFER,f);b.vertexAttribPointer(D.vertex,2,b.FLOAT,!1,16,0);b.vertexAttribPointer(D.uv,2,b.FLOAT,!1,16,8);b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,g);b.disable(b.CULL_FACE);b.depthMask(!1);var N,$,K,Q,L;for(N=0;N",
- "contributors": ["Jeena Paradies (http://jeena.net)"],
- "description": "Multiplayer browser jump and run game",
- "version": "0.1.0",
- "homepage": "http://chuck.fuuuuu.de/",
- "repository": {
- "type": "git",
- "url": "https://github.com/logsol/chuck.js"
- },
- "bugs": {
- "url": "https://github.com/logsol/chuck.js/issues",
- "email": "fartman@gmx.de"
- },
- "main": "",
- "dependencies": {
- "socket.io": ">= 0.9.6",
- "node-static": ">= 0.6.0",
- "requirejs": ">= 2.0.2"
- },
- "devDependencies": {},
- "optionalDependencies": {},
- "engines": {
- "node": "*"
- },
- "config": { "port": "1234" },
- "private": true
-}
diff --git a/.tests/require/index.html b/require/index.html
similarity index 100%
rename from .tests/require/index.html
rename to require/index.html
diff --git a/.tests/require/node_modules/.bin/r.js b/require/node_modules/.bin/r.js
similarity index 100%
rename from .tests/require/node_modules/.bin/r.js
rename to require/node_modules/.bin/r.js
diff --git a/.tests/require/node_modules/requirejs/.npmignore b/require/node_modules/requirejs/.npmignore
similarity index 100%
rename from .tests/require/node_modules/requirejs/.npmignore
rename to require/node_modules/requirejs/.npmignore
diff --git a/.tests/require/node_modules/requirejs/bin/r.js b/require/node_modules/requirejs/bin/r.js
similarity index 100%
rename from .tests/require/node_modules/requirejs/bin/r.js
rename to require/node_modules/requirejs/bin/r.js
diff --git a/.tests/require/node_modules/requirejs/package.json b/require/node_modules/requirejs/package.json
similarity index 100%
rename from .tests/require/node_modules/requirejs/package.json
rename to require/node_modules/requirejs/package.json
diff --git a/.tests/require/node_modules/requirejs/require.js b/require/node_modules/requirejs/require.js
similarity index 100%
rename from .tests/require/node_modules/requirejs/require.js
rename to require/node_modules/requirejs/require.js
diff --git a/.tests/require/scripts/Chuck.js b/require/scripts/Chuck.js
similarity index 100%
rename from .tests/require/scripts/Chuck.js
rename to require/scripts/Chuck.js
diff --git a/.tests/require/scripts/client.js b/require/scripts/client.js
similarity index 100%
rename from .tests/require/scripts/client.js
rename to require/scripts/client.js
diff --git a/.tests/require/scripts/server.js b/require/scripts/server.js
similarity index 100%
rename from .tests/require/scripts/server.js
rename to require/scripts/server.js
diff --git a/server.js b/server.js
deleted file mode 100644
index 3be08d8..0000000
--- a/server.js
+++ /dev/null
@@ -1,40 +0,0 @@
-var requirejs = require('requirejs');
-
-var inspector = {};
-
-requirejs.config({
- nodeRequire: require,
- baseUrl: 'lib'
-});
-
-var requirements = [
- "Server/HttpServer",
- "Server/Socket",
- "Server/Coordinator"
-];
-
-requirejs(requirements, function(HttpServer, Socket, Coordinator) {
-
- var options = {
- port: process.env.npm_package_config_port,
- rootDirectory: './',
- caching: false
- };
-
- var coordinator = new Coordinator();
- var httpServer = new HttpServer(options);
- var socket = new Socket(httpServer.getServer(), coordinator);
-
- inspector.coordinator = coordinator;
-});
-
-exports = module.exports = inspector;
-
-/*
-belongs to channel.js
-var chuck;
-requirejs(["Chuck/Chuck"], function(Chuck) {
- Chuck.init();
- chuck = Chuck;
-});
-*/
\ No newline at end of file
diff --git a/static/html/index.html b/static/html/index.html
deleted file mode 100755
index 77e38c4..0000000
--- a/static/html/index.html
+++ /dev/null
@@ -1,33 +0,0 @@
-
-
-
- Chuck
-
-
-
-
-
-
-
-
-
-
diff --git a/static/img/100.gif b/static/img/100.gif
deleted file mode 100755
index c65bc2f..0000000
Binary files a/static/img/100.gif and /dev/null differ
diff --git a/static/img/100.png b/static/img/100.png
deleted file mode 100755
index 707a917..0000000
Binary files a/static/img/100.png and /dev/null differ
diff --git a/.tests/three-test/img/green.png b/three-test/img/green.png
similarity index 100%
rename from .tests/three-test/img/green.png
rename to three-test/img/green.png
diff --git a/.tests/three-test/img/smile.png b/three-test/img/smile.png
similarity index 100%
rename from .tests/three-test/img/smile.png
rename to three-test/img/smile.png
diff --git a/.tests/three-test/index.html b/three-test/index.html
similarity index 100%
rename from .tests/three-test/index.html
rename to three-test/index.html
diff --git a/.tests/three-test/js/Three/Three.min.js b/three-test/js/Three/Three.min.js
similarity index 100%
rename from .tests/three-test/js/Three/Three.min.js
rename to three-test/js/Three/Three.min.js
diff --git a/.tests/three-test/js/Three/ThreeDebug.js b/three-test/js/Three/ThreeDebug.js
similarity index 100%
rename from .tests/three-test/js/Three/ThreeDebug.js
rename to three-test/js/Three/ThreeDebug.js