diff --git a/crumpet-engine/Game.cpp b/crumpet-engine/Game.cpp index 8b4b779..34b4a99 100644 --- a/crumpet-engine/Game.cpp +++ b/crumpet-engine/Game.cpp @@ -1,7 +1,7 @@ #include "game.h" Game::Game(std::string title, int width, int height, int targetFramerate, int targetUpdaterate) - : Renderer(title, width, height) { + : Renderer(title, width, height, targetFramerate) { this->targetFramerate = targetFramerate; this->targetUpdaterate = targetUpdaterate; diff --git a/crumpet-engine/entity.cpp b/crumpet-engine/entity.cpp index 579967b..cecec19 100644 --- a/crumpet-engine/entity.cpp +++ b/crumpet-engine/entity.cpp @@ -1,9 +1,24 @@ #include "entity.h" -Entity::Entity(std::string name, SDL_Renderer* SDLRenderer, RenderType mode) { +Entity::Entity(std::string name, SDL_Renderer* SDLRenderer) + : m_rectPos(0, 0), + m_rectSize(0, 0), + m_col(0, 0, 0, 0) { + this->m_name = name; this->m_SDLRenderer = SDLRenderer; - this->Rendertype = mode; + this->Rendertype = RenderType::MODE_TEXTURE; +} + +Entity::Entity(std::string name, SDL_Renderer* SDLRenderer, PolyDrawType drawType) + : m_rectPos(0, 0), + m_rectSize(0, 0), + m_col(0, 0, 0, 0) { + + this->m_name = name; + this->m_SDLRenderer = SDLRenderer; + this->Drawtype = drawType; + this->Rendertype = RenderType::MODE_POLYGON; } bool Entity::LoadTexture(std::string path) { @@ -23,23 +38,27 @@ bool Entity::LoadTexture(std::string path) { return true; } -void Entity::SetVecPoints(std::vector polyPoints) { - this->m_polyPoints = polyPoints; +void Entity::SetDrawColour(Vec4 col) { + this->m_col = col; + // SDL_SetRenderDrawColor(m_SDLRenderer, col.x, col.y, col.z, col.w); } -void Entity::AddVecPoint(Vec2 point) { - this->m_polyPoints.push_back(point); -} - -void Entity::SetPolyDrawType(PolyDrawType type) { - this->Drawtype = type; +void Entity::SetRect(Vec2 pos, Vec2 size) { + m_rectPos = pos; + m_rectSize = size; + m_rect = { pos.x, pos.y, size.x, size.y }; } void Entity::Render() { if (Rendertype == RenderType::MODE_TEXTURE) SDL_RenderCopy(m_SDLRenderer, m_texture, NULL, NULL); - // if (RenderType == EntityType::MODE_POLYGON) - + if (Rendertype == RenderType::MODE_POLYGON) { + SDL_SetRenderDrawColor(m_SDLRenderer, m_col.x, m_col.y, m_col.z, m_col.w); + if (Drawtype == PolyDrawType::DRAW_FILLED_RECT) + SDL_RenderFillRect(m_SDLRenderer, &m_rect); + if (Drawtype == PolyDrawType::DRAW_OUTLINE_RECT) + SDL_RenderDrawRect(m_SDLRenderer, &m_rect); + } } Entity::~Entity() { diff --git a/crumpet-engine/entity.h b/crumpet-engine/entity.h index 7d359f2..793fe99 100644 --- a/crumpet-engine/entity.h +++ b/crumpet-engine/entity.h @@ -22,29 +22,38 @@ enum struct PolyDrawType { class Entity { public: - Entity(std::string name, SDL_Renderer* SDLRenderer, RenderType mode); // Texture overload - // Entity(); // Polygon overload + Entity(std::string name, SDL_Renderer* SDLRenderer); // Texture overload + Entity(std::string name, SDL_Renderer* SDLRenderer, PolyDrawType drawType); // Polygon overload RenderType Rendertype = RenderType::MODE_DEFAULT; PolyDrawType Drawtype = PolyDrawType::DRAW_DEFAULT; bool LoadTexture(std::string path); - void SetVecPoints(std::vector polyPoints); + void SetDrawColour(Vec4 col); + + void SetRect(Vec2 pos, Vec2 size); + + void SetVecPoints(std::vector linePoints); void AddVecPoint(Vec2 point); - void SetPolyDrawType(PolyDrawType type); - + void Render(); virtual ~Entity(); private: std::string m_name; - std::vector m_polyPoints; + Vec2 m_rectPos; + Vec2 m_rectSize; + SDL_Rect m_rect; + + Vec4 m_col; + + std::vector m_linePoints; SDL_Texture* m_texture; - std::string PATH = "C:/Users/Ben/Desktop/crumpet-engine"; - // std::string PATH = "E:/Games/crumpet-engine"; + // std::string PATH = "C:/Users/Ben/Desktop/crumpet-engine"; + std::string PATH = "E:/Games/crumpet-engine"; SDL_Renderer* m_SDLRenderer; }; diff --git a/crumpet-engine/main.cpp b/crumpet-engine/main.cpp index 5c52d93..adccccc 100644 --- a/crumpet-engine/main.cpp +++ b/crumpet-engine/main.cpp @@ -8,17 +8,27 @@ int main(int argc, char** argv) { Game game("Crumpet engine", SCREEN_WIDTH, SCREEN_HEIGHT, 0, 60); - Entity mario("mario", game.SDLRenderer, RenderType::MODE_TEXTURE); + Entity mario("mario", game.SDLRenderer); mario.LoadTexture("/resources/mario.png"); - Entity box("box", game.SDLRenderer, RenderType::MODE_POLYGON); + Entity box("box", game.SDLRenderer, PolyDrawType::DRAW_FILLED_RECT); + box.SetDrawColour(Vec4(0xFF, 0x00, 0x00, 0xFF)); + box.SetRect(Vec2(SCREEN_WIDTH / 4, SCREEN_HEIGHT / 4), Vec2(SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2)); + Entity outlineBox("bigger green box", game.SDLRenderer, PolyDrawType::DRAW_OUTLINE_RECT); + outlineBox.SetDrawColour(Vec4(0x00, 0xFF, 0x00, 0xFF)); + outlineBox.SetRect(Vec2(SCREEN_WIDTH / 6, SCREEN_HEIGHT / 6), Vec2(SCREEN_WIDTH * 2 / 3, SCREEN_HEIGHT * 2 / 3)); while (!game.IsDisplayClosed()) { game.PollEvents(); game.RenderClear(); + game.RenderEntity(&mario); + + game.RenderEntity(&box); + game.RenderEntity(&outlineBox); + game.RenderUpdate(); } diff --git a/crumpet-engine/mathHelper.h b/crumpet-engine/mathHelper.h index 891b121..3089ace 100644 --- a/crumpet-engine/mathHelper.h +++ b/crumpet-engine/mathHelper.h @@ -1,27 +1,66 @@ #pragma once +struct Vec4 { + Vec4(int x, int y, int z, int w) { + this->x = x; + this->y = y; + this->z = z; + this->w = w; + } + + int x, y, z, w; +}; + +struct Vec4f { + Vec4f(float x, float y, float z, float w) { + this->x = x; + this->y = y; + this->z = z; + this->w = w; + } + + float x, y, z, w; +}; + struct Vec3 { - Vec3(float x, float y, float z) { + Vec3(int x, int y, int z) { this->x = x; this->y = y; this->z = z; } - float x; - float y; - float z; + int x, y, z; +}; + +struct Vec3f { + Vec3f(float x, float y, float z) { + this->x = x; + this->y = y; + this->z = z; + } + + float x, y, z; }; struct Vec2 { - Vec2(float x, float y) { + Vec2(int x, int y) { this->x = x; this->y = y; } - float x; - float y; + int x, y; }; +struct Vec2f { + Vec2f(float x, float y) { + this->x = x; + this->y = y; + } + + float x, y; +}; + + /* struct Vec2SInt16 { Vec2SInt16(Sint16 x, Sint16 y) { this->x = x; diff --git a/crumpet-engine/renderer.cpp b/crumpet-engine/renderer.cpp index 54a61ed..e474af5 100644 --- a/crumpet-engine/renderer.cpp +++ b/crumpet-engine/renderer.cpp @@ -1,14 +1,18 @@ #include "renderer.h" #include "entity.h" -Renderer::Renderer(std::string title, int width, int height) { +Renderer::Renderer(std::string title, int width, int height, int targetFramerate) { if (SDL_Init(SDL_INIT_EVERYTHING) < 0) { std::cout << "SDL could not initialize, SDL ERROR: " << SDL_GetError() << std::endl; } m_window = SDL_CreateWindow(title.c_str(), SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, width, height, SDL_WINDOW_SHOWN); - SDLRenderer = SDL_CreateRenderer(m_window, -1, SDL_RENDERER_PRESENTVSYNC | SDL_RENDERER_ACCELERATED); - + + if (targetFramerate == 0) + SDLRenderer = SDL_CreateRenderer(m_window, -1, SDL_RENDERER_ACCELERATED); + if (targetFramerate == 1) + SDLRenderer = SDL_CreateRenderer(m_window, -1, SDL_RENDERER_PRESENTVSYNC | SDL_RENDERER_ACCELERATED); + isClosed = false; } diff --git a/crumpet-engine/renderer.h b/crumpet-engine/renderer.h index 434713d..8d1fe44 100644 --- a/crumpet-engine/renderer.h +++ b/crumpet-engine/renderer.h @@ -7,7 +7,7 @@ class Renderer { public: - Renderer(std::string title, int width, int height); + Renderer(std::string title, int width, int height, int targetFramerate); SDL_Renderer *SDLRenderer; void RenderEntity(Entity* entity);