|
OpenTTD Source
14.0-beta3
|
Go to the documentation of this file.
35 const std::vector<ObjectSpec> &ObjectSpec::Specs()
40 size_t ObjectSpec::Count()
115 ObjectClass::Assign(&spec);
139 template <
typename Tspec,
typename T
id, T
id Tmax>
146 template <
typename Tspec,
typename T
id, T
id Tmax>
149 return this->GetSpec(index)->IsEverAvailable();
211 uint32_t best_dist = UINT32_MAX;
213 if (o->type != type || o == current)
continue;
260 const Town *t =
nullptr;
262 if (this->
obj ==
nullptr) {
286 case 0x48:
return this->
view;
309 uint offset_x =
TileX(offset);
310 uint offset_y =
TileY(offset);
311 return offset_y << 20 | offset_x << 16 | offset_y << 8 | offset_x;
336 case 0x48:
return this->
obj->
view;
361 Debug(grf, 1,
"Unhandled object variable 0x{:X}", variable);
377 CallbackID callback, uint32_t param1, uint32_t param2)
378 :
ResolverObject(spec->grf_prop.grffile, callback, param1, param2), object_scope(*this, obj, spec, tile, view)
385 ObjectResolverObject::~ObjectResolverObject()
404 if (t ==
nullptr)
return nullptr;
434 return object.ResolveCallback();
455 DrawWaterClassGround(ti);
475 if (group ==
nullptr || group->type != SGT_TILELAYOUT)
return;
491 if (group ==
nullptr || group->type != SGT_TILELAYOUT)
return;
static debug_inline uint TileY(TileIndex tile)
Get the Y component of a tile.
A resolver object to be used with feature 0F spritegroups.
byte colour
Colour of the object, for display purpose.
PaletteID GroundSpritePaletteTransform(SpriteID image, PaletteID pal, PaletteID default_pal)
Applies PALETTE_MODIFIER_COLOUR to a palette entry of a ground sprite.
@ CBM_OBJ_ANIMATION_SPEED
decides animation speed
static Titem * Get(size_t index)
Returns Titem with given index.
@ OBJECT_FLAG_2CC_COLOUR
Object wants 2CC colour mapping.
@ CBID_OBJECT_ANIMATION_NEXT_FRAME
Determine the next animation frame for a house.
void DrawNewGRFTileSeqInGUI(int x, int y, const DrawTileSprites *dts, uint32_t stage, PaletteID default_palette)
Draw NewGRF object in GUI.
Allow incrementing of ObjectClassID variables.
GRFFilePropsBase< 2 > grf_prop
Properties related the the grf file.
uint16_t GetObjectCallback(CallbackID callback, uint32_t param1, uint32_t param2, const ObjectSpec *spec, Object *o, TileIndex tile, uint8_t view)
Perform a callback for an object.
Town * ClosestTownFromTile(TileIndex tile, uint threshold)
Return the town closest (in distance or ownership) to a given tile, within a given threshold.
Tile information, used while rendering the tile.
@ SPRITE_WIDTH
number of bits for the sprite number
byte landscape
the landscape we're currently in
@ CBM_OBJ_ANIMATION_NEXT_FRAME
decides next animation frame
uint16_t triggers
The triggers that trigger animation.
TileArea location
Location of the object.
constexpr static debug_inline uint GB(const T x, const uint8_t s, const uint8_t n)
Fetch n bits from x, started at bit s.
ObjectAnimationTrigger
Animation triggers for objects.
uint32_t GetRegister(uint i)
Gets the value of a so-called newgrf "register".
Tindex index
Index of this pool item.
static Object * GetByTile(TileIndex tile)
Get the object associated with a tile.
struct Object * obj
The object the callback is ran for.
bool IsAvailable() const
Check whether the object is available at this time.
#define INSTANTIATE_NEWGRF_CLASS_METHODS(name, Tspec, Tid, Tmax)
Force instantiation of the methods so we don't get linker errors.
SpriteID sprite
The 'real' sprite.
Interface for SpriteGroup-s to access the gamestate.
constexpr TileIndex INVALID_TILE
The very nice invalid tile marker.
const GRFFile * grffile
GRFFile the resolved SpriteGroup belongs to.
void TriggerObjectTileAnimation(Object *o, TileIndex tile, ObjectAnimationTrigger trigger, const ObjectSpec *spec)
Trigger the update of animation on a single tile.
@ OBJECT_FLAG_ONLY_IN_GAME
Object can only be built in game.
static const ObjectType NUM_OBJECTS
Number of supported objects overall.
@ OBJECT_FLAG_ANIM_RANDOM_BITS
Object wants random bits in "next animation frame" callback.
TileIndex xy
town center tile
uint32_t GetTerrainType(TileIndex tile, TileContext context)
Function used by houses (and soon industries) to get information on type of "terrain" the tile it is ...
void DrawNewObjectTile(TileInfo *ti, const ObjectSpec *spec)
Draw an object on the map.
static uint32_t GetClosestObject(TileIndex tile, ObjectType type, const Object *current)
Get the closest object of a given type.
CallbackID
List of implemented NewGRF callbacks.
bool IsEverAvailable() const
Check whether the object might be available at some point in this game with the current game mode.
std::vector< ObjectSpec > _object_specs
All the object specifications.
Helper class for animation control.
static const ObjectSpec * Get(ObjectType index)
Get the specification associated with a specific ObjectType.
uint32_t PaletteID
The number of the palette.
void TriggerObjectAnimation(Object *o, ObjectAnimationTrigger trigger, const ObjectSpec *spec)
Trigger the update of animation on a whole object.
TownScopeResolver * town_scope
The town scope resolver (created on the first call).
TileIndex tile
The tile related to the object.
GrfSpecFeature GetFeature() const override
Get the feature number being resolved for.
AnimationInfo animation
Information about the animation.
#define Debug(category, level, format_string,...)
Ouptut a line of debugging information.
GameCreationSettings game_creation
settings used during the creation of a game (map)
HouseZonesBits GetTownRadiusGroup(const Town *t, TileIndex tile)
Returns the bit corresponding to the town zone of the specified tile.
static const ObjectType NEW_OBJECT_OFFSET
Offset for new objects.
PalSpriteID ground
Palette and sprite for the ground.
uint32_t ObjectID
Unique identifier for an object.
@ OBJECT_FLAG_DRAW_WATER
Object wants to be drawn on water.
bool IsUIAvailable(uint index) const
Check whether the spec will be available to the user at some point in time.
static void BindToClasses()
Tie all ObjectSpecs to their class.
uint DistanceManhattan(TileIndex t0, TileIndex t1)
Gets the Manhattan distance between the two given tiles.
uint16_t ObjectType
Types of objects.
ObjectClassID
Class IDs for objects.
bool WasEverAvailable() const
Check whether the object was available at some point in the past or present in this game with the cur...
@ OBJECT_FLAG_ANIMATION
Object has animated tiles.
@ MP_OBJECT
Contains objects such as transmitters and owned land.
const SpriteGroup * root_spritegroup
Root SpriteGroup to use for resolving.
static uint32_t GetObjectIDAtOffset(TileIndex tile, uint32_t cur_grfid)
Make an analysis of a tile and get the object type.
TimerGameCalendar::Date end_of_life_date
When can't this object be built anymore.
byte view
The view setting for this object.
static const ObjectID INVALID_OBJECT
An invalid object.
static uint32_t GetCountAndDistanceOfClosestInstance(byte local_id, uint32_t grfid, TileIndex tile, const Object *current)
Implementation of var 65.
ObjectOverrideManager _object_mngr(NEW_OBJECT_OFFSET, NUM_OBJECTS, INVALID_OBJECT_TYPE)
The override manager for our objects.
static void DrawTileLayout(const TileInfo *ti, const TileLayoutSpriteGroup *group, const ObjectSpec *spec)
Draw an group of sprites on the map.
An object, such as transmitter, on the map.
Struct containing information relating to NewGRF classes for stations and airports.
bool IsEnabled() const
Test if this object is enabled.
GameSettings _settings_game
Game settings of a running game or the scenario editor.
bool IsTileOnWater(Tile t)
Tests if the tile was built on water.
uint32_t GetNearbyTileInformation(TileIndex tile, bool grf_version8)
Common part of station var 0x67, house var 0x62, indtile var 0x60, industry var 0x62.
ObjectType type
Type of the object.
CompanyID _local_company
Company controlled by the human player at this client. Can also be COMPANY_SPECTATOR.
const ObjectSpec _original_objects[]
Specification of the original object structures.
static uint16_t GetTypeCount(ObjectType type)
Get the count of objects for this type.
Slope GetTileSlope(TileIndex tile, int *h)
Return the slope of a given tile inside the map.
Ground palette sprite of a tile, together with its sprite layout.
Owner GetTileOwner(Tile tile)
Returns the owner of a tile.
void DrawSprite(SpriteID img, PaletteID pal, int x, int y, const SubSprite *sub, ZoomLevel zoom)
Draw a sprite, not in a viewport.
static void ChangeAnimationFrame(CallbackID cb, const ObjectSpec *spec, Object *obj, TileIndex tile, uint32_t random_bits, uint32_t trigger, int extra_data=0)
Check a callback to determine what the next animation step is and execute that step.
TimerGameCalendar::Date introduction_date
From when can this object be built.
Scope resolver for a town.
uint32_t SpriteID
The number of a sprite, without mapping bits and colourtables.
static void InsertDefaults()
Initialise the defaults.
uint8_t view
The view of the object.
@ OBJECT_FLAG_ONLY_IN_SCENEDIT
Object can only be constructed in the scenario editor.
uint16_t local_id
id defined by the grf file for this entity
bool IsValidTile(Tile tile)
Checks if a tile is valid.
bool _generating_world
Whether we are generating the map or not.
void DrawNewGRFTileSeq(const struct TileInfo *ti, const DrawTileSprites *dts, TransparencyOption to, uint32_t stage, PaletteID default_palette)
Draw NewGRF industrytile or house sprite layout.
uint DistanceSquare(TileIndex t0, TileIndex t1)
Gets the 'Square' distance between the two given tiles.
ObjectType GetObjectType(Tile t)
Gets the ObjectType of the given object tile.
uint Index() const
Gets the index of this spec.
static const PaletteID PALETTE_RECOLOUR_START
First recolour sprite for company colours.
CompanyID _current_company
Company currently doing an action.
static Pool::IterateWrapper< Titem > Iterate(size_t from=0)
Returns an iterable ensemble of all valid Titem.
const struct SpriteGroup * spritegroup[Tcnt]
pointer to the different sprites of the entity
@ TO_STRUCTURES
other objects such as transmitters and lighthouses
uint16_t StubGetObjectCallback(CallbackID callback, uint32_t param1, uint32_t param2, const ObjectSpec *spec, Object *o, TileIndex tile, int)
Perform a callback for an object.
static uint32_t GetNearbyObjectTileInformation(byte parameter, TileIndex tile, ObjectID index, bool grf_version8)
Based on newhouses equivalent, but adapted for newobjects.
uint8_t climate
In which climates is this object available?
TileIndex tile
The base tile of the area.
Colours colour1
First colour, for all vehicles.
static const ObjectSpec * GetByTile(TileIndex tile)
Get the specification associated with a tile.
TownScopeResolver * GetTown()
Get the town resolver scope that belongs to this object resolver.
uint32_t GetDebugID() const override
Get an identifier for the item being resolved.
@ CBID_OBJECT_ANIMATION_START_STOP
Called for periodically starting or stopping the animation.
StringID name
Name of this class.
ObjectCallbackMask
Callback masks for objects.
byte GetObjectRandomBits(Tile t)
Get the random bits of this tile.
static void AnimateTile(const ObjectSpec *spec, Object *obj, TileIndex tile, bool random_animation, int extra_data=0)
Animate a single tile.
@ CBID_OBJECT_ANIMATION_SPEED
Called to indicate how long the current animation frame should last.
static const ObjectType INVALID_OBJECT_TYPE
An invalid object.
Helper class for a unified approach to NewGRF animation.
virtual const SpriteGroup * Resolve([[maybe_unused]] ResolverObject &object) const
Base sprite group resolver.
void ResetObjects()
This function initialize the spec arrays of objects.
#define lengthof(x)
Return the length of an fixed size array.
byte GetAnimationFrame(Tile t)
Get the current animation frame.
static NewGRFClass * Get(Tid cls_id)
Get a particular class.
const ObjectSpec * spec
Specification of the object type.
ObjectID GetObjectIndex(Tile t)
Get the index of which object this tile is attached to.
TileIndex GetNearbyTile(byte parameter, TileIndex tile, bool signed_offsets, Axis axis)
Get the tile at the given offset.
void AnimateNewObjectTile(TileIndex tile)
Handle the animation of the object tile.
PaletteID pal
The palette (use PAL_NONE) if not needed)
static Date date
Current date in days (day counter).
TileIndex tile
Tile index.
uint32_t GetVariable(byte variable, [[maybe_unused]] uint32_t parameter, bool *available) const override
Used by the resolver to get values for feature 0F deterministic spritegroups.
@ OBJECT_CLASS_MAX
Maximum number of classes.
void DrawNewObjectTileInGUI(int x, int y, const ObjectSpec *spec, uint8_t view)
Draw representation of an object (tile) for GUI purposes.
TimerGameCalendar::Date build_date
Date of construction.
static debug_inline bool IsTileType(Tile tile, TileType type)
Checks if a tile is a given tiletype.
static bool IsValidID(size_t index)
Tests whether given index can be used to get valid (non-nullptr) Titem.
ResolverObject & ro
Surrounding resolver object.
const struct GRFFile * grffile
grf file that introduced this entity
static debug_inline uint TileX(TileIndex tile)
Get the X component of a tile.
static const ObjectType OBJECT_TRANSMITTER
The large antenna.
static const ObjectType OBJECT_LIGHTHOUSE
The nice lighthouse.
ObjectResolverObject(const ObjectSpec *spec, Object *o, TileIndex tile, uint8_t view=0, CallbackID callback=CBID_NO_CALLBACK, uint32_t param1=0, uint32_t param2=0)
Constructor of the object resolver.
Colours colour2
Second colour, for vehicles with 2CC support.
const DrawTileSprites * ProcessRegisters(uint8_t *stage) const
Process registers and the construction stage into the sprite layout.
Information about a particular livery.
Town * town
Town the object is built in.
@ INVALID_OBJECT_CLASS
Class for the less fortunate.
void DrawGroundSprite(SpriteID image, PaletteID pal, const SubSprite *sub, int extra_offs_x, int extra_offs_y)
Draws a ground sprite for the current tile.
virtual uint16_t GetID(uint16_t grf_local_id, uint32_t grfid) const
Return the ID (if ever available) of a previously inserted entity.
ObjectScopeResolver object_scope
The object scope resolver.
Action 2 sprite layout for houses, industry tiles, objects and airport tiles.
ObjectFlags flags
Flags/settings related to the object.
constexpr debug_inline bool HasBit(const T x, const uint8_t y)
Checks if a bit in a value is set.