Skip to content

Commit

Permalink
refactoring
Browse files Browse the repository at this point in the history
  • Loading branch information
Jnnshschl committed Aug 5, 2021
1 parent 01c092c commit df4f2d3
Show file tree
Hide file tree
Showing 11 changed files with 648 additions and 311 deletions.
10 changes: 6 additions & 4 deletions AmeisenNavigation.Server/src/Config/Config.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,19 +19,21 @@ struct AmeisenNavConfig
std::map<std::string, void*> Map
{
{ "fCatmullRomSplineAlpha", &catmullRomSplineAlpha },
{ "fRandomPathMaxDistance", &randomPathMaxDistance },
{ "iCatmullRomSplinePoints", &catmullRomSplinePoints },
{ "iMaxPointPath", &maxPointPath },
{ "iMaxPolyPath", &maxPolyPath },
{ "iMaxSearchNodes", &maxSearchNodes },
{ "iPort", &port },
{ "sIp", &ip },
{ "sMmapsPath", &mmapsPath },
};

public:
float catmullRomSplineAlpha = 1.0;
float catmullRomSplineAlpha = 1.0f;
float randomPathMaxDistance = 1.5f;
int catmullRomSplinePoints = 4;
int maxPointPath = 512;
int maxPolyPath = 256;
int maxPolyPath = 512;
int maxSearchNodes = 65535;
int port = 47110;
std::string ip = "127.0.0.1";
std::string mmapsPath = "C:\\shady stuff\\mmaps\\";
Expand Down
121 changes: 72 additions & 49 deletions AmeisenNavigation.Server/src/Main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -55,23 +55,23 @@ int main(int argc, const char* argv[])
return 1;
}

if (Config->maxPointPath <= 0)
if (Config->maxPolyPath <= 0)
{
LogE("iMaxPointPath has to be a value > 0");
LogE("iMaxPolyPath has to be a value > 0");
std::cin.get();
return 1;
}

if (Config->maxPolyPath <= 0)
if (Config->port <= 0 || Config->port > 65535)
{
LogE("iMaxPolyPath has to be a value > 0");
LogE("iPort has to be a value bewtween 1 and 65535");
std::cin.get();
return 1;
}

if (Config->port <= 0 || Config->port > 65535)
if (Config->maxSearchNodes <= 0 || Config->maxSearchNodes > 65535)
{
LogE("iMaxPolyPath has to be a value bewtween 1 and 65535");
LogE("iMaxSearchNodes has to be a value bewtween 1 and 65535");
std::cin.get();
return 1;
}
Expand All @@ -84,13 +84,14 @@ int main(int argc, const char* argv[])
return 1;
}

Nav = new AmeisenNavigation(Config->mmapsPath, Config->maxPolyPath, Config->maxPointPath);
Nav = new AmeisenNavigation(Config->mmapsPath, Config->maxPolyPath, Config->maxSearchNodes);
Server = new AnTcpServer(Config->ip, Config->port);

Server->SetOnClientConnected(OnClientConnect);
Server->SetOnClientDisconnected(OnClientDisconnect);

Server->AddCallback(static_cast<char>(MessageType::PATH), PathCallback);
Server->AddCallback(static_cast<char>(MessageType::RANDOM_PATH), RandomPathCallback);
Server->AddCallback(static_cast<char>(MessageType::RANDOM_POINT), RandomPointCallback);
Server->AddCallback(static_cast<char>(MessageType::RANDOM_POINT_AROUND), RandomPointAroundCallback);
Server->AddCallback(static_cast<char>(MessageType::MOVE_ALONG_SURFACE), MoveAlongSurfaceCallback);
Expand All @@ -106,14 +107,14 @@ int main(int argc, const char* argv[])

for (const auto& kv : ClientPathBuffers)
{
if (kv.second.second)
if (kv.second.first)
{
delete[] kv.second.first;
}

if (kv.second.second)
{
delete[] kv.second.first;
delete[] kv.second.second;
}
}
}
Expand All @@ -129,15 +130,15 @@ int __stdcall SigIntHandler(unsigned long signal)
return 1;
}

void OnClientConnect(ClientHandler* handler)
void OnClientConnect(ClientHandler* handler) noexcept
{
LogI("Client Connected: ", handler->GetIpAddress(), ":", handler->GetPort());

ClientPathBuffers[handler->GetId()] = std::make_pair(new float[Config->maxPointPath * 3], new float[Config->maxPointPath * 3]);
ClientPathBuffers[handler->GetId()] = std::make_pair(new float[Config->maxPolyPath * 3], new float[Config->maxPolyPath * 3]);
Nav->NewClient(handler->GetId());
}

