Fixed heissenbug caused by quat initialization and added sound server.
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
#pragma once
|
||||
|
||||
#include "defines.h"
|
||||
#include "colour.h"
|
||||
#include <glm/glm.hpp>
|
||||
#include <vector>
|
||||
|
||||
BEGIN_NAMESPACE
|
||||
|
||||
struct particle;
|
||||
struct particle_emitter;
|
||||
struct particle_modifier;
|
||||
|
||||
using particle_list = std::vector<particle *>;
|
||||
using particle_emitter_list = std::vector<particle_emitter *>;
|
||||
using particle_modifier_list = std::vector<particle_modifier *>;
|
||||
|
||||
struct particle {
|
||||
glm::vec3 position;
|
||||
glm::vec3 old_pos;
|
||||
glm::vec3 velocity;
|
||||
colour color;
|
||||
float life;
|
||||
float size;
|
||||
};
|
||||
|
||||
struct particle_emitter {
|
||||
particle_emitter();
|
||||
virtual ~particle_emitter() = default;
|
||||
|
||||
particle *new_particle();
|
||||
void update(float elapsed_ms);
|
||||
|
||||
virtual void spawn(particle *p) = 0;
|
||||
|
||||
particle_list particles;
|
||||
particle_list dead_particles;
|
||||
|
||||
glm::vec3 position{};
|
||||
float emission_rate{}; // particles per second
|
||||
float to_spawn;
|
||||
float life_decay{};
|
||||
colour start_colour{};
|
||||
colour end_colour{};
|
||||
float start_size;
|
||||
float end_size;
|
||||
};
|
||||
|
||||
struct particle_modifier {
|
||||
virtual void affect_particle(particle *p, float elapsed_ms) = 0;
|
||||
};
|
||||
|
||||
struct particle_system {
|
||||
void update(float elapsed_ms);
|
||||
void render();
|
||||
|
||||
particle_list particles;
|
||||
particle_emitter_list emitters;
|
||||
particle_modifier_list modifiers;
|
||||
};
|
||||
|
||||
struct dot_particle_emitter : particle_emitter {
|
||||
dot_particle_emitter();
|
||||
void spawn(particle *p) override;
|
||||
};
|
||||
|
||||
|
||||
struct particle_attractor : particle_modifier {
|
||||
void init(glm::vec3& center, float strength_);
|
||||
void affect_particle(particle *p, float elapsed_ms) override;
|
||||
|
||||
glm::vec3 attractor_center;
|
||||
float strength;
|
||||
};
|
||||
|
||||
END_NAMESPACE
|
||||
Reference in New Issue
Block a user