summaryrefslogtreecommitdiff
path: root/src/ai/api/ai_waypoint.cpp
diff options
context:
space:
mode:
authoryexo <yexo@openttd.org>2009-02-19 07:40:08 +0000
committeryexo <yexo@openttd.org>2009-02-19 07:40:08 +0000
commitc0e7ddeb9ee8892103a1314dac25e0d7250e6af4 (patch)
treefa0d25f1d5a2c7fdfd64122bd10dc5ee7291d2fe /src/ai/api/ai_waypoint.cpp
parentc2d9c85c0fbb26b5db2ef20b7ac610e63de2b46b (diff)
downloadopenttd-c0e7ddeb9ee8892103a1314dac25e0d7250e6af4.tar.xz
(svn r15519) -Add [NoAI]: support for waypoints by adding AIRail::Build/Remove RailWaypoint, AIWaypoint and AIWaypointList.
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;
+}