Skip to content

Commit

Permalink
Moved CardinalDirection to World folder.
Browse files Browse the repository at this point in the history
  • Loading branch information
afritz1 committed Nov 16, 2024
1 parent 64cefd6 commit b33715a
Show file tree
Hide file tree
Showing 15 changed files with 140 additions and 146 deletions.
6 changes: 3 additions & 3 deletions OpenTESArena/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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"
Expand Down
4 changes: 2 additions & 2 deletions OpenTESArena/src/Entities/CitizenUtils.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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"

Expand Down
2 changes: 1 addition & 1 deletion OpenTESArena/src/Entities/EntityChunkManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
1 change: 0 additions & 1 deletion OpenTESArena/src/Entities/EntityGeneration.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
#include "EntityGeneration.h"
#include "../Game/CardinalDirection.h"

void EntityGeneration::EntityGenInfo::init(bool nightLightsAreActive)
{
Expand Down
2 changes: 1 addition & 1 deletion OpenTESArena/src/Entities/Player.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand All @@ -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"
Expand Down
4 changes: 2 additions & 2 deletions OpenTESArena/src/GameLogic/PlayerLogicController.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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"

Expand Down
2 changes: 0 additions & 2 deletions OpenTESArena/src/Interface/AutomapPanel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
2 changes: 1 addition & 1 deletion OpenTESArena/src/Interface/AutomapUiView.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand All @@ -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"
Expand Down
2 changes: 1 addition & 1 deletion OpenTESArena/src/Interface/AutomapUiView.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
#include <vector>

#include "../Assets/TextureAsset.h"
#include "../Game/CardinalDirectionName.h"
#include "../Math/Rect.h"
#include "../Math/Vector2.h"
#include "../Rendering/ArenaRenderUtils.h"
Expand All @@ -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"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand All @@ -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"
Expand Down
1 change: 0 additions & 1 deletion OpenTESArena/src/Rendering/RendererUtils.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
2 changes: 0 additions & 2 deletions OpenTESArena/src/Voxels/VoxelChunkManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
170 changes: 85 additions & 85 deletions OpenTESArena/src/Game/CardinalDirection.cpp → OpenTESArena/src/World/CardinalDirection.cpp
100755 → 100644
Original file line number Diff line number Diff line change
@@ -1,85 +1,85 @@
#include <unordered_map>

#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<CardinalDirectionName, std::string> 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 <unordered_map>

#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<CardinalDirectionName, std::string> 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;
}
50 changes: 25 additions & 25 deletions OpenTESArena/src/Game/CardinalDirection.h → OpenTESArena/src/World/CardinalDirection.h
100755 → 100644
Original file line number Diff line number Diff line change
@@ -1,25 +1,25 @@
#ifndef CARDINAL_DIRECTION_H
#define CARDINAL_DIRECTION_H

#include <string>

#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 <string>

#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
Loading

0 comments on commit b33715a

Please sign in to comment.