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/vao.hpp>
12#include <glad/glad.h>
13#include <glm/glm.hpp>
14#include <glm/gtc/matrix_transform.hpp>
15#include <glm/gtc/type_ptr.hpp>
16#include <string>
17#include <vector>
18
19namespace brenta
20{
21
31{
32public:
33
34 glm::vec3 starting_position;
35 glm::vec3 starting_velocity;
36 glm::vec3 starting_spread;
37 float starting_time_to_live;
38 int num_particles;
39 float spawn_rate;
40 float scale;
55 int atlas;
56 int atlas_width;
57 int atlas_height;
58 int atlas_index;
63
64 struct config;
65 class builder;
66
67 static const config default_config;
68
71
77 void update_particles(float deltaTime);
78 void render_particles();
79
80private:
81 camera *cam;
82 void check_opengl_error(const std::string &functionName);
83};
84
86{
87 glm::vec3 starting_position;
88 glm::vec3 starting_velocity;
89 glm::vec3 starting_spread;
90 float starting_time_to_live;
91 int num_particles;
92 float spawn_rate;
93 float scale;
94 std::string atlas_path;
95 int atlas_width;
96 int atlas_height;
97 int atlas_index;
98 camera *cam;
99};
100
105{
106private:
107
108 particle_emitter::config conf = particle_emitter::default_config;
109
110public:
111 builder &starting_position(glm::vec3 starting_position);
112 builder &starting_velocity(glm::vec3 starting_velocity);
113 builder &starting_spread(glm::vec3 starting_spread);
114 builder &starting_time_to_live(float starting_time_to_live);
115 builder &num_particles(int num_particles);
116 builder &spawn_rate(float spawn_rate);
117 builder &scale(float scale);
118 builder &atlas_path(std::string atlas_path);
119 builder &atlas_width(int atlas_width);
120 builder &atlas_height(int atlas_height);
121 builder &atlas_index(int atlas_index);
122 builder &with_camera(camera *cam);
123
124 particle_emitter build();
125};
126
127} // namespace brenta
The Camera class.
Definition camera.hpp:97
Builder pattern for ParticleEmitter.
ParticleEmitter class.
Definition particles.hpp:31
int current
Current fbo index.
Definition particles.hpp:51
types::vao vao
Vertex array object.
Definition particles.hpp:62
int atlas
Atlas texture.
Definition particles.hpp:55
types::buffer fbo[2]
Feddback buffer objects.
Definition particles.hpp:47
void update_particles(float deltaTime)
Update the particles.
Definition particles.cpp:98
Buffer wrapper around OpenGL buffer objects.
Definition buffer.hpp:30
Vertex Array Object (VAO)
Definition vao.hpp:23