public void Execute(PhysxScene scene) { if (_target.Disposed) { return; } if (_material is Material) { //this is already our native material _target.SetMaterialSync((Material)_material, _applyToObject); } else { IMaterial currMat = _target.PrimMaterial; //we need to build our native material Material material = new Material { Density = ((_changes & MaterialChanges.Density) != 0) ? Utils.Clamp(_material.Density, 1.0f, 22587.0f) : currMat.Density, StaticFriction = ((_changes & MaterialChanges.Friction) != 0) ? Utils.Clamp(_material.StaticFriction, 0.0f, 255.0f) : currMat.StaticFriction, DynamicFriction = ((_changes & MaterialChanges.Friction) != 0) ? Utils.Clamp(_material.DynamicFriction, 0.0f, 255.0f) : currMat.DynamicFriction, Restitution = ((_changes & MaterialChanges.Restitution) != 0) ? Utils.Clamp(_material.Restitution, 0.0f, 1.0f) : currMat.Restitution, GravityMultiplier = ((_changes & MaterialChanges.GravityMultiplier) != 0) ? Utils.Clamp(_material.GravityMultiplier, -1.0f, 28.0f) : currMat.GravityMultiplier, MaterialPreset = _material.MaterialPreset }; _target.SetMaterialSync(material.ToLocalMaterial(scene.SceneImpl.Physics), _applyToObject); } }