mirror of https://github.com/OpenTTD/OpenTTD.git
(svn r8153) -Codechange: Change UpdateStationAcceptance() and ShowRejectOrAcceptNews() to work with cargo IDs instead of cargo names, and explicitly list the different strings to use.
This commit is contained in:
parent
3005bc3f01
commit
9b73684733
|
@ -450,14 +450,14 @@ static uint GetAcceptanceMask(const Station *st)
|
||||||
|
|
||||||
// Items contains the two cargo names that are to be accepted or rejected.
|
// Items contains the two cargo names that are to be accepted or rejected.
|
||||||
// msg is the string id of the message to display.
|
// msg is the string id of the message to display.
|
||||||
static void ShowRejectOrAcceptNews(const Station *st, uint32 items, StringID msg)
|
static void ShowRejectOrAcceptNews(const Station *st, uint num_items, CargoID *cargo, StringID msg)
|
||||||
{
|
{
|
||||||
if (items) {
|
for (uint i = 0; i < num_items; i++) {
|
||||||
SetDParam(2, GB(items, 16, 16));
|
SetDParam(i + 1, _cargoc.names_s[cargo[i]]);
|
||||||
SetDParam(1, GB(items, 0, 16));
|
|
||||||
SetDParam(0, st->index);
|
|
||||||
AddNewsItem(msg + (GB(items, 16, 16) ? 1 : 0), NEWS_FLAGS(NM_SMALL, NF_VIEWPORT|NF_TILE, NT_ACCEPTANCE, 0), st->xy, 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SetDParam(0, st->index);
|
||||||
|
AddNewsItem(msg, NEWS_FLAGS(NM_SMALL, NF_VIEWPORT|NF_TILE, NT_ACCEPTANCE, 0), st->xy, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get a list of the cargo types being produced around the tile.
|
// Get a list of the cargo types being produced around the tile.
|
||||||
|
@ -648,19 +648,41 @@ static void UpdateStationAcceptance(Station *st, bool show_msg)
|
||||||
|
|
||||||
// show a message to report that the acceptance was changed?
|
// show a message to report that the acceptance was changed?
|
||||||
if (show_msg && st->owner == _local_player && st->facilities) {
|
if (show_msg && st->owner == _local_player && st->facilities) {
|
||||||
uint32 accept=0, reject=0; /* these contain two string ids each */
|
/* List of accept and reject strings for different number of
|
||||||
const StringID *str = _cargoc.names_s;
|
* cargo types */
|
||||||
|
static const StringID accept_msg[] = {
|
||||||
|
STR_3040_NOW_ACCEPTS,
|
||||||
|
STR_3041_NOW_ACCEPTS_AND,
|
||||||
|
};
|
||||||
|
static const StringID reject_msg[] = {
|
||||||
|
STR_303E_NO_LONGER_ACCEPTS,
|
||||||
|
STR_303F_NO_LONGER_ACCEPTS_OR,
|
||||||
|
};
|
||||||
|
|
||||||
do {
|
/* Array of accepted and rejected cargo types */
|
||||||
if (new_acc & 1) {
|
CargoID accepts[2] = { CT_INVALID, CT_INVALID };
|
||||||
if (!(old_acc & 1)) accept = (accept << 16) | *str;
|
CargoID rejects[2] = { CT_INVALID, CT_INVALID };
|
||||||
|
uint num_acc = 0;
|
||||||
|
uint num_rej = 0;
|
||||||
|
|
||||||
|
/* Test each cargo type to see if its acceptange has changed */
|
||||||
|
for (CargoID i = 0; i < NUM_CARGO; i++) {
|
||||||
|
if (HASBIT(new_acc, i)) {
|
||||||
|
if (!HASBIT(old_acc, i) && num_acc < lengthof(accepts)) {
|
||||||
|
/* New cargo is accepted */
|
||||||
|
accepts[num_acc++] = i;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
if (old_acc & 1) reject = (reject << 16) | *str;
|
if (HASBIT(old_acc, i) && num_rej < lengthof(rejects)) {
|
||||||
|
/* Old cargo is no longer accepted */
|
||||||
|
rejects[num_rej++] = i;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} while (str++,(new_acc>>=1) != (old_acc>>=1));
|
}
|
||||||
|
|
||||||
ShowRejectOrAcceptNews(st, accept, STR_3040_NOW_ACCEPTS);
|
/* Show news message if there are any changes */
|
||||||
ShowRejectOrAcceptNews(st, reject, STR_303E_NO_LONGER_ACCEPTS);
|
if (num_acc > 0) ShowRejectOrAcceptNews(st, num_acc, accepts, accept_msg[num_acc - 1]);
|
||||||
|
if (num_rej > 0) ShowRejectOrAcceptNews(st, num_rej, rejects, reject_msg[num_rej - 1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// redraw the station view since acceptance changed
|
// redraw the station view since acceptance changed
|
||||||
|
|
Loading…
Reference in New Issue