Worked on the sprite class, got texture loading working with sprite class, addad garbage colection to entities and sprites, and also added maintatining aspect ratio in the entity render
This commit is contained in:
@@ -129,7 +129,6 @@
|
||||
<ClCompile Include="game.cpp" />
|
||||
<ClCompile Include="logger.cpp" />
|
||||
<ClCompile Include="main.cpp" />
|
||||
<ClCompile Include="mathHelper.cpp" />
|
||||
<ClCompile Include="renderer.cpp" />
|
||||
<ClCompile Include="sprite.cpp" />
|
||||
</ItemGroup>
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
<ClCompile Include="entity.cpp" />
|
||||
<ClCompile Include="renderer.cpp" />
|
||||
<ClCompile Include="game.cpp" />
|
||||
<ClCompile Include="mathHelper.cpp" />
|
||||
<ClCompile Include="sprite.cpp" />
|
||||
<ClCompile Include="logger.cpp" />
|
||||
</ItemGroup>
|
||||
@@ -33,6 +32,8 @@
|
||||
<ClInclude Include="timer.h">
|
||||
<Filter>headers</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="logger.h" />
|
||||
<ClInclude Include="logger.h">
|
||||
<Filter>headers</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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<Vec4> 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;
|
||||
};
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
#include <string>
|
||||
#include <iostream>
|
||||
#include <vector>
|
||||
#include <map>
|
||||
#include <SDL.h>
|
||||
#include <SDL_image.h>
|
||||
#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<SpriteState, std::vector<SDL_Rect*>> m_spriteMaps;
|
||||
|
||||
SDL_Renderer* m_SDLRenderer;
|
||||
SDL_Texture* m_spriteSheetTexture;
|
||||
|
||||
int m_spriteSheetW;
|
||||
int m_spriteSheetH;
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user