From 7a986cae38df8c825dcc72dec106383916d18a52 Mon Sep 17 00:00:00 2001 From: Ben Date: Sun, 30 Dec 2018 19:40:01 +0000 Subject: [PATCH] Improved vectors in math.h and adjusted todo acordingly, also fixed a bug in the CMakeList --- CMakeLists.txt | 6 + TODO.txt | 6 + bin/crumpet-engine | Bin 133256 -> 149696 bytes src/crumpet-engine/entitymanager/entitybase.h | 4 +- src/crumpet-engine/math.h | 220 ++++++++++++++++-- src/crumpet-engine/rect.cpp | 16 +- src/crumpet-engine/rect.h | 14 +- src/main.cpp | 3 - 8 files changed, 228 insertions(+), 41 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6c2c2be..c07b60e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -40,6 +40,12 @@ file(GLOB_RECURSE SourceFiles ) add_executable(${BuildDIR}/${EXEName} ${SourceFiles}) + +set_target_properties(${BuildDIR}/${EXEName} PROPERTIES + CXX_STANDARD 17 + CXX_EXTENSIONS OFF +) + target_link_libraries(${BuildDIR}/${EXEName} SDL2 SDL2_image diff --git a/TODO.txt b/TODO.txt index 0de1cbd..2f4469c 100644 --- a/TODO.txt +++ b/TODO.txt @@ -10,6 +10,12 @@ x -> complete **TODO** [-] Comment the code [?] Overload operators in the logger and support for streams +[?] Vector classes (2d, 3d, 4d) + [x] Operators for each + [x] Scalar addition, subtraction, addition and division + [x] Dot product + [x] Cross product (3d) + [ ] Other functions for max, min, magnitude, unitvec all that [ ] Entity system [ ] Entity manager [ ] Ability to make entities and manage textures between them diff --git a/bin/crumpet-engine b/bin/crumpet-engine index 35a47bfb3c5a6a593419cc878896abeb76740f94..ba06b26c5e1a5103829613aa31bf382270dfdd4e 100755 GIT binary patch literal 149696 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 DT=~_w literal 133256 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 diff --git a/src/crumpet-engine/entitymanager/entitybase.h b/src/crumpet-engine/entitymanager/entitybase.h index 76a4994..d7a3df0 100644 --- a/src/crumpet-engine/entitymanager/entitybase.h +++ b/src/crumpet-engine/entitymanager/entitybase.h @@ -1,7 +1,7 @@ #pragma once #include -#include +#include "../math.h" #include "../resourcemanager/resourcemanager.h" @@ -15,5 +15,5 @@ public: private: std::string textureRef; std::string textureSource; - Vec2 textureDimensions; + Vec2 textureDimensions; }; diff --git a/src/crumpet-engine/math.h b/src/crumpet-engine/math.h index 8ea2aba..1d2ff6d 100644 --- a/src/crumpet-engine/math.h +++ b/src/crumpet-engine/math.h @@ -11,32 +11,210 @@ inline float ToDegree(const float Radian) { return (Radian * RAD2DEG); } +template struct Vec4 { - int x, y, z, w; - Vec4(int x, int y, int z, int w) : x(x), y(y), z(z), w(w) {} -}; - -struct Vec4f { - float x, y, z, w; - Vec4f(float x, float y, float z, float w) : x(x), y(y), z(z), w(w) {} + T x, y, z, w; + template + Vec4(P x, P y, P z, P w) : x(x), y(y), z(z), w(w) {} + template + Vec4(P all) : x(all), y(all), z(all), w(all) {} + Vec4() : x(0), y(0), z(0), w(0) {} + inline Vec4& dot(const Vec3& v) { + return (x * v.x + y * v.y + z * v.z + w * v.w); + } + inline const Vec4& operator+() { + return *this; + } + inline Vec4& operator-() { + return Vec4(-x, -y, -z, -w); + } + inline Vec4& operator+(const Vec4& v) { + return new Vec4(x + v.x, y + v.y, z + v.z, w + v.w); + } + inline Vec4& operator-(const Vec4& v) { + return new Vec4(x - v.x, y - v.y, z - v.z, w - v.w); + } + inline Vec4& operator*(const Vec4& v) { + return new Vec4(x * v.x, y * v.y, z * v.z, w * v.w); + } + inline Vec4& operator/(const Vec4& v) { + return new Vec4(x / v.x, y / v.y, z / v.z, w / v.w); + } + inline Vec4& operator+=(const Vec4& v) { + x+=v.x; y+=v.y; z+=v.z; w+=v.w; + return *this; + } + inline Vec4& operator-=(const Vec4& v) { + x-=v.x; y-=v.y; z-=v.z; w-=v.w; + return *this; + } + inline Vec4& operator*=(const Vec4& v) { + x*=v.x; y*=v.y; z*=v.z; w*=v.w; + return *this; + } + inline Vec4& operator/=(const Vec4& v) { + x/=v.x; y/=v.y; z/=v.z; w/=v.w; + return *this; + } + template + inline Vec4& operator+=(P s) { + x+=s; y+=s; z+=s; w+=s; + return *this; + } + template + inline Vec4& operator-=(P s) { + x-=s; y-=s; z-=s; w-=s; + return *this; + } + template + inline Vec4& operator*=(P s) { + x*=s; y*=s; z*=s; w*=s; + return *this; + } + template + inline Vec4& operator/=(P s) { + x/=s; y/=s; z/=s; w/=s; + return *this; + } }; +template struct Vec3 { - int x, y, z; - Vec3(int x, int y, int z) : x(x), y(y), z(z) {} -}; - -struct Vec3f { - float x, y, z; - Vec3f(float x, float y, float z) : x(x), y(y), z(z) {} + T x, y, z; + template + Vec3(P x, P y, P z) : x(x), y(y), z(z) {} + template + Vec3(P all) : x(all), y(all), z(all) {} + Vec3() : x(0), y(0), z(0) {} + inline Vec3& cross(const Vec3& v) { + return new Vec3( + (y * v.z - z * v.y), + (x * v.z - z * v.x), + (x * v.y - y * v.x) + ); + } + inline Vec3& dot(const Vec3& v) { + return (x * v.x + y * v.y + z * v.z); + } + inline const Vec3& operator+() { + return *this; + } + inline Vec3& operator-() { + return Vec3(-x, -y, -z); + } + inline Vec3& operator+(const Vec3& v) { + return new Vec3(x + v.x, y + v.y, z + v.z); + } + inline Vec3& operator-(const Vec3& v) { + return new Vec3(x - v.x, y - v.y, z - v.z); + } + inline Vec3& operator*(const Vec3& v) { + return new Vec3(x * v.x, y * v.y, z * v.z); + } + inline Vec3& operator/(const Vec3& v) { + return new Vec3(x / v.x, y / v.y, z / v.z); + } + inline Vec3& operator+=(const Vec3& v) { + x+=v.x; y+=v.y; z+=v.z; + return *this; + } + inline Vec3& operator-=(const Vec3& v) { + x-=v.x; y-=v.y; z-=v.z; + return *this; + } + inline Vec3& operator*=(const Vec3& v) { + x*=v.x; y*=v.y; z*=v.z; + return *this; + } + inline Vec3& operator/=(const Vec3& v) { + x/=v.x; y/=v.y; z/=v.z; + return *this; + } + template + inline Vec3& operator+=(P s) { + x+=s; y+=s; z+=s; + return *this; + } + template + inline Vec3& operator-=(P s) { + x-=s; y-=s; z-=s; + return *this; + } + template + inline Vec3& operator*=(P s) { + x*=s; y*=s; z*=s; + return *this; + } + template + inline Vec3& operator/=(P s) { + x/=s; y/=s; z/=s; + return *this; + } }; +template struct Vec2 { - int x, y; - Vec2(int x, int y) : x(x), y(y) {} -}; - -struct Vec2f { - float x, y; - Vec2f(float x, float y) : x(x), y(y) {} + T x, y; + template + Vec2(P x, P y) : x(x), y(y) {} + template + Vec2(P all) : x(all), y(all) {} + Vec2() : x(0), y(0) {} + inline const Vec2& operator+() { + return *this; + } + inline Vec2& dot(const Vec3& v) { + return (x * v.x + y * v.y); + } + inline Vec2& operator-() { + return Vec3(-x, -y); + } + inline Vec2& operator+(const Vec2& v) { + return new Vec2(x + v.x, y + v.y); + } + inline Vec2& operator-(const Vec2& v) { + return new Vec2(x - v.x, y - v.y); + } + inline Vec2& operator*(const Vec2& v) { + return new Vec2(x * v.x, y * v.y); + } + inline Vec2& operator/(const Vec2& v) { + return new Vec2(x / v.x, y / v.y); + } + inline Vec2& operator+=(const Vec2& v) { + x+=v.x; y+=v.y; + return *this; + } + inline Vec2& operator-=(const Vec2& v) { + x-=v.x; y-=v.y; + return *this; + } + inline Vec2& operator*=(const Vec2& v) { + x*=v.x; y*=v.y; + return *this; + } + inline Vec2& operator/=(const Vec2& v) { + x/=v.x; y/=v.y; + return *this; + } + template + inline Vec2& operator+=(P s) { + x+=s; y+=s; + return *this; + } + template + inline Vec2& operator-=(P s) { + x-=s; y-=s; + return *this; + } + template + inline Vec2& operator*=(P s) { + x*=s; y*=s; + return *this; + } + template + inline Vec2& operator/=(P s) { + x/=s; y/=s; + return *this; + } }; diff --git a/src/crumpet-engine/rect.cpp b/src/crumpet-engine/rect.cpp index c29189f..115a01a 100644 --- a/src/crumpet-engine/rect.cpp +++ b/src/crumpet-engine/rect.cpp @@ -63,7 +63,7 @@ bool Rect::Contains(Rect* rect) { return (rect->x >= x && rect->Right() <= (x + w) && rect->y >= y && rect->Bottom() <= (y + h)); } -bool Rect::Contains(Vec2* point) { +bool Rect::Contains(Vec2* point) { return (point->x >= x && point->x <= (x + w) && point->y >= y && point->y <= (y + h)); } @@ -72,13 +72,13 @@ bool Rect::Contains(int x, int y, int w, int h) { return Contains(&tempRect); } -Vec2* Rect::Position() { - Vec2* res = new Vec2(x, y); +Vec2* Rect::Position() { + Vec2* res = new Vec2(x, y); return res; } -Vec2* Rect::Center() { - Vec2* res = new Vec2(x + (w / 2), y + (h / 2)); +Vec2* Rect::Center() { + Vec2* res = new Vec2(x + (w / 2), y + (h / 2)); return res; } @@ -142,17 +142,17 @@ void Rect::SetRect(int x, int y, int w, int h) { this->rect->h = h; } -void Rect::SetSize(Vec2* size) { +void Rect::SetSize(Vec2* size) { this->x = size->x; this->y = size->y; } -void Rect::SetPos(Vec2* pos) { +void Rect::SetPos(Vec2* pos) { this->w = pos->x; this->h = pos->y; } -void Rect::Translate(Vec2* offset) { +void Rect::Translate(Vec2* offset) { this->x += offset->x; this->y += offset->y; } diff --git a/src/crumpet-engine/rect.h b/src/crumpet-engine/rect.h index 5125b50..bcf123f 100644 --- a/src/crumpet-engine/rect.h +++ b/src/crumpet-engine/rect.h @@ -35,11 +35,11 @@ public: // bool Intersects(int x, int y, int w, int h); bool Contains(Rect* rect); - bool Contains(Vec2* point); + bool Contains(Vec2* point); bool Contains(int x, int y, int w, int h); - Vec2* Position(); - Vec2* Center(); + Vec2* Position(); + Vec2* Center(); int CenterX(); int CenterY(); @@ -47,7 +47,7 @@ public: int Right(); int Top(); int Bottom(); - int Perimiter(); + int Perimiter(); int Area(); int GetX(); @@ -56,9 +56,9 @@ public: int GetH(); void SetRect(int x, int y, int w, int h); - void SetSize(Vec2* size); - void SetPos(Vec2* pos); - void Translate(Vec2* offset); + void SetSize(Vec2* size); + void SetPos(Vec2* pos); + void Translate(Vec2* offset); void TranslateX(int x); void TranslateY(int y); diff --git a/src/main.cpp b/src/main.cpp index 580bf09..2c47099 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -4,9 +4,6 @@ #include int main(int argc, char** argv) { - - // Logger.Log() << "Okay, this is epic" << 1234; - Game game; game.renderer.createWindow("Crumpet Engine", 600, 400, SCREEN_MODE_VSYNC);