Brenta Engine
1.2
Loading...
Searching...
No Matches
particles.hpp
1
// SPDX-License-Identifier: MIT
2
// Author: Giovanni Santini
3
// Mail: giovanni.santini@proton.me
4
// Github: @San7o
5
6
#pragma once
7
8
#define MAX_PARTICLES 1000
9
10
#include <brenta/camera.hpp>
11
#include <brenta/texture.hpp>
12
#include <brenta/vao.hpp>
13
#include <glad/glad.h>
14
#include <glm/glm.hpp>
15
#include <glm/gtc/matrix_transform.hpp>
16
#include <glm/gtc/type_ptr.hpp>
17
#include <string>
18
#include <vector>
19
20
namespace
brenta
21
{
22
31
class
particle_emitter
32
{
33
public
:
34
35
glm::vec3 starting_position;
36
glm::vec3 starting_velocity;
37
glm::vec3 starting_spread;
38
float
starting_time_to_live;
39
int
num_particles;
40
float
spawn_rate;
41
float
scale;
48
types::buffer
fbo
[2];
52
int
current
;
56
texture
atlas
;
57
int
atlas_width;
58
int
atlas_height;
59
int
atlas_index;
63
types::vao
vao
;
64
65
struct
config
;
66
class
builder
;
67
68
static
const
config
default_config;
69
70
particle_emitter
(
config
conf);
71
77
void
update_particles
(
float
delta_time);
78
void
render_particles();
79
80
private
:
81
camera
*cam;
82
};
83
84
struct
particle_emitter::config
85
{
86
glm::vec3 starting_position;
87
glm::vec3 starting_velocity;
88
glm::vec3 starting_spread;
89
float
starting_time_to_live;
90
int
num_particles;
91
float
spawn_rate;
92
float
scale;
93
std::string atlas_path;
94
int
atlas_width;
95
int
atlas_height;
96
int
atlas_index;
97
camera
*cam;
98
};
99
103
class
particle_emitter::builder
104
{
105
private
:
106
107
particle_emitter::config
conf = particle_emitter::default_config;
108
109
public
:
110
builder
&starting_position(glm::vec3 starting_position);
111
builder
&starting_velocity(glm::vec3 starting_velocity);
112
builder
&starting_spread(glm::vec3 starting_spread);
113
builder
&starting_time_to_live(
float
starting_time_to_live);
114
builder
&num_particles(
int
num_particles);
115
builder
&spawn_rate(
float
spawn_rate);
116
builder
&scale(
float
scale);
117
builder
&atlas_path(std::string atlas_path);
118
builder
&atlas_width(
int
atlas_width);
119
builder
&atlas_height(
int
atlas_height);
120
builder
&atlas_index(
int
atlas_index);
121
builder
&with_camera(
camera
*cam);
122
123
particle_emitter
build();
124
};
125
126
}
// namespace brenta
brenta::camera
The Camera class.
Definition
camera.hpp:81
brenta::particle_emitter::builder
Builder pattern for ParticleEmitter.
Definition
particles.hpp:104
brenta::particle_emitter
Particle Emitter class.
Definition
particles.hpp:32
brenta::particle_emitter::current
int current
Current fbo index.
Definition
particles.hpp:52
brenta::particle_emitter::vao
types::vao vao
Vertex array object.
Definition
particles.hpp:63
brenta::particle_emitter::fbo
types::buffer fbo[2]
Feddback buffer objects.
Definition
particles.hpp:48
brenta::particle_emitter::update_particles
void update_particles(float delta_time)
Update the particles.
Definition
particles.cpp:92
brenta::particle_emitter::atlas
texture atlas
Atlas texture.
Definition
particles.hpp:56
brenta::texture
Texture class.
Definition
texture.hpp:20
brenta::types::buffer
Buffer wrapper around OpenGL buffer objects.
Definition
buffer.hpp:23
brenta::types::vao
Vertex Array Object (VAO)
Definition
vao.hpp:23
brenta::particle_emitter::config
Definition
particles.hpp:85
include
brenta
particles.hpp
Generated by
1.9.8