OpenGothic
Open source reimplementation of Gothic I and II
Loading...
Searching...
No Matches
pfxcontroller.cpp
Go to the documentation of this file.
1#include "pfxcontroller.h"
2
3#include "world/world.h"
5#include "game/serialize.h"
6#include "gothic.h"
7
8PfxController::PfxController(Vob* parent, World& world, const zenkit::VParticleEffectController& ctrl, Flags flags)
9 :AbstractTrigger(parent,world,ctrl,flags) {
10 killWhenDone = ctrl.kill_when_done;
11
12 if(const ParticleFx* view = Gothic::inst().loadParticleFx(ctrl.visual->name)) {
13 visual = PfxEmitter(world,view);
14 visual.setActive(true);
15 visual.setLooped(true);
16 visual.setObjMatrix(transform());
17 }
18
19 if(const ParticleFx* view = Gothic::inst().loadParticleFx(ctrl.pfx_name)) {
20 lifeTime = view->maxLifetime();
21 pfx = PfxEmitter(world,view);
22 pfx.setActive(ctrl.initially_running);
23 pfx.setLooped(true);
25 }
26 }
27
28void PfxController::save(Serialize& fout) const {
30 fout.write(killed,lifeTime,pfx.isActive());
31 }
32
35 bool active = false;
36 fin.read(killed,lifeTime,active);
37 pfx.setActive(active);
38
39 if(killed!=std::numeric_limits<uint64_t>::max())
41 }
42
43void PfxController::onTrigger(const TriggerEvent&) {
44 if(killed<world.tickCount())
45 return;
46 pfx.setActive(true);
47 if(killWhenDone) {
48 killed = world.tickCount() + lifeTime;
50 }
51 }
52
53void PfxController::onUntrigger(const TriggerEvent&) {
54 pfx.setActive(false);
55 }
56
57void PfxController::moveEvent() {
59 visual.setObjMatrix(transform());
61 }
62
63void PfxController::tick(uint64_t /*dt*/) {
64 if(killed<world.tickCount()) {
66 pfx.setActive(false);
67 }
68 }
void load(Serialize &fin) override
void save(Serialize &fout) const override
static Gothic & inst()
Definition gothic.cpp:249
PfxController(Vob *parent, World &world, const zenkit::VParticleEffectController &data, Flags flags)
void load(Serialize &fin) override
void save(Serialize &fout) const override
void setLooped(bool loop)
void setObjMatrix(const Tempest::Matrix4x4 &mt)
bool isActive() const
void setActive(bool act)
void write(const Arg &... a)
Definition serialize.h:76
void read(Arg &... a)
Definition serialize.h:81
Definition vob.h:11
virtual void moveEvent()
Definition vob.cpp:85
Flags
Definition vob.h:13
World & world
Definition vob.h:45
auto transform() const -> const Tempest::Matrix4x4 &
Definition vob.h:34
Definition world.h:31
uint64_t tickCount() const
Definition world.cpp:387