Added upscale table for explored map (alternative way to reveal map)
This commit is contained in:
parent
ac4646cab3
commit
ff12391d01
1 changed files with 52 additions and 34 deletions
|
@ -47,6 +47,21 @@ enum class FogOfWarTypes { cLegacy, cEnhanced, cNumOfTypes }; /// Types of the
|
||||||
class CFogOfWar
|
class CFogOfWar
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
CFogOfWar()
|
||||||
|
{
|
||||||
|
/// Calculate values of upscale table for explored/unexplored tiles
|
||||||
|
for (auto i = 0; i < 16; i++) {
|
||||||
|
for (auto j = 0; j < 4; j++) {
|
||||||
|
UpscaleTableExplored[i][j] = 0;
|
||||||
|
for (auto pos = 0; pos < 4; pos ++) {
|
||||||
|
uint32_t initValue = (UpscaleTableVisible[i][j] >> (8 * pos)) & 0xFF;
|
||||||
|
initValue -= initValue / 2;
|
||||||
|
UpscaleTableExplored[i][j] |= initValue << (pos * 8);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
enum VisionType { cUnseen = 0, cExplored = 0b001, cVisible = 0b010 };
|
enum VisionType { cUnseen = 0, cExplored = 0b001, cVisible = 0b010 };
|
||||||
enum States { cFirstEntry = 0, cGenerateFog, cGenerateTexture, cBlurTexture, cReady };
|
enum States { cFirstEntry = 0, cGenerateFog, cGenerateTexture, cBlurTexture, cReady };
|
||||||
enum UpscaleTypes { cSimple = 0, cBilinear };
|
enum UpscaleTypes { cSimple = 0, cBilinear };
|
||||||
|
@ -116,43 +131,46 @@ private:
|
||||||
std::vector<uint8_t> RenderedFog; /// Back buffer for bilinear upscaling in to viewports
|
std::vector<uint8_t> RenderedFog; /// Back buffer for bilinear upscaling in to viewports
|
||||||
CBlurer Blurer; /// Blurer for fog of war texture
|
CBlurer Blurer; /// Blurer for fog of war texture
|
||||||
|
|
||||||
/// Table with patterns to generate fog of war texture from vision table
|
/// Tables with patterns to generate fog of war texture from vision table
|
||||||
#if SDL_BYTEORDER == SDL_LIL_ENDIAN
|
#if SDL_BYTEORDER == SDL_LIL_ENDIAN
|
||||||
static constexpr uint32_t UpscaleTable[16][4] { {0x7F7F7F7F, 0x7F7F7F7F, 0x7F7F7F7F, 0x7F7F7F7F}, // 0 00:00
|
const uint32_t UpscaleTableVisible[16][4] { {0x7F7F7F7F, 0x7F7F7F7F, 0x7F7F7F7F, 0x7F7F7F7F}, // 0 00:00
|
||||||
{0x7F7F7F7F, 0x7F7F7F7F, 0x3F7F7F7F, 0x003F7F7F}, // 1 00:01
|
{0x7F7F7F7F, 0x7F7F7F7F, 0x3F7F7F7F, 0x003F7F7F}, // 1 00:01
|
||||||
{0x7F7F7F7F, 0x7F7F7F7F, 0x7F7F7F3F, 0x7F7F3F00}, // 2 00:10
|
{0x7F7F7F7F, 0x7F7F7F7F, 0x7F7F7F3F, 0x7F7F3F00}, // 2 00:10
|
||||||
{0x7F7F7F7F, 0x7F7F7F7F, 0x3F3F3F3F, 0x00000000}, // 3 00:11
|
{0x7F7F7F7F, 0x7F7F7F7F, 0x3F3F3F3F, 0x00000000}, // 3 00:11
|
||||||
{0x003F7F7F, 0x3F7F7F7F, 0x7F7F7F7F, 0x7F7F7F7F}, // 4 01:00
|
{0x003F7F7F, 0x3F7F7F7F, 0x7F7F7F7F, 0x7F7F7F7F}, // 4 01:00
|
||||||
{0x003F7F7F, 0x003F7F7F, 0x003F7F7F, 0x003F7F7F}, // 5 01:01
|
{0x003F7F7F, 0x003F7F7F, 0x003F7F7F, 0x003F7F7F}, // 5 01:01
|
||||||
{0x003F7F7F, 0x3F7F7F7F, 0x7F7F7F3F, 0x7F7F3F00}, // 6 01:10
|
{0x003F7F7F, 0x3F7F7F7F, 0x7F7F7F3F, 0x7F7F3F00}, // 6 01:10
|
||||||
{0x00003F7F, 0x0000003F, 0x00000000, 0x00000000}, // 7 01:11
|
{0x00003F7F, 0x0000003F, 0x00000000, 0x00000000}, // 7 01:11
|
||||||
{0x7F7F3F00, 0x7F7F7F3F, 0x7F7F7F7F, 0x7F7F7F7F}, // 8 10:00
|
{0x7F7F3F00, 0x7F7F7F3F, 0x7F7F7F7F, 0x7F7F7F7F}, // 8 10:00
|
||||||
{0x7F7F3F00, 0x7F7F7F3F, 0x3F7F7F7F, 0x003F7F7F}, // 9 10:01
|
{0x7F7F3F00, 0x7F7F7F3F, 0x3F7F7F7F, 0x003F7F7F}, // 9 10:01
|
||||||
{0x7F7F3F00, 0x7F7F3F00, 0x7F7F3F00, 0x7F7F3F00}, // A 10:10
|
{0x7F7F3F00, 0x7F7F3F00, 0x7F7F3F00, 0x7F7F3F00}, // A 10:10
|
||||||
{0x7F3F0000, 0x3F000000, 0x00000000, 0x00000000}, // B 10:11
|
{0x7F3F0000, 0x3F000000, 0x00000000, 0x00000000}, // B 10:11
|
||||||
{0x00000000, 0x3F3F3F3F, 0x7F7F7F7F, 0x7F7F7F7F}, // C 11:00
|
{0x00000000, 0x3F3F3F3F, 0x7F7F7F7F, 0x7F7F7F7F}, // C 11:00
|
||||||
{0x00000000, 0x00000000, 0x0000003F, 0x00003F7F}, // D 11:01
|
{0x00000000, 0x00000000, 0x0000003F, 0x00003F7F}, // D 11:01
|
||||||
{0x00000000, 0x00000000, 0x3F000000, 0x7F3F0000}, // E 11:10
|
{0x00000000, 0x00000000, 0x3F000000, 0x7F3F0000}, // E 11:10
|
||||||
{0x00000000, 0x00000000, 0x00000000, 0x00000000} }; // F 11:11
|
{0x00000000, 0x00000000, 0x00000000, 0x00000000} }; // F 11:11
|
||||||
|
|
||||||
#else // big endian
|
#else // big endian
|
||||||
static constexpr uint32_t UpscaleTable[16][4] { {0x7F7F7F7F, 0x7F7F7F7F, 0x7F7F7F7F, 0x7F7F7F7F}, // 0 00:00
|
const uint32_t UpscaleTableVisible[16][4] { {0x7F7F7F7F, 0x7F7F7F7F, 0x7F7F7F7F, 0x7F7F7F7F}, // 0 00:00
|
||||||
{0x7F7F7F7F, 0x7F7F7F7F, 0x7F7F7F3F, 0x7F7F3F00}, // 1 00:01
|
{0x7F7F7F7F, 0x7F7F7F7F, 0x7F7F7F3F, 0x7F7F3F00}, // 1 00:01
|
||||||
{0x7F7F7F7F, 0x7F7F7F7F, 0x3F7F7F7F, 0x003F7F7F}, // 2 00:10
|
{0x7F7F7F7F, 0x7F7F7F7F, 0x3F7F7F7F, 0x003F7F7F}, // 2 00:10
|
||||||
{0x7F7F7F7F, 0x7F7F7F7F, 0x00000000, 0x00000000}, // 3 00:11
|
{0x7F7F7F7F, 0x7F7F7F7F, 0x00000000, 0x00000000}, // 3 00:11
|
||||||
{0x7F7F3F00, 0x7F7F7F3F, 0x7F7F7F7F, 0x7F7F7F7F}, // 4 01:00
|
{0x7F7F3F00, 0x7F7F7F3F, 0x7F7F7F7F, 0x7F7F7F7F}, // 4 01:00
|
||||||
{0x7F7F0000, 0x7F7F0000, 0x7F7F0000, 0x7F7F0000}, // 5 01:01
|
{0x7F7F0000, 0x7F7F0000, 0x7F7F0000, 0x7F7F0000}, // 5 01:01
|
||||||
{0x7F7F3F00, 0x7F7F7F3F, 0x3F7F7F7F, 0x003F7F7F}, // 6 01:10
|
{0x7F7F3F00, 0x7F7F7F3F, 0x3F7F7F7F, 0x003F7F7F}, // 6 01:10
|
||||||
{0x7F3F0000, 0x3F000000, 0x00000000, 0x00000000}, // 7 01:11
|
{0x7F3F0000, 0x3F000000, 0x00000000, 0x00000000}, // 7 01:11
|
||||||
{0x003F7F7F, 0x3F7F7F7F, 0x7F7F7F7F, 0x7F7F7F7F}, // 8 10:00
|
{0x003F7F7F, 0x3F7F7F7F, 0x7F7F7F7F, 0x7F7F7F7F}, // 8 10:00
|
||||||
{0x003F7F7F, 0x3F7F7F7F, 0x7F7F7F3F, 0x7F7F3F00}, // 9 10:01
|
{0x003F7F7F, 0x3F7F7F7F, 0x7F7F7F3F, 0x7F7F3F00}, // 9 10:01
|
||||||
{0x00007F7F, 0x00007F7F, 0x00007F7F, 0x00007F7F}, // A 10:10
|
{0x00007F7F, 0x00007F7F, 0x00007F7F, 0x00007F7F}, // A 10:10
|
||||||
{0x00003F7F, 0x0000003F, 0x00000000, 0x00000000}, // B 10:11
|
{0x00003F7F, 0x0000003F, 0x00000000, 0x00000000}, // B 10:11
|
||||||
{0x00000000, 0x00000000, 0x7F7F7F7F, 0x7F7F7F7F}, // C 11:00
|
{0x00000000, 0x00000000, 0x7F7F7F7F, 0x7F7F7F7F}, // C 11:00
|
||||||
{0x00000000, 0x00000000, 0x3F000000, 0x7F3F0000}, // D 11:01
|
{0x00000000, 0x00000000, 0x3F000000, 0x7F3F0000}, // D 11:01
|
||||||
{0x00000000, 0x00000000, 0x0000003F, 0x00003F7F}, // E 11:10
|
{0x00000000, 0x00000000, 0x0000003F, 0x00003F7F}, // E 11:10
|
||||||
{0x00000000, 0x00000000, 0x00000000, 0x00000000} }; // F 11:11
|
{0x00000000, 0x00000000, 0x00000000, 0x00000000} }; // F 11:11
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
uint32_t UpscaleTableExplored[16][4] = {}; /// It will be generated from UpscaleTableVisible
|
||||||
|
const uint32_t (*CurrUpscaleTableExplored)[4] = UpscaleTableVisible;
|
||||||
};
|
};
|
||||||
|
|
||||||
extern CFogOfWar FogOfWar;
|
extern CFogOfWar FogOfWar;
|
||||||
|
@ -200,7 +218,7 @@ inline void CFogOfWar::FillUpscaledRec(uint32_t *texture, const uint16_t texture
|
||||||
const uint8_t patternVisible, const uint8_t patternExplored) const
|
const uint8_t patternVisible, const uint8_t patternExplored) const
|
||||||
{
|
{
|
||||||
for (uint8_t scan_line = 0; scan_line < 4; scan_line++) {
|
for (uint8_t scan_line = 0; scan_line < 4; scan_line++) {
|
||||||
texture[index] = UpscaleTable[patternVisible][scan_line] + UpscaleTable[patternExplored][scan_line];
|
texture[index] = UpscaleTableVisible[patternVisible][scan_line] + CurrUpscaleTableExplored[patternExplored][scan_line];
|
||||||
index += textureWidth;
|
index += textureWidth;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue