OpenGothic
Open source reimplementation of Gothic I and II
Loading...
Searching...
No Matches
visualfx.h
Go to the documentation of this file.
1#pragma once
2
3#include <zenkit/DaedalusVm.hh>
4#include <zenkit/addon/daedalus.hh>
5
6#include <Tempest/Point>
7#include <optional>
8
9#include "game/constants.h"
11
12class World;
13
14class VisualFx final {
15 public:
16 VisualFx(const zenkit::IEffectBase& src, zenkit::DaedalusVm& tmpVm, std::string_view name);
17
18 enum Collision : uint8_t {
21 Create = 1<<1,
22 CreateOnce = 1<<2,
23 NoResp = 1<<3,
24 CreateQuad = 1<<4,
25 };
26
27 enum class CollisionAlign : uint8_t {
28 Normal = 0,
30 };
31
32 enum Trajectory : uint8_t {
34 Target = 1<<0,
35 Line = 1<<1,
36 Spline = 1<<2,
37 Random = 1<<3,
38 Fixed = 1<<4,
39 Follow = 1<<5,
40 };
41
42 enum class LoopMode : uint8_t {
43 LoopModeNone = 0,
44 PinPong,
46 Halt
47 };
48
49 enum class EaseFunc : uint8_t {
50 Linear,
51 };
52
53
54 using OptVec3 = std::optional<Tempest::Vec3>;
55 using OptTrajectory = std::optional<Trajectory>;
56
57 class Key {
58 public:
59 Key() = default;
60 Key(const zenkit::IParticleEffectEmitKey& k);
61
62 // vars which influence all particles all time
63 const ParticleFx* visName = nullptr;
64 float visSizeScale=0.f;
65 float scaleDuration=0.f; // time to reach full scale at this key for relevant vars (size, alpha, etc.)
66
67 float pfx_ppsValue = 0.f;
68 bool pfx_ppsIsSmoothChg = false; // changes pps smoothing of pfx if set to 1 and pfx pps scale keys are set
69 bool pfx_ppsIsLoopingChg = false; // changes looping of pfx if set to 1
70 float pfx_scTime=0.f;
72
73 // vars which influence particles at creation level only
75 bool pfx_shpIsVolumeChg = false; // changes volume rendering of pfx if set to 1
76 float pfx_shpScaleFPS=0.f;
80 std::string pfx_dirMode_S;
81 std::string pfx_dirFOR_S;
84 float pfx_velAvg=0.f;
85 float pfx_lspPartAvg=0.f;
87
88 std::string lightPresetName;
89 float lightRange=0.f;
90 std::string sfxID;
92 const VisualFx* emCreateFXID = nullptr;
93
94 float emFlyGravity=0.f;
97 float emTrjEaseVel=0.f;
99 uint64_t emFXLifeSpan=0;
100 private:
101 };
102
103 const char* dbgName = "";
104 std::string visName_S; // ParticleFx ?
105 Tempest::Vec2 visSize;
106 float visAlpha = 0.f;
108 float visTexAniFPS = 0.f;
109 bool visTexAniIsLooping = false;
110
112 std::string emTrjOriginNode;
113 std::string emTrjTargetNode;
114 float emTrjTargetRange = 0.f;
115 float emTrjTargetAzi = 0.f;
116 float emTrjTargetElev = 0.f;
117 int32_t emTrjNumKeys = 0;
118 int32_t emTrjNumKeysVar = 0;
119 float emTrjAngleElevVar = 0.f;
120 float emTrjAngleHeadVar = 0.f;
121 float emTrjKeyDistVar = 0.f;
124 float emTrjEaseVel = 0.f;
127
128 const VisualFx* emFXCreate = nullptr;
129 std::string emFXInvestOrigin;
130 std::string emFXInvestTarget;
131 uint64_t emFXTriggerDelay = 0;
132 bool emFXCreatedOwnTrj = false;
135 const VisualFx* emFXCollStat = nullptr;
136 const VisualFx* emFXCollDyn = nullptr;
137 const VisualFx* emFXCollDynPerc = nullptr;
140 uint64_t emFXLifeSpan = 0;
141
142 bool emCheckCollision = false;
145 float emFlyGravity = 0.f;
146 Tempest::Vec3 emSelfRotVel;
147 std::string userString[zenkit::IEffectBase::user_string_count];
148 std::string lightPresetName;
149 std::string sfxID;
150 bool sfxIsAmbient = false;
151 bool sendAssessMagic = false;
152 float secsPerDamage = 0.f;
153
154 uint64_t effectPrefferedTime() const;
155 bool isMeshEmmiter() const { return emTrjOriginNode=="="; }
156
157 PfxEmitter visual(World& owner) const;
158 const Key* key(SpellFxKey type, int32_t keyLvl=0) const;
159
160 private:
161 static Trajectory loadTrajectory (std::string_view str);
162 static LoopMode loadLoopmode (std::string_view str);
163 static EaseFunc loadEaseFunc (std::string_view str);
164 static CollisionAlign loadCollisionAlign(std::string_view str);
165
166 static Collision strToColision(std::string_view s);
167
168 Key keys [int(SpellFxKey::Count)];
169 bool hasKey[int(SpellFxKey::Count)] = {};
170 std::vector<Key> investKeys;
171 };
172
std::string sfxID
Definition visualfx.h:90
OptTrajectory emTrjMode
Definition visualfx.h:96
std::string lightPresetName
Definition visualfx.h:88
float emFlyGravity
Definition visualfx.h:94
float visSizeScale
Definition visualfx.h:64
float pfx_velAvg
Definition visualfx.h:84
OptVec3 pfx_shpOffsetVec
Definition visualfx.h:78
std::string pfx_shpDistribType_S
Definition visualfx.h:79
std::string pfx_dirModeTargetFOR_S
Definition visualfx.h:82
std::string pfx_dirFOR_S
Definition visualfx.h:81
float scaleDuration
Definition visualfx.h:65
int sfxIsAmbient
Definition visualfx.h:91
float pfx_lspPartAvg
Definition visualfx.h:85
float pfx_ppsValue
Definition visualfx.h:67
float lightRange
Definition visualfx.h:89
float emTrjEaseVel
Definition visualfx.h:97
bool emCheckCollision
Definition visualfx.h:98
const VisualFx * emCreateFXID
Definition visualfx.h:92
OptVec3 pfx_shpDim
Definition visualfx.h:74
bool pfx_shpIsVolumeChg
Definition visualfx.h:75
Key()=default
float pfx_shpScaleFPS
Definition visualfx.h:76
bool pfx_ppsIsSmoothChg
Definition visualfx.h:68
OptVec3 pfx_flyGravity
Definition visualfx.h:71
std::string pfx_dirModeTargetPos_S
Definition visualfx.h:83
float pfx_shpDistribWalkSpeed
Definition visualfx.h:77
uint64_t emFXLifeSpan
Definition visualfx.h:99
float pfx_visAlphaStart
Definition visualfx.h:86
const ParticleFx * visName
Definition visualfx.h:63
bool pfx_ppsIsLoopingChg
Definition visualfx.h:69
OptVec3 emSelfRotVel
Definition visualfx.h:95
std::string pfx_dirMode_S
Definition visualfx.h:80
float pfx_scTime
Definition visualfx.h:70
float visTexAniFPS
Definition visualfx.h:108
Trajectory emTrjMode
Definition visualfx.h:111
uint64_t emFXLifeSpan
Definition visualfx.h:140
std::string userString[zenkit::IEffectBase::user_string_count]
Definition visualfx.h:147
EaseFunc emTrjEaseFunc
Definition visualfx.h:123
CollisionAlign
Definition visualfx.h:27
const VisualFx * emFXCollDynPerc
Definition visualfx.h:137
Material::AlphaFunc visAlphaBlendFunc
Definition visualfx.h:107
PfxEmitter visual(World &owner) const
Definition visualfx.cpp:145
bool visTexAniIsLooping
Definition visualfx.h:109
int32_t emTrjNumKeys
Definition visualfx.h:117
Tempest::Vec3 emSelfRotVel
Definition visualfx.h:146
std::string sfxID
Definition visualfx.h:149
CollisionAlign emFXCollDynAlign
Definition visualfx.h:139
bool emAdjustShpToOrigin
Definition visualfx.h:143
std::string lightPresetName
Definition visualfx.h:148
std::optional< Trajectory > OptTrajectory
Definition visualfx.h:55
float emTrjEaseVel
Definition visualfx.h:124
const VisualFx * emFXCreate
Definition visualfx.h:128
Tempest::Vec2 visSize
Definition visualfx.h:105
Collision emActionCollDyn
Definition visualfx.h:133
LoopMode emTrjLoopMode
Definition visualfx.h:122
const VisualFx * emFXCollStat
Definition visualfx.h:135
std::string visName_S
Definition visualfx.h:104
float emTrjTargetRange
Definition visualfx.h:114
bool emFXCreatedOwnTrj
Definition visualfx.h:132
float emTrjAngleElevVar
Definition visualfx.h:119
bool emTrjDynUpdateTargetOnly
Definition visualfx.h:126
float emTrjKeyDistVar
Definition visualfx.h:121
bool isMeshEmmiter() const
Definition visualfx.h:155
const char * dbgName
Definition visualfx.h:103
float secsPerDamage
Definition visualfx.h:152
std::string emTrjTargetNode
Definition visualfx.h:113
std::string emTrjOriginNode
Definition visualfx.h:112
float emTrjTargetAzi
Definition visualfx.h:115
CollisionAlign emFXCollStatAlign
Definition visualfx.h:138
uint64_t emFXTriggerDelay
Definition visualfx.h:131
uint64_t emInvestNextKeyDuration
Definition visualfx.h:144
@ Collide
Definition visualfx.h:20
@ CreateQuad
Definition visualfx.h:24
@ CreateOnce
Definition visualfx.h:22
@ NoCollision
Definition visualfx.h:19
float emTrjTargetElev
Definition visualfx.h:116
bool emCheckCollision
Definition visualfx.h:142
uint64_t effectPrefferedTime() const
Definition visualfx.cpp:141
bool sendAssessMagic
Definition visualfx.h:151
std::string emFXInvestOrigin
Definition visualfx.h:129
float emFlyGravity
Definition visualfx.h:145
bool sfxIsAmbient
Definition visualfx.h:150
int32_t emTrjNumKeysVar
Definition visualfx.h:118
std::optional< Tempest::Vec3 > OptVec3
Definition visualfx.h:54
float emTrjDynUpdateDelay
Definition visualfx.h:125
float emTrjAngleHeadVar
Definition visualfx.h:120
Collision emActionCollStat
Definition visualfx.h:134
const VisualFx * emFXCollDyn
Definition visualfx.h:136
const Key * key(SpellFxKey type, int32_t keyLvl=0) const
Definition visualfx.cpp:149
float visAlpha
Definition visualfx.h:106
@ TrajectoryNone
Definition visualfx.h:33
std::string emFXInvestTarget
Definition visualfx.h:130
Definition world.h:31
SpellFxKey
Definition constants.h:268