/** * 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() { var instance = new CANNON.ContactMaterial( null, null, { friction: this.friction, restitution: this.restitution, contactEquationStiffness: this.contactEquationStiffness } ); instance.materials = this.materials.map( function(material){ return material.instance; } ); return instance; }; /** * */ 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 ); };