* Draw representation of a house tile for GUI purposes. * @param x Position x of image. * @param y Position y of image. * @param spec House spec to draw. * @param house_id House ID to draw. * @param view The house's 'view'. */
| 522 | * @param view The house's 'view'. |
| 523 | */ |
| 524 | void DrawNewHouseTileInGUI(int x, int y, const HouseSpec *spec, HouseID house_id, int view) |
| 525 | { |
| 526 | HouseResolverObject object(house_id, INVALID_TILE, nullptr, CBID_NO_CALLBACK, 0, 0, true, view); |
| 527 | const auto *group = object.Resolve<TileLayoutSpriteGroup>(); |
| 528 | if (group == nullptr) return; |
| 529 | |
| 530 | uint8_t stage = TOWN_HOUSE_COMPLETED; |
| 531 | auto processor = group->ProcessRegisters(object, &stage); |
| 532 | auto dts = processor.GetLayout(); |
| 533 | |
| 534 | PaletteID palette = GetColourPalette(spec->random_colour[0]); |
| 535 | if (spec->callback_mask.Test(HouseCallbackMask::Colour)) { |
| 536 | uint16_t callback = GetHouseCallback(CBID_HOUSE_COLOUR, 0, 0, house_id, nullptr, INVALID_TILE, {}, true, view); |
| 537 | if (callback != CALLBACK_FAILED) { |
| 538 | /* If bit 14 is set, we should use a 2cc colour map, else use the callback value. */ |
| 539 | palette = HasBit(callback, 14) ? GB(callback, 0, 8) + SPR_2CCMAP_BASE : callback; |
| 540 | } |
| 541 | } |
| 542 | |
| 543 | SpriteID image = dts.ground.sprite; |
| 544 | PaletteID pal = dts.ground.pal; |
| 545 | |
| 546 | if (HasBit(image, SPRITE_MODIFIER_CUSTOM_SPRITE)) image += stage; |
| 547 | if (HasBit(pal, SPRITE_MODIFIER_CUSTOM_SPRITE)) pal += stage; |
| 548 | |
| 549 | if (GB(image, 0, SPRITE_WIDTH) != 0) { |
| 550 | DrawSprite(image, GroundSpritePaletteTransform(image, pal, palette), x, y); |
| 551 | } |
| 552 | |
| 553 | DrawNewGRFTileSeqInGUI(x, y, &dts, stage, palette); |
| 554 | } |
| 555 | |
| 556 | /* Simple wrapper for GetHouseCallback to keep the animation unified. */ |
| 557 | static uint16_t GetSimpleHouseCallback(CallbackID callback, uint32_t param1, uint32_t param2, const HouseSpec *spec, Town *town, TileIndex tile, CargoTypes extra_data) |
no test coverage detected