friction contact material

beta.r3js.org
-=yb4f310 2017-09-01 17:04:43 +02:00
parent 048470521d
commit e6e78928ed
2 changed files with 232 additions and 0 deletions

View File

@ -0,0 +1,109 @@
/**
* Raw FrictionContactMaterial API object - should always correspond with the FrictionContactMaterial Schema
* @param id
* @param name
* @param material1
* @param material2
* @param friction
* @param restitution
* @param contactEquationStiffness
* @param contactEquationRelaxation
* @param frictionEquationStiffness
* @param frictionEquationRelaxation
* @param parentEntity
* @constructor
*/
GameLib.D3.API.FrictionContactMaterial = function(
id,
name,
material1,
material2,
friction,
restitution,
contactEquationStiffness,
contactEquationRelaxation,
frictionEquationStiffness,
frictionEquationRelaxation,
parentEntity
) {
if (GameLib.Utils.UndefinedOrNull(id)) {
id = GameLib.Utils.RandomId();
}
this.id = id;
if (GameLib.Utils.UndefinedOrNull(name)) {
name = 'Friction Material (' + this.id + ')';
}
this.name = name;
if (GameLib.Utils.UndefinedOrNull(material1)) {
material1 = null;
}
this.material1 = material1;
if (GameLib.Utils.UndefinedOrNull(material2)) {
material2 = null;
}
this.material2 = material2;
if (GameLib.Utils.UndefinedOrNull(friction)) {
friction = 0.3;
}
this.friction = friction;
if (GameLib.Utils.UndefinedOrNull(restitution)) {
restitution = 0.3;
}
this.restitution = restitution;
if (GameLib.Utils.UndefinedOrNull(contactEquationStiffness)) {
contactEquationStiffness = 1e7;
}
this.contactEquationStiffness = contactEquationStiffness;
if (GameLib.Utils.UndefinedOrNull(contactEquationRelaxation)) {
contactEquationRelaxation = 3;
}
this.contactEquationRelaxation = contactEquationRelaxation;
if (GameLib.Utils.UndefinedOrNull(frictionEquationStiffness)) {
frictionEquationStiffness = 1e7;
}
this.frictionEquationStiffness = frictionEquationStiffness;
if (GameLib.Utils.UndefinedOrNull(frictionEquationRelaxation)) {
frictionEquationRelaxation = 3;
}
this.frictionEquationRelaxation = frictionEquationRelaxation;
if (GameLib.Utils.UndefinedOrNull(parentEntity)) {
parentEntity = null;
}
this.parentEntity = parentEntity;
};
GameLib.D3.API.FrictionContactMaterial.prototype = Object.create(GameLib.Component.prototype);
GameLib.D3.API.FrictionContactMaterial.prototype.constructor = GameLib.D3.API.FrictionContactMaterial;
/**
* Creates an API FrictionContactMaterial from an Object FrictionContactMaterial
* @param objectFrictionContactMaterial
* @constructor
*/
GameLib.D3.API.FrictionContactMaterial.FromObject = function(objectFrictionContactMaterial) {
return new GameLib.D3.API.FrictionContactMaterial(
objectFrictionContactMaterial.id,
objectFrictionContactMaterial.name,
objectFrictionContactMaterial.material1,
objectFrictionContactMaterial.material2,
objectFrictionContactMaterial.friction,
objectFrictionContactMaterial.restitution,
objectFrictionContactMaterial.contactEquationStiffness,
objectFrictionContactMaterial.contactEquationRelaxation,
objectFrictionContactMaterial.frictionEquationStiffness,
objectFrictionContactMaterial.frictionEquationRelaxation,
objectFrictionContactMaterial.parentEntity
);
};

View File

