diff --git a/docs/core.todo b/docs/core.todo index b4ee6d7..2e2f65f 100644 --- a/docs/core.todo +++ b/docs/core.todo @@ -21,7 +21,8 @@ Core: ✔ Add a DrawPolygon method that takes vertices and draws arbirary shapes @done (10/29/2021, 6:24:14 PM) ☐ Allow DrawPolygon to add a texture to the polygon @low ✔ Refactor the drawing code to allow for rotation with cleaner code @high @done (10/29/2021, 8:36:24 PM) - ☐ Test rotation of images + ✔ Test rotation of images @done (11/1/2021, 2:11:13 PM) + ☐ Fix line rotation @low GUI: @@ -42,6 +43,9 @@ Core: ☐ Come up with a way to wrap Box2D into an API Audio: + ☐ Research the usage of OpenAL + ☐ Add OpenAL to the project + ☐ Design Audio API Scripting: Script Managment class: diff --git a/src/graphics/igraphics.h b/src/graphics/igraphics.h index c5cfdd4..823b6d8 100644 --- a/src/graphics/igraphics.h +++ b/src/graphics/igraphics.h @@ -48,13 +48,13 @@ namespace lunarium virtual Color GetClearColor() const = 0; // Draw Methods - virtual void DrawFilledPolygon(float* pVerts, int numVerts, Color color) = 0; - virtual void DrawLine(glm::vec2 point1, glm::vec2 point2, Color color, float lineWidth) = 0; + virtual void DrawFilledPolygon(float* pVerts, int numVerts, Color color, glm::vec2 position, float angle = 0.0f) = 0; + virtual void DrawLine(glm::vec2 point1, glm::vec2 point2, Color color, float lineWidth, float angle = 0.0f) = 0; virtual void DrawEllipse(glm::vec2 center, glm::vec2 radii, Color color, float thickness, int resolution) = 0; virtual void DrawFilledEllipse(glm::vec2 center, glm::vec2 radii, Color color, int resolution) = 0; virtual void DrawBox(Rectangle dimensions, Color color, float thickness, float angle = 0.0f) = 0; virtual void DrawFilledBox(Rectangle box, Color color, float angle = 0.0f) = 0; - virtual void DrawImage(Image& image, glm::vec2 topLeft, Color color, float angle = 0.0f) = 0; + virtual void DrawImage(Image& image, glm::vec2 position, Color color, float angle = 0.0f) = 0; virtual void DrawImage(Image& image, Rectangle source, Rectangle destination, Color color, float angle = 0.0f) = 0; virtual void DrawString(const char* string, Rectangle boundingArea, Color color, float scale = 1.0f, int font = 0) = 0; diff --git a/src/graphics/opengl/glGraphics.cpp b/src/graphics/opengl/glGraphics.cpp index 47f9227..8dbbca9 100644 --- a/src/graphics/opengl/glGraphics.cpp +++ b/src/graphics/opengl/glGraphics.cpp @@ -190,11 +190,12 @@ namespace lunarium } // Draw Methods - void OglGraphics::DrawLine(glm::vec2 point1, glm::vec2 point2, Color color, float lineWidth) + void OglGraphics::DrawLine(glm::vec2 point1, glm::vec2 point2, Color color, float lineWidth, float angle) { mShapeShader.MakeActive(); mShapeShader.SetUniformMatrix("projection", 1, glm::value_ptr(mProjection)); glm::mat4 model = glm::mat4(1.0f); + model = glm::rotate(model, angle, glm::vec3(0.0f, 0.0f, 1.0f)); mShapeShader.SetUniformMatrix("model", 1, glm::value_ptr(model)); mShapeShader.SetUniformf("shapeColor", { color.Red, color.Green, color.Blue, color.Alpha }); glBindVertexArray(mRectVAO); @@ -273,11 +274,13 @@ namespace lunarium glBindVertexArray(0); } - void OglGraphics::DrawFilledPolygon(float* pVerts, int numVerts, Color color) + void OglGraphics::DrawFilledPolygon(float* pVerts, int numVerts, Color color, glm::vec2 position, float angle) { mShapeShader.MakeActive(); mShapeShader.SetUniformMatrix("projection", 1, glm::value_ptr(mProjection)); glm::mat4 model = glm::mat4(1.0f); + model = glm::translate(model, glm::vec3(position.x, position.y, 0.0f)); + model = glm::rotate(model, angle, glm::vec3(0.0f, 0.0f, 1.0f)); mShapeShader.SetUniformMatrix("model", 1, glm::value_ptr(model)); mShapeShader.SetUniformf("shapeColor", { color.Red, color.Green, color.Blue, color.Alpha }); glBindVertexArray(mRectVAO); @@ -348,7 +351,7 @@ namespace lunarium void OglGraphics::DrawImage(Image& image, Rectangle source, Rectangle destination, Color color, float angle) { glm::mat4 id = glm::mat4(1.0f); - glm::vec3 pos = glm::vec3(destination.left(), destination.top(), 0.0f); + glm::vec3 pos = glm::vec3(destination.X, destination.Y, 0.0f); glm::mat4 trans = glm::translate(id, pos); trans = glm::rotate(trans, angle, glm::vec3(0.0f, 0.0f, 1.0f)); trans = glm::scale(trans, glm::vec3(destination.HalfWidth * 2, destination.HalfHeight * 2, 1.0f)); @@ -476,24 +479,24 @@ namespace lunarium GLuint VBO; GLfloat vertices[] = { // Pos // Tex - 0.0f, 1.0f, 0.0f, 0.0f, - 1.0f, 0.0f, 1.0f, 1.0f, - 0.0f, 0.0f, 0.0f, 1.0f, + -0.5f, 0.5f, 0.0f, 0.0f, + 0.5f, -0.5f, 1.0f, 1.0f, + -0.5f, -0.5f, 0.0f, 1.0f, - 0.0f, 1.0f, 0.0f, 0.0f, - 1.0f, 1.0f, 1.0f, 0.0f, - 1.0f, 0.0f, 1.0f, 1.0f + -0.5f, 0.5f, 0.0f, 0.0f, + 0.5f, 0.5f, 1.0f, 0.0f, + 0.5f, -0.5f, 1.0f, 1.0f }; // GLfloat vertices[] = { // // Pos // Tex - // 0.0f, 1.0f, 0.0f, 1.0f, - // 1.0f, 0.0f, 1.0f, 0.0f, - // 0.0f, 0.0f, 0.0f, 0.0f, + // 0.0f, 1.0f, 0.0f, 0.0f, + // 1.0f, 0.0f, 1.0f, 1.0f, + // 0.0f, 0.0f, 0.0f, 1.0f, - // 0.0f, 1.0f, 0.0f, 1.0f, - // 1.0f, 1.0f, 1.0f, 1.0f, - // 1.0f, 0.0f, 1.0f, 0.0f + // 0.0f, 1.0f, 0.0f, 0.0f, + // 1.0f, 1.0f, 1.0f, 0.0f, + // 1.0f, 0.0f, 1.0f, 1.0f // }; glGenVertexArrays(1, &mImageVAO); diff --git a/src/graphics/opengl/glGraphics.h b/src/graphics/opengl/glGraphics.h index 5283329..6801e15 100644 --- a/src/graphics/opengl/glGraphics.h +++ b/src/graphics/opengl/glGraphics.h @@ -43,8 +43,8 @@ namespace lunarium virtual Color GetClearColor() const; // Draw Methods - virtual void DrawFilledPolygon(float* pVerts, int numVerts, Color color); - virtual void DrawLine(glm::vec2 point1, glm::vec2 point2, Color color, float lineWidth); + virtual void DrawFilledPolygon(float* pVerts, int numVerts, Color color, glm::vec2 position, float angle = 0.0f); + virtual void DrawLine(glm::vec2 point1, glm::vec2 point2, Color color, float lineWidth, float angle = 0.0f); virtual void DrawEllipse(glm::vec2 center, glm::vec2 radii, Color color, float thickness, int resolution); virtual void DrawFilledEllipse(glm::vec2 center, glm::vec2 radii, Color color, int resolution); virtual void DrawBox(Rectangle box, Color color, float thickness, float angle = 0.0f); diff --git a/src/input/keyboard.cpp b/src/input/keyboard.cpp index 0511bd1..a4ededd 100644 --- a/src/input/keyboard.cpp +++ b/src/input/keyboard.cpp @@ -118,6 +118,8 @@ namespace lunarium mKeyboard.insert(std::pair(KeyCode::RETURN, { KeyCode::RETURN, "return", "return", (char)(10), (char)(10) })); mKeyboard.insert(std::pair(KeyCode::ESCAPE, { KeyCode::ESCAPE, "escape", "escape", (char)(27), (char)(27) })); mKeyboard.insert(std::pair(KeyCode::SPACE, { KeyCode::SPACE, "space", "space", (char)(32), (char)(32) })); + mKeyboard.insert(std::pair(KeyCode::PAGE_UP, { KeyCode::PAGE_UP, "page up", "page up", (char)(0), (char)(0) })); + mKeyboard.insert(std::pair(KeyCode::PAGE_DOWN, { KeyCode::PAGE_DOWN, "page down", "page down", (char)(0), (char)(0) })); // Arrow Keys mKeyboard.insert(std::pair(KeyCode::LEFT, { KeyCode::LEFT, "Left Arrow", "Left Arrow", (char)(0), (char)(0) })); diff --git a/src/run_modes/tester/scenes/physicsScene.cpp b/src/run_modes/tester/scenes/physicsScene.cpp index 2c4998c..616eb72 100644 --- a/src/run_modes/tester/scenes/physicsScene.cpp +++ b/src/run_modes/tester/scenes/physicsScene.cpp @@ -27,7 +27,7 @@ namespace lunarium void PhysicsScene::OnLoad() { - Logger::Log(mLogCat, LogLevel::INFO, "Running Simple Render Test Scene"); + Logger::Log(mLogCat, LogLevel::INFO, "Running Physics Test Scene"); // Comments from the docs: https://box2d.org/documentation/md__d_1__git_hub_box2d_docs_hello.html diff --git a/src/run_modes/tester/scenes/simpleRenderScene.cpp b/src/run_modes/tester/scenes/simpleRenderScene.cpp index 8d1893e..7c86770 100644 --- a/src/run_modes/tester/scenes/simpleRenderScene.cpp +++ b/src/run_modes/tester/scenes/simpleRenderScene.cpp @@ -29,6 +29,8 @@ namespace lunarium // Currently the full default window size mImageSize.Width = 1280; mImageSize.Height = 720; + + angle = 0.0f; } void SimpleRenderScene::OnTick(double delta) @@ -64,6 +66,16 @@ namespace lunarium mImageSize.Height += 10; } + if (Core::Input().IsKeyDown(KeyCode::PAGE_UP)) + { + angle += 0.1f; + } + + if (Core::Input().IsKeyDown(KeyCode::PAGE_DOWN)) + { + angle -= 0.1f; + } + mImageSize.Width = Math::ClampI(mImageSize.Width, 320, 1280); mImageSize.Height = Math::ClampI(mImageSize.Height, 180, 720); @@ -87,8 +99,8 @@ namespace lunarium void SimpleRenderScene::OnRender(IGraphics* g) { g->DrawImage(*mpRenderedImage, Rectangle::MakeFromTopLeft(0.0f, 0.0f, (float)mpRenderedImage->GetWidth(), (float)mpRenderedImage->GetHeight()), - Rectangle::MakeFromTopLeft(0.0f, 0.0f, (float)mImageSize.Width, (float)mImageSize.Height), Color(1.0f, 1.0f, 1.0f, 1.0f)); + Rectangle::MakeFromTopLeft(0.0f, 0.0f, (float)mImageSize.Width, (float)mImageSize.Height), Color(1.0f, 1.0f, 1.0f, 1.0f), angle); - g->DrawBox(Rectangle::MakeFromTopLeft(0.0f, 0.0f, (float)mImageSize.Width, (float)mImageSize.Height), Color(0.0f, 0.0f, 0.0f, 1.0f), 1.0f); + g->DrawBox(Rectangle::MakeFromTopLeft(0.0f, 0.0f, (float)mImageSize.Width, (float)mImageSize.Height), Color(0.0f, 0.0f, 0.0f, 1.0f), 1.0f, angle); } } \ No newline at end of file diff --git a/src/run_modes/tester/scenes/simpleRenderScene.h b/src/run_modes/tester/scenes/simpleRenderScene.h index 18427fc..355e960 100644 --- a/src/run_modes/tester/scenes/simpleRenderScene.h +++ b/src/run_modes/tester/scenes/simpleRenderScene.h @@ -28,6 +28,7 @@ namespace lunarium int mTextBoxWidth; Sizei mImageSize; Image* mpRenderedImage; + float angle; }; } diff --git a/src/run_modes/tester/tester.cpp b/src/run_modes/tester/tester.cpp index c4c0566..84f0778 100644 --- a/src/run_modes/tester/tester.cpp +++ b/src/run_modes/tester/tester.cpp @@ -10,6 +10,7 @@ #include "scenes/simpleRenderScene.h" #include "scenes/physicsScene.h" +#include #include #include #include @@ -34,8 +35,8 @@ namespace lunarium Logger::Log(mLogCat, LogLevel::INFO, "BUILDING WITH THE EDITOR!"); #endif - // mpScene = new SimpleRenderScene(mLogCat); - mpScene = new PhysicsScene(mLogCat); + mpScene = new SimpleRenderScene(mLogCat); + // mpScene = new PhysicsScene(mLogCat); mpScene->OnLoad(); @@ -50,6 +51,26 @@ namespace lunarium void Tester::OnTick(double delta) { + if (Core::Input().IsKeyDown(KeyCode::NUM_1)) + { + if (!dynamic_cast(mpScene)) + { + delete mpScene; + mpScene = new SimpleRenderScene(mLogCat); + mpScene->OnLoad(); + } + } + + if (Core::Input().IsKeyDown(KeyCode::NUM_2)) + { + if (!dynamic_cast(mpScene)) + { + delete mpScene; + mpScene = new PhysicsScene(mLogCat); + mpScene->OnLoad(); + } + } + mpScene->OnTick(delta); } diff --git a/src/window/keyCodes.h b/src/window/keyCodes.h index 2b6bcf0..ffc84d5 100644 --- a/src/window/keyCodes.h +++ b/src/window/keyCodes.h @@ -100,6 +100,9 @@ namespace lunarium ESCAPE = GLFW_KEY_ESCAPE, + PAGE_UP = GLFW_KEY_PAGE_UP, + PAGE_DOWN = GLFW_KEY_PAGE_DOWN, + // Punctuation SEMICOLON = GLFW_KEY_SEMICOLON, // ';:' for US EQUALS = GLFW_KEY_EQUAL, // '+' any country @@ -199,6 +202,8 @@ namespace lunarium KeyCode::BACKSPACE, KeyCode::TAB, KeyCode::ESCAPE, + KeyCode::PAGE_UP, + KeyCode::PAGE_DOWN, KeyCode::SEMICOLON, KeyCode::EQUALS, KeyCode::COMMA,