Ticket #3301: cinematic_camera_map_saving_fix.patch
File cinematic_camera_map_saving_fix.patch, 3.3 KB (added by , 8 years ago) |
---|
-
source/graphics/CinemaPath.h
126 126 127 127 fixed GetTimescale() const { return m_Timescale; } 128 128 129 TNSpline* getTargetSpline() { return &m_TargetSpline; }129 const TNSpline& getTargetSpline() const { return m_TargetSpline; } 130 130 131 131 private: 132 132 -
source/graphics/MapWriter.cpp
410 410 { 411 411 fixed timescale = it->second.GetTimescale(); 412 412 const std::vector<SplineData>& nodes = it->second.GetAllNodes(); 413 const std::vector<SplineData>& target_nodes = it->second.getTargetSpline().GetAllNodes(); 413 414 const CCinemaData* data = it->second.GetData(); 414 415 415 416 XML_Element("Path"); … … 419 420 XML_Attribute("mode", data->m_Mode); 420 421 XML_Attribute("style", data->m_Style); 421 422 422 // TODO: write target nodes423 for (size_t j = 0; j < nodes.size(); ++j)423 fixed last_target = fixed::Zero(); 424 for (size_t i = 0, j = 0; i < nodes.size(); ++i) 424 425 { 425 426 XML_Element("Node"); 426 if (j > 0)427 XML_Attribute("deltatime", nodes[j - 1].Distance);428 else 429 XML_Attribute("deltatime", 0.0f);430 427 fixed distance = i > 0 ? nodes[i - 1].Distance : fixed::Zero(); 428 last_target += distance; 429 430 XML_Attribute("deltatime", distance); 431 431 432 { 432 433 XML_Element("Position"); 433 XML_Attribute("x", nodes[ j].Position.X);434 XML_Attribute("y", nodes[ j].Position.Y);435 XML_Attribute("z", nodes[ j].Position.Z);434 XML_Attribute("x", nodes[i].Position.X); 435 XML_Attribute("y", nodes[i].Position.Y); 436 XML_Attribute("z", nodes[i].Position.Z); 436 437 } 437 438 438 439 { 439 440 XML_Element("Rotation"); 440 XML_Attribute("x", nodes[ j].Rotation.X);441 XML_Attribute("y", nodes[ j].Rotation.Y);442 XML_Attribute("z", nodes[ j].Rotation.Z);441 XML_Attribute("x", nodes[i].Rotation.X); 442 XML_Attribute("y", nodes[i].Rotation.Y); 443 XML_Attribute("z", nodes[i].Rotation.Z); 443 444 } 445 446 if (j >= target_nodes.size()) 447 continue; 448 449 fixed target_distance = j > 0 ? target_nodes[j - 1].Distance : fixed::Zero(); 450 451 if (target_distance > last_target) 452 continue; 453 454 { 455 XML_Element("Target"); 456 XML_Attribute("x", target_nodes[j].Position.X); 457 XML_Attribute("y", target_nodes[j].Position.Y); 458 XML_Attribute("z", target_nodes[j].Position.Z); 459 } 460 461 last_target = fixed::Zero(); 462 ++j; 444 463 } 445 464 } 446 465 } -
source/simulation2/components/CCmpCinemaManager.cpp
96 96 if (!data->m_LookAtTarget) 97 97 continue; 98 98 99 const std::vector<SplineData>& targetNodes = path.getTargetSpline() ->GetAllNodes();99 const std::vector<SplineData>& targetNodes = path.getTargetSpline().GetAllNodes(); 100 100 serialize.NumberU32("NumberOfTargetNodes", targetNodes.size(), 1, MAX_SPLINE_NODES); 101 101 for (size_t i = 0; i < targetNodes.size(); ++i) 102 102 {