From 4a3426bb708c7d7f869664a2b106fa59153d4a77 Mon Sep 17 00:00:00 2001 From: krs Date: Mon, 22 May 2023 21:06:48 +0300 Subject: [PATCH] Hex Edge Highlight Images moved to VCMI mod --- .../battle}/rangeHighlights/green/bottom.png | Bin .../rangeHighlights/green/bottomLeft.png | Bin .../green/bottomLeftCorner.png | Bin .../green/bottomLeftHalfCorner.png | Bin .../rangeHighlights/green/bottomRight.png | Bin .../green/bottomRightCorner.png | Bin .../green/bottomRightHalfCorner.png | Bin .../battle/rangeHighlights/green/empty.png | Bin 0 -> 139 bytes .../battle}/rangeHighlights/green/fullHex.png | Bin .../battle}/rangeHighlights/green/left.png | Bin .../rangeHighlights/green/leftHalf.png | Bin .../battle}/rangeHighlights/green/right.png | Bin .../rangeHighlights/green/rightHalf.png | Bin .../battle}/rangeHighlights/green/top.png | Bin .../battle}/rangeHighlights/green/topLeft.png | Bin .../rangeHighlights/green/topLeftCorner.png | Bin .../green/topLeftHalfCorner.png | Bin .../rangeHighlights/green/topRight.png | Bin .../rangeHighlights/green/topRightCorner.png | Bin .../green/topRightHalfCorner.png | Bin .../rangeHighlights/rangeHighlightsGreen.json | 46 ++++++++ client/battle/BattleFieldController.cpp | 101 +++++++++++++----- client/battle/BattleFieldController.h | 2 +- 23 files changed, 122 insertions(+), 27 deletions(-) rename Mods/vcmi/{Data => Sprites/battle}/rangeHighlights/green/bottom.png (100%) rename Mods/vcmi/{Data => Sprites/battle}/rangeHighlights/green/bottomLeft.png (100%) rename Mods/vcmi/{Data => Sprites/battle}/rangeHighlights/green/bottomLeftCorner.png (100%) rename Mods/vcmi/{Data => Sprites/battle}/rangeHighlights/green/bottomLeftHalfCorner.png (100%) rename Mods/vcmi/{Data => Sprites/battle}/rangeHighlights/green/bottomRight.png (100%) rename Mods/vcmi/{Data => Sprites/battle}/rangeHighlights/green/bottomRightCorner.png (100%) rename Mods/vcmi/{Data => Sprites/battle}/rangeHighlights/green/bottomRightHalfCorner.png (100%) create mode 100644 Mods/vcmi/Sprites/battle/rangeHighlights/green/empty.png rename Mods/vcmi/{Data => Sprites/battle}/rangeHighlights/green/fullHex.png (100%) rename Mods/vcmi/{Data => Sprites/battle}/rangeHighlights/green/left.png (100%) rename Mods/vcmi/{Data => Sprites/battle}/rangeHighlights/green/leftHalf.png (100%) rename Mods/vcmi/{Data => Sprites/battle}/rangeHighlights/green/right.png (100%) rename Mods/vcmi/{Data => Sprites/battle}/rangeHighlights/green/rightHalf.png (100%) rename Mods/vcmi/{Data => Sprites/battle}/rangeHighlights/green/top.png (100%) rename Mods/vcmi/{Data => Sprites/battle}/rangeHighlights/green/topLeft.png (100%) rename Mods/vcmi/{Data => Sprites/battle}/rangeHighlights/green/topLeftCorner.png (100%) rename Mods/vcmi/{Data => Sprites/battle}/rangeHighlights/green/topLeftHalfCorner.png (100%) rename Mods/vcmi/{Data => Sprites/battle}/rangeHighlights/green/topRight.png (100%) rename Mods/vcmi/{Data => Sprites/battle}/rangeHighlights/green/topRightCorner.png (100%) rename Mods/vcmi/{Data => Sprites/battle}/rangeHighlights/green/topRightHalfCorner.png (100%) create mode 100644 Mods/vcmi/Sprites/battle/rangeHighlights/rangeHighlightsGreen.json diff --git a/Mods/vcmi/Data/rangeHighlights/green/bottom.png b/Mods/vcmi/Sprites/battle/rangeHighlights/green/bottom.png similarity index 100% rename from Mods/vcmi/Data/rangeHighlights/green/bottom.png rename to Mods/vcmi/Sprites/battle/rangeHighlights/green/bottom.png diff --git a/Mods/vcmi/Data/rangeHighlights/green/bottomLeft.png b/Mods/vcmi/Sprites/battle/rangeHighlights/green/bottomLeft.png similarity index 100% rename from Mods/vcmi/Data/rangeHighlights/green/bottomLeft.png rename to Mods/vcmi/Sprites/battle/rangeHighlights/green/bottomLeft.png diff --git a/Mods/vcmi/Data/rangeHighlights/green/bottomLeftCorner.png b/Mods/vcmi/Sprites/battle/rangeHighlights/green/bottomLeftCorner.png similarity index 100% rename from Mods/vcmi/Data/rangeHighlights/green/bottomLeftCorner.png rename to Mods/vcmi/Sprites/battle/rangeHighlights/green/bottomLeftCorner.png diff --git a/Mods/vcmi/Data/rangeHighlights/green/bottomLeftHalfCorner.png b/Mods/vcmi/Sprites/battle/rangeHighlights/green/bottomLeftHalfCorner.png similarity index 100% rename from Mods/vcmi/Data/rangeHighlights/green/bottomLeftHalfCorner.png rename to Mods/vcmi/Sprites/battle/rangeHighlights/green/bottomLeftHalfCorner.png diff --git a/Mods/vcmi/Data/rangeHighlights/green/bottomRight.png b/Mods/vcmi/Sprites/battle/rangeHighlights/green/bottomRight.png similarity index 100% rename from Mods/vcmi/Data/rangeHighlights/green/bottomRight.png rename to Mods/vcmi/Sprites/battle/rangeHighlights/green/bottomRight.png diff --git a/Mods/vcmi/Data/rangeHighlights/green/bottomRightCorner.png b/Mods/vcmi/Sprites/battle/rangeHighlights/green/bottomRightCorner.png similarity index 100% rename from Mods/vcmi/Data/rangeHighlights/green/bottomRightCorner.png rename to Mods/vcmi/Sprites/battle/rangeHighlights/green/bottomRightCorner.png diff --git a/Mods/vcmi/Data/rangeHighlights/green/bottomRightHalfCorner.png b/Mods/vcmi/Sprites/battle/rangeHighlights/green/bottomRightHalfCorner.png similarity index 100% rename from Mods/vcmi/Data/rangeHighlights/green/bottomRightHalfCorner.png rename to Mods/vcmi/Sprites/battle/rangeHighlights/green/bottomRightHalfCorner.png diff --git a/Mods/vcmi/Sprites/battle/rangeHighlights/green/empty.png b/Mods/vcmi/Sprites/battle/rangeHighlights/green/empty.png new file mode 100644 index 0000000000000000000000000000000000000000..fa8ce76300a3dc4c878773abcb238da40cc41d59 GIT binary patch literal 139 zcmeAS@N?(olHy`uVBq!ia0vp^xa~60+7BevL9ROj*tZSW|KtTmh7srqc=eGw98G*b*3%>g2^2jRynPAW` YTT0~!1LMQP3!j1bp00i_>zopr06m}~!2kdN literal 0 HcmV?d00001 diff --git a/Mods/vcmi/Data/rangeHighlights/green/fullHex.png b/Mods/vcmi/Sprites/battle/rangeHighlights/green/fullHex.png similarity index 100% rename from Mods/vcmi/Data/rangeHighlights/green/fullHex.png rename to Mods/vcmi/Sprites/battle/rangeHighlights/green/fullHex.png diff --git a/Mods/vcmi/Data/rangeHighlights/green/left.png b/Mods/vcmi/Sprites/battle/rangeHighlights/green/left.png similarity index 100% rename from Mods/vcmi/Data/rangeHighlights/green/left.png rename to Mods/vcmi/Sprites/battle/rangeHighlights/green/left.png diff --git a/Mods/vcmi/Data/rangeHighlights/green/leftHalf.png b/Mods/vcmi/Sprites/battle/rangeHighlights/green/leftHalf.png similarity index 100% rename from Mods/vcmi/Data/rangeHighlights/green/leftHalf.png rename to Mods/vcmi/Sprites/battle/rangeHighlights/green/leftHalf.png diff --git a/Mods/vcmi/Data/rangeHighlights/green/right.png b/Mods/vcmi/Sprites/battle/rangeHighlights/green/right.png similarity index 100% rename from Mods/vcmi/Data/rangeHighlights/green/right.png rename to Mods/vcmi/Sprites/battle/rangeHighlights/green/right.png diff --git a/Mods/vcmi/Data/rangeHighlights/green/rightHalf.png b/Mods/vcmi/Sprites/battle/rangeHighlights/green/rightHalf.png similarity index 100% rename from Mods/vcmi/Data/rangeHighlights/green/rightHalf.png rename to Mods/vcmi/Sprites/battle/rangeHighlights/green/rightHalf.png diff --git a/Mods/vcmi/Data/rangeHighlights/green/top.png b/Mods/vcmi/Sprites/battle/rangeHighlights/green/top.png similarity index 100% rename from Mods/vcmi/Data/rangeHighlights/green/top.png rename to Mods/vcmi/Sprites/battle/rangeHighlights/green/top.png diff --git a/Mods/vcmi/Data/rangeHighlights/green/topLeft.png b/Mods/vcmi/Sprites/battle/rangeHighlights/green/topLeft.png similarity index 100% rename from Mods/vcmi/Data/rangeHighlights/green/topLeft.png rename to Mods/vcmi/Sprites/battle/rangeHighlights/green/topLeft.png diff --git a/Mods/vcmi/Data/rangeHighlights/green/topLeftCorner.png b/Mods/vcmi/Sprites/battle/rangeHighlights/green/topLeftCorner.png similarity index 100% rename from Mods/vcmi/Data/rangeHighlights/green/topLeftCorner.png rename to Mods/vcmi/Sprites/battle/rangeHighlights/green/topLeftCorner.png diff --git a/Mods/vcmi/Data/rangeHighlights/green/topLeftHalfCorner.png b/Mods/vcmi/Sprites/battle/rangeHighlights/green/topLeftHalfCorner.png similarity index 100% rename from Mods/vcmi/Data/rangeHighlights/green/topLeftHalfCorner.png rename to Mods/vcmi/Sprites/battle/rangeHighlights/green/topLeftHalfCorner.png diff --git a/Mods/vcmi/Data/rangeHighlights/green/topRight.png b/Mods/vcmi/Sprites/battle/rangeHighlights/green/topRight.png similarity index 100% rename from Mods/vcmi/Data/rangeHighlights/green/topRight.png rename to Mods/vcmi/Sprites/battle/rangeHighlights/green/topRight.png diff --git a/Mods/vcmi/Data/rangeHighlights/green/topRightCorner.png b/Mods/vcmi/Sprites/battle/rangeHighlights/green/topRightCorner.png similarity index 100% rename from Mods/vcmi/Data/rangeHighlights/green/topRightCorner.png rename to Mods/vcmi/Sprites/battle/rangeHighlights/green/topRightCorner.png diff --git a/Mods/vcmi/Data/rangeHighlights/green/topRightHalfCorner.png b/Mods/vcmi/Sprites/battle/rangeHighlights/green/topRightHalfCorner.png similarity index 100% rename from Mods/vcmi/Data/rangeHighlights/green/topRightHalfCorner.png rename to Mods/vcmi/Sprites/battle/rangeHighlights/green/topRightHalfCorner.png diff --git a/Mods/vcmi/Sprites/battle/rangeHighlights/rangeHighlightsGreen.json b/Mods/vcmi/Sprites/battle/rangeHighlights/rangeHighlightsGreen.json new file mode 100644 index 000000000..2609782a3 --- /dev/null +++ b/Mods/vcmi/Sprites/battle/rangeHighlights/rangeHighlightsGreen.json @@ -0,0 +1,46 @@ +{ + "basepath" : "battle/rangeHighlights/green/", + "images" : + [ + { "frame" : 00, "file" : "empty.png"}, // 000001 -> 00 empty frame + + // load single edges + { "frame" : 01, "file" : "topLeft.png"}, //000001 -> 01 + { "frame" : 02, "file" : "topRight.png"}, //000010 -> 02 + { "frame" : 03, "file" : "right.png"}, //000100 -> 04 + { "frame" : 04, "file" : "bottomRight.png"}, //001000 -> 08 + { "frame" : 05, "file" : "bottomLeft.png"}, //010000 -> 16 + { "frame" : 06, "file" : "left.png"}, //100000 -> 32 + + // load double edges + { "frame" : 07, "file" : "top.png"}, //000011 -> 03 + { "frame" : 08, "file" : "bottom.png"}, //011000 -> 24 + { "frame" : 09, "file" : "topRightHalfCorner.png"}, //000110 -> 06 + { "frame" : 10, "file" : "bottomRightHalfCorner.png"}, //001100 -> 12 + { "frame" : 11, "file" : "bottomLeftHalfCorner.png"}, //110000 -> 48 + { "frame" : 12, "file" : "topLeftHalfCorner.png"}, //100001 -> 33 + + // load halves + { "frame" : 13, "file" : "rightHalf.png"}, //001110 -> 14 + { "frame" : 14, "file" : "leftHalf.png"}, //110001 -> 49 + + // load corners + { "frame" : 15, "file" : "topRightCorner.png"}, //000111 -> 07 + { "frame" : 16, "file" : "bottomRightCorner.png"}, //011100 -> 28 + { "frame" : 17, "file" : "bottomLeftCorner.png"}, //111000 -> 56 + { "frame" : 18, "file" : "topLeftCorner.png"} //100011 -> 35 + ] +} + + + + + + + + + + + + + diff --git a/client/battle/BattleFieldController.cpp b/client/battle/BattleFieldController.cpp index 6c9f40af1..b9a65df1c 100644 --- a/client/battle/BattleFieldController.cpp +++ b/client/battle/BattleFieldController.cpp @@ -29,6 +29,7 @@ #include "../gui/CGuiHandler.h" #include "../gui/CursorHandler.h" #include "../adventureMap/CInGameConsole.h" +#include "../client/render/CAnimation.h" #include "../../CCallback.h" #include "../../lib/BattleFieldHandler.h" @@ -36,6 +37,76 @@ #include "../../lib/CStack.h" #include "../../lib/spells/ISpellMechanics.h" +namespace HexMasks +{ + // mask definitions that has set to 1 the edges present in the hex edges highlight image + /* + /\ + 0 1 + / \ + | | + 5 2 + | | + \ / + 4 3 + \/ + */ + enum HexEdgeMasks { + empty = 0b000000, // empty used when wanting to keep indexes the same but no highlight should be displayed + topLeft = 0b000001, + topRight = 0b000010, + right = 0b000100, + bottomRight = 0b001000, + bottomLeft = 0b010000, + left = 0b100000, + + top = 0b000011, + bottom = 0b011000, + topRightHalfCorner = 0b000110, + bottomRightHalfCorner = 0b001100, + bottomLeftHalfCorner = 0b110000, + topLeftHalfCorner = 0b100001, + + rightHalf = 0b001110, + leftHalf = 0b110001, + + topRightCorner = 0b000111, + bottomRightCorner = 0b011100, + bottomLeftCorner = 0b111000, + topLeftCorner = 0b100011 + }; +} + +std::map hexEdgeMaskToFrameIndex; + +void initializeHexEdgeMaskToFrameIndex() +{ + hexEdgeMaskToFrameIndex[HexMasks::empty] = 0; + + hexEdgeMaskToFrameIndex[HexMasks::topLeft] = 1; + hexEdgeMaskToFrameIndex[HexMasks::topRight] = 2; + hexEdgeMaskToFrameIndex[HexMasks::right] = 3; + hexEdgeMaskToFrameIndex[HexMasks::bottomRight] = 4; + hexEdgeMaskToFrameIndex[HexMasks::bottomLeft] = 5; + hexEdgeMaskToFrameIndex[HexMasks::left] = 6; + + hexEdgeMaskToFrameIndex[HexMasks::top] = 7; + hexEdgeMaskToFrameIndex[HexMasks::bottom] = 8; + + hexEdgeMaskToFrameIndex[HexMasks::topRightHalfCorner] = 9; + hexEdgeMaskToFrameIndex[HexMasks::bottomRightHalfCorner] = 10; + hexEdgeMaskToFrameIndex[HexMasks::bottomLeftHalfCorner] = 11; + hexEdgeMaskToFrameIndex[HexMasks::topLeftHalfCorner] = 12; + + hexEdgeMaskToFrameIndex[HexMasks::rightHalf] = 13; + hexEdgeMaskToFrameIndex[HexMasks::leftHalf] = 14; + + hexEdgeMaskToFrameIndex[HexMasks::topRightCorner] = 15; + hexEdgeMaskToFrameIndex[HexMasks::bottomRightCorner] = 16; + hexEdgeMaskToFrameIndex[HexMasks::bottomLeftCorner] = 17; + hexEdgeMaskToFrameIndex[HexMasks::topLeftCorner] = 18; +} + BattleFieldController::BattleFieldController(BattleInterface & owner): owner(owner) { @@ -50,32 +121,10 @@ BattleFieldController::BattleFieldController(BattleInterface & owner): attackCursors = std::make_shared("CRCOMBAT"); attackCursors->preload(); - // load single edges - fullDamageRangeLimitImages[0b000001] = IImage::createFromFile("rangeHighlights/green/topLeft.PNG", EImageBlitMode::COLORKEY); - fullDamageRangeLimitImages[0b000010] = IImage::createFromFile("rangeHighlights/green/topRight.PNG", EImageBlitMode::COLORKEY); - fullDamageRangeLimitImages[0b000100] = IImage::createFromFile("rangeHighlights/green/right.PNG", EImageBlitMode::COLORKEY); - fullDamageRangeLimitImages[0b001000] = IImage::createFromFile("rangeHighlights/green/bottomRight.PNG", EImageBlitMode::COLORKEY); - fullDamageRangeLimitImages[0b010000] = IImage::createFromFile("rangeHighlights/green/bottomLeft.PNG", EImageBlitMode::COLORKEY); - fullDamageRangeLimitImages[0b100000] = IImage::createFromFile("rangeHighlights/green/left.PNG", EImageBlitMode::COLORKEY); + fullDamageRangeLimitImages = std::make_unique("battle/rangeHighlights/rangeHighlightsGreen.json"); + fullDamageRangeLimitImages->preload(); - // load double edges - fullDamageRangeLimitImages[0b000011] = IImage::createFromFile("rangeHighlights/green/top.PNG", EImageBlitMode::COLORKEY); - fullDamageRangeLimitImages[0b011000] = IImage::createFromFile("rangeHighlights/green/bottom.PNG", EImageBlitMode::COLORKEY); - - fullDamageRangeLimitImages[0b000110] = IImage::createFromFile("rangeHighlights/green/topRightHalfCorner.PNG", EImageBlitMode::COLORKEY); - fullDamageRangeLimitImages[0b001100] = IImage::createFromFile("rangeHighlights/green/bottomRightHalfCorner.PNG", EImageBlitMode::COLORKEY); - fullDamageRangeLimitImages[0b110000] = IImage::createFromFile("rangeHighlights/green/bottomLeftHalfCorner.PNG", EImageBlitMode::COLORKEY); - fullDamageRangeLimitImages[0b100001] = IImage::createFromFile("rangeHighlights/green/topLeftHalfCorner.PNG", EImageBlitMode::COLORKEY); - - // load halves - fullDamageRangeLimitImages[0b001110] = IImage::createFromFile("rangeHighlights/green/rightHalf.PNG", EImageBlitMode::COLORKEY); - fullDamageRangeLimitImages[0b110001] = IImage::createFromFile("rangeHighlights/green/leftHalf.PNG", EImageBlitMode::COLORKEY); - - // load corners - fullDamageRangeLimitImages[0b000111] = IImage::createFromFile("rangeHighlights/green/topRightCorner.PNG", EImageBlitMode::COLORKEY); - fullDamageRangeLimitImages[0b011100] = IImage::createFromFile("rangeHighlights/green/bottomRightCorner.PNG", EImageBlitMode::COLORKEY); - fullDamageRangeLimitImages[0b111000] = IImage::createFromFile("rangeHighlights/green/bottomLeftCorner.PNG", EImageBlitMode::COLORKEY); - fullDamageRangeLimitImages[0b100011] = IImage::createFromFile("rangeHighlights/green/topLeftCorner.PNG", EImageBlitMode::COLORKEY); + initializeHexEdgeMaskToFrameIndex(); if(!owner.siegeController) { @@ -488,7 +537,7 @@ std::vector> BattleFieldController::calculateFullRangedD mask.set(direction); uint8_t imageKey = static_cast(mask.to_ulong()); - output.push_back(fullDamageRangeLimitImages[imageKey]); + output.push_back(fullDamageRangeLimitImages->getImage(hexEdgeMaskToFrameIndex[imageKey])); } return output; diff --git a/client/battle/BattleFieldController.h b/client/battle/BattleFieldController.h index f3d57f877..4e1ba5ee3 100644 --- a/client/battle/BattleFieldController.h +++ b/client/battle/BattleFieldController.h @@ -32,8 +32,8 @@ class BattleFieldController : public CIntObject std::shared_ptr cellBorder; std::shared_ptr cellUnitMovementHighlight; std::shared_ptr cellUnitMaxMovementHighlight; - std::shared_ptr cellShade; + std::unique_ptr fullDamageRangeLimitImages; std::shared_ptr attackCursors;