diff --git a/simgear/bvh/BVHMaterial.cxx b/simgear/bvh/BVHMaterial.cxx deleted file mode 100644 index 5a9eb7a5..00000000 --- a/simgear/bvh/BVHMaterial.cxx +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright (C) 2008 - 2012 Mathias Froehlich - Mathias.Froehlich@web.de -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Library General Public -// License as published by the Free Software Foundation; either -// version 2 of the License, or (at your option) any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Library General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -// - -#include - -#include "BVHMaterial.hxx" - -namespace simgear { - -BVHMaterial::BVHMaterial() : - _solid(true), - _friction_factor(1), - _rolling_friction(0.02), - _bumpiness(0), - _load_resistance(1e30) -{ -} - -BVHMaterial::~BVHMaterial() -{ -} - -} diff --git a/simgear/bvh/BVHMaterial.hxx b/simgear/bvh/BVHMaterial.hxx index 90c4d381..7131637a 100644 --- a/simgear/bvh/BVHMaterial.hxx +++ b/simgear/bvh/BVHMaterial.hxx @@ -19,19 +19,24 @@ #define BVHMaterial_hxx #include +#include + +#include namespace simgear { class BVHMaterial : public SGReferenced { public: - BVHMaterial(); - virtual ~BVHMaterial(); + BVHMaterial() = default; + virtual ~BVHMaterial() = default; /** * Return if the surface material is solid, if it is not solid, a fluid * can be assumed, that is usually water. */ - bool get_solid () const { return _solid; } + bool get_solid () const { + return _solid_is_prop ? _solid_property->getBoolValue() : _solid; + } /** * Get the friction factor for that material @@ -55,21 +60,26 @@ public: protected: // True if the material is solid, false if it is a fluid - bool _solid; + bool _solid = true; // the friction factor of that surface material - double _friction_factor; + double _friction_factor = 1.0; // the rolling friction of that surface material - double _rolling_friction; + double _rolling_friction = 0.02; // the bumpiness of that surface material - double _bumpiness; + double _bumpiness = 0.0; // the load resistance of that surface material - double _load_resistance; + double _load_resistance = 1e30; + + // Placeholder for the solid property, if defined + SGPropertyNode_ptr _solid_property; + bool _solid_is_prop = false; }; + } -#endif +#,endif diff --git a/simgear/bvh/CMakeLists.txt b/simgear/bvh/CMakeLists.txt index d3e32915..96157bd9 100644 --- a/simgear/bvh/CMakeLists.txt +++ b/simgear/bvh/CMakeLists.txt @@ -39,7 +39,6 @@ set(SOURCES BVHStaticNode.cxx BVHStaticTriangle.cxx BVHSubTreeCollector.cxx - BVHMaterial.cxx BVHTransform.cxx ) diff --git a/simgear/scene/material/mat.cxx b/simgear/scene/material/mat.cxx index 9531d983..99a92cfb 100644 --- a/simgear/scene/material/mat.cxx +++ b/simgear/scene/material/mat.cxx @@ -385,7 +385,13 @@ SGMaterial::read_properties(const SGReaderWriterOptions* options, } // surface values for use with ground reactions - _solid = props->getBoolValue("solid", _solid); + string propval = props->getStringValue("solid/property", ""); + if (propval != "") { + _solid_property = prop_root->getNode(propval, true); + _solid_is_prop =true; + } else { + _solid = props->getBoolValue("solid", _solid); + } _friction_factor = props->getDoubleValue("friction-factor", _friction_factor); _rolling_friction = props->getDoubleValue("rolling-friction", _rolling_friction); _bumpiness = props->getDoubleValue("bumpiness", _bumpiness);