Changeset View
Changeset View
Standalone View
Standalone View
source/simulation2/components/CCmpRallyPointRenderer.cpp
Show First 20 Lines • Show All 218 Lines • ▼ Show 20 Lines | case MT_PlayerColorChanged: | ||||
} | } | ||||
break; | break; | ||||
case MT_RenderSubmit: | case MT_RenderSubmit: | ||||
{ | { | ||||
PROFILE("RallyPoint::RenderSubmit"); | PROFILE("RallyPoint::RenderSubmit"); | ||||
if (m_Displayed && IsSet()) | if (m_Displayed && IsSet()) | ||||
{ | { | ||||
const CMessageRenderSubmit& msgData = static_cast<const CMessageRenderSubmit&> (msg); | const CMessageRenderSubmit& msgData = static_cast<const CMessageRenderSubmit&> (msg); | ||||
RenderSubmit(msgData.collector); | RenderSubmit(msgData.collector, msgData.frustum, msgData.culling); | ||||
} | } | ||||
} | } | ||||
break; | break; | ||||
case MT_OwnershipChanged: | case MT_OwnershipChanged: | ||||
{ | { | ||||
const CMessageOwnershipChanged& msgData = static_cast<const CMessageOwnershipChanged&> (msg); | const CMessageOwnershipChanged& msgData = static_cast<const CMessageOwnershipChanged&> (msg); | ||||
// Ignore destroyed entities | // Ignore destroyed entities | ||||
▲ Show 20 Lines • Show All 233 Lines • ▼ Show 20 Lines | private: | ||||
void ReduceSegmentsByVisibility(std::vector<CVector2D>& coords, unsigned maxSegmentLinks = 0, bool floating = true) const; | void ReduceSegmentsByVisibility(std::vector<CVector2D>& coords, unsigned maxSegmentLinks = 0, bool floating = true) const; | ||||
/** | /** | ||||
* Helper function to GetVisibilitySegments, factored out for testing. Merges single-point segments with its neighbouring | * Helper function to GetVisibilitySegments, factored out for testing. Merges single-point segments with its neighbouring | ||||
* segments. You should not have to call this method directly. | * segments. You should not have to call this method directly. | ||||
*/ | */ | ||||
static void MergeVisibilitySegments(std::deque<SVisibilitySegment>& segments); | static void MergeVisibilitySegments(std::deque<SVisibilitySegment>& segments); | ||||
void RenderSubmit(SceneCollector& collector); | void RenderSubmit(SceneCollector& collector, const CFrustum& frustum, bool culling); | ||||
}; | }; | ||||
REGISTER_COMPONENT_TYPE(RallyPointRenderer) | REGISTER_COMPONENT_TYPE(RallyPointRenderer) | ||||
void CCmpRallyPointRenderer::Init(const CParamNode& paramNode) | void CCmpRallyPointRenderer::Init(const CParamNode& paramNode) | ||||
{ | { | ||||
m_Displayed = false; | m_Displayed = false; | ||||
m_SmoothPath = true; | m_SmoothPath = true; | ||||
▲ Show 20 Lines • Show All 814 Lines • ▼ Show 20 Lines | void CCmpRallyPointRenderer::MergeVisibilitySegments(std::deque<SVisibilitySegment>& segments) | ||||
// at this point, every segment should have at least 2 points | // at this point, every segment should have at least 2 points | ||||
for (size_t i = 0; i < segments.size(); ++i) | for (size_t i = 0; i < segments.size(); ++i) | ||||
{ | { | ||||
ENSURE(!segments[i].IsSinglePoint()); | ENSURE(!segments[i].IsSinglePoint()); | ||||
ENSURE(segments[i].m_EndIndex > segments[i].m_StartIndex); | ENSURE(segments[i].m_EndIndex > segments[i].m_StartIndex); | ||||
} | } | ||||
} | } | ||||
void CCmpRallyPointRenderer::RenderSubmit(SceneCollector& collector) | void CCmpRallyPointRenderer::RenderSubmit(SceneCollector& collector, const CFrustum& frustum, bool culling) | ||||
{ | { | ||||
// we only get here if the rally point is set and should be displayed | // we only get here if the rally point is set and should be displayed | ||||
for (size_t i = 0; i < m_TexturedOverlayLines.size(); ++i) | for (size_t i = 0; i < m_TexturedOverlayLines.size(); ++i) | ||||
{ | { | ||||
for (size_t j = 0; j < m_TexturedOverlayLines[i].size(); ++j) | for (size_t j = 0; j < m_TexturedOverlayLines[i].size(); ++j) | ||||
{ | { | ||||
if (!m_TexturedOverlayLines[i][j].m_Coords.empty()) | if (m_TexturedOverlayLines[i][j].m_Coords.empty()) | ||||
continue; | |||||
if (culling && !m_TexturedOverlayLines[i][j].IsVisibleInFrustum(frustum)) | |||||
continue; | |||||
collector.Submit(&m_TexturedOverlayLines[i][j]); | collector.Submit(&m_TexturedOverlayLines[i][j]); | ||||
} | } | ||||
} | } | ||||
if (m_EnableDebugNodeOverlay && !m_DebugNodeOverlays.empty()) | if (m_EnableDebugNodeOverlay && !m_DebugNodeOverlays.empty()) | ||||
{ | { | ||||
for (size_t i = 0; i < m_DebugNodeOverlays.size(); ++i) | for (size_t i = 0; i < m_DebugNodeOverlays.size(); ++i) | ||||
for (size_t j = 0; j < m_DebugNodeOverlays[i].size(); ++j) | for (size_t j = 0; j < m_DebugNodeOverlays[i].size(); ++j) | ||||
collector.Submit(&m_DebugNodeOverlays[i][j]); | collector.Submit(&m_DebugNodeOverlays[i][j]); | ||||
} | } | ||||
} | } |
Wildfire Games · Phabricator