Skip to content

Commit df4f2d3

Browse files
committed
refactoring
1 parent 01c092c commit df4f2d3

File tree

11 files changed

+648
-311
lines changed

11 files changed

+648
-311
lines changed

AmeisenNavigation.Server/src/Config/Config.hpp

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,19 +19,21 @@ struct AmeisenNavConfig
1919
std::map<std::string, void*> Map
2020
{
2121
{ "fCatmullRomSplineAlpha", &catmullRomSplineAlpha },
22+
{ "fRandomPathMaxDistance", &randomPathMaxDistance },
2223
{ "iCatmullRomSplinePoints", &catmullRomSplinePoints },
23-
{ "iMaxPointPath", &maxPointPath },
2424
{ "iMaxPolyPath", &maxPolyPath },
25+
{ "iMaxSearchNodes", &maxSearchNodes },
2526
{ "iPort", &port },
2627
{ "sIp", &ip },
2728
{ "sMmapsPath", &mmapsPath },
2829
};
2930

3031
public:
31-
float catmullRomSplineAlpha = 1.0;
32+
float catmullRomSplineAlpha = 1.0f;
33+
float randomPathMaxDistance = 1.5f;
3234
int catmullRomSplinePoints = 4;
33-
int maxPointPath = 512;
34-
int maxPolyPath = 256;
35+
int maxPolyPath = 512;
36+
int maxSearchNodes = 65535;
3537
int port = 47110;
3638
std::string ip = "127.0.0.1";
3739
std::string mmapsPath = "C:\\shady stuff\\mmaps\\";

AmeisenNavigation.Server/src/Main.cpp

Lines changed: 72 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -55,23 +55,23 @@ int main(int argc, const char* argv[])
5555
return 1;
5656
}
5757

58-
if (Config->maxPointPath <= 0)
58+
if (Config->maxPolyPath <= 0)
5959
{
60-
LogE("iMaxPointPath has to be a value > 0");
60+
LogE("iMaxPolyPath has to be a value > 0");
6161
std::cin.get();
6262
return 1;
6363
}
6464

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

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

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

9090
Server->SetOnClientConnected(OnClientConnect);
9191
Server->SetOnClientDisconnected(OnClientDisconnect);
9292

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

107108
for (const auto& kv : ClientPathBuffers)
108109
{
109-
if (kv.second.second)
110+
if (kv.second.first)
110111
{
111112
delete[] kv.second.first;
112113
}
113114

114115
if (kv.second.second)
115116
{
116-
delete[] kv.second.first;
117+
delete[] kv.second.second;
117118
}
118119
}
119120
}
@@ -129,15 +130,15 @@ int __stdcall SigIntHandler(unsigned long signal)
129130
return 1;
130131
}
131132

