mirror of https://github.com/OpenTTD/OpenTTD
(svn r2256) - Fix: Trains cannot find a depot when they are in a tunnel. (glx)
- Add: GetVehicleTrackdir() helper function. - Codechange: Moved SortStruct from vehicle_gui.h to ttd.h, so the dependency from vehicle.h on vehicle_gui.h could be removed. - Codechange: Typedeffed the VehicleTypes struct so it can be used as the type for Vehicle.type instead of "byte". - Codechange: Removed prototype for VehicleSorter(), which had no implementation anymore and was never called.release/0.4.5
parent
2ab5eee78b
commit
6eb094c726
|
@ -13,6 +13,7 @@
|
||||||
#include "sound.h"
|
#include "sound.h"
|
||||||
#include "player.h"
|
#include "player.h"
|
||||||
#include "airport.h"
|
#include "airport.h"
|
||||||
|
#include "vehicle_gui.h"
|
||||||
|
|
||||||
static bool AirportMove(Vehicle *v, const AirportFTAClass *Airport);
|
static bool AirportMove(Vehicle *v, const AirportFTAClass *Airport);
|
||||||
static bool AirportSetBlocks(Vehicle *v, AirportFTA *current_pos, const AirportFTAClass *Airport);
|
static bool AirportSetBlocks(Vehicle *v, AirportFTA *current_pos, const AirportFTAClass *Airport);
|
||||||
|
|
1
misc.c
1
misc.c
|
@ -12,6 +12,7 @@
|
||||||
#include "network_data.h"
|
#include "network_data.h"
|
||||||
#include "network_server.h"
|
#include "network_server.h"
|
||||||
#include "engine.h"
|
#include "engine.h"
|
||||||
|
#include "vehicle_gui.h"
|
||||||
|
|
||||||
extern void StartupEconomy(void);
|
extern void StartupEconomy(void);
|
||||||
extern void InitNewsItemStructs(void);
|
extern void InitNewsItemStructs(void);
|
||||||
|
|
|
@ -1291,6 +1291,9 @@ void NetworkPopulateCompanyInfo(void)
|
||||||
case VEH_Ship:
|
case VEH_Ship:
|
||||||
_network_player_info[v->owner].num_vehicle[4]++;
|
_network_player_info[v->owner].num_vehicle[4]++;
|
||||||
break;
|
break;
|
||||||
|
case VEH_Special:
|
||||||
|
case VEH_Disaster:
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
#include "player.h"
|
#include "player.h"
|
||||||
#include "news.h"
|
#include "news.h"
|
||||||
#include "saveload.h"
|
#include "saveload.h"
|
||||||
|
#include "vehicle_gui.h"
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
/* Max orders: 64000 (64 * 1000) */
|
/* Max orders: 64000 (64 * 1000) */
|
||||||
|
|
|
@ -118,6 +118,8 @@ static void DrawOrdersWindow(Window *w)
|
||||||
case VEH_Train: s = STR_880E_GO_TO_TRAIN_DEPOT; break;
|
case VEH_Train: s = STR_880E_GO_TO_TRAIN_DEPOT; break;
|
||||||
case VEH_Road: s = STR_9038_GO_TO_ROADVEH_DEPOT; break;
|
case VEH_Road: s = STR_9038_GO_TO_ROADVEH_DEPOT; break;
|
||||||
case VEH_Ship: s = STR_GO_TO_SHIP_DEPOT; break;
|
case VEH_Ship: s = STR_GO_TO_SHIP_DEPOT; break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (v->type == VEH_Train && order->flags & OF_NON_STOP)
|
if (v->type == VEH_Train && order->flags & OF_NON_STOP)
|
||||||
|
|
|
@ -15,6 +15,7 @@
|
||||||
#include "player.h"
|
#include "player.h"
|
||||||
#include "sound.h"
|
#include "sound.h"
|
||||||
#include "depot.h"
|
#include "depot.h"
|
||||||
|
#include "vehicle_gui.h"
|
||||||
|
|
||||||
void ShowRoadVehViewWindow(Vehicle *v);
|
void ShowRoadVehViewWindow(Vehicle *v);
|
||||||
|
|
||||||
|
@ -316,7 +317,7 @@ static Depot *FindClosestRoadDepot(Vehicle *v)
|
||||||
* v->direction won't contain anything usefule than */
|
* v->direction won't contain anything usefule than */
|
||||||
trackdir = _dir_to_diag_trackdir[GetRoadStationDir(tile)];
|
trackdir = _dir_to_diag_trackdir[GetRoadStationDir(tile)];
|
||||||
else
|
else
|
||||||
trackdir = _dir_to_diag_trackdir[(v->direction>>1)&3];
|
trackdir = GetVehicleTrackdir(v);
|
||||||
|
|
||||||
ftd = NPFRouteToDepotBreadthFirst(v->tile, trackdir, TRANSPORT_ROAD, v->owner);
|
ftd = NPFRouteToDepotBreadthFirst(v->tile, trackdir, TRANSPORT_ROAD, v->owner);
|
||||||
if (ftd.best_bird_dist == 0)
|
if (ftd.best_bird_dist == 0)
|
||||||
|
@ -1160,7 +1161,8 @@ found_best_track:;
|
||||||
static uint RoadFindPathToStation(const Vehicle *v, TileIndex tile)
|
static uint RoadFindPathToStation(const Vehicle *v, TileIndex tile)
|
||||||
{
|
{
|
||||||
NPFFindStationOrTileData fstd;
|
NPFFindStationOrTileData fstd;
|
||||||
byte trackdir = _dir_to_diag_trackdir[(v->direction >> 1) & 3];
|
byte trackdir = GetVehicleTrackdir(v);
|
||||||
|
assert(trackdir != 0xFF);
|
||||||
|
|
||||||
fstd.dest_coords = tile;
|
fstd.dest_coords = tile;
|
||||||
fstd.station_index = -1; // indicates that the destination is a tile, not a station
|
fstd.station_index = -1; // indicates that the destination is a tile, not a station
|
||||||
|
|
10
ship_cmd.c
10
ship_cmd.c
|
@ -73,7 +73,7 @@ static Depot *FindClosestShipDepot(Vehicle *v)
|
||||||
|
|
||||||
if (_patches.new_pathfinding_all) {
|
if (_patches.new_pathfinding_all) {
|
||||||
NPFFoundTargetData ftd;
|
NPFFoundTargetData ftd;
|
||||||
byte trackdir = _track_direction_to_trackdir[FIND_FIRST_BIT(v->u.ship.state)][v->direction];
|
byte trackdir = GetVehicleTrackdir(v);
|
||||||
ftd = NPFRouteToDepotTrialError(v->tile, trackdir, TRANSPORT_WATER, v->owner);
|
ftd = NPFRouteToDepotTrialError(v->tile, trackdir, TRANSPORT_WATER, v->owner);
|
||||||
if (ftd.best_bird_dist == 0)
|
if (ftd.best_bird_dist == 0)
|
||||||
best_depot = GetDepotByTile(ftd.node.tile); /* Found target */
|
best_depot = GetDepotByTile(ftd.node.tile); /* Found target */
|
||||||
|
@ -567,14 +567,12 @@ static int ChooseShipTrack(Vehicle *v, uint tile, int enterdir, uint tracks)
|
||||||
NPFFindStationOrTileData fstd;
|
NPFFindStationOrTileData fstd;
|
||||||
NPFFoundTargetData ftd;
|
NPFFoundTargetData ftd;
|
||||||
uint src_tile = TILE_ADD(tile, TileOffsByDir(_reverse_dir[enterdir]));
|
uint src_tile = TILE_ADD(tile, TileOffsByDir(_reverse_dir[enterdir]));
|
||||||
byte track = FIND_FIRST_BIT(v->u.ship.state);
|
byte trackdir = GetVehicleTrackdir(v);
|
||||||
assert (KILL_FIRST_BIT(v->u.ship.state) == 0); /* Check that only one bit is set in state */
|
assert (trackdir != 0xFF); /* Check that we are not in a depot */
|
||||||
assert (v->u.ship.state != 0x80); /* Check that we are not in a depot */
|
|
||||||
assert (track < 6);
|
|
||||||
|
|
||||||
NPFFillWithOrderData(&fstd, v);
|
NPFFillWithOrderData(&fstd, v);
|
||||||
|
|
||||||
ftd = NPFRouteToStationOrTile(src_tile, _track_direction_to_trackdir[track][v->direction], &fstd, TRANSPORT_WATER, v->owner);
|
ftd = NPFRouteToStationOrTile(src_tile, trackdir, &fstd, TRANSPORT_WATER, v->owner);
|
||||||
|
|
||||||
if (ftd.best_trackdir != 0xff)
|
if (ftd.best_trackdir != 0xff)
|
||||||
/* If ftd.best_bird_dist is 0, we found our target and ftd.best_trackdir contains
|
/* If ftd.best_bird_dist is 0, we found our target and ftd.best_trackdir contains
|
||||||
|
|
10
train_cmd.c
10
train_cmd.c
|
@ -16,6 +16,7 @@
|
||||||
#include "sound.h"
|
#include "sound.h"
|
||||||
#include "depot.h"
|
#include "depot.h"
|
||||||
#include "waypoint.h"
|
#include "waypoint.h"
|
||||||
|
#include "vehicle_gui.h"
|
||||||
|
|
||||||
#define is_firsthead_sprite(spritenum) \
|
#define is_firsthead_sprite(spritenum) \
|
||||||
(is_custom_sprite(spritenum) \
|
(is_custom_sprite(spritenum) \
|
||||||
|
@ -1317,7 +1318,8 @@ static TrainFindDepotData FindClosestTrainDepot(Vehicle *v)
|
||||||
|
|
||||||
if (_patches.new_pathfinding_all) {
|
if (_patches.new_pathfinding_all) {
|
||||||
NPFFoundTargetData ftd;
|
NPFFoundTargetData ftd;
|
||||||
byte trackdir = _track_direction_to_trackdir[FIND_FIRST_BIT(v->u.rail.track)][v->direction];
|
byte trackdir = GetVehicleTrackdir(v);
|
||||||
|
assert (trackdir != 0xFF);
|
||||||
ftd = NPFRouteToDepotBreadthFirst(v->tile, trackdir, TRANSPORT_RAIL, v->owner);
|
ftd = NPFRouteToDepotBreadthFirst(v->tile, trackdir, TRANSPORT_RAIL, v->owner);
|
||||||
if (ftd.best_bird_dist == 0) {
|
if (ftd.best_bird_dist == 0) {
|
||||||
/* Found target */
|
/* Found target */
|
||||||
|
@ -1668,7 +1670,7 @@ static byte ChooseTrainTrack(Vehicle *v, uint tile, int enterdir, byte trackbits
|
||||||
|
|
||||||
NPFFillWithOrderData(&fstd, v);
|
NPFFillWithOrderData(&fstd, v);
|
||||||
/* The enterdir for the new tile, is the exitdir for the old tile */
|
/* The enterdir for the new tile, is the exitdir for the old tile */
|
||||||
trackdir = _track_exitdir_to_trackdir[FIND_FIRST_BIT(v->u.rail.track)][enterdir];
|
trackdir = GetVehicleTrackdir(v);
|
||||||
assert(trackdir != 0xff);
|
assert(trackdir != 0xff);
|
||||||
|
|
||||||
ftd = NPFRouteToStationOrTile(tile - TileOffsByDir(enterdir), trackdir, &fstd, TRANSPORT_RAIL, v->owner);
|
ftd = NPFRouteToStationOrTile(tile - TileOffsByDir(enterdir), trackdir, &fstd, TRANSPORT_RAIL, v->owner);
|
||||||
|
@ -1804,8 +1806,8 @@ static bool CheckReverseTrain(Vehicle *v)
|
||||||
|
|
||||||
NPFFillWithOrderData(&fstd, v);
|
NPFFillWithOrderData(&fstd, v);
|
||||||
|
|
||||||
trackdir = _track_direction_to_trackdir[FIND_FIRST_BIT(v->u.rail.track)][v->direction];
|
trackdir = GetVehicleTrackdir(v);
|
||||||
trackdir_rev = REVERSE_TRACKDIR(_track_direction_to_trackdir[FIND_FIRST_BIT(last->u.rail.track)][last->direction]);
|
trackdir_rev = REVERSE_TRACKDIR(GetVehicleTrackdir(v));
|
||||||
assert(trackdir != 0xff);
|
assert(trackdir != 0xff);
|
||||||
assert(trackdir_rev != 0xff);
|
assert(trackdir_rev != 0xff);
|
||||||
|
|
||||||
|
|
9
ttd.h
9
ttd.h
|
@ -25,6 +25,15 @@ typedef struct Pair {
|
||||||
int b;
|
int b;
|
||||||
} Pair;
|
} Pair;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Is used as a general sortable struct (using qsort and friends). Is used for
|
||||||
|
* sorting vehicles and stations at the moment
|
||||||
|
*/
|
||||||
|
typedef struct SortStruct {
|
||||||
|
uint32 index;
|
||||||
|
byte owner;
|
||||||
|
} SortStruct;
|
||||||
|
|
||||||
typedef struct YearMonthDay {
|
typedef struct YearMonthDay {
|
||||||
int year, month, day;
|
int year, month, day;
|
||||||
} YearMonthDay;
|
} YearMonthDay;
|
||||||
|
|
33
vehicle.c
33
vehicle.c
|
@ -15,6 +15,8 @@
|
||||||
#include "engine.h"
|
#include "engine.h"
|
||||||
#include "sound.h"
|
#include "sound.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
#include "npf.h"
|
||||||
|
#include "vehicle_gui.h"
|
||||||
|
|
||||||
#define INVALID_COORD (-0x8000)
|
#define INVALID_COORD (-0x8000)
|
||||||
#define GEN_HASH(x,y) (((x & 0x1F80)>>7) + ((y & 0xFC0)))
|
#define GEN_HASH(x,y) (((x & 0x1F80)>>7) + ((y & 0xFC0)))
|
||||||
|
@ -1707,6 +1709,35 @@ byte GetDirectionTowards(Vehicle *v, int x, int y)
|
||||||
return (dir+((dirdiff&7)<5?1:-1)) & 7;
|
return (dir+((dirdiff&7)<5?1:-1)) & 7;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
byte GetVehicleTrackdir(const Vehicle* v)
|
||||||
|
{
|
||||||
|
switch(v->type)
|
||||||
|
{
|
||||||
|
case VEH_Train:
|
||||||
|
if (v->u.rail.track == 0x80)
|
||||||
|
return 0xFF; /* Train in depot */
|
||||||
|
else if (v->u.rail.track == 0x40)
|
||||||
|
/* train in tunnel, so just use his direction and assume a diagonal track */
|
||||||
|
return _dir_to_diag_trackdir[(v->direction>>1)&3];
|
||||||
|
else
|
||||||
|
return _track_direction_to_trackdir[FIND_FIRST_BIT(v->u.rail.track)][v->direction];
|
||||||
|
case VEH_Ship:
|
||||||
|
if (v->u.ship.state == 0x80)
|
||||||
|
return 0xFF; /* Ship in depot */
|
||||||
|
else
|
||||||
|
return _track_direction_to_trackdir[FIND_FIRST_BIT(v->u.ship.state)][v->direction];
|
||||||
|
case VEH_Road:
|
||||||
|
if (v->u.road.state == 254)
|
||||||
|
return 0xFF; /* Road vehicle in depot */
|
||||||
|
else
|
||||||
|
return _dir_to_diag_trackdir[(v->direction>>1)&3];
|
||||||
|
case VEH_Aircraft:
|
||||||
|
case VEH_Special:
|
||||||
|
case VEH_Disaster:
|
||||||
|
default:
|
||||||
|
return 0xFF;
|
||||||
|
}
|
||||||
|
}
|
||||||
/* Return value has bit 0x2 set, when the vehicle enters a station. Then,
|
/* Return value has bit 0x2 set, when the vehicle enters a station. Then,
|
||||||
* result << 8 contains the id of the station entered. If the return value has
|
* result << 8 contains the id of the station entered. If the return value has
|
||||||
* bit 0x8 set, the vehicle could not and did not enter the tile. Are there
|
* bit 0x8 set, the vehicle could not and did not enter the tile. Are there
|
||||||
|
@ -2076,5 +2107,3 @@ static void Load_VEHS(void)
|
||||||
const ChunkHandler _veh_chunk_handlers[] = {
|
const ChunkHandler _veh_chunk_handlers[] = {
|
||||||
{ 'VEHS', Save_VEHS, Load_VEHS, CH_SPARSE_ARRAY | CH_LAST},
|
{ 'VEHS', Save_VEHS, Load_VEHS, CH_SPARSE_ARRAY | CH_LAST},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
100
vehicle.h
100
vehicle.h
|
@ -2,9 +2,49 @@
|
||||||
#define VEHICLE_H
|
#define VEHICLE_H
|
||||||
|
|
||||||
#include "pool.h"
|
#include "pool.h"
|
||||||
#include "vehicle_gui.h"
|
|
||||||
#include "order.h"
|
#include "order.h"
|
||||||
|
|
||||||
|
typedef enum VehicleTypes{
|
||||||
|
VEH_Train = 0x10,
|
||||||
|
VEH_Road = 0x11,
|
||||||
|
VEH_Ship = 0x12,
|
||||||
|
VEH_Aircraft = 0x13,
|
||||||
|
VEH_Special = 0x14,
|
||||||
|
VEH_Disaster = 0x15,
|
||||||
|
} VehicleType;
|
||||||
|
|
||||||
|
enum VehStatus {
|
||||||
|
VS_HIDDEN = 1,
|
||||||
|
VS_STOPPED = 2,
|
||||||
|
VS_UNCLICKABLE = 4,
|
||||||
|
VS_DEFPAL = 0x8,
|
||||||
|
VS_TRAIN_SLOWING = 0x10,
|
||||||
|
VS_DISASTER = 0x20,
|
||||||
|
VS_AIRCRAFT_BROKEN = 0x40,
|
||||||
|
VS_CRASHED = 0x80,
|
||||||
|
};
|
||||||
|
|
||||||
|
// 1 and 3 do not appear to be used
|
||||||
|
typedef enum TrainSubtypes {
|
||||||
|
TS_Front_Engine = 0,
|
||||||
|
TS_Not_First = 2,
|
||||||
|
TS_Free_Car = 4,
|
||||||
|
} TrainSubtype;
|
||||||
|
|
||||||
|
/* Effect vehicle types */
|
||||||
|
typedef enum EffectVehicle {
|
||||||
|
EV_CHIMNEY_SMOKE = 0,
|
||||||
|
EV_STEAM_SMOKE = 1,
|
||||||
|
EV_DIESEL_SMOKE = 2,
|
||||||
|
EV_ELECTRIC_SPARK = 3,
|
||||||
|
EV_SMOKE = 4,
|
||||||
|
EV_EXPLOSION_LARGE = 5,
|
||||||
|
EV_BREAKDOWN_SMOKE = 6,
|
||||||
|
EV_EXPLOSION_SMALL = 7,
|
||||||
|
EV_BULLDOZER = 8,
|
||||||
|
EV_BUBBLE = 9
|
||||||
|
} EffectVehicle;
|
||||||
|
|
||||||
typedef struct VehicleRail {
|
typedef struct VehicleRail {
|
||||||
uint16 last_speed; // NOSAVE: only used in UI
|
uint16 last_speed; // NOSAVE: only used in UI
|
||||||
uint16 crash_anim_pos;
|
uint16 crash_anim_pos;
|
||||||
|
@ -91,8 +131,8 @@ struct WorldSprite {
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Vehicle {
|
struct Vehicle {
|
||||||
byte type; // type, ie roadven,train,ship,aircraft,special
|
VehicleType type; // type, ie roadven,train,ship,aircraft,special
|
||||||
byte subtype; // subtype (for trains, 0 == loco, 4 wagon ??)
|
byte subtype; // subtype (Filled with values from EffectVehicles or TrainSubTypes)(Filled with values from EffectVehicles or TrainSubTypes)
|
||||||
|
|
||||||
uint16 index; // NOSAVE: Index in vehicle array
|
uint16 index; // NOSAVE: Index in vehicle array
|
||||||
|
|
||||||
|
@ -199,47 +239,6 @@ struct Vehicle {
|
||||||
#define is_custom_firsthead_sprite(x) (x == 0xfd)
|
#define is_custom_firsthead_sprite(x) (x == 0xfd)
|
||||||
#define is_custom_secondhead_sprite(x) (x == 0xfe)
|
#define is_custom_secondhead_sprite(x) (x == 0xfe)
|
||||||
|
|
||||||
enum {
|
|
||||||
VEH_Train = 0x10,
|
|
||||||
VEH_Road = 0x11,
|
|
||||||
VEH_Ship = 0x12,
|
|
||||||
VEH_Aircraft = 0x13,
|
|
||||||
VEH_Special = 0x14,
|
|
||||||
VEH_Disaster = 0x15,
|
|
||||||
};
|
|
||||||
|
|
||||||
enum VehStatus {
|
|
||||||
VS_HIDDEN = 1,
|
|
||||||
VS_STOPPED = 2,
|
|
||||||
VS_UNCLICKABLE = 4,
|
|
||||||
VS_DEFPAL = 0x8,
|
|
||||||
VS_TRAIN_SLOWING = 0x10,
|
|
||||||
VS_DISASTER = 0x20,
|
|
||||||
VS_AIRCRAFT_BROKEN = 0x40,
|
|
||||||
VS_CRASHED = 0x80,
|
|
||||||
};
|
|
||||||
|
|
||||||
// 1 and 3 do not appear to be used
|
|
||||||
enum TrainSubtype {
|
|
||||||
TS_Front_Engine = 0,
|
|
||||||
TS_Not_First = 2,
|
|
||||||
TS_Free_Car = 4,
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Effect vehicle types */
|
|
||||||
typedef enum EffectVehicle {
|
|
||||||
EV_CHIMNEY_SMOKE = 0,
|
|
||||||
EV_STEAM_SMOKE = 1,
|
|
||||||
EV_DIESEL_SMOKE = 2,
|
|
||||||
EV_ELECTRIC_SPARK = 3,
|
|
||||||
EV_SMOKE = 4,
|
|
||||||
EV_EXPLOSION_LARGE = 5,
|
|
||||||
EV_BREAKDOWN_SMOKE = 6,
|
|
||||||
EV_EXPLOSION_SMALL = 7,
|
|
||||||
EV_BULLDOZER = 8,
|
|
||||||
EV_BUBBLE = 9
|
|
||||||
} EffectVehicle;
|
|
||||||
|
|
||||||
typedef void VehicleTickProc(Vehicle *v);
|
typedef void VehicleTickProc(Vehicle *v);
|
||||||
typedef void *VehicleFromPosProc(Vehicle *v, void *data);
|
typedef void *VehicleFromPosProc(Vehicle *v, void *data);
|
||||||
|
|
||||||
|
@ -320,6 +319,19 @@ typedef struct GetNewVehiclePosResult {
|
||||||
uint new_tile;
|
uint new_tile;
|
||||||
} GetNewVehiclePosResult;
|
} GetNewVehiclePosResult;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the Trackdir on which the vehicle is currently located.
|
||||||
|
* Works for trains and ships.
|
||||||
|
* Currently works only sortof for road vehicles, since they have a fuzzy
|
||||||
|
* concept of being "on" a trackdir. Dunno really what it returns for a road
|
||||||
|
* vehicle that is halfway a tile, never really understood that part. For road
|
||||||
|
* vehicles that are at the beginning or end of the tile, should just return
|
||||||
|
* the diagonal trackdir on which they are driving. I _think_.
|
||||||
|
* For other vehicles types, or vehicles with no clear trackdir (such as those
|
||||||
|
* in depots), returns 0xFF.
|
||||||
|
*/
|
||||||
|
byte GetVehicleTrackdir(const Vehicle* v);
|
||||||
|
|
||||||
/* returns true if staying in the same tile */
|
/* returns true if staying in the same tile */
|
||||||
bool GetNewVehiclePos(Vehicle *v, GetNewVehiclePosResult *gp);
|
bool GetNewVehiclePos(Vehicle *v, GetNewVehiclePosResult *gp);
|
||||||
byte GetDirectionTowards(Vehicle *v, int x, int y);
|
byte GetDirectionTowards(Vehicle *v, int x, int y);
|
||||||
|
|
|
@ -73,7 +73,7 @@ void ResortVehicleLists(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void BuildVehicleList(vehiclelist_d *vl, int type, int owner, int station)
|
void BuildVehicleList(vehiclelist_d *vl, VehicleType type, int owner, int station)
|
||||||
{
|
{
|
||||||
int subtype = (type != VEH_Aircraft) ? TS_Front_Engine : 2;
|
int subtype = (type != VEH_Aircraft) ? TS_Front_Engine : 2;
|
||||||
int n = 0;
|
int n = 0;
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
#ifndef VEHICLE_GUI_H
|
#ifndef VEHICLE_GUI_H
|
||||||
#define VEHICLE_GUI_H
|
#define VEHICLE_GUI_H
|
||||||
|
|
||||||
|
#include "vehicle.h"
|
||||||
|
|
||||||
struct vehiclelist_d;
|
struct vehiclelist_d;
|
||||||
|
|
||||||
void DrawVehicleProfitButton(Vehicle *v, int x, int y);
|
void DrawVehicleProfitButton(Vehicle *v, int x, int y);
|
||||||
|
@ -10,16 +12,10 @@ void InitializeVehiclesGuiList(void);
|
||||||
void RebuildVehicleLists(void);
|
void RebuildVehicleLists(void);
|
||||||
void ResortVehicleLists(void);
|
void ResortVehicleLists(void);
|
||||||
|
|
||||||
void BuildVehicleList(struct vehiclelist_d *vl, int type, int owner, int station);
|
void BuildVehicleList(struct vehiclelist_d *vl, VehicleType type, int owner, int station);
|
||||||
void SortVehicleList(struct vehiclelist_d *vl);
|
void SortVehicleList(struct vehiclelist_d *vl);
|
||||||
|
|
||||||
typedef struct SortStruct { // store owner through sorting process
|
|
||||||
uint32 index;
|
|
||||||
byte owner;
|
|
||||||
} SortStruct;
|
|
||||||
|
|
||||||
int CDECL GeneralOwnerSorter(const void *a, const void *b);
|
int CDECL GeneralOwnerSorter(const void *a, const void *b);
|
||||||
void VehicleSorter(SortStruct *firstelement, uint32 n, uint16 size);
|
|
||||||
VARDEF uint32 _internal_name_sorter_id; // internal StringID for default vehicle-names
|
VARDEF uint32 _internal_name_sorter_id; // internal StringID for default vehicle-names
|
||||||
VARDEF uint32 _last_vehicle_idx; // cached index to hopefully speed up name-sorting
|
VARDEF uint32 _last_vehicle_idx; // cached index to hopefully speed up name-sorting
|
||||||
VARDEF bool _internal_sort_order; // descending/ascending
|
VARDEF bool _internal_sort_order; // descending/ascending
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
#include "news.h"
|
#include "news.h"
|
||||||
#include "sound.h"
|
#include "sound.h"
|
||||||
#include "depot.h"
|
#include "depot.h"
|
||||||
|
#include "vehicle_gui.h"
|
||||||
|
|
||||||
static void FloodVehicle(Vehicle *v);
|
static void FloodVehicle(Vehicle *v);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue