From 42eb63a7defffe065d5b945dfbc60e8e2c09d03d Mon Sep 17 00:00:00 2001 From: Darkvater Date: Thu, 5 May 2005 20:44:52 +0000 Subject: (svn r2269) - CodeChange: no else after return; exchange some magic 0xffff with INVALID_VEHICLE, vehicle index is of type VehicleID --- vehicle.c | 65 ++++++++++++++++++++++++++++++++------------------------------- vehicle.h | 19 ++++++++----------- 2 files changed, 41 insertions(+), 43 deletions(-) diff --git a/vehicle.c b/vehicle.c index 0f83dbe83..07437ce11 100644 --- a/vehicle.c +++ b/vehicle.c @@ -207,7 +207,7 @@ static Vehicle *InitializeVehicle(Vehicle *v) v->left_coord = INVALID_COORD; v->first = NULL; v->next = NULL; - v->next_hash = 0xffff; + v->next_hash = INVALID_VEHICLE; v->string_id = 0; v->next_shared = NULL; v->prev_shared = NULL; @@ -375,15 +375,20 @@ Vehicle *GetFirstVehicleInChain(const Vehicle *v) Vehicle* u; if (v->first != NULL) { - if (v->first->subtype == TS_Front_Engine) { - return v->first; - } else { - DEBUG(misc, 0) ("v->first cache faulty. We shouldn't be here"); - } + if (v->first->subtype == TS_Front_Engine) return v->first; + + DEBUG(misc, 0) ("v->first cache faulty. We shouldn't be here, rebuilding cache!"); } + /* It is the fact (currently) that newly built vehicles do not have + * their ->first pointer set. When this is the case, go up to the + * first engine and set the pointers correctly. Also the first pointer + * is not saved in a savegame, so this has to be fixed up after loading */ + + /* Find the 'locomotive' or the first wagon in a chain */ while ((u = GetPrevVehicleInChain(v)) != NULL) v = u; + /* Set the first pointer of all vehicles in that chain to the first wagon */ if (v->subtype == TS_Front_Engine) for (u = (Vehicle *)v; u != NULL; u = u->next) u->first = (Vehicle *)v; @@ -402,7 +407,7 @@ void DeleteVehicle(Vehicle *v) DeleteName(v->string_id); v->type = 0; UpdateVehiclePosHash(v, INVALID_COORD, 0); - v->next_hash = 0xffff; + v->next_hash = INVALID_VEHICLE; if (v->orders != NULL) DeleteVehicleOrders(v); @@ -414,7 +419,7 @@ void DeleteVehicleChain(Vehicle *v) Vehicle *u = v; v = v->next; DeleteVehicle(u); - } while (v); + } while (v != NULL); } @@ -1716,40 +1721,36 @@ byte GetDirectionTowards(Vehicle *v, int x, int y) byte GetVehicleTrackdir(const Vehicle* v) { - if (v->vehstatus & VS_CRASHED) - return 0xff; + if (v->vehstatus & VS_CRASHED) return 0xFF; switch(v->type) { case VEH_Train: - if (v->u.rail.track == 0x80) - /* We'll assume the train is facing outwards */ + if (v->u.rail.track == 0x80) /* We'll assume the train is facing outwards */ return _dir_to_diag_trackdir[GetDepotDirection(v->tile, TRANSPORT_RAIL)]; /* 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]; + + 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]; + + return _track_direction_to_trackdir[FIND_FIRST_BIT(v->u.rail.track)][v->direction]; + break; case VEH_Ship: - if (v->u.ship.state == 0x80) - /* We'll assume the ship is facing outwards */ + if (v->u.ship.state == 0x80) /* We'll assume the ship is facing outwards */ return _dir_to_diag_trackdir[GetDepotDirection(v->tile, TRANSPORT_WATER)]; /* Ship in depot */ - else - return _track_direction_to_trackdir[FIND_FIRST_BIT(v->u.ship.state)][v->direction]; + + return _track_direction_to_trackdir[FIND_FIRST_BIT(v->u.ship.state)][v->direction]; + break; case VEH_Road: - if (v->u.road.state == 254) - /* We'll assume the road vehicle is facing outwards */ + if (v->u.road.state == 254) /* We'll assume the road vehicle is facing outwards */ return _dir_to_diag_trackdir[GetDepotDirection(v->tile, TRANSPORT_ROAD)]; /* Road vehicle in depot */ - else if (IsRoadStationTile(v->tile)) - /* We'll assume the road vehicle is facing outwards */ + + if (IsRoadStationTile(v->tile)) /* We'll assume the road vehicle is facing outwards */ return _dir_to_diag_trackdir[GetRoadStationDir(v->tile)]; /* Road vehicle in a station */ - else - return _dir_to_diag_trackdir[(v->direction>>1)&3]; - case VEH_Aircraft: - case VEH_Special: - case VEH_Disaster: - default: - return 0xFF; + + return _dir_to_diag_trackdir[(v->direction >> 1) & 3]; + break; + /* 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, diff --git a/vehicle.h b/vehicle.h index 4302364f2..e8f45cb05 100644 --- a/vehicle.h +++ b/vehicle.h @@ -134,7 +134,7 @@ struct Vehicle { byte type; // type, ie roadven,train,ship,aircraft,special byte subtype; // subtype (Filled with values from EffectVehicles or TrainSubTypes)(Filled with values from EffectVehicles or TrainSubTypes) - uint16 index; // NOSAVE: Index in vehicle array + VehicleID index; // NOSAVE: Index in vehicle array Vehicle *next; // next Vehicle *first; // NOSAVE: pointer to the first vehicle in the chain @@ -235,9 +235,9 @@ struct Vehicle { } u; }; -#define is_custom_sprite(x) (x >= 0xfd) -#define is_custom_firsthead_sprite(x) (x == 0xfd) -#define is_custom_secondhead_sprite(x) (x == 0xfe) +#define is_custom_sprite(x) (x >= 0xFD) +#define IS_CUSTOM_FIRSTHEAD_SPRITE(x) (x == 0xFD) +#define IS_CUSTOM_SECONDHEAD_SPRITE(x) (x == 0xFE) typedef void VehicleTickProc(Vehicle *v); typedef void *VehicleFromPosProc(Vehicle *v, void *data); @@ -378,8 +378,7 @@ static inline bool IsValidVehicle(Vehicle* v) */ static inline bool IsVehicleIndex(uint index) { - if (index < GetVehiclePoolSize()) - return true; + if (index < GetVehiclePoolSize()) return true; return false; } @@ -389,8 +388,7 @@ static inline Order *GetVehicleOrder(const Vehicle *v, int index) { Order *order = v->orders; - if (index < 0) - return NULL; + if (index < 0) return NULL; while (order != NULL && index-- > 0) order = order->next; @@ -403,8 +401,7 @@ static inline Order *GetLastVehicleOrder(const Vehicle *v) { Order *order = v->orders; - if (order == NULL) - return NULL; + if (order == NULL) return NULL; while (order->next != NULL) order = order->next; @@ -438,7 +435,7 @@ VARDEF byte _cmd_build_rail_veh_var1; // for each player, for each vehicle type, keep a list of the vehicles. //VARDEF Vehicle *_vehicle_arr[8][4]; -#define INVALID_VEHICLE 0xffff +#define INVALID_VEHICLE 0xFFFF /* A lot of code calls for the invalidation of the status bar, which is widget 5. * Best is to have a virtual value for it when it needs to change again */ -- cgit v1.2.3-70-g09d2