mirror of https://github.com/OpenTTD/OpenTTD
(svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
parent
967752fe7c
commit
ddbb61199b
7
newgrf.c
7
newgrf.c
|
@ -1742,8 +1742,14 @@ static void NewVehicle_SpriteGroupMapping(byte *buf, int len)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (wagover) {
|
if (wagover) {
|
||||||
|
/* If the ID for this action 3 is the same as the vehicle ID,
|
||||||
|
* this indicates we have a helicopter rotor override. */
|
||||||
|
if (feature == GSF_AIRCRAFT && engine == last_engines[i]) {
|
||||||
|
SetRotorOverrideSprites(engine, _cur_grffile->spritegroups[groupid]);
|
||||||
|
} else {
|
||||||
// TODO: No multiple cargo types per vehicle yet. --pasky
|
// TODO: No multiple cargo types per vehicle yet. --pasky
|
||||||
SetWagonOverrideSprites(engine, _cur_grffile->spritegroups[groupid], last_engines, last_engines_count);
|
SetWagonOverrideSprites(engine, _cur_grffile->spritegroups[groupid], last_engines, last_engines_count);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
SetCustomEngineSprites(engine, GC_DEFAULT, _cur_grffile->spritegroups[groupid]);
|
SetCustomEngineSprites(engine, GC_DEFAULT, _cur_grffile->spritegroups[groupid]);
|
||||||
last_engines[i] = engine;
|
last_engines[i] = engine;
|
||||||
|
@ -2534,6 +2540,7 @@ static void ResetNewGRFData(void)
|
||||||
|
|
||||||
// Unload sprite group data
|
// Unload sprite group data
|
||||||
UnloadWagonOverrides();
|
UnloadWagonOverrides();
|
||||||
|
UnloadRotorOverrideSprites();
|
||||||
UnloadCustomEngineSprites();
|
UnloadCustomEngineSprites();
|
||||||
UnloadCustomEngineNames();
|
UnloadCustomEngineNames();
|
||||||
ResetEngineListOrder();
|
ResetEngineListOrder();
|
||||||
|
|
|
@ -125,6 +125,32 @@ void UnloadCustomEngineSprites(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const SpriteGroup *heli_rotor_custom_sprites[NUM_AIRCRAFT_ENGINES];
|
||||||
|
|
||||||
|
/** Load a rotor override sprite group for an aircraft */
|
||||||
|
void SetRotorOverrideSprites(EngineID engine, const SpriteGroup *group)
|
||||||
|
{
|
||||||
|
assert(engine >= AIRCRAFT_ENGINES_INDEX);
|
||||||
|
assert(engine < AIRCRAFT_ENGINES_INDEX + NUM_AIRCRAFT_ENGINES);
|
||||||
|
|
||||||
|
if (heli_rotor_custom_sprites[engine - AIRCRAFT_ENGINES_INDEX] != NULL) {
|
||||||
|
DEBUG(grf, 6)("SetRotorOverrideSprites: engine `%d' already has group -- replacing.", engine);
|
||||||
|
}
|
||||||
|
heli_rotor_custom_sprites[engine - AIRCRAFT_ENGINES_INDEX] = group;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Unload all rotor override sprite groups */
|
||||||
|
void UnloadRotorOverrideSprites(void)
|
||||||
|
{
|
||||||
|
EngineID engine;
|
||||||
|
|
||||||
|
/* Starting at AIRCRAFT_ENGINES_INDEX may seem pointless, but it means
|
||||||
|
* the context of EngineID is correct */
|
||||||
|
for (engine = AIRCRAFT_ENGINES_INDEX; engine < AIRCRAFT_ENGINES_INDEX + NUM_AIRCRAFT_ENGINES; engine++) {
|
||||||
|
heli_rotor_custom_sprites[engine - AIRCRAFT_ENGINES_INDEX] = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void SetEngineGRF(EngineID engine, uint32 grfid)
|
void SetEngineGRF(EngineID engine, uint32 grfid)
|
||||||
{
|
{
|
||||||
assert(engine < TOTAL_NUM_ENGINES);
|
assert(engine < TOTAL_NUM_ENGINES);
|
||||||
|
@ -435,6 +461,30 @@ SpriteID GetCustomEngineSprite(EngineID engine, const Vehicle *v, Direction dire
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
SpriteID GetRotorOverrideSprite(EngineID engine, const Vehicle *v)
|
||||||
|
{
|
||||||
|
const SpriteGroup *group;
|
||||||
|
ResolverObject object;
|
||||||
|
|
||||||
|
assert(engine >= AIRCRAFT_ENGINES_INDEX);
|
||||||
|
assert(engine < AIRCRAFT_ENGINES_INDEX + NUM_AIRCRAFT_ENGINES);
|
||||||
|
|
||||||
|
/* Only valid for helicopters */
|
||||||
|
assert((AircraftVehInfo(engine)->subtype & 1) == 0);
|
||||||
|
|
||||||
|
NewVehicleResolver(&object, v);
|
||||||
|
|
||||||
|
group = heli_rotor_custom_sprites[engine - AIRCRAFT_ENGINES_INDEX];
|
||||||
|
group = Resolve(group, &object);
|
||||||
|
|
||||||
|
if (group == NULL || group->type != SGT_RESULT) return 0;
|
||||||
|
|
||||||
|
if (v == NULL) return group->g.result.sprite;
|
||||||
|
|
||||||
|
return group->g.result.sprite + v->next->next->u.air.state;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check if a wagon is currently using a wagon override
|
* Check if a wagon is currently using a wagon override
|
||||||
* @param v The wagon to check
|
* @param v The wagon to check
|
||||||
|
|
|
@ -16,7 +16,11 @@ VARDEF const uint32 cargo_classes[16];
|
||||||
|
|
||||||
void SetWagonOverrideSprites(EngineID engine, const struct SpriteGroup *group, byte *train_id, int trains);
|
void SetWagonOverrideSprites(EngineID engine, const struct SpriteGroup *group, byte *train_id, int trains);
|
||||||
void SetCustomEngineSprites(EngineID engine, byte cargo, const struct SpriteGroup *group);
|
void SetCustomEngineSprites(EngineID engine, byte cargo, const struct SpriteGroup *group);
|
||||||
|
void SetRotorOverrideSprites(EngineID engine, const struct SpriteGroup *group);
|
||||||
SpriteID GetCustomEngineSprite(EngineID engine, const Vehicle* v, Direction direction);
|
SpriteID GetCustomEngineSprite(EngineID engine, const Vehicle* v, Direction direction);
|
||||||
|
SpriteID GetRotorOverrideSprite(EngineID engine, const Vehicle* v);
|
||||||
|
#define GetCustomRotorSprite(v) GetRotorOverrideSprite(v->engine_type, v)
|
||||||
|
#define GetCustomRotorIcon(et) GetRotorOverrideSprite(et, NULL)
|
||||||
|
|
||||||
void SetEngineGRF(EngineID engine, uint32 grfid);
|
void SetEngineGRF(EngineID engine, uint32 grfid);
|
||||||
uint32 GetEngineGRFID(EngineID engine);
|
uint32 GetEngineGRFID(EngineID engine);
|
||||||
|
@ -41,6 +45,7 @@ void SetCustomEngineName(EngineID engine, StringID name);
|
||||||
StringID GetCustomEngineName(EngineID engine);
|
StringID GetCustomEngineName(EngineID engine);
|
||||||
|
|
||||||
void UnloadWagonOverrides(void);
|
void UnloadWagonOverrides(void);
|
||||||
|
void UnloadRotorOverrideSprites(void);
|
||||||
void UnloadCustomEngineSprites(void);
|
void UnloadCustomEngineSprites(void);
|
||||||
void UnloadCustomEngineNames(void);
|
void UnloadCustomEngineNames(void);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue