mirror of
https://github.com/OpenTTD/OpenTTD.git
synced 2025-03-06 06:15:04 +00:00
(svn r18725) -Add: [NoAI] AIWaypoint::WaypointType and AIWaypoint::HasWaypointType().
-Change: [NoAI] Constructor of AIWaypoint now takes a WaypointType to also handle buoys. -Remove: [NoAI] AIBuoyList.
This commit is contained in:
parent
27fc22a76b
commit
1ed599f5cf
@ -250,3 +250,11 @@ AIEngine.GetPlaneType <- function(engine_id)
|
||||
if (!AIEngine.IsBuildable(engine_id)) return -1;
|
||||
return AIEngine._GetPlaneType(engine_id);
|
||||
}
|
||||
|
||||
_AIWaypointList <- AIWaypointList;
|
||||
class AIWaypointList extends _AIWaypointList {
|
||||
constructor()
|
||||
{
|
||||
::_AIWaypointList.constructor(AIWaypoint.WAYPOINT_RAIL);
|
||||
}
|
||||
}
|
||||
|
@ -805,13 +805,17 @@ function Regression::Marine()
|
||||
print(" IsCanalTile(): " + AIMarine.IsCanalTile(32127));
|
||||
print(" GetBankBalance(): " + AICompany.GetBankBalance(AICompany.COMPANY_SELF));
|
||||
|
||||
local list = AIBuoyList();
|
||||
local list = AIWaypointList(AIWaypoint.WAYPOINT_BUOY);
|
||||
print("");
|
||||
print("--AIBuoyList--");
|
||||
print("--AIWaypointList(BUOY)--");
|
||||
print(" Count(): " + list.Count());
|
||||
print(" Location ListDump:");
|
||||
for (local i = list.Begin(); list.HasNext(); i = list.Next()) {
|
||||
print(" " + i);
|
||||
print(" " + AIWaypoint.GetLocation(i));
|
||||
}
|
||||
print(" HasWaypointType:");
|
||||
for (local i = list.Begin(); list.HasNext(); i = list.Next()) {
|
||||
print(" " + AIWaypoint.HasWaypointType(i, AIWaypoint.WAYPOINT_RAIL) + " " + AIWaypoint.HasWaypointType(i, AIWaypoint.WAYPOINT_BUOY) + " " + AIWaypoint.HasWaypointType(i, AIWaypoint.WAYPOINT_ANY));
|
||||
}
|
||||
print("");
|
||||
|
||||
|
@ -7100,10 +7100,12 @@
|
||||
IsCanalTile(): true
|
||||
GetBankBalance(): 1999951154
|
||||
|
||||
--AIBuoyList--
|
||||
--AIWaypointList(BUOY)--
|
||||
Count(): 1
|
||||
Location ListDump:
|
||||
28481
|
||||
HasWaypointType:
|
||||
false true false
|
||||
|
||||
RemoveWaterDepot(): true
|
||||
RemoveDock(): true
|
||||
|
@ -2639,10 +2639,6 @@
|
||||
RelativePath=".\..\src\ai\api\ai_bridgelist.hpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\..\src\ai\api\ai_buoylist.hpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\..\src\ai\api\ai_cargo.hpp"
|
||||
>
|
||||
@ -2863,10 +2859,6 @@
|
||||
RelativePath=".\..\src\ai\api\ai_bridgelist.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\..\src\ai\api\ai_buoylist.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\..\src\ai\api\ai_cargo.cpp"
|
||||
>
|
||||
|
@ -2636,10 +2636,6 @@
|
||||
RelativePath=".\..\src\ai\api\ai_bridgelist.hpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\..\src\ai\api\ai_buoylist.hpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\..\src\ai\api\ai_cargo.hpp"
|
||||
>
|
||||
@ -2860,10 +2856,6 @@
|
||||
RelativePath=".\..\src\ai\api\ai_bridgelist.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\..\src\ai\api\ai_buoylist.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\..\src\ai\api\ai_cargo.cpp"
|
||||
>
|
||||
|
@ -597,7 +597,6 @@ ai/api/ai_base.hpp
|
||||
ai/api/ai_basestation.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_changelog.hpp
|
||||
@ -654,7 +653,6 @@ ai/api/ai_base.cpp
|
||||
ai/api/ai_basestation.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
|
||||
|
@ -35,7 +35,6 @@
|
||||
#include "api/ai_basestation.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"
|
||||
@ -177,7 +176,6 @@ 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);
|
||||
|
@ -1,21 +0,0 @@
|
||||
/* $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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/** @file ai_buoylist.cpp Implementation of AIBuoyList and friends. */
|
||||
|
||||
#include "ai_buoylist.hpp"
|
||||
#include "../../waypoint_base.h"
|
||||
|
||||
AIBuoyList::AIBuoyList()
|
||||
{
|
||||
Waypoint *wp;
|
||||
FOR_ALL_WAYPOINTS(wp) {
|
||||
if (wp->facilities & FACIL_DOCK) this->AddItem(wp->xy);
|
||||
}
|
||||
}
|
@ -1,28 +0,0 @@
|
||||
/* $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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/** @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 */
|
@ -1,30 +0,0 @@
|
||||
/* $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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/* 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<AIBuoyList *>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (AIBuoyList *)instance; }
|
||||
template <> AIBuoyList &GetParam(ForceType<AIBuoyList &>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIBuoyList *)instance; }
|
||||
template <> const AIBuoyList *GetParam(ForceType<const AIBuoyList *>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (AIBuoyList *)instance; }
|
||||
template <> const AIBuoyList &GetParam(ForceType<const AIBuoyList &>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIBuoyList *)instance; }
|
||||
template <> int Return<AIBuoyList *>(HSQUIRRELVM vm, AIBuoyList *res) { if (res == NULL) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "AIBuoyList", res, NULL, DefSQDestructorCallback<AIBuoyList>); return 1; }
|
||||
}; // namespace SQConvert
|
||||
|
||||
void SQAIBuoyList_Register(Squirrel *engine)
|
||||
{
|
||||
DefSQClass <AIBuoyList> SQAIBuoyList("AIBuoyList");
|
||||
SQAIBuoyList.PreRegister(engine, "AIAbstractList");
|
||||
SQAIBuoyList.AddConstructor<void (AIBuoyList::*)(), 1>(engine, "x");
|
||||
|
||||
SQAIBuoyList.PostRegister(engine);
|
||||
}
|
@ -20,7 +20,6 @@
|
||||
*
|
||||
* API additions:
|
||||
* \li AIBaseStation
|
||||
* \li AIBuoyList
|
||||
* \li AIEngine::IsBuildable
|
||||
* \li AIEventCompanyAskMerger
|
||||
* \li AIIndustry::GetLastMonthTransportedPercentage
|
||||
@ -34,6 +33,8 @@
|
||||
* \li AISubsidy::GetDestinationIndex
|
||||
* \li AITown::GetLastMonthTransportedPercentage
|
||||
* \li AIVehicleList_Depot
|
||||
* \li AIWaypoint::WaypointType
|
||||
* \li AIWaypoint::HasWaypointType
|
||||
* \li Some error messages to AIWaypoint
|
||||
*
|
||||
* API removals:
|
||||
@ -59,6 +60,8 @@
|
||||
* AIBaseStation, but can still be used as AIStation.GetConstructionDate
|
||||
* \li WaypointID was replaced by StationID. All WaypointIDs from previous
|
||||
* savegames are invalid. Use STATION_INVALID instead of WAYPOINT_INVALID
|
||||
* \li AIWaypointList constructor now needs a WaypointType similiar to AIStationList,
|
||||
* it can also handle buoys.
|
||||
* \li AIVehicleList_Station now also works for waypoints
|
||||
* \li Stations can be build over rail without signals that is in the right
|
||||
* direction for the to-be built station. It will also convert the rail if
|
||||
|
@ -11,18 +11,27 @@
|
||||
|
||||
#include "ai_waypoint.hpp"
|
||||
#include "ai_rail.hpp"
|
||||
#include "ai_marine.hpp"
|
||||
#include "../../company_func.h"
|
||||
#include "../../waypoint_base.h"
|
||||
|
||||
/* static */ bool AIWaypoint::IsValidWaypoint(StationID waypoint_id)
|
||||
{
|
||||
const Waypoint *wp = ::Waypoint::GetIfValid(waypoint_id);
|
||||
return wp != NULL && wp->owner == _current_company;
|
||||
return wp != NULL && (wp->owner == _current_company || wp->owner == OWNER_NONE);
|
||||
}
|
||||
|
||||
/* static */ StationID AIWaypoint::GetWaypointID(TileIndex tile)
|
||||
{
|
||||
if (!AIRail::IsRailWaypointTile(tile)) return STATION_INVALID;
|
||||
if (!AIRail::IsRailWaypointTile(tile) && !AIMarine::IsBuoyTile(tile)) return STATION_INVALID;
|
||||
|
||||
return ::GetStationIndex(tile);
|
||||
}
|
||||
|
||||
/* static */ bool AIWaypoint::HasWaypointType(StationID waypoint_id, WaypointType waypoint_type)
|
||||
{
|
||||
if (!IsValidWaypoint(waypoint_id)) return false;
|
||||
if (CountBits(waypoint_type) != 1) return false;
|
||||
|
||||
return (::Waypoint::Get(waypoint_id)->facilities & waypoint_type) != 0;
|
||||
}
|
||||
|
@ -23,6 +23,16 @@ class AIWaypoint : public AIBaseStation {
|
||||
public:
|
||||
static const char *GetClassName() { return "AIWaypoint"; }
|
||||
|
||||
/**
|
||||
* Type of waypoints known in the game.
|
||||
*/
|
||||
enum WaypointType {
|
||||
/* Values are important, as they represent the internal state of the game. */
|
||||
WAYPOINT_RAIL = 0x01, //!< Rail waypoint
|
||||
WAYPOINT_BUOY = 0x10, //!< Buoy
|
||||
WAYPOINT_ANY = 0x11, //!< All waypoint types
|
||||
};
|
||||
|
||||
/**
|
||||
* All waypoint related error messages.
|
||||
*/
|
||||
@ -51,6 +61,16 @@ public:
|
||||
* @return StationID of the waypoint.
|
||||
*/
|
||||
static StationID GetWaypointID(TileIndex tile);
|
||||
|
||||
/**
|
||||
* Check if any part of the waypoint contains a waypoint of the type waypoint_type
|
||||
* @param waypoint_id The waypoint to look at.
|
||||
* @param waypoint_type The WaypointType to look for.
|
||||
* @return True if the waypoint has a waypoint part of the type waypoint_type.
|
||||
*/
|
||||
static bool HasWaypointType(StationID waypoint_id, WaypointType waypoint_type);
|
||||
};
|
||||
|
||||
DECLARE_ENUM_AS_BIT_SET(AIWaypoint::WaypointType);
|
||||
|
||||
#endif /* AI_WAYPOINT_HPP */
|
||||
|
@ -13,6 +13,8 @@
|
||||
|
||||
namespace SQConvert {
|
||||
/* Allow enums to be used as Squirrel parameters */
|
||||
template <> AIWaypoint::WaypointType GetParam(ForceType<AIWaypoint::WaypointType>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (AIWaypoint::WaypointType)tmp; }
|
||||
template <> int Return<AIWaypoint::WaypointType>(HSQUIRRELVM vm, AIWaypoint::WaypointType res) { sq_pushinteger(vm, (int32)res); return 1; }
|
||||
template <> AIWaypoint::ErrorMessages GetParam(ForceType<AIWaypoint::ErrorMessages>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (AIWaypoint::ErrorMessages)tmp; }
|
||||
template <> int Return<AIWaypoint::ErrorMessages>(HSQUIRRELVM vm, AIWaypoint::ErrorMessages res) { sq_pushinteger(vm, (int32)res); return 1; }
|
||||
|
||||
@ -30,6 +32,9 @@ void SQAIWaypoint_Register(Squirrel *engine)
|
||||
SQAIWaypoint.PreRegister(engine, "AIBaseStation");
|
||||
SQAIWaypoint.AddConstructor<void (AIWaypoint::*)(), 1>(engine, "x");
|
||||
|
||||
SQAIWaypoint.DefSQConst(engine, AIWaypoint::WAYPOINT_RAIL, "WAYPOINT_RAIL");
|
||||
SQAIWaypoint.DefSQConst(engine, AIWaypoint::WAYPOINT_BUOY, "WAYPOINT_BUOY");
|
||||
SQAIWaypoint.DefSQConst(engine, AIWaypoint::WAYPOINT_ANY, "WAYPOINT_ANY");
|
||||
SQAIWaypoint.DefSQConst(engine, AIWaypoint::ERR_WAYPOINT_BASE, "ERR_WAYPOINT_BASE");
|
||||
SQAIWaypoint.DefSQConst(engine, AIWaypoint::ERR_WAYPOINT_TOO_CLOSE_TO_ANOTHER_WAYPOINT, "ERR_WAYPOINT_TOO_CLOSE_TO_ANOTHER_WAYPOINT");
|
||||
SQAIWaypoint.DefSQConst(engine, AIWaypoint::ERR_WAYPOINT_ADJOINS_MULTIPLE_WAYPOINTS, "ERR_WAYPOINT_ADJOINS_MULTIPLE_WAYPOINTS");
|
||||
@ -42,6 +47,7 @@ void SQAIWaypoint_Register(Squirrel *engine)
|
||||
|
||||
SQAIWaypoint.DefSQStaticMethod(engine, &AIWaypoint::IsValidWaypoint, "IsValidWaypoint", 2, ".i");
|
||||
SQAIWaypoint.DefSQStaticMethod(engine, &AIWaypoint::GetWaypointID, "GetWaypointID", 2, ".i");
|
||||
SQAIWaypoint.DefSQStaticMethod(engine, &AIWaypoint::HasWaypointType, "HasWaypointType", 3, ".ii");
|
||||
|
||||
SQAIWaypoint.PostRegister(engine);
|
||||
}
|
||||
|
@ -15,11 +15,12 @@
|
||||
#include "../../vehicle_base.h"
|
||||
#include "../../waypoint_base.h"
|
||||
|
||||
AIWaypointList::AIWaypointList()
|
||||
AIWaypointList::AIWaypointList(AIWaypoint::WaypointType waypoint_type)
|
||||
{
|
||||
const Waypoint *wp;
|
||||
FOR_ALL_WAYPOINTS(wp) {
|
||||
if (wp->facilities & FACIL_TRAIN && wp->owner == _current_company) this->AddItem(wp->index);
|
||||
if ((wp->facilities & waypoint_type) &&
|
||||
(wp->owner == _current_company || wp->owner == OWNER_NONE)) this->AddItem(wp->index);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -13,6 +13,7 @@
|
||||
#define AI_WAYPOINTLIST_HPP
|
||||
|
||||
#include "ai_abstractlist.hpp"
|
||||
#include "ai_waypoint.hpp"
|
||||
|
||||
/**
|
||||
* Creates a list of waypoints of which you are the owner.
|
||||
@ -22,7 +23,10 @@ class AIWaypointList : public AIAbstractList {
|
||||
public:
|
||||
static const char *GetClassName() { return "AIWaypointList"; }
|
||||
|
||||
AIWaypointList();
|
||||
/**
|
||||
* @param waypoint_type The type of waypoint to make a list of waypoints for.
|
||||
*/
|
||||
AIWaypointList(AIWaypoint::WaypointType waypoint_type);
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -24,7 +24,7 @@ void SQAIWaypointList_Register(Squirrel *engine)
|
||||
{
|
||||
DefSQClass <AIWaypointList> SQAIWaypointList("AIWaypointList");
|
||||
SQAIWaypointList.PreRegister(engine, "AIAbstractList");
|
||||
SQAIWaypointList.AddConstructor<void (AIWaypointList::*)(), 1>(engine, "x");
|
||||
SQAIWaypointList.AddConstructor<void (AIWaypointList::*)(AIWaypoint::WaypointType waypoint_type), 2>(engine, "xi");
|
||||
|
||||
SQAIWaypointList.PostRegister(engine);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user