mirror of
https://github.com/JGRennison/OpenTTD-patches.git
synced 2024-11-13 07:10:57 +00:00
(svn r6141) -Codechange: introduced DepotID and used it as much as possible
-Codechange: DeleteDepot removes a depot from the pool -Codechange: DestroyDepot is called by DeleteDepot to remove all things where a depot depends on. Last 2 changes to prepare for new pool system. Not pretty now, will be soon. -Codechange: Removed DoDeleteDepot as it was stupid
This commit is contained in:
parent
7a58659fef
commit
f73a2829f3
18
depot.c
18
depot.c
@ -59,7 +59,7 @@ Depot *AllocateDepot(void)
|
||||
* TODO - This is just a temporary stage, this will be removed. */
|
||||
for (d = GetDepot(0); d != NULL; d = (d->index + 1 < GetDepotPoolSize()) ? GetDepot(d->index + 1) : NULL) {
|
||||
if (!IsValidDepot(d)) {
|
||||
uint index = d->index;
|
||||
DepotID index = d->index;
|
||||
|
||||
memset(d, 0, sizeof(Depot));
|
||||
d->index = index;
|
||||
@ -75,26 +75,18 @@ Depot *AllocateDepot(void)
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a depot
|
||||
* Clean up a depot
|
||||
*/
|
||||
void DoDeleteDepot(TileIndex tile)
|
||||
void DestroyDepot(Depot *depot)
|
||||
{
|
||||
Depot *depot;
|
||||
|
||||
/* Get the depot */
|
||||
depot = GetDepotByTile(tile);
|
||||
|
||||
/* Clear the tile */
|
||||
DoClearSquare(tile);
|
||||
|
||||
/* Clear the depot */
|
||||
depot->xy = 0;
|
||||
DoClearSquare(depot->xy);
|
||||
|
||||
/* Clear the depot from all order-lists */
|
||||
RemoveOrderFromAllVehicles(OT_GOTO_DEPOT, depot->index);
|
||||
|
||||
/* Delete the depot-window */
|
||||
DeleteWindowById(WC_VEHICLE_DEPOT, tile);
|
||||
DeleteWindowById(WC_VEHICLE_DEPOT, depot->xy);
|
||||
}
|
||||
|
||||
void InitializeDepots(void)
|
||||
|
21
depot.h
21
depot.h
@ -14,7 +14,7 @@
|
||||
struct Depot {
|
||||
TileIndex xy;
|
||||
TownID town_index;
|
||||
StationID index;
|
||||
DepotID index;
|
||||
};
|
||||
|
||||
extern MemoryPool _depot_pool;
|
||||
@ -22,7 +22,7 @@ extern MemoryPool _depot_pool;
|
||||
/**
|
||||
* Get the pointer to the depot with index 'index'
|
||||
*/
|
||||
static inline Depot *GetDepot(uint index)
|
||||
static inline Depot *GetDepot(DepotID index)
|
||||
{
|
||||
return (Depot*)GetItemFromPool(&_depot_pool, index);
|
||||
}
|
||||
@ -38,9 +38,9 @@ static inline uint16 GetDepotPoolSize(void)
|
||||
/**
|
||||
* Check if a depot really exists.
|
||||
*/
|
||||
static inline bool IsValidDepot(const Depot* depot)
|
||||
static inline bool IsValidDepot(const Depot *depot)
|
||||
{
|
||||
return depot->xy != 0;
|
||||
return depot != NULL && depot->xy != 0;
|
||||
}
|
||||
|
||||
static inline bool IsValidDepotID(uint index)
|
||||
@ -48,6 +48,14 @@ static inline bool IsValidDepotID(uint index)
|
||||
return index < GetDepotPoolSize() && IsValidDepot(GetDepot(index));
|
||||
}
|
||||
|
||||
void DestroyDepot(Depot *depot);
|
||||
|
||||
static inline void DeleteDepot(Depot *depot)
|
||||
{
|
||||
DestroyDepot(depot);
|
||||
depot->xy = 0;
|
||||
}
|
||||
|
||||
#define FOR_ALL_DEPOTS_FROM(d, start) for (d = GetDepot(start); d != NULL; d = (d->index + 1 < GetDepotPoolSize()) ? GetDepot(d->index + 1) : NULL) if (IsValidDepot(d))
|
||||
#define FOR_ALL_DEPOTS(d) FOR_ALL_DEPOTS_FROM(d, 0)
|
||||
|
||||
@ -56,7 +64,8 @@ static inline bool IsValidDepotID(uint index)
|
||||
#define MIN_SERVINT_DAYS 30
|
||||
#define MAX_SERVINT_DAYS 800
|
||||
|
||||
/** Get the service interval domain.
|
||||
/**
|
||||
* Get the service interval domain.
|
||||
* Get the new proposed service interval for the vehicle is indeed, clamped
|
||||
* within the given bounds. @see MIN_SERVINT_PERCENT ,etc.
|
||||
* @param index proposed service interval
|
||||
@ -108,10 +117,8 @@ static inline bool CanBuildDepotByTileh(uint32 direction, Slope tileh)
|
||||
return ((0x4C >> direction) & tileh) != 0;
|
||||
}
|
||||
|
||||
|
||||
Depot *GetDepotByTile(TileIndex tile);
|
||||
void InitializeDepots(void);
|
||||
Depot *AllocateDepot(void);
|
||||
void DoDeleteDepot(TileIndex tile);
|
||||
|
||||
#endif /* DEPOT_H */
|
||||
|
@ -39,6 +39,7 @@ typedef uint16 VehicleID;
|
||||
typedef uint16 StationID;
|
||||
typedef uint16 TownID;
|
||||
typedef uint16 IndustryID;
|
||||
typedef uint16 DepotID;
|
||||
typedef byte PlayerID;
|
||||
typedef byte OrderID;
|
||||
typedef byte CargoID;
|
||||
|
@ -975,7 +975,7 @@ static int32 RemoveTrainDepot(TileIndex tile, uint32 flags)
|
||||
if (flags & DC_EXEC) {
|
||||
DiagDirection dir = GetRailDepotDirection(tile);
|
||||
|
||||
DoDeleteDepot(tile);
|
||||
DeleteDepot(GetDepotByTile(tile));
|
||||
UpdateSignalsOnSegment(tile, dir);
|
||||
YapfNotifyTrackLayoutChange(tile, TrackdirToTrack(DiagdirToDiagTrackdir(dir)));
|
||||
}
|
||||
|
@ -603,7 +603,7 @@ static int32 RemoveRoadDepot(TileIndex tile, uint32 flags)
|
||||
|
||||
if (!EnsureNoVehicle(tile)) return CMD_ERROR;
|
||||
|
||||
if (flags & DC_EXEC) DoDeleteDepot(tile);
|
||||
if (flags & DC_EXEC) DeleteDepot(GetDepotByTile(tile));
|
||||
|
||||
return _price.remove_road_depot;
|
||||
}
|
||||
|
@ -103,7 +103,7 @@ static int32 RemoveShipDepot(TileIndex tile, uint32 flags)
|
||||
|
||||
if (flags & DC_EXEC) {
|
||||
/* Kill the depot, which is registered at the northernmost tile. Use that one */
|
||||
DoDeleteDepot(tile2 < tile ? tile2 : tile);
|
||||
DeleteDepot(GetDepotByTile(tile2 < tile ? tile2 : tile));
|
||||
|
||||
MakeWater(tile);
|
||||
MakeWater(tile2);
|
||||
|
Loading…
Reference in New Issue
Block a user