diff --git a/src/bzflag/BackgroundRenderer.cxx b/src/bzflag/BackgroundRenderer.cxx index be8c67ec77..4f13a7f86f 100644 --- a/src/bzflag/BackgroundRenderer.cxx +++ b/src/bzflag/BackgroundRenderer.cxx @@ -31,6 +31,7 @@ #include "MainWindow.h" #include "SceneNode.h" #include "effectsRenderer.h" +#include "World.h" static const GLfloat squareShape[4][2] = { @@ -664,7 +665,8 @@ void BackgroundRenderer::renderGroundEffects(SceneRenderer& renderer, if (!blank) { - if (doShadows && shadowsVisible && !drawingMirror) + const World *_world = World::getWorld(); + if (doShadows && shadowsVisible && !drawingMirror && _world) drawGroundShadows(renderer); // draw light receivers on ground (little meshes under light sources so diff --git a/src/bzflag/SceneRenderer.cxx b/src/bzflag/SceneRenderer.cxx index 2b7fee1bc6..28ada97f32 100644 --- a/src/bzflag/SceneRenderer.cxx +++ b/src/bzflag/SceneRenderer.cxx @@ -866,6 +866,9 @@ void SceneRenderer::renderScene(bool UNUSED(_lastFrame), bool UNUSED(_sameFrame) int i; const bool lightLists = BZDB.isTrue("lightLists"); + const World* world = World::getWorld(); + + // avoid OpenGL calls as long as possible -- there's a good // chance we're waiting on the vertical retrace. @@ -873,7 +876,8 @@ void SceneRenderer::renderScene(bool UNUSED(_lastFrame), bool UNUSED(_sameFrame) getLights(); // get the obstacle sceneNodes and shadowNodes - getRenderNodes(); + if (world) + getRenderNodes(); // prepare transforms // note -- lights should not be positioned before view is set @@ -1000,17 +1004,16 @@ void SceneRenderer::renderScene(bool UNUSED(_lastFrame), bool UNUSED(_sameFrame) if (useHiddenLineOn) glEnable(GL_POLYGON_OFFSET_FILL); - /////////////////////// // THE BIG RENDERING // /////////////////////// - doRender(); + if (world) + doRender(); if (scene && BZDBCache::showCullingGrid) scene->drawCuller(); - const World* world = World::getWorld(); if (scene && BZDBCache::showCollisionGrid && (world != NULL)) world->drawCollisionGrid(); diff --git a/src/bzflag/playing.cxx b/src/bzflag/playing.cxx index 6065c9d620..d6212952e4 100644 --- a/src/bzflag/playing.cxx +++ b/src/bzflag/playing.cxx @@ -2016,6 +2016,7 @@ static void handleServerMessage(bool human, uint16_t code, { bool checkScores = false; static WordFilter *wordfilter = (WordFilter *)BZDB.getPointer("filter"); + const World *_world = World::getWorld(); switch (code) { @@ -2340,7 +2341,10 @@ static void handleServerMessage(bool human, uint16_t code, for (int i = 0; i < numTeams; i++) { msg = nboUnpackUShort(msg, team); - msg = teams[int(team)].unpack(msg); + Team uTeam; + msg = uTeam.unpack(msg); + if (_world) + teams[int(team)] = uTeam; } checkScores = true; break; @@ -5745,8 +5749,10 @@ static void drawUI() hud->setFrameRadarTriangleCount(0); } + const World *_world = World::getWorld(); + // update the HUD (player list, alerts) - if (World::getWorld() && hud) + if (_world && hud) hud->render(*sceneRenderer); // draw the control panel @@ -5754,7 +5760,7 @@ static void drawUI() controlPanel->render(*sceneRenderer); // draw the radar - if (radar) + if (radar && _world) { const bool showBlankRadar = !myTank || (myTank && myTank->isPaused()); const bool observer = myTank && (myTank->getTeam() == ObserverTeam); @@ -6124,7 +6130,8 @@ void drawFrame(const float dt) // add dynamic nodes SceneDatabase* scene = sceneRenderer->getSceneDatabase(); - if (scene && myTank && world) + World *_world = World::getWorld(); + if (scene && myTank && _world) { int i; @@ -7324,7 +7331,7 @@ static void playingLoop() } // do motion - if (myTank && world) + if (myTank && _world) { if (myTank->isAlive() && !myTank->isPaused()) { @@ -7374,7 +7381,7 @@ static void playingLoop() #endif // adjust properties based on flags (dimensions, cloaking, etc...) - if (myTank) + if (myTank && _world) myTank->updateTank(dt, true); for (i = 0; i < curMaxPlayers; i++) {