Pioneer
Loading...
Searching...
No Matches
Sfx.h
Go to the documentation of this file.
1// Copyright © 2008-2023 Pioneer Developers. See AUTHORS.txt for details
2// Licensed under the terms of the GPL v3. See licenses/GPL-3.txt
3
4#ifndef _SFX_H
5#define _SFX_H
6
7#include "FrameId.h"
8#include "JsonFwd.h"
9#include "graphics/Material.h"
10
11#include <deque>
12
13class Body;
14class Frame;
15
16namespace Graphics {
17 class Renderer;
18} // namespace Graphics
19
25};
26
27struct Sfx {
28 Sfx() = delete;
29 Sfx(const vector3d &pos, const vector3d &vel, const float speed, const SFX_TYPE type);
30 Sfx(const Json &jsonObj);
31
32 const vector3d &GetPosition() const { return m_pos; }
33
34 float AgeBlend() const;
35 void SetPosition(const vector3d &p);
36
37 void TimeStepUpdate(const float timeStep);
38 void SaveToJson(Json &jsonObj);
39
42 float m_age;
43 float m_speed;
45};
46
48public:
49 friend struct Sfx;
50
51 static void Add(const Body *, SFX_TYPE);
52 static void AddExplosion(Body *);
53 static void AddThrustSmoke(const Body *b, float speed, const vector3d &adjustpos);
54 static void TimeStepAll(const float timeStep, FrameId f);
55 static void RenderAll(Graphics::Renderer *r, FrameId f, const FrameId camFrame);
56 static void ToJson(Json &jsonObj, const FrameId f);
57 static void FromJson(const Json &jsonObj, FrameId f);
58
59 //create shared models
60 static void Init(Graphics::Renderer *r);
61 static void Uninit();
62 static std::unique_ptr<Graphics::Material> damageParticle;
63 static std::unique_ptr<Graphics::Material> ecmParticle;
64 static std::unique_ptr<Graphics::Material> smokeParticle;
65 static std::unique_ptr<Graphics::Material> explosionParticle;
66
67 SfxManager();
68
69 size_t GetNumberInstances(const SFX_TYPE t) const { return m_instances[t].size(); }
70 void Cleanup();
71
72private:
73 // types
74 struct MaterialData {
75 MaterialData() :
76 effect(Graphics::EFFECT_BILLBOARD),
77 num_textures(1),
78 num_imgs_wide(1),
79 coord_downscale(1.0f) {}
81 Uint32 num_textures;
82 int num_imgs_wide;
83 float coord_downscale;
84 };
85
86 Sfx &GetInstanceByIndex(const SFX_TYPE t, const size_t i) { return m_instances[t][i]; }
87 void AddInstance(Sfx &inst) { return m_instances[inst.m_type].push_back(inst); }
88
89 // methods
90 static SfxManager *AllocSfxInFrame(FrameId f);
91 static vector2f CalculateOffset(const enum SFX_TYPE, const Sfx &);
92 static bool SplitMaterialData(const std::string &spec, MaterialData &output);
93
94 // static members
95 static MaterialData m_materialData[TYPE_NONE];
96
97 // members
98 // per-frame
99 std::deque<Sfx> m_instances[TYPE_NONE];
100};
101
102#endif /* _SFX_H */
nlohmann::json Json
Definition Json.h:8
SFX_TYPE
Definition Sfx.h:20
@ TYPE_NONE
Definition Sfx.h:24
@ TYPE_DAMAGE
Definition Sfx.h:22
@ TYPE_SMOKE
Definition Sfx.h:23
@ TYPE_EXPLOSION
Definition Sfx.h:21
Definition Body.h:57
Definition Frame.h:28
Definition Renderer.h:44
Definition Sfx.h:47
void Cleanup()
Definition Sfx.cpp:236
static void AddThrustSmoke(const Body *b, float speed, const vector3d &adjustpos)
Definition Sfx.cpp:206
static std::unique_ptr< Graphics::Material > explosionParticle
Definition Sfx.h:65
static void Add(const Body *, SFX_TYPE)
Definition Sfx.cpp:182
static std::unique_ptr< Graphics::Material > damageParticle
Definition Sfx.h:62
static void ToJson(Json &jsonObj, const FrameId f)
Definition Sfx.cpp:137
static void TimeStepAll(const float timeStep, FrameId f)
Definition Sfx.cpp:215
static void Uninit()
Definition Sfx.cpp:433
static std::unique_ptr< Graphics::Material > ecmParticle
Definition Sfx.h:63
static std::unique_ptr< Graphics::Material > smokeParticle
Definition Sfx.h:64
size_t GetNumberInstances(const SFX_TYPE t) const
Definition Sfx.h:69
SfxManager()
Definition Sfx.cpp:130
static void AddExplosion(Body *)
Definition Sfx.cpp:192
static void RenderAll(Graphics::Renderer *r, FrameId f, const FrameId camFrame)
Definition Sfx.cpp:252
static void Init(Graphics::Renderer *r)
Definition Sfx.cpp:367
static void FromJson(const Json &jsonObj, FrameId f)
Definition Sfx.cpp:158
Definition Background.h:14
EffectType
Definition Material.h:29
Definition FrameId.h:9
Definition Sfx.h:27
float AgeBlend() const
Definition Sfx.cpp:119
void SetPosition(const vector3d &p)
Definition Sfx.cpp:94
const vector3d & GetPosition() const
Definition Sfx.h:32
float m_speed
Definition Sfx.h:43
Sfx()=delete
float m_age
Definition Sfx.h:42
vector3d m_vel
Definition Sfx.h:41
enum SFX_TYPE m_type
Definition Sfx.h:44
vector3d m_pos
Definition Sfx.h:40
void SaveToJson(Json &jsonObj)
Definition Sfx.cpp:82
void TimeStepUpdate(const float timeStep)
Definition Sfx.cpp:99