mirror of
https://github.com/OpenTTD/OpenTTD.git
synced 2025-02-12 09:38:28 +00:00
(svn r17486) -Add [NoAI]: a vehicle list for all vehicle that are ordered to a specific depot
This commit is contained in:
parent
f1cc044a40
commit
f3f6eaa6dc
@ -244,6 +244,7 @@ void AIInstance::RegisterAPI()
|
||||
SQAIVehicle_Register(this->engine);
|
||||
SQAIVehicleList_Register(this->engine);
|
||||
SQAIVehicleList_DefaultGroup_Register(this->engine);
|
||||
SQAIVehicleList_Depot_Register(this->engine);
|
||||
SQAIVehicleList_Group_Register(this->engine);
|
||||
SQAIVehicleList_SharedOrders_Register(this->engine);
|
||||
SQAIVehicleList_Station_Register(this->engine);
|
||||
|
@ -22,6 +22,7 @@
|
||||
* \li AIBaseStation
|
||||
* \li AIBuoyList
|
||||
* \li AIEventCompanyAskMerger
|
||||
* \li AIIndustry::GetLastMonthTransportedPercentage
|
||||
* \li AIRail::RemoveRailStationTileRectangle
|
||||
* \li AIRail::RemoveRailWaypointTileRectangle
|
||||
* \li AISubsidy::SubsidyParticipantType
|
||||
@ -30,7 +31,7 @@
|
||||
* \li AISubsidy::GetDestinationType
|
||||
* \li AISubsidy::GetDestinationIndex
|
||||
* \li AITown::GetLastMonthTransportedPercentage
|
||||
* \li AIIndustry::GetLastMonthTransportedPercentage
|
||||
* \li AIVehicleList_Depot
|
||||
*
|
||||
* API removals:
|
||||
* \li AIOrder::ChangeOrder, use AIOrder::SetOrderFlags instead
|
||||
|
@ -11,9 +11,12 @@
|
||||
|
||||
#include "ai_vehiclelist.hpp"
|
||||
#include "ai_group.hpp"
|
||||
#include "ai_map.hpp"
|
||||
#include "ai_station.hpp"
|
||||
#include "ai_vehicle.hpp"
|
||||
#include "../../company_func.h"
|
||||
#include "../../depot_base.h"
|
||||
#include "../../depot_map.h"
|
||||
#include "../../vehicle_base.h"
|
||||
|
||||
AIVehicleList::AIVehicleList()
|
||||
@ -43,6 +46,57 @@ AIVehicleList_Station::AIVehicleList_Station(StationID station_id)
|
||||
}
|
||||
}
|
||||
|
||||
AIVehicleList_Depot::AIVehicleList_Depot(TileIndex tile)
|
||||
{
|
||||
if (!AIMap::IsValidTile(tile)) return;
|
||||
|
||||
DestinationID dest;
|
||||
VehicleType type;
|
||||
|
||||
switch (GetTileType(tile)) {
|
||||
case MP_STATION: // Aircraft
|
||||
if (!IsAirport(tile)) return;
|
||||
type = VEH_AIRCRAFT;
|
||||
dest = GetStationIndex(tile);
|
||||
break;
|
||||
|
||||
case MP_RAILWAY:
|
||||
if (!IsRailDepot(tile)) return;
|
||||
type = VEH_TRAIN;
|
||||
dest = Depot::GetByTile(tile)->index;
|
||||
break;
|
||||
|
||||
case MP_ROAD:
|
||||
if (!IsRoadDepot(tile)) return;
|
||||
type = VEH_ROAD;
|
||||
dest = Depot::GetByTile(tile)->index;
|
||||
break;
|
||||
|
||||
case MP_WATER:
|
||||
if (!IsShipDepot(tile)) return;
|
||||
type = VEH_SHIP;
|
||||
dest = Depot::GetByTile(min(tile, GetOtherShipDepotTile(tile)))->index;
|
||||
break;
|
||||
|
||||
default: // No depot
|
||||
return;
|
||||
}
|
||||
|
||||
const Vehicle *v;
|
||||
FOR_ALL_VEHICLES(v) {
|
||||
if (v->owner == _current_company && v->IsPrimaryVehicle() && v->type == type) {
|
||||
const Order *order;
|
||||
|
||||
FOR_VEHICLE_ORDERS(v, order) {
|
||||
if (order->IsType(OT_GOTO_DEPOT) && order->GetDestination() == dest) {
|
||||
this->AddItem(v->index);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
AIVehicleList_SharedOrders::AIVehicleList_SharedOrders(VehicleID vehicle_id)
|
||||
{
|
||||
if (!AIVehicle::IsValidVehicle(vehicle_id)) return;
|
||||
|
@ -40,6 +40,24 @@ public:
|
||||
AIVehicleList_Station(StationID station_id);
|
||||
};
|
||||
|
||||
/**
|
||||
* Creates a list of vehicles that have orders to a given depot.
|
||||
* The list is created with a tile. If the tile is part of an airport all
|
||||
* aircraft having a depot order on a hangar of that airport will be
|
||||
* returned. For all other vehicle types the tile has to be a depot or
|
||||
* an empty list will be returned.
|
||||
* @ingroup AIList
|
||||
*/
|
||||
class AIVehicleList_Depot : public AIAbstractList {
|
||||
public:
|
||||
static const char *GetClassName() { return "AIVehicleList_Depot"; }
|
||||
|
||||
/**
|
||||
* @param tile The tile of the depot to get the list of vehicles from, which have orders to it.
|
||||
*/
|
||||
AIVehicleList_Depot(TileIndex tile);
|
||||
};
|
||||
|
||||
/**
|
||||
* Creates a list of vehicles that share orders.
|
||||
* @ingroup AIList
|
||||
|
@ -45,6 +45,23 @@ void SQAIVehicleList_Station_Register(Squirrel *engine) {
|
||||
SQAIVehicleList_Station.PostRegister(engine);
|
||||
}
|
||||
|
||||
namespace SQConvert {
|
||||
/* Allow AIVehicleList_Depot to be used as Squirrel parameter */
|
||||
template <> AIVehicleList_Depot *GetParam(ForceType<AIVehicleList_Depot *>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (AIVehicleList_Depot *)instance; }
|
||||
template <> AIVehicleList_Depot &GetParam(ForceType<AIVehicleList_Depot &>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIVehicleList_Depot *)instance; }
|
||||
template <> const AIVehicleList_Depot *GetParam(ForceType<const AIVehicleList_Depot *>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (AIVehicleList_Depot *)instance; }
|
||||
template <> const AIVehicleList_Depot &GetParam(ForceType<const AIVehicleList_Depot &>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIVehicleList_Depot *)instance; }
|
||||
template <> int Return<AIVehicleList_Depot *>(HSQUIRRELVM vm, AIVehicleList_Depot *res) { if (res == NULL) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "AIVehicleList_Depot", res, NULL, DefSQDestructorCallback<AIVehicleList_Depot>); return 1; }
|
||||
}; // namespace SQConvert
|
||||
|
||||
void SQAIVehicleList_Depot_Register(Squirrel *engine) {
|
||||
DefSQClass <AIVehicleList_Depot> SQAIVehicleList_Depot("AIVehicleList_Depot");
|
||||
SQAIVehicleList_Depot.PreRegister(engine, "AIAbstractList");
|
||||
SQAIVehicleList_Depot.AddConstructor<void (AIVehicleList_Depot::*)(TileIndex tile), 2>(engine, "xi");
|
||||
|
||||
SQAIVehicleList_Depot.PostRegister(engine);
|
||||
}
|
||||
|
||||
namespace SQConvert {
|
||||
/* Allow AIVehicleList_SharedOrders to be used as Squirrel parameter */
|
||||
template <> AIVehicleList_SharedOrders *GetParam(ForceType<AIVehicleList_SharedOrders *>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (AIVehicleList_SharedOrders *)instance; }
|
||||
|
Loading…
Reference in New Issue
Block a user