OpenGothic
Open source reimplementation of Gothic I and II
Loading...
Searching...
No Matches
pfxobjects.h
Go to the documentation of this file.
1#pragma once
2
3#include <Tempest/Matrix4x4>
4#include <Tempest/UniformBuffer>
5
6#include <memory>
7#include <list>
8
11
12class SceneGlobals;
13class ParticleFx;
14class PfxBucket;
15class WorldView;
16
17class PfxObjects final {
18 public:
19 PfxObjects(WorldView& world, const SceneGlobals& scene, VisualObjects& visual);
21
22 static constexpr const float viewRage = 4000.f;
23
24 void setViewerPos(const Tempest::Vec3& pos);
25
26 void resetTicks();
27 void tick(uint64_t ticks);
28 bool isInPfxRange(const Tempest::Vec3& pos) const;
29
30 void preFrameUpdate(uint8_t fId);
31
32 void drawGBuffer (Tempest::Encoder<Tempest::CommandBuffer>& cmd, uint8_t fId);
33 void drawShadow (Tempest::Encoder<Tempest::CommandBuffer>& cmd, uint8_t fId, int layer);
34 void drawTranslucent(Tempest::Encoder<Tempest::CommandBuffer>& cmd, uint8_t fId);
35
36 private:
37 struct SpriteEmitter {
38 zenkit::SpriteAlignment visualCamAlign = zenkit::SpriteAlignment::NONE;
39 int32_t zBias = 0;
40 Tempest::Vec2 decalDim = {};
41 std::unique_ptr<ParticleFx> pfx;
42 };
43
44 PfxBucket& getBucket(const ParticleFx& decl);
45 PfxBucket& getBucket(const Material& mat, const zenkit::VirtualObject& vob);
46
47 WorldView& world;
48 const SceneGlobals& scene;
49 VisualObjects& visual;
50 std::recursive_mutex sync;
51
52 std::list<PfxBucket> bucket;
53 std::vector<SpriteEmitter> spriteEmit;
54
55 Tempest::Vec3 viewerPos={};
56 uint64_t lastUpdate=0;
57
58 friend class PfxEmitter;
59 friend class TrlObjects;
60 };
void preFrameUpdate(uint8_t fId)
void tick(uint64_t ticks)
void drawGBuffer(Tempest::Encoder< Tempest::CommandBuffer > &cmd, uint8_t fId)
void drawShadow(Tempest::Encoder< Tempest::CommandBuffer > &cmd, uint8_t fId, int layer)
void setViewerPos(const Tempest::Vec3 &pos)
friend class TrlObjects
Definition pfxobjects.h:59
bool isInPfxRange(const Tempest::Vec3 &pos) const
void resetTicks()
void drawTranslucent(Tempest::Encoder< Tempest::CommandBuffer > &cmd, uint8_t fId)
static constexpr const float viewRage
Definition pfxobjects.h:22