From 4c227b6b78e8b619c8bc5d77fc71cac0055b5994 Mon Sep 17 00:00:00 2001 From: yexo Date: Wed, 17 Jun 2009 13:12:08 +0000 Subject: [PATCH] (svn r16585) -Add [NoAI]: AIBuoyList to get a list of all buoys --- bin/ai/regression/regression.nut | 10 ++++++++++ bin/ai/regression/regression.txt | 6 ++++++ projects/openttd_vs80.vcproj | 8 ++++++++ projects/openttd_vs90.vcproj | 8 ++++++++ source.list | 2 ++ src/ai/ai_instance.cpp | 2 ++ src/ai/api/ai_buoylist.cpp | 14 ++++++++++++++ src/ai/api/ai_buoylist.hpp | 21 +++++++++++++++++++++ src/ai/api/ai_buoylist.hpp.sq | 21 +++++++++++++++++++++ 9 files changed, 92 insertions(+) create mode 100644 src/ai/api/ai_buoylist.cpp create mode 100644 src/ai/api/ai_buoylist.hpp create mode 100644 src/ai/api/ai_buoylist.hpp.sq diff --git a/bin/ai/regression/regression.nut b/bin/ai/regression/regression.nut index 7ec415639e..1f83160438 100644 --- a/bin/ai/regression/regression.nut +++ b/bin/ai/regression/regression.nut @@ -804,6 +804,16 @@ function Regression::Marine() print(" IsCanalTile(): " + AIMarine.IsCanalTile(32127)); print(" GetBankBalance(): " + AICompany.GetBankBalance(AICompany.COMPANY_SELF)); + local list = AIBuoyList(); + print(""); + print("--AIBuoyList--"); + print(" Count(): " + list.Count()); + print(" Location ListDump:"); + for (local i = list.Begin(); list.HasNext(); i = list.Next()) { + print(" " + i); + } + print(""); + print(" RemoveWaterDepot(): " + AIMarine.RemoveWaterDepot(28479)); print(" RemoveDock(): " + AIMarine.RemoveDock(29253)); print(" RemoveBuoy(): " + AIMarine.RemoveBuoy(28481)); diff --git a/bin/ai/regression/regression.txt b/bin/ai/regression/regression.txt index 0e162c0e0a..f6edc7ec9e 100644 --- a/bin/ai/regression/regression.txt +++ b/bin/ai/regression/regression.txt @@ -7088,6 +7088,12 @@ IsLockTile(): true IsCanalTile(): true GetBankBalance(): 805063 + +--AIBuoyList-- + Count(): 1 + Location ListDump: + 28481 + RemoveWaterDepot(): true RemoveDock(): true RemoveBuoy(): true diff --git a/projects/openttd_vs80.vcproj b/projects/openttd_vs80.vcproj index 016f26028d..a3f3437cf5 100644 --- a/projects/openttd_vs80.vcproj +++ b/projects/openttd_vs80.vcproj @@ -2587,6 +2587,10 @@ RelativePath=".\..\src\ai\api\ai_bridgelist.hpp" > + + @@ -2795,6 +2799,10 @@ RelativePath=".\..\src\ai\api\ai_bridgelist.cpp" > + + diff --git a/projects/openttd_vs90.vcproj b/projects/openttd_vs90.vcproj index 3ca3c8363d..9d4e20aaa1 100644 --- a/projects/openttd_vs90.vcproj +++ b/projects/openttd_vs90.vcproj @@ -2584,6 +2584,10 @@ RelativePath=".\..\src\ai\api\ai_bridgelist.hpp" > + + @@ -2792,6 +2796,10 @@ RelativePath=".\..\src\ai\api\ai_bridgelist.cpp" > + + diff --git a/source.list b/source.list index bb05a91da7..7237c5f9d4 100644 --- a/source.list +++ b/source.list @@ -602,6 +602,7 @@ ai/api/ai_airport.hpp ai/api/ai_base.hpp ai/api/ai_bridge.hpp ai/api/ai_bridgelist.hpp +ai/api/ai_buoylist.hpp ai/api/ai_cargo.hpp ai/api/ai_cargolist.hpp ai/api/ai_company.hpp @@ -655,6 +656,7 @@ ai/api/ai_airport.cpp ai/api/ai_base.cpp ai/api/ai_bridge.cpp ai/api/ai_bridgelist.cpp +ai/api/ai_buoylist.cpp ai/api/ai_cargo.cpp ai/api/ai_cargolist.cpp ai/api/ai_company.cpp diff --git a/src/ai/ai_instance.cpp b/src/ai/ai_instance.cpp index 8c70cf177e..8dff24f78d 100644 --- a/src/ai/ai_instance.cpp +++ b/src/ai/ai_instance.cpp @@ -32,6 +32,7 @@ #include "api/ai_base.hpp.sq" #include "api/ai_bridge.hpp.sq" #include "api/ai_bridgelist.hpp.sq" +#include "api/ai_buoylist.hpp.sq" #include "api/ai_cargo.hpp.sq" #include "api/ai_cargolist.hpp.sq" #include "api/ai_company.hpp.sq" @@ -163,6 +164,7 @@ void AIInstance::RegisterAPI() SQAIBridge_Register(this->engine); SQAIBridgeList_Register(this->engine); SQAIBridgeList_Length_Register(this->engine); + SQAIBuoyList_Register(this->engine); SQAICargo_Register(this->engine); SQAICargoList_Register(this->engine); SQAICargoList_IndustryAccepting_Register(this->engine); diff --git a/src/ai/api/ai_buoylist.cpp b/src/ai/api/ai_buoylist.cpp new file mode 100644 index 0000000000..0ba66fb398 --- /dev/null +++ b/src/ai/api/ai_buoylist.cpp @@ -0,0 +1,14 @@ +/* $Id$ */ + +/** @file ai_buoylist.cpp Implementation of AIBuoyList and friends. */ + +#include "ai_buoylist.hpp" +#include "../../station_base.h" + +AIBuoyList::AIBuoyList() +{ + Station *st; + FOR_ALL_STATIONS(st) { + if (st->IsBuoy()) this->AddItem(st->xy); + } +} diff --git a/src/ai/api/ai_buoylist.hpp b/src/ai/api/ai_buoylist.hpp new file mode 100644 index 0000000000..b18a3e34ff --- /dev/null +++ b/src/ai/api/ai_buoylist.hpp @@ -0,0 +1,21 @@ +/* $Id$ */ + +/** @file ai_buoylist.hpp List all the buoys. */ + +#ifndef AI_BUOYLIST_HPP +#define AI_BUOYLIST_HPP + +#include "ai_abstractlist.hpp" + +/** + * Creates a list of buoys. + * @ingroup AIList + */ +class AIBuoyList : public AIAbstractList { +public: + static const char *GetClassName() { return "AIBuoyList"; } + AIBuoyList(); +}; + + +#endif /* AI_BUOYLIST_HPP */ diff --git a/src/ai/api/ai_buoylist.hpp.sq b/src/ai/api/ai_buoylist.hpp.sq new file mode 100644 index 0000000000..b5eb92973e --- /dev/null +++ b/src/ai/api/ai_buoylist.hpp.sq @@ -0,0 +1,21 @@ +/* $Id$ */ +/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ + +#include "ai_buoylist.hpp" + +namespace SQConvert { + /* Allow AIBuoyList to be used as Squirrel parameter */ + template <> AIBuoyList *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (AIBuoyList *)instance; } + template <> AIBuoyList &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIBuoyList *)instance; } + template <> const AIBuoyList *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (AIBuoyList *)instance; } + template <> const AIBuoyList &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIBuoyList *)instance; } + template <> int Return(HSQUIRRELVM vm, AIBuoyList *res) { if (res == NULL) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "AIBuoyList", res, NULL, DefSQDestructorCallback); return 1; } +}; // namespace SQConvert + +void SQAIBuoyList_Register(Squirrel *engine) { + DefSQClass SQAIBuoyList("AIBuoyList"); + SQAIBuoyList.PreRegister(engine, "AIAbstractList"); + SQAIBuoyList.AddConstructor(engine, "x"); + + SQAIBuoyList.PostRegister(engine); +}