Created
June 14, 2010 18:30
-
-
Save banthar/438067 to your computer and use it in GitHub Desktop.
hell tetris
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ==UserScript== | |
// @name XKCD Hell playable game | |
// @namespace http://example.com/ | |
// @description Turns XKCD comic #724 into playable game | |
// @include http://xkcd.com/724/ | |
// @version 1.0 | |
// ==/UserScript== | |
/* | |
* Physaxe (http://code.google.com/p/physaxe/) copyright notice: | |
* | |
* Copyright (c) 2008, Nicolas Cannasse | |
* All rights reserved. | |
* Redistribution and use in source and binary forms, with or without | |
* modification, are permitted provided that the following conditions are met: | |
* | |
* - Redistributions of source code must retain the above copyright | |
* notice, this list of conditions and the following disclaimer. | |
* - Redistributions in binary form must reproduce the above copyright | |
* notice, this list of conditions and the following disclaimer in the | |
* documentation and/or other materials provided with the distribution. | |
* | |
* THIS SOFTWARE IS PROVIDED BY THE HAXE PROJECT CONTRIBUTORS "AS IS" AND ANY | |
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | |
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |
* DISCLAIMED. IN NO EVENT SHALL THE HAXE PROJECT CONTRIBUTORS BE LIABLE FOR | |
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | |
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | |
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | |
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH | |
* DAMAGE. | |
*/ | |
/* | |
* HaXe (http://haxe.org/) copyright notice: | |
* | |
* Copyright (c) 2005, The haXe Project Contributors | |
* All rights reserved. | |
* Redistribution and use in source and binary forms, with or without | |
* modification, are permitted provided that the following conditions are met: | |
* | |
* - Redistributions of source code must retain the above copyright | |
* notice, this list of conditions and the following disclaimer. | |
* - Redistributions in binary form must reproduce the above copyright | |
* notice, this list of conditions and the following disclaimer in the | |
* documentation and/or other materials provided with the distribution. | |
* | |
* THIS SOFTWARE IS PROVIDED BY THE HAXE PROJECT CONTRIBUTORS "AS IS" AND ANY | |
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | |
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |
* DISCLAIMED. IN NO EVENT SHALL THE HAXE PROJECT CONTRIBUTORS BE LIABLE FOR | |
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | |
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | |
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | |
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH | |
* DAMAGE. | |
*/ | |
/* | |
This script contains bits from Plotex (http://code.google.com/p/plotex/) Licensed under New BSD License. | |
*/ | |
var images=document.images; | |
for(var i in images) | |
{ | |
if(images[i].src == "http://imgs.xkcd.com/comics/hell.png") | |
{ | |
var image=images[i]; | |
var parent=image.parentNode; | |
var canvas=document.createElement("CANVAS"); | |
canvas.width=417; | |
canvas.height=476; | |
canvas.id="hellCanvas"; | |
canvas.title="Use WSAD"; | |
image.parentNode.replaceChild(canvas,image); | |
} | |
} | |
hellBackground=document.createElement("IMG"); | |
hellBackground.src="data:image/gif;base64,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\ | |
P+B8WbiyyBBR7EGUeapFJ+Nzzfm9zmTvyYJHGXzyySdmflnMS5cudadNm2ao7J9++mn3gQcecEeN\ | |
GuU+8sgj7gsvvGAW58MPP2z+fv75591x48a506dPd8ePH+9OmTLFfeedd9yJEye6kydPdqdOnWqO\ | |
4ZyRI0eaXi1PPPGEO2HCBPP/p556yn3ooYfcIUOGuL1793avvvpqd+DAge6gQYPcm266ycidd97p\ | |
Pvjgg+59991nxrj55pvd66+/3h02bJgZV65hzpw57ooVK9zFixebn6tWrXKXLVvmfvDBB+Y6+J98\ | |
Rr4LzD3zw2fPxIij7Pm8tJjhfvD5X3nlFfN5+N8zzzzj3nbbbe4NN9zg3nXXXeaar7zySvfaa681\ | |
vyM33nijO3jwYPeaa65x77//fnOdH3/8sfmeimHYvHmzEb6zfPf5v/87xefgbzEaiBzL+mTd8TkZ\ | |
k3XD7/IAhwJHuHfMOfdr+fLl5jvAtXDvGGPlypXuRx995L766qtG+KzMI9+PJ5980nxHED4335XZ\ | |
s2e7S5YscSdNmmTu0cKFC93169ebOVizZo3RA1wHv/N5MepcJ69/+OGH5rxnn33WvNfo0aPd22+/\ | |
3b344ovdM844w+3Tp49537feesvMO9/jImOEuFBuPF9AebL0PxEX1lNvFIwKXwCeSFCifKGDKk6+\ | |
1HyB1q5da75AfKEZB2HhcJ8RfmdRyJMeio97z5f+7bffNl82vsx8iVE4LM4rrrjCPfPMM90TTjjB\ | |
bdCggdu0aVP32GOPdStWrGjk0EMPdc866yy3S5cubseOHd0jjzzSrV27tnvaaae5rVu3dk899VS3\ | |
efPmbsOGDd099tjDfIdKlizp7rXXXu5+++3nHnTQQe4hhxxipFGjRu7xxx9v3uvEE090jz76aCNt\ | |
2rQxX/7u3bu7/fv3N9eFErz11lvN9aJMWayycLkH69atM4uL7xvfK5QxCubuu+82X2yUN4sIZcXf\ | |
L7/8sllQr7/+ummmhdK97LLL3G7durnnnXeee9RRR7lVqlRx69WrZ/6Hgr7gggvMZ+baaL7Vo0cP\ | |
83+UPOdzfSjpc8891xyLYkfRXXLJJeZ/jFmtWjVzL0qXLh3Lbpl8d3hQ4Ak9rBIDY8aMydq1MS/M\ | |
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\ | |
439tAu3bSuoxCQAAAABJRU5ErkJggg=="; | |
$estr = function() { return js.Boot.__string_rec(this,''); } | |
StringTools = function() { } | |
StringTools.__name__ = ["StringTools"]; | |
StringTools.urlEncode = function(s) { | |
return encodeURIComponent(s); | |
} | |
StringTools.urlDecode = function(s) { | |
return decodeURIComponent(s.split("+").join(" ")); | |
} | |
StringTools.htmlEscape = function(s) { | |
return s.split("&").join("&").split("<").join("<").split(">").join(">"); | |
} | |
StringTools.htmlUnescape = function(s) { | |
return s.split(">").join(">").split("<").join("<").split("&").join("&"); | |
} | |
StringTools.startsWith = function(s,start) { | |
return (s.length >= start.length && s.substr(0,start.length) == start); | |
} | |
StringTools.endsWith = function(s,end) { | |
var elen = end.length; | |
var slen = s.length; | |
return (slen >= elen && s.substr(slen - elen,elen) == end); | |
} | |
StringTools.isSpace = function(s,pos) { | |
var c = s.charCodeAt(pos); | |
return (c >= 9 && c <= 13) || c == 32; | |
} | |
StringTools.ltrim = function(s) { | |
var l = s.length; | |
var r = 0; | |
while(r < l && StringTools.isSpace(s,r)) { | |
r++; | |
} | |
if(r > 0) return s.substr(r,l - r); | |
else return s; | |
} | |
StringTools.rtrim = function(s) { | |
var l = s.length; | |
var r = 0; | |
while(r < l && StringTools.isSpace(s,(l - r) - 1)) { | |
r++; | |
} | |
if(r > 0) { | |
return s.substr(0,l - r); | |
} | |
else { | |
return s; | |
} | |
} | |
StringTools.trim = function(s) { | |
return StringTools.ltrim(StringTools.rtrim(s)); | |
} | |
StringTools.rpad = function(s,c,l) { | |
var sl = s.length; | |
var cl = c.length; | |
while(sl < l) { | |
if(l - sl < cl) { | |
s += c.substr(0,l - sl); | |
sl = l; | |
} | |
else { | |
s += c; | |
sl += cl; | |
} | |
} | |
return s; | |
} | |
StringTools.lpad = function(s,c,l) { | |
var ns = ""; | |
var sl = s.length; | |
if(sl >= l) return s; | |
var cl = c.length; | |
while(sl < l) { | |
if(l - sl < cl) { | |
ns += c.substr(0,l - sl); | |
sl = l; | |
} | |
else { | |
ns += c; | |
sl += cl; | |
} | |
} | |
return ns + s; | |
} | |
StringTools.replace = function(s,sub,by) { | |
return s.split(sub).join(by); | |
} | |
StringTools.hex = function(n,digits) { | |
var neg = false; | |
if(n < 0) { | |
neg = true; | |
n = -n; | |
} | |
var s = n.toString(16); | |
s = s.toUpperCase(); | |
if(digits != null) while(s.length < digits) s = "0" + s; | |
if(neg) s = "-" + s; | |
return s; | |
} | |
StringTools.prototype.__class__ = StringTools; | |
if(typeof phx=='undefined') phx = {} | |
phx.Allocator = function(p) { if( p === $_ ) return; { | |
null; | |
}} | |
phx.Allocator.__name__ = ["phx","Allocator"]; | |
phx.Allocator.prototype.allocArbiter = function() { | |
return new phx.Arbiter(this); | |
} | |
phx.Allocator.prototype.allocContact = function() { | |
var c = this.contactPool; | |
if(c == null) return new phx.Contact(); | |
else { | |
this.contactPool = c.next; | |
return c; | |
} | |
} | |
phx.Allocator.prototype.allocIsland = function(w) { | |
var i = this.islandPool; | |
if(i == null) return new phx.Island(w); | |
else { | |
this.islandPool = i.allocNext; | |
return i; | |
} | |
} | |
phx.Allocator.prototype.contactPool = null; | |
phx.Allocator.prototype.freeAllContacts = function(c) { | |
while(c != null) { | |
var next = c.next; | |
c.next = this.contactPool; | |
this.contactPool = c; | |
c = next; | |
} | |
} | |
phx.Allocator.prototype.freeArbiter = function(a) { | |
null; | |
} | |
phx.Allocator.prototype.freeContact = function(c) { | |
c.next = this.contactPool; | |
this.contactPool = c; | |
} | |
phx.Allocator.prototype.freeIsland = function(i) { | |
i.bodies.head = null; | |
i.arbiters.head = null; | |
i.joints.head = null; | |
i.sleeping = false; | |
i.allocNext = this.islandPool; | |
this.islandPool = i; | |
} | |
phx.Allocator.prototype.islandPool = null; | |
phx.Allocator.prototype.__class__ = phx.Allocator; | |
phx.Shape = function(type,material) { if( type === $_ ) return; { | |
this.id = phx.Shape.ID++; | |
this.groups = 1; | |
this.type = type; | |
this.material = ((material == null)?phx.Const.DEFAULT_MATERIAL:material); | |
this.area = 0; | |
this.aabb = new phx.col.AABB(0,0,0,0); | |
}} | |
phx.Shape.__name__ = ["phx","Shape"]; | |
phx.Shape.makeBox = function(width,height,px,py,mat) { | |
if(px == null) px = -width / 2; | |
if(py == null) py = -height / 2; | |
return new phx.Polygon([new phx.Vector(0,0),new phx.Vector(0,height),new phx.Vector(width,height),new phx.Vector(width,0)],new phx.Vector(px,py),mat); | |
} | |
phx.Shape.prototype.aabb = null; | |
phx.Shape.prototype.area = null; | |
phx.Shape.prototype.body = null; | |
phx.Shape.prototype.calculateInertia = function() { | |
return 1.; | |
} | |
phx.Shape.prototype.circle = null; | |
phx.Shape.prototype.groups = null; | |
phx.Shape.prototype.id = null; | |
phx.Shape.prototype.material = null; | |
phx.Shape.prototype.offset = null; | |
phx.Shape.prototype.polygon = null; | |
phx.Shape.prototype.segment = null; | |
phx.Shape.prototype.toString = function() { | |
return "Shape#" + this.id; | |
} | |
phx.Shape.prototype.type = null; | |
phx.Shape.prototype.update = function() { | |
null; | |
} | |
phx.Shape.prototype.__class__ = phx.Shape; | |
phx.Circle = function(radius,offset,material) { if( radius === $_ ) return; { | |
phx.Shape.apply(this,[0,material]); | |
this.circle = this; | |
this.offset = new phx.Vector(offset.x,offset.y); | |
this.c = new phx.Vector(offset.x,offset.y); | |
this.r = radius; | |
this.area = Math.PI * (this.r * this.r); | |
this.tC = this.c.clone(); | |
}} | |
phx.Circle.__name__ = ["phx","Circle"]; | |
phx.Circle.__super__ = phx.Shape; | |
for(var k in phx.Shape.prototype ) phx.Circle.prototype[k] = phx.Shape.prototype[k]; | |
phx.Circle.prototype.c = null; | |
phx.Circle.prototype.calculateInertia = function() { | |
return 0.5 * (this.r * this.r) + this.offset.dot(this.offset); | |
} | |
phx.Circle.prototype.r = null; | |
phx.Circle.prototype.tC = null; | |
phx.Circle.prototype.update = function() { | |
this.tC.x = this.body.x + phx.Const.XROT(this.c,this.body); | |
this.tC.y = this.body.y + phx.Const.YROT(this.c,this.body); | |
this.aabb.l = this.tC.x - this.r; | |
this.aabb.r = this.tC.x + this.r; | |
this.aabb.t = this.tC.y - this.r; | |
this.aabb.b = this.tC.y + this.r; | |
} | |
phx.Circle.prototype.__class__ = phx.Circle; | |
Block = function(x,y,a,squares,color) { if( x === $_ ) return; { | |
var center = new phx.Vector(0.0,0.0); | |
{ | |
var _g = 0; | |
while(_g < squares.length) { | |
var s = squares[_g]; | |
++_g; | |
center = new phx.Vector(center.x + s.x,center.y + s.y); | |
} | |
} | |
center = center.mult(1.0 / squares.length); | |
this.squares = []; | |
{ | |
var _g = 0; | |
while(_g < squares.length) { | |
var s = squares[_g]; | |
++_g; | |
this.squares.push(new phx.Vector(s.x - center.x,s.y - center.y)); | |
} | |
} | |
squares = this.squares; | |
this.color = color; | |
this.speed = new phx.Vector(0.0,0.0); | |
this.setSpeed(0.0,0.0); | |
this.body = new phx.Body((x + center.x * Math.cos(a)) + center.y * Math.sin(a),(y + center.x * Math.sin(a)) + center.y * Math.cos(a)); | |
this.body.a = a; | |
{ | |
var _g = 0; | |
while(_g < squares.length) { | |
var t = squares[_g]; | |
++_g; | |
this.body.addShape(phx.Shape.makeBox(28,28,(t.x - 13) - 1,(t.y - 13) - 1,new phx.Material(0.0,1.0,10.0))); | |
} | |
} | |
this.updatePosition(); | |
}} | |
Block.__name__ = ["Block"]; | |
Block.randomBlock = function(x,y) { | |
var types = [[new phx.Vector(0,0),new phx.Vector(1,0),new phx.Vector(0,1),new phx.Vector(1,1)],[new phx.Vector(0,0),new phx.Vector(0,1),new phx.Vector(0,2),new phx.Vector(0,3)],[new phx.Vector(0,0),new phx.Vector(0,1),new phx.Vector(0,2),new phx.Vector(1,2)],[new phx.Vector(1,0),new phx.Vector(1,1),new phx.Vector(1,2),new phx.Vector(0,2)],[new phx.Vector(0,0),new phx.Vector(0,1),new phx.Vector(1,1),new phx.Vector(1,2)],[new phx.Vector(1,0),new phx.Vector(1,1),new phx.Vector(0,1),new phx.Vector(0,2)],[new phx.Vector(1,0),new phx.Vector(1,1),new phx.Vector(0,1),new phx.Vector(1,2)]]; | |
var colors = [2040967,9276813,3903266,11677345,8881183,2066305,9708066]; | |
var type = Std["int"]((types.length) * Math.random()); | |
var squares = []; | |
{ | |
var _g = 0, _g1 = types[type]; | |
while(_g < _g1.length) { | |
var s = _g1[_g]; | |
++_g; | |
squares.push(new phx.Vector(s.x * 26.0,s.y * 26.0)); | |
} | |
} | |
return new Block(x,y,0,squares,colors[type]); | |
} | |
Block.prototype.body = null; | |
Block.prototype.color = null; | |
Block.prototype.draw = function(graphics) { | |
graphics.save(); | |
graphics.translate(this.x,this.y); | |
graphics.rotate(this.body.a); | |
graphics.fillStyle = "#000000"; | |
{ | |
var _g = 0, _g1 = this.squares; | |
while(_g < _g1.length) { | |
var t = _g1[_g]; | |
++_g; | |
graphics.fillRect((t.x - 13) - 2,(t.y - 13) - 2,30,30); | |
} | |
} | |
graphics.fillStyle = "#" + StringTools.hex(this.color,6); | |
{ | |
var _g = 0, _g1 = this.squares; | |
while(_g < _g1.length) { | |
var t = _g1[_g]; | |
++_g; | |
graphics.fillRect((t.x - 13) - 0.5,(t.y - 13) - 0.5,27,27); | |
} | |
} | |
graphics.restore(); | |
} | |
Block.prototype.removeSquare = function(square) { | |
{ | |
var _g1 = 0, _g = this.squares.length; | |
while(_g1 < _g) { | |
var i = _g1++; | |
if(this.squares[i] == square) { | |
this.squares[i] = null; | |
return; | |
} | |
} | |
} | |
throw "no such square"; | |
} | |
Block.prototype.rotate = function(radians) { | |
this.body.a += radians; | |
if(this.body.island != null) this.body.island.sleeping = false; | |
this.updatePosition(); | |
} | |
Block.prototype.setSpeed = function(x,y) { | |
var s = 100.0; | |
if(x != null) { | |
this.speed.x = x * s; | |
} | |
if(y != null) { | |
this.speed.y = (y * 2.0 + 0.5) * s; | |
} | |
} | |
Block.prototype.speed = null; | |
Block.prototype.squares = null; | |
Block.prototype.tick = function() { | |
if(this.body.island == null || !this.body.island.sleeping) { | |
this.updatePosition(); | |
} | |
} | |
Block.prototype.updatePosition = function() { | |
this.x = this.body.x; | |
this.y = this.body.y; | |
} | |
Block.prototype.updateStructure = function() { | |
var new_blocks = []; | |
var new_squares = null; | |
this.squares.push(null); | |
{ | |
var _g = 0, _g1 = this.squares; | |
while(_g < _g1.length) { | |
var s = _g1[_g]; | |
++_g; | |
if(s == null) { | |
if(new_squares != null) { | |
var block = new Block(this.body.x,this.body.y,this.body.a,new_squares,this.color); | |
new_blocks.push(block); | |
new_squares = null; | |
} | |
} | |
else { | |
if(new_squares == null) new_squares = []; | |
new_squares.push(s); | |
} | |
} | |
} | |
return new_blocks; | |
} | |
Block.prototype.x = null; | |
Block.prototype.y = null; | |
Block.prototype.__class__ = Block; | |
phx.Body = function(x,y,props) { if( x === $_ ) return; { | |
this.id = phx.Body.ID++; | |
this.properties = (props == null?phx.Const.DEFAULT_PROPERTIES:props); | |
this.x = x; | |
this.y = y; | |
this.v = new phx.Vector(0,0); | |
this.f = new phx.Vector(0,0); | |
this.v_bias = new phx.Vector(0,0); | |
this.a = this.w = this.t = this.w_bias = 0; | |
this.rcos = 1; | |
this.rsin = 0; | |
this.shapes = new haxe.FastList(); | |
this.arbiters = new haxe.FastList(); | |
}} | |
phx.Body.__name__ = ["phx","Body"]; | |
phx.Body.prototype.a = null; | |
phx.Body.prototype.addShape = function(s) { | |
this.shapes.add(s); | |
s.body = this; | |
} | |
phx.Body.prototype.arbiters = null; | |
phx.Body.prototype.f = null; | |
phx.Body.prototype.id = null; | |
phx.Body.prototype.inertia = null; | |
phx.Body.prototype.invInertia = null; | |
phx.Body.prototype.invMass = null; | |
phx.Body.prototype.isStatic = null; | |
phx.Body.prototype.island = null; | |
phx.Body.prototype.mass = null; | |
phx.Body.prototype.motion = null; | |
phx.Body.prototype.onDestroy = function() { | |
null; | |
} | |
phx.Body.prototype.preventRotation = function() { | |
this.inertia = Math.POSITIVE_INFINITY; | |
this.invInertia = 0; | |
} | |
phx.Body.prototype.properties = null; | |
phx.Body.prototype.rcos = null; | |
phx.Body.prototype.removeShape = function(s) { | |
this.shapes.remove(s); | |
s.body = null; | |
} | |
phx.Body.prototype.rsin = null; | |
phx.Body.prototype.set = function(pos,a,v,w) { | |
if(pos != null) { | |
this.x = pos.x; | |
this.y = pos.y; | |
} | |
if(a != null) this.setAngle(a); | |
if(v != null) { | |
this.v.x = v.x; | |
this.v.y = v.y; | |
} | |
if(w != null) this.w = w; | |
} | |
phx.Body.prototype.setAngle = function(a) { | |
this.a = a; | |
this.rcos = Math.cos(a); | |
this.rsin = Math.sin(a); | |
} | |
phx.Body.prototype.setPos = function(x,y,a) { | |
this.x = x; | |
this.y = y; | |
if(a != null) this.setAngle(a); | |
} | |
phx.Body.prototype.setSpeed = function(vx,vy,w) { | |
this.v.x = vx; | |
this.v.y = vy; | |
if(w != null) this.w = w; | |
} | |
phx.Body.prototype.shapes = null; | |
phx.Body.prototype.t = null; | |
phx.Body.prototype.toString = function() { | |
return "Body#" + this.id; | |
} | |
phx.Body.prototype.updatePhysics = function() { | |
var m = 0.; | |
var i = 0.; | |
{ var $it0 = this.shapes.iterator(); | |
while( $it0.hasNext() ) { var s = $it0.next(); | |
{ | |
var sm = s.area * s.material.density; | |
m += sm; | |
i += s.calculateInertia() * sm; | |
} | |
}} | |
if(m > 0) { | |
this.mass = m; | |
this.invMass = 1 / m; | |
} | |
else { | |
this.mass = Math.POSITIVE_INFINITY; | |
this.invMass = 0; | |
this.isStatic = true; | |
} | |
if(i > 0) { | |
this.inertia = i; | |
this.invInertia = 1 / i; | |
} | |
else { | |
this.inertia = Math.POSITIVE_INFINITY; | |
this.invInertia = 0; | |
} | |
} | |
phx.Body.prototype.userData = null; | |
phx.Body.prototype.v = null; | |
phx.Body.prototype.v_bias = null; | |
phx.Body.prototype.w = null; | |
phx.Body.prototype.w_bias = null; | |
phx.Body.prototype.x = null; | |
phx.Body.prototype.y = null; | |
phx.Body.prototype.__class__ = phx.Body; | |
if(!phx.col) phx.col = {} | |
phx.col.BroadCallback = function() { } | |
phx.col.BroadCallback.__name__ = ["phx","col","BroadCallback"]; | |
phx.col.BroadCallback.prototype.onCollide = null; | |
phx.col.BroadCallback.prototype.__class__ = phx.col.BroadCallback; | |
phx.col.BroadPhase = function() { } | |
phx.col.BroadPhase.__name__ = ["phx","col","BroadPhase"]; | |
phx.col.BroadPhase.prototype.addShape = null; | |
phx.col.BroadPhase.prototype.collide = null; | |
phx.col.BroadPhase.prototype.commit = null; | |
phx.col.BroadPhase.prototype.init = null; | |
phx.col.BroadPhase.prototype.pick = null; | |
phx.col.BroadPhase.prototype.removeShape = null; | |
phx.col.BroadPhase.prototype.syncShape = null; | |
phx.col.BroadPhase.prototype.validate = null; | |
phx.col.BroadPhase.prototype.__class__ = phx.col.BroadPhase; | |
phx.Vector = function(px,py) { if( px === $_ ) return; { | |
this.x = px; | |
this.y = py; | |
}} | |
phx.Vector.__name__ = ["phx","Vector"]; | |
phx.Vector.normal = function(x,y) { | |
var d = Math.sqrt(x * x + y * y); | |
var k = (d < 1e-99?0:1 / d); | |
return new phx.Vector(-y * k,x * k); | |
} | |
phx.Vector.prototype.clone = function() { | |
return new phx.Vector(this.x,this.y); | |
} | |
phx.Vector.prototype.cross = function(v) { | |
return this.x * v.y - this.y * v.x; | |
} | |
phx.Vector.prototype.dot = function(v) { | |
return this.x * v.x + this.y * v.y; | |
} | |
phx.Vector.prototype.length = function() { | |
return Math.sqrt(this.x * this.x + this.y * this.y); | |
} | |
phx.Vector.prototype.minus = function(v) { | |
return new phx.Vector(this.x - v.x,this.y - v.y); | |
} | |
phx.Vector.prototype.mult = function(s) { | |
return new phx.Vector(this.x * s,this.y * s); | |
} | |
phx.Vector.prototype.next = null; | |
phx.Vector.prototype.plus = function(v) { | |
return new phx.Vector(this.x + v.x,this.y + v.y); | |
} | |
phx.Vector.prototype.set = function(px,py) { | |
this.x = px; | |
this.y = py; | |
} | |
phx.Vector.prototype.toString = function() { | |
return ((("(" + (Math.round(this.x * 100) / 100)) + ",") + (Math.round(this.y * 100) / 100)) + ")"; | |
} | |
phx.Vector.prototype.x = null; | |
phx.Vector.prototype.y = null; | |
phx.Vector.prototype.__class__ = phx.Vector; | |
StringBuf = function(p) { if( p === $_ ) return; { | |
this.b = new Array(); | |
}} | |
StringBuf.__name__ = ["StringBuf"]; | |
StringBuf.prototype.add = function(x) { | |
this.b[this.b.length] = x; | |
} | |
StringBuf.prototype.addChar = function(c) { | |
this.b[this.b.length] = String.fromCharCode(c); | |
} | |
StringBuf.prototype.addSub = function(s,pos,len) { | |
this.b[this.b.length] = s.substr(pos,len); | |
} | |
StringBuf.prototype.b = null; | |
StringBuf.prototype.toString = function() { | |
return this.b.join(""); | |
} | |
StringBuf.prototype.__class__ = StringBuf; | |
Board = function(p) { if( p === $_ ) return; { | |
this.background = hellBackground; | |
this.blocks_dropped = 0; | |
this.lines_cleared = 0; | |
this.level = 1; | |
this.time_to_next_block = 0.0; | |
this.w = 260; | |
this.h = 410; | |
this.blocks = []; | |
this.world = new phx.World(new phx.col.AABB(-100,-100,this.w + 10,this.h + 10),new phx.col.SortedList()); | |
this.world.gravity = new phx.Vector(0,100.0); | |
this.world.addStaticShape(phx.Shape.makeBox(this.w,10,0,this.h)); | |
this.borders = [phx.Shape.makeBox(10,this.h + 100,-10,-100),phx.Shape.makeBox(10,this.h + 100,this.w,-100)]; | |
this.world.addStaticShape(this.borders[0]); | |
this.world.addStaticShape(this.borders[1]); | |
var c = 50; | |
{ | |
var _g = 0; | |
while(_g < c) { | |
var x = _g++; | |
var t = (((x - 1.0 / c) + 0.6) / c) * 2.0 - 1.0; | |
var y = ((1.0 - Math.sqrt(1 - t * t)) * this.w) / 2.0; | |
this.world.addStaticShape(phx.Shape.makeBox(this.w / c,y,(x / c) * this.w - (this.w / c) / 2.0,this.h - y,new phx.Material(0.0,1.0,0.0))); | |
} | |
} | |
this.newBlock(); | |
}} | |
Board.__name__ = ["Board"]; | |
Board.prototype.addBlock = function(block) { | |
this.world.addBody(block.body); | |
this.blocks.push(block); | |
} | |
Board.prototype.background = null; | |
Board.prototype.blocks = null; | |
Board.prototype.blocks_dropped = null; | |
Board.prototype.borders = null; | |
Board.prototype.checkAndClear = function() { | |
var boxes = []; | |
{ | |
var _g = 0, _g1 = this.blocks; | |
while(_g < _g1.length) { | |
var block = _g1[_g]; | |
++_g; | |
var body = block.body; | |
var a = (body.a * 2.0) / Math.PI; | |
if(Math.abs(a - Math.round(a)) < 0.1) { | |
{ | |
var _g2 = 0, _g3 = block.squares; | |
while(_g2 < _g3.length) { | |
var s = _g3[_g2]; | |
++_g2; | |
var y = s.y * body.rsin + body.y; | |
boxes.push(new Box(block,s)); | |
} | |
} | |
} | |
} | |
} | |
boxes.sort($closure(Box,"compareY")); | |
{ | |
var _g1 = 8, _g = boxes.length; | |
while(_g1 < _g) { | |
var i = _g1++; | |
if(boxes[i].y - boxes[i - 8].y < 15) { | |
{ | |
var _g3 = i - 8, _g2 = (i + 1); | |
while(_g3 < _g2) { | |
var j = _g3++; | |
boxes[j].block.removeSquare(boxes[j].square); | |
} | |
} | |
{ | |
var _g3 = i - 8, _g2 = (i + 1); | |
while(_g3 < _g2) { | |
var j = _g3++; | |
} | |
} | |
this.lines_cleared++; | |
return true; | |
} | |
} | |
} | |
return false; | |
} | |
Board.prototype.current_block = null; | |
Board.prototype.draw = function(graphics) { | |
graphics.clearRect(0,0,417,476); | |
graphics.save(); | |
graphics.translate(19,18); | |
{ | |
var _g = 0, _g1 = this.blocks; | |
while(_g < _g1.length) { | |
var block = _g1[_g]; | |
++_g; | |
block.draw(graphics); | |
} | |
} | |
graphics.translate(325,87); | |
graphics.scale(0.75,0.75); | |
this.next_block.x = 0; | |
this.next_block.y = 0; | |
this.next_block.draw(graphics); | |
graphics.restore(); | |
graphics.drawImage(this.background,0,0); | |
} | |
Board.prototype.h = null; | |
Board.prototype.level = null; | |
Board.prototype.lines_cleared = null; | |
Board.prototype.newBlock = function() { | |
if(this.next_block == null) this.next_block = Block.randomBlock(this.w / 2.0,-65.); | |
if(this.current_block != null) throw "Illegal state"; | |
this.current_block = this.next_block; | |
this.addBlock(this.current_block); | |
this.next_block = Block.randomBlock(this.w / 2.0,-65.); | |
} | |
Board.prototype.next_block = null; | |
Board.prototype.onKeyDown = function(e) { | |
if(this.current_block == null) return; | |
switch(e.keyCode) { | |
case 37:case 65:{ | |
this.current_block.setSpeed(-1.,null); | |
}break; | |
case 38:case 87:{ | |
this.current_block.rotate(Math.PI / 2.0); | |
}break; | |
case 39:case 68:{ | |
this.current_block.setSpeed(1.0,null); | |
}break; | |
case 40:case 83:{ | |
this.current_block.setSpeed(null,1.0); | |
}break; | |
default:{ | |
null; | |
}break; | |
} | |
} | |
Board.prototype.onKeyUp = function(e) { | |
if(this.current_block == null) return; | |
switch(e.keyCode) { | |
case 37:case 65:{ | |
this.current_block.setSpeed(0.0,null); | |
}break; | |
case 39:case 68:{ | |
this.current_block.setSpeed(0.0,null); | |
}break; | |
case 40:case 83:{ | |
this.current_block.setSpeed(null,0.0); | |
}break; | |
default:{ | |
null; | |
}break; | |
} | |
} | |
Board.prototype.removeBlock = function(block) { | |
this.world.removeBody(block.body); | |
this.blocks.remove(block); | |
} | |
Board.prototype.tick = function() { | |
this.world.step(1.0 / 30.0,10); | |
if(this.time_to_next_block > 0) { | |
this.time_to_next_block -= 1.0 / 30.0; | |
if(this.time_to_next_block < 0) { | |
if(this.current_block == null) { | |
this.newBlock(); | |
} | |
else { | |
this.blocks_dropped++; | |
this.current_block = null; | |
this.time_to_next_block = 1.0; | |
} | |
} | |
} | |
{ | |
var _g = 0, _g1 = this.blocks; | |
while(_g < _g1.length) { | |
var block = _g1[_g]; | |
++_g; | |
block.tick(); | |
} | |
} | |
if(this.current_block == null) { | |
while(this.checkAndClear()) null; | |
} | |
if(this.current_block != null) { | |
this.current_block.body.v.set(this.current_block.speed.x,this.current_block.speed.y); | |
} | |
if(this.current_block != null && !(this.current_block.body.arbiters.head == null)) { | |
var go = false; | |
{ var $it1 = this.current_block.body.arbiters.iterator(); | |
while( $it1.hasNext() ) { var arbiter = $it1.next(); | |
{ | |
var shape = (arbiter.s1.body == this.current_block.body?arbiter.s2:arbiter.s1); | |
if(shape != this.borders[0] && shape != this.borders[1]) go = true; | |
} | |
}} | |
if(go && this.time_to_next_block <= 0.0) { | |
if(this.current_block.y > 0.0) { | |
this.time_to_next_block = 0.5; | |
} | |
else { | |
this.current_block = null; | |
} | |
} | |
} | |
} | |
Board.prototype.time_to_next_block = null; | |
Board.prototype.w = null; | |
Board.prototype.world = null; | |
Board.prototype.__class__ = Board; | |
phx.Arbiter = function(alloc) { if( alloc === $_ ) return; { | |
this.allocator = alloc; | |
}} | |
phx.Arbiter.__name__ = ["phx","Arbiter"]; | |
phx.Arbiter.prototype.allocator = null; | |
phx.Arbiter.prototype.applyImpulse = function() { | |
var b1 = this.s1.body; | |
var b2 = this.s2.body; | |
var c = this.contacts; | |
while(c != null) { | |
var vbn = ((c.r2nx * b2.w_bias + b2.v_bias.x) - (c.r1nx * b1.w_bias + b1.v_bias.x)) * c.nx + ((c.r2ny * b2.w_bias + b2.v_bias.y) - (c.r1ny * b1.w_bias + b1.v_bias.y)) * c.ny; | |
var jbn = (c.bias - vbn) * c.nMass; | |
var jbnOld = c.jBias; | |
c.jBias = jbnOld + jbn; | |
if(c.jBias < 0) c.jBias = 0; | |
jbn = c.jBias - jbnOld; | |
var cjTx = c.nx * jbn; | |
var cjTy = c.ny * jbn; | |
b1.v_bias.x -= cjTx * b1.invMass; | |
b1.v_bias.y -= cjTy * b1.invMass; | |
b1.w_bias -= b1.invInertia * (c.r1x * cjTy - c.r1y * cjTx); | |
b2.v_bias.x += cjTx * b2.invMass; | |
b2.v_bias.y += cjTy * b2.invMass; | |
b2.w_bias += b2.invInertia * (c.r2x * cjTy - c.r2y * cjTx); | |
var vrx = (c.r2nx * b2.w + b2.v.x) - (c.r1nx * b1.w + b1.v.x); | |
var vry = (c.r2ny * b2.w + b2.v.y) - (c.r1ny * b1.w + b1.v.y); | |
var jn = (c.bounce + (vrx * c.nx + vry * c.ny)) * c.nMass; | |
var jnOld = c.jnAcc; | |
c.jnAcc = jnOld - jn; | |
if(c.jnAcc < 0) c.jnAcc = 0; | |
jn = c.jnAcc - jnOld; | |
var vrt = c.nx * vry - c.ny * vrx; | |
var jtMax = this.friction * c.jnAcc; | |
var jt = vrt * c.tMass; | |
var jtOld = c.jtAcc; | |
c.jtAcc = jtOld - jt; | |
if(c.jtAcc < -jtMax) c.jtAcc = -jtMax; | |
else if(c.jtAcc > jtMax) c.jtAcc = jtMax; | |
jt = c.jtAcc - jtOld; | |
var cjTx1 = c.nx * jn - c.ny * jt; | |
var cjTy1 = c.ny * jn + c.nx * jt; | |
{ | |
b1.v.x -= cjTx1 * b1.invMass; | |
b1.v.y -= cjTy1 * b1.invMass; | |
b1.w -= b1.invInertia * (c.r1x * cjTy1 - c.r1y * cjTx1); | |
b2.v.x += cjTx1 * b2.invMass; | |
b2.v.y += cjTy1 * b2.invMass; | |
b2.w += b2.invInertia * (c.r2x * cjTy1 - c.r2y * cjTx1); | |
} | |
c = c.next; | |
} | |
} | |
phx.Arbiter.prototype.assign = function(s1,s2) { | |
this.s1 = s1; | |
this.s2 = s2; | |
var m1 = s1.material; | |
var m2 = s2.material; | |
var p1 = s1.body.properties; | |
var p2 = s2.body.properties; | |
this.restitution = (m1.restitution > m2.restitution?m1.restitution:m2.restitution); | |
this.friction = Math.sqrt(m1.friction * m2.friction); | |
this.bias = ((p1.biasCoef > p2.biasCoef)?p1.biasCoef:p2.biasCoef); | |
this.maxDist = ((p1.maxDist > p2.maxDist)?p2.maxDist:p1.maxDist); | |
} | |
phx.Arbiter.prototype.bias = null; | |
phx.Arbiter.prototype.bodyImpulse = function(c,b1,b2,cjTx,cjTy) { | |
b1.v.x -= cjTx * b1.invMass; | |
b1.v.y -= cjTy * b1.invMass; | |
b1.w -= b1.invInertia * (c.r1x * cjTy - c.r1y * cjTx); | |
b2.v.x += cjTx * b2.invMass; | |
b2.v.y += cjTy * b2.invMass; | |
b2.w += b2.invInertia * (c.r2x * cjTy - c.r2y * cjTx); | |
} | |
phx.Arbiter.prototype.contacts = null; | |
phx.Arbiter.prototype.friction = null; | |
phx.Arbiter.prototype.injectContact = function(p,n,nCoef,dist,hash) { | |
var c = this.contacts; | |
while(c != null) { | |
if(hash == c.hash) break; | |
c = c.next; | |
} | |
if(c == null) { | |
c = this.allocator.allocContact(); | |
c.hash = hash; | |
c.jnAcc = c.jtAcc = 0; | |
c.next = this.contacts; | |
this.contacts = c; | |
} | |
c.px = p.x; | |
c.py = p.y; | |
c.nx = n.x * nCoef; | |
c.ny = n.y * nCoef; | |
c.dist = dist; | |
c.updated = true; | |
} | |
phx.Arbiter.prototype.island = null; | |
phx.Arbiter.prototype.maxDist = null; | |
phx.Arbiter.prototype.preStep = function(dt) { | |
var b1 = this.s1.body; | |
var b2 = this.s2.body; | |
var mass_sum = b1.invMass + b2.invMass; | |
var c = this.contacts; | |
var prev = null; | |
while(c != null) { | |
if(!c.updated) { | |
var old = c; | |
c = c.next; | |
this.allocator.freeContact(old); | |
if(prev == null) this.contacts = c; | |
else prev.next = c; | |
continue; | |
} | |
c.updated = false; | |
c.r1x = c.px - b1.x; | |
c.r1y = c.py - b1.y; | |
c.r2x = c.px - b2.x; | |
c.r2y = c.py - b2.y; | |
c.r1nx = -c.r1y; | |
c.r1ny = c.r1x; | |
c.r2nx = -c.r2y; | |
c.r2ny = c.r2x; | |
var r1cn = c.r1x * c.ny - c.r1y * c.nx; | |
var r2cn = c.r2x * c.ny - c.r2y * c.nx; | |
var kn = (mass_sum + ((b1.invInertia * r1cn) * r1cn)) + ((b2.invInertia * r2cn) * r2cn); | |
c.nMass = 1.0 / kn; | |
var tx = -c.ny; | |
var ty = c.nx; | |
var r1ct = c.r1x * ty - c.r1y * tx; | |
var r2ct = c.r2x * ty - c.r2y * tx; | |
var kt = (mass_sum + (b1.invInertia * r1ct) * r1ct) + (b2.invInertia * r2ct) * r2ct; | |
c.tMass = 1.0 / kt; | |
c.bias = -this.bias * (c.dist + this.maxDist); | |
c.jBias = 0; | |
var vrx = (c.r2nx * b2.w + b2.v.x) - (c.r1nx * b1.w + b1.v.x); | |
var vry = (c.r2ny * b2.w + b2.v.y) - (c.r1ny * b1.w + b1.v.y); | |
c.bounce = ((c.nx * vrx + c.ny * vry) * this.restitution) * dt; | |
var cjTx = (c.nx * c.jnAcc) + (tx * c.jtAcc); | |
var cjTy = (c.ny * c.jnAcc) + (ty * c.jtAcc); | |
{ | |
b1.v.x -= cjTx * b1.invMass; | |
b1.v.y -= cjTy * b1.invMass; | |
b1.w -= b1.invInertia * (c.r1x * cjTy - c.r1y * cjTx); | |
b2.v.x += cjTx * b2.invMass; | |
b2.v.y += cjTy * b2.invMass; | |
b2.w += b2.invInertia * (c.r2x * cjTy - c.r2y * cjTx); | |
} | |
prev = c; | |
c = c.next; | |
} | |
} | |
phx.Arbiter.prototype.restitution = null; | |
phx.Arbiter.prototype.s1 = null; | |
phx.Arbiter.prototype.s2 = null; | |
phx.Arbiter.prototype.sleeping = null; | |
phx.Arbiter.prototype.stamp = null; | |
phx.Arbiter.prototype.__class__ = phx.Arbiter; | |
Box = function(block,square) { if( block === $_ ) return; { | |
this.block = block; | |
this.square = square; | |
this.y = (square.x * block.body.rsin + square.y * block.body.rcos) + block.body.y; | |
}} | |
Box.__name__ = ["Box"]; | |
Box.compareY = function(a,b) { | |
if(a.y == b.y) return 0; | |
else if(a.y > b.y) return 1; | |
else return -1; | |
} | |
Box.prototype.block = null; | |
Box.prototype.square = null; | |
Box.prototype.toString = function() { | |
return this.y + ""; | |
} | |
Box.prototype.y = null; | |
Box.prototype.__class__ = Box; | |
phx.col.AABB = function(left,top,right,bottom) { if( left === $_ ) return; { | |
this.l = left; | |
this.t = top; | |
this.r = right; | |
this.b = bottom; | |
}} | |
phx.col.AABB.__name__ = ["phx","col","AABB"]; | |
phx.col.AABB.prototype.b = null; | |
phx.col.AABB.prototype.bounds = null; | |
phx.col.AABB.prototype.center = function() { | |
return new phx.Vector((this.l + this.r) / 2.0,(this.t + this.b) / 2.0); | |
} | |
phx.col.AABB.prototype.contains = function(aabb) { | |
return (aabb.l >= this.l && aabb.r <= this.r && aabb.t >= this.t && aabb.b <= this.b); | |
} | |
phx.col.AABB.prototype.containsPoint = function(v) { | |
return !(v.y < this.t || v.y > this.b || v.x < this.l || v.x > this.r); | |
} | |
phx.col.AABB.prototype.height = function() { | |
return Math.abs(this.t - this.b); | |
} | |
phx.col.AABB.prototype.intersects = function(aabb) { | |
return !(aabb.l > this.r || aabb.r < this.l || aabb.t > this.b || aabb.b < this.t); | |
} | |
phx.col.AABB.prototype.intersects2 = function(aabb) { | |
return (this.l <= aabb.r && aabb.l <= this.r && this.t <= aabb.b && aabb.t <= this.b); | |
} | |
phx.col.AABB.prototype.l = null; | |
phx.col.AABB.prototype.next = null; | |
phx.col.AABB.prototype.prev = null; | |
phx.col.AABB.prototype.r = null; | |
phx.col.AABB.prototype.shape = null; | |
phx.col.AABB.prototype.t = null; | |
phx.col.AABB.prototype.toString = function() { | |
return ((((((("[l=" + this.l) + " b=") + this.b) + " r=") + this.r) + " t=") + this.t) + "]"; | |
} | |
phx.col.AABB.prototype.width = function() { | |
return Math.abs(this.l - this.r); | |
} | |
phx.col.AABB.prototype.__class__ = phx.col.AABB; | |
if(!phx.joint) phx.joint = {} | |
phx.joint.Joint = function(b1,b2,anchr1,anchr2) { if( b1 === $_ ) return; { | |
this.b1 = b1; | |
this.b2 = b2; | |
this.anchr1 = anchr1; | |
this.anchr2 = anchr2; | |
}} | |
phx.joint.Joint.__name__ = ["phx","joint","Joint"]; | |
phx.joint.Joint.prototype.anchr1 = null; | |
phx.joint.Joint.prototype.anchr2 = null; | |
phx.joint.Joint.prototype.applyImpuse = function() { | |
null; | |
} | |
phx.joint.Joint.prototype.b1 = null; | |
phx.joint.Joint.prototype.b2 = null; | |
phx.joint.Joint.prototype.island = null; | |
phx.joint.Joint.prototype.preStep = function(invDt) { | |
null; | |
} | |
phx.joint.Joint.prototype.__class__ = phx.joint.Joint; | |
phx.Material = function(restitution,friction,density) { if( restitution === $_ ) return; { | |
this.restitution = restitution; | |
this.friction = friction; | |
this.density = density; | |
}} | |
phx.Material.__name__ = ["phx","Material"]; | |
phx.Material.prototype.density = null; | |
phx.Material.prototype.friction = null; | |
phx.Material.prototype.restitution = null; | |
phx.Material.prototype.__class__ = phx.Material; | |
phx.Properties = function(linearFriction,angularFriction,biasCoef,maxMotion,maxDist) { if( linearFriction === $_ ) return; { | |
this.id = phx.Properties.PID++; | |
this.count = 0; | |
this.linearFriction = linearFriction; | |
this.angularFriction = angularFriction; | |
this.biasCoef = biasCoef; | |
this.maxMotion = maxMotion; | |
this.maxDist = maxDist; | |
}} | |
phx.Properties.__name__ = ["phx","Properties"]; | |
phx.Properties.prototype.afdt = null; | |
phx.Properties.prototype.angularFriction = null; | |
phx.Properties.prototype.biasCoef = null; | |
phx.Properties.prototype.count = null; | |
phx.Properties.prototype.id = null; | |
phx.Properties.prototype.lfdt = null; | |
phx.Properties.prototype.linearFriction = null; | |
phx.Properties.prototype.maxDist = null; | |
phx.Properties.prototype.maxMotion = null; | |
phx.Properties.prototype.__class__ = phx.Properties; | |
phx.Const = function() { } | |
phx.Const.__name__ = ["phx","Const"]; | |
phx.Const.XROT = function(v,b) { | |
return v.x * b.rcos - v.y * b.rsin; | |
} | |
phx.Const.YROT = function(v,b) { | |
return v.x * b.rsin + v.y * b.rcos; | |
} | |
phx.Const.prototype.__class__ = phx.Const; | |
IntIter = function(min,max) { if( min === $_ ) return; { | |
this.min = min; | |
this.max = max; | |
}} | |
IntIter.__name__ = ["IntIter"]; | |
IntIter.prototype.hasNext = function() { | |
return this.min < this.max; | |
} | |
IntIter.prototype.max = null; | |
IntIter.prototype.min = null; | |
IntIter.prototype.next = function() { | |
return this.min++; | |
} | |
IntIter.prototype.__class__ = IntIter; | |
if(typeof haxe=='undefined') haxe = {} | |
haxe.Timer = function(time_ms) { if( time_ms === $_ ) return; { | |
this.id = haxe.Timer.arr.length; | |
haxe.Timer.arr[this.id] = this; | |
this.timerId = window.setInterval(("haxe.Timer.arr[" + this.id) + "].run();",time_ms); | |
}} | |
haxe.Timer.__name__ = ["haxe","Timer"]; | |
haxe.Timer.delay = function(f,time_ms) { | |
var t = new haxe.Timer(time_ms); | |
t.run = function() { | |
t.stop(); | |
f(); | |
} | |
return t; | |
} | |
haxe.Timer.stamp = function() { | |
return Date.now().getTime() / 1000; | |
} | |
haxe.Timer.prototype.id = null; | |
haxe.Timer.prototype.run = function() { | |
null; | |
} | |
haxe.Timer.prototype.stop = function() { | |
if(this.id == null) return; | |
window.clearInterval(this.timerId); | |
haxe.Timer.arr[this.id] = null; | |
if(this.id > 100 && this.id == haxe.Timer.arr.length - 1) { | |
var p = this.id - 1; | |
while(p >= 0 && haxe.Timer.arr[p] == null) p--; | |
haxe.Timer.arr = haxe.Timer.arr.slice(0,p + 1); | |
} | |
this.id = null; | |
} | |
haxe.Timer.prototype.timerId = null; | |
haxe.Timer.prototype.__class__ = haxe.Timer; | |
phx.Segment = function(a,b,r,material) { if( a === $_ ) return; { | |
phx.Shape.apply(this,[1,material]); | |
this.segment = this; | |
this.offset = new phx.Vector(0,0); | |
this.a = new phx.Vector(a.x,a.y); | |
this.b = new phx.Vector(b.x,b.y); | |
this.r = r; | |
var delta = new phx.Vector(b.x - a.x,b.y - a.y); | |
this.n = phx.Vector.normal(delta.x,delta.y); | |
this.area = r * Math.sqrt(delta.x * delta.x + delta.y * delta.y); | |
this.tA = new phx.Vector(0,0); | |
this.tB = new phx.Vector(0,0); | |
this.tN = new phx.Vector(0,0); | |
this.tNneg = new phx.Vector(0,0); | |
}} | |
phx.Segment.__name__ = ["phx","Segment"]; | |
phx.Segment.__super__ = phx.Shape; | |
for(var k in phx.Shape.prototype ) phx.Segment.prototype[k] = phx.Shape.prototype[k]; | |
phx.Segment.prototype.a = null; | |
phx.Segment.prototype.b = null; | |
phx.Segment.prototype.calculateInertia = function() { | |
return 1.; | |
} | |
phx.Segment.prototype.n = null; | |
phx.Segment.prototype.r = null; | |
phx.Segment.prototype.tA = null; | |
phx.Segment.prototype.tB = null; | |
phx.Segment.prototype.tN = null; | |
phx.Segment.prototype.tNneg = null; | |
phx.Segment.prototype.update = function() { | |
this.tA.x = this.body.x + phx.Const.XROT(this.a,this.body); | |
this.tA.y = this.body.y + phx.Const.YROT(this.a,this.body); | |
this.tB.x = this.body.x + phx.Const.XROT(this.b,this.body); | |
this.tB.y = this.body.y + phx.Const.YROT(this.b,this.body); | |
this.tN.x = phx.Const.XROT(this.n,this.body); | |
this.tN.y = phx.Const.YROT(this.n,this.body); | |
this.tNneg.x = -this.tN.x; | |
this.tNneg.y = -this.tN.y; | |
if(this.tA.x < this.tB.x) { | |
this.aabb.l = this.tA.x - this.r; | |
this.aabb.r = this.tB.x + this.r; | |
} | |
else { | |
this.aabb.l = this.tB.x - this.r; | |
this.aabb.r = this.tA.x + this.r; | |
} | |
if(this.tA.y < this.tB.y) { | |
this.aabb.t = this.tA.y - this.r; | |
this.aabb.b = this.tB.y + this.r; | |
} | |
else { | |
this.aabb.t = this.tB.y - this.r; | |
this.aabb.b = this.tA.y + this.r; | |
} | |
} | |
phx.Segment.prototype.__class__ = phx.Segment; | |
Std = function() { } | |
Std.__name__ = ["Std"]; | |
Std["is"] = function(v,t) { | |
return js.Boot.__instanceof(v,t); | |
} | |
Std.string = function(s) { | |
return js.Boot.__string_rec(s,""); | |
} | |
Std["int"] = function(x) { | |
if(x < 0) return Math.ceil(x); | |
return Math.floor(x); | |
} | |
Std.parseInt = function(x) { | |
var v = parseInt(x); | |
if(Math.isNaN(v)) return null; | |
return v; | |
} | |
Std.parseFloat = function(x) { | |
return parseFloat(x); | |
} | |
Std.random = function(x) { | |
return Math.floor(Math.random() * x); | |
} | |
Std.prototype.__class__ = Std; | |
phx.Polygon = function(vl,offset,material) { if( vl === $_ ) return; { | |
phx.Shape.apply(this,[2,material]); | |
this.polygon = this; | |
this.offset = offset; | |
this.initVertexes(vl); | |
}} | |
phx.Polygon.__name__ = ["phx","Polygon"]; | |
phx.Polygon.__super__ = phx.Shape; | |
for(var k in phx.Shape.prototype ) phx.Polygon.prototype[k] = phx.Shape.prototype[k]; | |
phx.Polygon.prototype.axes = null; | |
phx.Polygon.prototype.calculateInertia = function() { | |
var tVertsTemp = new Array(); | |
var v = this.verts; | |
while(v != null) { | |
tVertsTemp.push(new phx.Vector(v.x + this.offset.x,v.y + this.offset.y)); | |
v = v.next; | |
} | |
var sum1 = 0.; | |
var sum2 = 0.; | |
{ | |
var _g1 = 0, _g = this.vcount; | |
while(_g1 < _g) { | |
var i = _g1++; | |
var v0 = tVertsTemp[i]; | |
var v1 = tVertsTemp[(i + 1) % this.vcount]; | |
var a = v1.x * v0.y - v1.y * v0.x; | |
var b = ((v0.x * v0.x + v0.y * v0.y) + (v0.x * v1.x + v0.y * v1.y)) + (v1.x * v1.x + v1.y * v1.y); | |
sum1 += a * b; | |
sum2 += a; | |
} | |
} | |
return sum1 / (6 * sum2); | |
} | |
phx.Polygon.prototype.initVertexes = function(vl) { | |
var l_verts = null, l_tVerts = null, l_axes = null, l_tAxes = null; | |
var count = vl.length; | |
this.vcount = count; | |
this.area = 0; | |
var off = (this.offset != null); | |
{ | |
var _g = 0; | |
while(_g < count) { | |
var i = _g++; | |
var v0 = vl[i]; | |
var v1 = vl[(i + 1) % count]; | |
var v2 = vl[(i + 2) % count]; | |
this.area += v1.x * (v0.y - v2.y); | |
var v = (off?v0.plus(this.offset):v0); | |
var n = phx.Vector.normal(v1.x - v0.x,v1.y - v0.y); | |
var a = new phx.Axis(n,n.x * v.x + n.y * v.y); | |
var vt = new phx.Vector(v.x,v.y); | |
var at = new phx.Axis(a.n.clone(),a.d); | |
if(i == 0) { | |
this.verts = v; | |
this.tVerts = vt; | |
this.axes = a; | |
this.tAxes = at; | |
} | |
else { | |
l_verts.next = v; | |
l_tVerts.next = vt; | |
l_axes.next = a; | |
l_tAxes.next = at; | |
} | |
l_verts = v; | |
l_tVerts = vt; | |
l_axes = a; | |
l_tAxes = at; | |
} | |
} | |
this.area *= 0.5; | |
} | |
phx.Polygon.prototype.tAxes = null; | |
phx.Polygon.prototype.tVerts = null; | |
phx.Polygon.prototype.update = function() { | |
var v = this.verts; | |
var tv = this.tVerts; | |
var body = this.body; | |
var aabb = this.aabb; | |
aabb.l = aabb.t = 1e99; | |
aabb.r = aabb.b = -1e+99; | |
while(v != null) { | |
tv.x = body.x + (v.x * body.rcos - v.y * body.rsin); | |
tv.y = body.y + (v.x * body.rsin + v.y * body.rcos); | |
if(tv.x < aabb.l) aabb.l = tv.x; | |
if(tv.x > aabb.r) aabb.r = tv.x; | |
if(tv.y < aabb.t) aabb.t = tv.y; | |
if(tv.y > aabb.b) aabb.b = tv.y; | |
v = v.next; | |
tv = tv.next; | |
} | |
var a = this.axes; | |
var ta = this.tAxes; | |
while(a != null) { | |
var n = a.n; | |
ta.n.x = n.x * body.rcos - n.y * body.rsin; | |
ta.n.y = n.x * body.rsin + n.y * body.rcos; | |
ta.d = (body.x * ta.n.x + body.y * ta.n.y) + a.d; | |
a = a.next; | |
ta = ta.next; | |
} | |
} | |
phx.Polygon.prototype.vcount = null; | |
phx.Polygon.prototype.verts = null; | |
phx.Polygon.prototype.__class__ = phx.Polygon; | |
phx.Timer = function(p) { if( p === $_ ) return; { | |
this.total = 0.; | |
this.datas = new Hash(); | |
this.times = new Array(); | |
this.curs = new Array(); | |
}} | |
phx.Timer.__name__ = ["phx","Timer"]; | |
phx.Timer.prototype.curs = null; | |
phx.Timer.prototype.datas = null; | |
phx.Timer.prototype.format = function(name) { | |
var data = this.datas.get(name); | |
if(data == null) return name + " ????"; | |
return ((((name + " : ") + Std["int"](data.avg * 1000)) + " (") + (Std["int"]((data.total * 1000) / this.total) / 10)) + "%)"; | |
} | |
phx.Timer.prototype.getTotal = function(name) { | |
var data = this.datas.get(name); | |
if(data == null) return 0.; | |
return data.total; | |
} | |
phx.Timer.prototype.start = function(phase) { | |
this.times.push(haxe.Timer.stamp()); | |
this.curs.push(phase); | |
} | |
phx.Timer.prototype.stop = function() { | |
var dt = (haxe.Timer.stamp() - this.times.pop()) * 1000; | |
var name = this.curs.pop(); | |
var data = this.datas.get(name); | |
if(data == null) { | |
data = { total : 0., avg : 0.} | |
this.datas.set(name,data); | |
} | |
data.total += dt; | |
data.avg = data.avg * 0.99 + 0.01 * dt; | |
if(this.curs.length == 0) this.total += dt; | |
} | |
phx.Timer.prototype.times = null; | |
phx.Timer.prototype.total = null; | |
phx.Timer.prototype.__class__ = phx.Timer; | |
phx.Axis = function(n,d) { if( n === $_ ) return; { | |
this.n = n; | |
this.d = d; | |
}} | |
phx.Axis.__name__ = ["phx","Axis"]; | |
phx.Axis.prototype.clone = function() { | |
return new phx.Axis(this.n.clone(),this.d); | |
} | |
phx.Axis.prototype.d = null; | |
phx.Axis.prototype.n = null; | |
phx.Axis.prototype.next = null; | |
phx.Axis.prototype.toString = function() { | |
return ((((("[Axis= " + this.n.x) + ",") + this.n.y) + " d=") + this.d) + "]"; | |
} | |
phx.Axis.prototype.__class__ = phx.Axis; | |
if(typeof js=='undefined') js = {} | |
js.Lib = function() { } | |
js.Lib.__name__ = ["js","Lib"]; | |
js.Lib.isIE = null; | |
js.Lib.isOpera = null; | |
js.Lib.document = null; | |
js.Lib.window = null; | |
js.Lib.alert = function(v) { | |
alert(js.Boot.__string_rec(v,"")); | |
} | |
js.Lib.eval = function(code) { | |
return eval(code); | |
} | |
js.Lib.setErrorHandler = function(f) { | |
js.Lib.onerror = f; | |
} | |
js.Lib.prototype.__class__ = js.Lib; | |
phx.col.SortedList = function(p) { if( p === $_ ) return; { | |
null; | |
}} | |
phx.col.SortedList.__name__ = ["phx","col","SortedList"]; | |
phx.col.SortedList.prototype.addShape = function(s) { | |
var b = s.aabb; | |
b.shape = s; | |
this.addSort(b); | |
} | |
phx.col.SortedList.prototype.addSort = function(b) { | |
var cur = this.boxes; | |
var prev = null; | |
while(cur != null && cur.t < b.t) { | |
prev = cur; | |
cur = cur.next; | |
} | |
b.prev = prev; | |
b.next = cur; | |
if(prev == null) this.boxes = b; | |
else prev.next = b; | |
if(cur != null) cur.prev = b; | |
} | |
phx.col.SortedList.prototype.boxes = null; | |
phx.col.SortedList.prototype.callb = null; | |
phx.col.SortedList.prototype.collide = function() { | |
var b1 = this.boxes; | |
while(b1 != null) { | |
var b2 = b1.next; | |
var bottom = b1.b; | |
while(b2 != null) { | |
if(b2.t > bottom) break; | |
if(b1.l <= b2.r && b2.l <= b1.r && b1.t <= b2.b && b2.t <= b1.b) this.callb.onCollide(b1.shape,b2.shape); | |
b2 = b2.next; | |
} | |
b1 = b1.next; | |
} | |
} | |
phx.col.SortedList.prototype.commit = function() { | |
null; | |
} | |
phx.col.SortedList.prototype.init = function(bounds,callb,staticBody) { | |
this.callb = callb; | |
this.boxes = null; | |
} | |
phx.col.SortedList.prototype.pick = function(box) { | |
var shapes = new haxe.FastList(); | |
var b = this.boxes; | |
while(b != null) { | |
if(b.t <= box.b) break; | |
b = b.next; | |
} | |
while(b != null) { | |
if(!(box.l > b.r || box.r < b.l || box.t > b.b || box.b < b.t)) shapes.head = new haxe.FastCell(b.shape,shapes.head); | |
b = b.next; | |
} | |
return shapes; | |
} | |
phx.col.SortedList.prototype.removeShape = function(s) { | |
var b = s.aabb; | |
var next = b.next; | |
var prev = b.prev; | |
if(prev == null) this.boxes = next; | |
else prev.next = next; | |
if(next != null) next.prev = prev; | |
} | |
phx.col.SortedList.prototype.syncShape = function(s) { | |
var b = s.aabb; | |
var prev = b.prev; | |
var next = b.next; | |
if(prev != null && prev.t > b.t) { | |
prev.next = next; | |
if(next != null) next.prev = prev; | |
this.addSort(b); | |
} | |
else if(next != null && next.t < b.t) { | |
if(prev == null) this.boxes = next; | |
else prev.next = next; | |
next.prev = prev; | |
this.addSort(b); | |
} | |
} | |
phx.col.SortedList.prototype.validate = function() { | |
var cur = this.boxes; | |
while(cur != null) { | |
var next = cur.next; | |
if(next != null && next.t < cur.t) return false; | |
cur = next; | |
} | |
return true; | |
} | |
phx.col.SortedList.prototype.__class__ = phx.col.SortedList; | |
phx.col.SortedList.__interfaces__ = [phx.col.BroadPhase]; | |
js.Boot = function() { } | |
js.Boot.__name__ = ["js","Boot"]; | |
js.Boot.__unhtml = function(s) { | |
return s.split("&").join("&").split("<").join("<").split(">").join(">"); | |
} | |
js.Boot.__trace = function(v,i) { | |
var msg = (i != null?((i.fileName + ":") + i.lineNumber) + ": ":""); | |
msg += js.Boot.__unhtml(js.Boot.__string_rec(v,"")) + "<br/>"; | |
var d = document.getElementById("haxe:trace"); | |
if(d == null) alert("No haxe:trace element defined\n" + msg); | |
else d.innerHTML += msg; | |
} | |
js.Boot.__clear_trace = function() { | |
var d = document.getElementById("haxe:trace"); | |
if(d != null) d.innerHTML = ""; | |
else null; | |
} | |
js.Boot.__closure = function(o,f) { | |
var m = o[f]; | |
if(m == null) return null; | |
var f1 = function() { | |
return m.apply(o,arguments); | |
} | |
f1.scope = o; | |
f1.method = m; | |
return f1; | |
} | |
js.Boot.__string_rec = function(o,s) { | |
if(o == null) return "null"; | |
if(s.length >= 5) return "<...>"; | |
var t = typeof(o); | |
if(t == "function" && (o.__name__ != null || o.__ename__ != null)) t = "object"; | |
switch(t) { | |
case "object":{ | |
if(o instanceof Array) { | |
if(o.__enum__ != null) { | |
if(o.length == 2) return o[0]; | |
var str = o[0] + "("; | |
s += "\t"; | |
{ | |
var _g1 = 2, _g = o.length; | |
while(_g1 < _g) { | |
var i = _g1++; | |
if(i != 2) str += "," + js.Boot.__string_rec(o[i],s); | |
else str += js.Boot.__string_rec(o[i],s); | |
} | |
} | |
return str + ")"; | |
} | |
var l = o.length; | |
var i; | |
var str = "["; | |
s += "\t"; | |
{ | |
var _g = 0; | |
while(_g < l) { | |
var i1 = _g++; | |
str += ((i1 > 0?",":"")) + js.Boot.__string_rec(o[i1],s); | |
} | |
} | |
str += "]"; | |
return str; | |
} | |
var tostr; | |
try { | |
tostr = o.toString; | |
} | |
catch( $e2 ) { | |
{ | |
var e = $e2; | |
{ | |
return "???"; | |
} | |
} | |
} | |
if(tostr != null && tostr != Object.toString) { | |
var s2 = o.toString(); | |
if(s2 != "[object Object]") return s2; | |
} | |
var k = null; | |
var str = "{\n"; | |
s += "\t"; | |
var hasp = (o.hasOwnProperty != null); | |
for( var k in o ) { ; | |
if(hasp && !o.hasOwnProperty(k)) continue; | |
if(k == "prototype" || k == "__class__" || k == "__super__" || k == "__interfaces__") continue; | |
if(str.length != 2) str += ", \n"; | |
str += ((s + k) + " : ") + js.Boot.__string_rec(o[k],s); | |
} | |
s = s.substring(1); | |
str += ("\n" + s) + "}"; | |
return str; | |
}break; | |
case "function":{ | |
return "<function>"; | |
}break; | |
case "string":{ | |
return o; | |
}break; | |
default:{ | |
return String(o); | |
}break; | |
} | |
} | |
js.Boot.__interfLoop = function(cc,cl) { | |
if(cc == null) return false; | |
if(cc == cl) return true; | |
var intf = cc.__interfaces__; | |
if(intf != null) { | |
var _g1 = 0, _g = intf.length; | |
while(_g1 < _g) { | |
var i = _g1++; | |
var i1 = intf[i]; | |
if(i1 == cl || js.Boot.__interfLoop(i1,cl)) return true; | |
} | |
} | |
return js.Boot.__interfLoop(cc.__super__,cl); | |
} | |
js.Boot.__instanceof = function(o,cl) { | |
try { | |
if(o instanceof cl) { | |
if(cl == Array) return (o.__enum__ == null); | |
return true; | |
} | |
if(js.Boot.__interfLoop(o.__class__,cl)) return true; | |
} | |
catch( $e3 ) { | |
{ | |
var e = $e3; | |
{ | |
if(cl == null) return false; | |
} | |
} | |
} | |
switch(cl) { | |
case Int:{ | |
return Math.ceil(o%2147483648.0) === o; | |
}break; | |
case Float:{ | |
return typeof(o) == "number"; | |
}break; | |
case Bool:{ | |
return o === true || o === false; | |
}break; | |
case String:{ | |
return typeof(o) == "string"; | |
}break; | |
case Dynamic:{ | |
return true; | |
}break; | |
default:{ | |
if(o == null) return false; | |
return o.__enum__ == cl || (cl == Class && o.__name__ != null) || (cl == Enum && o.__ename__ != null); | |
}break; | |
} | |
} | |
js.Boot.__init = function() { | |
js.Lib.isIE = (typeof document!='undefined' && document.all != null && typeof window!='undefined' && window.opera == null); | |
js.Lib.isOpera = (typeof window!='undefined' && window.opera != null); | |
Array.prototype.copy = Array.prototype.slice; | |
Array.prototype.insert = function(i,x) { | |
this.splice(i,0,x); | |
} | |
Array.prototype.remove = (Array.prototype.indexOf?function(obj) { | |
var idx = this.indexOf(obj); | |
if(idx == -1) return false; | |
this.splice(idx,1); | |
return true; | |
}:function(obj) { | |
var i = 0; | |
var l = this.length; | |
while(i < l) { | |
if(this[i] == obj) { | |
this.splice(i,1); | |
return true; | |
} | |
i++; | |
} | |
return false; | |
}); | |
Array.prototype.iterator = function() { | |
return { cur : 0, arr : this, hasNext : function() { | |
return this.cur < this.arr.length; | |
}, next : function() { | |
return this.arr[this.cur++]; | |
}} | |
} | |
var cca = String.prototype.charCodeAt; | |
String.prototype.cca = cca; | |
String.prototype.charCodeAt = function(i) { | |
var x = cca.call(this,i); | |
if(isNaN(x)) return null; | |
return x; | |
} | |
var oldsub = String.prototype.substr; | |
String.prototype.substr = function(pos,len) { | |
if(pos != null && pos != 0 && len != null && len < 0) return ""; | |
if(len == null) len = this.length; | |
if(pos < 0) { | |
pos = this.length + pos; | |
if(pos < 0) pos = 0; | |
} | |
else if(len < 0) { | |
len = (this.length + len) - pos; | |
} | |
return oldsub.apply(this,[pos,len]); | |
} | |
$closure = js.Boot.__closure; | |
} | |
js.Boot.prototype.__class__ = js.Boot; | |
phx.Contact = function(p) { if( p === $_ ) return; { | |
null; | |
}} | |
phx.Contact.__name__ = ["phx","Contact"]; | |
phx.Contact.prototype.bias = null; | |
phx.Contact.prototype.bounce = null; | |
phx.Contact.prototype.dist = null; | |
phx.Contact.prototype.hash = null; | |
phx.Contact.prototype.jBias = null; | |
phx.Contact.prototype.jnAcc = null; | |
phx.Contact.prototype.jtAcc = null; | |
phx.Contact.prototype.nMass = null; | |
phx.Contact.prototype.next = null; | |
phx.Contact.prototype.nx = null; | |
phx.Contact.prototype.ny = null; | |
phx.Contact.prototype.px = null; | |
phx.Contact.prototype.py = null; | |
phx.Contact.prototype.r1nx = null; | |
phx.Contact.prototype.r1ny = null; | |
phx.Contact.prototype.r1x = null; | |
phx.Contact.prototype.r1y = null; | |
phx.Contact.prototype.r2nx = null; | |
phx.Contact.prototype.r2ny = null; | |
phx.Contact.prototype.r2x = null; | |
phx.Contact.prototype.r2y = null; | |
phx.Contact.prototype.tMass = null; | |
phx.Contact.prototype.updated = null; | |
phx.Contact.prototype.__class__ = phx.Contact; | |
IntHash = function(p) { if( p === $_ ) return; { | |
this.h = {} | |
if(this.h.__proto__ != null) { | |
this.h.__proto__ = null; | |
delete(this.h.__proto__); | |
} | |
else null; | |
}} | |
IntHash.__name__ = ["IntHash"]; | |
IntHash.prototype.exists = function(key) { | |
return this.h[key] != null; | |
} | |
IntHash.prototype.get = function(key) { | |
return this.h[key]; | |
} | |
IntHash.prototype.h = null; | |
IntHash.prototype.iterator = function() { | |
return { ref : this.h, it : this.keys(), hasNext : function() { | |
return this.it.hasNext(); | |
}, next : function() { | |
var i = this.it.next(); | |
return this.ref[i]; | |
}} | |
} | |
IntHash.prototype.keys = function() { | |
var a = new Array(); | |
for( x in this.h ) | |
a.push(x); | |
; | |
return a.iterator(); | |
} | |
IntHash.prototype.remove = function(key) { | |
if(this.h[key] == null) return false; | |
delete(this.h[key]); | |
return true; | |
} | |
IntHash.prototype.set = function(key,value) { | |
this.h[key] = value; | |
} | |
IntHash.prototype.toString = function() { | |
var s = new StringBuf(); | |
s.b[s.b.length] = "{"; | |
var it = this.keys(); | |
{ var $it4 = it; | |
while( $it4.hasNext() ) { var i = $it4.next(); | |
{ | |
s.b[s.b.length] = i; | |
s.b[s.b.length] = " => "; | |
s.b[s.b.length] = Std.string(this.get(i)); | |
if(it.hasNext()) s.b[s.b.length] = ", "; | |
} | |
}} | |
s.b[s.b.length] = "}"; | |
return s.b.join(""); | |
} | |
IntHash.prototype.__class__ = IntHash; | |
haxe.FastCell = function(elt,next) { if( elt === $_ ) return; { | |
this.elt = elt; | |
this.next = next; | |
}} | |
haxe.FastCell.__name__ = ["haxe","FastCell"]; | |
haxe.FastCell.prototype.elt = null; | |
haxe.FastCell.prototype.next = null; | |
haxe.FastCell.prototype.__class__ = haxe.FastCell; | |
haxe.FastList = function(p) { if( p === $_ ) return; { | |
null; | |
}} | |
haxe.FastList.__name__ = ["haxe","FastList"]; | |
haxe.FastList.prototype.add = function(item) { | |
this.head = new haxe.FastCell(item,this.head); | |
} | |
haxe.FastList.prototype.first = function() { | |
return (this.head == null?null:this.head.elt); | |
} | |
haxe.FastList.prototype.head = null; | |
haxe.FastList.prototype.isEmpty = function() { | |
return (this.head == null); | |
} | |
haxe.FastList.prototype.iterator = function() { | |
var l = this.head; | |
return { hasNext : function() { | |
return l != null; | |
}, next : function() { | |
var k = l; | |
l = k.next; | |
return k.elt; | |
}} | |
} | |
haxe.FastList.prototype.pop = function() { | |
var k = this.head; | |
if(k == null) return null; | |
else { | |
this.head = k.next; | |
return k.elt; | |
} | |
} | |
haxe.FastList.prototype.remove = function(v) { | |
var prev = null; | |
var l = this.head; | |
while(l != null) { | |
if(l.elt == v) { | |
if(prev == null) this.head = l.next; | |
else prev.next = l.next; | |
break; | |
} | |
prev = l; | |
l = l.next; | |
} | |
return (l != null); | |
} | |
haxe.FastList.prototype.toString = function() { | |
var a = new Array(); | |
var l = this.head; | |
while(l != null) { | |
a.push(l.elt); | |
l = l.next; | |
} | |
return ("{" + a.join(",")) + "}"; | |
} | |
haxe.FastList.prototype.__class__ = haxe.FastList; | |
phx.Collision = function(p) { if( p === $_ ) return; { | |
null; | |
}} | |
phx.Collision.__name__ = ["phx","Collision"]; | |
phx.Collision.prototype.circle2circle = function(circle1,circle2,arb) { | |
return this.circle2circleQuery(arb,circle1.tC,circle2.tC,circle1.r,circle2.r); | |
} | |
phx.Collision.prototype.circle2circleQuery = function(arb,p1,p2,r1,r2) { | |
var minDist = r1 + r2; | |
var x = p2.x - p1.x; | |
var y = p2.y - p1.y; | |
var distSqr = x * x + y * y; | |
if(distSqr >= minDist * minDist) return false; | |
var dist = Math.sqrt(distSqr); | |
var invDist = ((dist < 1e-99)?0:1 / dist); | |
var df = 0.5 + (r1 - 0.5 * minDist) * invDist; | |
arb.injectContact(new phx.Vector(p1.x + x * df,p1.y + y * df),new phx.Vector(x * invDist,y * invDist),1.0,dist - minDist,0); | |
return true; | |
} | |
phx.Collision.prototype.circle2poly = function(circle,poly,arb) { | |
var a0 = null, v0 = null; | |
var a = poly.tAxes; | |
var v = poly.tVerts; | |
var min = -1e+99; | |
while(a != null) { | |
var dist = (a.n.dot(circle.tC) - a.d) - circle.r; | |
if(dist > 0) return false; | |
if(dist > min) { | |
min = dist; | |
a0 = a; | |
v0 = v; | |
} | |
a = a.next; | |
v = v.next; | |
} | |
var n = a0.n; | |
var v1 = ((v0.next == null)?poly.tVerts:v0.next); | |
var dt = n.cross(circle.tC); | |
if(dt < n.x * v1.y - n.y * v1.x) return this.circle2circleQuery(arb,circle.tC,v1,circle.r,0); | |
if(dt >= n.x * v0.y - n.y * v0.x) return this.circle2circleQuery(arb,circle.tC,v0,circle.r,0); | |
var nx = n.x * (circle.r + min * 0.5); | |
var ny = n.y * (circle.r + min * 0.5); | |
arb.injectContact(new phx.Vector(circle.tC.x - nx,circle.tC.y - ny),n,-1.,min,0); | |
return true; | |
} | |
phx.Collision.prototype.circle2segment = function(circle,seg,arb) { | |
var dn = seg.tN.dot(circle.tC) - seg.tA.dot(seg.tN); | |
var dist = (((dn < 0?-dn:dn)) - circle.r) - seg.r; | |
if(dist > 0) return false; | |
var dt = -seg.tN.cross(circle.tC); | |
var dtMin = -seg.tN.cross(seg.tA); | |
var dtMax = -seg.tN.cross(seg.tB); | |
if(dt < dtMin) { | |
if(dt < dtMin - circle.r) return false; | |
return this.circle2circleQuery(arb,circle.tC,seg.tA,circle.r,seg.r); | |
} | |
else { | |
if(dt < dtMax) { | |
var n = ((dn < 0)?seg.tN:seg.tN.mult(-1)); | |
var hdist = circle.r + dist * 0.5; | |
arb.injectContact(new phx.Vector(circle.tC.x + n.x * hdist,circle.tC.y + n.y * hdist),n,1.0,dist,0); | |
return true; | |
} | |
if(dt < dtMax + circle.r) return this.circle2circleQuery(arb,circle.tC,seg.tB,circle.r,seg.r); | |
} | |
return false; | |
} | |
phx.Collision.prototype.findPolyPointsBehindSegment = function(seg,poly,pDist,coef,arb) { | |
var dta = seg.tN.cross(seg.tA); | |
var dtb = seg.tN.cross(seg.tB); | |
var n = new phx.Vector(seg.tN.x * coef,seg.tN.y * coef); | |
var k = seg.tN.dot(seg.tA) * coef; | |
var v = poly.tVerts; | |
var i = 2; | |
while(v != null) { | |
if(v.x * n.x + v.y * n.y < k + seg.r) { | |
var dt = seg.tN.cross(v); | |
if(dta >= dt && dt >= dtb) arb.injectContact(v,n,1.0,pDist,i); | |
} | |
i++; | |
v = v.next; | |
} | |
} | |
phx.Collision.prototype.findVerts = function(arb,poly1,poly2,n,nCoef,dist) { | |
var id = ((poly1.id > poly2.id)?0:65000); | |
var c = 0; | |
var v = poly1.tVerts; | |
while(v != null) { | |
if(this.polyContainsPoint(poly2,v)) { | |
arb.injectContact(v,n.n,nCoef,dist,id); | |
if(++c > 1) return; | |
} | |
id++; | |
v = v.next; | |
} | |
id = ((poly1.id > poly2.id)?65000:0); | |
v = poly2.tVerts; | |
while(v != null) { | |
if(this.polyContainsPoint(poly1,v)) { | |
arb.injectContact(v,n.n,nCoef,dist,id); | |
if(++c > 1) return; | |
} | |
id++; | |
v = v.next; | |
} | |
} | |
phx.Collision.prototype.poly2poly = function(shape1,shape2,arb) { | |
var max1 = -1e+99; | |
var axis1 = null; | |
var a = shape1.tAxes; | |
while(a != null) { | |
var min = this.polyAxisProject(shape2,a.n,a.d); | |
if(min > 0) return false; | |
if(min > max1) { | |
max1 = min; | |
axis1 = a; | |
} | |
a = a.next; | |
} | |
var max2 = -1e+99; | |
var axis2 = null; | |
a = shape2.tAxes; | |
while(a != null) { | |
var min = this.polyAxisProject(shape1,a.n,a.d); | |
if(min > 0) return false; | |
if(min > max2) { | |
max2 = min; | |
axis2 = a; | |
} | |
a = a.next; | |
} | |
if(max1 > max2) this.findVerts(arb,shape1,shape2,axis1,1,max1); | |
else this.findVerts(arb,shape1,shape2,axis2,-1,max2); | |
return true; | |
} | |
phx.Collision.prototype.polyAxisProject = function(s,n,d) { | |
var v = s.tVerts; | |
var min = 1e99; | |
while(v != null) { | |
var k = n.x * v.x + n.y * v.y; | |
if(k < min) min = k; | |
v = v.next; | |
} | |
return min - d; | |
} | |
phx.Collision.prototype.polyContainsPoint = function(s,p) { | |
var a = s.tAxes; | |
while(a != null) { | |
if(a.n.dot(p) > a.d) return false; | |
a = a.next; | |
} | |
return true; | |
} | |
phx.Collision.prototype.segAxisProject = function(seg,n,d) { | |
var vA = n.dot(seg.tA) - seg.r; | |
var vB = n.dot(seg.tB) - seg.r; | |
return (vA < vB?vA - d:vB - d); | |
} | |
phx.Collision.prototype.segment2poly = function(seg,poly,arb) { | |
var segD = seg.tN.dot(seg.tA); | |
var minNorm = this.polyAxisProject(poly,seg.tN,segD) - seg.r; | |
var minNeg = this.polyAxisProject(poly,seg.tNneg,-segD) - seg.r; | |
if(minNeg > 0 || minNorm > 0) return false; | |
var a = poly.tAxes; | |
var polyMin = -1e+99; | |
var axis = null; | |
while(a != null) { | |
var dist = this.segAxisProject(seg,a.n,a.d); | |
if(dist > 0) return false; | |
if(dist > polyMin) { | |
polyMin = dist; | |
axis = a; | |
} | |
a = a.next; | |
} | |
var n = axis.n; | |
var va = new phx.Vector(seg.tA.x - n.x * seg.r,seg.tA.y - n.y * seg.r); | |
var vb = new phx.Vector(seg.tB.x - n.x * seg.r,seg.tB.y - n.y * seg.r); | |
if(this.polyContainsPoint(poly,va)) arb.injectContact(va,n,-1.,polyMin,0); | |
if(this.polyContainsPoint(poly,vb)) arb.injectContact(vb,n,-1.,polyMin,1); | |
if(minNorm >= polyMin || minNeg >= polyMin) { | |
if(minNorm > minNeg) this.findPolyPointsBehindSegment(seg,poly,minNorm,1.0,arb); | |
else this.findPolyPointsBehindSegment(seg,poly,minNeg,-1.,arb); | |
} | |
return true; | |
} | |
phx.Collision.prototype.testPoint = function(s,p) { | |
return (function($this) { | |
var $r; | |
switch(s.type) { | |
case 2:{ | |
$r = $this.polyContainsPoint(s.polygon,p); | |
}break; | |
case 0:{ | |
$r = (function($this) { | |
var $r; | |
var c = s.circle; | |
var dx = c.tC.x - p.x; | |
var dy = c.tC.y - p.y; | |
$r = (dx * dx + dy * dy) <= (c.r * c.r); | |
return $r; | |
}($this)); | |
}break; | |
default:{ | |
$r = false; | |
}break; | |
} | |
return $r; | |
}(this)); | |
} | |
phx.Collision.prototype.testShapes = function(s1,s2,a) { | |
return (s1.type == 2 && s2.type == 2?this.poly2poly(s1.polygon,s2.polygon,a):(s1.type == 0?(s2.type == 2?this.circle2poly(s1.circle,s2.polygon,a):(s2.type == 0?this.circle2circle(s1.circle,s2.circle,a):this.circle2segment(s1.circle,s2.segment,a))):(s1.type == 1 && s2.type == 2?this.segment2poly(s1.segment,s2.polygon,a):false))); | |
} | |
phx.Collision.prototype.__class__ = phx.Collision; | |
phx.col.IAABB = function(left,top,right,bottom) { if( left === $_ ) return; { | |
this.l = left; | |
this.t = top; | |
this.r = right; | |
this.b = bottom; | |
}} | |
phx.col.IAABB.__name__ = ["phx","col","IAABB"]; | |
phx.col.IAABB.prototype.b = null; | |
phx.col.IAABB.prototype.l = null; | |
phx.col.IAABB.prototype.r = null; | |
phx.col.IAABB.prototype.t = null; | |
phx.col.IAABB.prototype.toString = function() { | |
return ((((((("[l=" + this.l) + " b=") + this.b) + " r=") + this.r) + " t=") + this.t) + "]"; | |
} | |
phx.col.IAABB.prototype.__class__ = phx.col.IAABB; | |
phx.World = function(worldBoundary,broadphase) { if( worldBoundary === $_ ) return; { | |
this.bodies = new haxe.FastList(); | |
this.joints = new haxe.FastList(); | |
this.arbiters = new haxe.FastList(); | |
this.properties = new IntHash(); | |
this.gravity = new phx.Vector(0,0); | |
this.stamp = 0; | |
this.debug = false; | |
this.useIslands = true; | |
this.sleepEpsilon = 0.002; | |
this.boundsCheck = 120; | |
this.allocator = new phx.Allocator(); | |
this.collision = new phx.Collision(); | |
this.staticBody = new phx.Body(0,0); | |
this.staticBody.island = new phx.Island(this); | |
this.staticBody.updatePhysics(); | |
this.box = worldBoundary; | |
this.broadphase = broadphase; | |
broadphase.init(this.box,this,this.staticBody); | |
this.timer = new phx.Timer(); | |
this.islands = new haxe.FastList(); | |
this.waitingBodies = new haxe.FastList(); | |
}} | |
phx.World.__name__ = ["phx","World"]; | |
phx.World.prototype.activate = function(b) { | |
var i = b.island; | |
b.motion = this.sleepEpsilon * 2; | |
if(i != null && i.sleeping) { | |
i.sleeping = false; | |
{ var $it5 = i.arbiters.iterator(); | |
while( $it5.hasNext() ) { var a = $it5.next(); | |
a.sleeping = false; | |
}} | |
} | |
} | |
phx.World.prototype.activeCollisions = null; | |
phx.World.prototype.addBody = function(b) { | |
this.bodies.add(b); | |
this.waitingBodies.add(b); | |
b.properties.count++; | |
b.motion = this.sleepEpsilon * 2; | |
this.properties.set(b.properties.id,b.properties); | |
if(b.isStatic) { | |
b.mass = Math.POSITIVE_INFINITY; | |
b.invMass = 0; | |
b.inertia = Math.POSITIVE_INFINITY; | |
b.invInertia = 0; | |
{ var $it6 = b.shapes.iterator(); | |
while( $it6.hasNext() ) { var s = $it6.next(); | |
s.update(); | |
}} | |
} | |
else b.updatePhysics(); | |
{ var $it7 = b.shapes.iterator(); | |
while( $it7.hasNext() ) { var s = $it7.next(); | |
this.broadphase.addShape(s); | |
}} | |
} | |
phx.World.prototype.addJoint = function(j) { | |
this.joints.add(j); | |
} | |
phx.World.prototype.addStaticShape = function(s) { | |
this.staticBody.addShape(s); | |
s.update(); | |
this.broadphase.addShape(s); | |
return s; | |
} | |
phx.World.prototype.allocator = null; | |
phx.World.prototype.arbiters = null; | |
phx.World.prototype.bodies = null; | |
phx.World.prototype.boundsCheck = null; | |
phx.World.prototype.box = null; | |
phx.World.prototype.broadphase = null; | |
phx.World.prototype.buildIslands = function() { | |
var stack = new haxe.FastList(); | |
{ var $it8 = this.waitingBodies.iterator(); | |
while( $it8.hasNext() ) { var b = $it8.next(); | |
{ | |
if(b.island != null || b.isStatic) continue; | |
var i = this.allocator.allocIsland(this); | |
this.islands.add(i); | |
stack.head = new haxe.FastCell(b,stack.head); | |
b.island = i; | |
while(true) { | |
var b1 = stack.pop(); | |
if(b1 == null) break; | |
i.bodies.add(b1); | |
{ var $it9 = b1.arbiters.iterator(); | |
while( $it9.hasNext() ) { var a = $it9.next(); | |
{ | |
if(a.island != null) continue; | |
i.arbiters.add(a); | |
a.island = i; | |
var b11 = a.s1.body; | |
if(b11.island == null && !b11.isStatic) { | |
b11.island = i; | |
stack.head = new haxe.FastCell(b11,stack.head); | |
} | |
var b2 = a.s2.body; | |
if(b2.island == null && !b2.isStatic) { | |
b2.island = i; | |
stack.head = new haxe.FastCell(b2,stack.head); | |
} | |
} | |
}} | |
} | |
} | |
}} | |
this.waitingBodies = new haxe.FastList(); | |
} | |
phx.World.prototype.checkBody = function(b,i) { | |
if(b.island != i) throw "ASSERT"; | |
{ var $it10 = b.arbiters.iterator(); | |
while( $it10.hasNext() ) { var a = $it10.next(); | |
{ | |
if(a.island != i) throw "ASSERT"; | |
if(a.s1.body.island != i && !a.s1.body.isStatic) throw "ASSERT"; | |
if(a.s2.body.island != i && !a.s2.body.isStatic) throw "ASSERT"; | |
} | |
}} | |
} | |
phx.World.prototype.checkDatas = function() { | |
{ var $it11 = this.waitingBodies.iterator(); | |
while( $it11.hasNext() ) { var b = $it11.next(); | |
this.checkBody(b,null); | |
}} | |
{ var $it12 = this.islands.iterator(); | |
while( $it12.hasNext() ) { var i = $it12.next(); | |
{ var $it13 = i.bodies.iterator(); | |
while( $it13.hasNext() ) { var b = $it13.next(); | |
this.checkBody(b,i); | |
}} | |
}} | |
} | |
phx.World.prototype.collision = null; | |
phx.World.prototype.debug = null; | |
phx.World.prototype.destroyIsland = function(i) { | |
if(i == null || !this.useIslands) return; | |
if(!this.islands.remove(i)) return; | |
{ var $it14 = i.bodies.iterator(); | |
while( $it14.hasNext() ) { var b = $it14.next(); | |
{ | |
b.island = null; | |
this.waitingBodies.add(b); | |
} | |
}} | |
{ var $it15 = i.arbiters.iterator(); | |
while( $it15.hasNext() ) { var a = $it15.next(); | |
{ | |
a.sleeping = false; | |
a.island = null; | |
} | |
}} | |
{ var $it16 = i.joints.iterator(); | |
while( $it16.hasNext() ) { var j = $it16.next(); | |
j.island = null; | |
}} | |
this.allocator.freeIsland(i); | |
} | |
phx.World.prototype.gravity = null; | |
phx.World.prototype.islands = null; | |
phx.World.prototype.joints = null; | |
phx.World.prototype.onCollide = function(s1,s2) { | |
var b1 = s1.body; | |
var b2 = s2.body; | |
this.testedCollisions++; | |
if(b1 == b2 || (s1.groups & s2.groups) == 0) return false; | |
if(s1.type > s2.type) { | |
var tmp = s1; | |
s1 = s2; | |
s2 = tmp; | |
} | |
var pairFound = true; | |
var a = null; | |
{ var $it17 = b1.arbiters.iterator(); | |
while( $it17.hasNext() ) { var arb = $it17.next(); | |
if((arb.s1 == s1 && arb.s2 == s2) || (arb.s1 == s2 && arb.s2 == s1)) { | |
a = arb; | |
break; | |
} | |
}} | |
if(a == null) { | |
a = new phx.Arbiter(this.allocator); | |
a.assign(s1,s2); | |
pairFound = false; | |
} | |
else if(a.sleeping) { | |
a.stamp = this.stamp; | |
return true; | |
} | |
else if(a.stamp == this.stamp) return true; | |
a.sleeping = false; | |
this.activeCollisions++; | |
var col = this.collision.testShapes(s1,s2,a); | |
if(col) { | |
a.stamp = this.stamp; | |
if(pairFound) { | |
a.s1 = s1; | |
a.s2 = s2; | |
} | |
else { | |
this.arbiters.add(a); | |
var i1 = b1.island; | |
if(i1 != b2.island) { | |
this.destroyIsland(i1); | |
this.destroyIsland(b2.island); | |
} | |
else if(i1 != null) { | |
i1.arbiters.add(a); | |
a.island = i1; | |
} | |
s2.body.arbiters.add(a); | |
s1.body.arbiters.add(a); | |
} | |
} | |
else if(!pairFound) null; | |
return col; | |
} | |
phx.World.prototype.properties = null; | |
phx.World.prototype.removeBody = function(b) { | |
if(!this.bodies.remove(b)) return false; | |
b.properties.count--; | |
if(b.properties.count == 0) this.properties.remove(b.properties.id); | |
{ var $it18 = b.shapes.iterator(); | |
while( $it18.hasNext() ) { var s = $it18.next(); | |
this.broadphase.removeShape(s); | |
}} | |
this.destroyIsland(b.island); | |
this.waitingBodies.remove(b); | |
{ var $it19 = b.arbiters.iterator(); | |
while( $it19.hasNext() ) { var a = $it19.next(); | |
{ | |
var b1 = a.s1.body; | |
((b1 == b?a.s2.body:b1)).arbiters.remove(a); | |
} | |
}} | |
return true; | |
} | |
phx.World.prototype.removeJoint = function(j) { | |
this.joints.remove(j); | |
this.destroyIsland(j.b1.island); | |
this.destroyIsland(j.b2.island); | |
} | |
phx.World.prototype.removeStaticShape = function(s) { | |
this.staticBody.removeShape(s); | |
this.broadphase.removeShape(s); | |
{ var $it20 = this.staticBody.arbiters.iterator(); | |
while( $it20.hasNext() ) { var a = $it20.next(); | |
{ | |
if(a.s1 == s || a.s2 == s) { | |
var body = ((a.s1.body == this.staticBody?a.s2.body:a.s1.body)); | |
body.arbiters.remove(a); | |
if(body.island != null) body.island.arbiters.remove(a); | |
this.staticBody.arbiters.remove(a); | |
this.arbiters.remove(a); | |
} | |
} | |
}} | |
} | |
phx.World.prototype.setBroadPhase = function(bf) { | |
bf.init(this.box,this,this.staticBody); | |
{ var $it21 = this.bodies.iterator(); | |
while( $it21.hasNext() ) { var b = $it21.next(); | |
{ | |
{ var $it22 = b.shapes.iterator(); | |
while( $it22.hasNext() ) { var s = $it22.next(); | |
{ | |
this.broadphase.removeShape(s); | |
bf.addShape(s); | |
} | |
}} | |
} | |
}} | |
{ var $it23 = this.staticBody.shapes.iterator(); | |
while( $it23.hasNext() ) { var s = $it23.next(); | |
{ | |
this.broadphase.removeShape(s); | |
bf.addShape(s); | |
} | |
}} | |
this.broadphase = bf; | |
} | |
phx.World.prototype.sleepEpsilon = null; | |
phx.World.prototype.stamp = null; | |
phx.World.prototype.staticBody = null; | |
phx.World.prototype.step = function(dt,iterations) { | |
if(dt < 1e-99) dt = 0; | |
this.timer.start("all"); | |
var invDt = (dt == 0?0:1 / dt); | |
{ var $it24 = this.properties.iterator(); | |
while( $it24.hasNext() ) { var p = $it24.next(); | |
{ | |
p.lfdt = Math.pow(p.linearFriction,dt); | |
p.afdt = Math.pow(p.angularFriction,dt); | |
} | |
}} | |
this.timer.start("island"); | |
if(this.useIslands) this.buildIslands(); | |
else { | |
var i = this.allocator.allocIsland(this); | |
i.bodies = this.bodies; | |
i.arbiters = this.arbiters; | |
i.joints = this.joints; | |
this.sleepEpsilon = 0; | |
this.islands = new haxe.FastList(); | |
this.islands.add(i); | |
} | |
if(this.debug) this.checkDatas(); | |
this.timer.stop(); | |
this.timer.start("solve"); | |
{ var $it25 = this.islands.iterator(); | |
while( $it25.hasNext() ) { var i = $it25.next(); | |
if(!i.sleeping) i.solve(dt,invDt,iterations); | |
}} | |
this.timer.stop(); | |
{ var $it26 = this.arbiters.iterator(); | |
while( $it26.hasNext() ) { var a = $it26.next(); | |
if(this.stamp - a.stamp > 3) { | |
this.allocator.freeAllContacts(a.contacts); | |
var b1 = a.s1.body; | |
var b2 = a.s2.body; | |
b1.arbiters.remove(a); | |
b2.arbiters.remove(a); | |
this.arbiters.remove(a); | |
null; | |
this.destroyIsland(b1.island); | |
this.destroyIsland(b2.island); | |
} | |
}} | |
this.timer.start("col"); | |
this.broadphase.commit(); | |
this.testedCollisions = 0; | |
this.activeCollisions = 0; | |
if(this.debug && !this.broadphase.validate()) throw "INVALID BF DATAS"; | |
this.broadphase.collide(); | |
this.timer.stop(); | |
this.stamp++; | |
if(this.boundsCheck > 0 && this.stamp % this.boundsCheck == 0) { | |
var tmp = new haxe.FastList(); | |
{ var $it27 = this.bodies.iterator(); | |
while( $it27.hasNext() ) { var b = $it27.next(); | |
tmp.head = new haxe.FastCell(b,tmp.head); | |
}} | |
{ var $it28 = this.broadphase.pick(this.box).iterator(); | |
while( $it28.hasNext() ) { var s = $it28.next(); | |
tmp.remove(s.body); | |
}} | |
{ var $it29 = tmp.iterator(); | |
while( $it29.hasNext() ) { var b = $it29.next(); | |
if(this.removeBody(b)) b.onDestroy(); | |
}} | |
} | |
this.timer.stop(); | |
} | |
phx.World.prototype.sync = function(b) { | |
{ var $it30 = b.shapes.iterator(); | |
while( $it30.hasNext() ) { var s = $it30.next(); | |
{ | |
s.update(); | |
this.broadphase.syncShape(s); | |
} | |
}} | |
} | |
phx.World.prototype.testedCollisions = null; | |
phx.World.prototype.timer = null; | |
phx.World.prototype.useIslands = null; | |
phx.World.prototype.waitingBodies = null; | |
phx.World.prototype.__class__ = phx.World; | |
phx.World.__interfaces__ = [phx.col.BroadCallback]; | |
Hash = function(p) { if( p === $_ ) return; { | |
this.h = {} | |
if(this.h.__proto__ != null) { | |
this.h.__proto__ = null; | |
delete(this.h.__proto__); | |
} | |
else null; | |
}} | |
Hash.__name__ = ["Hash"]; | |
Hash.prototype.exists = function(key) { | |
try { | |
key = "$" + key; | |
return this.hasOwnProperty.call(this.h,key); | |
} | |
catch( $e31 ) { | |
{ | |
var e = $e31; | |
{ | |
for(var i in this.h) | |
if( i == key ) return true; | |
; | |
return false; | |
} | |
} | |
} | |
} | |
Hash.prototype.get = function(key) { | |
return this.h["$" + key]; | |
} | |
Hash.prototype.h = null; | |
Hash.prototype.iterator = function() { | |
return { ref : this.h, it : this.keys(), hasNext : function() { | |
return this.it.hasNext(); | |
}, next : function() { | |
var i = this.it.next(); | |
return this.ref["$" + i]; | |
}} | |
} | |
Hash.prototype.keys = function() { | |
var a = new Array(); | |
for(var i in this.h) | |
a.push(i.substr(1)); | |
; | |
return a.iterator(); | |
} | |
Hash.prototype.remove = function(key) { | |
if(!this.exists(key)) return false; | |
delete(this.h["$" + key]); | |
return true; | |
} | |
Hash.prototype.set = function(key,value) { | |
this.h["$" + key] = value; | |
} | |
Hash.prototype.toString = function() { | |
var s = new StringBuf(); | |
s.b[s.b.length] = "{"; | |
var it = this.keys(); | |
{ var $it32 = it; | |
while( $it32.hasNext() ) { var i = $it32.next(); | |
{ | |
s.b[s.b.length] = i; | |
s.b[s.b.length] = " => "; | |
s.b[s.b.length] = Std.string(this.get(i)); | |
if(it.hasNext()) s.b[s.b.length] = ", "; | |
} | |
}} | |
s.b[s.b.length] = "}"; | |
return s.b.join(""); | |
} | |
Hash.prototype.__class__ = Hash; | |
phx.Island = function(w) { if( w === $_ ) return; { | |
this.id = phx.Island.ID++; | |
this.world = w; | |
this.sleeping = false; | |
this.bodies = new haxe.FastList(); | |
this.joints = new haxe.FastList(); | |
this.arbiters = new haxe.FastList(); | |
}} | |
phx.Island.__name__ = ["phx","Island"]; | |
phx.Island.prototype.allocNext = null; | |
phx.Island.prototype.arbiters = null; | |
phx.Island.prototype.bodies = null; | |
phx.Island.prototype.energy = null; | |
phx.Island.prototype.id = null; | |
phx.Island.prototype.joints = null; | |
phx.Island.prototype.sleeping = null; | |
phx.Island.prototype.solve = function(dt,invDt,iterations) { | |
var g = this.world.gravity; | |
{ var $it33 = this.bodies.iterator(); | |
while( $it33.hasNext() ) { var b = $it33.next(); | |
{ | |
var v = b.v; | |
var p = b.properties; | |
v.x = v.x * p.lfdt + (g.x + b.f.x * b.invMass) * dt; | |
v.y = v.y * p.lfdt + (g.y + b.f.y * b.invMass) * dt; | |
b.w = b.w * p.afdt + (b.t * b.invInertia) * dt; | |
} | |
}} | |
{ var $it34 = this.arbiters.iterator(); | |
while( $it34.hasNext() ) { var a = $it34.next(); | |
a.preStep(dt); | |
}} | |
{ var $it35 = this.joints.iterator(); | |
while( $it35.hasNext() ) { var joint = $it35.next(); | |
joint.preStep(invDt); | |
}} | |
{ | |
var _g = 0; | |
while(_g < iterations) { | |
var i = _g++; | |
{ var $it36 = this.arbiters.iterator(); | |
while( $it36.hasNext() ) { var a = $it36.next(); | |
a.applyImpulse(); | |
}} | |
{ var $it37 = this.joints.iterator(); | |
while( $it37.hasNext() ) { var j = $it37.next(); | |
j.applyImpuse(); | |
}} | |
} | |
} | |
var bf = this.world.broadphase; | |
var e = 0.; | |
var n = 0; | |
var M = Math; | |
{ var $it38 = this.bodies.iterator(); | |
while( $it38.hasNext() ) { var b = $it38.next(); | |
{ | |
var motion = (b.v.x * b.v.x + b.v.y * b.v.y) + (b.w * b.w) * 30.0; | |
if(motion > b.properties.maxMotion) { | |
var k = Math.sqrt(b.properties.maxMotion / motion); | |
b.v.x *= k; | |
b.v.y *= k; | |
b.w *= k; | |
motion *= k * k; | |
} | |
b.x += b.v.x * dt + b.v_bias.x; | |
b.y += b.v.y * dt + b.v_bias.y; | |
b.a += b.w * dt + b.w_bias; | |
b.rcos = M.cos(b.a); | |
b.rsin = M.sin(b.a); | |
b.motion = b.motion * 0.95 + (1 - 0.95) * motion; | |
b.f.x = b.f.y = b.t = 0; | |
b.v_bias.x = b.v_bias.y = b.w_bias = 0; | |
e += b.motion; | |
n++; | |
{ var $it39 = b.shapes.iterator(); | |
while( $it39.hasNext() ) { var s = $it39.next(); | |
{ | |
s.update(); | |
bf.syncShape(s); | |
} | |
}} | |
} | |
}} | |
this.energy = e / M.sqrt(n); | |
if(this.energy < this.world.sleepEpsilon) { | |
{ var $it40 = this.bodies.iterator(); | |
while( $it40.hasNext() ) { var b = $it40.next(); | |
{ | |
b.v.x = 0; | |
b.v.y = 0; | |
b.w = 0; | |
} | |
}} | |
{ var $it41 = this.arbiters.iterator(); | |
while( $it41.hasNext() ) { var a = $it41.next(); | |
a.sleeping = true; | |
}} | |
this.sleeping = true; | |
} | |
} | |
phx.Island.prototype.world = null; | |
phx.Island.prototype.__class__ = phx.Island; | |
Main = function() { } | |
Main.__name__ = ["Main"]; | |
Main.board = null; | |
Main.canvas = null; | |
Main.getCanvas = function(canvasId) { | |
var element = js.Lib.document.getElementById(canvasId); | |
if(element != null && js.Lib.isIE) { | |
try { | |
element = js.Lib.window.G_vmlCanvasManager.initElement(element); | |
} | |
catch( $e42 ) { | |
{ | |
var e = $e42; | |
{ | |
js.Lib.alert("G_vmlCanvasManager.initElement error - excanvas might not be initialized"); | |
} | |
} | |
} | |
} | |
return element; | |
} | |
Main.tick = function() { | |
Main.board.tick(); | |
var ctx = Main.canvas.getContext("2d"); | |
Main.board.draw(ctx); | |
} | |
Main.main = function() { | |
Main.canvas = Main.getCanvas("hellCanvas"); | |
Main.board = new Board(); | |
js.Lib.document.onkeydown = $closure(Main.board,"onKeyDown"); | |
js.Lib.document.onkeyup = $closure(Main.board,"onKeyUp"); | |
var timer = new haxe.Timer(Math.round(1000 / 30)); | |
timer.run = $closure(Main,"tick"); | |
} | |
Main.prototype.__class__ = Main; | |
$Main = function() { } | |
$Main.__name__ = ["@Main"]; | |
$Main.prototype.__class__ = $Main; | |
$_ = {} | |
js.Boot.__res = {} | |
js.Boot.__init(); | |
{ | |
Date.now = function() { | |
return new Date(); | |
} | |
Date.fromTime = function(t) { | |
var d = new Date(); | |
d["setTime"](t); | |
return d; | |
} | |
Date.fromString = function(s) { | |
switch(s.length) { | |
case 8:{ | |
var k = s.split(":"); | |
var d = new Date(); | |
d["setTime"](0); | |
d["setUTCHours"](k[0]); | |
d["setUTCMinutes"](k[1]); | |
d["setUTCSeconds"](k[2]); | |
return d; | |
}break; | |
case 10:{ | |
var k = s.split("-"); | |
return new Date(k[0],k[1] - 1,k[2],0,0,0); | |
}break; | |
case 19:{ | |
var k = s.split(" "); | |
var y = k[0].split("-"); | |
var t = k[1].split(":"); | |
return new Date(y[0],y[1] - 1,y[2],t[0],t[1],t[2]); | |
}break; | |
default:{ | |
throw "Invalid date format : " + s; | |
}break; | |
} | |
} | |
Date.prototype["toString"] = function() { | |
var date = this; | |
var m = date.getMonth() + 1; | |
var d = date.getDate(); | |
var h = date.getHours(); | |
var mi = date.getMinutes(); | |
var s = date.getSeconds(); | |
return (((((((((date.getFullYear() + "-") + ((m < 10?"0" + m:"" + m))) + "-") + ((d < 10?"0" + d:"" + d))) + " ") + ((h < 10?"0" + h:"" + h))) + ":") + ((mi < 10?"0" + mi:"" + mi))) + ":") + ((s < 10?"0" + s:"" + s)); | |
} | |
Date.prototype.__class__ = Date; | |
Date.__name__ = ["Date"]; | |
} | |
{ | |
String.prototype.__class__ = String; | |
String.__name__ = ["String"]; | |
Array.prototype.__class__ = Array; | |
Array.__name__ = ["Array"]; | |
Int = { __name__ : ["Int"]} | |
Dynamic = { __name__ : ["Dynamic"]} | |
Float = Number; | |
Float.__name__ = ["Float"]; | |
Bool = { __ename__ : ["Bool"]} | |
Class = { __name__ : ["Class"]} | |
Enum = { } | |
Void = { __ename__ : ["Void"]} | |
} | |
{ | |
Math.NaN = Number["NaN"]; | |
Math.NEGATIVE_INFINITY = Number["NEGATIVE_INFINITY"]; | |
Math.POSITIVE_INFINITY = Number["POSITIVE_INFINITY"]; | |
Math.isFinite = function(i) { | |
return isFinite(i); | |
} | |
Math.isNaN = function(i) { | |
return isNaN(i); | |
} | |
Math.__name__ = ["Math"]; | |
} | |
{ | |
js.Lib.document = document; | |
js.Lib.window = window; | |
onerror = function(msg,url,line) { | |
var f = js.Lib.onerror; | |
if( f == null ) | |
return false; | |
return f(msg,[url+":"+line]); | |
} | |
} | |
phx.Shape.ID = 0; | |
phx.Shape.CIRCLE = 0; | |
phx.Shape.SEGMENT = 1; | |
phx.Shape.POLYGON = 2; | |
phx.Body.ID = 0; | |
phx.Properties.PID = 0; | |
phx.Const.FMAX = 1e99; | |
phx.Const.EPSILON = 1e-99; | |
phx.Const.WORLD_BOUNDS_FREQ = 120; | |
phx.Const.DEFAULT_MATERIAL = new phx.Material(0.001,0.81,1); | |
phx.Const.DEFAULT_PROPERTIES = new phx.Properties(0.999,0.999,0.1,1e99,0.5); | |
phx.Const.SLEEP_BIAS = 0.95; | |
phx.Const.DEFAULT_SLEEP_EPSILON = 0.002; | |
phx.Const.WAKEUP_FACTOR = 2; | |
phx.Const.ANGULAR_TO_LINEAR = 30.0; | |
haxe.Timer.arr = new Array(); | |
js.Lib.onerror = null; | |
phx.Island.ID = 0; | |
$Main.init = Main.main(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment