Brunot
Loading...
Searching...
No Matches
Vector4D.h
Go to the documentation of this file.
1// File: Vector4D.h
2// Description: Wrapper class of 2D vectors. Has very little functionality currently implemented
3// Author(s): Ori Balashov (ori.balashov@digipen.edu) Base Implementation
4// Aidan Hartman (aidan.hartman@digipen.edu) Added additional functionality
5// Marcelo Escamilla (marcelo.escamilla@digipen.edu) Added JSON Serialization
6// 2025 / 09 / 17
7// (C) Digipen 2025
8// ____ __ __ __
9// /\__ _\/\ \ /\ \/\ \
10// \/_/\ \/\ \ \___ __ \ \ \_\ \ ___ __ __ ____ __
11// \ \ \ \ \ _ `\ /'__`\ \ \ _ \ / __`\/\ \/\ \ /',__\ /'__`\
12// \ \ \ \ \ \ \ \/\ __/ \ \ \ \ \/\ \L\ \ \ \_\ \/\__, `\/\ __/
13// \ \_\ \ \_\ \_\ \____\ \ \_\ \_\ \____/\ \____/\/\____/\ \____\
14// \/_/ \/_/\/_/\/____/ \/_/\/_/\/___/ \/___/ \/___/ \/____/
15#pragma once
16
17#include "Eigen/Dense"
18#include "System/Json.h"
19
20namespace sol
21{
22class state;
23}
24
25struct AffineMatrix;
26
28{
29 static auto bindLuaTypes(sol::state& lua) -> void;
30 Vector4D();
31 Vector4D(const Eigen::Vector4f& rhs);
32 Vector4D(float x, float y, float z, float w);
33
34 auto operator=(const Eigen::Vector4f& rhs) -> Vector4D&;
35
36 auto operator+=(const Vector4D& rhs) -> Vector4D&;
37 auto operator+(const Vector4D& rhs) const -> Vector4D;
38 auto operator-=(const Vector4D& rhs) -> Vector4D&;
39 auto operator-(const Vector4D& rhs) const -> Vector4D;
40 auto operator==(const Vector4D& rhs) const -> bool;
41 auto operator>(const Vector4D& rhs) const -> bool;
42 auto operator<(const Vector4D& rhs) const -> bool;
43 // Vector scaling
44 auto operator*=(float scalar) -> Vector4D&;
45 auto operator*(float scalar) const -> Vector4D;
46 friend auto operator*(float scalar, const Vector4D&) -> Vector4D;
47 auto operator-() const -> Vector4D;
48
55 friend auto operator*(const AffineMatrix& rhs, const Vector4D& lhs) -> Vector4D;
62 friend auto operator*=(Vector4D& rhs, const AffineMatrix& lhs) -> Vector4D&;
63
65 auto operator*(const Vector4D& rhs) const -> float;
66
68 auto length() const -> float;
69
70 auto x() const -> const float&
71 {
72 return vector[0];
73 }
74
75 auto x() -> float&
76 {
77 return vector[0];
78 }
79
80 auto y() const -> const float&
81 {
82 return vector[1];
83 }
84
85 auto y() -> float&
86 {
87 return vector[1];
88 }
89
90 auto z() const -> const float&
91 {
92 return vector[2];
93 }
94
95 auto z() -> float&
96 {
97 return vector[2];
98 }
99
100 auto w() const -> const float&
101 {
102 return vector[3];
103 }
104
105 auto w() -> float&
106 {
107 return vector[3];
108 }
109
110 // utility functions
111 auto data() const -> const float*
112 {
113 return vector.data();
114 }
115
116 auto data() -> float*
117 {
118 return vector.data();
119 }
120
121 friend auto from_json(const json& j, Vector4D& v) -> void;
122 friend auto to_json(json& j, const Vector4D& v) -> void;
123
124 auto to_string() -> std::string;
125
126private:
127 Eigen::Vector4f vector;
128
130 auto x(float x) -> void
131 {
132 vector.x() = x;
133 }
134
135 auto y(float y) -> void
136 {
137 vector.y() = y;
138 }
139
140 auto z(float z) -> void
141 {
142 vector.z() = z;
143 }
144
145 auto w(float w) -> void
146 {
147 vector.w() = w;
148 }
149};
150
nlohmann::json json
Definition Json.cpp:19
Definition GameObject.h:27
Definition AffineMatrix.h:30
Definition Vector4D.h:28
auto y() const -> const float &
Definition Vector4D.h:80
Eigen::Vector4f vector
Definition Vector4D.h:127
Vector4D()
Definition Vector4D.cpp:39
auto operator*(float scalar) const -> Vector4D
Definition Vector4D.cpp:107
auto y() -> float &
Definition Vector4D.h:85
auto data() -> float *
Definition Vector4D.h:116
auto operator>(const Vector4D &rhs) const -> bool
Definition Vector4D.cpp:91
auto w() const -> const float &
Definition Vector4D.h:100
auto y(float y) -> void
Private setter for Lua scripting to use.
Definition Vector4D.h:135
friend auto to_json(json &j, const Vector4D &v) -> void
Definition Vector4D.cpp:164
auto x() const -> const float &
Definition Vector4D.h:70
auto w() -> float &
Definition Vector4D.h:105
auto operator=(const Eigen::Vector4f &rhs) -> Vector4D &
Definition Vector4D.cpp:54
auto operator-=(const Vector4D &rhs) -> Vector4D &
Definition Vector4D.cpp:73
friend auto from_json(const json &j, Vector4D &v) -> void
Definition Vector4D.cpp:156
auto operator==(const Vector4D &rhs) const -> bool
Definition Vector4D.cpp:86
auto w(float w) -> void
Private setter for Lua scripting to use.
Definition Vector4D.h:145
auto operator*=(float scalar) -> Vector4D &
Definition Vector4D.cpp:101
auto x() -> float &
Definition Vector4D.h:75
auto operator+(const Vector4D &rhs) const -> Vector4D
Definition Vector4D.cpp:66
auto to_string() -> std::string
Definition Vector4D.cpp:124
auto z() -> float &
Definition Vector4D.h:95
static auto bindLuaTypes(sol::state &lua) -> void
Definition Vector4D.cpp:23
auto data() const -> const float *
Definition Vector4D.h:111
auto z(float z) -> void
Private setter for Lua scripting to use.
Definition Vector4D.h:140
auto operator<(const Vector4D &rhs) const -> bool
Definition Vector4D.cpp:96
auto length() const -> float
Magnitude.
Definition Vector4D.cpp:119
auto z() const -> const float &
Definition Vector4D.h:90
auto x(float x) -> void
Private setter for Lua scripting to use.
Definition Vector4D.h:130
auto operator+=(const Vector4D &rhs) -> Vector4D &
Definition Vector4D.cpp:60
auto operator-(const Vector4D &rhs) const -> Vector4D
Definition Vector4D.cpp:79