diff --git a/client/Graphics.cpp b/client/Graphics.cpp index 750f92586..48a714dc0 100644 --- a/client/Graphics.cpp +++ b/client/Graphics.cpp @@ -3,7 +3,6 @@ #include "../lib/filesystem/Filesystem.h" #include "../lib/filesystem/CBinaryReader.h" -#include "CDefHandler.h" #include "gui/SDL_Extensions.h" #include "gui/CAnimation.h" #include @@ -335,11 +334,11 @@ void Graphics::loadFonts() std::string filename = bmpConf[i].String(); if (!hanConf[filename].isNull()) - fonts[i] = new CBitmapHanFont(hanConf[filename]); + fonts[i] = std::make_shared(hanConf[filename]); else if (!ttfConf[filename].isNull()) // no ttf override - fonts[i] = new CTrueTypeFont(ttfConf[filename]); + fonts[i] = std::make_shared(ttfConf[filename]); else - fonts[i] = new CBitmapFont(filename); + fonts[i] = std::make_shared(filename); } } diff --git a/client/Graphics.h b/client/Graphics.h index 4683c960d..447f0cdaa 100644 --- a/client/Graphics.h +++ b/client/Graphics.h @@ -1,6 +1,5 @@ #pragma once - #include "gui/Fonts.h" #include "../lib/GameConstants.h" #include "gui/Geometries.h" @@ -18,7 +17,6 @@ struct SDL_Surface; class CGHeroInstance; class CGTownInstance; -class CDefHandler; class CHeroClass; struct SDL_Color; struct InfoAboutHero; @@ -57,7 +55,7 @@ class Graphics public: //Fonts static const int FONTS_NUMBER = 9; - IFont * fonts[FONTS_NUMBER]; + std::array< std::shared_ptr, FONTS_NUMBER> fonts; //various graphics SDL_Color * playerColors; //array [8] diff --git a/client/mapHandler.cpp b/client/mapHandler.cpp index 179076e81..ecd952492 100644 --- a/client/mapHandler.cpp +++ b/client/mapHandler.cpp @@ -703,11 +703,8 @@ void CMapHandler::CMapWorldViewBlitter::drawObject(SDL_Surface * targetSurf, con void CMapHandler::CMapBlitter::drawTileTerrain(SDL_Surface * targetSurf, const TerrainTile & tinfo, const TerrainTile2 & tile) const { Rect destRect(realTileRect); - if(tile.terbitmap) //if custom terrain graphic - use it - drawElement(EMapCacheType::TERRAIN_CUSTOM, tile.terbitmap, nullptr, targetSurf, &destRect); - else //use default terrain graphic - drawElement(EMapCacheType::TERRAIN, parent->terrainGraphics[tinfo.terType][tinfo.terView], - nullptr, targetSurf, &destRect, false, tinfo.extTileFlags % 4); + + drawElement(EMapCacheType::TERRAIN, parent->terrainGraphics[tinfo.terType][tinfo.terView], nullptr, targetSurf, &destRect, false, tinfo.extTileFlags % 4); } void CMapHandler::CMapWorldViewBlitter::init(const MapDrawingInfo * drawingInfo) @@ -1377,77 +1374,6 @@ bool CMapHandler::removeObject(CGObjectInstance *obj, bool fadeout /* = false */ return true; } -void CMapHandler::validateRectTerr(SDL_Rect * val, const SDL_Rect * ext) -{ - if(ext) - { - if(val->x<0) - { - val->w += val->x; - val->x = ext->x; - } - else - { - val->x += ext->x; - } - if(val->y<0) - { - val->h += val->y; - val->y = ext->y; - } - else - { - val->y += ext->y; - } - - if(val->x+val->w > ext->x+ext->w) - { - val->w = ext->x+ext->w-val->x; - } - if(val->y+val->h > ext->y+ext->h) - { - val->h = ext->y+ext->h-val->y; - } - - //for sign problems - if(val->h > 20000 || val->w > 20000) - { - val->h = val->w = 0; - } - } -} - -ui8 CMapHandler::getDir(const int3 &a, const int3 &b) -{ - if(a.z!=b.z) - return -1; //error! - if(a.x==b.x+1 && a.y==b.y+1) //lt - return 0; - - else if(a.x==b.x && a.y==b.y+1) //t - return 1; - - else if(a.x==b.x-1 && a.y==b.y+1) //rt - return 2; - - else if(a.x==b.x-1 && a.y==b.y) //r - return 3; - - else if(a.x==b.x-1 && a.y==b.y-1) //rb - return 4; - - else if(a.x==b.x && a.y==b.y-1) //b - return 5; - - else if(a.x==b.x+1 && a.y==b.y-1) //lb - return 6; - - else if(a.x==b.x+1 && a.y==b.y) //l - return 7; - - return -2; //shouldn't happen -} - bool CMapHandler::canStartHeroMovement() { return fadeAnims.empty(); // don't allow movement during fade animation @@ -1561,16 +1487,16 @@ void CMapHandler::discardWorldViewCache() void CMapHandler::CMapCache::discardWorldViewCache() { - for (auto &cacheDataPair : data) + for (auto & cache : data) { - for (auto &cacheEntryPair : cacheDataPair.second) + for (auto &cacheEntryPair : cache) { if (cacheEntryPair.second) { SDL_FreeSurface(cacheEntryPair.second); } } - data[cacheDataPair.first].clear(); + cache.clear(); } logGlobal->debugStream() << "Discarded world view cache"; } @@ -1584,18 +1510,18 @@ void CMapHandler::CMapCache::updateWorldViewScale(float scale) void CMapHandler::CMapCache::removeFromWorldViewCache(CMapHandler::EMapCacheType type, intptr_t key) { - auto iter = data[type].find(key); - if (iter != data[type].end()) + auto iter = data[(ui8)type].find(key); + if (iter != data[(ui8)type].end()) { SDL_FreeSurface((*iter).second); - data[type].erase(iter); + data[(ui8)type].erase(iter); } } SDL_Surface * CMapHandler::CMapCache::requestWorldViewCache(CMapHandler::EMapCacheType type, intptr_t key) { - auto iter = data[type].find(key); - if (iter == data[type].end()) + auto iter = data[(ui8)type].find(key); + if (iter == data[(ui8)type].end()) return nullptr; return (*iter).second; } @@ -1620,7 +1546,7 @@ SDL_Surface * CMapHandler::CMapCache::requestWorldViewCacheOrCreate(CMapHandler: auto scaled = fullSurface->scaleFast(scale); - data[type][key] = scaled; + data[(ui8)type][key] = scaled; return scaled; } @@ -1632,7 +1558,7 @@ SDL_Surface *CMapHandler::CMapCache::cacheWorldViewEntry(CMapHandler::EMapCacheT if (requestWorldViewCache(type, key)) // valid cache already present, no need to do it again return requestWorldViewCache(type, key); - data[type][key] = entry; + data[(ui8)type][key] = entry; return entry; } diff --git a/client/mapHandler.h b/client/mapHandler.h index f284be3cc..3f72c5206 100644 --- a/client/mapHandler.h +++ b/client/mapHandler.h @@ -133,16 +133,6 @@ template class PseudoV { public: PseudoV() : offset(0) { } - PseudoV(std::vector &src, int rest, int before, int after, const T& fill) : offset(before) - { - inver.resize(before + rest + after); - for(int i=0; i> data; + std::array< std::map, (ui8)EMapCacheType::AFTER_LAST> data; float worldViewCachedScale; public: /// destroys all cached data (frees surfaces) @@ -405,8 +395,6 @@ public: EMapAnimRedrawStatus drawTerrainRectNew(SDL_Surface * targetSurface, const MapDrawingInfo * info, bool redrawOnlyAnim = false); void updateWater(); - void validateRectTerr(SDL_Rect * val, const SDL_Rect * ext); //terrainRect helper - static ui8 getDir(const int3 & a, const int3 & b); //returns direction number in range 0 - 7 (0 is left top, clockwise) [direction: form a to b] /// determines if the map is ready to handle new hero movement (not available during fading animations) bool canStartHeroMovement(); diff --git a/client/widgets/TextControls.cpp b/client/widgets/TextControls.cpp index e245735e2..cc3b2175f 100644 --- a/client/widgets/TextControls.cpp +++ b/client/widgets/TextControls.cpp @@ -107,7 +107,7 @@ void CMultiLineLabel::setText(const std::string &Txt) void CTextContainer::blitLine(SDL_Surface *to, Rect destRect, std::string what) { - const IFont * f = graphics->fonts[font]; + const auto f = graphics->fonts[font]; Point where = destRect.topLeft(); // input is rect in which given text should be placed @@ -164,7 +164,7 @@ void CMultiLineLabel::showAll(SDL_Surface * to) { CIntObject::showAll(to); - const IFont * f = graphics->fonts[font]; + const auto f = graphics->fonts[font]; // calculate which lines should be visible int totalLines = lines.size(); @@ -201,7 +201,7 @@ void CMultiLineLabel::splitText(const std::string &Txt) { lines.clear(); - const IFont * f = graphics->fonts[font]; + const auto f = graphics->fonts[font]; int lineHeight = f->getLineHeight(); lines = CMessage::breakText(Txt, pos.w, font); @@ -427,7 +427,7 @@ CTextInput::CTextInput(const Rect &Pos, SDL_Surface *srf) void CTextInput::focusGot() { - CSDL_Ext::startTextInput(&pos); + CSDL_Ext::startTextInput(&pos); } void CTextInput::focusLost() @@ -461,7 +461,7 @@ void CTextInput::keyPressed( const SDL_KeyboardEvent & key ) } bool redrawNeeded = false; - + switch(key.keysym.sym) { case SDLK_DELETE: // have index > ' ' so it won't be filtered out by default section @@ -476,7 +476,7 @@ void CTextInput::keyPressed( const SDL_KeyboardEvent & key ) { Unicode::trimRight(text); redrawNeeded = true; - } + } break; default: break; @@ -486,7 +486,7 @@ void CTextInput::keyPressed( const SDL_KeyboardEvent & key ) { redraw(); cb(text); - } + } } void CTextInput::setText( const std::string &nText, bool callCb ) @@ -500,7 +500,7 @@ bool CTextInput::captureThisEvent(const SDL_KeyboardEvent & key) { if(key.keysym.sym == SDLK_RETURN || key.keysym.sym == SDLK_KP_ENTER || key.keysym.sym == SDLK_ESCAPE) return false; - + return true; } @@ -509,15 +509,15 @@ void CTextInput::textInputed(const SDL_TextInputEvent & event) if(!focus) return; std::string oldText = text; - - text += event.text; - + + text += event.text; + filters(text,oldText); if (text != oldText) { redraw(); cb(text); - } + } newText = ""; } @@ -525,10 +525,10 @@ void CTextInput::textEdited(const SDL_TextEditingEvent & event) { if(!focus) return; - + newText = event.text; redraw(); - cb(text+newText); + cb(text+newText); } void CTextInput::filenameFilter(std::string & text, const std::string &) @@ -586,7 +586,7 @@ CFocusable::~CFocusable() { focusLost(); inputWithFocus = nullptr; - } + } focusables -= this; } @@ -602,7 +602,7 @@ void CFocusable::giveFocus() focus = true; inputWithFocus = this; focusGot(); - redraw(); + redraw(); } void CFocusable::moveFocus() diff --git a/lib/CGameInfoCallback.cpp b/lib/CGameInfoCallback.cpp index a7876b5f5..0f091b894 100644 --- a/lib/CGameInfoCallback.cpp +++ b/lib/CGameInfoCallback.cpp @@ -457,12 +457,6 @@ std::vector < const CGObjectInstance * > CGameInfoCallback::getFlaggableObjects( for(const CGObjectInstance *obj : t->blockingObjects) if(obj->tempOwner != PlayerColor::UNFLAGGABLE) ret.push_back(obj); -// const std::vector < std::pair > & objs = CGI->mh->ttiles[pos.x][pos.y][pos.z].objects; -// for(size_t b=0; btempOwner!=254 && !((objs[b].first->defInfo->blockMap[pos.y - objs[b].first->pos.y + 5] >> (objs[b].first->pos.x - pos.x)) & 1)) -// ret.push_back(CGI->mh->ttiles[pos.x][pos.y][pos.z].objects[b].first); -// } return ret; }