diff --git a/crumpet-engine/crumpet-engine.vcxproj b/crumpet-engine/crumpet-engine.vcxproj index cb423f5..e5c8e8a 100644 --- a/crumpet-engine/crumpet-engine.vcxproj +++ b/crumpet-engine/crumpet-engine.vcxproj @@ -129,7 +129,6 @@ - diff --git a/crumpet-engine/crumpet-engine.vcxproj.filters b/crumpet-engine/crumpet-engine.vcxproj.filters index e2b78bf..e9c6468 100644 --- a/crumpet-engine/crumpet-engine.vcxproj.filters +++ b/crumpet-engine/crumpet-engine.vcxproj.filters @@ -5,7 +5,6 @@ - @@ -33,6 +32,8 @@ headers - + + headers + \ No newline at end of file diff --git a/crumpet-engine/entity.cpp b/crumpet-engine/entity.cpp index 99fc063..505bbdf 100644 --- a/crumpet-engine/entity.cpp +++ b/crumpet-engine/entity.cpp @@ -3,7 +3,8 @@ Entity::Entity(std::string name, SDL_Renderer* SDLRenderer) : m_rectPos(0, 0), m_rectSize(0, 0), - m_col(0, 0, 0, 0) { + m_col(0, 0, 0, 0), + Pos(0, 0) { this->m_name = name; this->m_SDLRenderer = SDLRenderer; @@ -12,8 +13,9 @@ Entity::Entity(std::string name, SDL_Renderer* SDLRenderer) Entity::Entity(std::string name, SDL_Renderer* SDLRenderer, PolyDrawType drawType) : m_rectPos(0, 0), - m_rectSize(0, 0), - m_col(0, 0, 0, 0) { + m_rectSize(0, 0), + m_col(0, 0, 0, 0), + Pos(0, 0) { this->m_name = name; this->m_SDLRenderer = SDLRenderer; @@ -34,6 +36,9 @@ bool Entity::LoadTexture(std::string path) { return false; } + this->m_textureW = loadedSurface->w; + this->m_textureH = loadedSurface->h; + SDL_FreeSurface(loadedSurface); return true; } @@ -69,8 +74,12 @@ void Entity::AddVecPoint(Vec4 point) { } void Entity::Render() { - if (Rendertype == RenderType::MODE_TEXTURE) - SDL_RenderCopy(m_SDLRenderer, m_texture, NULL, NULL); + if (Rendertype == RenderType::MODE_TEXTURE) { + SDL_Rect renderQuad = { Pos.x, Pos.y, m_textureW, m_textureH }; + SDL_RenderCopy(m_SDLRenderer, m_texture, NULL, &renderQuad); + } + + 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) @@ -87,5 +96,5 @@ void Entity::Render() { } Entity::~Entity() { - + SDL_DestroyTexture(m_texture); } diff --git a/crumpet-engine/entity.h b/crumpet-engine/entity.h index d14d0c6..334957f 100644 --- a/crumpet-engine/entity.h +++ b/crumpet-engine/entity.h @@ -40,6 +40,11 @@ public: void Render(); + Vec2 Pos; + + std::string PATH = "C:/Users/Ben/Desktop/crumpet-engine"; + // std::string PATH = "E:/Games/crumpet-engine"; + virtual ~Entity(); private: std::string m_name; @@ -52,9 +57,8 @@ private: std::vector m_linePoints; SDL_Texture* m_texture; - - // std::string PATH = "C:/Users/Ben/Desktop/crumpet-engine"; - std::string PATH = "E:/Games/crumpet-engine"; + int m_textureW; + int m_textureH; SDL_Renderer* m_SDLRenderer; }; diff --git a/crumpet-engine/main.cpp b/crumpet-engine/main.cpp index 611c9b1..a866f9f 100644 --- a/crumpet-engine/main.cpp +++ b/crumpet-engine/main.cpp @@ -12,21 +12,22 @@ int main(int argc, char** argv) { Entity mario("mario", game.SDLRenderer); mario.LoadTexture("/resources/mario.png"); - Entity box("box", game.SDLRenderer, PolyDrawType::DRAW_FILLED_RECT); - box.SetDrawColour(Vec4(144, 022, 111, 255)); - box.SetRect(Vec2(0, 0), Vec2(SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2)); +// Entity box("box", game.SDLRenderer, PolyDrawType::DRAW_FILLED_RECT); +// box.SetDrawColour(Vec4(144, 022, 111, 255)); +// box.SetRect(Vec2(0, 0), Vec2(SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2)); - Entity boxOutline("box", game.SDLRenderer, PolyDrawType::DRAW_OUTLINE_RECT); - boxOutline.SetDrawColour(Vec4(144, 111, 111, 255)); - boxOutline.SetRect(Vec2(100, 100), Vec2(SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2)); +// Entity boxOutline("box", game.SDLRenderer, PolyDrawType::DRAW_OUTLINE_RECT); +// boxOutline.SetDrawColour(Vec4(144, 111, 111, 255)); +// boxOutline.SetRect(Vec2(100, 100), Vec2(SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2)); - Entity mesh("mesh", game.SDLRenderer, PolyDrawType::DRAW_LINES); - mesh.SetDrawColour(Vec4(255, 244, 111, 255)); - mesh.AddVecPoint(Vec4(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT)); - mesh.AddVecPoint(Vec4(SCREEN_WIDTH, 0, 0, SCREEN_HEIGHT)); +// Entity mesh("mesh", game.SDLRenderer, PolyDrawType::DRAW_LINES); +// mesh.SetDrawColour(Vec4(255, 244, 111, 255)); +// mesh.AddVecPoint(Vec4(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT)); +// mesh.AddVecPoint(Vec4(SCREEN_WIDTH, 0, 0, SCREEN_HEIGHT)); Sprite sans("sans", game.SDLRenderer, SpriteType::SPRITE_ANIMATED); - + sans.LoadSpriteTextures("/resources/sans-undertale-spritesheet.png"); + // sans.UseSpriteSheet while (!game.IsDisplayClosed()) { game.PollEvents(); @@ -39,10 +40,12 @@ int main(int argc, char** argv) { } game.RenderClear(); + game.RenderEntity(&mario); - game.RenderEntity(&box); - game.RenderEntity(&mesh); - game.RenderEntity(&boxOutline); +// game.RenderEntity(&box); +// game.RenderEntity(&mesh); +// game.RenderEntity(&boxOutline); + game.RenderUpdate(); } diff --git a/crumpet-engine/sprite.cpp b/crumpet-engine/sprite.cpp index 1e3ad95..25d2511 100644 --- a/crumpet-engine/sprite.cpp +++ b/crumpet-engine/sprite.cpp @@ -3,8 +3,28 @@ Sprite::Sprite(std::string name, SDL_Renderer* SDLRenderer, SpriteType mode) : Entity(name, SDLRenderer) { + this->m_SDLRenderer = SDLRenderer; + this->Spritetype = mode; +} + +bool Sprite::LoadSpriteTextures(std::string path) { + SDL_Surface* loadedSurface = IMG_Load((PATH + path).c_str()); + if (loadedSurface == NULL) { + std::cout << "Unable to load image from:" << (PATH + path).c_str() << " IMG ERROR: " << IMG_GetError() << std::endl; + return false; + } + this->m_spriteSheetW = loadedSurface->w; + this->m_spriteSheetH = loadedSurface->h; + m_spriteSheetTexture = SDL_CreateTextureFromSurface(m_SDLRenderer, loadedSurface); + + SDL_FreeSurface(loadedSurface); + return true; +} + +void Sprite::UseSpriteSheet(SpriteState state, int startx, int starty, int width, int height, int seperation, int frames) { + m_spriteMaps[state]; } Sprite::~Sprite() { - + SDL_DestroyTexture(m_spriteSheetTexture); } diff --git a/crumpet-engine/sprite.h b/crumpet-engine/sprite.h index 3873c4b..99ef557 100644 --- a/crumpet-engine/sprite.h +++ b/crumpet-engine/sprite.h @@ -3,6 +3,7 @@ #include #include #include +#include #include #include #include "entity.h" @@ -13,16 +14,42 @@ enum struct SpriteType { SPRITE_STATIC }; +enum struct SpriteState { + STATE_DEFAULT, + STATE_LEFT, + STATE_RIGHT, + STATE_UP, + STATE_DOWN, + STATE_TOP, + STATE_BOTTOM, + STATE_FRONT, + STATE_BACK, + STATE_JUMP, + STATE_CROUCH +}; + class Sprite : public Entity { public: Sprite(std::string name, SDL_Renderer* SDLRenderer, SpriteType mode); SpriteType Spritetype = SpriteType::SPRITE_DEFAULT; - + SpriteState Spritestate = SpriteState::STATE_DEFAULT; + bool LoadSpriteTextures(std::string path); + void UseSpriteSheet(SpriteState state, int startx, int starty, int width, int height, int seperation, int frames); + void AnimateSprite(SpriteState state); + void Move(); + + void Render(); virtual ~Sprite(); private: - SDL_Texture *m_spriteSheetTexture; + std::map> m_spriteMaps; + + SDL_Renderer* m_SDLRenderer; + SDL_Texture* m_spriteSheetTexture; + + int m_spriteSheetW; + int m_spriteSheetH; };