blob: 3396697f0c6b5fa32b6833c3a4a55d83de8daa7c (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
|
#pragma once
#include <SDL2/SDL_keycode.h>
#include <SDL2/SDL_render.h>
#include <SDL2/SDL_video.h>
#include "../api/Sprite.h"
#include "../api/Transform.h"
#include "api/Camera.h"
typedef SDL_Keycode CREPE_KEYCODES;
//FIXME: this needs to be removed
const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;
namespace crepe {
class Texture;
class LoopManager;
/**
* \class SDLContext
* \brief Facade for the SDL library
*
* 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:
/**
* \brief Gets the singleton instance of SDLContext.
* \return Reference to the SDLContext instance.
*/
static SDLContext & get_instance();
/**
* \brief Deleted copy constructor.
*/
SDLContext(const SDLContext &) = delete;
/**
* \brief Deleted move constructor.
*/
SDLContext(SDLContext &&) = delete;
/**
* \brief Deleted copy assignment operator.
* \return Reference to the SDLContext instance.
*/
SDLContext & operator=(const SDLContext &) = delete;
/**
* \brief Deleted move assignment operator.
* \return Reference to the SDLContext instance.
*/
SDLContext & operator=(SDLContext &&) = delete;
private:
friend class LoopManager;
/**
* \brief Handles SDL events such as window close and input.
* \param running Reference to a boolean flag that controls the main loop.
*/
void handle_events(bool & running);
private:
friend class AnimatorSystem;
/**
* \brief Gets the current SDL ticks since the program started.
* \return Current ticks in milliseconds as a constant uint64_t.
*/
const uint64_t get_ticks() const;
private:
/**
* \brief Constructs an SDLContext instance.
* Initializes SDL, creates a window and renderer.
*/
SDLContext();
/**
* \brief Destroys the SDLContext instance.
* Cleans up SDL resources, including the window and renderer.
*/
virtual ~SDLContext();
private:
friend class Texture;
friend class Animator;
/**
* \brief Loads a texture from a file path.
* \param path Path to the image file.
* \return Pointer to the created SDL_Texture.
*/
SDL_Texture * texture_from_path(const char * path) const;
/**
* \brief Gets the width of a texture.
* \param texture Reference to the Texture object.
* \return Width of the texture as an integer.
*/
int get_width(const Texture & ) const ;
/**
* \brief Gets the height of a texture.
* \param texture Reference to the Texture object.
* \return Height of the texture as an integer.
*/
int get_height(const Texture &) const ;
private:
friend class RenderSystem;
/**
* \brief Draws a sprite to the screen using the specified transform and camera.
* \param sprite Reference to the Sprite to draw.
* \param transform Reference to the Transform for positioning.
* \param camera Reference to the Camera for view adjustments.
*/
void draw(const Sprite & sprite, const Transform & transform,
const Camera & camera) const;
/**
* \brief Clears the screen, preparing for a new frame.
*/
void clear_screen() const ;
/**
* \brief Presents the rendered frame to the screen.
*/
void present_screen() const ;
/**
* \brief Sets the current camera for rendering.
* \param camera Reference to the Camera object.
*/
void camera(const Camera & camera);
private:
//! sdl window
SDL_Window * game_window = nullptr;
//! renderer for the crepe engine
SDL_Renderer * game_renderer = nullptr;
//! viewport for the camera window
SDL_Rect viewport = {0, 0, 640, 480};
};
} // namespace crepe
|