void OnClientDisconnect(ClientHandler* handler)
void OnClientDisconnect(ClientHandler* handler) noexcept
{
Nav->FreeClient(handler->GetId());

Expand All @@ -150,44 +151,17 @@ void OnClientDisconnect(ClientHandler* handler)
LogI("Client Disconnected: ", handler->GetIpAddress(), ":", handler->GetPort());
}

void PathCallback(ClientHandler* handler, char type, const void* data, int size)
void PathCallback(ClientHandler* handler, char type, const void* data, int size) noexcept
{
const PathRequestData request = *reinterpret_cast<const PathRequestData*>(data);

int pathSize = 0;
float* pathBuffer = ClientPathBuffers[handler->GetId()].first;

if (Nav->GetPath(handler->GetId(), request.mapId, request.start, request.end, pathBuffer, &pathSize))
{
if ((request.flags & static_cast<int>(PathRequestFlags::CATMULLROM)) && pathSize > 9)
{
int smoothedPathSize = 0;
float* smoothedPathBuffer = ClientPathBuffers[handler->GetId()].second;
Nav->SmoothPathCatmullRom(pathBuffer, pathSize, smoothedPathBuffer, &smoothedPathSize, Config->catmullRomSplinePoints, Config->catmullRomSplineAlpha);

handler->SendData(type, smoothedPathBuffer, smoothedPathSize * sizeof(float));
}
else if ((request.flags & static_cast<int>(PathRequestFlags::CHAIKIN)) && pathSize > 6)
{
int smoothedPathSize = 0;
float* smoothedPathBuffer = ClientPathBuffers[handler->GetId()].second;
Nav->SmoothPathChaikinCurve(pathBuffer, pathSize, smoothedPathBuffer, &smoothedPathSize);
GenericPathCallback(handler, type, data, size, PathType::STRAIGHT);
}

handler->SendData(type, smoothedPathBuffer, smoothedPathSize * sizeof(float));
}
else
{
handler->SendData(type, pathBuffer, pathSize * sizeof(float));
}
}
else
{
float zero[3]{};
handler->SendData(type, zero, VEC3_SIZE);
}
void RandomPathCallback(ClientHandler* handler, char type, const void* data, int size) noexcept
{
GenericPathCallback(handler, type, data, size, PathType::RANDOM);
}

