1
0
mirror of https://github.com/vcmi/vcmi.git synced 2024-11-24 08:32:34 +02:00

All adventure map components now use shared_ptr

This commit is contained in:
Ivan Savenko 2023-02-10 16:26:32 +02:00
parent f8c1c46562
commit cc0c3e5bc9
6 changed files with 150 additions and 134 deletions

View File

@ -13,6 +13,10 @@
#include "adventureMap/CAdvMapInt.h"
#include "adventureMap/mapHandler.h"
#include "adventureMap/CList.h"
#include "adventureMap/CTerrainRect.h"
#include "adventureMap/CInfoBar.h"
#include "adventureMap/CMinimap.h"
#include "battle/BattleInterface.h"
#include "battle/BattleEffectsController.h"
#include "battle/BattleFieldController.h"
@ -251,13 +255,13 @@ void CPlayerInterface::heroMoved(const TryMoveHero & details, bool verbose)
return;
}
adventureInt->minimap.updateTile(hero->convertToVisitablePos(details.start));
adventureInt->minimap.updateTile(hero->convertToVisitablePos(details.end));
adventureInt->minimap->updateTile(hero->convertToVisitablePos(details.start));
adventureInt->minimap->updateTile(hero->convertToVisitablePos(details.end));
bool directlyAttackingCreature =
details.attackedFrom
&& adventureInt->terrain.currentPath //in case if movement has been canceled in the meantime and path was already erased
&& adventureInt->terrain.currentPath->nodes.size() == 3;//FIXME should be 2 but works nevertheless...
&& adventureInt->terrain->currentPath //in case if movement has been canceled in the meantime and path was already erased
&& adventureInt->terrain->currentPath->nodes.size() == 3;//FIXME should be 2 but works nevertheless...
if(makingTurn && hero->tempOwner == playerID) //we are moving our hero - we may need to update assigned path
{
@ -267,10 +271,10 @@ void CPlayerInterface::heroMoved(const TryMoveHero & details, bool verbose)
if(details.result == TryMoveHero::TELEPORTATION)
{
if(adventureInt->terrain.currentPath)
if(adventureInt->terrain->currentPath)
{
assert(adventureInt->terrain.currentPath->nodes.size() >= 2);
std::vector<CGPathNode>::const_iterator nodesIt = adventureInt->terrain.currentPath->nodes.end() - 1;
assert(adventureInt->terrain->currentPath->nodes.size() >= 2);
std::vector<CGPathNode>::const_iterator nodesIt = adventureInt->terrain->currentPath->nodes.end() - 1;
if((nodesIt)->coord == hero->convertToVisitablePos(details.start)
&& (nodesIt - 1)->coord == hero->convertToVisitablePos(details.end))
@ -286,8 +290,8 @@ void CPlayerInterface::heroMoved(const TryMoveHero & details, bool verbose)
}
}
adventureInt->centerOn(hero, true); //actualizing screen pos
adventureInt->minimap.redraw();
adventureInt->heroList.update(hero);
adventureInt->minimap->redraw();
adventureInt->heroList->update(hero);
return; //teleport - no fancy moving animation
//TODO: smooth disappear / appear effect
}
@ -297,7 +301,7 @@ void CPlayerInterface::heroMoved(const TryMoveHero & details, bool verbose)
{
eraseCurrentPathOf(hero, false);
}
else if(adventureInt->terrain.currentPath && hero->pos == details.end) //&& hero is moving
else if(adventureInt->terrain->currentPath && hero->pos == details.end) //&& hero is moving
{
if(details.start != details.end) //so we don't touch path when revisiting with spacebar
removeLastNodeFromPath(hero);
@ -309,7 +313,7 @@ void CPlayerInterface::heroMoved(const TryMoveHero & details, bool verbose)
hero->isStanding = true;
stillMoveHero.setn(STOP_MOVE);
GH.totalRedraw();
adventureInt->heroList.update(hero);
adventureInt->heroList->update(hero);
return;
}
@ -333,8 +337,8 @@ void CPlayerInterface::heroMoved(const TryMoveHero & details, bool verbose)
}
adventureInt->centerOn(hero); //actualizing screen pos
adventureInt->minimap.redraw();
adventureInt->heroList.redraw();
adventureInt->minimap->redraw();
adventureInt->heroList->redraw();
initMovement(details, hero, hp);
@ -370,8 +374,8 @@ void CPlayerInterface::heroMoved(const TryMoveHero & details, bool verbose)
hero->isStanding = true;
//move finished
adventureInt->minimap.redraw();
adventureInt->heroList.update(hero);
adventureInt->minimap->redraw();
adventureInt->heroList->update(hero);
//check if user cancelled movement
{
@ -434,7 +438,7 @@ void CPlayerInterface::heroKilled(const CGHeroInstance* hero)
wanderingHeroes -= hero;
adventureInt->heroList.update(hero);
adventureInt->heroList->update(hero);
if (makingTurn && newSelection)
adventureInt->select(newSelection, true);
else if (adventureInt->selection == hero)
@ -458,7 +462,7 @@ void CPlayerInterface::heroCreated(const CGHeroInstance * hero)
{
EVENT_HANDLER_CALLED_BY_CLIENT;
wanderingHeroes.push_back(hero);
adventureInt->heroList.update(hero);
adventureInt->heroList->update(hero);
}
void CPlayerInterface::openTownWindow(const CGTownInstance * town)
{
@ -477,10 +481,10 @@ int3 CPlayerInterface::repairScreenPos(int3 pos)
pos.x = -CGI->mh->frameW;
if (pos.y<-CGI->mh->frameH)
pos.y = -CGI->mh->frameH;
if (pos.x>CGI->mh->sizes.x - adventureInt->terrain.tilesw + CGI->mh->frameW)
pos.x = CGI->mh->sizes.x - adventureInt->terrain.tilesw + CGI->mh->frameW;
if (pos.y>CGI->mh->sizes.y - adventureInt->terrain.tilesh + CGI->mh->frameH)
pos.y = CGI->mh->sizes.y - adventureInt->terrain.tilesh + CGI->mh->frameH;
if (pos.x>CGI->mh->sizes.x - adventureInt->terrain->tilesw + CGI->mh->frameW)
pos.x = CGI->mh->sizes.x - adventureInt->terrain->tilesw + CGI->mh->frameW;
if (pos.y>CGI->mh->sizes.y - adventureInt->terrain->tilesh + CGI->mh->frameH)
pos.y = CGI->mh->sizes.y - adventureInt->terrain->tilesh + CGI->mh->frameH;
return pos;
}
@ -488,7 +492,7 @@ void CPlayerInterface::activateForSpectator()
{
adventureInt->state = CAdvMapInt::INGAME;
adventureInt->activate();
adventureInt->minimap.activate();
adventureInt->minimap->activate();
}
void CPlayerInterface::heroPrimarySkillChanged(const CGHeroInstance * hero, int which, si64 val)
@ -518,13 +522,13 @@ void CPlayerInterface::heroManaPointsChanged(const CGHeroInstance * hero)
EVENT_HANDLER_CALLED_BY_CLIENT;
updateInfo(hero);
if (makingTurn && hero->tempOwner == playerID)
adventureInt->heroList.update(hero);
adventureInt->heroList->update(hero);
}
void CPlayerInterface::heroMovePointsChanged(const CGHeroInstance * hero)
{
EVENT_HANDLER_CALLED_BY_CLIENT;
if (makingTurn && hero->tempOwner == playerID)
adventureInt->heroList.update(hero);
adventureInt->heroList->update(hero);
}
void CPlayerInterface::receivedResource()
{
@ -575,7 +579,7 @@ void CPlayerInterface::heroInGarrisonChange(const CGTownInstance *town)
if (town->visitingHero->tempOwner == playerID && !vstd::contains(wanderingHeroes,town->visitingHero)) // our hero
wanderingHeroes.push_back(town->visitingHero);
}
adventureInt->heroList.update();
adventureInt->heroList->update();
adventureInt->updateNextHero(nullptr);
if(castleInt)
@ -681,7 +685,7 @@ void CPlayerInterface::buildChanged(const CGTownInstance *town, BuildingID build
}
}
}
adventureInt->townList.update(town);
adventureInt->townList->update(town);
}
void CPlayerInterface::battleStartBefore(const CCreatureSet *army1, const CCreatureSet *army2, int3 tile, const CGHeroInstance *hero1, const CGHeroInstance *hero2)
@ -1039,7 +1043,7 @@ void CPlayerInterface::showComp(const Component &comp, std::string message)
waitWhileDialog(); //Fix for mantis #98
CCS->soundh->playSoundFromSet(CCS->soundh->pickupSounds);
adventureInt->infoBar.showComponent(comp, message);
adventureInt->infoBar->showComponent(comp, message);
}
void CPlayerInterface::showInfoDialog(const std::string &text, const std::vector<Component> & components, int soundID)
@ -1197,7 +1201,7 @@ void CPlayerInterface::tileRevealed(const std::unordered_set<int3, ShashInt3> &p
EVENT_HANDLER_CALLED_BY_CLIENT;
//FIXME: wait for dialog? Magi hut/eye would benefit from this but may break other areas
for (auto & po : pos)
adventureInt->minimap.updateTile(po);
adventureInt->minimap->updateTile(po);
if (!pos.empty())
GH.totalRedraw();
}
@ -1206,7 +1210,7 @@ void CPlayerInterface::tileHidden(const std::unordered_set<int3, ShashInt3> &pos
{
EVENT_HANDLER_CALLED_BY_CLIENT;
for (auto & po : pos)
adventureInt->minimap.updateTile(po);
adventureInt->minimap->updateTile(po);
if (!pos.empty())
GH.totalRedraw();
}
@ -1335,7 +1339,7 @@ void CPlayerInterface::showGarrisonDialog( const CArmedInstance *up, const CGHer
EVENT_HANDLER_CALLED_BY_CLIENT;
auto onEnd = [=](){ cb->selectionMade(0, queryID); };
if (stillMoveHero.get() == DURING_MOVE && adventureInt->terrain.currentPath && adventureInt->terrain.currentPath->nodes.size() > 1) //to ignore calls on passing through garrisons
if (stillMoveHero.get() == DURING_MOVE && adventureInt->terrain->currentPath && adventureInt->terrain->currentPath->nodes.size() > 1) //to ignore calls on passing through garrisons
{
onEnd();
return;
@ -1412,7 +1416,7 @@ void CPlayerInterface::objectPropertyChanged(const SetObjectProperty * sop)
for(auto & po : pos)
{
if(cb->isVisible(po))
adventureInt->minimap.updateTile(po);
adventureInt->minimap->updateTile(po);
}
if(obj->ID == Obj::TOWN)
{
@ -1421,8 +1425,8 @@ void CPlayerInterface::objectPropertyChanged(const SetObjectProperty * sop)
else
towns -= obj;
adventureInt->townList.update();
adventureInt->minimap.update();
adventureInt->townList->update();
adventureInt->minimap->update();
}
assert(cb->getTownsInfo().size() == towns.size());
}
@ -1715,8 +1719,8 @@ void CPlayerInterface::movementPxStep( const TryMoveHero &details, int i, const
}
}
adventureInt->terrain.moveX = (32 - i) * (heroImageNewX - heroImageOldX) / 32;
adventureInt->terrain.moveY = (32 - i) * (heroImageNewY - heroImageOldY) / 32;
adventureInt->terrain->moveX = (32 - i) * (heroImageNewX - heroImageOldX) / 32;
adventureInt->terrain->moveY = (32 - i) * (heroImageNewY - heroImageOldY) / 32;
}
void CPlayerInterface::finishMovement( const TryMoveHero &details, const int3 &hp, const CGHeroInstance * ho )
@ -1894,14 +1898,14 @@ void CPlayerInterface::eraseCurrentPathOf(const CGHeroInstance * ho, bool checkF
assert(ho == adventureInt->selection);
paths.erase(ho);
adventureInt->terrain.currentPath = nullptr;
adventureInt->terrain->currentPath = nullptr;
adventureInt->updateMoveHero(ho, false);
}
void CPlayerInterface::removeLastNodeFromPath(const CGHeroInstance *ho)
{
adventureInt->terrain.currentPath->nodes.erase(adventureInt->terrain.currentPath->nodes.end()-1);
if (adventureInt->terrain.currentPath->nodes.size() < 2) //if it was the last one, remove entire path and path with only one tile is not a real path
adventureInt->terrain->currentPath->nodes.erase(adventureInt->terrain->currentPath->nodes.end()-1);
if (adventureInt->terrain->currentPath->nodes.size() < 2) //if it was the last one, remove entire path and path with only one tile is not a real path
eraseCurrentPathOf(ho);
}
@ -1946,8 +1950,8 @@ void CPlayerInterface::acceptTurn()
adventureInt->startTurn();
}
adventureInt->heroList.update();
adventureInt->townList.update();
adventureInt->heroList->update();
adventureInt->townList->update();
const CGHeroInstance * heroToSelect = nullptr;
@ -1972,7 +1976,7 @@ void CPlayerInterface::acceptTurn()
adventureInt->select(wanderingHeroes.front());
//show new day animation and sound on infobar
adventureInt->infoBar.showDate();
adventureInt->infoBar->showDate();
adventureInt->updateNextHero(nullptr);
adventureInt->showAll(screen);
@ -2052,7 +2056,7 @@ void CPlayerInterface::tryDiggging(const CGHeroInstance * h)
void CPlayerInterface::updateInfo(const CGObjectInstance * specific)
{
adventureInt->infoBar.showSelection();
adventureInt->infoBar->showSelection();
}
void CPlayerInterface::battleNewRoundFirst( int round )
@ -2163,14 +2167,14 @@ void CPlayerInterface::askToAssembleArtifact(const ArtifactLocation &al)
void CPlayerInterface::artifactPut(const ArtifactLocation &al)
{
EVENT_HANDLER_CALLED_BY_CLIENT;
adventureInt->infoBar.showSelection();
adventureInt->infoBar->showSelection();
askToAssembleArtifact(al);
}
void CPlayerInterface::artifactRemoved(const ArtifactLocation &al)
{
EVENT_HANDLER_CALLED_BY_CLIENT;
adventureInt->infoBar.showSelection();
adventureInt->infoBar->showSelection();
for(auto isa : GH.listInt)
{
auto artWin = dynamic_cast<CArtifactHolder*>(isa.get());
@ -2184,7 +2188,7 @@ void CPlayerInterface::artifactRemoved(const ArtifactLocation &al)
void CPlayerInterface::artifactMoved(const ArtifactLocation &src, const ArtifactLocation &dst)
{
EVENT_HANDLER_CALLED_BY_CLIENT;
adventureInt->infoBar.showSelection();
adventureInt->infoBar->showSelection();
for(auto isa : GH.listInt)
{
auto artWin = dynamic_cast<CArtifactHolder*>(isa.get());
@ -2205,7 +2209,7 @@ void CPlayerInterface::artifactPossibleAssembling(const ArtifactLocation & dst)
void CPlayerInterface::artifactAssembled(const ArtifactLocation &al)
{
EVENT_HANDLER_CALLED_BY_CLIENT;
adventureInt->infoBar.showSelection();
adventureInt->infoBar->showSelection();
for(auto isa : GH.listInt)
{
auto artWin = dynamic_cast<CArtifactHolder*>(isa.get());
@ -2217,7 +2221,7 @@ void CPlayerInterface::artifactAssembled(const ArtifactLocation &al)
void CPlayerInterface::artifactDisassembled(const ArtifactLocation &al)
{
EVENT_HANDLER_CALLED_BY_CLIENT;
adventureInt->infoBar.showSelection();
adventureInt->infoBar->showSelection();
for(auto isa : GH.listInt)
{
auto artWin = dynamic_cast<CArtifactHolder*>(isa.get());
@ -2236,7 +2240,7 @@ void CPlayerInterface::playerStartsTurn(PlayerColor player)
}
else
{
adventureInt->infoBar.showSelection();
adventureInt->infoBar->showSelection();
while (GH.listInt.front() != adventureInt && !dynamic_cast<CInfoWindow*>(GH.listInt.front().get())) //don't remove dialogs that expect query answer
GH.popInts(1);
}

View File

@ -13,6 +13,11 @@
#include "CAdvMapPanel.h"
#include "CAdventureOptions.h"
#include "CInGameConsole.h"
#include "CMinimap.h"
#include "CResDataBar.h"
#include "CTerrainRect.h"
#include "CList.h"
#include "CInfoBar.h"
#include "mapHandler.h"
#include "../windows/CKingdomInterface.h"
@ -76,11 +81,14 @@ static void setScrollingCursor(ui8 direction)
CAdvMapInt::CAdvMapInt():
mode(EAdvMapMode::NORMAL),
worldViewScale(0.0f), //actual init later in changeMode
minimap(Rect(ADVOPT.minimapX, ADVOPT.minimapY, ADVOPT.minimapW, ADVOPT.minimapH)),
minimap(new CMinimap(Rect(ADVOPT.minimapX, ADVOPT.minimapY, ADVOPT.minimapW, ADVOPT.minimapH))),
statusbar(CGStatusBar::create(ADVOPT.statusbarX,ADVOPT.statusbarY,ADVOPT.statusbarG)),
heroList(ADVOPT.hlistSize, Point(ADVOPT.hlistX, ADVOPT.hlistY), ADVOPT.hlistAU, ADVOPT.hlistAD),
townList(ADVOPT.tlistSize, Point(ADVOPT.tlistX, ADVOPT.tlistY), ADVOPT.tlistAU, ADVOPT.tlistAD),
infoBar(Rect(ADVOPT.infoboxX, ADVOPT.infoboxY, 192, 192)), state(NA),
heroList(new CHeroList(ADVOPT.hlistSize, Point(ADVOPT.hlistX, ADVOPT.hlistY), ADVOPT.hlistAU, ADVOPT.hlistAD)),
townList(new CTownList(ADVOPT.tlistSize, Point(ADVOPT.tlistX, ADVOPT.tlistY), ADVOPT.tlistAU, ADVOPT.tlistAD)),
infoBar(new CInfoBar(Rect(ADVOPT.infoboxX, ADVOPT.infoboxY, 192, 192))),
resdatabar(new CResDataBar),
terrain(new CTerrainRect),
state(NA),
spellBeingCasted(nullptr), position(int3(0, 0, 0)), selection(nullptr),
updateScreen(false), anim(0), animValHitCount(0), heroAnim(0), heroAnimValHitCount(0),
activeMapPanel(nullptr), duringAITurn(false), scrollingDir(0), scrollingState(false),
@ -91,7 +99,7 @@ CAdvMapInt::CAdvMapInt():
pos.w = GH.screenDimensions().x;
pos.h = GH.screenDimensions().y;
strongInterest = true; // handle all mouse move events to prevent dead mouse move space in fullscreen mode
townList.onSelect = std::bind(&CAdvMapInt::selectionChanged,this);
townList->onSelect = std::bind(&CAdvMapInt::selectionChanged,this);
bg = IImage::createFromFile(ADVOPT.mainGraphic);
if(!ADVOPT.worldViewGraphic.empty())
{
@ -135,11 +143,11 @@ CAdvMapInt::CAdvMapInt():
nextHero = makeButton(301, std::bind(&CAdvMapInt::fnextHero,this), ADVOPT.nextHero, SDLK_h);
endTurn = makeButton(302, std::bind(&CAdvMapInt::fendTurn,this), ADVOPT.endTurn, SDLK_e);
int panelSpaceBottom = GH.screenDimensions().y - resdatabar.pos.h - 4;
int panelSpaceBottom = GH.screenDimensions().y - resdatabar->pos.h - 4;
panelMain = std::make_shared<CAdvMapPanel>(nullptr, Point(0, 0));
// TODO correct drawing position
panelWorldView = std::make_shared<CAdvMapWorldViewPanel>(worldViewIcons, bgWorldView, Point(heroList.pos.x - 2, 195), panelSpaceBottom, LOCPLINT->playerID);
panelWorldView = std::make_shared<CAdvMapWorldViewPanel>(worldViewIcons, bgWorldView, Point(heroList->pos.x - 2, 195), panelSpaceBottom, LOCPLINT->playerID);
panelMain->addChildColorableButton(kingOverview);
panelMain->addChildColorableButton(underground);
@ -207,7 +215,7 @@ CAdvMapInt::CAdvMapInt():
setPlayer(LOCPLINT->playerID);
int iconColorMultiplier = player.getNum() * 19;
int wvLeft = heroList.pos.x - 2; // TODO correct drawing position
int wvLeft = heroList->pos.x - 2; // TODO correct drawing position
//int wvTop = 195;
for (int i = 0; i < 5; ++i)
{
@ -285,10 +293,10 @@ void CAdvMapInt::fswitchLevel()
worldViewUnderground->redraw();
updateScreen = true;
minimap.setLevel(position.z);
minimap->setLevel(position.z);
if (mode == EAdvMapMode::WORLD_VIEW)
terrain.redraw();
terrain->redraw();
}
void CAdvMapInt::fshowQuestlog()
{
@ -315,10 +323,10 @@ void CAdvMapInt::fsleepWake()
void CAdvMapInt::fmoveHero()
{
const CGHeroInstance *h = curHero();
if (!h || !terrain.currentPath || !CGI->mh->canStartHeroMovement())
if (!h || !terrain->currentPath || !CGI->mh->canStartHeroMovement())
return;
LOCPLINT->moveHero(h, *terrain.currentPath);
LOCPLINT->moveHero(h, *terrain->currentPath);
}
void CAdvMapInt::fshowSpellbok()
@ -461,12 +469,12 @@ void CAdvMapInt::activate()
activeMapPanel->activate();
if (mode == EAdvMapMode::NORMAL)
{
heroList.activate();
townList.activate();
infoBar.activate();
heroList->activate();
townList->activate();
infoBar->activate();
}
minimap.activate();
terrain.activate();
minimap->activate();
terrain->activate();
statusbar->activate();
GH.fakeMouseMove(); //to restore the cursor
@ -485,12 +493,12 @@ void CAdvMapInt::deactivate()
activeMapPanel->deactivate();
if (mode == EAdvMapMode::NORMAL)
{
heroList.deactivate();
townList.deactivate();
infoBar.deactivate();
heroList->deactivate();
townList->deactivate();
infoBar->deactivate();
}
minimap.deactivate();
terrain.deactivate();
minimap->deactivate();
terrain->deactivate();
statusbar->deactivate();
}
}
@ -506,23 +514,23 @@ void CAdvMapInt::showAll(SDL_Surface * to)
{
case EAdvMapMode::NORMAL:
heroList.showAll(to);
townList.showAll(to);
infoBar.showAll(to);
heroList->showAll(to);
townList->showAll(to);
infoBar->showAll(to);
break;
case EAdvMapMode::WORLD_VIEW:
terrain.showAll(to);
terrain->showAll(to);
break;
}
activeMapPanel->showAll(to);
updateScreen = true;
minimap.showAll(to);
minimap->showAll(to);
show(to);
resdatabar.showAll(to);
resdatabar->showAll(to);
statusbar->show(to);
@ -592,20 +600,20 @@ void CAdvMapInt::show(SDL_Surface * to)
position = betterPos;
}
terrain.show(to);
terrain->show(to);
for(int i = 0; i < 4; i++)
gems[i]->showAll(to);
updateScreen=false;
LOCPLINT->cingconsole->show(to);
}
else if (terrain.needsAnimUpdate())
else if (terrain->needsAnimUpdate())
{
terrain.showAnim(to);
terrain->showAnim(to);
for(int i = 0; i < 4; i++)
gems[i]->showAll(to);
}
infoBar.show(to);
infoBar->show(to);
statusbar->showAll(to);
}
@ -633,9 +641,9 @@ void CAdvMapInt::handleMapScrollingUpdate()
setScrollingCursor(scrollingDir);
scrollingState = true;
updateScreen = true;
minimap.redraw();
minimap->redraw();
if(mode == EAdvMapMode::WORLD_VIEW)
terrain.redraw();
terrain->redraw();
}
else if(scrollingState)
{
@ -654,14 +662,14 @@ void CAdvMapInt::handleSwipeUpdate()
position.y = fixedPos.y;
CCS->curh->set(Cursor::Map::POINTER);
updateScreen = true;
minimap.redraw();
minimap->redraw();
swipeMovementRequested = false;
}
}
void CAdvMapInt::selectionChanged()
{
const CGTownInstance *to = LOCPLINT->towns[townList.getSelectedIndex()];
const CGTownInstance *to = LOCPLINT->towns[townList->getSelectedIndex()];
if (selection != to)
select(to);
}
@ -672,7 +680,7 @@ void CAdvMapInt::centerOn(int3 on, bool fade)
if (fade)
{
terrain.fadeFromCurrentView();
terrain->fadeFromCurrentView();
}
switch (mode)
@ -698,11 +706,11 @@ void CAdvMapInt::centerOn(int3 on, bool fade)
worldViewUnderground->setIndex(on.z, true);
worldViewUnderground->redraw();
if (switchedLevels)
minimap.setLevel(position.z);
minimap.redraw();
minimap->setLevel(position.z);
minimap->redraw();
if (mode == EAdvMapMode::WORLD_VIEW)
terrain.redraw();
terrain->redraw();
}
void CAdvMapInt::centerOn(const CGObjectInstance * obj, bool fade)
@ -853,7 +861,7 @@ void CAdvMapInt::keyPressed(const SDL_Keycode & key)
}
else if(isActive()) //no ctrl, advmapint is on the top => switch to town
{
townList.selectNext();
townList->selectNext();
}
return;
}
@ -888,11 +896,11 @@ void CAdvMapInt::keyPressed(const SDL_Keycode & key)
}
CGPath &path = LOCPLINT->paths[h];
terrain.currentPath = &path;
terrain->currentPath = &path;
int3 dst = h->visitablePos() + int3(direction->x, direction->y, 0);
if(dst != verifyPos(dst) || !LOCPLINT->cb->getPathsInfo(h)->getPath(path, dst))
{
terrain.currentPath = nullptr;
terrain->currentPath = nullptr;
return;
}
@ -960,14 +968,14 @@ void CAdvMapInt::select(const CArmedInstance *sel, bool centerView)
if(centerView)
centerOn(sel);
terrain.currentPath = nullptr;
terrain->currentPath = nullptr;
if(sel->ID==Obj::TOWN)
{
auto town = dynamic_cast<const CGTownInstance*>(sel);
infoBar.showTownSelection(town);
townList.select(town);
heroList.select(nullptr);
infoBar->showTownSelection(town);
townList->select(town);
heroList->select(nullptr);
updateSleepWake(nullptr);
updateMoveHero(nullptr);
@ -977,18 +985,18 @@ void CAdvMapInt::select(const CArmedInstance *sel, bool centerView)
{
auto hero = dynamic_cast<const CGHeroInstance*>(sel);
infoBar.showHeroSelection(hero);
heroList.select(hero);
townList.select(nullptr);
infoBar->showHeroSelection(hero);
heroList->select(hero);
townList->select(nullptr);
terrain.currentPath = LOCPLINT->getAndVerifyPath(hero);
terrain->currentPath = LOCPLINT->getAndVerifyPath(hero);
updateSleepWake(hero);
updateMoveHero(hero);
updateSpellbook(hero);
}
townList.redraw();
heroList.redraw();
townList->redraw();
heroList->redraw();
}
void CAdvMapInt::mouseMoved( const Point & cursorPosition )
@ -1055,7 +1063,7 @@ void CAdvMapInt::setPlayer(PlayerColor Player)
panelMain->setPlayerColor(player);
panelWorldView->setPlayerColor(player);
panelWorldView->recolorIcons(player, player.getNum() * 19);
resdatabar.background->colorize(player);
resdatabar->background->colorize(player);
}
void CAdvMapInt::startTurn()
@ -1065,7 +1073,7 @@ void CAdvMapInt::startTurn()
|| settings["session"]["spectate"].Bool())
{
adjustActiveness(false);
minimap.setAIRadar(false);
minimap->setAIRadar(false);
}
}
@ -1130,7 +1138,7 @@ void CAdvMapInt::tileLClicked(const int3 &mapPos)
bool isHero = false;
if(selection->ID != Obj::HERO) //hero is not selected (presumably town)
{
assert(!terrain.currentPath); //path can be active only when hero is selected
assert(!terrain->currentPath); //path can be active only when hero is selected
if(selection == topBlocking) //selected town clicked
LOCPLINT->openTownWindow(static_cast<const CGTownInstance*>(topBlocking));
else if(canSelect)
@ -1153,10 +1161,10 @@ void CAdvMapInt::tileLClicked(const int3 &mapPos)
}
else //still here? we need to move hero if we clicked end of already selected path or calculate a new path otherwise
{
if(terrain.currentPath && terrain.currentPath->endPos() == mapPos)//we'll be moving
if(terrain->currentPath && terrain->currentPath->endPos() == mapPos)//we'll be moving
{
if(CGI->mh->canStartHeroMovement())
LOCPLINT->moveHero(currentHero, *terrain.currentPath);
LOCPLINT->moveHero(currentHero, *terrain->currentPath);
return;
}
else //remove old path and find a new one if we clicked on accessible tile
@ -1168,7 +1176,7 @@ void CAdvMapInt::tileLClicked(const int3 &mapPos)
path = newpath;
if(path.nodes.size())
terrain.currentPath = &path;
terrain->currentPath = &path;
else
LOCPLINT->eraseCurrentPathOf(currentHero);
@ -1386,7 +1394,7 @@ void CAdvMapInt::enterCastingMode(const CSpell * sp)
spellBeingCasted = sp;
deactivate();
terrain.activate();
terrain->activate();
GH.fakeMouseMove();
}
@ -1395,7 +1403,7 @@ void CAdvMapInt::leaveCastingMode(bool cast, int3 dest)
assert(spellBeingCasted);
SpellID id = spellBeingCasted->id;
spellBeingCasted = nullptr;
terrain.deactivate();
terrain->deactivate();
activate();
if(cast)
@ -1439,9 +1447,9 @@ void CAdvMapInt::aiTurnStarted()
adjustActiveness(true);
CCS->musich->playMusicFromSet("enemy-turn", true, false);
adventureInt->minimap.setAIRadar(true);
adventureInt->infoBar.startEnemyTurn(LOCPLINT->cb->getCurrentPlayer());
adventureInt->infoBar.showAll(screen);//force refresh on inactive object
adventureInt->minimap->setAIRadar(true);
adventureInt->infoBar->startEnemyTurn(LOCPLINT->cb->getCurrentPlayer());
adventureInt->infoBar->showAll(screen);//force refresh on inactive object
}
void CAdvMapInt::adjustActiveness(bool aiTurnStart)
@ -1480,9 +1488,9 @@ void CAdvMapInt::changeMode(EAdvMapMode newMode, float newScale)
panelWorldView->deactivate();
activeMapPanel = panelMain;
townList.activate();
heroList.activate();
infoBar.activate();
townList->activate();
heroList->activate();
infoBar->activate();
worldViewOptions.clear();
@ -1493,10 +1501,10 @@ void CAdvMapInt::changeMode(EAdvMapMode newMode, float newScale)
activeMapPanel = panelWorldView;
townList.deactivate();
heroList.deactivate();
infoBar.showSelection(); // to prevent new day animation interfering world view mode
infoBar.deactivate();
townList->deactivate();
heroList->deactivate();
infoBar->showSelection(); // to prevent new day animation interfering world view mode
infoBar->deactivate();
break;
}

