mirror of
https://github.com/wassname/phaser.git
synced 2026-07-14 01:10:16 +08:00
Compiling, but not yet running correctly. Need to add body renderer next.
This commit is contained in:
@@ -17,17 +17,24 @@ module Phaser.Physics.Advanced {
|
||||
|
||||
export class Body {
|
||||
|
||||
constructor(sprite: Phaser.Sprite, type: number) {
|
||||
|
||||
this.sprite = sprite;
|
||||
this.game = sprite.game;
|
||||
constructor(sprite: Phaser.Sprite, type: number, x?: number = 0, y?: number = 0) {
|
||||
|
||||
this.id = Phaser.Physics.Advanced.Manager.bodyCounter++;
|
||||
this.name = 'body' + this.id;
|
||||
this.type = type;
|
||||
|
||||
this.position = new Phaser.Vec2(sprite.x, sprite.y);
|
||||
this.angle = sprite.rotation;
|
||||
if (sprite)
|
||||
{
|
||||
this.sprite = sprite;
|
||||
this.game = sprite.game;
|
||||
this.position = new Phaser.Vec2(sprite.x, sprite.y);
|
||||
this.angle = sprite.rotation;
|
||||
}
|
||||
else
|
||||
{
|
||||
this.position = new Phaser.Vec2(x, y);
|
||||
this.angle = 0;
|
||||
}
|
||||
|
||||
this.transform = new Phaser.Transform(this.position, this.angle);
|
||||
this.centroid = new Phaser.Vec2;
|
||||
@@ -136,8 +143,22 @@ module Phaser.Physics.Advanced {
|
||||
public stepCount = 0;
|
||||
public space: Space;
|
||||
|
||||
// duplicate = Util function
|
||||
// serialize = Util function
|
||||
/*
|
||||
public duplicate() {
|
||||
|
||||
var body = new Body(this.type, this.transform.t, this.angle);
|
||||
|
||||
for (var i = 0; i < this.shapes.length; i++)
|
||||
{
|
||||
body.addShape(this.shapes[i].duplicate());
|
||||
}
|
||||
|
||||
body.resetMassData();
|
||||
|
||||
return body;
|
||||
|
||||
}
|
||||
*/
|
||||
|
||||
public get isDisabled(): bool {
|
||||
return this.type == Phaser.Types.BODY_DISABLED ? true : false;
|
||||
@@ -274,6 +295,8 @@ module Phaser.Physics.Advanced {
|
||||
var mass = shape.area() * shape.density;
|
||||
var inertia = shape.inertia(mass);
|
||||
|
||||
console.log('rmd', centroid, shape);
|
||||
|
||||
totalMassCentroid.multiplyAddByScalar(centroid, mass);
|
||||
totalMass += mass;
|
||||
totalInertia += inertia;
|
||||
@@ -335,7 +358,7 @@ module Phaser.Physics.Advanced {
|
||||
|
||||
}
|
||||
|
||||
private _tempVec2: Phaser.Vec2;
|
||||
private _tempVec2: Phaser.Vec2 = new Phaser.Vec2;
|
||||
|
||||
public updateVelocity(gravity, dt, damping) {
|
||||
|
||||
|
||||
@@ -17,6 +17,8 @@ module Phaser.Physics.Advanced {
|
||||
|
||||
this.game = game;
|
||||
|
||||
this.space = new Space();
|
||||
|
||||
Manager.collision = new Collision();
|
||||
|
||||
}
|
||||
@@ -59,6 +61,92 @@ module Phaser.Physics.Advanced {
|
||||
public static bodyCounter: number = 0;
|
||||
public static jointCounter: number = 0;
|
||||
public static shapeCounter: number = 0;
|
||||
|
||||
public space: Space;
|
||||
public lastTime: number = 0;
|
||||
public frameRateHz: number = 60;
|
||||
public timeDelta: number = 0;
|
||||
public paused: bool = false;
|
||||
public step: bool = false; // step through the simulation (i.e. per click)
|
||||
public velocityIterations: number = 8;
|
||||
public positionIterations: number = 4;
|
||||
public allowSleep: bool = true;
|
||||
public warmStarting: bool = true;
|
||||
|
||||
public update() {
|
||||
|
||||
var time = Date.now();
|
||||
var frameTime = (time - this.lastTime) / 1000;
|
||||
this.lastTime = time;
|
||||
|
||||
// if rAf - why?
|
||||
frameTime = Math.floor(frameTime * 60 + 0.5) / 60;
|
||||
|
||||
//if (!mouseDown)
|
||||
//{
|
||||
// var p = canvasToWorld(mousePosition);
|
||||
// var body = space.findBodyByPoint(p);
|
||||
// //domCanvas.style.cursor = body ? "pointer" : "default";
|
||||
//}
|
||||
|
||||
if (!this.paused || this.step)
|
||||
{
|
||||
var h = 1 / this.frameRateHz;
|
||||
|
||||
this.timeDelta += frameTime;
|
||||
|
||||
if (this.step)
|
||||
{
|
||||
this.step = false;
|
||||
this.timeDelta = h;
|
||||
}
|
||||
|
||||
for (var maxSteps = 4; maxSteps > 0 && this.timeDelta >= h; maxSteps--)
|
||||
{
|
||||
this.space.step(h, this.velocityIterations, this.positionIterations, this.warmStarting, this.allowSleep);
|
||||
this.timeDelta -= h;
|
||||
}
|
||||
|
||||
if (this.timeDelta > h)
|
||||
{
|
||||
this.timeDelta = 0;
|
||||
}
|
||||
|
||||
//if (sceneIndex < demoArr.length)
|
||||
//{
|
||||
// demo = demoArr[sceneIndex];
|
||||
// demo.runFrame();
|
||||
//}
|
||||
}
|
||||
|
||||
//frameCount++;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
public static pixelsToMeters(value: number): number {
|
||||
return value * 0.02;
|
||||
@@ -81,7 +169,7 @@ module Phaser.Physics.Advanced {
|
||||
}
|
||||
|
||||
public static inertiaForCircle(mass, center, radius_outer, radius_inner) {
|
||||
return mass * ((radius_outer * radius_outer + radius_inner * radius_inner) * 0.5 + center.lengthsq());
|
||||
return mass * ((radius_outer * radius_outer + radius_inner * radius_inner) * 0.5 + center.lengthSq());
|
||||
}
|
||||
|
||||
public static areaForSegment(a, b, radius) {
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
/// <reference path="../../math/Vec2Utils.ts" />
|
||||
/// <reference path="Manager.ts" />
|
||||
/// <reference path="Body.ts" />
|
||||
/// <reference path="Bounds.ts" />
|
||||
|
||||
/**
|
||||
* Phaser - Advanced Physics - Shape
|
||||
@@ -23,7 +24,7 @@ module Phaser.Physics.Advanced {
|
||||
this.friction = 1.0;
|
||||
this.density = 1;
|
||||
|
||||
//this.bounds = new Bounds;
|
||||
this.bounds = new Bounds;
|
||||
|
||||
}
|
||||
|
||||
@@ -40,7 +41,7 @@ module Phaser.Physics.Advanced {
|
||||
public density: number;
|
||||
|
||||
// Axis-aligned bounding box
|
||||
public bounds;
|
||||
public bounds: Bounds;
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -56,7 +56,7 @@ module Phaser.Physics.Advanced {
|
||||
}
|
||||
|
||||
public centroid() {
|
||||
//return this.center.duplicate();
|
||||
return Phaser.Vec2Utils.clone(this.center);
|
||||
}
|
||||
|
||||
public inertia(mass) {
|
||||
@@ -66,8 +66,8 @@ module Phaser.Physics.Advanced {
|
||||
|
||||
public cacheData(xf) {
|
||||
this.tc = xf.transform(this.center);
|
||||
this.bounds.mins.set(this.tc.x - this.radius, this.tc.y - this.radius);
|
||||
this.bounds.maxs.set(this.tc.x + this.radius, this.tc.y + this.radius);
|
||||
this.bounds.mins.setTo(this.tc.x - this.radius, this.tc.y - this.radius);
|
||||
this.bounds.maxs.setTo(this.tc.x + this.radius, this.tc.y + this.radius);
|
||||
}
|
||||
|
||||
public pointQuery(p) {
|
||||
|
||||
@@ -116,8 +116,8 @@ module Phaser.Physics.Advanced {
|
||||
t = this.ta.y;
|
||||
}
|
||||
|
||||
this.bounds.mins.set(l - this.radius, b - this.radius);
|
||||
this.bounds.maxs.set(r + this.radius, t + this.radius);
|
||||
this.bounds.mins.setTo(l - this.radius, b - this.radius);
|
||||
this.bounds.maxs.setTo(r + this.radius, t + this.radius);
|
||||
|
||||
}
|
||||
|
||||
|
||||
+85
-16
@@ -19112,7 +19112,18 @@ var Phaser;
|
||||
(function (Advanced) {
|
||||
var Manager = (function () {
|
||||
function Manager(game) {
|
||||
this.lastTime = 0;
|
||||
this.frameRateHz = 60;
|
||||
this.timeDelta = 0;
|
||||
this.paused = false;
|
||||
this.step = false;
|
||||
// step through the simulation (i.e. per click)
|
||||
this.velocityIterations = 8;
|
||||
this.positionIterations = 4;
|
||||
this.allowSleep = true;
|
||||
this.warmStarting = true;
|
||||
this.game = game;
|
||||
this.space = new Advanced.Space();
|
||||
Manager.collision = new Advanced.Collision();
|
||||
}
|
||||
Manager.SHAPE_TYPE_CIRCLE = 0;
|
||||
@@ -19141,6 +19152,40 @@ var Phaser;
|
||||
Manager.bodyCounter = 0;
|
||||
Manager.jointCounter = 0;
|
||||
Manager.shapeCounter = 0;
|
||||
Manager.prototype.update = function () {
|
||||
var time = Date.now();
|
||||
var frameTime = (time - this.lastTime) / 1000;
|
||||
this.lastTime = time;
|
||||
// if rAf - why?
|
||||
frameTime = Math.floor(frameTime * 60 + 0.5) / 60;
|
||||
//if (!mouseDown)
|
||||
//{
|
||||
// var p = canvasToWorld(mousePosition);
|
||||
// var body = space.findBodyByPoint(p);
|
||||
// //domCanvas.style.cursor = body ? "pointer" : "default";
|
||||
//}
|
||||
if(!this.paused || this.step) {
|
||||
var h = 1 / this.frameRateHz;
|
||||
this.timeDelta += frameTime;
|
||||
if(this.step) {
|
||||
this.step = false;
|
||||
this.timeDelta = h;
|
||||
}
|
||||
for(var maxSteps = 4; maxSteps > 0 && this.timeDelta >= h; maxSteps--) {
|
||||
this.space.step(h, this.velocityIterations, this.positionIterations, this.warmStarting, this.allowSleep);
|
||||
this.timeDelta -= h;
|
||||
}
|
||||
if(this.timeDelta > h) {
|
||||
this.timeDelta = 0;
|
||||
}
|
||||
//if (sceneIndex < demoArr.length)
|
||||
//{
|
||||
// demo = demoArr[sceneIndex];
|
||||
// demo.runFrame();
|
||||
//}
|
||||
}
|
||||
//frameCount++;
|
||||
};
|
||||
Manager.pixelsToMeters = function pixelsToMeters(value) {
|
||||
return value * 0.02;
|
||||
};
|
||||
@@ -19157,7 +19202,7 @@ var Phaser;
|
||||
return Math.PI * (radius_outer * radius_outer - radius_inner * radius_inner);
|
||||
};
|
||||
Manager.inertiaForCircle = function inertiaForCircle(mass, center, radius_outer, radius_inner) {
|
||||
return mass * ((radius_outer * radius_outer + radius_inner * radius_inner) * 0.5 + center.lengthsq());
|
||||
return mass * ((radius_outer * radius_outer + radius_inner * radius_inner) * 0.5 + center.lengthSq());
|
||||
};
|
||||
Manager.areaForSegment = function areaForSegment(a, b, radius) {
|
||||
return radius * (Math.PI * radius + 2 * Phaser.Vec2Utils.distance(a, b));
|
||||
@@ -19432,6 +19477,7 @@ var Phaser;
|
||||
/// <reference path="../../math/Vec2Utils.ts" />
|
||||
/// <reference path="Manager.ts" />
|
||||
/// <reference path="Body.ts" />
|
||||
/// <reference path="Bounds.ts" />
|
||||
/**
|
||||
* Phaser - Advanced Physics - Shape
|
||||
*
|
||||
@@ -19445,8 +19491,8 @@ var Phaser;
|
||||
this.elasticity = 0.0;
|
||||
this.friction = 1.0;
|
||||
this.density = 1;
|
||||
//this.bounds = new Bounds;
|
||||
}
|
||||
this.bounds = new Advanced.Bounds();
|
||||
}
|
||||
return Shape;
|
||||
})();
|
||||
Advanced.Shape = Shape;
|
||||
@@ -19780,15 +19826,15 @@ var Phaser;
|
||||
return Advanced.Manager.areaForCircle(this.radius, 0);
|
||||
};
|
||||
ShapeCircle.prototype.centroid = function () {
|
||||
//return this.center.duplicate();
|
||||
};
|
||||
return Phaser.Vec2Utils.clone(this.center);
|
||||
};
|
||||
ShapeCircle.prototype.inertia = function (mass) {
|
||||
return Advanced.Manager.inertiaForCircle(mass, this.center, this.radius, 0);
|
||||
};
|
||||
ShapeCircle.prototype.cacheData = function (xf) {
|
||||
this.tc = xf.transform(this.center);
|
||||
this.bounds.mins.set(this.tc.x - this.radius, this.tc.y - this.radius);
|
||||
this.bounds.maxs.set(this.tc.x + this.radius, this.tc.y + this.radius);
|
||||
this.bounds.mins.setTo(this.tc.x - this.radius, this.tc.y - this.radius);
|
||||
this.bounds.maxs.setTo(this.tc.x + this.radius, this.tc.y + this.radius);
|
||||
};
|
||||
ShapeCircle.prototype.pointQuery = function (p) {
|
||||
//return vec2.distsq(this.tc, p) < (this.r * this.r);
|
||||
@@ -20731,7 +20777,9 @@ var Phaser;
|
||||
*/
|
||||
(function (Advanced) {
|
||||
var Body = (function () {
|
||||
function Body(sprite, type) {
|
||||
function Body(sprite, type, x, y) {
|
||||
if (typeof x === "undefined") { x = 0; }
|
||||
if (typeof y === "undefined") { y = 0; }
|
||||
// Shapes
|
||||
this.shapes = [];
|
||||
// Joints
|
||||
@@ -20742,13 +20790,19 @@ var Phaser;
|
||||
this.categoryBits = 0x0001;
|
||||
this.maskBits = 0xFFFF;
|
||||
this.stepCount = 0;
|
||||
this.sprite = sprite;
|
||||
this.game = sprite.game;
|
||||
this._tempVec2 = new Phaser.Vec2();
|
||||
this.id = Phaser.Physics.Advanced.Manager.bodyCounter++;
|
||||
this.name = 'body' + this.id;
|
||||
this.type = type;
|
||||
this.position = new Phaser.Vec2(sprite.x, sprite.y);
|
||||
this.angle = sprite.rotation;
|
||||
if(sprite) {
|
||||
this.sprite = sprite;
|
||||
this.game = sprite.game;
|
||||
this.position = new Phaser.Vec2(sprite.x, sprite.y);
|
||||
this.angle = sprite.rotation;
|
||||
} else {
|
||||
this.position = new Phaser.Vec2(x, y);
|
||||
this.angle = 0;
|
||||
}
|
||||
this.transform = new Phaser.Transform(this.position, this.angle);
|
||||
this.centroid = new Phaser.Vec2();
|
||||
this.velocity = new Phaser.Vec2();
|
||||
@@ -20770,8 +20824,22 @@ var Phaser;
|
||||
this.stepCount = 0;
|
||||
}
|
||||
Object.defineProperty(Body.prototype, "isDisabled", {
|
||||
get: // duplicate = Util function
|
||||
// serialize = Util function
|
||||
get: /*
|
||||
public duplicate() {
|
||||
|
||||
var body = new Body(this.type, this.transform.t, this.angle);
|
||||
|
||||
for (var i = 0; i < this.shapes.length; i++)
|
||||
{
|
||||
body.addShape(this.shapes[i].duplicate());
|
||||
}
|
||||
|
||||
body.resetMassData();
|
||||
|
||||
return body;
|
||||
|
||||
}
|
||||
*/
|
||||
function () {
|
||||
return this.type == Phaser.Types.BODY_DISABLED ? true : false;
|
||||
},
|
||||
@@ -20875,6 +20943,7 @@ var Phaser;
|
||||
var centroid = shape.centroid();
|
||||
var mass = shape.area() * shape.density;
|
||||
var inertia = shape.inertia(mass);
|
||||
console.log('rmd', centroid, shape);
|
||||
totalMassCentroid.multiplyAddByScalar(centroid, mass);
|
||||
totalMass += mass;
|
||||
totalInertia += inertia;
|
||||
@@ -21357,8 +21426,8 @@ var Phaser;
|
||||
b = this.tb.y;
|
||||
t = this.ta.y;
|
||||
}
|
||||
this.bounds.mins.set(l - this.radius, b - this.radius);
|
||||
this.bounds.maxs.set(r + this.radius, t + this.radius);
|
||||
this.bounds.mins.setTo(l - this.radius, b - this.radius);
|
||||
this.bounds.maxs.setTo(r + this.radius, t + this.radius);
|
||||
};
|
||||
ShapeSegment.prototype.pointQuery = function (p) {
|
||||
if(!this.bounds.containPoint(p)) {
|
||||
|
||||
+28
-5
@@ -1,5 +1,7 @@
|
||||
/// <reference path="../../Phaser/Game.ts" />
|
||||
/// <reference path="../../Phaser/physics/advanced/Manager.ts" />
|
||||
/// <reference path="../../Phaser/physics/advanced/ShapeBox.ts" />
|
||||
/// <reference path="../../Phaser/physics/advanced/ShapeCircle.ts" />
|
||||
(function () {
|
||||
var game = new Phaser.Game(this, 'game', 800, 600, init, create, update, render);
|
||||
function init() {
|
||||
@@ -9,16 +11,37 @@
|
||||
}
|
||||
var atari;
|
||||
var card;
|
||||
var physics;
|
||||
var circle;
|
||||
function create() {
|
||||
atari = game.add.sprite(200, 310, 'atari');
|
||||
atari = game.add.sprite(200, 100, 'atari');
|
||||
//card = game.add.sprite(500, 300, 'card');
|
||||
var body = new Phaser.Physics.Advanced.Body(atari, Phaser.Types.BODY_DYNAMIC);
|
||||
var body2 = new Phaser.Physics.Advanced.Body(atari, Phaser.Types.BODY_DYNAMIC);
|
||||
console.log(body);
|
||||
console.log(body2);
|
||||
physics = new Phaser.Physics.Advanced.Manager(game);
|
||||
var walls = new Phaser.Physics.Advanced.Body(null, Phaser.Types.BODY_STATIC);
|
||||
walls.game = game;
|
||||
walls.addShape(new Phaser.Physics.Advanced.ShapeBox(0, 0.2, 20.48, 0.4));
|
||||
walls.addShape(new Phaser.Physics.Advanced.ShapeBox(0, 15.16, 20.48, 0.4));
|
||||
walls.addShape(new Phaser.Physics.Advanced.ShapeBox(-10.04, 7.68, 0.4, 14.56));
|
||||
walls.addShape(new Phaser.Physics.Advanced.ShapeBox(10.04, 7.68, 0.4, 14.56));
|
||||
walls.resetMassData();
|
||||
physics.space.addBody(walls);
|
||||
// Add a circle
|
||||
circle = new Phaser.Physics.Advanced.Body(null, Phaser.Types.BODY_DYNAMIC, 4, 4);
|
||||
circle.game = game;
|
||||
var shape = new Phaser.Physics.Advanced.ShapeCircle(0.4, 0, 0);
|
||||
shape.elasticity = 0.5;
|
||||
shape.friction = 1.0;
|
||||
shape.density = 1;
|
||||
circle.addShape(shape);
|
||||
circle.resetMassData();
|
||||
physics.space.addBody(circle);
|
||||
}
|
||||
function update() {
|
||||
physics.update();
|
||||
}
|
||||
function render() {
|
||||
game.stage.context.fillStyle = 'rgb(255,255,0)';
|
||||
game.stage.context.fillText('x: ' + circle.position.x + ' y: ' + circle.position.y, 32, 32);
|
||||
game.stage.context.fillText('vx: ' + circle.velocity.x + ' vy: ' + circle.velocity.y, 32, 64);
|
||||
}
|
||||
})();
|
||||
|
||||
+35
-4
@@ -1,5 +1,7 @@
|
||||
/// <reference path="../../Phaser/Game.ts" />
|
||||
/// <reference path="../../Phaser/physics/advanced/Manager.ts" />
|
||||
/// <reference path="../../Phaser/physics/advanced/ShapeBox.ts" />
|
||||
/// <reference path="../../Phaser/physics/advanced/ShapeCircle.ts" />
|
||||
|
||||
(function () {
|
||||
|
||||
@@ -15,24 +17,53 @@
|
||||
|
||||
var atari: Phaser.Sprite;
|
||||
var card: Phaser.Sprite;
|
||||
var physics: Phaser.Physics.Advanced.Manager;
|
||||
var circle: Phaser.Physics.Advanced.Body;
|
||||
|
||||
function create() {
|
||||
|
||||
atari = game.add.sprite(200, 310, 'atari');
|
||||
atari = game.add.sprite(200, 100, 'atari');
|
||||
//card = game.add.sprite(500, 300, 'card');
|
||||
|
||||
var body = new Phaser.Physics.Advanced.Body(atari, Phaser.Types.BODY_DYNAMIC);
|
||||
physics = new Phaser.Physics.Advanced.Manager(game);
|
||||
|
||||
//body.
|
||||
var walls = new Phaser.Physics.Advanced.Body(null, Phaser.Types.BODY_STATIC);
|
||||
walls.game = game;
|
||||
|
||||
console.log(body);
|
||||
walls.addShape(new Phaser.Physics.Advanced.ShapeBox(0, 0.2, 20.48, 0.4));
|
||||
walls.addShape(new Phaser.Physics.Advanced.ShapeBox(0, 15.16, 20.48, 0.4));
|
||||
walls.addShape(new Phaser.Physics.Advanced.ShapeBox(-10.04, 7.68, 0.4, 14.56));
|
||||
walls.addShape(new Phaser.Physics.Advanced.ShapeBox(10.04, 7.68, 0.4, 14.56));
|
||||
walls.resetMassData();
|
||||
|
||||
physics.space.addBody(walls);
|
||||
|
||||
// Add a circle
|
||||
|
||||
circle = new Phaser.Physics.Advanced.Body(null, Phaser.Types.BODY_DYNAMIC, 4, 4);
|
||||
circle.game = game;
|
||||
|
||||
var shape = new Phaser.Physics.Advanced.ShapeCircle(0.4, 0, 0);
|
||||
shape.elasticity = 0.5;
|
||||
shape.friction = 1.0;
|
||||
shape.density = 1;
|
||||
circle.addShape(shape);
|
||||
circle.resetMassData();
|
||||
|
||||
physics.space.addBody(circle);
|
||||
|
||||
}
|
||||
|
||||
function update() {
|
||||
physics.update();
|
||||
}
|
||||
|
||||
function render() {
|
||||
|
||||
game.stage.context.fillStyle = 'rgb(255,255,0)';
|
||||
game.stage.context.fillText('x: ' + circle.position.x + ' y: ' + circle.position.y, 32, 32);
|
||||
game.stage.context.fillText('vx: ' + circle.velocity.x + ' vy: ' + circle.velocity.y, 32, 64);
|
||||
|
||||
}
|
||||
|
||||
})();
|
||||
|
||||
Vendored
+14
-3
@@ -9610,6 +9610,17 @@ module Phaser.Physics.Advanced {
|
||||
static bodyCounter: number;
|
||||
static jointCounter: number;
|
||||
static shapeCounter: number;
|
||||
public space: Space;
|
||||
public lastTime: number;
|
||||
public frameRateHz: number;
|
||||
public timeDelta: number;
|
||||
public paused: bool;
|
||||
public step: bool;
|
||||
public velocityIterations: number;
|
||||
public positionIterations: number;
|
||||
public allowSleep: bool;
|
||||
public warmStarting: bool;
|
||||
public update(): void;
|
||||
static pixelsToMeters(value: number): number;
|
||||
static metersToPixels(value: number): number;
|
||||
static p2m(value: number): number;
|
||||
@@ -9671,7 +9682,7 @@ module Phaser.Physics.Advanced {
|
||||
public elasticity: number;
|
||||
public friction: number;
|
||||
public density: number;
|
||||
public bounds;
|
||||
public bounds: Bounds;
|
||||
}
|
||||
}
|
||||
/**
|
||||
@@ -9730,7 +9741,7 @@ module Phaser.Physics.Advanced {
|
||||
public transform(xf): void;
|
||||
public untransform(xf): void;
|
||||
public area(): number;
|
||||
public centroid(): void;
|
||||
public centroid(): Vec2;
|
||||
public inertia(mass): number;
|
||||
public cacheData(xf): void;
|
||||
public pointQuery(p): bool;
|
||||
@@ -9838,7 +9849,7 @@ module Phaser.Physics.Advanced {
|
||||
*/
|
||||
module Phaser.Physics.Advanced {
|
||||
class Body {
|
||||
constructor(sprite: Sprite, type: number);
|
||||
constructor(sprite: Sprite, type: number, x?: number, y?: number);
|
||||
/**
|
||||
* Reference to Phaser.Game
|
||||
*/
|
||||
|
||||
+85
-16
@@ -19112,7 +19112,18 @@ var Phaser;
|
||||
(function (Advanced) {
|
||||
var Manager = (function () {
|
||||
function Manager(game) {
|
||||
this.lastTime = 0;
|
||||
this.frameRateHz = 60;
|
||||
this.timeDelta = 0;
|
||||
this.paused = false;
|
||||
this.step = false;
|
||||
// step through the simulation (i.e. per click)
|
||||
this.velocityIterations = 8;
|
||||
this.positionIterations = 4;
|
||||
this.allowSleep = true;
|
||||
this.warmStarting = true;
|
||||
this.game = game;
|
||||
this.space = new Advanced.Space();
|
||||
Manager.collision = new Advanced.Collision();
|
||||
}
|
||||
Manager.SHAPE_TYPE_CIRCLE = 0;
|
||||
@@ -19141,6 +19152,40 @@ var Phaser;
|
||||
Manager.bodyCounter = 0;
|
||||
Manager.jointCounter = 0;
|
||||
Manager.shapeCounter = 0;
|
||||
Manager.prototype.update = function () {
|
||||
var time = Date.now();
|
||||
var frameTime = (time - this.lastTime) / 1000;
|
||||
this.lastTime = time;
|
||||
// if rAf - why?
|
||||
frameTime = Math.floor(frameTime * 60 + 0.5) / 60;
|
||||
//if (!mouseDown)
|
||||
//{
|
||||
// var p = canvasToWorld(mousePosition);
|
||||
// var body = space.findBodyByPoint(p);
|
||||
// //domCanvas.style.cursor = body ? "pointer" : "default";
|
||||
//}
|
||||
if(!this.paused || this.step) {
|
||||
var h = 1 / this.frameRateHz;
|
||||
this.timeDelta += frameTime;
|
||||
if(this.step) {
|
||||
this.step = false;
|
||||
this.timeDelta = h;
|
||||
}
|
||||
for(var maxSteps = 4; maxSteps > 0 && this.timeDelta >= h; maxSteps--) {
|
||||
this.space.step(h, this.velocityIterations, this.positionIterations, this.warmStarting, this.allowSleep);
|
||||
this.timeDelta -= h;
|
||||
}
|
||||
if(this.timeDelta > h) {
|
||||
this.timeDelta = 0;
|
||||
}
|
||||
//if (sceneIndex < demoArr.length)
|
||||
//{
|
||||
// demo = demoArr[sceneIndex];
|
||||
// demo.runFrame();
|
||||
//}
|
||||
}
|
||||
//frameCount++;
|
||||
};
|
||||
Manager.pixelsToMeters = function pixelsToMeters(value) {
|
||||
return value * 0.02;
|
||||
};
|
||||
@@ -19157,7 +19202,7 @@ var Phaser;
|
||||
return Math.PI * (radius_outer * radius_outer - radius_inner * radius_inner);
|
||||
};
|
||||
Manager.inertiaForCircle = function inertiaForCircle(mass, center, radius_outer, radius_inner) {
|
||||
return mass * ((radius_outer * radius_outer + radius_inner * radius_inner) * 0.5 + center.lengthsq());
|
||||
return mass * ((radius_outer * radius_outer + radius_inner * radius_inner) * 0.5 + center.lengthSq());
|
||||
};
|
||||
Manager.areaForSegment = function areaForSegment(a, b, radius) {
|
||||
return radius * (Math.PI * radius + 2 * Phaser.Vec2Utils.distance(a, b));
|
||||
@@ -19432,6 +19477,7 @@ var Phaser;
|
||||
/// <reference path="../../math/Vec2Utils.ts" />
|
||||
/// <reference path="Manager.ts" />
|
||||
/// <reference path="Body.ts" />
|
||||
/// <reference path="Bounds.ts" />
|
||||
/**
|
||||
* Phaser - Advanced Physics - Shape
|
||||
*
|
||||
@@ -19445,8 +19491,8 @@ var Phaser;
|
||||
this.elasticity = 0.0;
|
||||
this.friction = 1.0;
|
||||
this.density = 1;
|
||||
//this.bounds = new Bounds;
|
||||
}
|
||||
this.bounds = new Advanced.Bounds();
|
||||
}
|
||||
return Shape;
|
||||
})();
|
||||
Advanced.Shape = Shape;
|
||||
@@ -19780,15 +19826,15 @@ var Phaser;
|
||||
return Advanced.Manager.areaForCircle(this.radius, 0);
|
||||
};
|
||||
ShapeCircle.prototype.centroid = function () {
|
||||
//return this.center.duplicate();
|
||||
};
|
||||
return Phaser.Vec2Utils.clone(this.center);
|
||||
};
|
||||
ShapeCircle.prototype.inertia = function (mass) {
|
||||
return Advanced.Manager.inertiaForCircle(mass, this.center, this.radius, 0);
|
||||
};
|
||||
ShapeCircle.prototype.cacheData = function (xf) {
|
||||
this.tc = xf.transform(this.center);
|
||||
this.bounds.mins.set(this.tc.x - this.radius, this.tc.y - this.radius);
|
||||
this.bounds.maxs.set(this.tc.x + this.radius, this.tc.y + this.radius);
|
||||
this.bounds.mins.setTo(this.tc.x - this.radius, this.tc.y - this.radius);
|
||||
this.bounds.maxs.setTo(this.tc.x + this.radius, this.tc.y + this.radius);
|
||||
};
|
||||
ShapeCircle.prototype.pointQuery = function (p) {
|
||||
//return vec2.distsq(this.tc, p) < (this.r * this.r);
|
||||
@@ -20731,7 +20777,9 @@ var Phaser;
|
||||
*/
|
||||
(function (Advanced) {
|
||||
var Body = (function () {
|
||||
function Body(sprite, type) {
|
||||
function Body(sprite, type, x, y) {
|
||||
if (typeof x === "undefined") { x = 0; }
|
||||
if (typeof y === "undefined") { y = 0; }
|
||||
// Shapes
|
||||
this.shapes = [];
|
||||
// Joints
|
||||
@@ -20742,13 +20790,19 @@ var Phaser;
|
||||
this.categoryBits = 0x0001;
|
||||
this.maskBits = 0xFFFF;
|
||||
this.stepCount = 0;
|
||||
this.sprite = sprite;
|
||||
this.game = sprite.game;
|
||||
this._tempVec2 = new Phaser.Vec2();
|
||||
this.id = Phaser.Physics.Advanced.Manager.bodyCounter++;
|
||||
this.name = 'body' + this.id;
|
||||
this.type = type;
|
||||
this.position = new Phaser.Vec2(sprite.x, sprite.y);
|
||||
this.angle = sprite.rotation;
|
||||
if(sprite) {
|
||||
this.sprite = sprite;
|
||||
this.game = sprite.game;
|
||||
this.position = new Phaser.Vec2(sprite.x, sprite.y);
|
||||
this.angle = sprite.rotation;
|
||||
} else {
|
||||
this.position = new Phaser.Vec2(x, y);
|
||||
this.angle = 0;
|
||||
}
|
||||
this.transform = new Phaser.Transform(this.position, this.angle);
|
||||
this.centroid = new Phaser.Vec2();
|
||||
this.velocity = new Phaser.Vec2();
|
||||
@@ -20770,8 +20824,22 @@ var Phaser;
|
||||
this.stepCount = 0;
|
||||
}
|
||||
Object.defineProperty(Body.prototype, "isDisabled", {
|
||||
get: // duplicate = Util function
|
||||
// serialize = Util function
|
||||
get: /*
|
||||
public duplicate() {
|
||||
|
||||
var body = new Body(this.type, this.transform.t, this.angle);
|
||||
|
||||
for (var i = 0; i < this.shapes.length; i++)
|
||||
{
|
||||
body.addShape(this.shapes[i].duplicate());
|
||||
}
|
||||
|
||||
body.resetMassData();
|
||||
|
||||
return body;
|
||||
|
||||
}
|
||||
*/
|
||||
function () {
|
||||
return this.type == Phaser.Types.BODY_DISABLED ? true : false;
|
||||
},
|
||||
@@ -20875,6 +20943,7 @@ var Phaser;
|
||||
var centroid = shape.centroid();
|
||||
var mass = shape.area() * shape.density;
|
||||
var inertia = shape.inertia(mass);
|
||||
console.log('rmd', centroid, shape);
|
||||
totalMassCentroid.multiplyAddByScalar(centroid, mass);
|
||||
totalMass += mass;
|
||||
totalInertia += inertia;
|
||||
@@ -21357,8 +21426,8 @@ var Phaser;
|
||||
b = this.tb.y;
|
||||
t = this.ta.y;
|
||||
}
|
||||
this.bounds.mins.set(l - this.radius, b - this.radius);
|
||||
this.bounds.maxs.set(r + this.radius, t + this.radius);
|
||||
this.bounds.mins.setTo(l - this.radius, b - this.radius);
|
||||
this.bounds.maxs.setTo(r + this.radius, t + this.radius);
|
||||
};
|
||||
ShapeSegment.prototype.pointQuery = function (p) {
|
||||
if(!this.bounds.containPoint(p)) {
|
||||
|
||||
Reference in New Issue
Block a user