From fd79ad8484abab08be32fbfe70d51c4c545a1c22 Mon Sep 17 00:00:00 2001 From: peter1138 Date: Sat, 6 Apr 2019 20:50:00 +0100 Subject: [PATCH] Add: New RoadType API functions. --- projects/openttd_vs140.vcxproj | 2 ++ projects/openttd_vs140.vcxproj.filters | 6 ++++ projects/openttd_vs141.vcxproj | 2 ++ projects/openttd_vs141.vcxproj.filters | 6 ++++ projects/openttd_vs142.vcxproj | 2 ++ projects/openttd_vs142.vcxproj.filters | 6 ++++ source.list | 2 ++ src/ai/ai_instance.cpp | 2 ++ src/game/game_instance.cpp | 2 ++ src/script/api/ai/ai_road.hpp.sq | 1 + src/script/api/ai/ai_roadtypelist.hpp.sq | 25 +++++++++++++++++ src/script/api/game/game_road.hpp.sq | 1 + src/script/api/game/game_roadtypelist.hpp.sq | 25 +++++++++++++++++ src/script/api/script_road.cpp | 5 ++++ src/script/api/script_road.hpp | 7 +++++ src/script/api/script_roadtypelist.cpp | 23 +++++++++++++++ src/script/api/script_roadtypelist.hpp | 28 +++++++++++++++++++ .../api/template/template_roadtypelist.hpp.sq | 21 ++++++++++++++ 18 files changed, 166 insertions(+) create mode 100644 src/script/api/ai/ai_roadtypelist.hpp.sq create mode 100644 src/script/api/game/game_roadtypelist.hpp.sq create mode 100644 src/script/api/script_roadtypelist.cpp create mode 100644 src/script/api/script_roadtypelist.hpp create mode 100644 src/script/api/template/template_roadtypelist.hpp.sq diff --git a/projects/openttd_vs140.vcxproj b/projects/openttd_vs140.vcxproj index 16fdfd4c28358..f9fb93b87d207 100644 --- a/projects/openttd_vs140.vcxproj +++ b/projects/openttd_vs140.vcxproj @@ -1093,6 +1093,7 @@ + @@ -1159,6 +1160,7 @@ + diff --git a/projects/openttd_vs140.vcxproj.filters b/projects/openttd_vs140.vcxproj.filters index 9b8c43abb53e9..47415c1257af0 100644 --- a/projects/openttd_vs140.vcxproj.filters +++ b/projects/openttd_vs140.vcxproj.filters @@ -2367,6 +2367,9 @@ Script API + + Script API + Script API @@ -2565,6 +2568,9 @@ Script API Implementation + + Script API Implementation + Script API Implementation diff --git a/projects/openttd_vs141.vcxproj b/projects/openttd_vs141.vcxproj index 52e58aba83ce7..15ef9185d905b 100644 --- a/projects/openttd_vs141.vcxproj +++ b/projects/openttd_vs141.vcxproj @@ -1093,6 +1093,7 @@ + @@ -1159,6 +1160,7 @@ + diff --git a/projects/openttd_vs141.vcxproj.filters b/projects/openttd_vs141.vcxproj.filters index 9b8c43abb53e9..47415c1257af0 100644 --- a/projects/openttd_vs141.vcxproj.filters +++ b/projects/openttd_vs141.vcxproj.filters @@ -2367,6 +2367,9 @@ Script API + + Script API + Script API @@ -2565,6 +2568,9 @@ Script API Implementation + + Script API Implementation + Script API Implementation diff --git a/projects/openttd_vs142.vcxproj b/projects/openttd_vs142.vcxproj index d41bbf60b3081..3a6307388eff9 100644 --- a/projects/openttd_vs142.vcxproj +++ b/projects/openttd_vs142.vcxproj @@ -1093,6 +1093,7 @@ + @@ -1159,6 +1160,7 @@ + diff --git a/projects/openttd_vs142.vcxproj.filters b/projects/openttd_vs142.vcxproj.filters index 9b8c43abb53e9..47415c1257af0 100644 --- a/projects/openttd_vs142.vcxproj.filters +++ b/projects/openttd_vs142.vcxproj.filters @@ -2367,6 +2367,9 @@ Script API + + Script API + Script API @@ -2565,6 +2568,9 @@ Script API Implementation + + Script API Implementation + Script API Implementation diff --git a/source.list b/source.list index f8e33272659f5..db1389d437c33 100644 --- a/source.list +++ b/source.list @@ -826,6 +826,7 @@ script/api/script_order.hpp script/api/script_rail.hpp script/api/script_railtypelist.hpp script/api/script_road.hpp +script/api/script_roadtypelist.hpp script/api/script_sign.hpp script/api/script_signlist.hpp script/api/script_station.hpp @@ -894,6 +895,7 @@ script/api/script_order.cpp script/api/script_rail.cpp script/api/script_railtypelist.cpp script/api/script_road.cpp +script/api/script_roadtypelist.cpp script/api/script_sign.cpp script/api/script_signlist.cpp script/api/script_station.cpp diff --git a/src/ai/ai_instance.cpp b/src/ai/ai_instance.cpp index f5f5904c09289..41a8420853a85 100644 --- a/src/ai/ai_instance.cpp +++ b/src/ai/ai_instance.cpp @@ -62,6 +62,7 @@ #include "../script/api/ai/ai_rail.hpp.sq" #include "../script/api/ai/ai_railtypelist.hpp.sq" #include "../script/api/ai/ai_road.hpp.sq" +#include "../script/api/ai/ai_roadtypelist.hpp.sq" #include "../script/api/ai/ai_sign.hpp.sq" #include "../script/api/ai/ai_signlist.hpp.sq" #include "../script/api/ai/ai_station.hpp.sq" @@ -167,6 +168,7 @@ void AIInstance::RegisterAPI() SQAIRail_Register(this->engine); SQAIRailTypeList_Register(this->engine); SQAIRoad_Register(this->engine); + SQAIRoadTypeList_Register(this->engine); SQAISign_Register(this->engine); SQAISignList_Register(this->engine); SQAIStation_Register(this->engine); diff --git a/src/game/game_instance.cpp b/src/game/game_instance.cpp index 26a61a790380b..be093ca00c432 100644 --- a/src/game/game_instance.cpp +++ b/src/game/game_instance.cpp @@ -64,6 +64,7 @@ #include "../script/api/game/game_rail.hpp.sq" #include "../script/api/game/game_railtypelist.hpp.sq" #include "../script/api/game/game_road.hpp.sq" +#include "../script/api/game/game_roadtypelist.hpp.sq" #include "../script/api/game/game_sign.hpp.sq" #include "../script/api/game/game_signlist.hpp.sq" #include "../script/api/game/game_station.hpp.sq" @@ -174,6 +175,7 @@ void GameInstance::RegisterAPI() SQGSRail_Register(this->engine); SQGSRailTypeList_Register(this->engine); SQGSRoad_Register(this->engine); + SQGSRoadTypeList_Register(this->engine); SQGSSign_Register(this->engine); SQGSSignList_Register(this->engine); SQGSStation_Register(this->engine); diff --git a/src/script/api/ai/ai_road.hpp.sq b/src/script/api/ai/ai_road.hpp.sq index 350fcdb7f1b90..eecbd7a087871 100644 --- a/src/script/api/ai/ai_road.hpp.sq +++ b/src/script/api/ai/ai_road.hpp.sq @@ -86,6 +86,7 @@ void SQAIRoad_Register(Squirrel *engine) SQAIRoad.DefSQStaticMethod(engine, &ScriptRoad::RemoveRoadDepot, "RemoveRoadDepot", 2, ".i"); SQAIRoad.DefSQStaticMethod(engine, &ScriptRoad::RemoveRoadStation, "RemoveRoadStation", 2, ".i"); SQAIRoad.DefSQStaticMethod(engine, &ScriptRoad::GetBuildCost, "GetBuildCost", 3, ".ii"); + SQAIRoad.DefSQStaticMethod(engine, &ScriptRoad::IsRoadTypeTram, "IsRoadTypeTram", 2, ".i"); SQAIRoad.DefSQStaticMethod(engine, &ScriptRoad::GetMaxSpeed, "GetMaxSpeed", 2, ".i"); SQAIRoad.DefSQStaticMethod(engine, &ScriptRoad::GetMaintenanceCostFactor, "GetMaintenanceCostFactor", 2, ".i"); diff --git a/src/script/api/ai/ai_roadtypelist.hpp.sq b/src/script/api/ai/ai_roadtypelist.hpp.sq new file mode 100644 index 0000000000000..faf9dd2caf7df --- /dev/null +++ b/src/script/api/ai/ai_roadtypelist.hpp.sq @@ -0,0 +1,25 @@ +/* $Id$ */ + +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . + */ + +/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ + +#include "../script_roadtypelist.hpp" +#include "../template/template_roadtypelist.hpp.sq" + + +template <> const char *GetClassName() { return "AIRoadTypeList"; } + +void SQAIRoadTypeList_Register(Squirrel *engine) +{ + DefSQClass SQAIRoadTypeList("AIRoadTypeList"); + SQAIRoadTypeList.PreRegister(engine, "AIList"); + SQAIRoadTypeList.AddConstructor(engine, "x"); + + SQAIRoadTypeList.PostRegister(engine); +} diff --git a/src/script/api/game/game_road.hpp.sq b/src/script/api/game/game_road.hpp.sq index 650d315046822..aefad4bd96b6a 100644 --- a/src/script/api/game/game_road.hpp.sq +++ b/src/script/api/game/game_road.hpp.sq @@ -86,6 +86,7 @@ void SQGSRoad_Register(Squirrel *engine) SQGSRoad.DefSQStaticMethod(engine, &ScriptRoad::RemoveRoadDepot, "RemoveRoadDepot", 2, ".i"); SQGSRoad.DefSQStaticMethod(engine, &ScriptRoad::RemoveRoadStation, "RemoveRoadStation", 2, ".i"); SQGSRoad.DefSQStaticMethod(engine, &ScriptRoad::GetBuildCost, "GetBuildCost", 3, ".ii"); + SQGSRoad.DefSQStaticMethod(engine, &ScriptRoad::IsRoadTypeTram, "IsRoadTypeTram", 2, ".i"); SQGSRoad.DefSQStaticMethod(engine, &ScriptRoad::GetMaxSpeed, "GetMaxSpeed", 2, ".i"); SQGSRoad.DefSQStaticMethod(engine, &ScriptRoad::GetMaintenanceCostFactor, "GetMaintenanceCostFactor", 2, ".i"); diff --git a/src/script/api/game/game_roadtypelist.hpp.sq b/src/script/api/game/game_roadtypelist.hpp.sq new file mode 100644 index 0000000000000..861fafae629fa --- /dev/null +++ b/src/script/api/game/game_roadtypelist.hpp.sq @@ -0,0 +1,25 @@ +/* $Id$ */ + +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . + */ + +/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ + +#include "../script_roadtypelist.hpp" +#include "../template/template_roadtypelist.hpp.sq" + + +template <> const char *GetClassName() { return "GSRoadTypeList"; } + +void SQGSRoadTypeList_Register(Squirrel *engine) +{ + DefSQClass SQGSRoadTypeList("GSRoadTypeList"); + SQGSRoadTypeList.PreRegister(engine, "GSList"); + SQGSRoadTypeList.AddConstructor(engine, "x"); + + SQGSRoadTypeList.PostRegister(engine); +} diff --git a/src/script/api/script_road.cpp b/src/script/api/script_road.cpp index e9245a6003f9e..7ded57918f15c 100644 --- a/src/script/api/script_road.cpp +++ b/src/script/api/script_road.cpp @@ -626,6 +626,11 @@ static bool NeighbourHasReachableRoad(::RoadTypes rts, TileIndex start_tile, Dia } } +/* static */ bool ScriptRoad::IsRoadTypeTram(RoadType roadtype) +{ + return ::RoadTypeIsTram((::RoadType)roadtype); +} + /* static */ int32 ScriptRoad::GetMaxSpeed(RoadType road_type) { if (!ScriptRoad::IsRoadTypeAvailable(road_type)) return 0; diff --git a/src/script/api/script_road.hpp b/src/script/api/script_road.hpp index b2c449f4f00e8..07fb961104305 100644 --- a/src/script/api/script_road.hpp +++ b/src/script/api/script_road.hpp @@ -537,6 +537,13 @@ class ScriptRoad : public ScriptObject { */ static Money GetBuildCost(RoadType roadtype, BuildType build_type); + /** + * Test if a road type is for trams. + * @param roadtype the roadtype to test. + * @return True if the road type is for trams. + */ + static bool IsRoadTypeTram(RoadType roadtype); + /** * Get the maximum speed of road vehicles running on this roadtype. * @param road_type The roadtype to get the maximum speed of. diff --git a/src/script/api/script_roadtypelist.cpp b/src/script/api/script_roadtypelist.cpp new file mode 100644 index 0000000000000..e891e302c1c7e --- /dev/null +++ b/src/script/api/script_roadtypelist.cpp @@ -0,0 +1,23 @@ +/* $Id$ */ + +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . + */ + +/** @file script_roadtypelist.cpp Implementation of ScriptRoadTypeList and friends. */ + +#include "../../stdafx.h" +#include "script_roadtypelist.hpp" +#include "../../road_func.h" + +#include "../../safeguards.h" + +ScriptRoadTypeList::ScriptRoadTypeList() +{ + for (RoadType rt = ROADTYPE_BEGIN; rt != ROADTYPE_END; rt++) { + if (ScriptObject::GetCompany() == OWNER_DEITY || ::HasRoadTypeAvail(ScriptObject::GetCompany(), rt)) this->AddItem(rt); + } +} diff --git a/src/script/api/script_roadtypelist.hpp b/src/script/api/script_roadtypelist.hpp new file mode 100644 index 0000000000000..244ff4001b779 --- /dev/null +++ b/src/script/api/script_roadtypelist.hpp @@ -0,0 +1,28 @@ +/* $Id$ */ + +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . + */ + +/** @file script_roadtypelist.hpp List all available roadtypes. */ + +#ifndef SCRIPT_ROADTYPELIST_HPP +#define SCRIPT_ROADTYPELIST_HPP + +#include "script_list.hpp" +#include "script_road.hpp" + +/** + * Creates a list of all available roadtypes. + * @api ai game + * @ingroup ScriptList + */ +class ScriptRoadTypeList : public ScriptList { +public: + ScriptRoadTypeList(); +}; + +#endif /* SCRIPT_ROADTYPELIST_HPP */ diff --git a/src/script/api/template/template_roadtypelist.hpp.sq b/src/script/api/template/template_roadtypelist.hpp.sq new file mode 100644 index 0000000000000..5573f8614ff42 --- /dev/null +++ b/src/script/api/template/template_roadtypelist.hpp.sq @@ -0,0 +1,21 @@ +/* $Id$ */ + +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . + */ + +/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ + +#include "../script_roadtypelist.hpp" + +namespace SQConvert { + /* Allow ScriptRoadTypeList to be used as Squirrel parameter */ + template <> inline ScriptRoadTypeList *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptRoadTypeList *)instance; } + template <> inline ScriptRoadTypeList &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptRoadTypeList *)instance; } + template <> inline const ScriptRoadTypeList *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptRoadTypeList *)instance; } + template <> inline const ScriptRoadTypeList &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptRoadTypeList *)instance; } + template <> inline int Return(HSQUIRRELVM vm, ScriptRoadTypeList *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "RoadTypeList", res, nullptr, DefSQDestructorCallback, true); return 1; } +} // namespace SQConvert