MCPcopy Create free account
hub / github.com/OpenDungeons/OpenDungeons / rrRefreshTile

Method rrRefreshTile

source/render/RenderManager.cpp:436–585  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

434}
435
436void RenderManager::rrRefreshTile(const Tile& tile, const GameMap& gameMap, const Player& localPlayer)
437{
438 if (tile.getEntityNode() == nullptr)
439 return;
440
441 std::string tileName = tile.getOgreNamePrefix() + tile.getName();
442 bool displayTilesetMesh = tile.shouldDisplayTileMesh();
443 std::string meshName;
444
445 // We only mark vision on ground tiles (except lava and water)
446 bool vision = true;
447 switch(tile.getTileVisual())
448 {
449 case TileVisual::claimedGround:
450 case TileVisual::dirtGround:
451 case TileVisual::goldGround:
452 case TileVisual::rockGround:
453 vision = tile.getLocalPlayerHasVision();
454 break;
455 default:
456 break;
457 }
458
459 bool isMarked = tile.getMarkedForDigging(&localPlayer);
460 const TileSetValue& tileSetValue = gameMap.getMeshForTile(&tile);
461
462 // We display the tile mesh if needed
463 if(displayTilesetMesh)
464 {
465 // We compute the mesh
466 meshName = tileSetValue.getMeshName();
467 }
468
469 Ogre::Entity* tileMeshEnt = nullptr;
470 const std::string tileMeshName = tileName + "_tileMesh";
471 if(mSceneManager->hasEntity(tileMeshName))
472 {
473 tileMeshEnt = mSceneManager->getEntity(tileMeshName);
474 if(tileMeshEnt->getMesh()->getName().compare(meshName) != 0)
475 {
476 // Unlink and delete the old mesh
477 mSceneManager->getSceneNode(tileMeshName + "_node")->detachObject(tileMeshEnt);
478 mSceneManager->destroyEntity(tileMeshEnt);
479 tileMeshEnt = nullptr;
480 }
481 }
482
483 Ogre::SceneNode* tileMeshNode = nullptr;
484 std::string tileMeshNodeName = tileMeshName + "_node";
485 if(mSceneManager->hasSceneNode(tileMeshNodeName))
486 tileMeshNode = mSceneManager->getSceneNode(tileMeshNodeName);
487
488 if((tileMeshEnt == nullptr) && !meshName.empty())
489 {
490 tileMeshEnt = mSceneManager->createEntity(tileMeshName, meshName);
491 // If the node does not exist, we create it
492 if(tileMeshNode == nullptr)
493 tileMeshNode = tile.getEntityNode()->createChildSceneNode(tileMeshNodeName);

Callers 1

refreshMeshMethod · 0.80

Calls 14

QuaternionClass · 0.85
getEntityNodeMethod · 0.80
shouldDisplayTileMeshMethod · 0.80
getTileVisualMethod · 0.80
getMarkedForDiggingMethod · 0.80
getRotationXMethod · 0.80
getRotationYMethod · 0.80
getRotationZMethod · 0.80
setMaterialNameMethod · 0.80
shouldColorTileMeshMethod · 0.80
shouldColorCustomMeshMethod · 0.80

Tested by

no test coverage detected