OpenGothic
Open source reimplementation of Gothic I and II
Loading...
Searching...
No Matches
particlefx.h
Go to the documentation of this file.
1#pragma once
2
3#include <Tempest/RenderState>
4
5#include <zenkit/addon/daedalus.hh>
6
7#include <Tempest/Texture2d>
8
9#include "graphics/visualfx.h"
10#include "graphics/material.h"
11
12class PfxEmitterMesh;
13
14class ParticleFx final {
15 public:
16 ParticleFx(const Material& mat, const zenkit::VirtualObject& vob);
17 ParticleFx(const zenkit::IParticleEffect& src, std::string_view name);
18 ParticleFx(const ParticleFx& proto, const VisualFx::Key& key);
19
20 enum class EmitterType:uint8_t {
21 Point,
22 Line,
23 Box,
24 Circle,
25 Sphere,
26 Mesh
27 };
28
29 enum class Dir:uint8_t {
30 Rand,
31 Dir,
32 Target
33 };
34
35 enum class Frame:uint8_t {
36 World,
37 Object,
38 Node,
39 };
40
41 enum class Distribution:uint8_t {
42 Rand,
43 Dir,
44 Uniform,
45 Walk
46 };
47
48 enum class Orientation:uint8_t {
49 None,
52 };
53
54 using KeyList = std::vector<float>;
55
56 std::string dbgName;
57
58 float ppsValue = 0;
60 bool ppsIsLooping = false;
61 bool ppsIsSmooth = false;
62 float ppsFPS = 0;
63 const ParticleFx* ppsCreateEm = nullptr;
64 uint64_t ppsCreateEmDelay = 0;
65
68 Tempest::Vec3 shpOffsetVec;
71 bool shpIsVolume = false;
72 Tempest::Vec3 shpDim;
73 const PfxEmitterMesh* shpMesh = nullptr;
74 std::string shpMesh_S;
75 bool shpMeshRender = false;
77 bool shpScaleIsLooping = false;
78 bool shpScaleIsSmooth = false;
79 float shpScaleFPS = 0.f;
80
84 Tempest::Vec3 dirModeTargetPos;
85 float dirAngleHead = 0.f;
86 float dirAngleHeadVar = 0.f;
87 float dirAngleElev = 0.f;
88 float dirAngleElevVar = 0.f;
89
90 float velAvg = 0.f;
91 float velVar = 0.f;
92 float lspPartAvg = 0.f;
93 float lspPartVar = 0.f;
94
95 Tempest::Vec3 flyGravity;
96 bool flyCollDet = false;
97
100 bool visTexIsQuadPoly = true;
101 float visTexAniFPS = 0.f;
102 bool visTexAniIsLooping = false;
103 Tempest::Vec3 visTexColorStart;
104 Tempest::Vec3 visTexColorEnd;
105 Tempest::Vec2 visSizeStart;
106 float visSizeEndScale = 0.f;
107 float visAlphaStart = 0.f;
108 float visAlphaEnd = 0.f;
109 bool visYawAlign = false;
110 bool visZBias = false;
111
112 const Tempest::Texture2d* trlTexture = nullptr;
113 float trlFadeSpeed = 0.f;
114 float trlWidth = 0.f;
115
116 const Tempest::Texture2d* mrkTexture = nullptr;
117 float mrkFadeSpeed = 0.f;
118 float mrkSize = 0.f;
119
120 std::string flockMode;
121 float flockStrength = 0;
122
123 bool useEmittersFOR = true;
124
125 std::string timeStartEnd_S;
126 bool m_bIsAmbientPFX=false;
127
128 uint64_t prefferedTime = 0;
129
130 bool isDecal() const;
131 bool hasTrails() const;
132
133 uint64_t maxLifetime() const;
134 uint64_t effectPrefferedTime() const;
135 float maxPps() const;
136 float shpScale(uint64_t time) const;
137 float ppsScale(uint64_t time) const;
138
139 private:
140 uint64_t calcPrefferedTimeSingle() const;
141 static uint64_t calcPrefferedTimeSingle(const KeyList& k, float fps);
142
143 static auto loadTexture(std::string_view src) -> const Tempest::Texture2d*;
144 static KeyList loadArr(std::string_view src);
145 static EmitterType loadEmitType(std::string_view src);
146 static Frame loadFrameType(std::string_view src);
147 static Distribution loadDistribType(std::string_view src);
148 static Dir loadDirType(std::string_view src);
149 static Orientation loadOrientation(std::string_view src);
150
151 float fetchScaleKey(uint64_t time, const KeyList& k, float fps, bool smooth, bool loop) const;
152 };
153
bool visTexIsQuadPoly
Definition particlefx.h:100
float mrkFadeSpeed
Definition particlefx.h:117
Frame shpFOR
Definition particlefx.h:67
bool useEmittersFOR
Definition particlefx.h:123
float flockStrength
Definition particlefx.h:121
const Tempest::Texture2d * trlTexture
Definition particlefx.h:112
float maxPps() const
float dirAngleHead
Definition particlefx.h:85
bool visZBias
Definition particlefx.h:110
float lspPartAvg
Definition particlefx.h:92
std::string flockMode
Definition particlefx.h:120
const Tempest::Texture2d * mrkTexture
Definition particlefx.h:116
float dirAngleElevVar
Definition particlefx.h:88
uint64_t ppsCreateEmDelay
Definition particlefx.h:64
Tempest::Vec3 visTexColorStart
Definition particlefx.h:103
const ParticleFx * ppsCreateEm
Definition particlefx.h:63
bool shpScaleIsSmooth
Definition particlefx.h:78
Material visMaterial
Definition particlefx.h:98
float shpScaleFPS
Definition particlefx.h:79
uint64_t effectPrefferedTime() const
float mrkSize
Definition particlefx.h:118
std::string timeStartEnd_S
Definition particlefx.h:125
std::string dbgName
Definition particlefx.h:56
const PfxEmitterMesh * shpMesh
Definition particlefx.h:73
float visAlphaStart
Definition particlefx.h:107
uint64_t prefferedTime
Definition particlefx.h:128
float shpDistribWalkSpeed
Definition particlefx.h:70
EmitterType shpType
Definition particlefx.h:66
Frame dirFOR
Definition particlefx.h:82
bool shpMeshRender
Definition particlefx.h:75
Tempest::Vec3 visTexColorEnd
Definition particlefx.h:104
float ppsValue
Definition particlefx.h:58
KeyList shpScaleKeys
Definition particlefx.h:76
float dirAngleHeadVar
Definition particlefx.h:86
Frame dirModeTargetFOR
Definition particlefx.h:83
std::string shpMesh_S
Definition particlefx.h:74
Tempest::Vec3 flyGravity
Definition particlefx.h:95
bool isDecal() const
float visSizeEndScale
Definition particlefx.h:106
bool shpIsVolume
Definition particlefx.h:71
uint64_t maxLifetime() const
Tempest::Vec3 shpDim
Definition particlefx.h:72
bool hasTrails() const
float ppsFPS
Definition particlefx.h:62
bool visTexAniIsLooping
Definition particlefx.h:102
Tempest::Vec2 visSizeStart
Definition particlefx.h:105
float trlWidth
Definition particlefx.h:114
bool ppsIsSmooth
Definition particlefx.h:61
float velVar
Definition particlefx.h:91
KeyList ppsScaleKeys
Definition particlefx.h:59
Tempest::Vec3 shpOffsetVec
Definition particlefx.h:68
float ppsScale(uint64_t time) const
Orientation visOrientation
Definition particlefx.h:99
bool visYawAlign
Definition particlefx.h:109
bool ppsIsLooping
Definition particlefx.h:60
bool m_bIsAmbientPFX
Definition particlefx.h:126
bool shpScaleIsLooping
Definition particlefx.h:77
float shpScale(uint64_t time) const
float velAvg
Definition particlefx.h:90
float trlFadeSpeed
Definition particlefx.h:113
float visAlphaEnd
Definition particlefx.h:108
float lspPartVar
Definition particlefx.h:93
float visTexAniFPS
Definition particlefx.h:101
bool flyCollDet
Definition particlefx.h:96
Distribution shpDistribType
Definition particlefx.h:69
Tempest::Vec3 dirModeTargetPos
Definition particlefx.h:84
std::vector< float > KeyList
Definition particlefx.h:54
float dirAngleElev
Definition particlefx.h:87