1
0
forked from 0ad/0ad

Fixes actor viewer bug where view was obstructed by map's water level. Fixes #1562.

Adds water plane option to actor viewer.

This was SVN commit r12715.
This commit is contained in:
historic_bruno 2012-09-28 18:20:36 +00:00
parent 9fadd9017f
commit 7d8dc05c68
13 changed files with 101 additions and 34 deletions

View File

@ -211,6 +211,9 @@ void Render()
if (g_Game && g_Game->IsGameStarted()) if (g_Game && g_Game->IsGameStarted())
g_Game->GetView()->BeginFrame(); g_Game->GetView()->BeginFrame();
if (g_Game)
g_Renderer.SetSimulation(g_Game->GetSimulation2());
// start new frame // start new frame
g_Renderer.BeginFrame(); g_Renderer.BeginFrame();

View File

@ -38,8 +38,8 @@
// case we should probably redesign this to batch them all together for more // case we should probably redesign this to batch them all together for more
// efficient rendering. // efficient rendering.
CDecalRData::CDecalRData(CModelDecal* decal) CDecalRData::CDecalRData(CModelDecal* decal, CSimulation2* simulation)
: m_Decal(decal), m_IndexArray(GL_STATIC_DRAW), m_Array(GL_STATIC_DRAW) : m_Decal(decal), m_IndexArray(GL_STATIC_DRAW), m_Array(GL_STATIC_DRAW), m_Simulation(simulation)
{ {
m_Position.type = GL_FLOAT; m_Position.type = GL_FLOAT;
m_Position.elems = 3; m_Position.elems = 3;
@ -60,8 +60,9 @@ CDecalRData::~CDecalRData()
{ {
} }
void CDecalRData::Update() void CDecalRData::Update(CSimulation2* simulation)
{ {
m_Simulation = simulation;
if (m_UpdateFlags != 0) if (m_UpdateFlags != 0)
{ {
BuildArrays(); BuildArrays();
@ -201,7 +202,7 @@ void CDecalRData::BuildArrays()
// Construct vertex data arrays // Construct vertex data arrays
CmpPtr<ICmpWaterManager> cmpWaterManager(*g_Game->GetSimulation2(), SYSTEM_ENTITY); CmpPtr<ICmpWaterManager> cmpWaterManager(*m_Simulation, SYSTEM_ENTITY);
m_Array.SetNumVertices((i1-i0+1)*(j1-j0+1)); m_Array.SetNumVertices((i1-i0+1)*(j1-j0+1));
m_Array.Layout(); m_Array.Layout();

View File

@ -1,4 +1,4 @@
/* Copyright (C) 2011 Wildfire Games. /* Copyright (C) 2012 Wildfire Games.
* This file is part of 0 A.D. * This file is part of 0 A.D.
* *
* 0 A.D. is free software: you can redistribute it and/or modify * 0 A.D. is free software: you can redistribute it and/or modify
@ -25,14 +25,15 @@
#include "renderer/VertexArray.h" #include "renderer/VertexArray.h"
class CModelDecal; class CModelDecal;
class CSimulation2;
class CDecalRData : public CRenderData class CDecalRData : public CRenderData
{ {
public: public:
CDecalRData(CModelDecal* decal); CDecalRData(CModelDecal* decal, CSimulation2* simulation);
~CDecalRData(); ~CDecalRData();
void Update(); void Update(CSimulation2* simulation);
static void RenderDecals(std::vector<CDecalRData*>& decals, const CShaderDefines& context, static void RenderDecals(std::vector<CDecalRData*>& decals, const CShaderDefines& context,
ShadowMap* shadow, bool isDummyShader=false, const CShaderProgramPtr& dummy=CShaderProgramPtr()); ShadowMap* shadow, bool isDummyShader=false, const CShaderProgramPtr& dummy=CShaderProgramPtr());
@ -50,6 +51,8 @@ private:
VertexArray::Attribute m_UV; VertexArray::Attribute m_UV;
CModelDecal* m_Decal; CModelDecal* m_Decal;
CSimulation2* m_Simulation;
}; };
#endif // INCLUDED_DECALRDATA #endif // INCLUDED_DECALRDATA

View File

@ -59,11 +59,12 @@ const ssize_t BlendOffsets[9][2] = {
/////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////
// CPatchRData constructor // CPatchRData constructor
CPatchRData::CPatchRData(CPatch* patch) : CPatchRData::CPatchRData(CPatch* patch, CSimulation2* simulation) :
m_Patch(patch), m_VBSides(0), m_Patch(patch), m_VBSides(0),
m_VBBase(0), m_VBBaseIndices(0), m_VBBase(0), m_VBBaseIndices(0),
m_VBBlends(0), m_VBBlendIndices(0), m_VBBlends(0), m_VBBlendIndices(0),
m_VBWater(0), m_VBWaterIndices(0) m_VBWater(0), m_VBWaterIndices(0),
m_Simulation(simulation)
{ {
ENSURE(patch); ENSURE(patch);
Build(); Build();
@ -572,7 +573,7 @@ void CPatchRData::BuildSide(std::vector<SSideVertex>& vertices, CPatchSideFlags
{ {
ssize_t vsize = PATCH_SIZE + 1; ssize_t vsize = PATCH_SIZE + 1;
CTerrain* terrain = m_Patch->m_Parent; CTerrain* terrain = m_Patch->m_Parent;
CmpPtr<ICmpWaterManager> cmpWaterManager(*g_Game->GetSimulation2(), SYSTEM_ENTITY); CmpPtr<ICmpWaterManager> cmpWaterManager(*m_Simulation, SYSTEM_ENTITY);
for (ssize_t k = 0; k < vsize; k++) for (ssize_t k = 0; k < vsize; k++)
{ {
@ -658,8 +659,9 @@ void CPatchRData::Build()
BuildWater(); BuildWater();
} }
void CPatchRData::Update() void CPatchRData::Update(CSimulation2* simulation)
{ {
m_Simulation = simulation;
if (m_UpdateFlags!=0) { if (m_UpdateFlags!=0) {
// TODO,RC 11/04/04 - need to only rebuild necessary bits of renderdata rather // TODO,RC 11/04/04 - need to only rebuild necessary bits of renderdata rather
// than everything; it's complicated slightly because the blends are dependent // than everything; it's complicated slightly because the blends are dependent
@ -1292,7 +1294,7 @@ void CPatchRData::BuildWater()
// We need to use this to access the water manager or we may not have the // We need to use this to access the water manager or we may not have the
// actual values but some compiled-in defaults // actual values but some compiled-in defaults
CmpPtr<ICmpWaterManager> cmpWaterManager(*g_Game->GetSimulation2(), SYSTEM_ENTITY); CmpPtr<ICmpWaterManager> cmpWaterManager(*m_Simulation, SYSTEM_ENTITY);
if (!cmpWaterManager) if (!cmpWaterManager)
return; return;

View File

@ -27,6 +27,7 @@
#include "VertexBufferManager.h" #include "VertexBufferManager.h"
class CPatch; class CPatch;
class CSimulation2;
class CTerrainTextureEntry; class CTerrainTextureEntry;
class CTextRenderer; class CTextRenderer;
@ -36,10 +37,10 @@ class CTextRenderer;
class CPatchRData : public CRenderData class CPatchRData : public CRenderData
{ {
public: public:
CPatchRData(CPatch* patch); CPatchRData(CPatch* patch, CSimulation2* simulation);
~CPatchRData(); ~CPatchRData();
void Update(); void Update(CSimulation2* simulation);
void RenderOutline(); void RenderOutline();
void RenderSides(CShaderProgramPtr& shader); void RenderSides(CShaderProgramPtr& shader);
void RenderPriorities(CTextRenderer& textRenderer); void RenderPriorities(CTextRenderer& textRenderer);
@ -157,6 +158,8 @@ private:
// Water indices buffer // Water indices buffer
CVertexBuffer::VBChunk* m_VBWaterIndices; CVertexBuffer::VBChunk* m_VBWaterIndices;
CSimulation2* m_Simulation;
// Build water vertices and indices (vertex buffer and data vector) // Build water vertices and indices (vertex buffer and data vector)
void BuildWater(); void BuildWater();

View File

@ -801,6 +801,12 @@ void CRenderer::BeginFrame()
} }
////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////
void CRenderer::SetSimulation(CSimulation2* simulation)
{
// set current simulation context for terrain renderer
m->terrainRenderer.SetSimulation(simulation);
}
// SetClearColor: set color used to clear screen in BeginFrame() // SetClearColor: set color used to clear screen in BeginFrame()
void CRenderer::SetClearColor(SColor4ub color) void CRenderer::SetClearColor(SColor4ub color)
{ {

View File

@ -34,21 +34,21 @@
#include "renderer/TimeManager.h" #include "renderer/TimeManager.h"
// necessary declarations // necessary declarations
class CPatch;
class CMaterial;
class CModel;
class CLightEnv; class CLightEnv;
class CShaderDefines; class CMaterial;
class RenderPathVertexShader;
class WaterManager;
class SkyManager;
class CTextureManager;
class CShaderManager;
class CParticleManager;
class TerrainRenderer;
class CTimeManager;
class CMaterialManager; class CMaterialManager;
class CModel;
class CParticleManager;
class CPatch;
class CShaderDefines;
class CShaderManager;
class CSimulation2;
class CTextureManager;
class CTimeManager;
class RenderPathVertexShader;
class SkyManager;
class TerrainRenderer;
class WaterManager;
// rendering modes // rendering modes
enum ERenderMode { WIREFRAME, SOLID, EDGED_FACES }; enum ERenderMode { WIREFRAME, SOLID, EDGED_FACES };
@ -177,6 +177,13 @@ public:
// signal frame end // signal frame end
void EndFrame(); void EndFrame();
/**
* Set simulation context for rendering purposes.
* Must be called at least once when the game has started and before
* frames are rendered.
*/
void SetSimulation(CSimulation2* simulation);
// set color used to clear screen in BeginFrame() // set color used to clear screen in BeginFrame()
void SetClearColor(SColor4ub color); void SetClearColor(SColor4ub color);

View File

@ -84,6 +84,8 @@ struct TerrainRendererInternals
/// Fancy water shader /// Fancy water shader
CShaderProgramPtr fancyWaterShader; CShaderProgramPtr fancyWaterShader;
CSimulation2* simulation;
}; };
@ -101,6 +103,10 @@ TerrainRenderer::~TerrainRenderer()
delete m; delete m;
} }
void TerrainRenderer::SetSimulation(CSimulation2* simulation)
{
m->simulation = simulation;
}
/////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////
// Submit a patch for rendering // Submit a patch for rendering
@ -112,10 +118,10 @@ void TerrainRenderer::Submit(CPatch* patch)
if (data == 0) if (data == 0)
{ {
// no renderdata for patch, create it now // no renderdata for patch, create it now
data = new CPatchRData(patch); data = new CPatchRData(patch, m->simulation);
patch->SetRenderData(data); patch->SetRenderData(data);
} }
data->Update(); data->Update(m->simulation);
m->visiblePatches.push_back(data); m->visiblePatches.push_back(data);
} }
@ -130,10 +136,10 @@ void TerrainRenderer::Submit(CModelDecal* decal)
if (data == 0) if (data == 0)
{ {
// no renderdata for decal, create it now // no renderdata for decal, create it now
data = new CDecalRData(decal); data = new CDecalRData(decal, m->simulation);
decal->SetRenderData(data); decal->SetRenderData(data);
} }
data->Update(); data->Update(m->simulation);
m->visibleDecals.push_back(data); m->visibleDecals.push_back(data);
} }

