| 990 | } |
| 991 | |
| 992 | void Terrain::SetDetailObjectLayers(const std::vector<DetailObjectLayer> &_detail_object_layers) { |
| 993 | if (detail_object_layers == _detail_object_layers || minimal) { |
| 994 | return; |
| 995 | } |
| 996 | detail_object_layers = _detail_object_layers; |
| 997 | detail_object_surfaces.clear(); |
| 998 | detail_object_surfaces.resize(detail_object_layers.size()); |
| 999 | int counter = 0; |
| 1000 | Model &terrain_simplified_model = Models::Instance()->GetModel(model_id); |
| 1001 | for (auto &detail_object_surface : detail_object_surfaces) { |
| 1002 | static const mat4 identity; |
| 1003 | detail_object_surface = new DetailObjectSurface(); |
| 1004 | DetailObjectSurface &dos = *detail_object_surface; |
| 1005 | dos.AttachTo(terrain_simplified_model, identity); |
| 1006 | dos.GetTrisInPatches(identity); |
| 1007 | dos.LoadDetailModel(detail_object_layers[counter].obj_path); |
| 1008 | dos.LoadWeightMap(detail_object_layers[counter].weight_path); |
| 1009 | dos.SetDensity(detail_object_layers[counter].density); |
| 1010 | dos.tint_weight = (detail_object_layers[counter].tint_weight); |
| 1011 | dos.SetNormalConform(detail_object_layers[counter].normal_conform); |
| 1012 | dos.SetMinEmbed(detail_object_layers[counter].min_embed); |
| 1013 | dos.SetMaxEmbed(detail_object_layers[counter].max_embed); |
| 1014 | dos.SetMinScale(detail_object_layers[counter].min_scale); |
| 1015 | dos.SetMaxScale(detail_object_layers[counter].max_scale); |
| 1016 | dos.SetViewDist(detail_object_layers[counter].view_dist); |
| 1017 | dos.SetJitterDegrees(detail_object_layers[counter].jitter_degrees); |
| 1018 | dos.SetOverbright(detail_object_layers[counter].overbright); |
| 1019 | dos.SetCollisionType(detail_object_layers[counter].collision_type); |
| 1020 | ++counter; |
| 1021 | } |
| 1022 | if (normal_map_ref.valid()) { |
| 1023 | for (auto &detail_object_surface : detail_object_surfaces) { |
| 1024 | detail_object_surface->SetBaseTextures(color_texture_ref, normal_map_ref); |
| 1025 | } |
| 1026 | } |
| 1027 | } |
| 1028 | |
| 1029 | void Terrain::SetDetailTextures(const std::vector<DetailMapInfo> &_detail_maps_info) { |
| 1030 | if (normal_map_ref.valid() && (_detail_maps_info != detail_maps_info)) { |
no test coverage detected