1 #ifndef CORE_BATTLES_VIEW_PEOPLEMONSPARK_HPP
2 #define CORE_BATTLES_VIEW_PEOPLEMONSPARK_HPP
4 #include <BLIB/Particles.hpp>
5 #include <BLIB/Util/Random.hpp>
74 static constexpr
bool ContainsTransparency =
true;
76 static constexpr
bool CreateRenderPipeline =
true;
78 static constexpr std::initializer_list<std::uint32_t> RenderPassIds =
79 RenderConfigDefaults<PeoplemonSpark>::RenderPassIds;
83 RenderConfigDescriptorList<rc::ds::Scene2DFactory,
84 DescriptorSetFactory<PeoplemonSpark, GpuPeoplemonSpark>>;
86 static constexpr
bool EnableDepthTesting =
false;
87 static constexpr VkPrimitiveTopology Topology = VK_PRIMITIVE_TOPOLOGY_POINT_LIST;
88 static constexpr
const char* VertexShader =
"Resources/Shaders/Particles/battleSpark.vert.spv";
89 static constexpr
const char* FragmentShader =
90 "Resources/Shaders/Particles/battleSpark.frag.spv";
122 const glm::vec2 origin;
126 virtual void update(Proxy& proxy,
float dt,
float)
override {
127 constexpr
float SquareSize = 200.f;
131 while (proxy.getManager().getParticleCount() <
MaxSpawn && residual >= 1.f) {
133 auto& sp = proxy.emit();
135 const float a = bl::util::Random::get<float>(0.f, 360.f);
136 const float d = bl::util::Random::get<float>(1.f, 3.f);
137 const float v = bl::util::Random::get<float>(150.f, 900.f);
138 const float c = bl::math::cos(a);
139 const float s = bl::math::sin(a);
140 sp.position.x = origin.x + SquareSize * 0.5f + d * c;
141 sp.position.y = origin.y + SquareSize * 0.5f + d * s;
142 sp.velocity.x = v * c;
143 sp.velocity.y = v * s;
145 sp.lifetime = bl::util::Random::get<float>(0.6f, 1.1f);
146 sp.radius = bl::util::Random::get<float>(2.f, 12.f);
170 implodeOrigin = origin;
174 glm::vec2 implodeOrigin;
178 virtual void update(Proxy& proxy,
float dt,
float)
override {
181 while (proxy.getManager().getParticleCount() <
MaxSpawn && residual >= 1.f) {
183 auto& sp = proxy.emit();
185 const float a = bl::util::Random::get<float>(0.f, 360.f);
186 const float d = bl::util::Random::get<float>(190.f, 210.f);
187 const float v = bl::util::Random::get<float>(450.f, 900.f);
188 const float c = bl::math::cos(a);
189 const float s = bl::math::sin(a);
190 sp.position.x = implodeOrigin.x + d * c;
191 sp.position.y = implodeOrigin.y + d * s;
192 sp.velocity.x = v * -c;
193 sp.velocity.y = v * -s;
196 sp.radius = bl::util::Random::get<float>(2.f, 12.f);
212 virtual void update(Proxy& proxy,
float dt,
float)
override {
213 for (
auto& spark : proxy.particles()) {
214 spark.position += spark.velocity * dt;
225 class SparkSink :
public bl::pcl::Sink<PeoplemonSpark> {
230 virtual void update(Proxy& proxy, std::span<PeoplemonSpark> particles,
float,
float)
override {
232 if (spark.time >= spark.lifetime) { proxy.destroy(spark); }
Core classes and functionality for both the editor and game.
core::battle::view::PeoplemonSpark PeoplemonSpark
core::battle::view::PeoplemonSparkGlobalShaderPayload GlobalShaderStruct
Particle system spark for peoplemon animations.
Particle system spark GPU payload for peoplemon animations.
PeoplemonSparkGpu()=default
PeoplemonSparkGpu & operator=(const PeoplemonSpark &s)
Global descriptor set payload for spark particle system renderer.
RenderConfigDescriptorList< rc::ds::Scene2DFactory, DescriptorSetFactory< PeoplemonSpark, GpuPeoplemonSpark > > DescriptorSets
Particle system spark emitter for explosions.
static constexpr float CreateRate
virtual ~SparkExplosionEmitter()=default
static constexpr unsigned int MaxSpawn
SparkExplosionEmitter(const glm::vec2 &origin)
Particle system spark emitter for implosions.
virtual ~SparkImplosionEmitter()=default
static constexpr float CreateRate
static constexpr unsigned int MaxSpawn
void setEnabled(bool e, const glm::vec2 &origin={})
Particle system spark affector.
virtual ~SparkAffector()=default
Particle system spark sink.
virtual ~SparkSink()=default
static constexpr std::uint32_t BattlePeoplemonSparkPipelineId