View File

@ -24,6 +24,7 @@
#define INCLUDED_TERRAINRENDERER #define INCLUDED_TERRAINRENDERER
class CPatch; class CPatch;
class CSimulation2;
class ShadowMap; class ShadowMap;
class WaterManager; class WaterManager;
@ -42,6 +43,12 @@ public:
TerrainRenderer(); TerrainRenderer();
~TerrainRenderer(); ~TerrainRenderer();
/**
* Set the simulation context for this frame.
* Call at start of frame, before any other Submits.
*/
void SetSimulation(CSimulation2* simulation);
/** /**
* Submit: Add a patch for rendering in this frame. * Submit: Add a patch for rendering in this frame.
* *

View File

@ -41,6 +41,7 @@ enum
ID_ViewerWireframe, ID_ViewerWireframe,
ID_ViewerMove, ID_ViewerMove,
ID_ViewerGround, ID_ViewerGround,
ID_ViewerWater,
ID_ViewerShadows, ID_ViewerShadows,
ID_ViewerPolyCount, ID_ViewerPolyCount,
ID_ViewerAnimation, ID_ViewerAnimation,
@ -81,6 +82,7 @@ private:
bool m_ViewerWireframe; bool m_ViewerWireframe;
bool m_ViewerMove; bool m_ViewerMove;
bool m_ViewerGround; bool m_ViewerGround;
bool m_ViewerWater;
bool m_ViewerShadows; bool m_ViewerShadows;
bool m_ViewerPolyCount; bool m_ViewerPolyCount;
bool m_ViewerBoundingBox; bool m_ViewerBoundingBox;
@ -371,6 +373,7 @@ ObjectBottomBar::ObjectBottomBar(
m_ViewerWireframe = false; m_ViewerWireframe = false;
m_ViewerMove = false; m_ViewerMove = false;
m_ViewerGround = true; m_ViewerGround = true;
m_ViewerWater = false;
m_ViewerShadows = true; m_ViewerShadows = true;
m_ViewerPolyCount = false; m_ViewerPolyCount = false;
m_ViewerBoundingBox = false; m_ViewerBoundingBox = false;
@ -391,12 +394,13 @@ ObjectBottomBar::ObjectBottomBar(
viewerButtonsLeft->Add(Tooltipped(new wxButton(m_ViewerPanel, ID_ViewerWireframe, _("Wireframe")), _("Toggle wireframe / solid rendering")), wxSizerFlags().Expand()); viewerButtonsLeft->Add(Tooltipped(new wxButton(m_ViewerPanel, ID_ViewerWireframe, _("Wireframe")), _("Toggle wireframe / solid rendering")), wxSizerFlags().Expand());
viewerButtonsLeft->Add(Tooltipped(new wxButton(m_ViewerPanel, ID_ViewerMove, _("Move")), _("Toggle movement along ground when playing walk/run animations")), wxSizerFlags().Expand()); viewerButtonsLeft->Add(Tooltipped(new wxButton(m_ViewerPanel, ID_ViewerMove, _("Move")), _("Toggle movement along ground when playing walk/run animations")), wxSizerFlags().Expand());
viewerButtonsLeft->Add(Tooltipped(new wxButton(m_ViewerPanel, ID_ViewerGround, _("Ground")), _("Toggle the ground plane")), wxSizerFlags().Expand()); viewerButtonsLeft->Add(Tooltipped(new wxButton(m_ViewerPanel, ID_ViewerGround, _("Ground")), _("Toggle the ground plane")), wxSizerFlags().Expand());
viewerButtonsLeft->Add(Tooltipped(new wxButton(m_ViewerPanel, ID_ViewerWater, _("Water")), _("Toggle the water plane")), wxSizerFlags().Expand());
viewerButtonsLeft->Add(Tooltipped(new wxButton(m_ViewerPanel, ID_ViewerShadows, _("Shadows")), _("Toggle shadow rendering")), wxSizerFlags().Expand()); viewerButtonsLeft->Add(Tooltipped(new wxButton(m_ViewerPanel, ID_ViewerShadows, _("Shadows")), _("Toggle shadow rendering")), wxSizerFlags().Expand());
viewerButtonsLeft->Add(Tooltipped(new wxButton(m_ViewerPanel, ID_ViewerPolyCount, _("Poly count")), _("Toggle polygon-count statistics - turn off ground and shadows for more useful data")), wxSizerFlags().Expand()); viewerButtonsLeft->Add(Tooltipped(new wxButton(m_ViewerPanel, ID_ViewerPolyCount, _("Poly count")), _("Toggle polygon-count statistics - turn off ground and shadows for more useful data")), wxSizerFlags().Expand());
viewerButtonsLeft->Add(Tooltipped(new wxButton(m_ViewerPanel, ID_ViewerBoundingBox, _("Bounding Boxes")), _("Toggle bounding boxes")), wxSizerFlags().Expand());
wxSizer* viewerButtonsRight = new wxBoxSizer(wxVERTICAL); wxSizer* viewerButtonsRight = new wxBoxSizer(wxVERTICAL);
viewerButtonsRight->SetMinSize(110,-1); viewerButtonsRight->SetMinSize(110,-1);
viewerButtonsRight->Add(Tooltipped(new wxButton(m_ViewerPanel, ID_ViewerBoundingBox, _("Bounding Boxes")), _("Toggle bounding boxes")), wxSizerFlags().Expand());
viewerButtonsRight->Add(Tooltipped(new wxButton(m_ViewerPanel, ID_ViewerAxesMarker, _("Axes Marker")), _("Toggle the axes marker (R=X, G=Y, B=Z)")), wxSizerFlags().Expand()); viewerButtonsRight->Add(Tooltipped(new wxButton(m_ViewerPanel, ID_ViewerAxesMarker, _("Axes Marker")), _("Toggle the axes marker (R=X, G=Y, B=Z)")), wxSizerFlags().Expand());
viewerButtonsRight->Add(Tooltipped(new wxButton(m_ViewerPanel, ID_ViewerPropPoints, _("Prop Points")), _("Toggle prop points (works best in wireframe mode)")), wxSizerFlags().Expand()); viewerButtonsRight->Add(Tooltipped(new wxButton(m_ViewerPanel, ID_ViewerPropPoints, _("Prop Points")), _("Toggle prop points (works best in wireframe mode)")), wxSizerFlags().Expand());
@ -487,6 +491,7 @@ void ObjectBottomBar::OnFirstDisplay()
POST_MESSAGE(SetViewParamB, (AtlasMessage::eRenderView::ACTOR, L"wireframe", m_ViewerWireframe)); POST_MESSAGE(SetViewParamB, (AtlasMessage::eRenderView::ACTOR, L"wireframe", m_ViewerWireframe));
POST_MESSAGE(SetViewParamB, (AtlasMessage::eRenderView::ACTOR, L"walk", m_ViewerMove)); POST_MESSAGE(SetViewParamB, (AtlasMessage::eRenderView::ACTOR, L"walk", m_ViewerMove));
POST_MESSAGE(SetViewParamB, (AtlasMessage::eRenderView::ACTOR, L"ground", m_ViewerGround)); POST_MESSAGE(SetViewParamB, (AtlasMessage::eRenderView::ACTOR, L"ground", m_ViewerGround));
POST_MESSAGE(SetViewParamB, (AtlasMessage::eRenderView::ACTOR, L"water", m_ViewerWater));
POST_MESSAGE(SetViewParamB, (AtlasMessage::eRenderView::ACTOR, L"shadows", m_ViewerShadows)); POST_MESSAGE(SetViewParamB, (AtlasMessage::eRenderView::ACTOR, L"shadows", m_ViewerShadows));
POST_MESSAGE(SetViewParamB, (AtlasMessage::eRenderView::ACTOR, L"stats", m_ViewerPolyCount)); POST_MESSAGE(SetViewParamB, (AtlasMessage::eRenderView::ACTOR, L"stats", m_ViewerPolyCount));
POST_MESSAGE(SetViewParamB, (AtlasMessage::eRenderView::ACTOR, L"bounding_box", m_ViewerBoundingBox)); POST_MESSAGE(SetViewParamB, (AtlasMessage::eRenderView::ACTOR, L"bounding_box", m_ViewerBoundingBox));
@ -515,6 +520,10 @@ void ObjectBottomBar::OnViewerSetting(wxCommandEvent& evt)
m_ViewerGround = !m_ViewerGround; m_ViewerGround = !m_ViewerGround;
POST_MESSAGE(SetViewParamB, (AtlasMessage::eRenderView::ACTOR, L"ground", m_ViewerGround)); POST_MESSAGE(SetViewParamB, (AtlasMessage::eRenderView::ACTOR, L"ground", m_ViewerGround));
break; break;
case ID_ViewerWater:
m_ViewerWater = !m_ViewerWater;
POST_MESSAGE(SetViewParamB, (AtlasMessage::eRenderView::ACTOR, L"water", m_ViewerWater));
break;
case ID_ViewerShadows: case ID_ViewerShadows:
m_ViewerShadows = !m_ViewerShadows; m_ViewerShadows = !m_ViewerShadows;
POST_MESSAGE(SetViewParamB, (AtlasMessage::eRenderView::ACTOR, L"shadows", m_ViewerShadows)); POST_MESSAGE(SetViewParamB, (AtlasMessage::eRenderView::ACTOR, L"shadows", m_ViewerShadows));
@ -559,6 +568,7 @@ BEGIN_EVENT_TABLE(ObjectBottomBar, wxPanel)
EVT_BUTTON(ID_ViewerWireframe, ObjectBottomBar::OnViewerSetting) EVT_BUTTON(ID_ViewerWireframe, ObjectBottomBar::OnViewerSetting)
EVT_BUTTON(ID_ViewerMove, ObjectBottomBar::OnViewerSetting) EVT_BUTTON(ID_ViewerMove, ObjectBottomBar::OnViewerSetting)
EVT_BUTTON(ID_ViewerGround, ObjectBottomBar::OnViewerSetting) EVT_BUTTON(ID_ViewerGround, ObjectBottomBar::OnViewerSetting)
EVT_BUTTON(ID_ViewerWater, ObjectBottomBar::OnViewerSetting)
EVT_BUTTON(ID_ViewerShadows, ObjectBottomBar::OnViewerSetting) EVT_BUTTON(ID_ViewerShadows, ObjectBottomBar::OnViewerSetting)
EVT_BUTTON(ID_ViewerPolyCount, ObjectBottomBar::OnViewerSetting) EVT_BUTTON(ID_ViewerPolyCount, ObjectBottomBar::OnViewerSetting)
EVT_CHOICE(ID_ViewerAnimation, ObjectBottomBar::OnSelectAnim) EVT_CHOICE(ID_ViewerAnimation, ObjectBottomBar::OnSelectAnim)

View File

@ -54,6 +54,7 @@
#include "simulation2/components/ICmpTerrain.h" #include "simulation2/components/ICmpTerrain.h"
#include "simulation2/components/ICmpUnitMotion.h" #include "simulation2/components/ICmpUnitMotion.h"
#include "simulation2/components/ICmpVisual.h" #include "simulation2/components/ICmpVisual.h"
#include "simulation2/components/ICmpWaterManager.h"
#include "simulation2/helpers/Render.h" #include "simulation2/helpers/Render.h"
struct ActorViewerImpl : public Scene struct ActorViewerImpl : public Scene
@ -81,6 +82,7 @@ public:
float CurrentSpeed; float CurrentSpeed;
bool WalkEnabled; bool WalkEnabled;
bool GroundEnabled; bool GroundEnabled;
bool WaterEnabled;
bool ShadowsEnabled; bool ShadowsEnabled;
bool SelectionBoxEnabled; bool SelectionBoxEnabled;
bool AxesMarkerEnabled; bool AxesMarkerEnabled;
@ -247,6 +249,7 @@ ActorViewer::ActorViewer()
{ {
m.WalkEnabled = false; m.WalkEnabled = false;
m.GroundEnabled = true; m.GroundEnabled = true;
m.WaterEnabled = false;
m.ShadowsEnabled = g_Renderer.GetOptionBool(CRenderer::OPT_SHADOWS); m.ShadowsEnabled = g_Renderer.GetOptionBool(CRenderer::OPT_SHADOWS);
m.SelectionBoxEnabled = false; m.SelectionBoxEnabled = false;
m.AxesMarkerEnabled = false; m.AxesMarkerEnabled = false;
@ -290,6 +293,7 @@ ActorViewer::ActorViewer()
if (cmpTerrain) if (cmpTerrain)
cmpTerrain->ReloadTerrain(); cmpTerrain->ReloadTerrain();
// Remove FOW since we're in Atlas
CmpPtr<ICmpRangeManager> cmpRangeManager(m.Simulation2, SYSTEM_ENTITY); CmpPtr<ICmpRangeManager> cmpRangeManager(m.Simulation2, SYSTEM_ENTITY);
if (cmpRangeManager) if (cmpRangeManager)
cmpRangeManager->SetLosRevealAll(-1, true); cmpRangeManager->SetLosRevealAll(-1, true);
@ -445,6 +449,15 @@ void ActorViewer::SetBackgroundColour(const SColor4ub& colour)
void ActorViewer::SetWalkEnabled(bool enabled) { m.WalkEnabled = enabled; } void ActorViewer::SetWalkEnabled(bool enabled) { m.WalkEnabled = enabled; }
void ActorViewer::SetGroundEnabled(bool enabled) { m.GroundEnabled = enabled; } void ActorViewer::SetGroundEnabled(bool enabled) { m.GroundEnabled = enabled; }
void ActorViewer::SetWaterEnabled(bool enabled)
{
m.WaterEnabled = enabled;
// Adjust water level
entity_pos_t waterLevel = entity_pos_t::FromFloat(enabled ? 10.f : 0.f);
CmpPtr<ICmpWaterManager> cmpWaterManager(m.Simulation2, SYSTEM_ENTITY);
if (cmpWaterManager)
cmpWaterManager->SetWaterLevel(waterLevel);
}
void ActorViewer::SetShadowsEnabled(bool enabled) { m.ShadowsEnabled = enabled; } void ActorViewer::SetShadowsEnabled(bool enabled) { m.ShadowsEnabled = enabled; }
void ActorViewer::SetBoundingBoxesEnabled(bool enabled) { m.SelectionBoxEnabled = enabled; } void ActorViewer::SetBoundingBoxesEnabled(bool enabled) { m.SelectionBoxEnabled = enabled; }
void ActorViewer::SetAxesMarkerEnabled(bool enabled) { m.AxesMarkerEnabled = enabled; } void ActorViewer::SetAxesMarkerEnabled(bool enabled) { m.AxesMarkerEnabled = enabled; }
@ -464,7 +477,7 @@ void ActorViewer::Render()
g_Renderer.SetClearColor(m.Background); g_Renderer.SetClearColor(m.Background);
// Disable shadows locally (avoid clobbering global state) // Set shadows, sky and water locally (avoid clobbering global state)
bool oldShadows = g_Renderer.GetOptionBool(CRenderer::OPT_SHADOWS); bool oldShadows = g_Renderer.GetOptionBool(CRenderer::OPT_SHADOWS);
g_Renderer.SetOptionBool(CRenderer::OPT_SHADOWS, m.ShadowsEnabled); g_Renderer.SetOptionBool(CRenderer::OPT_SHADOWS, m.ShadowsEnabled);
@ -472,7 +485,10 @@ void ActorViewer::Render()
g_Renderer.GetSkyManager()->m_RenderSky = false; g_Renderer.GetSkyManager()->m_RenderSky = false;
bool oldWater = g_Renderer.GetWaterManager()->m_RenderWater; bool oldWater = g_Renderer.GetWaterManager()->m_RenderWater;
g_Renderer.GetWaterManager()->m_RenderWater = false; g_Renderer.GetWaterManager()->m_RenderWater = m.WaterEnabled;
// Set simulation context for rendering purposes
g_Renderer.SetSimulation(&m.Simulation2);
g_Renderer.BeginFrame(); g_Renderer.BeginFrame();

View File

@ -40,6 +40,7 @@ public:
void SetBackgroundColour(const SColor4ub& colour); void SetBackgroundColour(const SColor4ub& colour);
void SetWalkEnabled(bool enabled); void SetWalkEnabled(bool enabled);
void SetGroundEnabled(bool enabled); void SetGroundEnabled(bool enabled);
void SetWaterEnabled(bool enabled);
void SetShadowsEnabled(bool enabled); void SetShadowsEnabled(bool enabled);
void SetStatsEnabled(bool enabled); void SetStatsEnabled(bool enabled);
void SetBoundingBoxesEnabled(bool enabled); void SetBoundingBoxesEnabled(bool enabled);

View File

@ -132,6 +132,8 @@ void AtlasViewActor::SetParam(const std::wstring& name, bool value)
m_ActorViewer->SetWalkEnabled(value); m_ActorViewer->SetWalkEnabled(value);
else if (name == L"ground") else if (name == L"ground")
m_ActorViewer->SetGroundEnabled(value); m_ActorViewer->SetGroundEnabled(value);
else if (name == L"water")
m_ActorViewer->SetWaterEnabled(value);
else if (name == L"shadows") else if (name == L"shadows")
m_ActorViewer->SetShadowsEnabled(value); m_ActorViewer->SetShadowsEnabled(value);
else if (name == L"stats") else if (name == L"stats")