void RandomPointCallback(ClientHandler* handler, char type, const void* data, int size)
void RandomPointCallback(ClientHandler* handler, char type, const void* data, int size) noexcept
{
const int mapId = *reinterpret_cast<const int*>(data);
float point[3]{};
Expand All @@ -196,7 +170,7 @@ void RandomPointCallback(ClientHandler* handler, char type, const void* data, in
handler->SendData(type, point, VEC3_SIZE);
}

void RandomPointAroundCallback(ClientHandler* handler, char type, const void* data, int size)
void RandomPointAroundCallback(ClientHandler* handler, char type, const void* data, int size) noexcept
{
const RandomPointAroundData request = *reinterpret_cast<const RandomPointAroundData*>(data);
float point[3]{};
Expand All @@ -205,7 +179,7 @@ void RandomPointAroundCallback(ClientHandler* handler, char type, const void* da
handler->SendData(type, point, VEC3_SIZE);
}

void MoveAlongSurfaceCallback(ClientHandler* handler, char type, const void* data, int size)
void MoveAlongSurfaceCallback(ClientHandler* handler, char type, const void* data, int size) noexcept
{
const MoveRequestData request = *reinterpret_cast<const MoveRequestData*>(data);
float point[3]{};
Expand All @@ -214,7 +188,7 @@ void MoveAlongSurfaceCallback(ClientHandler* handler, char type, const void* dat
handler->SendData(type, point, VEC3_SIZE);
}

void CastRayCallback(ClientHandler* handler, char type, const void* data, int size)
void CastRayCallback(ClientHandler* handler, char type, const void* data, int size) noexcept
{
const CastRayData request = *reinterpret_cast<const CastRayData*>(data);
dtRaycastHit hit;
Expand All @@ -228,4 +202,53 @@ void CastRayCallback(ClientHandler* handler, char type, const void* data, int si
float zero[3]{};
handler->SendData(type, zero, VEC3_SIZE);
}
}

void GenericPathCallback(ClientHandler* handler, char type, const void* data, int size, PathType pathType) noexcept
{
const PathRequestData request = *reinterpret_cast<const PathRequestData*>(data);

int pathSize = 0;
float* pathBuffer = ClientPathBuffers[handler->GetId()].first;

bool pathGenerated = false;

switch (pathType)
{
case PathType::STRAIGHT:
pathGenerated = Nav->GetPath(handler->GetId(), request.mapId, request.start, request.end, pathBuffer, &pathSize);
break;
case PathType::RANDOM:
pathGenerated = Nav->GetRandomPath(handler->GetId(), request.mapId, request.start, request.end, pathBuffer, &pathSize, Config->randomPathMaxDistance);
break;
}

if (pathGenerated)
{
if ((request.flags & static_cast<int>(PathRequestFlags::CATMULLROM)) && pathSize > 9)
{
int smoothedPathSize = 0;
float* smoothedPathBuffer = ClientPathBuffers[handler->GetId()].second;
Nav->SmoothPathCatmullRom(pathBuffer, pathSize, smoothedPathBuffer, &smoothedPathSize, Config->catmullRomSplinePoints, Config->catmullRomSplineAlpha);

handler->SendData(type, smoothedPathBuffer, smoothedPathSize * sizeof(float));
}
else if ((request.flags & static_cast<int>(PathRequestFlags::CHAIKIN)) && pathSize > 6)
{
int smoothedPathSize = 0;
float* smoothedPathBuffer = ClientPathBuffers[handler->GetId()].second;
Nav->SmoothPathChaikinCurve(pathBuffer, pathSize, smoothedPathBuffer, &smoothedPathSize);

handler->SendData(type, smoothedPathBuffer, smoothedPathSize * sizeof(float));
}
else
{
handler->SendData(type, pathBuffer, pathSize * sizeof(float));
}
}
else
{
float zero[3]{};
handler->SendData(type, zero, VEC3_SIZE);
}
}
28 changes: 19 additions & 9 deletions AmeisenNavigation.Server/src/Main.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
#include <iostream>
#include <mutex>

constexpr auto AMEISENNAV_VERSION = "1.7.4.0";
constexpr auto AMEISENNAV_VERSION = "1.7.5.0";

constexpr auto VEC3_SIZE = sizeof(float) * 3;

Expand All @@ -22,6 +22,13 @@ enum class MessageType
RANDOM_POINT,
RANDOM_POINT_AROUND,
CAST_RAY,
RANDOM_PATH,
};

enum class PathType
{
STRAIGHT,
RANDOM,
};

enum class PathRequestFlags : int
Expand Down Expand Up @@ -64,15 +71,18 @@ inline AnTcpServer* Server = nullptr;
inline AmeisenNavigation* Nav = nullptr;
inline AmeisenNavConfig* Config = nullptr;

inline std::unordered_map<int, std::pair<float*, float*>> ClientPathBuffers{};
inline std::unordered_map<int, std::pair<float*, float*>> ClientPathBuffers;

int __stdcall SigIntHandler(unsigned long signal);

void OnClientConnect(ClientHandler* handler);
void OnClientDisconnect(ClientHandler* handler);
void OnClientConnect(ClientHandler* handler) noexcept;
void OnClientDisconnect(ClientHandler* handler) noexcept;

void PathCallback(ClientHandler* handler, char type, const void* data, int size) noexcept;
void RandomPathCallback(ClientHandler* handler, char type, const void* data, int size) noexcept;
void RandomPointCallback(ClientHandler* handler, char type, const void* data, int size) noexcept;
void RandomPointAroundCallback(ClientHandler* handler, char type, const void* data, int size) noexcept;
void MoveAlongSurfaceCallback(ClientHandler* handler, char type, const void* data, int size) noexcept;
void CastRayCallback(ClientHandler* handler, char type, const void* data, int size) noexcept;

void PathCallback(ClientHandler* handler, char type, const void* data, int size);
void RandomPointCallback(ClientHandler* handler, char type, const void* data, int size);
void RandomPointAroundCallback(ClientHandler* handler, char type, const void* data, int size);
void MoveAlongSurfaceCallback(ClientHandler* handler, char type, const void* data, int size);
void CastRayCallback(ClientHandler* handler, char type, const void* data, int size);
void GenericPathCallback(ClientHandler* handler, char type, const void* data, int size, PathType pathType) noexcept;
19 changes: 15 additions & 4 deletions AmeisenNavigation.Tester/MainWindow.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,24 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:AmeisenNavigation.Tester"
mc:Ignorable="d"
Title="AmeisenNavigation Tester" Height="450" Width="900">
Title="AmeisenNavigation Tester" Height="450" Width="900" Loaded="Window_Loaded">
<Grid>
<Button x:Name="ButtonRun" Content="GetPath" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Width="100" Click="ButtonRun_Click" Height="32" />
<Button x:Name="ButtonRun" Content="GetPath" HorizontalAlignment="Left" Margin="385,10,0,0" VerticalAlignment="Top" Width="100" Click="ButtonRun_Click" Height="41" />
<Rectangle x:Name="ImgRect" Margin="10,60,280,10" Fill="Gainsboro" />
<Image x:Name="ImgCanvas" Margin="10,60,280,10" />
<ListBox x:Name="PointList" Margin="0,60,10,10" HorizontalAlignment="Right" Width="265" />
<Button x:Name="ButtonRunChaikin" Content="GetPath (Chaikin)" HorizontalAlignment="Left" Margin="115,10,0,0" VerticalAlignment="Top" Width="130" Click="ButtonRunChaikin_Click" Height="32" />
<Button x:Name="ButtonRunCatmullRom" Content="GetPath (CatmullRom)" HorizontalAlignment="Left" Margin="250,10,0,0" VerticalAlignment="Top" Width="150" Click="ButtonRunCatmullRom_Click" Height="32" />
<Button x:Name="ButtonRunChaikin" Content="GetPath (Chaikin)" HorizontalAlignment="Left" Margin="490,10,0,0" VerticalAlignment="Top" Width="130" Click="ButtonRunChaikin_Click" Height="41" />
<Button x:Name="ButtonRunCatmullRom" Content="GetPath (CatmullRom)" HorizontalAlignment="Left" Margin="625,10,0,0" VerticalAlignment="Top" Width="154" Click="ButtonRunCatmullRom_Click" Height="41" />
<CheckBox x:Name="CheckBoxRandomPath" Content="Randomize" HorizontalAlignment="Left" Margin="784,10,0,0" VerticalAlignment="Top"/>
<Label Content="Start" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Padding="1"/>
<Label Content="End" HorizontalAlignment="Left" Margin="10,33,0,0" VerticalAlignment="Top" Padding="1"/>
<TextBox x:Name="TextBoxStartX" HorizontalAlignment="Left" Margin="41,10,0,0" Text="0.0" TextWrapping="Wrap" VerticalAlignment="Top" Width="100"/>
<TextBox x:Name="TextBoxStartY" HorizontalAlignment="Left" Margin="146,10,0,0" Text="0.0" TextWrapping="Wrap" VerticalAlignment="Top" Width="100"/>
<TextBox x:Name="TextBoxStartZ" HorizontalAlignment="Left" Margin="251,10,0,0" Text="0.0" TextWrapping="Wrap" VerticalAlignment="Top" Width="100"/>
<TextBox x:Name="TextBoxEndX" HorizontalAlignment="Left" Margin="41,33,0,0" Text="0.0" TextWrapping="Wrap" VerticalAlignment="Top" Width="100"/>
<TextBox x:Name="TextBoxEndY" HorizontalAlignment="Left" Margin="146,33,0,0" Text="0.0" TextWrapping="Wrap" VerticalAlignment="Top" Width="100"/>
<TextBox x:Name="TextBoxEndZ" HorizontalAlignment="Left" Margin="251,33,0,0" Text="0.0" TextWrapping="Wrap" VerticalAlignment="Top" Width="100"/>
<Button x:Name="ButtonRandomStart" Content="R" HorizontalAlignment="Left" Margin="356,10,0,0" VerticalAlignment="Top" Height="18" Padding="0" Width="24" FontSize="10" Click="ButtonRandomStart_Click"/>
<Button x:Name="ButtonRandomEnd" Content="R" HorizontalAlignment="Left" Margin="356,33,0,0" VerticalAlignment="Top" Height="18" Padding="0" Width="24" FontSize="10" Click="ButtonRandomEnd_Click"/>
</Grid>
</Window>
Loading

0 comments on commit df4f2d3

Please sign in to comment.