X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=simgear%2Fscene%2Fmaterial%2Fmat.cxx;h=2082fd47e83d0485acd51ccad8d439fb51325e51;hb=f9bf403fc0026f461090fc55e1e37f28f8359cea;hp=582571f3096d734e58558fb077520530c44f32b6;hpb=0b8bfd9ed861740a62adc271e38ae6e11d10832b;p=simgear.git diff --git a/simgear/scene/material/mat.cxx b/simgear/scene/material/mat.cxx index 582571f3..2082fd47 100644 --- a/simgear/scene/material/mat.cxx +++ b/simgear/scene/material/mat.cxx @@ -264,6 +264,49 @@ SGMaterial::read_properties(const SGReaderWriterOptions* options, wrapv = props->getBoolValue("wrapv", true); mipmap = props->getBoolValue("mipmap", true); light_coverage = props->getDoubleValue("light-coverage", 0.0); + + // Building properties + building_coverage = props->getDoubleValue("building-coverage", 0.0); + building_spacing = props->getDoubleValue("building-spacing-m", 5.0); + + string bt = props->getStringValue("building-texture", "Textures/buildings.png"); + building_texture = SGModelLib::findDataFile(bt, options); + + if (building_texture.empty()) { + SG_LOG(SG_GENERAL, SG_ALERT, "Cannot find texture \"" << bt); + } + + building_small_ratio = props->getDoubleValue("building-small-ratio", 0.8); + building_medium_ratio = props->getDoubleValue("building-medium-ratio", 0.15); + building_large_ratio = props->getDoubleValue("building-large-ratio", 0.05); + + building_small_pitch = props->getDoubleValue("building-small-pitch", 0.8); + building_medium_pitch = props->getDoubleValue("building-medium-pitch", 0.2); + building_large_pitch = props->getDoubleValue("building-large-pitch", 0.1); + + building_small_min_floors = props->getIntValue("building-small-min-floors", 1); + building_small_max_floors = props->getIntValue("building-small-max-floors", 3); + building_medium_min_floors = props->getIntValue("building-medium-min-floors", 3); + building_medium_max_floors = props->getIntValue("building-medium-max-floors", 8); + building_large_min_floors = props->getIntValue("building-large-min-floors", 5); + building_large_max_floors = props->getIntValue("building-large-max-floors", 20); + + building_small_min_width = props->getFloatValue("building-small-min-width-m", 15.0); + building_small_max_width = props->getFloatValue("building-small-max-width-m", 60.0); + building_small_min_depth = props->getFloatValue("building-small-min-depth-m", 10.0); + building_small_max_depth = props->getFloatValue("building-small-max-depth-m", 20.0); + + building_medium_min_width = props->getFloatValue("building-medium-min-width-m", 25.0); + building_medium_max_width = props->getFloatValue("building-medium-max-width-m", 50.0); + building_medium_min_depth = props->getFloatValue("building-medium-min-depth-m", 20.0); + building_medium_max_depth = props->getFloatValue("building-medium-max-depth-m", 50.0); + + building_large_min_width = props->getFloatValue("building-large-min-width-m", 50.0); + building_large_max_width = props->getFloatValue("building-large-max-width-m", 75.0); + building_large_min_depth = props->getFloatValue("building-large-min-depth-m", 50.0); + building_large_max_depth = props->getFloatValue("building-large-max-depth-m", 75.0); + + // Random vegetation properties wood_coverage = props->getDoubleValue("wood-coverage", 0.0); tree_height = props->getDoubleValue("tree-height-m", 0.0); tree_width = props->getDoubleValue("tree-width-m", 0.0); @@ -358,6 +401,7 @@ SGMaterial::init () mipmap = true; light_coverage = 0.0; + building_coverage = 0.0; solid = true; friction_factor = 1; @@ -378,6 +422,8 @@ SGMaterial::init () Effect* SGMaterial::get_effect(int i) { if(!_status[i].effect_realized) { + if (!_status[i].effect.valid()) + return 0; _status[i].effect->realizeTechniques(_status[i].options.get()); _status[i].effect_realized = true; } @@ -459,7 +505,8 @@ void SGMaterial::buildEffectProperties(const SGReaderWriterOptions* options) makeChild(effectParamProp, "light-coverage")->setDoubleValue(light_coverage); matState.effect = makeEffect(effectProp, false, options); - matState.effect->setUserData(user.get()); + if (matState.effect.valid()) + matState.effect->setUserData(user.get()); } }