r3-legacy/src/game-lib-d3-friction-contac...

135 lines
4.0 KiB
JavaScript

/**
* 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.materials,
apiFrictionContactMaterial.friction,
apiFrictionContactMaterial.restitution,
apiFrictionContactMaterial.contactEquationStiffness,
apiFrictionContactMaterial.contactEquationRelaxation,
apiFrictionContactMaterial.frictionEquationStiffness,
apiFrictionContactMaterial.frictionEquationRelaxation,
apiFrictionContactMaterial.parentEntity
);
GameLib.Component.call(
this,
GameLib.Component.COMPONENT_FRICTION_CONTACT_MATERIAL,
{
materials : [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() {
this.instance = new CANNON.ContactMaterial(
null,
null,
{
friction: this.friction,
restitution: this.restitution,
contactEquationStiffness: this.contactEquationStiffness
}
);
this.instance.materials = this.materials.map(
function(material){
return material.instance;
}
);
GameLib.Component.prototype.createInstance.call(this);
};
/**
*
*/
GameLib.D3.FrictionContactMaterial.prototype.updateInstance = function() {
this.instance.materials = this.materials.map(
function(material) {
return material.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,
this.materials.map(
function(material) {
return GameLib.Utils.IdOrNull(material);
}
),
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
);
};