Skip to content
Snippets Groups Projects
Select Git revision
  • 0a4595fdaef533c541471c078e9ae57982518f42
  • master default protected
  • MatrixModelParticle
  • CommonInterface
  • ParticleScene
  • new_particle_struct
6 results

PhysicsGenerator.hpp

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    PhysicsGenerator.hpp 1.97 KiB
    #pragma once
    
    #include "Generator.hpp"
    #include "../Physics.hpp"
    
    #include "../../Interface/Generator/PhysicGenerator.hpp"
    
    namespace pg::particle {
    	template <typename T>
    	struct Interval {
    		T upper;
    		T lower;
    	};
    
    	class PhysicsGenerator : public Generator<Physics> {
    		private:
    			glm::vec3 m_velocity;
    			glm::vec3 m_acceleration;
    			glm::vec3 m_friction;
    			glm::vec3 m_frictionVariation;
    			Interval<glm::vec3> m_velocityVariation;
    			Interval<glm::vec3> m_accelerationVariation;
    			
    		public:
    			PhysicsGenerator(const ct::Point& position = ct::Point(), float positionVariation = 0.0, const glm::dvec3& velocity = glm::dvec3(0.0, 0.0, 0.0));
    
    			inline const glm::vec3 & getVelocity() const {return this->m_velocity;}
    			inline const glm::vec3 & getAcceleration() const {return this->m_acceleration;}
    			inline const glm::vec3 & getFriction() const {return this->m_friction;}
    			inline const Interval<glm::vec3> & getVelocityVariation() const {return this->m_velocityVariation;}
    			inline const Interval<glm::vec3> & getAccelerationVariation() const {return this->m_accelerationVariation;}
    			inline const glm::vec3 & getFrictionVariation() const {return this->m_frictionVariation;}
    
    			inline void setVelocity(const glm::vec3 & velocity) {this->m_velocity = velocity;}
    			inline void setAcceleration(const glm::vec3 & acceleration) {this->m_acceleration = acceleration;}
    			inline void setFriction(const glm::vec3  & friction) {this->m_friction = friction;}
    
    			inline void setVelocityVariation(const Interval<glm::vec3> & velocityVariation) {this->m_velocityVariation = velocityVariation;}
    			inline void setAccelerationVariation(const Interval<glm::vec3> & accelerationVariation) {this->m_accelerationVariation = accelerationVariation;}
    			inline void setFrictionVariation(const glm::vec3 & frictionVariation) {this->m_frictionVariation = frictionVariation;}
    
    			std::vector<std::unique_ptr<Physics>> generate(size_t count, size_t birth = 0) const override;
    	
    			friend class interface::PhysicGenerator;
    	};
    }