From b33715a4163f02c41909b5870fce74fa10574c81 Mon Sep 17 00:00:00 2001 From: Aaron Date: Sat, 16 Nov 2024 12:33:14 -0800 Subject: [PATCH] Moved CardinalDirection to World folder. --- OpenTESArena/CMakeLists.txt | 6 +- OpenTESArena/src/Entities/CitizenUtils.cpp | 4 +- .../src/Entities/EntityChunkManager.cpp | 2 +- .../src/Entities/EntityGeneration.cpp | 1 - OpenTESArena/src/Entities/Player.cpp | 2 +- .../src/GameLogic/PlayerLogicController.cpp | 4 +- OpenTESArena/src/Interface/AutomapPanel.cpp | 2 - OpenTESArena/src/Interface/AutomapUiView.cpp | 2 +- OpenTESArena/src/Interface/AutomapUiView.h | 2 +- .../CharacterCreationUiController.cpp | 2 +- OpenTESArena/src/Rendering/RendererUtils.cpp | 1 - OpenTESArena/src/Voxels/VoxelChunkManager.cpp | 2 - .../src/{Game => World}/CardinalDirection.cpp | 170 +++++++++--------- .../src/{Game => World}/CardinalDirection.h | 50 +++--- .../{Game => World}/CardinalDirectionName.h | 36 ++-- 15 files changed, 140 insertions(+), 146 deletions(-) rename OpenTESArena/src/{Game => World}/CardinalDirection.cpp (97%) mode change 100755 => 100644 rename OpenTESArena/src/{Game => World}/CardinalDirection.h (92%) mode change 100755 => 100644 rename OpenTESArena/src/{Game => World}/CardinalDirectionName.h (95%) mode change 100755 => 100644 diff --git a/OpenTESArena/CMakeLists.txt b/OpenTESArena/CMakeLists.txt index d7e59a110..e624f8987 100644 --- a/OpenTESArena/CMakeLists.txt +++ b/OpenTESArena/CMakeLists.txt @@ -184,9 +184,6 @@ SET(TES_GAME "${SRC_ROOT}/Game/ArenaClockUtils.h" "${SRC_ROOT}/Game/ArenaDateUtils.cpp" "${SRC_ROOT}/Game/ArenaDateUtils.h" - "${SRC_ROOT}/Game/CardinalDirection.cpp" - "${SRC_ROOT}/Game/CardinalDirection.h" - "${SRC_ROOT}/Game/CardinalDirectionName.h" "${SRC_ROOT}/Game/CharacterClassGeneration.cpp" "${SRC_ROOT}/Game/CharacterClassGeneration.h" "${SRC_ROOT}/Game/CharacterCreationState.cpp" @@ -613,6 +610,9 @@ SET(TES_WORLD "${SRC_ROOT}/World/ArenaMeshUtils.h" "${SRC_ROOT}/World/ArenaWildUtils.cpp" "${SRC_ROOT}/World/ArenaWildUtils.h" + "${SRC_ROOT}/World/CardinalDirection.cpp" + "${SRC_ROOT}/World/CardinalDirection.h" + "${SRC_ROOT}/World/CardinalDirectionName.h" "${SRC_ROOT}/World/Chunk.cpp" "${SRC_ROOT}/World/Chunk.h" "${SRC_ROOT}/World/ChunkManager.cpp" diff --git a/OpenTESArena/src/Entities/CitizenUtils.cpp b/OpenTESArena/src/Entities/CitizenUtils.cpp index 5ec61007a..da3c55640 100644 --- a/OpenTESArena/src/Entities/CitizenUtils.cpp +++ b/OpenTESArena/src/Entities/CitizenUtils.cpp @@ -7,11 +7,11 @@ #include "../Assets/ArenaPaletteName.h" #include "../Assets/BinaryAssetLibrary.h" #include "../Assets/TextureManager.h" -#include "../Game/CardinalDirection.h" -#include "../Game/CardinalDirectionName.h" #include "../Math/Random.h" #include "../Rendering/Renderer.h" #include "../Voxels/VoxelChunk.h" +#include "../World/CardinalDirection.h" +#include "../World/CardinalDirectionName.h" #include "../World/MapType.h" #include "../WorldMap/ProvinceDefinition.h" diff --git a/OpenTESArena/src/Entities/EntityChunkManager.cpp b/OpenTESArena/src/Entities/EntityChunkManager.cpp index a13ed8873..91178e42c 100644 --- a/OpenTESArena/src/Entities/EntityChunkManager.cpp +++ b/OpenTESArena/src/Entities/EntityChunkManager.cpp @@ -12,13 +12,13 @@ #include "../Assets/TextureManager.h" #include "../Audio/AudioManager.h" #include "../Collision/PhysicsLayer.h" -#include "../Game/CardinalDirection.h" #include "../Math/Constants.h" #include "../Math/RandomUtils.h" #include "../Math/Random.h" #include "../Rendering/Renderer.h" #include "../Voxels/VoxelChunk.h" #include "../Voxels/VoxelChunkManager.h" +#include "../World/CardinalDirection.h" #include "../World/ChunkUtils.h" #include "../World/LevelDefinition.h" #include "../World/LevelInfoDefinition.h" diff --git a/OpenTESArena/src/Entities/EntityGeneration.cpp b/OpenTESArena/src/Entities/EntityGeneration.cpp index b4cc885a4..c3531e82e 100644 --- a/OpenTESArena/src/Entities/EntityGeneration.cpp +++ b/OpenTESArena/src/Entities/EntityGeneration.cpp @@ -1,5 +1,4 @@ #include "EntityGeneration.h" -#include "../Game/CardinalDirection.h" void EntityGeneration::EntityGenInfo::init(bool nightLightsAreActive) { diff --git a/OpenTESArena/src/Entities/Player.cpp b/OpenTESArena/src/Entities/Player.cpp index dbe36c308..3f193faa3 100644 --- a/OpenTESArena/src/Entities/Player.cpp +++ b/OpenTESArena/src/Entities/Player.cpp @@ -15,7 +15,6 @@ #include "../Collision/CollisionChunkManager.h" #include "../Collision/Physics.h" #include "../Collision/PhysicsLayer.h" -#include "../Game/CardinalDirection.h" #include "../Game/Game.h" #include "../Game/GameState.h" #include "../Game/Options.h" @@ -24,6 +23,7 @@ #include "../Math/Quaternion.h" #include "../Math/Random.h" #include "../Voxels/VoxelChunkManager.h" +#include "../World/CardinalDirection.h" #include "components/debug/Debug.h" #include "components/utilities/Buffer.h" diff --git a/OpenTESArena/src/GameLogic/PlayerLogicController.cpp b/OpenTESArena/src/GameLogic/PlayerLogicController.cpp index b7fae1ae0..878637e6e 100644 --- a/OpenTESArena/src/GameLogic/PlayerLogicController.cpp +++ b/OpenTESArena/src/GameLogic/PlayerLogicController.cpp @@ -8,13 +8,13 @@ #include "../Collision/SelectionUtils.h" #include "../Entities/CharacterClassLibrary.h" #include "../Entities/EntityDefinitionLibrary.h" -#include "../Game/CardinalDirection.h" -#include "../Game/CardinalDirectionName.h" #include "../Game/Game.h" #include "../Interface/GameWorldUiModel.h" #include "../Interface/GameWorldUiView.h" #include "../UI/TextBox.h" #include "../Voxels/ArenaVoxelUtils.h" +#include "../World/CardinalDirection.h" +#include "../World/CardinalDirectionName.h" #include "components/utilities/String.h" diff --git a/OpenTESArena/src/Interface/AutomapPanel.cpp b/OpenTESArena/src/Interface/AutomapPanel.cpp index bb6c35fcd..b77c9e6a6 100644 --- a/OpenTESArena/src/Interface/AutomapPanel.cpp +++ b/OpenTESArena/src/Interface/AutomapPanel.cpp @@ -10,8 +10,6 @@ #include "../Assets/ArenaTextureName.h" #include "../Assets/ArenaTypes.h" #include "../Assets/TextureManager.h" -#include "../Game/CardinalDirection.h" -#include "../Game/CardinalDirectionName.h" #include "../Game/Game.h" #include "../Game/Options.h" #include "../Input/InputActionMapName.h" diff --git a/OpenTESArena/src/Interface/AutomapUiView.cpp b/OpenTESArena/src/Interface/AutomapUiView.cpp index ef5303ddf..79600abef 100644 --- a/OpenTESArena/src/Interface/AutomapUiView.cpp +++ b/OpenTESArena/src/Interface/AutomapUiView.cpp @@ -2,7 +2,6 @@ #include "../Assets/ArenaTextureName.h" #include "../Assets/ArenaTypes.h" #include "../Assets/TextureManager.h" -#include "../Game/CardinalDirection.h" #include "../Game/GameState.h" #include "../Rendering/Renderer.h" #include "../UI/FontLibrary.h" @@ -11,6 +10,7 @@ #include "../Voxels/VoxelChunkManager.h" #include "../Voxels/VoxelFacing2D.h" #include "../Voxels/VoxelTraitsDefinition.h" +#include "../World/CardinalDirection.h" #include "../World/ChunkManager.h" #include "../World/ChunkUtils.h" #include "../World/MapType.h" diff --git a/OpenTESArena/src/Interface/AutomapUiView.h b/OpenTESArena/src/Interface/AutomapUiView.h index fc276d353..a34872680 100644 --- a/OpenTESArena/src/Interface/AutomapUiView.h +++ b/OpenTESArena/src/Interface/AutomapUiView.h @@ -5,7 +5,6 @@ #include #include "../Assets/TextureAsset.h" -#include "../Game/CardinalDirectionName.h" #include "../Math/Rect.h" #include "../Math/Vector2.h" #include "../Rendering/ArenaRenderUtils.h" @@ -15,6 +14,7 @@ #include "../UI/TextBox.h" #include "../UI/TextRenderUtils.h" #include "../Utilities/Color.h" +#include "../World/CardinalDirectionName.h" #include "../World/Coord.h" #include "components/utilities/Buffer2D.h" diff --git a/OpenTESArena/src/Interface/CharacterCreationUiController.cpp b/OpenTESArena/src/Interface/CharacterCreationUiController.cpp index bd1a8b772..c3d9b5272 100644 --- a/OpenTESArena/src/Interface/CharacterCreationUiController.cpp +++ b/OpenTESArena/src/Interface/CharacterCreationUiController.cpp @@ -23,7 +23,6 @@ #include "../Entities/CharacterClassLibrary.h" #include "../Entities/EntityDefinitionLibrary.h" #include "../Game/ArenaClockUtils.h" -#include "../Game/CardinalDirection.h" #include "../Game/Game.h" #include "../Input/InputActionMapName.h" #include "../Input/InputActionName.h" @@ -32,6 +31,7 @@ #include "../UI/Surface.h" #include "../UI/TextBox.h" #include "../UI/TextEntry.h" +#include "../World/CardinalDirection.h" #include "../WorldMap/ArenaLocationUtils.h" #include "components/utilities/String.h" diff --git a/OpenTESArena/src/Rendering/RendererUtils.cpp b/OpenTESArena/src/Rendering/RendererUtils.cpp index 31837a203..5b21fe074 100644 --- a/OpenTESArena/src/Rendering/RendererUtils.cpp +++ b/OpenTESArena/src/Rendering/RendererUtils.cpp @@ -5,7 +5,6 @@ #include "ArenaRenderUtils.h" #include "RenderCamera.h" #include "RendererUtils.h" -#include "../Game/CardinalDirection.h" #include "../Math/BoundingBox.h" #include "../Math/Constants.h" #include "../Utilities/Platform.h" diff --git a/OpenTESArena/src/Voxels/VoxelChunkManager.cpp b/OpenTESArena/src/Voxels/VoxelChunkManager.cpp index cf2c57623..b14fb29c6 100644 --- a/OpenTESArena/src/Voxels/VoxelChunkManager.cpp +++ b/OpenTESArena/src/Voxels/VoxelChunkManager.cpp @@ -3,8 +3,6 @@ #include "VoxelChunkManager.h" #include "../Assets/ArenaTypes.h" -#include "../Game/CardinalDirection.h" -#include "../Game/CardinalDirectionName.h" #include "../Game/Game.h" #include "../World/ChunkUtils.h" #include "../World/MapType.h" diff --git a/OpenTESArena/src/Game/CardinalDirection.cpp b/OpenTESArena/src/World/CardinalDirection.cpp old mode 100755 new mode 100644 similarity index 97% rename from OpenTESArena/src/Game/CardinalDirection.cpp rename to OpenTESArena/src/World/CardinalDirection.cpp index 040873144..adab1c479 --- a/OpenTESArena/src/Game/CardinalDirection.cpp +++ b/OpenTESArena/src/World/CardinalDirection.cpp @@ -1,85 +1,85 @@ -#include - -#include "CardinalDirection.h" -#include "CardinalDirectionName.h" - -#include "components/debug/Debug.h" - -// Wikipedia says the intermediate directions don't have a space, so that's the -// convention I'll use here. -const std::unordered_map CardinalDirectionDisplayNames = -{ - { CardinalDirectionName::North, "North" }, - { CardinalDirectionName::NorthEast, "Northeast" }, - { CardinalDirectionName::East, "East" }, - { CardinalDirectionName::SouthEast, "Southeast" }, - { CardinalDirectionName::South, "South" }, - { CardinalDirectionName::SouthWest, "Southwest" }, - { CardinalDirectionName::West, "West" }, - { CardinalDirectionName::NorthWest, "Northwest" } -}; - -CardinalDirectionName CardinalDirection::getDirectionName(const WorldDouble2 &direction) -{ - const WorldDouble2 northEast = CardinalDirection::North.slerp(CardinalDirection::East, 0.5); - const WorldDouble2 southEast = CardinalDirection::South.slerp(CardinalDirection::East, 0.5); - const WorldDouble2 southWest = CardinalDirection::South.slerp(CardinalDirection::West, 0.5); - const WorldDouble2 northWest = CardinalDirection::North.slerp(CardinalDirection::West, 0.5); - - // Each direction gets an equal slice of the circle's area. - // (I'm not sure why the deviation is 1/12th; at a glance it should be 1/8th). - const double deviation = 1.0 / 12.0; - auto isCloseEnoughTo = [deviation, &direction](const Double2 &cardinalDirection) - { - return direction.dot(cardinalDirection) >= (1.0 - deviation); - }; - - // Find the cardinal direction closest to the given direction. Start with - // a default name and figure out the true one from there. - auto name = CardinalDirectionName::North; - if (isCloseEnoughTo(CardinalDirection::North)) - { - name = CardinalDirectionName::North; - } - else if (isCloseEnoughTo(northEast)) - { - name = CardinalDirectionName::NorthEast; - } - else if (isCloseEnoughTo(CardinalDirection::East)) - { - name = CardinalDirectionName::East; - } - else if (isCloseEnoughTo(southEast)) - { - name = CardinalDirectionName::SouthEast; - } - else if (isCloseEnoughTo(CardinalDirection::South)) - { - name = CardinalDirectionName::South; - } - else if (isCloseEnoughTo(southWest)) - { - name = CardinalDirectionName::SouthWest; - } - else if (isCloseEnoughTo(CardinalDirection::West)) - { - name = CardinalDirectionName::West; - } - else if (isCloseEnoughTo(northWest)) - { - name = CardinalDirectionName::NorthWest; - } - else - { - DebugCrash("Invalid CardinalDirection (" + std::to_string(direction.x) + ", " + - std::to_string(direction.y) + ")."); - } - - return name; -} - -const std::string &CardinalDirection::toString(CardinalDirectionName directionName) -{ - const std::string &displayName = CardinalDirectionDisplayNames.at(directionName); - return displayName; -} +#include + +#include "CardinalDirection.h" +#include "CardinalDirectionName.h" + +#include "components/debug/Debug.h" + +// Wikipedia says the intermediate directions don't have a space, so that's the +// convention I'll use here. +const std::unordered_map CardinalDirectionDisplayNames = +{ + { CardinalDirectionName::North, "North" }, + { CardinalDirectionName::NorthEast, "Northeast" }, + { CardinalDirectionName::East, "East" }, + { CardinalDirectionName::SouthEast, "Southeast" }, + { CardinalDirectionName::South, "South" }, + { CardinalDirectionName::SouthWest, "Southwest" }, + { CardinalDirectionName::West, "West" }, + { CardinalDirectionName::NorthWest, "Northwest" } +}; + +CardinalDirectionName CardinalDirection::getDirectionName(const WorldDouble2 &direction) +{ + const WorldDouble2 northEast = CardinalDirection::North.slerp(CardinalDirection::East, 0.5); + const WorldDouble2 southEast = CardinalDirection::South.slerp(CardinalDirection::East, 0.5); + const WorldDouble2 southWest = CardinalDirection::South.slerp(CardinalDirection::West, 0.5); + const WorldDouble2 northWest = CardinalDirection::North.slerp(CardinalDirection::West, 0.5); + + // Each direction gets an equal slice of the circle's area. + // (I'm not sure why the deviation is 1/12th; at a glance it should be 1/8th). + const double deviation = 1.0 / 12.0; + auto isCloseEnoughTo = [deviation, &direction](const Double2 &cardinalDirection) + { + return direction.dot(cardinalDirection) >= (1.0 - deviation); + }; + + // Find the cardinal direction closest to the given direction. Start with + // a default name and figure out the true one from there. + auto name = CardinalDirectionName::North; + if (isCloseEnoughTo(CardinalDirection::North)) + { + name = CardinalDirectionName::North; + } + else if (isCloseEnoughTo(northEast)) + { + name = CardinalDirectionName::NorthEast; + } + else if (isCloseEnoughTo(CardinalDirection::East)) + { + name = CardinalDirectionName::East; + } + else if (isCloseEnoughTo(southEast)) + { + name = CardinalDirectionName::SouthEast; + } + else if (isCloseEnoughTo(CardinalDirection::South)) + { + name = CardinalDirectionName::South; + } + else if (isCloseEnoughTo(southWest)) + { + name = CardinalDirectionName::SouthWest; + } + else if (isCloseEnoughTo(CardinalDirection::West)) + { + name = CardinalDirectionName::West; + } + else if (isCloseEnoughTo(northWest)) + { + name = CardinalDirectionName::NorthWest; + } + else + { + DebugCrash("Invalid CardinalDirection (" + std::to_string(direction.x) + ", " + + std::to_string(direction.y) + ")."); + } + + return name; +} + +const std::string &CardinalDirection::toString(CardinalDirectionName directionName) +{ + const std::string &displayName = CardinalDirectionDisplayNames.at(directionName); + return displayName; +} diff --git a/OpenTESArena/src/Game/CardinalDirection.h b/OpenTESArena/src/World/CardinalDirection.h old mode 100755 new mode 100644 similarity index 92% rename from OpenTESArena/src/Game/CardinalDirection.h rename to OpenTESArena/src/World/CardinalDirection.h index f1a9758d9..b15d963e0 --- a/OpenTESArena/src/Game/CardinalDirection.h +++ b/OpenTESArena/src/World/CardinalDirection.h @@ -1,25 +1,25 @@ -#ifndef CARDINAL_DIRECTION_H -#define CARDINAL_DIRECTION_H - -#include - -#include "../Math/Vector2.h" -#include "../World/Coord.h" - -enum class CardinalDirectionName; - -// North, northeast, southwest, etc.. -namespace CardinalDirection -{ - // Cardinal directions in the XZ plane (bird's eye view). - // CANNOT INITIALIZE FROM VOXELUTILS due to global initialization order uncertainty. - const WorldDouble2 North(-1.0, 0.0); - const WorldDouble2 South(1.0, 0.0); - const WorldDouble2 East(0.0, -1.0); - const WorldDouble2 West(0.0, 1.0); - - CardinalDirectionName getDirectionName(const WorldDouble2 &direction); - const std::string &toString(CardinalDirectionName directionName); -} - -#endif +#ifndef CARDINAL_DIRECTION_H +#define CARDINAL_DIRECTION_H + +#include + +#include "Coord.h" +#include "../Math/Vector2.h" + +enum class CardinalDirectionName; + +// North, northeast, southwest, etc.. +namespace CardinalDirection +{ + // Cardinal directions in the XZ plane (bird's eye view). + // CANNOT INITIALIZE FROM VOXELUTILS due to global initialization order uncertainty. + const WorldDouble2 North(-1.0, 0.0); + const WorldDouble2 South(1.0, 0.0); + const WorldDouble2 East(0.0, -1.0); + const WorldDouble2 West(0.0, 1.0); + + CardinalDirectionName getDirectionName(const WorldDouble2 &direction); + const std::string &toString(CardinalDirectionName directionName); +} + +#endif diff --git a/OpenTESArena/src/Game/CardinalDirectionName.h b/OpenTESArena/src/World/CardinalDirectionName.h old mode 100755 new mode 100644 similarity index 95% rename from OpenTESArena/src/Game/CardinalDirectionName.h rename to OpenTESArena/src/World/CardinalDirectionName.h index 93ab4a676..ae7d28b77 --- a/OpenTESArena/src/Game/CardinalDirectionName.h +++ b/OpenTESArena/src/World/CardinalDirectionName.h @@ -1,18 +1,18 @@ -#ifndef CARDINAL_DIRECTION_NAME_H -#define CARDINAL_DIRECTION_NAME_H - -// Useful for when people give directions. The player's compass is independent of -// any CardinalDirections, though their meanings both equate to the same thing. -enum class CardinalDirectionName -{ - North, - NorthEast, - East, - SouthEast, - South, - SouthWest, - West, - NorthWest -}; - -#endif +#ifndef CARDINAL_DIRECTION_NAME_H +#define CARDINAL_DIRECTION_NAME_H + +// Useful for when people give directions. The player's compass is independent of +// any CardinalDirections, though their meanings both equate to the same thing. +enum class CardinalDirectionName +{ + North, + NorthEast, + East, + SouthEast, + South, + SouthWest, + West, + NorthWest +}; + +#endif