1#ifndef VULKAN_FOUNDATIONS
2#define VULKAN_FOUNDATIONS
9namespace Vulkan::Physics {
class Vectorial;
class Scalar;
class Position;
class DeltaSpace;
class Speed;
class Acceleration;
class Force;
class Impulse;
class Mass;
class Time; }
34 operator glm::vec3()
const {
40 template<std::derived_from<Vectorial> V>
42 return V{ v1.vector + v2.vector };
46 template<std::derived_from<Vectorial> V>
48 return V{ v1.vector - v2.vector };
52 template<std::derived_from<Vectorial> V>
54 return V{ -v.vector };
58 template<std::derived_from<Vectorial> V>
60 v1.vector += v2.vector;
65 template<std::derived_from<Vectorial> V>
67 v1.vector -= v2.vector;
72 template<std::derived_from<Vectorial> V>
74 return V{ v.vector *
x };
78 template<std::derived_from<Vectorial> V>
80 return V{ v.vector /
x };
89 template<std::derived_from<Vectorial> V>
91 if (glm::length(v1.vector) < v2) {
94 else if (glm::length(v1.vector) > v2) {
103 template<std::derived_from<Vectorial> V>
105 if (glm::length(v1.vector) < glm::length(v2.vector)) {
108 else if (glm::length(v1.vector) > glm::length(v2.vector)) {
128 template<std::derived_from<Scalar> S>
130 return S{ s1.value + s2.value };
133 template<std::derived_from<Scalar> S>
135 return S{ s1.value - s2.value };
138 template<std::derived_from<Scalar> S>
140 s1.value += s2.value;
144 template<std::derived_from<Scalar> S>
146 s1.value -= s2.value;
151 explicit operator float()
const {
189 Position(glm::vec3 position = { 0.0f, 0.0f, 0.0f }) : position{ position } {}
194 const float&
x()
const {
198 const float&
y()
const {
202 const float&
z()
const {
207 operator glm::vec3()
const {
220 return p1.position == p2.position;
303 return DeltaSpace{ p1.position - p2.position };
313 origin.position += spaceCovered.
vector;
Definition: Foundations.h:254
Acceleration(float x, float y, float z)
Definition: Foundations.h:257
Acceleration(glm::vec3 vector={ 0.0f, 0.0f, 0.0f })
Definition: Foundations.h:256
friend Speed operator*(Acceleration speed, Time time)
Definition: Foundations.h:332
Definition: Foundations.h:230
DeltaSpace(glm::vec3 vector={ 0.0f, 0.0f, 0.0f })
Definition: Foundations.h:232
DeltaSpace(float x, float y, float z)
Definition: Foundations.h:233
friend Position & operator+=(Position &origin, DeltaSpace spaceCovered)
Definition: Foundations.h:312
friend Position operator+(Position origin, DeltaSpace spaceCovered)
Definition: Foundations.h:307
Definition: Foundations.h:265
Force(float x, float y, float z)
Definition: Foundations.h:268
Force(glm::vec3 vector={ 0.0f, 0.0f, 0.0f })
Definition: Foundations.h:267
friend Acceleration operator/(Force force, Mass mass)
Definition: Foundations.h:339
Definition: Foundations.h:276
Impulse(float x, float y, float z)
Definition: Foundations.h:279
Impulse(glm::vec3 vector={ 0.0f, 0.0f, 0.0f })
Definition: Foundations.h:278
friend Speed operator/(Impulse impulse, Mass mass)
Definition: Foundations.h:345
Definition: Foundations.h:161
friend Mass operator*(Mass m1, Mass m2)
Definition: Foundations.h:292
Mass(float mass=0)
Definition: Foundations.h:163
friend Mass operator/(Mass m1, Mass m2)
Definition: Foundations.h:296
Definition: Foundations.h:187
Position(float x, float y, float z)
Definition: Foundations.h:191
const float & y() const
Definition: Foundations.h:198
friend auto operator==(const Position &p1, const Position &p2)
Definition: Foundations.h:219
friend Position & operator+=(Position &origin, DeltaSpace spaceCovered)
Definition: Foundations.h:312
Position(glm::vec3 position={ 0.0f, 0.0f, 0.0f })
Definition: Foundations.h:189
friend Position operator+(Position origin, DeltaSpace spaceCovered)
Definition: Foundations.h:307
const float & x() const
Definition: Foundations.h:194
Position operator-() const
Definition: Foundations.h:215
const float & z() const
Definition: Foundations.h:202
Definition: Foundations.h:124
friend S & operator+=(S &s1, S s2)
Definition: Foundations.h:139
float value
Definition: Foundations.h:157
friend S & operator-=(S &s1, S s2)
Definition: Foundations.h:145
Scalar(float value=0)
Definition: Foundations.h:126
friend S operator+(S s1, S s2)
Definition: Foundations.h:129
friend S operator-(S s1, S s2)
Definition: Foundations.h:134
Definition: Foundations.h:242
friend DeltaSpace operator*(Speed speed, Time time)
Definition: Foundations.h:320
Speed(float x, float y, float z)
Definition: Foundations.h:245
Speed(glm::vec3 vector={ 0.0f, 0.0f, 0.0f })
Definition: Foundations.h:244
Definition: Foundations.h:175
friend DeltaSpace operator*(Speed speed, Time time)
Definition: Foundations.h:320
friend Force operator/(Impulse impulse, Time time)
Definition: Foundations.h:350
Time(float time)
Definition: Foundations.h:177
Definition: Foundations.h:12
Vectorial(float x, float y, float z)
Definition: Foundations.h:16
friend V operator/(V v, float x)
Definition: Foundations.h:79
float x() const
Definition: Foundations.h:20
float z() const
Definition: Foundations.h:28
friend float operator*(Vectorial v1, Vectorial v2)
Definition: Foundations.h:84
friend V operator-(V v)
Definition: Foundations.h:53
friend V operator+(V v1, V v2)
Definition: Foundations.h:41
float y() const
Definition: Foundations.h:24
friend auto operator<=>(const V &v1, const V &v2)
Definition: Foundations.h:104
friend V & operator+=(V &v1, V v2)
Definition: Foundations.h:59
Vectorial(glm::vec3 vector={ 0.0f, 0.0f, 0.0f })
Definition: Foundations.h:14
friend auto operator<=>(const V &v1, float v2)
Definition: Foundations.h:90
glm::vec3 vector
Definition: Foundations.h:120
friend V operator-(V v1, V v2)
Definition: Foundations.h:47
friend V operator*(V v, float x)
Definition: Foundations.h:73
friend V & operator-=(V &v1, V v2)
Definition: Foundations.h:66
Definition: Cinematicable.h:9
Mass operator*(Mass m1, Mass m2)
Definition: Foundations.h:292
DeltaSpace operator-(Position p1, Position p2)
Definition: Foundations.h:302
Position & operator+=(Position &origin, DeltaSpace spaceCovered)
Definition: Foundations.h:312
Mass operator/(Mass m1, Mass m2)
Definition: Foundations.h:296
Position operator+(Position origin, DeltaSpace spaceCovered)
Definition: Foundations.h:307