From 23e5e88a7c686dde3603be362b83d5925ba0bd80 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tam=C3=A1si=20Benjamin?= <halftome@sch.bme.hu>
Date: Sat, 19 Apr 2014 21:59:38 +0200
Subject: [PATCH] Some graphics, and TextureManager

---
 Game.cpp           |  39 ++++++++++++++++++++++++++++++++--
 Game.h             |  14 ++++++------
 TextureManager.cpp |  48 +++++++++++++++++++++++++++++++++++++++++
 TextureManager.h   |  19 +++++++++++++++++
 gfx/arc1.png       | Bin 0 -> 10645 bytes
 gfx/blocks1.png    | Bin 0 -> 16276 bytes
 gfx/yolo.png       | Bin 0 -> 8912 bytes
 main.cpp           |  52 +++++++++++++++------------------------------
 8 files changed, 129 insertions(+), 43 deletions(-)
 create mode 100644 TextureManager.cpp
 create mode 100644 TextureManager.h
 create mode 100644 gfx/arc1.png
 create mode 100644 gfx/blocks1.png
 create mode 100644 gfx/yolo.png

diff --git a/Game.cpp b/Game.cpp
index 0822ff2..bb778ff 100644
--- a/Game.cpp
+++ b/Game.cpp
@@ -1,7 +1,14 @@
 #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;
+        }
+    }
+}
diff --git a/Game.h b/Game.h
index 68666f1..0b65249 100644
--- a/Game.h
+++ b/Game.h
@@ -1,13 +1,14 @@
-#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__) */
diff --git a/TextureManager.cpp b/TextureManager.cpp
new file mode 100644
index 0000000..97763d4
--- /dev/null
+++ b/TextureManager.cpp
@@ -0,0 +1,48 @@
+#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);
+}
diff --git a/TextureManager.h b/TextureManager.h
new file mode 100644
index 0000000..8759521
--- /dev/null
+++ b/TextureManager.h
@@ -0,0 +1,19 @@
+#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
diff --git a/gfx/arc1.png b/gfx/arc1.png
new file mode 100644
index 0000000000000000000000000000000000000000..511f64c319e3e9ffe9c31fa90ebd65cdd713514e
GIT binary patch
literal 10645
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

literal 0
HcmV?d00001

diff --git a/gfx/blocks1.png b/gfx/blocks1.png
new file mode 100644
index 0000000000000000000000000000000000000000..40044e1f885c6878ba870b1879e62472e40869ae
GIT binary patch
literal 16276
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
XC09?_6Ty}+(7tI;S3j3^P6<r_p;Sie

literal 0
HcmV?d00001

diff --git a/gfx/yolo.png b/gfx/yolo.png
new file mode 100644
index 0000000000000000000000000000000000000000..b76e6fbb9eac7b380ce72b21f407dbe40bcb7ff7
GIT binary patch
literal 8912
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
IbxsLQ0P7T6a{vGU

literal 0
HcmV?d00001

diff --git a/main.cpp b/main.cpp
index c644e15..61d8002 100644
--- a/main.cpp
+++ b/main.cpp
@@ -1,37 +1,19 @@
-#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)
- {
- // 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
- }
- // 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();
- return 0;
+    g_game = new Game();
+    g_game->init("Chapter 1", 100, 100, 640, 580, false);
+    while(g_game->running())
+    {
+       g_game->handleEvents();
+       //g_game->update();
+       g_game->render();
+    }
+    g_game->clean();
+    delete g_game;
+    return 0;
 }
-- 
GitLab