aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/crepe/api/Animator.cpp6
-rw-r--r--src/crepe/api/Animator.h8
-rw-r--r--src/crepe/api/Config.h2
-rw-r--r--src/crepe/api/LoopManager.h7
-rw-r--r--src/crepe/api/LoopTimer.h2
-rw-r--r--src/crepe/facade/SDLContext.cpp30
-rw-r--r--src/crepe/facade/SDLContext.h12
-rw-r--r--src/crepe/facade/Texture.h3
-rw-r--r--src/crepe/system/AnimatorSystem.cpp2
9 files changed, 26 insertions, 46 deletions
diff --git a/src/crepe/api/Animator.cpp b/src/crepe/api/Animator.cpp
index 644363e..4ce4bf0 100644
--- a/src/crepe/api/Animator.cpp
+++ b/src/crepe/api/Animator.cpp
@@ -8,10 +8,10 @@
using namespace crepe;
Animator::Animator(game_object_id_t id, Sprite & spritesheet, const ivec2 & single_frame_size,
- const uvec2 & max_cell_size, const Animator::Data & data)
+ const uvec2 & grid_size, const Animator::Data & data)
: Component(id),
spritesheet(spritesheet),
- max_cell_size(max_cell_size),
+ grid_size(grid_size),
data(data) {
dbg_trace();
@@ -52,6 +52,6 @@ void Animator::set_anim(int col) {
void Animator::next_anim() {
Animator::Data & ctx = this->data;
- ctx.row = ctx.row++ % this->max_cell_size.x;
+ ctx.row = ctx.row++ % this->grid_size.x;
this->spritesheet.mask.x = ctx.row * this->spritesheet.mask.w;
}
diff --git a/src/crepe/api/Animator.h b/src/crepe/api/Animator.h
index 09f0134..5918800 100644
--- a/src/crepe/api/Animator.h
+++ b/src/crepe/api/Animator.h
@@ -77,14 +77,14 @@ public:
* \param spritesheet the reference to the spritesheet
* \param single_frame_size the width and height in pixels of a single frame inside the
* spritesheet
- * \param max_cell_size the max rows and columns inside the given spritesheet
+ * \param grid_size the max rows and columns inside the given spritesheet
* \param data extra animation data for more control
*
* This constructor sets up the Animator with the given parameters, and initializes the
* animation system.
*/
Animator(game_object_id_t id, Sprite & spritesheet, const ivec2 & single_frame_size,
- const uvec2 & max_cell_size, const Animator::Data & data);
+ const uvec2 & grid_size, const Animator::Data & data);
~Animator(); // dbg_trace
public:
@@ -94,8 +94,8 @@ private:
//! A reference to the Sprite sheet containing.
Sprite & spritesheet;
- //! The maximum number of rows and columns size
- const uvec2 max_cell_size;
+ //! The maximum number of rows and columns inside the spritesheet
+ const uvec2 grid_size;
//! Uses the spritesheet
friend AnimatorSystem;
diff --git a/src/crepe/api/Config.h b/src/crepe/api/Config.h
index 73c9a4e..6472270 100644
--- a/src/crepe/api/Config.h
+++ b/src/crepe/api/Config.h
@@ -26,7 +26,7 @@ struct Config final {
*
* Only messages with equal or higher priority than this value will be logged.
*/
- Log::Level level = Log::Level::TRACE;
+ Log::Level level = Log::Level::INFO;
/**
* \brief Colored log output
*
diff --git a/src/crepe/api/LoopManager.h b/src/crepe/api/LoopManager.h
index bf1a9f9..1bafa56 100644
--- a/src/crepe/api/LoopManager.h
+++ b/src/crepe/api/LoopManager.h
@@ -102,12 +102,9 @@ private:
ResourceManager resource_manager{mediator};
//! Save manager instance
SaveManager save_manager{mediator};
-
+ //! SDLContext instance
SDLContext sdl_context{mediator};
-
- ResourceManager res_man{mediator};
-
- //! Loop timer \todo no more singletons!
+ //! LoopTimer instance
LoopTimer loop_timer{mediator};
private:
diff --git a/src/crepe/api/LoopTimer.h b/src/crepe/api/LoopTimer.h
index 2a0b2a5..0a73a4c 100644
--- a/src/crepe/api/LoopTimer.h
+++ b/src/crepe/api/LoopTimer.h
@@ -5,8 +5,6 @@
namespace crepe {
-class Mediator;
-
class LoopTimer : public Manager {
public:
/**
diff --git a/src/crepe/facade/SDLContext.cpp b/src/crepe/facade/SDLContext.cpp
index 1699b53..1dbd6a5 100644
--- a/src/crepe/facade/SDLContext.cpp
+++ b/src/crepe/facade/SDLContext.cpp
@@ -11,7 +11,6 @@
#include <cstddef>
#include <cstdint>
#include <functional>
-#include <iostream>
#include <memory>
#include <stdexcept>
@@ -20,7 +19,6 @@
#include "../api/Config.h"
#include "../api/Sprite.h"
#include "../util/Log.h"
-#include "manager/Manager.h"
#include "manager/Mediator.h"
#include "SDLContext.h"
@@ -30,9 +28,8 @@
using namespace crepe;
using namespace std;
-SDLContext::SDLContext(Mediator & mediator) : Manager(mediator) {
+SDLContext::SDLContext(Mediator & mediator) {
dbg_trace();
- mediator.sdl_context = *this;
if (SDL_Init(SDL_INIT_VIDEO) != 0) {
throw runtime_error(format("SDLContext: SDL_Init error: {}", SDL_GetError()));
}
@@ -60,6 +57,8 @@ SDLContext::SDLContext(Mediator & mediator) : Manager(mediator) {
if (!(IMG_Init(img_flags) & img_flags)) {
throw runtime_error("SDLContext: SDL_image could not initialize!");
}
+
+ mediator.sdl_context = *this;
}
SDLContext::~SDLContext() {
@@ -219,16 +218,6 @@ void SDLContext::present_screen() {
SDL_RenderPresent(this->game_renderer.get());
}
-SDL_Rect * SDLContext::get_src_rect(const Sprite & sprite) {
- if (sprite.mask.w == 0 && sprite.mask.h == 0) return NULL;
-
- this->mask.x = sprite.mask.x;
- this->mask.y = sprite.mask.y;
- this->mask.w = sprite.mask.w;
- this->mask.h = sprite.mask.h;
- return &this->mask;
-}
-
SDL_FRect SDLContext::get_dst_rect(const DestinationRectangleData & ctx) const {
const Sprite::Data & data = ctx.sprite.data;
@@ -267,7 +256,16 @@ void SDLContext::draw(const RenderContext & ctx) {
= (SDL_RendererFlip) ((SDL_FLIP_HORIZONTAL * data.flip.flip_x)
| (SDL_FLIP_VERTICAL * data.flip.flip_y));
- SDL_Rect * srcrect = this->get_src_rect(ctx.sprite);
+ SDL_Rect srcrect;
+ SDL_Rect * srcrect_ptr = NULL;
+ if (ctx.sprite.mask.w != 0 || ctx.sprite.mask.h != 0) {
+ srcrect.w = ctx.sprite.mask.w;
+ srcrect.h = ctx.sprite.mask.h;
+ srcrect.x = ctx.sprite.mask.x;
+ srcrect.y = ctx.sprite.mask.y;
+ srcrect_ptr = &srcrect;
+ }
+
SDL_FRect dstrect = this->get_dst_rect(SDLContext::DestinationRectangleData{
.sprite = ctx.sprite,
.texture = ctx.texture,
@@ -279,7 +277,7 @@ void SDLContext::draw(const RenderContext & ctx) {
double angle = ctx.angle + data.angle_offset;
this->set_color_texture(ctx.texture, ctx.sprite.data.color);
- SDL_RenderCopyExF(this->game_renderer.get(), ctx.texture.get_img(), srcrect, &dstrect,
+ SDL_RenderCopyExF(this->game_renderer.get(), ctx.texture.get_img(), srcrect_ptr, &dstrect,
angle, NULL, render_flip);
}
diff --git a/src/crepe/facade/SDLContext.h b/src/crepe/facade/SDLContext.h
index 36e6e97..46b779f 100644
--- a/src/crepe/facade/SDLContext.h
+++ b/src/crepe/facade/SDLContext.h
@@ -15,7 +15,6 @@
#include "api/KeyCodes.h"
#include "api/Sprite.h"
#include "api/Transform.h"
-#include "manager/Manager.h"
#include "types.h"
@@ -31,7 +30,7 @@ class Mediator;
* SDLContext is a singleton that handles the SDL window and renderer, provides methods for
* event handling, and rendering to the screen. It is never used directly by the user
*/
-class SDLContext : public Manager {
+class SDLContext {
public:
//! data that the camera component cannot hold
struct CameraValues {
@@ -209,13 +208,6 @@ public:
const vec2 & pos;
const double & img_scale;
};
- /**
- * \brief calculates the sqaure size of the image
- *
- * \param sprite Reference to the sprite to calculate the rectangle
- * \return sdl rectangle to draw a src image
- */
- SDL_Rect * get_src_rect(const Sprite & sprite);
/**
* \brief calculates the sqaure size of the image for destination
@@ -239,8 +231,6 @@ private:
//! renderer for the crepe engine
std::unique_ptr<SDL_Renderer, std::function<void(SDL_Renderer *)>> game_renderer;
- SDL_Rect mask = {};
-
//! black bars rectangle to draw
SDL_FRect black_bars[2] = {};
};
diff --git a/src/crepe/facade/Texture.h b/src/crepe/facade/Texture.h
index 255e14b..cdacac4 100644
--- a/src/crepe/facade/Texture.h
+++ b/src/crepe/facade/Texture.h
@@ -1,8 +1,5 @@
#pragma once
-// FIXME: this header can't be included because this is an API header, and SDL2 development
-// headers won't be bundled with crepe. Why is this facade in the API namespace?
-
#include <SDL2/SDL_render.h>
#include <memory>
diff --git a/src/crepe/system/AnimatorSystem.cpp b/src/crepe/system/AnimatorSystem.cpp
index bb22b62..d61ba35 100644
--- a/src/crepe/system/AnimatorSystem.cpp
+++ b/src/crepe/system/AnimatorSystem.cpp
@@ -23,7 +23,7 @@ void AnimatorSystem::update() {
int last_frame = ctx.row;
- int cycle_end = (ctx.cycle_end == -1) ? a.max_cell_size.x : ctx.cycle_end;
+ int cycle_end = (ctx.cycle_end == -1) ? a.grid_size.x : ctx.cycle_end;
int total_frames = cycle_end - ctx.cycle_start;
int curr_frame = static_cast<int>(elapsed_time / frame_duration) % total_frames;