summaryrefslogtreecommitdiff
path: root/src/ai/api/ai_waypoint.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/ai/api/ai_waypoint.cpp')
-rw-r--r--src/ai/api/ai_waypoint.cpp53
1 files changed, 53 insertions, 0 deletions
diff --git a/src/ai/api/ai_waypoint.cpp b/src/ai/api/ai_waypoint.cpp
new file mode 100644
index 000000000..3836978df
--- /dev/null
+++ b/src/ai/api/ai_waypoint.cpp
@@ -0,0 +1,53 @@
+/* $Id$ */
+
+/** @file ai_waypoint.cpp Implementation of AIWaypoint. */
+
+#include "ai_waypoint.hpp"
+#include "ai_rail.hpp"
+#include "../../command_func.h"
+#include "../../string_func.h"
+#include "../../strings_func.h"
+#include "../../company_func.h"
+#include "../../waypoint.h"
+#include "../../core/alloc_func.hpp"
+#include "table/strings.h"
+
+/* static */ bool AIWaypoint::IsValidWaypoint(WaypointID waypoint_id)
+{
+ return ::IsValidWaypointID(waypoint_id) && ::GetWaypoint(waypoint_id)->owner == _current_company;
+}
+
+/* static */ WaypointID AIWaypoint::GetWaypointID(TileIndex tile)
+{
+ if (!AIRail::IsRailWaypointTile(tile)) return WAYPOINT_INVALID;
+
+ return ::GetWaypointIndex(tile);
+}
+
+/* static */ char *AIWaypoint::GetName(WaypointID waypoint_id)
+{
+ if (!IsValidWaypoint(waypoint_id)) return NULL;
+
+ static const int len = 64;
+ char *waypoint_name = MallocT<char>(len);
+
+ ::SetDParam(0, waypoint_id);
+ ::GetString(waypoint_name, STR_WAYPOINT_RAW, &waypoint_name[len - 1]);
+ return waypoint_name;
+}
+
+/* static */ bool AIWaypoint::SetName(WaypointID waypoint_id, const char *name)
+{
+ EnforcePrecondition(false, IsValidWaypoint(waypoint_id));
+ EnforcePrecondition(false, !::StrEmpty(name));
+ EnforcePreconditionCustomError(false, ::strlen(name) < MAX_LENGTH_WAYPOINT_NAME_BYTES, AIError::ERR_PRECONDITION_STRING_TOO_LONG);
+
+ return AIObject::DoCommand(0, waypoint_id, 0, CMD_RENAME_WAYPOINT, name);
+}
+
+/* static */ TileIndex AIWaypoint::GetLocation(WaypointID waypoint_id)
+{
+ if (!IsValidWaypoint(waypoint_id)) return INVALID_TILE;
+
+ return ::GetWaypoint(waypoint_id)->xy;
+}