diff --git a/client/VCMI_client.cbp b/client/VCMI_client.cbp
index dff43308e..69fbe9f73 100644
--- a/client/VCMI_client.cbp
+++ b/client/VCMI_client.cbp
@@ -70,12 +70,11 @@
+
-
-
diff --git a/client/gui/CAnimation.cpp b/client/gui/CAnimation.cpp
index 6ce5075ed..881a76f7a 100644
--- a/client/gui/CAnimation.cpp
+++ b/client/gui/CAnimation.cpp
@@ -51,11 +51,11 @@ class CompImageLoader
ui8 *position;
ui8 *entry;
ui32 currentLine;
-
+
inline ui8 typeOf(ui8 color);
inline void NewEntry(ui8 color, size_t size);
inline void NewEntry(const ui8 * &data, size_t size);
-
+
public:
//load size raw pixels from data
inline void Load(size_t size, const ui8 * data);
@@ -75,29 +75,26 @@ class CFileCache
static const int cacheSize = 50; //Max number of cached files
struct FileData
{
- ResourceID name;
- size_t size;
- ui8 * data;
+ ResourceID name;
+ size_t size;
+ std::unique_ptr data;
- ui8 * getCopy()
+ std::unique_ptr getCopy()
{
- auto ret = new ui8[size];
- std::copy(data, data + size, ret);
+ auto ret = std::unique_ptr(new ui8[size]);
+ std::copy(data.get(), data.get() + size, ret.get());
return ret;
}
- FileData():
- size(0),
- data(nullptr)
+ FileData(ResourceID name_, size_t size_, std::unique_ptr data_):
+ name{std::move(name_)},
+ size{size_},
+ data{std::move(data_)}
{}
- ~FileData()
- {
- delete [] data;
- }
};
- std::list cache;
+ std::deque cache;
public:
- ui8 * getCachedFile(ResourceID && rid)
+ std::unique_ptr getCachedFile(ResourceID rid)
{
for(auto & file : cache)
{
@@ -107,12 +104,10 @@ public:
// Still here? Cache miss
if (cache.size() > cacheSize)
cache.pop_front();
- cache.push_back(FileData());
auto data = CResourceHandler::get()->load(rid)->readAll();
- cache.back().name = ResourceID(rid);
- cache.back().size = data.second;
- cache.back().data = data.first.release();
+
+ cache.emplace_back(std::move(rid), data.second, std::move(data.first));
return cache.back().getCopy();
}
@@ -142,15 +137,15 @@ CDefFile::CDefFile(std::string Name):
};
data = animationCache.getCachedFile(ResourceID(std::string("SPRITES/") + Name, EResType::ANIMATION));
- palette = new SDL_Color[256];
+ palette = std::unique_ptr(new SDL_Color[256]);
int it = 0;
- ui32 type = read_le_u32(data + it);
+ ui32 type = read_le_u32(data.get() + it);
it+=4;
//int width = read_le_u32(data + it); it+=4;//not used
//int height = read_le_u32(data + it); it+=4;
it+=8;
- ui32 totalBlocks = read_le_u32(data + it);
+ ui32 totalBlocks = read_le_u32(data.get() + it);
it+=4;
for (ui32 i= 0; i<256; i++)
@@ -161,15 +156,15 @@ CDefFile::CDefFile(std::string Name):
palette[i].a = SDL_ALPHA_OPAQUE;
}
if (type == 71 || type == 64)//Buttons/buildings don't have shadows\semi-transparency
- memset(palette, 0, sizeof(SDL_Color)*2);
+ memset(palette.get(), 0, sizeof(SDL_Color)*2);
else
- memcpy(palette, H3Palette, sizeof(SDL_Color)*8);//initialize shadow\selection colors
+ memcpy(palette.get(), H3Palette, sizeof(SDL_Color)*8);//initialize shadow\selection colors
for (ui32 i=0; isecond[frame];
+ const ui8 * FDef = data.get()+it->second[frame];
const SSpriteDef sd = * reinterpret_cast(FDef);
SSpriteDef sprite;
@@ -210,7 +205,7 @@ void CDefFile::loadFrame(size_t frame, size_t group, ImageLoader &loader) const
loader.init(Point(sprite.width, sprite.height),
Point(sprite.leftMargin, sprite.topMargin),
- Point(sprite.fullWidth, sprite.fullHeight), palette);
+ Point(sprite.fullWidth, sprite.fullHeight), palette.get());
switch (sprite.format)
{
@@ -321,11 +316,7 @@ void CDefFile::loadFrame(size_t frame, size_t group, ImageLoader &loader) const
}
};
-CDefFile::~CDefFile()
-{
- delete[] data;
- delete[] palette;
-}
+CDefFile::~CDefFile() = default;
const std::map CDefFile::getEntries() const
{
@@ -355,10 +346,10 @@ void SDLImageLoader::init(Point SpriteSize, Point Margins, Point FullSize, SDL_C
image->fullSize = FullSize;
//Prepare surface
- SDL_Palette * p = SDL_AllocPalette(256);
+ SDL_Palette * p = SDL_AllocPalette(256);
SDL_SetPaletteColors(p, pal, 0, 256);
SDL_SetSurfacePalette(image->surf, p);
- SDL_FreePalette(p);
+ SDL_FreePalette(p);
SDL_LockSurface(image->surf);
lineStart = position = (ui8*)image->surf->pixels;
@@ -396,14 +387,14 @@ SDLImageLoader::~SDLImageLoader()
}
////////////////////////////////////////////////////////////////////////////////
-
+
CompImageLoader::CompImageLoader(CompImage * Img):
image(Img),
position(nullptr),
entry(nullptr),
currentLine(0)
{
-
+
}
void CompImageLoader::init(Point SpriteSize, Point Margins, Point FullSize, SDL_Color *pal)
@@ -451,7 +442,7 @@ inline ui8 CompImageLoader::typeOf(ui8 color)
if (image->palette[color].a != 255)
return 1;
-
+
return 2;
}
@@ -489,7 +480,7 @@ inline void CompImageLoader::Load(size_t size, const ui8 * data)
ui8 type = typeOf(color);
ui8 color2;
ui8 type2;
-
+
if (size > 1)
{
do
@@ -632,7 +623,7 @@ SDLImage::SDLImage(std::string filename, bool compressed):
{
CSDL_Ext::setColorKey(temp,temp->format->palette->colors[0]);
}
- SDL_SetSurfaceRLE(temp, SDL_RLEACCEL);
+ SDL_SetSurfaceRLE(temp, SDL_RLEACCEL);
// convert surface to enable RLE
surf = SDL_ConvertSurface(temp, temp->format, temp->flags);
@@ -680,7 +671,7 @@ CompImage::CompImage(const CDefFile *data, size_t frame, size_t group):
surf(nullptr),
line(nullptr),
palette(nullptr)
-
+
{
CompImageLoader loader(this);
data->loadFrame(frame, group, loader);
@@ -738,7 +729,7 @@ void CompImage::draw(SDL_Surface *where, int posX, int posY, Rect *src, ui8 alph
currX = 0;
ui8 bpp = where->format->BytesPerPixel;
-
+
//Calculate position for blitting: pixels + Y + X
ui8* blitPos = (ui8*) where->pixels;
if (rotation & 4)
@@ -769,7 +760,7 @@ void CompImage::draw(SDL_Surface *where, int posX, int posY, Rect *src, ui8 alph
void CompImage::BlitBlockWithBpp(ui8 bpp, ui8 type, ui8 size, ui8 *&data, ui8 *&dest, ui8 alpha, bool rotated) const
{
assert(bpp>1 && bpp<5);
-
+
if (rotated)
switch (bpp)
{
@@ -817,7 +808,7 @@ void CompImage::BlitBlock(ui8 type, ui8 size, ui8 *&data, ui8 *&dest, ui8 alpha)
//Put row of RGBA data
for (size_t i=0; i::PutColorAlpha(dest, palette[*(data++)]);
-
+
}
}
//RLE-d sequence
@@ -831,7 +822,7 @@ void CompImage::BlitBlock(ui8 type, ui8 size, ui8 *&data, ui8 *&dest, ui8 alpha)
ColorPutter::PutColorAlpha(dest, col);
return;
}
-
+
switch (palette[type].a)
{
case 0:
@@ -958,7 +949,7 @@ bool CAnimation::loadFrame(CDefFile * file, size_t frame, size_t group)
else //load from separate file
{
std::string filename = source[group][frame].Struct().find("file")->second.String();
-
+
IImage * img = getFromExtraDef(filename);
if (!img)
img = new SDLImage(filename, compressed);
@@ -1183,7 +1174,7 @@ void CAnimation::getAnimInfo()
logGlobal->errorStream()<<"Animation stats: Loaded "<errorStream()<<"Name: "<name<<" Groups: "<images.size();
if (!anim->images.empty())
logGlobal->errorStream()<<", "<images.begin()->second.size()<<" image loaded in group "<< anim->images.begin()->first;
@@ -1202,12 +1193,12 @@ void CFadeAnimation::update()
{
if (!fading)
return;
-
+
if (fadingMode == EMode::OUT)
fadingCounter -= delta;
else
fadingCounter += delta;
-
+
if (isFinished())
{
fading = false;
@@ -1236,7 +1227,7 @@ CFadeAnimation::CFadeAnimation()
CFadeAnimation::~CFadeAnimation()
{
if (fadingSurface && shouldFreeSurface)
- SDL_FreeSurface(fadingSurface);
+ SDL_FreeSurface(fadingSurface);
}
void CFadeAnimation::init(EMode mode, SDL_Surface * sourceSurface, bool freeSurfaceAtEnd /* = false */, float animDelta /* = DEFAULT_DELTA */)
@@ -1247,17 +1238,17 @@ void CFadeAnimation::init(EMode mode, SDL_Surface * sourceSurface, bool freeSurf
// (alternatively, we could just return here to ignore the new fade request until this one finished (but we'd need to free the passed bitmap to avoid leaks))
logGlobal->warnStream() << "Tried to init fading animation that is already running.";
if (fadingSurface && shouldFreeSurface)
- SDL_FreeSurface(fadingSurface);
- }
+ SDL_FreeSurface(fadingSurface);
+ }
if (animDelta <= 0.0f)
{
logGlobal->warnStream() << "Fade anim: delta should be positive; " << animDelta << " given.";
animDelta = DEFAULT_DELTA;
}
-
+
if (sourceSurface)
fadingSurface = sourceSurface;
-
+
delta = animDelta;
fadingMode = mode;
fadingCounter = initialCounter();
@@ -1266,13 +1257,13 @@ void CFadeAnimation::init(EMode mode, SDL_Surface * sourceSurface, bool freeSurf
}
void CFadeAnimation::draw(SDL_Surface * targetSurface, const SDL_Rect * sourceRect, SDL_Rect * destRect)
-{
+{
if (!fading || !fadingSurface || fadingMode == EMode::NONE)
{
fading = false;
return;
}
-
+
CSDL_Ext::setAlpha(fadingSurface, fadingCounter * 255);
SDL_BlitSurface(fadingSurface, const_cast(sourceRect), targetSurface, destRect); //FIXME
CSDL_Ext::setAlpha(fadingSurface, 255);
diff --git a/client/gui/CAnimation.h b/client/gui/CAnimation.h
index 4897ac092..329d31206 100644
--- a/client/gui/CAnimation.h
+++ b/client/gui/CAnimation.h
@@ -39,8 +39,8 @@ private:
//offset[group][frame] - offset of frame data in file
std::map > offset;
- ui8 * data;
- SDL_Color * palette;
+ std::unique_ptr data;
+ std::unique_ptr palette;
public:
CDefFile(std::string Name);
@@ -236,7 +236,7 @@ private:
bool fading;
float fadingCounter;
bool shouldFreeSurface;
-
+
float initialCounter() const;
bool isFinished() const;
public:
diff --git a/launcher/VCMI_launcher.cbp b/launcher/VCMI_launcher.cbp
index 0aba3f0f0..973802006 100644
--- a/launcher/VCMI_launcher.cbp
+++ b/launcher/VCMI_launcher.cbp
@@ -9,17 +9,18 @@
-
+
+
-
+
@@ -36,11 +37,10 @@
+
-
-
diff --git a/lib/VCMI_lib.cbp b/lib/VCMI_lib.cbp
index 0fea9d4ac..509fed307 100644
--- a/lib/VCMI_lib.cbp
+++ b/lib/VCMI_lib.cbp
@@ -19,7 +19,6 @@
-
@@ -33,9 +32,6 @@
-
-
-
@@ -48,7 +44,6 @@
-
@@ -62,9 +57,6 @@
-
-
-
@@ -110,18 +102,21 @@
+
-
-
-
+
+
+
+
+
diff --git a/lib/filesystem/AdapterLoaders.cpp b/lib/filesystem/AdapterLoaders.cpp
index 26193b228..6eebbd20b 100644
--- a/lib/filesystem/AdapterLoaders.cpp
+++ b/lib/filesystem/AdapterLoaders.cpp
@@ -8,7 +8,8 @@ CMappedFileLoader::CMappedFileLoader(const std::string & mountPoint, const JsonN
{
for(auto entry : config.Struct())
{
- fileList[ResourceID(mountPoint + entry.first)] = ResourceID(mountPoint + entry.second.String());
+ //fileList[ResourceID(mountPoint + entry.first)] = ResourceID(mountPoint + entry.second.String());
+ fileList.emplace(ResourceID(mountPoint + entry.first), ResourceID(mountPoint + entry.second.String()));
}
}
diff --git a/lib/filesystem/ResourceID.cpp b/lib/filesystem/ResourceID.cpp
index 129b2d1e4..c0fd3e134 100644
--- a/lib/filesystem/ResourceID.cpp
+++ b/lib/filesystem/ResourceID.cpp
@@ -46,10 +46,12 @@ static inline std::string readName(std::string name)
return name;
}
+#if 0
ResourceID::ResourceID()
:type(EResType::OTHER)
{
}
+#endif
ResourceID::ResourceID(std::string name_)
:type{readType(name_)},
@@ -62,7 +64,7 @@ ResourceID::ResourceID(std::string name_, EResType::Type type_)
name{readName(std::move(name_))}
{
}
-
+#if 0
std::string ResourceID::getName() const
{
return name;
@@ -72,7 +74,7 @@ EResType::Type ResourceID::getType() const
{
return type;
}
-#if 0
+
void ResourceID::setName(std::string name)
{
// setName shouldn't be used if type is UNDEFINED
diff --git a/lib/filesystem/ResourceID.h b/lib/filesystem/ResourceID.h
index 84ee90d58..93b0ad6e6 100644
--- a/lib/filesystem/ResourceID.h
+++ b/lib/filesystem/ResourceID.h
@@ -70,7 +70,7 @@ public:
/**
* Default c-tor.
*/
- ResourceID();
+ //ResourceID();
/**
* Ctor. Can be used to create identifier for resource loading using one parameter
@@ -98,8 +98,8 @@ public:
return name == other.name && type == other.type;
}
- std::string getName() const;
- EResType::Type getType() const;
+ std::string getName() const {return name;}
+ EResType::Type getType() const {return type;}
//void setName(std::string name);
//void setType(EResType::Type type);
diff --git a/server/VCMI_server.cbp b/server/VCMI_server.cbp
index c13d7031f..0fd71f736 100644
--- a/server/VCMI_server.cbp
+++ b/server/VCMI_server.cbp
@@ -15,9 +15,8 @@
+
-
-
@@ -34,7 +33,6 @@
-
@@ -69,13 +67,13 @@
+
-
-
+
diff --git a/vcmi.workspace b/vcmi.workspace
index 674989792..566222a2c 100644
--- a/vcmi.workspace
+++ b/vcmi.workspace
@@ -6,8 +6,8 @@
-
+
@@ -27,13 +27,13 @@
-
-
+
+