summaryrefslogtreecommitdiffstats
path: root/src/renderer/2dEffect.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/renderer/2dEffect.h')
-rw-r--r--src/renderer/2dEffect.h93
1 files changed, 93 insertions, 0 deletions
diff --git a/src/renderer/2dEffect.h b/src/renderer/2dEffect.h
new file mode 100644
index 00000000..a8013b34
--- /dev/null
+++ b/src/renderer/2dEffect.h
@@ -0,0 +1,93 @@
+#pragma once
+
+enum {
+ EFFECT_LIGHT,
+ EFFECT_PARTICLE,
+ EFFECT_ATTRACTOR
+};
+
+enum {
+ LIGHT_ON,
+ LIGHT_ON_NIGHT,
+ LIGHT_FLICKER,
+ LIGHT_FLICKER_NIGHT,
+ LIGHT_FLASH1,
+ LIGHT_FLASH1_NIGHT,
+ LIGHT_FLASH2,
+ LIGHT_FLASH2_NIGHT,
+ LIGHT_FLASH3,
+ LIGHT_FLASH3_NIGHT,
+ LIGHT_RANDOM_FLICKER,
+ LIGHT_RANDOM_FLICKER_NIGHT,
+ LIGHT_SPECIAL,
+ LIGHT_BRIDGE_FLASH1,
+ LIGHT_BRIDGE_FLASH2,
+};
+
+enum {
+ ATTRACTORTYPE_ICECREAM,
+ ATTRACTORTYPE_STARE
+};
+
+enum {
+ LIGHTFLAG_LOSCHECK = 1,
+ // same order as CPointLights flags, must start at 2
+ LIGHTFLAG_FOG_NORMAL = 2, // can have light and fog
+ LIGHTFLAG_FOG_ALWAYS = 4, // fog only
+ LIGHTFLAG_FOG = (LIGHTFLAG_FOG_NORMAL|LIGHTFLAG_FOG_ALWAYS)
+};
+
+class C2dEffect
+{
+public:
+ struct Light {
+ float dist;
+ float range; // of pointlight
+ float size;
+ float shadowSize;
+ uint8 lightType; // LIGHT_
+ uint8 roadReflection;
+ uint8 flareType;
+ uint8 shadowIntensity;
+ uint8 flags; // LIGHTFLAG_
+ RwTexture *corona;
+ RwTexture *shadow;
+ };
+ struct Particle {
+ int particleType;
+ CVector dir;
+ float scale;
+ };
+ struct Attractor {
+ CVector dir;
+ int8 type;
+ uint8 probability;
+ };
+
+ CVector pos;
+ CRGBA col;
+ uint8 type;
+ union {
+ Light light;
+ Particle particle;
+ Attractor attractor;
+ };
+
+ C2dEffect(void) {}
+ void Shutdown(void){
+ if(type == EFFECT_LIGHT){
+ if(light.corona)
+ RwTextureDestroy(light.corona);
+#if GTA_VERSION >= GTA3_PC_11
+ light.corona = nil;
+#endif
+ if(light.shadow)
+ RwTextureDestroy(light.shadow);
+#if GTA_VERSION >= GTA3_PC_11
+ light.shadow = nil;
+#endif
+ }
+ }
+};
+
+VALIDATE_SIZE(C2dEffect, 0x34);