friction contact material
parent
048470521d
commit
e6e78928ed
|
@ -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
|
||||
);
|
||||
};
|
||||
|
|
@ -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
|
||||
);
|
||||
};
|
Loading…
Reference in New Issue