Added Game Mode in the World Editor

This commit is contained in:
parax0
2015-11-26 02:05:26 -07:00
parent 2e5678e863
commit 7a69346ff3
17 changed files with 123 additions and 17 deletions

View File

@@ -19,6 +19,7 @@ void CCollisionNode::AddToRenderer(CRenderer *pRenderer, const SViewInfo& ViewIn
{
if (!mpCollision) return;
if (!ViewInfo.ViewFrustum.BoxInFrustum(AABox())) return;
if (ViewInfo.GameMode) return;
pRenderer->AddOpaqueMesh(this, 0, AABox(), eDrawMesh);

View File

@@ -28,6 +28,7 @@ ENodeType CLightNode::NodeType()
void CLightNode::AddToRenderer(CRenderer *pRenderer, const SViewInfo& ViewInfo)
{
if (!ViewInfo.ViewFrustum.BoxInFrustum(AABox())) return;
if (ViewInfo.GameMode) return;
pRenderer->AddOpaqueMesh(this, 0, CAABox(mPosition + 0.5f, mPosition - 0.5f), eDrawMesh);
}

View File

@@ -20,6 +20,7 @@ void CModelNode::AddToRenderer(CRenderer *pRenderer, const SViewInfo& ViewInfo)
{
if (!mpModel) return;
if (!ViewInfo.ViewFrustum.BoxInFrustum(AABox())) return;
if (ViewInfo.GameMode) return;
if (!mpModel->HasTransparency(mActiveMatSet))
pRenderer->AddOpaqueMesh(this, 0, AABox(), eDrawMesh);

View File

@@ -105,12 +105,20 @@ void CScriptNode::AddToRenderer(CRenderer *pRenderer, const SViewInfo& ViewInfo)
{
if (!mpInstance) return;
// If we're in game mode, then override other visibility settings.
if (ViewInfo.GameMode)
{
if (!mpInstance->IsActive() || !mpInstance->HasInGameModel())
return;
}
// Otherwise, we proceed as normal
ERenderOptions options = pRenderer->RenderOptions();
if (options & eDrawObjectCollision)
if ((options & eDrawObjectCollision) && (!ViewInfo.GameMode))
mpCollisionNode->AddToRenderer(pRenderer, ViewInfo);
if (options & eDrawObjects)
if (options & eDrawObjects || ViewInfo.GameMode)
{
if (ViewInfo.ViewFrustum.BoxInFrustum(AABox()))
{
@@ -145,7 +153,7 @@ void CScriptNode::AddToRenderer(CRenderer *pRenderer, const SViewInfo& ViewInfo)
}
}
if (IsSelected())
if (IsSelected() && !ViewInfo.GameMode)
{
// Script nodes always draw their selections regardless of frustum planes
// in order to ensure that script connection lines don't get improperly culled.
@@ -286,7 +294,17 @@ SRayIntersection CScriptNode::RayNodeIntersectTest(const CRay& Ray, u32 AssetID,
out.pNode = this;
out.AssetIndex = AssetID;
if (options & eDrawObjects)
// If we're in game mode, then check whether we're visible before proceeding with the ray test.
if (ViewInfo.GameMode)
{
if (!mpInstance->IsActive() || !mpInstance->HasInGameModel())
{
out.Hit = false;
return out;
}
}
if (options & eDrawObjects || ViewInfo.GameMode)
{
// Model test
if (mpActiveModel || !mpBillboard)

View File

@@ -38,7 +38,7 @@ void CStaticNode::AddToRenderer(CRenderer *pRenderer, const SViewInfo& ViewInfo)
}
}
if (mSelected)
if (mSelected && !ViewInfo.GameMode)
pRenderer->AddOpaqueMesh(this, 0, AABox(), eDrawSelection);
}