ZoneCodeGenerator: Make unions work with conditions and only load one union member at a time consistently

This commit is contained in:
Jan
2019-12-06 16:33:05 +01:00
parent f4a2639e30
commit 9253ac14fa
9 changed files with 196 additions and 17 deletions

View File

@ -4619,11 +4619,9 @@ union FxElemDefVisuals
union FxElemExtendedDefPtr
{
FxTrailDef *localTrailDef;
FxTrailDef *trailDef;
FxSpotLightDef *localSpotLightDef;
FxSpotLightDef *spotLightDef;
void *unknownDef;
char *unknownDef;
};
struct FxBillboardTrim
@ -4643,6 +4641,26 @@ struct FxElemSpawnSound
const char *spawnSound;
};
enum FxElemType : char
{
FX_ELEM_TYPE_SPRITE_BILLBOARD = 0x0,
FX_ELEM_TYPE_SPRITE_ORIENTED = 0x1,
FX_ELEM_TYPE_SPRITE_ROTATED = 0x2,
FX_ELEM_TYPE_TAIL = 0x3,
FX_ELEM_TYPE_LINE = 0x4,
FX_ELEM_TYPE_TRAIL = 0x5,
FX_ELEM_TYPE_CLOUD = 0x6,
FX_ELEM_TYPE_MODEL = 0x7,
FX_ELEM_TYPE_OMNI_LIGHT = 0x8,
FX_ELEM_TYPE_SPOT_LIGHT = 0x9,
FX_ELEM_TYPE_SOUND = 0xA,
FX_ELEM_TYPE_DECAL = 0xB,
FX_ELEM_TYPE_RUNNER = 0xC,
FX_ELEM_TYPE_COUNT = 0xD,
FX_ELEM_TYPE_LAST_SPRITE = 0x5,
FX_ELEM_TYPE_LAST_DRAWN = 0x9,
};
const struct FxElemDef
{
int flags;
@ -4664,7 +4682,7 @@ const struct FxElemDef
FxFloatRange reflectionFactor;
FxElemAtlas atlas;
float windInfluence;
char elemType;
FxElemType elemType;
char visualCount;
char velIntervalCount;
char visStateIntervalCount;