519 if (doc->grid_enabled)
521 std::string line = fmt::format(
"grid {}, {}, {}\n");
522 stream->write(line.c_str(), line.length());
529 std::string line = fmt::format(
"trees {:9f}, {:9f}, {:9f}, {:9f}, {:9f}, {:9f}, {:9f}, {} {} {} {:9f} {}\n",
530 tree.yaw_from, tree.yaw_to,
531 tree.scale_from, tree.scale_to,
533 tree.min_distance, tree.max_distance,
534 tree.tree_mesh, tree.color_map, tree.density_map,
535 tree.grid_spacing, tree.collision_mesh);
536 stream->write(line.c_str(), line.length());
543 std::string line = fmt::format(
"grass2 {}, {:9f}, {:9f}, {:9f}, {:9f}, {:9f}, {:9f}, {:9f}, {:9f}, {}, {:9f}, {:9f}, {}, {} {} {}\n",
545 grass.sway_speed, grass.sway_length, grass.sway_distrib, grass.density,
546 grass.min_x, grass.min_y, grass.max_x, grass.max_y,
547 (
int)grass.fadetech, grass.min_h, grass.max_h, (
int)grass.technique,
549 grass.color_map_filename,
550 grass.density_map_filename);
551 stream->write(line.c_str(), line.length());
559 if (vehicle.comments !=
"")
561 for (Ogre::String& commenttext : Ogre::StringUtil::split(vehicle.comments,
"\n"))
563 std::string commentline = fmt::format(
"// {}\n", commenttext);
564 stream->write(commentline.c_str(), commentline.length());
568 std::string line = fmt::format(
"{:9f}, {:9f}, {:9f}, {:9f}, {:9f}, {:9f}, {} {}\n",
569 vehicle.position.x, vehicle.position.y, vehicle.position.z,
570 vehicle.tobj_rotation.x, vehicle.tobj_rotation.y, vehicle.tobj_rotation.z,
572 stream->write(line.c_str(), line.length());
579 std::string bline =
"begin_procedural_roads\n";
580 stream->write(bline.c_str(), bline.length());
582 std::string sline = fmt::format(
" smoothing_num_splits {}\n", procobj->smoothing_num_splits);
583 stream->write(sline.c_str(), sline.length());
585 std::string cline = fmt::format(
" collision_enabled {}\n", procobj->collision_enabled);
586 stream->write(cline.c_str(), cline.length());
590 std::string type_str;
598 case RoadType::ROAD_BRIDGE: type_str = (point->pillartype == 1) ?
"bridge" :
"bridge_no_pillars";
break;
603 if (point->comments !=
"")
605 for (Ogre::String& commenttext : Ogre::StringUtil::split(point->comments,
"\n"))
607 std::string commentline = fmt::format(
"// {}\n", commenttext);
608 stream->write(commentline.c_str(), commentline.length());
612 Ogre::Matrix3 point_rot_matrix;
613 point->rotation.ToRotationMatrix(point_rot_matrix);
614 Ogre::Radian yaw, pitch, roll;
615 point_rot_matrix.ToEulerAnglesYXZ(yaw, pitch, roll);
617 std::string line = fmt::format(
618 "\t{:13f}, {:13f}, {:13f}, 0, {:13f}, 0, {:13f}, {:13f}, {:13f}, {}\n",
619 point->position.x, point->position.y, point->position.z,
621 point->width, point->bwidth, point->bheight, type_str);
622 stream->write(line.c_str(), line.length());
625 std::string eline =
"end_procedural_roads\n";
626 stream->write(eline.c_str(), eline.length());
634 if (entry.comments !=
"")
636 for (Ogre::String& commenttext : Ogre::StringUtil::split(entry.comments,
"\n"))
638 std::string commentline = fmt::format(
"// {}\n", commenttext);
639 stream->write(commentline.c_str(), commentline.length());
644 std::string valid_instance_name;
645 if (strncmp(entry.instance_name,
"auto^", 5) != 0)
647 valid_instance_name = entry.instance_name;
650 std::string line = fmt::format(
"{:8.3f}, {:8.3f}, {:8.3f}, {:9f}, {:9f}, {:9f}, {} {} {}\n",
651 entry.position.x, entry.position.y, entry.position.z,
652 entry.rotation.x, entry.rotation.y, entry.rotation.z,
653 entry.odef_name, entry.type, valid_instance_name);
654 stream->write(line.c_str(), line.length());