Files
@ r28486:aff297ed5a05
Branch filter:
Location: cpp/openttd-patchpack/source/src/newgrf_engine.h - annotation
r28486:aff297ed5a05
6.0 KiB
text/x-c
Codechange: Allow constexpr NWidgetPart construction.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 | r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r9111:983de9c5a848 r6348:a905c3e6d8fa r5475:3f5cd13d1b63 r5475:3f5cd13d1b63 r5475:3f5cd13d1b63 r8100:d1eb5523ede7 r12223:61e25b018cba r13104:9e66a110a842 r14248:a9050881acd7 r14248:a9050881acd7 r14248:a9050881acd7 r19736:e9409fb52532 r19736:e9409fb52532 r19738:837a139219f0 r19736:e9409fb52532 r19738:837a139219f0 r19738:837a139219f0 r26039:cd04ecb0e841 r19736:e9409fb52532 r22756:8ffd1846f871 r22756:8ffd1846f871 r22756:8ffd1846f871 r22756:8ffd1846f871 r22756:8ffd1846f871 r26039:cd04ecb0e841 r22756:8ffd1846f871 r26039:cd04ecb0e841 r26039:cd04ecb0e841 r22756:8ffd1846f871 r22756:8ffd1846f871 r19736:e9409fb52532 r19736:e9409fb52532 r19736:e9409fb52532 r27737:728d55b97775 r27942:f7389062d120 r27737:728d55b97775 r19736:e9409fb52532 r19736:e9409fb52532 r19738:837a139219f0 r19736:e9409fb52532 r21299:8973364c4b52 r21299:8973364c4b52 r21299:8973364c4b52 r21299:8973364c4b52 r21299:8973364c4b52 r21299:8973364c4b52 r21299:8973364c4b52 r21299:8973364c4b52 r19738:837a139219f0 r19738:837a139219f0 r19736:e9409fb52532 r19738:837a139219f0 r19738:837a139219f0 r19736:e9409fb52532 r26039:cd04ecb0e841 r27737:728d55b97775 r19736:e9409fb52532 r23497:a0ab44ebd2fa r19736:e9409fb52532 r23497:a0ab44ebd2fa r24069:49625df81342 r24069:49625df81342 r27737:728d55b97775 r19736:e9409fb52532 r5475:3f5cd13d1b63 r15173:a59afd6301a6 r19415:bed87a3f22a9 r15173:a59afd6301a6 r5475:3f5cd13d1b63 r22459:c1921e75ce89 r22459:c1921e75ce89 r8198:888b30c1c93b r8198:888b30c1c93b r5475:3f5cd13d1b63 r22459:c1921e75ce89 r22459:c1921e75ce89 r22459:c1921e75ce89 r23607:36c15679007d r22459:c1921e75ce89 r26038:ced62dd5d288 r26038:ced62dd5d288 r26038:ced62dd5d288 r5475:3f5cd13d1b63 r5475:3f5cd13d1b63 r5475:3f5cd13d1b63 r5475:3f5cd13d1b63 r5475:3f5cd13d1b63 r5475:3f5cd13d1b63 r5475:3f5cd13d1b63 r27737:728d55b97775 r27737:728d55b97775 r5475:3f5cd13d1b63 r5475:3f5cd13d1b63 r6490:ba88f1f6bfd1 r6490:ba88f1f6bfd1 r25889:095192372b19 r25889:095192372b19 r6490:ba88f1f6bfd1 r28209:28b839eace1a r28209:28b839eace1a r28209:28b839eace1a r28209:28b839eace1a r28209:28b839eace1a r28209:28b839eace1a r6248:b940b09d7ab8 r7856:0efa92967a55 r6348:a905c3e6d8fa r7856:0efa92967a55 r6348:a905c3e6d8fa r7856:0efa92967a55 r6348:a905c3e6d8fa r7856:0efa92967a55 r7803:21a2033d0bf7 r7856:0efa92967a55 r6248:b940b09d7ab8 r5475:3f5cd13d1b63 r5475:3f5cd13d1b63 r19404:b33cb27be7af r9672:31eaac85a9e4 r5475:3f5cd13d1b63 r27737:728d55b97775 r9073:d7dbfc1998b4 r26832:a6bd9039c80b r26832:a6bd9039c80b r5475:3f5cd13d1b63 | /*
* This file is part of OpenTTD.
* OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
* OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
*/
/** @file newgrf_engine.h Functions for NewGRF engines. */
#ifndef NEWGRF_ENGINE_H
#define NEWGRF_ENGINE_H
#include "direction_type.h"
#include "newgrf_callbacks.h"
#include "newgrf_properties.h"
#include "vehicle_type.h"
#include "engine_type.h"
#include "gfx_type.h"
#include "newgrf_spritegroup.h"
/** Resolver for a vehicle scope. */
struct VehicleScopeResolver : public ScopeResolver {
const struct Vehicle *v; ///< The vehicle being resolved.
EngineID self_type; ///< Type of the vehicle.
bool rotor_in_gui; ///< Helicopter rotor is drawn in GUI.
/**
* Scope resolver of a single vehicle.
* @param ro Surrounding resolver.
* @param engine_type Engine type
* @param v %Vehicle being resolved.
* @param rotor_in_gui Helicopter rotor is drawn in GUI.
*/
VehicleScopeResolver(ResolverObject &ro, EngineID engine_type, const Vehicle *v, bool rotor_in_gui)
: ScopeResolver(ro), v(v), self_type(engine_type), rotor_in_gui(rotor_in_gui)
{
}
void SetVehicle(const Vehicle *v) { this->v = v; }
uint32_t GetRandomBits() const override;
uint32_t GetVariable(byte variable, [[maybe_unused]] uint32_t parameter, bool *available) const override;
uint32_t GetTriggers() const override;
};
/** Resolver for a vehicle (chain) */
struct VehicleResolverObject : public ResolverObject {
/** Application of 'wagon overrides'. */
enum WagonOverride {
WO_NONE, //!< Resolve no wagon overrides.
WO_UNCACHED, //!< Resolve wagon overrides.
WO_CACHED, //!< Resolve wagon overrides using TrainCache::cached_override.
WO_SELF, //!< Resolve self-override (helicopter rotors and such).
};
VehicleScopeResolver self_scope; ///< Scope resolver for the indicated vehicle.
VehicleScopeResolver parent_scope; ///< Scope resolver for its parent vehicle.
VehicleScopeResolver relative_scope; ///< Scope resolver for an other vehicle in the chain.
byte cached_relative_count; ///< Relative position of the other vehicle.
VehicleResolverObject(EngineID engine_type, const Vehicle *v, WagonOverride wagon_override, bool rotor_in_gui = false,
CallbackID callback = CBID_NO_CALLBACK, uint32_t callback_param1 = 0, uint32_t callback_param2 = 0);
ScopeResolver *GetScope(VarSpriteGroupScope scope = VSG_SCOPE_SELF, byte relative = 0) override;
const SpriteGroup *ResolveReal(const RealSpriteGroup *group) const override;
GrfSpecFeature GetFeature() const override;
uint32_t GetDebugID() const override;
};
static const uint TRAININFO_DEFAULT_VEHICLE_WIDTH = 29;
static const uint ROADVEHINFO_DEFAULT_VEHICLE_WIDTH = 32;
static const uint VEHICLEINFO_FULL_VEHICLE_WIDTH = 32;
struct VehicleSpriteSeq;
void SetWagonOverrideSprites(EngineID engine, CargoID cargo, const struct SpriteGroup *group, EngineID *train_id, uint trains);
const SpriteGroup *GetWagonOverrideSpriteSet(EngineID engine, CargoID cargo, EngineID overriding_engine);
void SetCustomEngineSprites(EngineID engine, byte cargo, const struct SpriteGroup *group);
void GetCustomEngineSprite(EngineID engine, const Vehicle *v, Direction direction, EngineImageType image_type, VehicleSpriteSeq *result);
#define GetCustomVehicleSprite(v, direction, image_type, result) GetCustomEngineSprite(v->engine_type, v, direction, image_type, result)
#define GetCustomVehicleIcon(et, direction, image_type, result) GetCustomEngineSprite(et, nullptr, direction, image_type, result)
void GetRotorOverrideSprite(EngineID engine, const struct Aircraft *v, EngineImageType image_type, VehicleSpriteSeq *result);
#define GetCustomRotorSprite(v, image_type, result) GetRotorOverrideSprite(v->engine_type, v, image_type, result)
#define GetCustomRotorIcon(et, image_type, result) GetRotorOverrideSprite(et, nullptr, image_type, result)
/* Forward declaration of GRFFile, to avoid unnecessary inclusion of newgrf.h
* elsewhere... */
struct GRFFile;
void SetEngineGRF(EngineID engine, const struct GRFFile *file);
uint16_t GetVehicleCallback(CallbackID callback, uint32_t param1, uint32_t param2, EngineID engine, const Vehicle *v);
uint16_t GetVehicleCallbackParent(CallbackID callback, uint32_t param1, uint32_t param2, EngineID engine, const Vehicle *v, const Vehicle *parent);
bool UsesWagonOverride(const Vehicle *v);
/* Handler to Evaluate callback 36. If the callback fails (i.e. most of the
* time) orig_value is returned */
int GetVehicleProperty(const Vehicle *v, PropertyID property, int orig_value, bool is_signed = false);
int GetEngineProperty(EngineID engine, PropertyID property, int orig_value, const Vehicle *v = nullptr, bool is_signed = false);
enum class BuildProbabilityType {
Reversed = 0,
};
bool TestVehicleBuildProbability(Vehicle *v, EngineID engine, BuildProbabilityType type);
enum VehicleTrigger {
VEHICLE_TRIGGER_NEW_CARGO = 0x01,
/* Externally triggered only for the first vehicle in chain */
VEHICLE_TRIGGER_DEPOT = 0x02,
/* Externally triggered only for the first vehicle in chain, only if whole chain is empty */
VEHICLE_TRIGGER_EMPTY = 0x04,
/* Not triggered externally (called for the whole chain if we got NEW_CARGO) */
VEHICLE_TRIGGER_ANY_NEW_CARGO = 0x08,
/* Externally triggered for each vehicle in chain */
VEHICLE_TRIGGER_CALLBACK_32 = 0x10,
};
void TriggerVehicle(Vehicle *veh, VehicleTrigger trigger);
void AlterVehicleListOrder(EngineID engine, uint target);
void CommitVehicleListOrderChanges();
EngineID GetNewEngineID(const GRFFile *file, VehicleType type, uint16_t internal_id);
void FillNewGRFVehicleCache(const Vehicle *v);
#endif /* NEWGRF_ENGINE_H */
|