492 if (doc->grid_enabled)
494 std::string line = fmt::format(
"grid {}, {}, {}\n");
495 stream->write(line.c_str(), line.length());
502 std::string line = fmt::format(
"trees {:9f}, {:9f}, {:9f}, {:9f}, {:9f}, {:9f}, {:9f}, {} {} {} {:9f} {}\n",
503 tree.yaw_from, tree.yaw_to,
504 tree.scale_from, tree.scale_to,
506 tree.min_distance, tree.max_distance,
507 tree.tree_mesh, tree.color_map, tree.density_map,
508 tree.grid_spacing, tree.collision_mesh);
509 stream->write(line.c_str(), line.length());
516 std::string line = fmt::format(
"grass2 {}, {:9f}, {:9f}, {:9f}, {:9f}, {:9f}, {:9f}, {:9f}, {:9f}, {}, {:9f}, {:9f}, {}, {} {} {}\n",
518 grass.sway_speed, grass.sway_length, grass.sway_distrib, grass.density,
519 grass.min_x, grass.min_y, grass.max_x, grass.max_y,
520 grass.grow_techniq, grass.min_h, grass.max_h, grass.technique,
522 grass.color_map_filename,
523 grass.density_map_filename);
524 stream->write(line.c_str(), line.length());
532 if (vehicle.comments !=
"")
534 for (Ogre::String& commenttext : Ogre::StringUtil::split(vehicle.comments,
"\n"))
536 std::string commentline = fmt::format(
"// {}\n", commenttext);
537 stream->write(commentline.c_str(), commentline.length());
541 std::string line = fmt::format(
"{:9f}, {:9f}, {:9f}, {:9f}, {:9f}, {:9f}, {} {}\n",
542 vehicle.position.x, vehicle.position.y, vehicle.position.z,
543 vehicle.tobj_rotation.x, vehicle.tobj_rotation.y, vehicle.tobj_rotation.z,
545 stream->write(line.c_str(), line.length());
552 std::string bline =
"begin_procedural_roads\n";
553 stream->write(bline.c_str(), bline.length());
555 std::string sline = fmt::format(
" smoothing_num_splits {}\n", procobj->smoothing_num_splits);
556 stream->write(sline.c_str(), sline.length());
558 std::string cline = fmt::format(
" collision_enabled {}\n", procobj->collision_enabled);
559 stream->write(cline.c_str(), cline.length());
563 std::string type_str;
571 case RoadType::ROAD_BRIDGE: type_str = (point->pillartype == 1) ?
"bridge" :
"bridge_no_pillars";
break;
576 if (point->comments !=
"")
578 for (Ogre::String& commenttext : Ogre::StringUtil::split(point->comments,
"\n"))
580 std::string commentline = fmt::format(
"// {}\n", commenttext);
581 stream->write(commentline.c_str(), commentline.length());
585 Ogre::Matrix3 point_rot_matrix;
586 point->rotation.ToRotationMatrix(point_rot_matrix);
587 Ogre::Radian yaw, pitch, roll;
588 point_rot_matrix.ToEulerAnglesYXZ(yaw, pitch, roll);
590 std::string line = fmt::format(
591 "\t{:13f}, {:13f}, {:13f}, 0, {:13f}, 0, {:13f}, {:13f}, {:13f}, {}\n",
592 point->position.x, point->position.y, point->position.z,
594 point->width, point->bwidth, point->bheight, type_str);
595 stream->write(line.c_str(), line.length());
598 std::string eline =
"end_procedural_roads\n";
599 stream->write(eline.c_str(), eline.length());
607 if (entry.comments !=
"")
609 for (Ogre::String& commenttext : Ogre::StringUtil::split(entry.comments,
"\n"))
611 std::string commentline = fmt::format(
"// {}\n", commenttext);
612 stream->write(commentline.c_str(), commentline.length());
617 std::string valid_instance_name;
618 if (strncmp(entry.instance_name,
"auto^", 5) != 0)
620 valid_instance_name = entry.instance_name;
623 std::string line = fmt::format(
"{:8.3f}, {:8.3f}, {:8.3f}, {:9f}, {:9f}, {:9f}, {} {} {}\n",
624 entry.position.x, entry.position.y, entry.position.z,
625 entry.rotation.x, entry.rotation.y, entry.rotation.z,
626 entry.odef_name, entry.type, valid_instance_name);
627 stream->write(line.c_str(), line.length());