View File

@ -14,12 +14,6 @@
#include "../../lib/int3.h"
#include "../../lib/GameConstants.h"
#include "CTerrainRect.h"
#include "CResDataBar.h"
#include "CList.h"
#include "CInfoBar.h"
#include "CMinimap.h"
VCMI_LIB_NAMESPACE_BEGIN
class CGObjectInstance;
@ -39,6 +33,12 @@ class CGStatusBar;
class CAdvMapPanel;
class CAdvMapWorldViewPanel;
class CAnimation;
class CTerrainRect;
class CResDataBar;
class CHeroList;
class CTownList;
class CInfoBar;
class CMinimap;
struct MapDrawingInfo;
@ -100,7 +100,7 @@ public:
std::shared_ptr<IImage> bg;
std::shared_ptr<IImage> bgWorldView;
std::vector<std::shared_ptr<CAnimImage>> gems;
CMinimap minimap;
std::shared_ptr<CMinimap> minimap;
std::shared_ptr<CGStatusBar> statusbar;
std::shared_ptr<CButton> kingOverview;
@ -116,11 +116,11 @@ public:
std::shared_ptr<CButton> worldViewUnderground;
CTerrainRect terrain; //visible terrain
CResDataBar resdatabar;
CHeroList heroList;
CTownList townList;
CInfoBar infoBar;
std::shared_ptr<CTerrainRect> terrain; //visible terrain
std::shared_ptr<CResDataBar> resdatabar;
std::shared_ptr<CHeroList> heroList;
std::shared_ptr<CTownList> townList;
std::shared_ptr<CInfoBar> infoBar;
std::shared_ptr<CAdvMapPanel> panelMain; // panel that holds all right-side buttons in normal view
std::shared_ptr<CAdvMapWorldViewPanel> panelWorldView; // panel that holds all buttons and other ui in world view

