diff options
author | jjesswan <90643397+jjesswan@users.noreply.github.com> | 2024-05-10 03:41:50 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-05-10 03:41:50 -0400 |
commit | b4ca8b708587c540233284beae8d42ff43092580 (patch) | |
tree | 05e7902207c5d22044a76d6374dd220a073c8f69 /src/particlesystem.h | |
parent | 80650ec974d661652eceb08616e8659febe2140d (diff) | |
parent | 7c0cd109b098b24279fb17b9a05ab846405d169b (diff) |
Merge pull request #4 from Seb-Park/new_parti
New parti
Diffstat (limited to 'src/particlesystem.h')
-rw-r--r-- | src/particlesystem.h | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/src/particlesystem.h b/src/particlesystem.h new file mode 100644 index 0000000..d3b0b8f --- /dev/null +++ b/src/particlesystem.h @@ -0,0 +1,84 @@ + +#ifndef PARTICLESYSTEM_H +#define PARTICLESYSTEM_H + +#include "ocean/ocean_alt.h" +#include <iostream> +#define EIGEN_DISABLE_UNALIGNED_ARRAY_ASSERT +#define EIGEN_DONT_VECTORIZE +#include "graphics/shader.h" +#include "graphics/camera.h" + +#include <Eigen/Core> +#include <Eigen/Dense> +#include <Eigen/Sparse> +#include <Eigen/Geometry> + +struct Particle{ + Eigen::Vector3f pos = Eigen::Vector3f(0,0,0); + Eigen::Vector3f vel = Eigen::Vector3f(0,2000,0); + + Eigen::Vector4f color = Eigen::Vector4f(1,1,1,1); + float life = 1.f; + +}; + +class particlesystem +{ +public: + particlesystem(); + + void update(double deltaTime); + void draw(Shader *skybox_shader, Camera m_camera); + void draw(Shader *shader, Camera m_camera, std::vector<Eigen::Vector3f> verts, Eigen::Matrix4f model); + + void init(std::vector<OceanSpray> verts); + + void setVerts(std::vector<OceanSpray> verts){ + //std::cout << "VERTS SIZE:" << verts.size() << std::endl; + m_verts = verts; + + } + + + +private: + int m_amount = 500; + int m_new_amount = 100; // new particles per frame + int lastUsedIndex = 0; + Eigen::Vector3f gravity = Eigen::Vector3f(0,-9.81f,0); + float factor = 40.f; // velocity multiplier + + + + void respawn_particle(Particle &p, OceanSpray new_pos); + int getUnusedParticleIndex(); + Eigen::Vector3f getRandomInitialVel(); + + + + + float d = 2.f; + std::vector<float> m_vertices = { + -d, d, + d,d, + -d, -d, + d, d, + d, -d, + -d, -d + }; + + GLuint VAO, VBO; // holds quad shape + + + + + + + std::vector<Particle> m_particles; + + std::vector<OceanSpray> m_verts; + +}; + +#endif // PARTICLESYSTEM_H |