예제 #1
0
        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);
            }
        }