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:
parent
9fadd9017f
commit
7d8dc05c68
@ -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();
|
||||||
|
|
||||||
|
@ -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();
|
||||||
|
@ -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
|
||||||
|
@ -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;
|
||||||
|
|
||||||
|
@ -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();
|
||||||
|
|
||||||
|
@ -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)
|
||||||
{
|
{
|
||||||
|
@ -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);
|
||||||
|
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
@ -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.
|
||||||
*
|
*
|
||||||
|
@ -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)
|
||||||
|
@ -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();
|
||||||
|
|
||||||
|
@ -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);
|
||||||
|
@ -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")
|
||||||
|
Loading…
Reference in New Issue
Block a user