bjarni@6268: /* $Id$ */ bjarni@6268: bjarni@6268: /** @file cargotype.h */ bjarni@6268: bjarni@6268: #ifndef CARGOTYPE_H bjarni@6268: #define CARGOTYPE_H bjarni@6268: bjarni@6268: bjarni@6268: typedef uint32 CargoLabel; bjarni@6268: KUDr@6303: enum TownEffect { KUDr@6303: TE_NONE, KUDr@6303: TE_PASSENGERS, KUDr@6303: TE_MAIL, KUDr@6303: TE_GOODS, KUDr@6303: TE_WATER, KUDr@6303: TE_FOOD, KUDr@6303: }; KUDr@6303: bjarni@6268: bjarni@6298: struct CargoSpec { bjarni@6268: uint8 bitnum; bjarni@6268: CargoLabel label; bjarni@6268: uint32 grfid; bjarni@6268: uint8 legend_colour; bjarni@6268: uint8 rating_colour; bjarni@6268: uint8 weight; bjarni@6268: uint16 initial_payment; bjarni@6268: uint8 transit_days[2]; bjarni@6268: bjarni@6268: bool is_freight; KUDr@6303: TownEffect town_effect; ///< The effect this cargo type has on towns bjarni@6268: uint16 multipliertowngrowth; KUDr@6303: uint8 callback_mask; bjarni@6268: bjarni@6268: StringID name; bjarni@6268: StringID name_plural; bjarni@6268: StringID units_volume; bjarni@6268: StringID quantifier; bjarni@6268: StringID abbrev; bjarni@6268: bjarni@6268: SpriteID sprite; bjarni@6268: bjarni@6268: uint16 classes; KUDr@6303: const struct SpriteGroup *group; bjarni@6268: bjarni@6268: bool IsValid() const; bjarni@6298: }; bjarni@6268: bjarni@6268: bjarni@6268: extern uint32 _cargo_mask; KUDr@6303: extern CargoSpec _cargo[NUM_CARGO]; bjarni@6268: bjarni@6268: bjarni@6268: /* Set up the default cargo types for the given landscape type */ bjarni@6268: void SetupCargoForClimate(LandscapeID l); bjarni@6268: /* Retrieve cargo details for the given cargo ID */ bjarni@6268: const CargoSpec *GetCargo(CargoID c); bjarni@6268: /* Get the cargo ID with the cargo label */ bjarni@6268: CargoID GetCargoIDByLabel(CargoLabel cl); bjarni@6268: KUDr@6303: static inline bool IsCargoInClass(CargoID c, uint16 cc) KUDr@6303: { KUDr@6303: return (GetCargo(c)->classes & cc) != 0; KUDr@6303: } KUDr@6303: bjarni@6268: bjarni@6268: #endif /* CARGOTYPE_H */