1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-04-23 12:08:45 +02:00

code review

This commit is contained in:
Laserlicht 2024-12-05 23:31:03 +01:00
parent 1fb5301750
commit 4b103fd63b
4 changed files with 21 additions and 12 deletions

View File

@ -125,7 +125,7 @@ std::shared_ptr<IImage> MapTileStorage::find(size_t fileIndex, size_t rotationIn
{ {
const auto & animation = animations[fileIndex][rotationIndex]; const auto & animation = animations[fileIndex][rotationIndex];
if (animation) if (animation)
return animation->getImage(imageIndex, groupIndex); // ask for group return animation->getImage(imageIndex, groupIndex);
else else
return nullptr; return nullptr;
} }
@ -134,7 +134,7 @@ int MapTileStorage::groupCount(size_t fileIndex, size_t rotationIndex, size_t im
{ {
const auto & animation = animations[fileIndex][rotationIndex]; const auto & animation = animations[fileIndex][rotationIndex];
if (animation) if (animation)
for(int i = 0; true; i++) for(int i = 0;; i++)
if(!animation->getImage(imageIndex, i, false)) if(!animation->getImage(imageIndex, i, false))
return i; return i;
return 1; return 1;

View File

@ -336,7 +336,8 @@ void AssetGenerator::createPaletteShiftedSprites()
{ {
std::vector<std::string> tiles; std::vector<std::string> tiles;
std::vector<std::vector<std::variant<TerrainPaletteAnimation, RiverPaletteAnimation>>> paletteAnimations; std::vector<std::vector<std::variant<TerrainPaletteAnimation, RiverPaletteAnimation>>> paletteAnimations;
VLC->terrainTypeHandler->forEach([&](const TerrainType *entity, bool &stop){ for(auto entity : VLC->terrainTypeHandler->objects)
{
if(entity->paletteAnimation.size()) if(entity->paletteAnimation.size())
{ {
tiles.push_back(entity->tilesFilename.getName()); tiles.push_back(entity->tilesFilename.getName());
@ -345,8 +346,9 @@ void AssetGenerator::createPaletteShiftedSprites()
tmpAnim.push_back(animEntity); tmpAnim.push_back(animEntity);
paletteAnimations.push_back(tmpAnim); paletteAnimations.push_back(tmpAnim);
} }
}); }
VLC->riverTypeHandler->forEach([&](const RiverType *entity, bool &stop){ for(auto entity : VLC->riverTypeHandler->objects)
{
if(entity->paletteAnimation.size()) if(entity->paletteAnimation.size())
{ {
tiles.push_back(entity->tilesFilename.getName()); tiles.push_back(entity->tilesFilename.getName());
@ -355,7 +357,7 @@ void AssetGenerator::createPaletteShiftedSprites()
tmpAnim.push_back(animEntity); tmpAnim.push_back(animEntity);
paletteAnimations.push_back(tmpAnim); paletteAnimations.push_back(tmpAnim);
} }
}); }
for(int i = 0; i < tiles.size(); i++) for(int i = 0; i < tiles.size(); i++)
{ {
@ -374,14 +376,14 @@ void AssetGenerator::createPaletteShiftedSprites()
auto anim = GH.renderHandler().loadAnimation(filename, EImageBlitMode::COLORKEY); auto anim = GH.renderHandler().loadAnimation(filename, EImageBlitMode::COLORKEY);
for(int j = 0; j < anim->size(); j++) for(int j = 0; j < anim->size(); j++)
{ {
int maxLen = 0; int maxLen = 1;
for(int k = 0; k < paletteAnimations[i].size(); k++) for(int k = 0; k < paletteAnimations[i].size(); k++)
{ {
auto element = paletteAnimations[i][k]; auto element = paletteAnimations[i][k];
if(std::holds_alternative<TerrainPaletteAnimation>(element)) if(std::holds_alternative<TerrainPaletteAnimation>(element))
maxLen = std::max(maxLen, std::get<TerrainPaletteAnimation>(element).length); maxLen = std::lcm(maxLen, std::get<TerrainPaletteAnimation>(element).length);
else else
maxLen = std::max(maxLen, std::get<RiverPaletteAnimation>(element).length); maxLen = std::lcm(maxLen, std::get<RiverPaletteAnimation>(element).length);
} }
for(int l = 0; l < maxLen; l++) for(int l = 0; l < maxLen; l++)
{ {
@ -415,12 +417,11 @@ void AssetGenerator::createPaletteShiftedSprites()
std::shared_ptr<IImage> image = GH.renderHandler().createImage(canvas.getInternalSurface()); std::shared_ptr<IImage> image = GH.renderHandler().createImage(canvas.getInternalSurface());
image->exportBitmap(*CResourceHandler::get("local")->getResourceName(savePath)); image->exportBitmap(*CResourceHandler::get("local")->getResourceName(savePath));
JsonNode node; JsonNode node(JsonMap{
node.Struct() = {
{ "group", JsonNode(l) }, { "group", JsonNode(l) },
{ "frame", JsonNode(j) }, { "frame", JsonNode(j) },
{ "file", JsonNode(spriteName) } { "file", JsonNode(spriteName) }
}; });
config["images"].Vector().push_back(node); config["images"].Vector().push_back(node);
} }
} }

View File

@ -86,6 +86,11 @@ JsonNode::JsonNode(const std::string & string)
{ {
} }
JsonNode::JsonNode(const JsonMap & map)
: data(map)
{
}
JsonNode::JsonNode(const std::byte * data, size_t datasize, const std::string & fileName) JsonNode::JsonNode(const std::byte * data, size_t datasize, const std::string & fileName)
: JsonNode(data, datasize, JsonParsingSettings(), fileName) : JsonNode(data, datasize, JsonParsingSettings(), fileName)
{ {

View File

@ -71,6 +71,9 @@ public:
explicit JsonNode(const char * string); explicit JsonNode(const char * string);
explicit JsonNode(const std::string & string); explicit JsonNode(const std::string & string);
/// Create tree from map
explicit JsonNode(const JsonMap & map);
/// Create tree from Json-formatted input /// Create tree from Json-formatted input
explicit JsonNode(const std::byte * data, size_t datasize, const std::string & fileName); explicit JsonNode(const std::byte * data, size_t datasize, const std::string & fileName);
explicit JsonNode(const std::byte * data, size_t datasize, const JsonParsingSettings & parserSettings, const std::string & fileName); explicit JsonNode(const std::byte * data, size_t datasize, const JsonParsingSettings & parserSettings, const std::string & fileName);