Ticket #3814: cinematic_camera_cleanup_2.patch
File cinematic_camera_cleanup_2.patch, 7.7 KB (added by , 8 years ago) |
---|
-
source/graphics/CinemaPath.cpp
89 89 void CCinemaPath::Draw() const 90 90 { 91 91 DrawSpline(*this, CVector4D(0.2f, 0.2f, 1.f, 0.5f), 100, true); 92 DrawNodes(*this, CVector4D(0.5f, 1.0f, 0.f, 0.5f)); 93 94 if (!m_LookAtTarget) 95 return; 96 92 97 DrawSpline(m_TargetSpline, CVector4D(1.0f, 0.2f, 0.2f, 0.5f), 100, true); 93 DrawNodes( CVector4D(0.5f, 1.0f, 0.f, 0.5f));98 DrawNodes(m_TargetSpline, CVector4D(1.0f, 0.5f, 0.f, 0.5f)); 94 99 } 95 100 96 101 void CCinemaPath::DrawSpline(const RNSpline& spline, const CVector4D& RGBA, int smoothness, bool lines) const … … 157 162 #endif 158 163 } 159 164 160 void CCinemaPath::DrawNodes(const CVector4D& RGBA) const165 void CCinemaPath::DrawNodes(const RNSpline& spline, const CVector4D& RGBA) const 161 166 { 162 167 #if CONFIG2_GLES 163 168 #warning TODO : do something about CCinemaPath on GLES … … 167 172 168 173 glColor4f(RGBA.X, RGBA.Y, RGBA.Z, RGBA.W); 169 174 glBegin(GL_POINTS); 170 for (size_t i = 0; i < Node.size(); ++i) 171 glVertex3f(Node[i].Position.X.ToFloat(), Node[i].Position.Y.ToFloat(), Node[i].Position.Z.ToFloat()); 175 const std::vector<SplineData> nodes = spline.GetAllNodes(); 176 for (size_t i = 0; i < nodes.size(); ++i) 177 glVertex3f(nodes[i].Position.X.ToFloat(), nodes[i].Position.Y.ToFloat(), nodes[i].Position.Z.ToFloat()); 172 178 glEnd(); 173 179 174 if (!m_LookAtTarget)175 {176 glPointSize(1.0f);177 glDisable(GL_POINT_SMOOTH);178 return;179 }180 181 // draw target nodes182 glColor4f(RGBA.Y, RGBA.X, RGBA.Z, RGBA.W);183 glBegin(GL_POINTS);184 for (size_t i = 0; i < m_TargetSpline.GetAllNodes().size(); ++i)185 glVertex3f(186 m_TargetSpline.GetAllNodes()[i].Position.X.ToFloat(),187 m_TargetSpline.GetAllNodes()[i].Position.Y.ToFloat(),188 m_TargetSpline.GetAllNodes()[i].Position.Z.ToFloat()189 );190 glEnd();191 192 180 glPointSize(1.0f); 193 181 glDisable(GL_POINT_SMOOTH); 194 182 #endif … … 357 345 { 358 346 m_TimeElapsed += m_Timescale.ToFloat() * deltaRealTime; 359 347 if (!Validate()) 360 {361 m_TimeElapsed = 0.0f;362 348 return false; 363 }364 349 365 350 MoveToPointAt(m_TimeElapsed / GetDuration().ToFloat(), GetNodeFraction(), m_PreviousRotation); 366 351 return true; … … 371 356 return Node.empty(); 372 357 } 373 358 359 void CCinemaPath::Reset() 360 { 361 m_TimeElapsed = 0.0f; 362 } 363 374 364 fixed CCinemaPath::GetTimescale() const 375 365 { 376 366 return m_Timescale; 377 367 } 378 368 379 const TNSpline& CCinemaPath:: getTargetSpline() const369 const TNSpline& CCinemaPath::GetTargetSpline() const 380 370 { 381 371 return m_TargetSpline; 382 372 } -
source/graphics/CinemaPath.h
85 85 86 86 void Draw() const; 87 87 void DrawSpline(const RNSpline& spline, const CVector4D& RGBA, int smoothness, bool lines) const; 88 void DrawNodes(const CVector4D& RGBA) const;88 void DrawNodes(const RNSpline& spline, const CVector4D& RGBA) const; 89 89 90 90 CVector3D GetNodePosition(const int index) const; 91 91 fixed GetNodeDuration(const int index) const; … … 123 123 */ 124 124 bool Empty() const; 125 125 126 /** 127 * Resets the path state 128 */ 129 void Reset(); 130 126 131 fixed GetTimescale() const; 127 132 128 const TNSpline& getTargetSpline() const;133 const TNSpline& GetTargetSpline() const; 129 134 130 135 private: 131 136 -
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 const std::vector<SplineData>& target_nodes = it->second.GetTargetSpline().GetAllNodes(); 414 414 const CCinemaData* data = it->second.GetData(); 415 415 416 416 XML_Element("Path"); -
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 { 103 103 if (i > 0) 104 serialize.NumberFixed_Unbounded("NodeDeltaTime", nodes[i - 1].Distance);104 serialize.NumberFixed_Unbounded("NodeDeltaTime", targetNodes[i - 1].Distance); 105 105 else 106 106 serialize.NumberFixed_Unbounded("NodeDeltaTime", fixed::Zero()); 107 serialize.NumberFixed_Unbounded("PositionX", nodes[i].Position.X);108 serialize.NumberFixed_Unbounded("PositionY", nodes[i].Position.Y);109 serialize.NumberFixed_Unbounded("PositionZ", nodes[i].Position.Z);107 serialize.NumberFixed_Unbounded("PositionX", targetNodes[i].Position.X); 108 serialize.NumberFixed_Unbounded("PositionY", targetNodes[i].Position.Y); 109 serialize.NumberFixed_Unbounded("PositionZ", targetNodes[i].Position.Z); 110 110 } 111 111 } 112 112 } … … 188 188 if (!pCinematicSimulationData->m_Enabled) 189 189 break; 190 190 191 pCinematicSimulationData->m_ElapsedTime += msgData.turnLength; 192 pCinematicSimulationData->m_CurrentPathElapsedTime += msgData.turnLength; 193 if (pCinematicSimulationData->m_CurrentPathElapsedTime >= pCinematicSimulationData->m_PathQueue.front().GetDuration()) 194 { 195 CMessageCinemaPathEnded msgCinemaPathEnded(pCinematicSimulationData->m_PathQueue.front().GetName()); 196 pCinematicSimulationData->m_PathQueue.pop_front(); 197 g_Game->GetSimulation2()->PostMessage(SYSTEM_ENTITY, msgCinemaPathEnded); 198 pCinematicSimulationData->m_CurrentPathElapsedTime = fixed::Zero(); 199 if (!pCinematicSimulationData->m_PathQueue.empty()) 200 pCinematicSimulationData->m_PathQueue.front().Reset(); 201 } 191 202 if (pCinematicSimulationData->m_ElapsedTime >= pCinematicSimulationData->m_TotalTime) 192 203 { 204 pCinematicSimulationData->m_CurrentPathElapsedTime = fixed::Zero(); 193 205 pCinematicSimulationData->m_ElapsedTime = fixed::Zero(); 194 206 pCinematicSimulationData->m_TotalTime = fixed::Zero(); 195 207 g_Game->GetView()->GetCinema()->SetEnabled(false); 196 208 g_Game->GetSimulation2()->PostMessage(SYSTEM_ENTITY, CMessageCinemaQueueEnded()); 197 209 } 198 else199 {200 pCinematicSimulationData->m_ElapsedTime += msgData.turnLength;201 pCinematicSimulationData->m_CurrentPathElapsedTime += msgData.turnLength;202 if (pCinematicSimulationData->m_CurrentPathElapsedTime >= pCinematicSimulationData->m_PathQueue.front().GetDuration())203 {204 CMessageCinemaPathEnded msgCinemaPathEnded(pCinematicSimulationData->m_PathQueue.front().GetName());205 pCinematicSimulationData->m_PathQueue.pop_front();206 g_Game->GetSimulation2()->PostMessage(SYSTEM_ENTITY, msgCinemaPathEnded);207 }208 }209 210 break; 210 211 } 211 212 default: … … 218 219 if (!g_Game || !g_Game->GetView()) 219 220 return; 220 221 g_Game->GetView()->GetCinema()->AddPathToQueue(name); 221 CinematicSimulationData* pGetCinematicSimulationData = g_Game->GetView()->GetCinema()->GetCinematicSimulationData(); 222 pGetCinematicSimulationData->m_TotalTime += pGetCinematicSimulationData->m_Paths[name].GetDuration(); 222 CinematicSimulationData* pCinematicSimulationData = g_Game->GetView()->GetCinema()->GetCinematicSimulationData(); 223 if (pCinematicSimulationData->m_PathQueue.size() == 1) 224 pCinematicSimulationData->m_PathQueue.front().Reset(); 225 pCinematicSimulationData->m_TotalTime += pCinematicSimulationData->m_Paths[name].GetDuration(); 223 226 } 224 227 225 228 virtual void Play()