|
@@ -178,82 +178,82 @@ static uint32 AirportGetRandomBits(const
|
|
|
{
|
|
|
const Station *st = object->u.airport.st;
|
|
|
const TileIndex tile = object->u.airport.tile;
|
|
|
return (st == NULL ? 0 : st->random_bits) | (tile == INVALID_TILE ? 0 : GetStationTileRandomBits(tile) << 16);
|
|
|
}
|
|
|
|
|
|
static uint32 AirportGetTriggers(const ResolverObject *object)
|
|
|
{
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
static void AirportSetTriggers(const ResolverObject *object, int triggers)
|
|
|
{
|
|
|
}
|
|
|
|
|
|
static void NewAirportResolver(ResolverObject *res, TileIndex tile, Station *st, byte airport_id, byte layout)
|
|
|
{
|
|
|
res->GetRandomBits = AirportGetRandomBits;
|
|
|
res->GetTriggers = AirportGetTriggers;
|
|
|
res->SetTriggers = AirportSetTriggers;
|
|
|
res->GetVariable = AirportGetVariable;
|
|
|
res->ResolveReal = AirportResolveReal;
|
|
|
|
|
|
res->psa = st != NULL ? &st->airport.psa : NULL;
|
|
|
res->u.airport.st = st;
|
|
|
res->u.airport.airport_id = airport_id;
|
|
|
res->u.airport.layout = layout;
|
|
|
res->u.airport.tile = tile;
|
|
|
|
|
|
res->callback = CBID_NO_CALLBACK;
|
|
|
res->callback_param1 = 0;
|
|
|
res->callback_param2 = 0;
|
|
|
res->last_value = 0;
|
|
|
res->trigger = 0;
|
|
|
res->reseed = 0;
|
|
|
res->count = 0;
|
|
|
|
|
|
const AirportSpec *as = AirportSpec::Get(airport_id);
|
|
|
res->grffile = (as != NULL ? as->grf_prop.grffile : NULL);
|
|
|
}
|
|
|
|
|
|
SpriteID GetCustomAirportSprite(const AirportSpec *as, byte layout)
|
|
|
{
|
|
|
const SpriteGroup *group;
|
|
|
ResolverObject object;
|
|
|
|
|
|
NewAirportResolver(&object, INVALID_TILE, NULL, as->GetIndex(), layout);
|
|
|
|
|
|
group = SpriteGroup::Resolve(as->grf_prop.spritegroup, &object);
|
|
|
group = SpriteGroup::Resolve(as->grf_prop.spritegroup[0], &object);
|
|
|
if (group == NULL) return as->preview_sprite;
|
|
|
|
|
|
return group->GetResult();
|
|
|
}
|
|
|
|
|
|
uint16 GetAirportCallback(CallbackID callback, uint32 param1, uint32 param2, Station *st, TileIndex tile)
|
|
|
{
|
|
|
ResolverObject object;
|
|
|
|
|
|
NewAirportResolver(&object, tile, st, st->airport.type, st->airport.layout);
|
|
|
object.callback = callback;
|
|
|
object.callback_param1 = param1;
|
|
|
object.callback_param2 = param2;
|
|
|
|
|
|
const SpriteGroup *group = SpriteGroup::Resolve(st->airport.GetSpec()->grf_prop.spritegroup, &object);
|
|
|
const SpriteGroup *group = SpriteGroup::Resolve(st->airport.GetSpec()->grf_prop.spritegroup[0], &object);
|
|
|
if (group == NULL) return CALLBACK_FAILED;
|
|
|
|
|
|
return group->GetCallbackResult();
|
|
|
}
|
|
|
|
|
|
StringID GetAirportTextCallback(const AirportSpec *as, byte layout, uint16 callback)
|
|
|
{
|
|
|
const SpriteGroup *group;
|
|
|
ResolverObject object;
|
|
|
|
|
|
NewAirportResolver(&object, INVALID_TILE, NULL, as->GetIndex(), layout);
|
|
|
object.callback = (CallbackID)callback;
|
|
|
|
|
|
group = SpriteGroup::Resolve(as->grf_prop.spritegroup, &object);
|
|
|
group = SpriteGroup::Resolve(as->grf_prop.spritegroup[0], &object);
|
|
|
if (group == NULL) return STR_UNDEFINED;
|
|
|
|
|
|
return GetGRFStringID(as->grf_prop.grffile->grfid, 0xD000 + group->GetResult());
|
|
|
}
|