View File

@ -12,6 +12,7 @@
#include "CMinimap.h"
#include "CAdvMapInt.h"
#include "CTerrainRect.h"
#include "../widgets/Images.h"
#include "../CGameInfo.h"
@ -167,7 +168,7 @@ void CMinimap::showAll(SDL_Surface * to)
Canvas target(to);
int3 mapSizes = LOCPLINT->cb->getMapSize();
int3 tileCountOnScreen = adventureInt->terrain.tileCountOnScreen();
int3 tileCountOnScreen = adventureInt->terrain->tileCountOnScreen();
//draw radar
Rect radar =

View File

@ -28,6 +28,8 @@
#include "../render/IImage.h"
#include "../render/ColorFilter.h"
#include "../adventureMap/CAdvMapInt.h"
#include "../adventureMap/CList.h"
#include "../adventureMap/CResDataBar.h"
#include "../../CCallback.h"
#include "../../lib/CArtHandler.h"

View File

@ -22,6 +22,7 @@
#include "../battle/BattleInterface.h"
#include "../battle/BattleInterfaceClasses.h"
#include "../adventureMap/CAdvMapInt.h"
#include "../adventureMap/CTerrainRect.h"
#include "../windows/CMessage.h"
#include "../renderSDL/SDL_Extensions.h"
#include "../gui/CursorHandler.h"
@ -364,8 +365,8 @@ CRClickPopupInt::~CRClickPopupInt()
Point CInfoBoxPopup::toScreen(Point p)
{
vstd::abetween(p.x, adventureInt->terrain.pos.x + 100, adventureInt->terrain.pos.x + adventureInt->terrain.pos.w - 100);
vstd::abetween(p.y, adventureInt->terrain.pos.y + 100, adventureInt->terrain.pos.y + adventureInt->terrain.pos.h - 100);
vstd::abetween(p.x, adventureInt->terrain->pos.x + 100, adventureInt->terrain->pos.x + adventureInt->terrain->pos.w - 100);
vstd::abetween(p.y, adventureInt->terrain->pos.y + 100, adventureInt->terrain->pos.y + adventureInt->terrain->pos.h - 100);
return p;
}