132-
void OnClientConnect(ClientHandler* handler)
133+
void OnClientConnect(ClientHandler* handler) noexcept
133134
{
134135
LogI("Client Connected: ", handler->GetIpAddress(), ":", handler->GetPort());
135136

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

140-
void OnClientDisconnect(ClientHandler* handler)
141+
void OnClientDisconnect(ClientHandler* handler) noexcept
141142
{
142143
Nav->FreeClient(handler->GetId());
143144

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

153-
void PathCallback(ClientHandler* handler, char type, const void* data, int size)
154+
void PathCallback(ClientHandler* handler, char type, const void* data, int size) noexcept
154155
{
155-
const PathRequestData request = *reinterpret_cast<const PathRequestData*>(data);
156-
157-
int pathSize = 0;
158-
float* pathBuffer = ClientPathBuffers[handler->GetId()].first;
159-
160-
if (Nav->GetPath(handler->GetId(), request.mapId, request.start, request.end, pathBuffer, &pathSize))
161-
{
162-
if ((request.flags & static_cast<int>(PathRequestFlags::CATMULLROM)) && pathSize > 9)
163-
{
164-
int smoothedPathSize = 0;
165-
float* smoothedPathBuffer = ClientPathBuffers[handler->GetId()].second;
166-
Nav->SmoothPathCatmullRom(pathBuffer, pathSize, smoothedPathBuffer, &smoothedPathSize, Config->catmullRomSplinePoints, Config->catmullRomSplineAlpha);
167-
168-
handler->SendData(type, smoothedPathBuffer, smoothedPathSize * sizeof(float));
169-
}
170-
else if ((request.flags & static_cast<int>(PathRequestFlags::CHAIKIN)) && pathSize > 6)
171-
{
172-
int smoothedPathSize = 0;
173-
float* smoothedPathBuffer = ClientPathBuffers[handler->GetId()].second;
174-
Nav->SmoothPathChaikinCurve(pathBuffer, pathSize, smoothedPathBuffer, &smoothedPathSize);
156+
GenericPathCallback(handler, type, data, size, PathType::STRAIGHT);
157+
}
175158

176-
handler->SendData(type, smoothedPathBuffer, smoothedPathSize * sizeof(float));
177-
}
178-
else
179-
{
180-
handler->SendData(type, pathBuffer, pathSize * sizeof(float));
181-
}
182-
}
183-
else
184-
{
185-
float zero[3]{};
186-
handler->SendData(type, zero, VEC3_SIZE);
187-
}
159+
void RandomPathCallback(ClientHandler* handler, char type, const void* data, int size) noexcept
160+
{
161+
GenericPathCallback(handler, type, data, size, PathType::RANDOM);
188162
}
189163

190-
void RandomPointCallback(ClientHandler* handler, char type, const void* data, int size)
164+
void RandomPointCallback(ClientHandler* handler, char type, const void* data, int size) noexcept
191165
{
192166
const int mapId = *reinterpret_cast<const int*>(data);
193167
float point[3]{};
@@ -196,7 +170,7 @@ void RandomPointCallback(ClientHandler* handler, char type, const void* data, in
196170
handler->SendData(type, point, VEC3_SIZE);
197171
}
198172

199-
void RandomPointAroundCallback(ClientHandler* handler, char type, const void* data, int size)
173+
void RandomPointAroundCallback(ClientHandler* handler, char type, const void* data, int size) noexcept
200174
{
201175
const RandomPointAroundData request = *reinterpret_cast<const RandomPointAroundData*>(data);
202176
float point[3]{};
@@ -205,7 +179,7 @@ void RandomPointAroundCallback(ClientHandler* handler, char type, const void* da
205179
handler->SendData(type, point, VEC3_SIZE);
206180
}
207181

208-
void MoveAlongSurfaceCallback(ClientHandler* handler, char type, const void* data, int size)
182+
void MoveAlongSurfaceCallback(ClientHandler* handler, char type, const void* data, int size) noexcept
209183
{
210184
const MoveRequestData request = *reinterpret_cast<const MoveRequestData*>(data);
211185
float point[3]{};
@@ -214,7 +188,7 @@ void MoveAlongSurfaceCallback(ClientHandler* handler, char type, const void* dat
214188
handler->SendData(type, point, VEC3_SIZE);
215189
}
216190

217-
void CastRayCallback(ClientHandler* handler, char type, const void* data, int size)
191+
void CastRayCallback(ClientHandler* handler, char type, const void* data, int size) noexcept
218192
{
219193
const CastRayData request = *reinterpret_cast<const CastRayData*>(data);
220194
dtRaycastHit hit;
@@ -228,4 +202,53 @@ void CastRayCallback(ClientHandler* handler, char type, const void* data, int si
228202
float zero[3]{};
229203
handler->SendData(type, zero, VEC3_SIZE);
230204
}
205+
}
206+
207+
void GenericPathCallback(ClientHandler* handler, char type, const void* data, int size, PathType pathType) noexcept
208+
{
209+
const PathRequestData request = *reinterpret_cast<const PathRequestData*>(data);
210+
211+
int pathSize = 0;
212+
float* pathBuffer = ClientPathBuffers[handler->GetId()].first;
213+
214+
bool pathGenerated = false;
215+
216+
switch (pathType)
217+
{
218+
case PathType::STRAIGHT:
219+
pathGenerated = Nav->GetPath(handler->GetId(), request.mapId, request.start, request.end, pathBuffer, &pathSize);
220+
break;
221+
case PathType::RANDOM:
222+
pathGenerated = Nav->GetRandomPath(handler->GetId(), request.mapId, request.start, request.end, pathBuffer, &pathSize, Config->randomPathMaxDistance);
223+
break;
224+
}
225+
226+
if (pathGenerated)
227+
{
228+
if ((request.flags & static_cast<int>(PathRequestFlags::CATMULLROM)) && pathSize > 9)
229+
{
230+
int smoothedPathSize = 0;
231+
float* smoothedPathBuffer = ClientPathBuffers[handler->GetId()].second;
232+
Nav->SmoothPathCatmullRom(pathBuffer, pathSize, smoothedPathBuffer, &smoothedPathSize, Config->catmullRomSplinePoints, Config->catmullRomSplineAlpha);
233+
234+
handler->SendData(type, smoothedPathBuffer, smoothedPathSize * sizeof(float));
235+
}
236+
else if ((request.flags & static_cast<int>(PathRequestFlags::CHAIKIN)) && pathSize > 6)
237+
{
238+
int smoothedPathSize = 0;
239+
float* smoothedPathBuffer = ClientPathBuffers[handler->GetId()].second;
240+
Nav->SmoothPathChaikinCurve(pathBuffer, pathSize, smoothedPathBuffer, &smoothedPathSize);
241+
242+
handler->SendData(type, smoothedPathBuffer, smoothedPathSize * sizeof(float));
243+
}
244+
else
245+
{
246+
handler->SendData(type, pathBuffer, pathSize * sizeof(float));
247+
}
248+
}
249+
else
250+
{
251+
float zero[3]{};
252+
handler->SendData(type, zero, VEC3_SIZE);
253+
}
231254
}

AmeisenNavigation.Server/src/Main.hpp

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
#include <iostream>
1212
#include <mutex>
1313

14-
constexpr auto AMEISENNAV_VERSION = "1.7.4.0";
14+
constexpr auto AMEISENNAV_VERSION = "1.7.5.0";
1515

1616
constexpr auto VEC3_SIZE = sizeof(float) * 3;
1717

@@ -22,6 +22,13 @@ enum class MessageType
2222
RANDOM_POINT,
2323
RANDOM_POINT_AROUND,
2424
CAST_RAY,
25+
RANDOM_PATH,
26+
};
27+
28+
enum class PathType
29+
{
30+
STRAIGHT,
31+
RANDOM,
2532
};
2633

2734
enum class PathRequestFlags : int
@@ -64,15 +71,18 @@ inline AnTcpServer* Server = nullptr;
6471
inline AmeisenNavigation* Nav = nullptr;
6572
inline AmeisenNavConfig* Config = nullptr;
6673

67-
inline std::unordered_map<int, std::pair<float*, float*>> ClientPathBuffers{};
74+
inline std::unordered_map<int, std::pair<float*, float*>> ClientPathBuffers;
6875

6976
int __stdcall SigIntHandler(unsigned long signal);
7077

71-
void OnClientConnect(ClientHandler* handler);
72-
void OnClientDisconnect(ClientHandler* handler);
78+
void OnClientConnect(ClientHandler* handler) noexcept;
79+
void OnClientDisconnect(ClientHandler* handler) noexcept;
80+
81+
void PathCallback(ClientHandler* handler, char type, const void* data, int size) noexcept;
82+
void RandomPathCallback(ClientHandler* handler, char type, const void* data, int size) noexcept;
83+
void RandomPointCallback(ClientHandler* handler, char type, const void* data, int size) noexcept;
84+
void RandomPointAroundCallback(ClientHandler* handler, char type, const void* data, int size) noexcept;
85+
void MoveAlongSurfaceCallback(ClientHandler* handler, char type, const void* data, int size) noexcept;
86+
void CastRayCallback(ClientHandler* handler, char type, const void* data, int size) noexcept;
7387

74-
void PathCallback(ClientHandler* handler, char type, const void* data, int size);
75-
void RandomPointCallback(ClientHandler* handler, char type, const void* data, int size);
76-
void RandomPointAroundCallback(ClientHandler* handler, char type, const void* data, int size);
77-
void MoveAlongSurfaceCallback(ClientHandler* handler, char type, const void* data, int size);
78-
void CastRayCallback(ClientHandler* handler, char type, const void* data, int size);
88+
void GenericPathCallback(ClientHandler* handler, char type, const void* data, int size, PathType pathType) noexcept;

AmeisenNavigation.Tester/MainWindow.xaml

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,24 @@
55
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
66
xmlns:local="clr-namespace:AmeisenNavigation.Tester"
77
mc:Ignorable="d"
8-
Title="AmeisenNavigation Tester" Height="450" Width="900">
8+
Title="AmeisenNavigation Tester" Height="450" Width="900" Loaded="Window_Loaded">
99
<Grid>
10-
<Button x:Name="ButtonRun" Content="GetPath" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Width="100" Click="ButtonRun_Click" Height="32" />
10+
<Button x:Name="ButtonRun" Content="GetPath" HorizontalAlignment="Left" Margin="385,10,0,0" VerticalAlignment="Top" Width="100" Click="ButtonRun_Click" Height="41" />
1111
<Rectangle x:Name="ImgRect" Margin="10,60,280,10" Fill="Gainsboro" />
1212
<Image x:Name="ImgCanvas" Margin="10,60,280,10" />
1313
<ListBox x:Name="PointList" Margin="0,60,10,10" HorizontalAlignment="Right" Width="265" />
14-
<Button x:Name="ButtonRunChaikin" Content="GetPath (Chaikin)" HorizontalAlignment="Left" Margin="115,10,0,0" VerticalAlignment="Top" Width="130" Click="ButtonRunChaikin_Click" Height="32" />
15-
<Button x:Name="ButtonRunCatmullRom" Content="GetPath (CatmullRom)" HorizontalAlignment="Left" Margin="250,10,0,0" VerticalAlignment="Top" Width="150" Click="ButtonRunCatmullRom_Click" Height="32" />
14+
<Button x:Name="ButtonRunChaikin" Content="GetPath (Chaikin)" HorizontalAlignment="Left" Margin="490,10,0,0" VerticalAlignment="Top" Width="130" Click="ButtonRunChaikin_Click" Height="41" />
15+
<Button x:Name="ButtonRunCatmullRom" Content="GetPath (CatmullRom)" HorizontalAlignment="Left" Margin="625,10,0,0" VerticalAlignment="Top" Width="154" Click="ButtonRunCatmullRom_Click" Height="41" />
16+
<CheckBox x:Name="CheckBoxRandomPath" Content="Randomize" HorizontalAlignment="Left" Margin="784,10,0,0" VerticalAlignment="Top"/>
17+
<Label Content="Start" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Padding="1"/>
18+
<Label Content="End" HorizontalAlignment="Left" Margin="10,33,0,0" VerticalAlignment="Top" Padding="1"/>
19+
<TextBox x:Name="TextBoxStartX" HorizontalAlignment="Left" Margin="41,10,0,0" Text="0.0" TextWrapping="Wrap" VerticalAlignment="Top" Width="100"/>
20+
<TextBox x:Name="TextBoxStartY" HorizontalAlignment="Left" Margin="146,10,0,0" Text="0.0" TextWrapping="Wrap" VerticalAlignment="Top" Width="100"/>
21+
<TextBox x:Name="TextBoxStartZ" HorizontalAlignment="Left" Margin="251,10,0,0" Text="0.0" TextWrapping="Wrap" VerticalAlignment="Top" Width="100"/>
22+
<TextBox x:Name="TextBoxEndX" HorizontalAlignment="Left" Margin="41,33,0,0" Text="0.0" TextWrapping="Wrap" VerticalAlignment="Top" Width="100"/>
23+
<TextBox x:Name="TextBoxEndY" HorizontalAlignment="Left" Margin="146,33,0,0" Text="0.0" TextWrapping="Wrap" VerticalAlignment="Top" Width="100"/>
24+
<TextBox x:Name="TextBoxEndZ" HorizontalAlignment="Left" Margin="251,33,0,0" Text="0.0" TextWrapping="Wrap" VerticalAlignment="Top" Width="100"/>
25+
<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"/>
26+
<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"/>
1627
</Grid>
1728
</Window>

0 commit comments

Comments
 (0)