Select Git revision
PhysicsGenerator.hpp
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;
};
}