(svn r6227) -Codechange: added window type flags to use with PlayerVehWndProc

this makes the list type detection much easier and allowed an if cascade to be turned into a switch case
	this also makes it easier to add more list types
This commit is contained in:
bjarni
2006-08-29 21:36:39 +00:00
parent c595c0e651
commit a73b07561e
7 changed files with 80 additions and 56 deletions

View File

@@ -1207,6 +1207,14 @@ extern const Widget _player_aircraft_widgets[];
extern const Widget _player_roadveh_widgets[];
extern const Widget _player_trains_widgets[];
/*
* bitmask for w->window_number
* 0-7 PlayerID (owner)
* 8-10 window type (use flags in vehicle_gui.h)
* 11-15 vehicle type (using VEH_, but can be compressed to fewer bytes if needed)
* 16-31 StationID or OrderID depending on window type (bit 8-10)
**/
void PlayerVehWndProc(Window *w, WindowEvent *e)
{
vehiclelist_d *vl = &WP(w, vehiclelist_d);
@@ -1221,14 +1229,9 @@ void PlayerVehWndProc(Window *w, WindowEvent *e)
int i;
const PlayerID owner = GB(w->window_number, 0, 8);
const Player *p = GetPlayer(owner);
OrderID order = INVALID_ORDER;
StationID station = INVALID_STATION;
if (w->window_number & SHARE_FLAG) {
order = GB(w->window_number, 16, 16);
} else {
station = GB(w->window_number, 16, 16);
}
const uint16 window_type = w->window_number & VLW_FLAGS;
const StationID station = (window_type == VLW_STATION_LIST) ? GB(w->window_number, 16, 16) : INVALID_STATION;
const OrderID order = (window_type == VLW_SHARED_ORDERS) ? GB(w->window_number, 16, 16) : INVALID_ORDER;
BuildVehicleList(vl, vehicle_type, owner, station, order);
SortVehicleList(vl);
@@ -1238,37 +1241,45 @@ void PlayerVehWndProc(Window *w, WindowEvent *e)
if (vl->sort_type == SORT_BY_UNSORTED) SETBIT(w->disabled_state, 3);
/* draw the widgets */
if (order != INVALID_ORDER) {
/* Shared Orders */
SetDParam(0, w->vscroll.count);
w->widget[1].unkA = STR_VEH_WITH_SHARED_ORDERS_LIST;
w->widget[9].unkA = STR_EMPTY;
w->widget[10].unkA = STR_EMPTY;
SETBIT(w->disabled_state, 9);
SETBIT(w->disabled_state, 10);
} else if (station == INVALID_STATION) {
/* Company Name */
SetDParam(0, p->name_1);
SetDParam(1, p->name_2);
SetDParam(2, w->vscroll.count);
switch (vehicle_type) {
case VEH_Train: w->widget[1].unkA = STR_881B_TRAINS; break;
case VEH_Road: w->widget[1].unkA = STR_9001_ROAD_VEHICLES; break;
case VEH_Ship: w->widget[1].unkA = STR_9805_SHIPS; break;
case VEH_Aircraft: w->widget[1].unkA = STR_A009_AIRCRAFT; break;
default: NOT_REACHED(); break;
}
} else {
/* Station Name */
SetDParam(0, station);
SetDParam(1, w->vscroll.count);
switch (vehicle_type) {
case VEH_Train: w->widget[1].unkA = STR_SCHEDULED_TRAINS; break;
case VEH_Road: w->widget[1].unkA = STR_SCHEDULED_ROAD_VEHICLES; break;
case VEH_Ship: w->widget[1].unkA = STR_SCHEDULED_SHIPS; break;
case VEH_Aircraft: w->widget[1].unkA = STR_SCHEDULED_AIRCRAFT; break;
default: NOT_REACHED(); break;
}
switch (window_type) {
case VLW_SHARED_ORDERS:
/* Shared Orders */
SetDParam(0, w->vscroll.count);
w->widget[1].unkA = STR_VEH_WITH_SHARED_ORDERS_LIST;
w->widget[9].unkA = STR_EMPTY;
w->widget[10].unkA = STR_EMPTY;
SETBIT(w->disabled_state, 9);
SETBIT(w->disabled_state, 10);
break;
case VLW_STANDARD:
/* Company Name */
SetDParam(0, p->name_1);
SetDParam(1, p->name_2);
SetDParam(2, w->vscroll.count);
switch (vehicle_type) {
case VEH_Train: w->widget[1].unkA = STR_881B_TRAINS; break;
case VEH_Road: w->widget[1].unkA = STR_9001_ROAD_VEHICLES; break;
case VEH_Ship: w->widget[1].unkA = STR_9805_SHIPS; break;
case VEH_Aircraft: w->widget[1].unkA = STR_A009_AIRCRAFT; break;
default: NOT_REACHED(); break;
}
break;
case VLW_STATION_LIST:
/* Station Name */
SetDParam(0, station);
SetDParam(1, w->vscroll.count);
switch (vehicle_type) {
case VEH_Train: w->widget[1].unkA = STR_SCHEDULED_TRAINS; break;
case VEH_Road: w->widget[1].unkA = STR_SCHEDULED_ROAD_VEHICLES; break;
case VEH_Ship: w->widget[1].unkA = STR_SCHEDULED_SHIPS; break;
case VEH_Aircraft: w->widget[1].unkA = STR_SCHEDULED_AIRCRAFT; break;
default: NOT_REACHED(); break;
}
break;
default: NOT_REACHED(); break;
}
DrawWindowWidgets(w);
@@ -1439,9 +1450,9 @@ void PlayerVehWndProc(Window *w, WindowEvent *e)
case WE_TICK: /* resort the list every 20 seconds orso (10 days) */
if (--vl->resort_timer == 0) {
StationID station = (w->window_number & SHARE_FLAG) ? INVALID_STATION : GB(w->window_number, 16, 16);
StationID station = ((w->window_number & VLW_FLAGS) == VLW_STATION_LIST) ? GB(w->window_number, 16, 16) : INVALID_STATION;
PlayerID owner = GB(w->window_number, 0, 8);
DEBUG(misc, 1) ("Periodic resort ships list player %d station %d", owner, station);
DEBUG(misc, 1) ("Periodic resort %d list player %d station %d", vehicle_type, owner, station);
vl->resort_timer = DAY_TICKS * PERIODIC_RESORT_DAYS;
vl->flags |= VL_RESORT;
SetWindowDirty(w);