NewGRF supplied spritelayout. More...
#include <newgrf_commons.h>
Public Member Functions | |
void | Allocate (uint num_sprites) |
Allocate a spritelayout for num_sprites building sprites. | |
void | AllocateRegisters () |
Allocate memory for register modifiers. | |
void | Clone (const DrawTileSeqStruct *source) |
Clone the building sprites of a spritelayout. | |
void | Clone (const NewGRFSpriteLayout *source) |
Clone a spritelayout. | |
void | Clone (const DrawTileSprites *source) |
Clone a spritelayout. | |
bool | NeedsPreprocessing () const |
Tests whether this spritelayout needs preprocessing by PrepareLayout() and ProcessRegisters(), or whether it can be used directly. | |
uint32 | PrepareLayout (uint32 orig_offset, uint32 newgrf_ground_offset, uint32 newgrf_offset, bool separate_ground) const |
Prepares a sprite layout before resolving action-1-2-3 chains. | |
void | ProcessRegisters (uint8 resolved_var10, uint32 resolved_sprite, bool separate_ground) const |
Evaluates the register modifiers and integrates them into the preprocessed sprite layout. | |
const DrawTileSeqStruct * | GetLayout (PalSpriteID *ground) const |
Returns the result spritelayout after preprocessing. | |
Data Fields | |
const TileLayoutRegisters * | registers |
Static Private Attributes | |
static SmallVector < DrawTileSeqStruct, 8 > | result_seq |
Temporary storage when preprocessing spritelayouts. |
NewGRF supplied spritelayout.
In contrast to DrawTileSprites this struct is for allocated layouts on the heap. It allocates data and frees them on destruction.
Definition at line 92 of file newgrf_commons.h.
void NewGRFSpriteLayout::Allocate | ( | uint | num_sprites | ) |
Allocate a spritelayout for num_sprites building sprites.
num_sprites | Number of building sprites to allocate memory for. (not counting the terminator) |
Definition at line 483 of file newgrf_commons.cpp.
References DrawTileSeqStruct::MakeTerminator(), and DrawTileSprites::seq.
Referenced by ReadSpriteLayout().
void NewGRFSpriteLayout::Clone | ( | const DrawTileSprites * | source | ) | [inline] |
Clone a spritelayout.
source | The spritelayout to copy. |
Definition at line 104 of file newgrf_commons.h.
References Clone(), DrawTileSprites::ground, and DrawTileSprites::seq.
void NewGRFSpriteLayout::Clone | ( | const NewGRFSpriteLayout * | source | ) |
Clone a spritelayout.
source | The spritelayout to copy. |
Definition at line 463 of file newgrf_commons.cpp.
References Clone(), foreach_draw_tile_seq, MemCpyT(), and DrawTileSprites::seq.
void NewGRFSpriteLayout::Clone | ( | const DrawTileSeqStruct * | source | ) |
Clone the building sprites of a spritelayout.
source | The building sprites to copy. |
Definition at line 445 of file newgrf_commons.cpp.
References foreach_draw_tile_seq, MemCpyT(), and DrawTileSprites::seq.
Referenced by Clone().
const DrawTileSeqStruct* NewGRFSpriteLayout::GetLayout | ( | PalSpriteID * | ground | ) | const [inline] |
Returns the result spritelayout after preprocessing.
Definition at line 136 of file newgrf_commons.h.
References SmallVector< T, S >::Begin(), and result_seq.
Referenced by DrawStationTile(), and TileLayoutSpriteGroup::ProcessRegisters().
bool NewGRFSpriteLayout::NeedsPreprocessing | ( | ) | const [inline] |
Tests whether this spritelayout needs preprocessing by PrepareLayout() and ProcessRegisters(), or whether it can be used directly.
Definition at line 123 of file newgrf_commons.h.
Referenced by DrawStationTile(), and TileLayoutSpriteGroup::ProcessRegisters().
uint32 NewGRFSpriteLayout::PrepareLayout | ( | uint32 | orig_offset, | |
uint32 | newgrf_ground_offset, | |||
uint32 | newgrf_offset, | |||
bool | separate_ground | |||
) | const |
Prepares a sprite layout before resolving action-1-2-3 chains.
Integrates offsets into the layout and determines which chains to resolve.
orig_offset | Offset to apply to non-action-1 sprites. | |
newgrf_ground_offset | Offset to apply to action-1 ground sprites. | |
newgrf_offset | Offset to apply to action-1 non-ground sprites. | |
separate_ground | Whether the ground sprite shall be resolved by a separate action-1-2-3 chain by default. |
Definition at line 518 of file newgrf_commons.cpp.
References SmallVector< T, S >::Append(), SmallVector< T, S >::Begin(), SmallVector< T, S >::Clear(), DrawTileSeqStruct::delta_x, DrawTileSeqStruct::delta_z, TileLayoutRegisters::flags, foreach_draw_tile_seq, DrawTileSprites::ground, HasBit(), DrawTileSeqStruct::MakeTerminator(), PalSpriteID::pal, TileLayoutRegisters::palette_var10, result_seq, DrawTileSprites::seq, SetBit(), PalSpriteID::sprite, SPRITE_MODIFIER_CUSTOM_SPRITE, TileLayoutRegisters::sprite_var10, TLF_PALETTE, TLF_PALETTE_REG_FLAGS, TLF_PALETTE_VAR10, TLF_SPRITE, TLF_SPRITE_REG_FLAGS, and TLF_SPRITE_VAR10.
Referenced by DrawStationTile(), and TileLayoutSpriteGroup::ProcessRegisters().
void NewGRFSpriteLayout::ProcessRegisters | ( | uint8 | resolved_var10, | |
uint32 | resolved_sprite, | |||
bool | separate_ground | |||
) | const |
Evaluates the register modifiers and integrates them into the preprocessed sprite layout.
resolved_var10 | The value of var10 the action-1-2-3 chain was evaluated for. | |
resolved_sprite | Result sprite of the action-1-2-3 chain. | |
separate_ground | Whether the ground sprite is resolved by a separate action-1-2-3 chain. |
Definition at line 588 of file newgrf_commons.cpp.
References SmallVector< T, S >::Begin(), TileLayoutRegisters::child, DrawTileSeqStruct::delta_x, DrawTileSeqStruct::delta_z, TileLayoutRegisters::dodraw, TileLayoutRegisters::flags, foreach_draw_tile_seq, GetRegister(), DrawTileSprites::ground, HasBit(), DrawTileSeqStruct::IsParentSprite(), PalSpriteID::pal, TileLayoutRegisters::palette, TileLayoutRegisters::palette_var10, TileLayoutRegisters::parent, result_seq, TileLayoutRegisters::sprite, PalSpriteID::sprite, SPRITE_MODIFIER_CUSTOM_SPRITE, TileLayoutRegisters::sprite_var10, TLF_BB_XY_OFFSET, TLF_BB_Z_OFFSET, TLF_CHILD_X_OFFSET, TLF_CHILD_Y_OFFSET, TLF_DODRAW, TLF_PALETTE, TLF_PALETTE_REG_FLAGS, TLF_PALETTE_VAR10, TLF_SPRITE, TLF_SPRITE_REG_FLAGS, and TLF_SPRITE_VAR10.
Referenced by DrawStationTile(), and TileLayoutSpriteGroup::ProcessRegisters().