Merge pull request #717 from eightyeight/navpath-always-render

Make NavPath::alwaysRender work the same as NavMesh::alwaysRender
This commit is contained in:
Daniel Buckmaster 2014-09-13 10:57:32 +10:00
commit 40cefe1002
2 changed files with 44 additions and 13 deletions

View file

@ -44,7 +44,8 @@ NavPath::NavPath() :
mFrom(0.0f, 0.0f, 0.0f), mFrom(0.0f, 0.0f, 0.0f),
mTo(0.0f, 0.0f, 0.0f) mTo(0.0f, 0.0f, 0.0f)
{ {
mTypeMask |= MarkerObjectType; mTypeMask |= StaticShapeObjectType | MarkerObjectType;
mNetFlags.clear(Ghostable);
mMesh = NULL; mMesh = NULL;
mWaypoints = NULL; mWaypoints = NULL;
@ -162,6 +163,25 @@ const char *NavPath::getProtectedTo(void *obj, const char *data)
return ""; return "";
} }
bool NavPath::setProtectedAlwaysRender(void *obj, const char *index, const char *data)
{
NavPath *path = static_cast<NavPath*>(obj);
bool always = dAtob(data);
if(always)
{
if(!gEditingMission)
path->mNetFlags.set(Ghostable);
}
else
{
if(!gEditingMission)
path->mNetFlags.clear(Ghostable);
}
path->mAlwaysRender = always;
path->setMaskBits(PathMask);
return true;
}
static IRangeValidator NaturalNumber(1, S32_MAX); static IRangeValidator NaturalNumber(1, S32_MAX);
void NavPath::initPersistFields() void NavPath::initPersistFields()
@ -188,9 +208,10 @@ void NavPath::initPersistFields()
endGroup("NavPath"); endGroup("NavPath");
addGroup("NavPath Render"); addGroup("NavPath Render");
addField("alwaysRender", TypeBool, Offset(mAlwaysRender, NavPath), addProtectedField("alwaysRender", TypeBool, Offset(mAlwaysRender, NavMesh),
"Render this NavPath even when not selected."); &setProtectedAlwaysRender, &defaultProtectedGetFn,
"Display this NavPath even outside the editor.");
addField("xray", TypeBool, Offset(mXray, NavPath), addField("xray", TypeBool, Offset(mXray, NavPath),
"Render this NavPath through other objects."); "Render this NavPath through other objects.");
@ -204,8 +225,10 @@ bool NavPath::onAdd()
if(!Parent::onAdd()) if(!Parent::onAdd())
return false; return false;
addToScene();
// Ghost immediately if the editor's already open. // Ghost immediately if the editor's already open.
if(gEditingMission) if(gEditingMission || mAlwaysRender)
mNetFlags.set(Ghostable); mNetFlags.set(Ghostable);
// Automatically find a path if we can. // Automatically find a path if we can.
@ -215,18 +238,15 @@ bool NavPath::onAdd()
// Set initial world bounds and stuff. // Set initial world bounds and stuff.
resize(); resize();
// Finally, add us to the simulation.
addToScene();
return true; return true;
} }
void NavPath::onRemove() void NavPath::onRemove()
{ {
Parent::onRemove();
// Remove from simulation. // Remove from simulation.
removeFromScene(); removeFromScene();
Parent::onRemove();
} }
bool NavPath::init() bool NavPath::init()
@ -324,7 +344,9 @@ bool NavPath::plan()
if(!init()) if(!init())
return false; return false;
visitNext(); if(!visitNext())
return false;
while(update()); while(update());
if(!finalise()) if(!finalise())
@ -476,11 +498,18 @@ S32 NavPath::getCount()
void NavPath::onEditorEnable() void NavPath::onEditorEnable()
{ {
mNetFlags.set(Ghostable); mNetFlags.set(Ghostable);
if(isClientObject() && !mAlwaysRender)
addToScene();
} }
void NavPath::onEditorDisable() void NavPath::onEditorDisable()
{ {
mNetFlags.clear(Ghostable); if(!mAlwaysRender)
{
mNetFlags.clear(Ghostable);
if(isClientObject())
removeFromScene();
}
} }
void NavPath::inspectPostApply() void NavPath::inspectPostApply()
@ -501,7 +530,7 @@ void NavPath::prepRenderImage(SceneRenderState *state)
{ {
ObjectRenderInst *ri = state->getRenderPass()->allocInst<ObjectRenderInst>(); ObjectRenderInst *ri = state->getRenderPass()->allocInst<ObjectRenderInst>();
ri->renderDelegate.bind(this, &NavPath::renderSimple); ri->renderDelegate.bind(this, &NavPath::renderSimple);
ri->type = RenderPassManager::RIT_Editor; ri->type = RenderPassManager::RIT_Object;
ri->translucentSort = true; ri->translucentSort = true;
ri->defaultKey = 1; ri->defaultKey = 1;
state->getRenderPass()->addInst(ri); state->getRenderPass()->addInst(ri);

View file

@ -155,6 +155,8 @@ private:
static const char *getProtectedMesh(void *obj, const char *data); static const char *getProtectedMesh(void *obj, const char *data);
static bool setProtectedWaypoints(void *obj, const char *index, const char *data); static bool setProtectedWaypoints(void *obj, const char *index, const char *data);
static bool setProtectedAlwaysRender(void *obj, const char *index, const char *data);
static bool setProtectedFrom(void *obj, const char *index, const char *data); static bool setProtectedFrom(void *obj, const char *index, const char *data);
static const char *getProtectedFrom(void *obj, const char *data); static const char *getProtectedFrom(void *obj, const char *data);