@ -0,0 +1,123 @@
/**
* FrictionContactMaterial Runtime
* @param physics GameLib.D3.Graphics
* @param apiFrictionContactMaterial GameLib.D3.API.FrictionContactMaterial
* @constructor
*/
GameLib.D3.FrictionContactMaterial = function (
physics,
apiFrictionContactMaterial
) {
this.physics = physics;
this.physics.isNotCannonThrow();
if (GameLib.Utils.UndefinedOrNull(apiFrictionContactMaterial)) {
apiFrictionContactMaterial = {};
}
if (apiFrictionContactMaterial instanceof GameLib.D3.FrictionContactMaterial) {
return apiFrictionContactMaterial;
}
GameLib.D3.API.FrictionContactMaterial.call(
this,
apiFrictionContactMaterial.id,
apiFrictionContactMaterial.name,
apiFrictionContactMaterial.material1,
apiFrictionContactMaterial.material2,
apiFrictionContactMaterial.friction,
apiFrictionContactMaterial.restitution,
apiFrictionContactMaterial.contactEquationStiffness,
apiFrictionContactMaterial.contactEquationRelaxation,
apiFrictionContactMaterial.frictionEquationStiffness,
apiFrictionContactMaterial.frictionEquationRelaxation,
apiFrictionContactMaterial.parentEntity
);
GameLib.Component.call(
this,
GameLib.Component.COMPONENT_FRICTION_CONTACT_MATERIAL,
{
material1 : GameLib.D3.FrictionMaterial,
material2 : GameLib.D3.FrictionMaterial
}
);
};
GameLib.D3.FrictionContactMaterial.prototype = Object.create(GameLib.D3.API.FrictionContactMaterial.prototype);
GameLib.D3.FrictionContactMaterial.prototype.constructor = GameLib.D3.FrictionContactMaterial;
/**
*
* @returns {*}
*/
GameLib.D3.FrictionContactMaterial.prototype.createInstance = function() {
var instance = new CANNON.ContactMaterial(
this.material1.instance,
this.material2.instance,
{
friction: this.friction,
restitution: this.restitution,
contactEquationStiffness: this.contactEquationStiffness
}
);
return instance;
};
/**
*
*/
GameLib.D3.FrictionContactMaterial.prototype.updateInstance = function() {
this.instance.material1 = this.material1.instance;
this.instance.material2 = this.material2.instance;
this.instance.friction = this.friction;
this.instance.restitution = this.restitution;
this.instance.contactEquationStiffness = this.contactEquationStiffness;
this.instance.contactEquationRelaxation = this.contactEquationRelaxation;
this.instance.frictionEquationStiffness = this.frictionEquationStiffness;
this.instance.frictionEquationRelaxation = this.frictionEquationRelaxation;
};
/**
* GameLib.D3.FrictionContactMaterial to GameLib.D3.API.FrictionContactMaterial
* @returns {GameLib.D3.API.FrictionContactMaterial}
*/
GameLib.D3.FrictionContactMaterial.prototype.toApiObject = function() {
var apiFrictionContactMaterial = new GameLib.D3.API.FrictionContactMaterial(
this.id,
this.name,
GameLib.Utils.IdOrNull(this.material1),
GameLib.Utils.IdOrNull(this.material2),
this.friction,
this.restitution,
this.contactEquationStiffness,
this.contactEquationRelaxation,
this.frictionEquationStiffness,
this.frictionEquationRelaxation,
GameLib.Utils.IdOrNull(this.parentEntity)
);
return apiFrictionContactMaterial;
};
/**
* GameLib.D3.FrictionContactMaterial from Object FrictionContactMaterial
* @param physics
* @param objectComponent
* @returns {GameLib.D3.FrictionContactMaterial}
* @constructor
*/
GameLib.D3.FrictionContactMaterial.FromObject = function(physics, objectComponent) {
var apiFrictionContactMaterial = GameLib.D3.API.FrictionContactMaterial.FromObject(objectComponent);
return new GameLib.D3.FrictionContactMaterial(
physics,
apiFrictionContactMaterial
);
};