aboutsummaryrefslogtreecommitdiff
path: root/src/crepe/facade
diff options
context:
space:
mode:
Diffstat (limited to 'src/crepe/facade')
-rw-r--r--src/crepe/facade/SdlContext.cpp73
-rw-r--r--src/crepe/facade/SdlContext.h15
-rw-r--r--src/crepe/facade/Sound.h3
-rw-r--r--src/crepe/facade/Texture.cpp4
-rw-r--r--src/crepe/facade/Texture.h8
5 files changed, 95 insertions, 8 deletions
diff --git a/src/crepe/facade/SdlContext.cpp b/src/crepe/facade/SdlContext.cpp
index fc68b40..7e2d79f 100644
--- a/src/crepe/facade/SdlContext.cpp
+++ b/src/crepe/facade/SdlContext.cpp
@@ -1,11 +1,18 @@
#include "SdlContext.h"
+#include "SDL_rect.h"
+#include "api/spritesheet.h"
+#include "facade/Texture.h"
+#include "util/log.h"
#include <SDL2/SDL.h>
#include <SDL2/SDL_render.h>
#include <SDL2/SDL_surface.h>
#include <SDL2/SDL_video.h>
#include <SDL2/SDL_image.h>
+#include <iostream>
+#include <iterator>
+#include <ostream>
using namespace crepe;
@@ -33,8 +40,11 @@ SdlContext::SdlContext(){
SDL_DestroyWindow(m_game_window);
return;
}
-
- IMG_Init(IMG_INIT_PNG);
+ int imgFlags = IMG_INIT_PNG;
+ if( !( IMG_Init( imgFlags ) & imgFlags ) )
+ {
+ std::cout << "SDL_image could not initialize! SDL_image Error: " << IMG_GetError() << std::endl;
+ }
}
SdlContext::~SdlContext(){
@@ -45,13 +55,72 @@ SdlContext::~SdlContext(){
SDL_DestroyWindow(m_game_window);
}
IMG_Quit();
+ SDL_Quit();
}
+SDL_Texture* SdlContext::setTextureFromPath(const char* path, SDL_Rect& clip, const int row, const int col){
+ dbg_trace();
+
+ SDL_Surface* tmp = IMG_Load(path);
+ if (!tmp) {
+ std::cerr << "Error surface " << IMG_GetError << std::endl;
+ }
+
+ clip.w = tmp->w / col;
+ clip.h = tmp->h / row;
+
+ SDL_Texture* CreatedTexture = SDL_CreateTextureFromSurface(m_game_renderer, tmp);
+
+ if (!CreatedTexture) {
+ std::cerr << "Error could not create texture " << IMG_GetError << std::endl;
+ }
+ SDL_FreeSurface(tmp);
+
+ return CreatedTexture;
+}
SDL_Texture* SdlContext::setTextureFromPath(const char* path){
+ dbg_trace();
+
SDL_Surface* tmp = IMG_Load(path);
+ if (!tmp) {
+ std::cerr << "Error surface " << IMG_GetError << std::endl;
+ }
SDL_Texture* CreatedTexture = SDL_CreateTextureFromSurface(m_game_renderer, tmp);
+
+ if (!CreatedTexture) {
+ std::cerr << "Error could not create texture " << IMG_GetError << std::endl;
+ }
SDL_FreeSurface(tmp);
return CreatedTexture;
}
+
+
+void SdlContext::loop(const Texture& texture, api::Spritesheet& ss){
+ SDL_RenderClear(m_game_renderer);
+ bool quit = false;
+ SDL_Event event;
+
+ while (!quit) {
+ Uint32 ticks = SDL_GetTicks();
+ int sprite = (ticks / 100) % 4;
+ ss.select_sprite(sprite, 0);
+
+ while (SDL_PollEvent(&event) != NULL) {
+ switch (event.type) {
+ case SDL_QUIT:
+ quit = true;
+ break;
+ }
+
+ }
+
+ SDL_RenderClear(m_game_renderer);
+ SDL_RenderCopy(m_game_renderer, texture.get_texture(), NULL, NULL);
+ ss.draw_selected_sprite(10, 10);
+ SDL_RenderPresent(m_game_renderer);
+ }
+}
+
+
diff --git a/src/crepe/facade/SdlContext.h b/src/crepe/facade/SdlContext.h
index c275300..329a374 100644
--- a/src/crepe/facade/SdlContext.h
+++ b/src/crepe/facade/SdlContext.h
@@ -1,29 +1,38 @@
#pragma once
+#include "SDL_rect.h"
#include "Texture.h"
+#include "api/spritesheet.h"
#include <SDL2/SDL_render.h>
#include <SDL2/SDL_video.h>
-#include <string>
namespace crepe {
+class Texture;
+class Spritesheet;
+
class SdlContext {
+public:
+ void loop(const Texture& , api::Spritesheet&);
+
+ // singleton
+ static SdlContext & get_instance();
private:
SdlContext();
virtual ~SdlContext();
- // singleton
- static SdlContext & get_instance();
SdlContext(const SdlContext &) = delete;
SdlContext(SdlContext &&) = delete;
SdlContext & operator=(const SdlContext &) = delete;
SdlContext & operator=(SdlContext &&) = delete;
SDL_Texture* setTextureFromPath(const char*);
+ SDL_Texture* setTextureFromPath(const char*, SDL_Rect& clip, const int row, const int col);
private:
friend class Texture;
+ friend class api::Spritesheet;
SDL_Window* m_game_window;
SDL_Renderer* m_game_renderer;
diff --git a/src/crepe/facade/Sound.h b/src/crepe/facade/Sound.h
index ac93991..06e1932 100644
--- a/src/crepe/facade/Sound.h
+++ b/src/crepe/facade/Sound.h
@@ -6,10 +6,11 @@
#include <memory>
#include "api/Resource.h"
+#include "api/baseResource.h"
namespace crepe {
-class Sound {
+class Sound : public api::BaseResource{
public:
/**
* \brief Pause this sample
diff --git a/src/crepe/facade/Texture.cpp b/src/crepe/facade/Texture.cpp
index c24312a..220ef2e 100644
--- a/src/crepe/facade/Texture.cpp
+++ b/src/crepe/facade/Texture.cpp
@@ -25,7 +25,11 @@ Texture::~Texture(){
}
}
void Texture::load(std::unique_ptr<api::Resource> res) {
+ dbg_trace();
SdlContext& ctx = SdlContext::get_instance();
m_texture = ctx.setTextureFromPath(res->canonical());
}
+SDL_Texture* Texture::get_texture() const{
+ return m_texture;
+}
diff --git a/src/crepe/facade/Texture.h b/src/crepe/facade/Texture.h
index 3677f6e..a5fcca9 100644
--- a/src/crepe/facade/Texture.h
+++ b/src/crepe/facade/Texture.h
@@ -1,24 +1,28 @@
#pragma once
+#include "api/baseResource.h"
+#include "facade/SdlContext.h"
#include "api/Resource.h"
#include <SDL2/SDL_render.h>
#include <memory>
-
namespace crepe {
-class Texture {
+class Texture : public api::BaseResource{
public:
Texture(const char * src);
Texture(std::unique_ptr<api::Resource> res);
~Texture();
+ SDL_Texture* get_texture() const;
private:
void load(std::unique_ptr<api::Resource> res);
private:
SDL_Texture* m_texture;
+
+ friend class SdlContext;
};
} // namespace crepe