From 92cca421f97f25edfba92e2ec760d1c0e3f88531 Mon Sep 17 00:00:00 2001 From: Gleb Mazovetskiy Date: Fri, 15 Sep 2023 19:54:45 +0100 Subject: [PATCH] Automap: Minor cleanups --- Source/automap.cpp | 95 +++++++++++++++++++++++----------------------- 1 file changed, 48 insertions(+), 47 deletions(-) diff --git a/Source/automap.cpp b/Source/automap.cpp index 0b87c717b..30c6a0a94 100644 --- a/Source/automap.cpp +++ b/Source/automap.cpp @@ -132,7 +132,7 @@ struct AutomapTile { Flags flags = {}; - constexpr bool HasFlag(Flags test) const + [[nodiscard]] DVL_ALWAYS_INLINE constexpr bool hasFlag(Flags test) const { return (static_cast(flags) & static_cast(test)) != 0; } @@ -205,7 +205,7 @@ void DrawMapVerticalDoor(const Surface &out, Point center, AutomapTile neTile, u default: app_fatal("Invalid leveltype"); } - if (!(neTile.HasFlag(AutomapTile::Flags::VerticalPassage) && leveltype == DTYPE_CATHEDRAL)) + if (!(neTile.hasFlag(AutomapTile::Flags::VerticalPassage) && leveltype == DTYPE_CATHEDRAL)) DrawMapLineNE(out, center + AmOffset(lWidthOffset, lHeightOffset), AmLine(length), colorDim); DrawDiamond(out, center + AmOffset(dWidthOffset, dHeightOffset), colorBright); } @@ -254,7 +254,7 @@ void DrawMapHorizontalDoor(const Surface &out, Point center, AutomapTile nwTile, default: app_fatal("Invalid leveltype"); } - if (!(nwTile.HasFlag(AutomapTile::Flags::HorizontalPassage) && leveltype == DTYPE_CATHEDRAL)) + if (!(nwTile.hasFlag(AutomapTile::Flags::HorizontalPassage) && leveltype == DTYPE_CATHEDRAL)) DrawMapLineSE(out, center + AmOffset(lWidthOffset, lHeightOffset), AmLine(length), colorDim); DrawDiamond(out, center + AmOffset(dWidthOffset, dHeightOffset), colorBright); } @@ -467,7 +467,7 @@ template void DrawLavaRiver(const Surface &out, Point center, uint8_t color, bool hasBridge) { // First row (y = 0) - if constexpr (IsAnyOf(TDir1, Direction::NorthWest) || IsAnyOf(TDir2, Direction::NorthWest)) { + if constexpr (IsAnyOf(Direction::NorthWest, TDir1, TDir2)) { if (!(hasBridge && IsAnyOf(TDir1, Direction::NorthWest))) { out.SetPixel(center + AmOffset(AmWidthOffset::QuarterTileLeft, AmHeightOffset::QuarterTileUp), color); out.SetPixel(center + AmOffset(AmWidthOffset::HalfTileLeft, AmHeightOffset::None), color); @@ -475,37 +475,37 @@ void DrawLavaRiver(const Surface &out, Point center, uint8_t color, bool hasBrid } // Second row (y = 1) - if constexpr (IsAnyOf(TDir1, Direction::NorthEast) || IsAnyOf(TDir2, Direction::NorthEast)) { - if (!(hasBridge && (IsAnyOf(TDir1, Direction::NorthEast) || IsAnyOf(TDir2, Direction::NorthEast)))) + if constexpr (IsAnyOf(Direction::NorthEast, TDir1, TDir2)) { + if (!(hasBridge && IsAnyOf(Direction::NorthEast, TDir1, TDir2))) out.SetPixel(center + AmOffset(AmWidthOffset::QuarterTileRight, AmHeightOffset::QuarterTileUp), color); } - if constexpr (IsAnyOf(TDir1, Direction::NorthWest, Direction::NorthEast) || IsAnyOf(TDir2, Direction::NorthWest, Direction::NorthEast)) { + if constexpr (IsAnyOf(Direction::NorthWest, Direction::NorthEast, TDir1, TDir2)) { out.SetPixel(center + AmOffset(AmWidthOffset::None, AmHeightOffset::None), color); } - if constexpr (IsAnyOf(TDir1, Direction::SouthWest, Direction::NorthWest) || IsAnyOf(TDir2, Direction::SouthWest, Direction::NorthWest)) { + if constexpr (IsAnyOf(Direction::SouthWest, Direction::NorthWest, TDir1, TDir2)) { out.SetPixel(center + AmOffset(AmWidthOffset::QuarterTileLeft, AmHeightOffset::QuarterTileDown), color); } - if constexpr (IsAnyOf(TDir1, Direction::SouthWest) || IsAnyOf(TDir2, Direction::SouthWest)) { + if constexpr (IsAnyOf(Direction::SouthWest, TDir1, TDir2)) { out.SetPixel(center + AmOffset(AmWidthOffset::HalfTileLeft, AmHeightOffset::HalfTileDown), color); } // Third row (y = 2) - if constexpr (IsAnyOf(TDir1, Direction::NorthEast) || IsAnyOf(TDir2, Direction::NorthEast)) { - if (!(hasBridge && (IsAnyOf(TDir1, Direction::NorthEast) || IsAnyOf(TDir2, Direction::NorthEast)))) + if constexpr (IsAnyOf(Direction::NorthEast, TDir1, TDir2)) { + if (!(hasBridge && IsAnyOf(Direction::NorthEast, TDir1, TDir2))) out.SetPixel(center + AmOffset(AmWidthOffset::HalfTileRight, AmHeightOffset::None), color); } - if constexpr (IsAnyOf(TDir1, Direction::NorthEast, Direction::SouthEast) || IsAnyOf(TDir2, Direction::NorthEast, Direction::SouthEast)) { + if constexpr (IsAnyOf(Direction::NorthEast, Direction::SouthEast, TDir1, TDir2)) { out.SetPixel(center + AmOffset(AmWidthOffset::QuarterTileRight, AmHeightOffset::QuarterTileDown), color); } - if constexpr (IsAnyOf(TDir1, Direction::SouthWest, Direction::SouthEast) || IsAnyOf(TDir2, Direction::SouthWest, Direction::SouthEast)) { + if constexpr (IsAnyOf(Direction::SouthWest, Direction::SouthEast, TDir1, TDir2)) { out.SetPixel(center + AmOffset(AmWidthOffset::None, AmHeightOffset::HalfTileDown), color); } - if constexpr (IsAnyOf(TDir1, Direction::SouthWest) || IsAnyOf(TDir2, Direction::SouthWest)) { + if constexpr (IsAnyOf(Direction::SouthWest, TDir1, TDir2)) { out.SetPixel(center + AmOffset(AmWidthOffset::QuarterTileLeft, AmHeightOffset::ThreeQuartersTileDown), color); } // Fourth row (y = 3) - if constexpr (IsAnyOf(TDir1, Direction::SouthEast) || IsAnyOf(TDir2, Direction::SouthEast)) { + if constexpr (IsAnyOf(Direction::SouthEast, TDir1, TDir2)) { out.SetPixel(center + AmOffset(AmWidthOffset::HalfTileRight, AmHeightOffset::HalfTileDown), color); out.SetPixel(center + AmOffset(AmWidthOffset::QuarterTileRight, AmHeightOffset::ThreeQuartersTileDown), color); } @@ -517,7 +517,7 @@ void DrawLava(const Surface &out, Point center, uint8_t color) if constexpr (IsAnyOf(TDir, Direction::NorthWest, Direction::North, Direction::NorthEast, Direction::NoDirection)) { out.SetPixel(center + AmOffset(AmWidthOffset::None, AmHeightOffset::HalfTileUp), color); // north corner } - if constexpr (IsAnyOf(TDir, Direction::SouthWest, Direction::West, Direction::NorthWest, Direction::North, Direction::NorthEast, Direction::NoDirection)) { + if constexpr (IsNoneOf(TDir, Direction::South, Direction::SouthEast, Direction::East)) { out.SetPixel(center + AmOffset(AmWidthOffset::QuarterTileLeft, AmHeightOffset::QuarterTileUp), color); // northwest edge out.SetPixel(center + AmOffset(AmWidthOffset::HalfTileLeft, AmHeightOffset::None), color); // northwest edge } @@ -538,20 +538,20 @@ void DrawLava(const Surface &out, Point center, uint8_t color) if constexpr (IsAnyOf(TDir, Direction::NorthEast, Direction::East, Direction::SouthEast, Direction::NoDirection)) { out.SetPixel(center + AmOffset(AmWidthOffset::ThreeQuartersTileRight, AmHeightOffset::QuarterTileDown), color); // east corner } - if constexpr (IsAnyOf(TDir, Direction::NorthWest, Direction::North, Direction::NorthEast, Direction::East, Direction::SouthEast, Direction::NoDirection)) { + if constexpr (IsNoneOf(TDir, Direction::South, Direction::SouthWest, Direction::West)) { out.SetPixel(center + AmOffset(AmWidthOffset::QuarterTileRight, AmHeightOffset::QuarterTileUp), color); // northeast edge out.SetPixel(center + AmOffset(AmWidthOffset::HalfTileRight, AmHeightOffset::None), color); // northeast edge } - if constexpr (IsNoneOf(TDir, Direction::South)) { + if constexpr (TDir != Direction::South) { out.SetPixel(center + AmOffset(AmWidthOffset::None, AmHeightOffset::None), color); // north center } - if constexpr (IsNoneOf(TDir, Direction::East)) { + if constexpr (TDir != Direction::East) { out.SetPixel(center + AmOffset(AmWidthOffset::QuarterTileLeft, AmHeightOffset::QuarterTileDown), color); // west center } - if constexpr (IsNoneOf(TDir, Direction::West)) { + if constexpr (TDir != Direction::West) { out.SetPixel(center + AmOffset(AmWidthOffset::QuarterTileRight, AmHeightOffset::QuarterTileDown), color); // east center } - if constexpr (IsNoneOf(TDir, Direction::North)) { + if constexpr (TDir != Direction::North) { out.SetPixel(center + AmOffset(AmWidthOffset::None, AmHeightOffset::HalfTileDown), color); // south center } } @@ -584,7 +584,7 @@ void DrawStairs(const Surface &out, Point center, uint8_t color) */ void FixHorizontalDoor(const Surface &out, Point center, AutomapTile nwTile, uint8_t colorBright) { - if (leveltype != DTYPE_CATACOMBS && nwTile.HasFlag(AutomapTile::Flags::HorizontalDoor)) { + if (leveltype != DTYPE_CATACOMBS && nwTile.hasFlag(AutomapTile::Flags::HorizontalDoor)) { DrawMapLineNE(out, center + AmOffset(AmWidthOffset::HalfTileLeft, AmHeightOffset::HalfTileUp), AmLine(AmLineLength::FullTile), colorBright); } } @@ -594,7 +594,7 @@ void FixHorizontalDoor(const Surface &out, Point center, AutomapTile nwTile, uin */ void FixVerticalDoor(const Surface &out, Point center, AutomapTile neTile, uint8_t colorBright) { - if (leveltype != DTYPE_CATACOMBS && neTile.HasFlag(AutomapTile::Flags::VerticalDoor)) { + if (leveltype != DTYPE_CATACOMBS && neTile.hasFlag(AutomapTile::Flags::VerticalDoor)) { DrawMapLineSE(out, center + AmOffset(AmWidthOffset::None, AmHeightOffset::FullTileUp), AmLine(AmLineLength::FullTile), colorBright); } } @@ -646,7 +646,7 @@ void DrawHorizontal(const Surface &out, Point center, AutomapTile tile, AutomapT return; } // Draw door - if (tile.HasFlag(AutomapTile::Flags::HorizontalDoor)) { + if (tile.hasFlag(AutomapTile::Flags::HorizontalDoor)) { DrawMapHorizontalDoor(out, center, nwTile, colorBright, colorDim); } } @@ -683,7 +683,7 @@ void DrawVertical(const Surface &out, Point center, AutomapTile tile, AutomapTil return; } // Draw door - if (tile.HasFlag(AutomapTile::Flags::VerticalDoor)) { + if (tile.hasFlag(AutomapTile::Flags::VerticalDoor)) { DrawMapVerticalDoor(out, center, neTile, colorBright, colorDim); } } @@ -709,7 +709,7 @@ void DrawCaveWallConnections(const Surface &out, Point center, AutomapTile sTile } void DrawCaveHorizontalDirt(const Surface &out, Point center, AutomapTile tile, AutomapTile swTile, uint8_t colorDim) { - if (swTile.HasFlag(AutomapTile::Flags::Dirt) || (leveltype != DTYPE_TOWN && IsNoneOf(tile.type, AutomapTile::Types::CaveHorizontalWood, AutomapTile::Types::CaveHorizontalWoodCross, AutomapTile::Types::CaveWoodCross, AutomapTile::Types::CaveLeftWoodCross))) { + if (swTile.hasFlag(AutomapTile::Flags::Dirt) || (leveltype != DTYPE_TOWN && IsNoneOf(tile.type, AutomapTile::Types::CaveHorizontalWood, AutomapTile::Types::CaveHorizontalWoodCross, AutomapTile::Types::CaveWoodCross, AutomapTile::Types::CaveLeftWoodCross))) { out.SetPixel(center + AmOffset(AmWidthOffset::ThreeQuartersTileLeft, AmHeightOffset::QuarterTileDown), colorDim); out.SetPixel(center + AmOffset(AmWidthOffset::HalfTileLeft, AmHeightOffset::HalfTileDown), colorDim); out.SetPixel(center + AmOffset(AmWidthOffset::QuarterTileLeft, AmHeightOffset::ThreeQuartersTileDown), colorDim); @@ -722,7 +722,7 @@ void DrawCaveHorizontalDirt(const Surface &out, Point center, AutomapTile tile, */ void DrawCaveHorizontal(const Surface &out, Point center, AutomapTile tile, AutomapTile nwTile, AutomapTile swTile, uint8_t colorBright, uint8_t colorDim) { - if (tile.HasFlag(AutomapTile::Flags::VerticalDoor)) { + if (tile.hasFlag(AutomapTile::Flags::VerticalDoor)) { DrawMapHorizontalDoor(out, center, nwTile, colorBright, colorDim); } else { AmWidthOffset w; @@ -745,7 +745,7 @@ void DrawCaveHorizontal(const Surface &out, Point center, AutomapTile tile, Auto void DrawCaveVerticalDirt(const Surface &out, Point center, AutomapTile tile, AutomapTile seTile, uint8_t colorDim) { - if (seTile.HasFlag(AutomapTile::Flags::Dirt) || (leveltype != DTYPE_TOWN && IsNoneOf(tile.type, AutomapTile::Types::CaveVerticalWood, AutomapTile::Types::CaveVerticalWoodCross, AutomapTile::Types::CaveWoodCross, AutomapTile::Types::CaveRightWoodCross))) { + if (seTile.hasFlag(AutomapTile::Flags::Dirt) || (leveltype != DTYPE_TOWN && IsNoneOf(tile.type, AutomapTile::Types::CaveVerticalWood, AutomapTile::Types::CaveVerticalWoodCross, AutomapTile::Types::CaveWoodCross, AutomapTile::Types::CaveRightWoodCross))) { out.SetPixel(center + AmOffset(AmWidthOffset::None, AmHeightOffset::FullTileDown), colorDim); out.SetPixel(center + AmOffset(AmWidthOffset::QuarterTileRight, AmHeightOffset::ThreeQuartersTileDown), colorDim); out.SetPixel(center + AmOffset(AmWidthOffset::HalfTileRight, AmHeightOffset::HalfTileDown), colorDim); @@ -758,7 +758,7 @@ void DrawCaveVerticalDirt(const Surface &out, Point center, AutomapTile tile, Au */ void DrawCaveVertical(const Surface &out, Point center, AutomapTile tile, AutomapTile neTile, AutomapTile seTile, uint8_t colorBright, uint8_t colorDim) { - if (tile.HasFlag(AutomapTile::Flags::HorizontalDoor)) { + if (tile.hasFlag(AutomapTile::Flags::HorizontalDoor)) { DrawMapVerticalDoor(out, center, neTile, colorBright, colorDim); } else { AmLineLength l; @@ -794,7 +794,7 @@ bool HasAutomapFlag(Point position, AutomapTile::Flags type) return false; } - return AutomapTypeTiles[dungeon[position.x][position.y]].HasFlag(type); + return AutomapTypeTiles[dungeon[position.x][position.y]].hasFlag(type); } /** @@ -888,18 +888,18 @@ void DrawAutomapTile(const Surface &out, Point center, Point map) } // These tilesets have doors where the connection lines would be drawn - if (IsAnyOf(leveltype, DTYPE_CATACOMBS, DTYPE_CAVES) && (tile.HasFlag(AutomapTile::Flags::HorizontalDoor) || tile.HasFlag(AutomapTile::Flags::VerticalDoor))) + if (IsAnyOf(leveltype, DTYPE_CATACOMBS, DTYPE_CAVES) && (tile.hasFlag(AutomapTile::Flags::HorizontalDoor) || tile.hasFlag(AutomapTile::Flags::VerticalDoor))) noConnect = true; - AutomapTile swTile = GetAutomapTypeView(map + Direction::SouthWest); - AutomapTile sTile = GetAutomapTypeView(map + Direction::South); - AutomapTile seTile = GetAutomapTypeView(map + Direction::SouthEast); - AutomapTile nTile = GetAutomapTypeView(map + Direction::North); - AutomapTile wTile = GetAutomapTypeView(map + Direction::West); - AutomapTile eTile = GetAutomapTypeView(map + Direction::East); + const AutomapTile swTile = GetAutomapTypeView(map + Direction::SouthWest); + const AutomapTile sTile = GetAutomapTypeView(map + Direction::South); + const AutomapTile seTile = GetAutomapTypeView(map + Direction::SouthEast); + const AutomapTile nTile = GetAutomapTypeView(map + Direction::North); + const AutomapTile wTile = GetAutomapTypeView(map + Direction::West); + const AutomapTile eTile = GetAutomapTypeView(map + Direction::East); - if ((leveltype == DTYPE_TOWN && tile.HasFlag(AutomapTile::Flags::Dirt)) - || (tile.HasFlag(AutomapTile::Flags::Dirt) + if ((leveltype == DTYPE_TOWN && tile.hasFlag(AutomapTile::Flags::Dirt)) + || (tile.hasFlag(AutomapTile::Flags::Dirt) && (tile.type != AutomapTile::Types::None || swTile.type != AutomapTile::Types::None || sTile.type != AutomapTile::Types::None @@ -912,7 +912,7 @@ void DrawAutomapTile(const Surface &out, Point center, Point map) DrawDirt(out, center, nwTile, neTile, colorDim); } - if (tile.HasFlag(AutomapTile::Flags::Stairs)) { + if (tile.hasFlag(AutomapTile::Flags::Stairs)) { DrawStairs(out, center, colorBright); } @@ -973,6 +973,7 @@ void DrawAutomapTile(const Surface &out, Point center, Point map) case AutomapTile::Types::CaveCross: // Add the missing dirt pixel out.SetPixel(center + AmOffset(AmWidthOffset::None, AmHeightOffset::FullTileDown), colorDim); + [[fallthough]]; case AutomapTile::Types::CaveWoodCross: case AutomapTile::Types::CaveRightWoodCross: case AutomapTile::Types::CaveLeftWoodCross: @@ -1622,13 +1623,13 @@ void SetAutomapView(Point position, MapExplorationType explorer) UpdateAutomapExplorer(map, explorer); AutomapTile tile = GetAutomapType(map); - bool solid = tile.HasFlag(AutomapTile::Flags::Dirt); + bool solid = tile.hasFlag(AutomapTile::Flags::Dirt); switch (tile.type) { case AutomapTile::Types::Vertical: if (solid) { auto tileSW = GetAutomapType({ map.x, map.y + 1 }); - if (tileSW.type == AutomapTile::Types::Corner && tileSW.HasFlag(AutomapTile::Flags::Dirt)) + if (tileSW.type == AutomapTile::Types::Corner && tileSW.hasFlag(AutomapTile::Flags::Dirt)) UpdateAutomapExplorer({ map.x, map.y + 1 }, explorer); } else if (HasAutomapFlag({ map.x - 1, map.y }, AutomapTile::Flags::Dirt)) { UpdateAutomapExplorer({ map.x - 1, map.y }, explorer); @@ -1637,7 +1638,7 @@ void SetAutomapView(Point position, MapExplorationType explorer) case AutomapTile::Types::Horizontal: if (solid) { auto tileSE = GetAutomapType({ map.x + 1, map.y }); - if (tileSE.type == AutomapTile::Types::Corner && tileSE.HasFlag(AutomapTile::Flags::Dirt)) + if (tileSE.type == AutomapTile::Types::Corner && tileSE.hasFlag(AutomapTile::Flags::Dirt)) UpdateAutomapExplorer({ map.x + 1, map.y }, explorer); } else if (HasAutomapFlag({ map.x, map.y - 1 }, AutomapTile::Flags::Dirt)) { UpdateAutomapExplorer({ map.x, map.y - 1 }, explorer); @@ -1646,10 +1647,10 @@ void SetAutomapView(Point position, MapExplorationType explorer) case AutomapTile::Types::Cross: if (solid) { auto tileSW = GetAutomapType({ map.x, map.y + 1 }); - if (tileSW.type == AutomapTile::Types::Corner && tileSW.HasFlag(AutomapTile::Flags::Dirt)) + if (tileSW.type == AutomapTile::Types::Corner && tileSW.hasFlag(AutomapTile::Flags::Dirt)) UpdateAutomapExplorer({ map.x, map.y + 1 }, explorer); auto tileSE = GetAutomapType({ map.x + 1, map.y }); - if (tileSE.type == AutomapTile::Types::Corner && tileSE.HasFlag(AutomapTile::Flags::Dirt)) + if (tileSE.type == AutomapTile::Types::Corner && tileSE.hasFlag(AutomapTile::Flags::Dirt)) UpdateAutomapExplorer({ map.x + 1, map.y }, explorer); } else { if (HasAutomapFlag({ map.x - 1, map.y }, AutomapTile::Flags::Dirt)) @@ -1665,7 +1666,7 @@ void SetAutomapView(Point position, MapExplorationType explorer) if (HasAutomapFlag({ map.x, map.y - 1 }, AutomapTile::Flags::Dirt)) UpdateAutomapExplorer({ map.x, map.y - 1 }, explorer); auto tileSW = GetAutomapType({ map.x, map.y + 1 }); - if (tileSW.type == AutomapTile::Types::Corner && tileSW.HasFlag(AutomapTile::Flags::Dirt)) + if (tileSW.type == AutomapTile::Types::Corner && tileSW.hasFlag(AutomapTile::Flags::Dirt)) UpdateAutomapExplorer({ map.x, map.y + 1 }, explorer); } else if (HasAutomapFlag({ map.x - 1, map.y }, AutomapTile::Flags::Dirt)) { UpdateAutomapExplorer({ map.x - 1, map.y }, explorer); @@ -1676,7 +1677,7 @@ void SetAutomapView(Point position, MapExplorationType explorer) if (HasAutomapFlag({ map.x - 1, map.y }, AutomapTile::Flags::Dirt)) UpdateAutomapExplorer({ map.x - 1, map.y }, explorer); auto tileSE = GetAutomapType({ map.x + 1, map.y }); - if (tileSE.type == AutomapTile::Types::Corner && tileSE.HasFlag(AutomapTile::Flags::Dirt)) + if (tileSE.type == AutomapTile::Types::Corner && tileSE.hasFlag(AutomapTile::Flags::Dirt)) UpdateAutomapExplorer({ map.x + 1, map.y }, explorer); } else if (HasAutomapFlag({ map.x, map.y - 1 }, AutomapTile::Flags::Dirt)) { UpdateAutomapExplorer({ map.x, map.y - 1 }, explorer);