Skip to content
Snippets Groups Projects
Commit 23e5e88a authored by Tamási Benjamin's avatar Tamási Benjamin
Browse files

Some graphics, and TextureManager

parent f6afe51f
Branches master
No related tags found
No related merge requests found
#include "Game.h"
bool Game::init(const char* title, int xpos, int ypos, int width, int height, int flags)
#include <iostream>
#include "SDL2/SDL.h"
bool Game::init(const char* title, int xpos, int ypos, int width, int height, bool fullscreen)
{
int flags = 0;
if(fullscreen)
{
flags = SDL_WINDOW_FULLSCREEN;
}
// attempt to initialize SDL
if(SDL_Init(SDL_INIT_EVERYTHING) == 0)
{
......@@ -34,8 +41,12 @@ bool Game::init(const char* title, int xpos, int ypos, int width, int height, in
std::cout << "SDL init fail\n";
return false; // SDL init fail
}
std::cout << "init success\n";
m_bRunning = true; // everything inited successfully, start the main loop
m_textureManager.load("gfx/yolo.png", "animate", m_pRenderer);
return true;
}
......@@ -44,3 +55,27 @@ void Game::render()
SDL_RenderClear(m_pRenderer); // clear the renderer to the draw color
SDL_RenderPresent(m_pRenderer); // draw to the screen
}
void Game::clean()
{
std::cout << "cleaning game\n";
SDL_DestroyWindow(m_pWindow);
SDL_DestroyRenderer(m_pRenderer);
SDL_Quit();
}
void Game::handleEvents()
{
SDL_Event event;
if(SDL_PollEvent(&event))
{
switch (event.type)
{
case SDL_QUIT:
m_bRunning = false;
break;
default:
break;
}
}
}
#ifndef __Game__
#define __Game__
#ifndef GAME_H_INCLUDED
#define GAME_H_INCLUDED
#include "SDL.h"
#include "TextureManager.h"
class Game
{
public:
Game();
~Game();
bool init(const char* title, int xpos, int ypos, int width, int height, int flags);
//Game();
//~Game();
bool init(const char* title, int xpos, int ypos, int width, int height, bool fullscreen);
void render();
void update();
void handleEvents();
......@@ -16,7 +17,8 @@ public:
private:
SDL_Window* m_pWindow;
SDL_Renderer* m_pRenderer;
int m_currentFrame;
TextureManager m_textureManager;
bool m_bRunning;
};
#endif /* defined(__Game__) */
#include "TextureManager.h"
#include <iostream>
#include "SDL2/SDL.h"
#include "SDL2/SDL_image.h"
bool TextureManager::load(std::string fileName, std::string id, SDL_Renderer* pRenderer)
{
SDL_Surface* pTempSurface = IMG_Load(fileName.c_str());
if(pTempSurface == 0)
{
return false;
}
SDL_Texture* pTexture = SDL_CreateTextureFromSurface(pRenderer, pTempSurface);
SDL_FreeSurface(pTempSurface);
// everything went ok, add the texture to our list
if(pTexture != 0)
{
m_textureMap[id] = pTexture;
return true;
}
// reaching here means something went wrong
return false;
}
void TextureManager::draw(std::string id, int x, int y, int width, int height, SDL_Renderer* pRenderer, SDL_RendererFlip flip)
{
SDL_Rect srcRect;
SDL_Rect destRect;
srcRect.x = 0;
srcRect.y = 0;
srcRect.w = destRect.w = width;
srcRect.h = destRect.h = height;
destRect.x = x;
destRect.y = y;
SDL_RenderCopyEx(pRenderer, m_textureMap[id], &srcRect, &destRect, 0, 0, flip);
}
void TextureManager::drawFrame(std::string id, int x, int y, int width, int height, int currentRow, int currentFrame, SDL_Renderer *pRenderer, SDL_RendererFlip flip)
{
SDL_Rect srcRect;
SDL_Rect destRect;
srcRect.x = width * currentFrame;
srcRect.y = height * currentRow;
srcRect.w = destRect.w = width;
srcRect.h = destRect.h = height;
destRect.x = x;
destRect.y = y;
SDL_RenderCopyEx(pRenderer, m_textureMap[id], &srcRect, &destRect, 0, 0, flip);
}
#ifndef TEXTUREMANAGER_H_INCLUDED
#define TEXTUREMANAGER_H_INCLUDED
#include <iostream>
#include <map>
#include "SDL2/SDL.h"
class TextureManager
{
public:
bool load(std::string fileName, std::string id, SDL_Renderer* pRenderer);
void draw(std::string id, int x, int y, int width, int height, SDL_Renderer* pRenderer, SDL_RendererFlip flip = SDL_FLIP_NONE);
void drawFrame(std::string id, int x, int y, int width, int height, int currentRow, int currentFrame, SDL_Renderer* pRenderer, SDL_RendererFlip flip = SDL_FLIP_NONE);
private:
std::map<std::string, SDL_Texture*> m_textureMap;
};
#endif // TEXTUREMANAGER_H_INCLUDED
gfx/arc1.png

10.4 KiB

gfx/blocks1.png

15.9 KiB

gfx/yolo.png

8.7 KiB

#include<SDL.h>
SDL_Window* g_pWindow = 0;
SDL_Renderer* g_pRenderer = 0;
int main(int argc, char* args[])
#include "Game.h"
// our Game object
Game* g_game = 0;
int main(int argc, char* argv[])
{
// initialize SDL
if(SDL_Init(SDL_INIT_EVERYTHING) >= 0)
g_game = new Game();
g_game->init("Chapter 1", 100, 100, 640, 580, false);
while(g_game->running())
{
// if succeeded create our window
g_pWindow = SDL_CreateWindow("Chapter 1: Setting up SDL",
SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
640, 480,
SDL_WINDOW_SHOWN);
// if the window creation succeeded create our renderer
if(g_pWindow != 0)
{
g_pRenderer = SDL_CreateRenderer(g_pWindow, -1, 0);
}
}
else
{
return 1; // sdl could not initialize
g_game->handleEvents();
//g_game->update();
g_game->render();
}
// everything succeeded lets draw the window
// set to black // This function expects Red, Green, Blue and
// Alpha as color values
SDL_SetRenderDrawColor(g_pRenderer, 0, 0, 0, 255);
// clear the window to black
SDL_RenderClear(g_pRenderer);
// show the window
SDL_RenderPresent(g_pRenderer);
// set a delay before quitting
SDL_Delay(5000);
// clean up SDL
SDL_Quit();
g_game->clean();
delete g_game;
return 0;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment