mirror of https://github.com/OpenTTD/OpenTTD
(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 typesrelease/0.5
parent
c595c0e651
commit
a73b07561e
|
@ -1028,12 +1028,13 @@ void ShowPlayerAircraftLocal(PlayerID player, StationID station, OrderID order,
|
||||||
Window *w;
|
Window *w;
|
||||||
|
|
||||||
if (show_shared) {
|
if (show_shared) {
|
||||||
w = AllocateWindowDescFront(&_player_aircraft_desc, (order << 16) | (VEH_Aircraft << 11) | SHARE_FLAG);
|
w = AllocateWindowDescFront(&_player_aircraft_desc, (order << 16) | (VEH_Aircraft << 11) | VLW_SHARED_ORDERS);
|
||||||
} else {
|
} else {
|
||||||
|
uint16 VLW_flag = (station == INVALID_STATION) ? VLW_STANDARD : VLW_STATION_LIST;
|
||||||
if (player == _local_player) {
|
if (player == _local_player) {
|
||||||
w = AllocateWindowDescFront(&_player_aircraft_desc, (station << 16) | (VEH_Aircraft << 11) | player);
|
w = AllocateWindowDescFront(&_player_aircraft_desc, (station << 16) | (VEH_Aircraft << 11) | VLW_flag | player);
|
||||||
} else {
|
} else {
|
||||||
w = AllocateWindowDescFront(&_other_player_aircraft_desc, (station << 16) | (VEH_Aircraft << 11) | player);
|
w = AllocateWindowDescFront(&_other_player_aircraft_desc, (station << 16) | (VEH_Aircraft << 11) | VLW_flag | player);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
1
order.h
1
order.h
|
@ -11,7 +11,6 @@
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
INVALID_ORDER = 0xFFFF,
|
INVALID_ORDER = 0xFFFF,
|
||||||
SHARE_FLAG = 1 << 8,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Order types */
|
/* Order types */
|
||||||
|
|
|
@ -967,14 +967,16 @@ static void ShowPlayerRoadVehiclesLocal(PlayerID player, StationID station, Orde
|
||||||
Window *w;
|
Window *w;
|
||||||
|
|
||||||
if (show_shared) {
|
if (show_shared) {
|
||||||
w = AllocateWindowDescFront(&_player_roadveh_desc, (order << 16) | (VEH_Road << 11) | SHARE_FLAG);
|
w = AllocateWindowDescFront(&_player_roadveh_desc, (order << 16) | (VEH_Road << 11) | VLW_SHARED_ORDERS);
|
||||||
} else {
|
} else {
|
||||||
if ( player == _local_player) {
|
uint16 VLW_flag = (station == INVALID_STATION) ? VLW_STANDARD : VLW_STATION_LIST;
|
||||||
w = AllocateWindowDescFront(&_player_roadveh_desc, (station << 16) | (VEH_Road << 11) | player);
|
if (player == _local_player) {
|
||||||
|
w = AllocateWindowDescFront(&_player_roadveh_desc, (station << 16) | (VEH_Road << 11) | VLW_flag | player);
|
||||||
} else {
|
} else {
|
||||||
w = AllocateWindowDescFront(&_other_player_roadveh_desc, (station << 16) | (VEH_Road << 11) | player);
|
w = AllocateWindowDescFront(&_other_player_roadveh_desc, (station << 16) | (VEH_Road << 11) | VLW_flag | player);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (w != NULL) {
|
if (w != NULL) {
|
||||||
vehiclelist_d *vl = &WP(w, vehiclelist_d);
|
vehiclelist_d *vl = &WP(w, vehiclelist_d);
|
||||||
vl->flags = VL_REBUILD | (_sorting.roadveh.order << (VL_DESC - 1));
|
vl->flags = VL_REBUILD | (_sorting.roadveh.order << (VL_DESC - 1));
|
||||||
|
|
|
@ -970,12 +970,13 @@ static void ShowPlayerShipsLocal(PlayerID player, StationID station, OrderID ord
|
||||||
Window *w;
|
Window *w;
|
||||||
|
|
||||||
if (show_shared) {
|
if (show_shared) {
|
||||||
w = AllocateWindowDescFront(&_player_ships_desc, (order << 16) | VEH_Ship << 11 | SHARE_FLAG);
|
w = AllocateWindowDescFront(&_player_ships_desc, (order << 16) | (VEH_Ship << 11) | VLW_SHARED_ORDERS);
|
||||||
} else {
|
} else {
|
||||||
|
uint16 VLW_flag = (station == INVALID_STATION) ? VLW_STANDARD : VLW_STATION_LIST;
|
||||||
if (player == _local_player) {
|
if (player == _local_player) {
|
||||||
w = AllocateWindowDescFront(&_player_ships_desc, (station << 16) | VEH_Ship << 11 | player);
|
w = AllocateWindowDescFront(&_player_ships_desc, (station << 16) | (VEH_Ship << 11) | VLW_flag | player);
|
||||||
} else {
|
} else {
|
||||||
w = AllocateWindowDescFront(&_other_player_ships_desc, (station << 16) | VEH_Ship << 11 | player);
|
w = AllocateWindowDescFront(&_other_player_ships_desc, (station << 16) | (VEH_Ship << 11) | VLW_flag | player);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
10
train_gui.c
10
train_gui.c
|
@ -1425,14 +1425,16 @@ static void ShowPlayerTrainsLocal(PlayerID player, StationID station, OrderID or
|
||||||
Window *w;
|
Window *w;
|
||||||
|
|
||||||
if (show_shared) {
|
if (show_shared) {
|
||||||
w = AllocateWindowDescFront(&_player_trains_desc, (order << 16) | (VEH_Train << 11) | SHARE_FLAG);
|
w = AllocateWindowDescFront(&_player_trains_desc, (order << 16) | (VEH_Train << 11) | VLW_SHARED_ORDERS);
|
||||||
} else {
|
} else {
|
||||||
|
uint16 VLW_flag = (station == INVALID_STATION) ? VLW_STANDARD : VLW_STATION_LIST;
|
||||||
if (player == _local_player) {
|
if (player == _local_player) {
|
||||||
w = AllocateWindowDescFront(&_player_trains_desc, (station << 16) | (VEH_Train << 11) | player);
|
w = AllocateWindowDescFront(&_player_trains_desc, (station << 16) | (VEH_Train << 11) | VLW_flag | player);
|
||||||
} else {
|
} else {
|
||||||
w = AllocateWindowDescFront(&_other_player_trains_desc, (station << 16) | (VEH_Train << 11) | player);
|
w = AllocateWindowDescFront(&_other_player_trains_desc, (station << 16) | (VEH_Train << 11) | VLW_flag | player);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (w != NULL) {
|
if (w != NULL) {
|
||||||
vehiclelist_d *vl = &WP(w, vehiclelist_d);
|
vehiclelist_d *vl = &WP(w, vehiclelist_d);
|
||||||
vl->flags = VL_REBUILD | (_sorting.train.order << (VL_DESC - 1));
|
vl->flags = VL_REBUILD | (_sorting.train.order << (VL_DESC - 1));
|
||||||
|
|
|
@ -1207,6 +1207,14 @@ extern const Widget _player_aircraft_widgets[];
|
||||||
extern const Widget _player_roadveh_widgets[];
|
extern const Widget _player_roadveh_widgets[];
|
||||||
extern const Widget _player_trains_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)
|
void PlayerVehWndProc(Window *w, WindowEvent *e)
|
||||||
{
|
{
|
||||||
vehiclelist_d *vl = &WP(w, vehiclelist_d);
|
vehiclelist_d *vl = &WP(w, vehiclelist_d);
|
||||||
|
@ -1221,14 +1229,9 @@ void PlayerVehWndProc(Window *w, WindowEvent *e)
|
||||||
int i;
|
int i;
|
||||||
const PlayerID owner = GB(w->window_number, 0, 8);
|
const PlayerID owner = GB(w->window_number, 0, 8);
|
||||||
const Player *p = GetPlayer(owner);
|
const Player *p = GetPlayer(owner);
|
||||||
OrderID order = INVALID_ORDER;
|
const uint16 window_type = w->window_number & VLW_FLAGS;
|
||||||
StationID station = INVALID_STATION;
|
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;
|
||||||
if (w->window_number & SHARE_FLAG) {
|
|
||||||
order = GB(w->window_number, 16, 16);
|
|
||||||
} else {
|
|
||||||
station = GB(w->window_number, 16, 16);
|
|
||||||
}
|
|
||||||
|
|
||||||
BuildVehicleList(vl, vehicle_type, owner, station, order);
|
BuildVehicleList(vl, vehicle_type, owner, station, order);
|
||||||
SortVehicleList(vl);
|
SortVehicleList(vl);
|
||||||
|
@ -1238,37 +1241,45 @@ void PlayerVehWndProc(Window *w, WindowEvent *e)
|
||||||
if (vl->sort_type == SORT_BY_UNSORTED) SETBIT(w->disabled_state, 3);
|
if (vl->sort_type == SORT_BY_UNSORTED) SETBIT(w->disabled_state, 3);
|
||||||
|
|
||||||
/* draw the widgets */
|
/* draw the widgets */
|
||||||
if (order != INVALID_ORDER) {
|
switch (window_type) {
|
||||||
/* Shared Orders */
|
case VLW_SHARED_ORDERS:
|
||||||
SetDParam(0, w->vscroll.count);
|
/* Shared Orders */
|
||||||
w->widget[1].unkA = STR_VEH_WITH_SHARED_ORDERS_LIST;
|
SetDParam(0, w->vscroll.count);
|
||||||
w->widget[9].unkA = STR_EMPTY;
|
w->widget[1].unkA = STR_VEH_WITH_SHARED_ORDERS_LIST;
|
||||||
w->widget[10].unkA = STR_EMPTY;
|
w->widget[9].unkA = STR_EMPTY;
|
||||||
SETBIT(w->disabled_state, 9);
|
w->widget[10].unkA = STR_EMPTY;
|
||||||
SETBIT(w->disabled_state, 10);
|
SETBIT(w->disabled_state, 9);
|
||||||
} else if (station == INVALID_STATION) {
|
SETBIT(w->disabled_state, 10);
|
||||||
/* Company Name */
|
break;
|
||||||
SetDParam(0, p->name_1);
|
|
||||||
SetDParam(1, p->name_2);
|
case VLW_STANDARD:
|
||||||
SetDParam(2, w->vscroll.count);
|
/* Company Name */
|
||||||
switch (vehicle_type) {
|
SetDParam(0, p->name_1);
|
||||||
case VEH_Train: w->widget[1].unkA = STR_881B_TRAINS; break;
|
SetDParam(1, p->name_2);
|
||||||
case VEH_Road: w->widget[1].unkA = STR_9001_ROAD_VEHICLES; break;
|
SetDParam(2, w->vscroll.count);
|
||||||
case VEH_Ship: w->widget[1].unkA = STR_9805_SHIPS; break;
|
switch (vehicle_type) {
|
||||||
case VEH_Aircraft: w->widget[1].unkA = STR_A009_AIRCRAFT; break;
|
case VEH_Train: w->widget[1].unkA = STR_881B_TRAINS; break;
|
||||||
default: NOT_REACHED(); break;
|
case VEH_Road: w->widget[1].unkA = STR_9001_ROAD_VEHICLES; break;
|
||||||
}
|
case VEH_Ship: w->widget[1].unkA = STR_9805_SHIPS; break;
|
||||||
} else {
|
case VEH_Aircraft: w->widget[1].unkA = STR_A009_AIRCRAFT; break;
|
||||||
/* Station Name */
|
default: NOT_REACHED(); break;
|
||||||
SetDParam(0, station);
|
}
|
||||||
SetDParam(1, w->vscroll.count);
|
break;
|
||||||
switch (vehicle_type) {
|
|
||||||
case VEH_Train: w->widget[1].unkA = STR_SCHEDULED_TRAINS; break;
|
case VLW_STATION_LIST:
|
||||||
case VEH_Road: w->widget[1].unkA = STR_SCHEDULED_ROAD_VEHICLES; break;
|
/* Station Name */
|
||||||
case VEH_Ship: w->widget[1].unkA = STR_SCHEDULED_SHIPS; break;
|
SetDParam(0, station);
|
||||||
case VEH_Aircraft: w->widget[1].unkA = STR_SCHEDULED_AIRCRAFT; break;
|
SetDParam(1, w->vscroll.count);
|
||||||
default: NOT_REACHED(); break;
|
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);
|
DrawWindowWidgets(w);
|
||||||
|
|
||||||
|
@ -1439,9 +1450,9 @@ void PlayerVehWndProc(Window *w, WindowEvent *e)
|
||||||
|
|
||||||
case WE_TICK: /* resort the list every 20 seconds orso (10 days) */
|
case WE_TICK: /* resort the list every 20 seconds orso (10 days) */
|
||||||
if (--vl->resort_timer == 0) {
|
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);
|
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->resort_timer = DAY_TICKS * PERIODIC_RESORT_DAYS;
|
||||||
vl->flags |= VL_RESORT;
|
vl->flags |= VL_RESORT;
|
||||||
SetWindowDirty(w);
|
SetWindowDirty(w);
|
||||||
|
|
|
@ -44,6 +44,14 @@ enum {
|
||||||
PLY_WND_PRC__SIZE_OF_ROW_BIG = 36,
|
PLY_WND_PRC__SIZE_OF_ROW_BIG = 36,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* Vehicle List Window type flags */
|
||||||
|
enum {
|
||||||
|
VLW_FLAGS = (1 << 8)|(1 << 9)|(1 << 10),
|
||||||
|
VLW_STANDARD = 0,
|
||||||
|
VLW_SHARED_ORDERS = 1 << 8,
|
||||||
|
VLW_STATION_LIST = 2 << 8,
|
||||||
|
};
|
||||||
|
|
||||||
void PlayerVehWndProc(Window *w, WindowEvent *e);
|
void PlayerVehWndProc(Window *w, WindowEvent *e);
|
||||||
|
|
||||||
void ShowReplaceVehicleWindow(byte vehicletype);
|
void ShowReplaceVehicleWindow(byte vehicletype);
|
||||||
|
|
Loading…
Reference in New Issue