cmdfx 0.2.1
Lightweight game engine for your terminal
Loading...
Searching...
No Matches
sprites.hpp
Go to the documentation of this file.
1
11#pragma once
12
13extern "C" {
14 #include "cmdfx/core/sprites.h"
15}
16
18#include <string>
19#include <vector>
20#include <memory>
21
22namespace CmdFX {
23
32 class Sprite final {
33 private:
34 CmdFX_Sprite* sprite;
35
36 public:
37 Sprite(CmdFX_Sprite* sprite) : sprite(sprite) {}
38 Sprite(char** text, char*** ansi, int z) {
39 sprite = Sprite_create(text, ansi, z);
40 }
41 Sprite(std::vector<std::string> text, std::vector<std::vector<std::string>> ansi, int z) {
42 sprite = Sprite_create(to2DArray(text), to3DArray(ansi), z);
43 }
44
45 ~Sprite() {
46 if (sprite) { Sprite_free(sprite); }
47 }
48
53 CmdFX_Sprite* getSprite() { return sprite; }
54
55 int getX() const {
56 return sprite->x;
57 }
58
59 int getY() const {
60 return sprite->y;
61 }
62
63 int getWidth() const {
64 return sprite->width;
65 }
66
67 int getHeight() const {
68 return sprite->height;
69 }
70
71 int getZ() const {
72 return sprite->z;
73 }
74
75 int draw(int x, int y) {
76 return Sprite_draw(x, y, sprite);
77 }
78
79 void remove() {
80 Sprite_remove(sprite);
81 }
82
87 std::vector<std::string> getData() {
88 std::vector<std::string> text;
89 for (int i = 0; i < sprite->height; i++) {
90 text.push_back(std::string(sprite->data[i]));
91 }
92 return text;
93 }
94
95 void setData(std::vector<std::string> text) {
96 char** data = to2DArray(text);
97 Sprite_setData(sprite, data);
98 }
99
100 void setData(char** text) {
101 Sprite_setData(sprite, text);
102 }
103
108 std::vector<std::vector<std::string>> getAnsi() {
109 std::vector<std::vector<std::string>> ansi;
110 for (int i = 0; i < sprite->height; i++) {
111 std::vector<std::string> row;
112 for (int j = 0; j < sprite->width; j++) {
113 row.push_back(std::string(sprite->ansi[i][j]));
114 }
115 ansi.push_back(row);
116 }
117 return ansi;
118 }
119
120 void setChar(int x, int y, char c) {
121 Sprite_setChar(sprite, x, y, c);
122 }
123
124 int fillChar(int x, int y, int width, int height, char c) {
125 return Sprite_fillChar(sprite, x, y, width, height, c);
126 }
127
128 int fillCharEmpty(int x, int y, int width, int height, char c) {
129 return Sprite_fillCharEmpty(sprite, x, y, width, height, c);
130 }
131
132 int fillCharAll(char c) {
133 return Sprite_fillCharAll(sprite, c);
134 }
135
136 int fillCharAllEmpty(char c) {
137 return Sprite_fillCharAllEmpty(sprite, c);
138 }
139
140 int setAnsi(int x, int y, char* ansi) {
141 return Sprite_setAnsi(sprite, x, y, ansi);
142 }
143
144 int appendAnsi(int x, int y, char* ansi) {
145 return Sprite_appendAnsi(sprite, x, y, ansi);
146 }
147
148 int fillAnsi(int x, int y, char* ansi, int width, int height) {
149 return Sprite_fillAnsi(sprite, x, y, ansi, width, height);
150 }
151
152 int setAnsiAll(char* ansi) {
153 return Sprite_setAnsiAll(sprite, ansi);
154 }
155
156 int appendAnsiAll(char* ansi) {
157 return Sprite_appendAnsiAll(sprite, ansi);
158 }
159
160 int resize(int width, int height) {
161 return Sprite_resize(sprite, width, height);
162 }
163
164 int resizeWithPadding(int width, int height, char padding) {
165 return Sprite_resizeWithPadding(sprite, width, height, padding);
166 }
167
168 int center() {
169 return Sprite_center(sprite);
170 }
171
172 int resizeAndCenter(int width, int height) {
173 return Sprite_resizeAndCenter(sprite, width, height);
174 }
175
176 void moveTo(int x, int y) {
177 Sprite_moveTo(sprite, x, y);
178 }
179
180 void moveBy(int dx, int dy) {
181 Sprite_moveBy(sprite, dx, dy);
182 }
183
184 std::vector<std::unique_ptr<Sprite>> getCollidingSprites() {
185 std::vector<std::unique_ptr<Sprite>> collisions;
186 CmdFX_Sprite** collisionSprites = Sprite_getCollidingSprites(sprite);
187 for (int i = 0; collisionSprites[i] != nullptr; i++) {
188 collisions.push_back(std::make_unique<Sprite>(collisionSprites[i]));
189 }
190 return collisions;
191 }
192
193 bool isCollidingWith(std::unique_ptr<Sprite> other) {
194 return Sprite_isColliding(sprite, other->getSprite());
195 }
196
197 bool isOnTop(int x, int y) {
198 return Sprite_isOnTop(sprite, x, y);
199 }
200
201 bool isOnBottom(int x, int y) {
202 return Sprite_isOnBottom(sprite, x, y);
203 }
204
205 int setForeground(int x, int y, int rgb) {
206 return Sprite_setForeground(sprite, x, y, rgb);
207 }
208
209 int setForeground(int rgb) {
210 return Sprite_setForegroundAll(sprite, rgb);
211 }
212
213 int setForeground256(int color) {
214 return Sprite_setForegroundAll256(sprite, color);
215 }
216
217 int setBackground(int x, int y, int rgb) {
218 return Sprite_setBackground(sprite, x, y, rgb);
219 }
220
221 int rotate(double radians) {
222 return Sprite_rotate(sprite, radians);
223 }
224
225 double getRotationAngle() {
226 return Sprite_getRotationAngle(sprite);
227 }
228
229 int hFlip() {
230 return Sprite_hFlip(sprite);
231 }
232
233 int vFlip() {
234 return Sprite_vFlip(sprite);
235 }
236
237 int scale(double scale) {
238 return Sprite_scale(sprite, scale);
239 }
240
241 int transpose() {
242 return Sprite_transpose(sprite);
243 }
244 };
245
246 namespace Canvas {
247
252 std::vector<std::unique_ptr<Sprite>> getDrawnSprites() {
253 std::vector<std::unique_ptr<Sprite>> sprites;
254 CmdFX_Sprite** drawnSprites = Canvas_getDrawnSprites();
255 for (int i = 0; i < Canvas_getDrawnSpritesCount(); i++) {
256 sprites.push_back(std::make_unique<Sprite>(drawnSprites[i]));
257 }
258
259 return sprites;
260 }
261
268 std::unique_ptr<Sprite> getSpriteAt(int x, int y) {
269 CmdFX_Sprite* sprite = Canvas_getSpriteAt(x, y);
270 if (sprite) {
271 return std::make_unique<Sprite>(sprite);
272 }
273
274 return nullptr;
275 }
276
277 }
278
279}
C++ Extensions for the Builder API.
CmdFX_Sprite * getSprite()
Get the Sprite object associated with this class.
Definition sprites.hpp:53
std::vector< std::string > getData()
Get the data of a sprite as a 1D vector of strings.
Definition sprites.hpp:87
std::vector< std::vector< std::string > > getAnsi()
Get the ANSI data of a sprite as a 2D vector of strings.
Definition sprites.hpp:108
C++ wrapper for the CmdFX canvas.
Definition canvas.hpp:23
std::vector< std::unique_ptr< Sprite > > getDrawnSprites()
Gets all of the drawn sprites.
Definition sprites.hpp:252
std::unique_ptr< Sprite > getSpriteAt(int x, int y)
Get the Sprite at a specific position.
Definition sprites.hpp:268
Primary namespace for CmdFX.
Definition cmdfx.hpp:22
char ** to2DArray(std::vector< std::string > string)
Converts a 1D vector of strings to a 2D array of characters.
Definition builder.hpp:39
char *** to3DArray(std::vector< std::vector< std::string > > string)
Converts a 2D vector of strings to a 3D array of characters.
Definition builder.hpp:55
Sprites API for CmdFX.
CmdFX_Sprite ** Sprite_getCollidingSprites(CmdFX_Sprite *sprite)
Gets the sprites that are colliding with the given sprite.
void Sprite_remove(CmdFX_Sprite *sprite)
Removes a sprite from the terminal, making it no longer visble.
int Sprite_setAnsi(CmdFX_Sprite *sprite, int x, int y, char *ansi)
Sets the ANSI code at the given position in the sprite.
int Sprite_fillCharAllEmpty(CmdFX_Sprite *sprite, char c)
Sets the character at all positions in the sprite where there isn't a character.
int Sprite_setBackground(CmdFX_Sprite *sprite, int x, int y, int rgb)
Sets the background color of the sprite at the given position.
int Sprite_fillAnsi(CmdFX_Sprite *sprite, int x, int y, char *ansi, int width, int height)
Fills positions in the sprite with an ANSI code.
int Sprite_vFlip(CmdFX_Sprite *sprite)
Flips the sprite vertically.
int Sprite_rotate(CmdFX_Sprite *sprite, double radians)
Rotates the sprite by the given angle.
int Sprite_isOnBottom(CmdFX_Sprite *sprite, int x, int y)
Gets whether the sprite is the bottom-most sprite at the given position.
int Sprite_isColliding(CmdFX_Sprite *sprite1, CmdFX_Sprite *sprite2)
Checks if two sprites are colliding.
int Sprite_setAnsiAll(CmdFX_Sprite *sprite, char *ansi)
Sets the character at all positions in the sprite.
void Sprite_moveTo(CmdFX_Sprite *sprite, int x, int y)
Moves a sprite to the given position.
CmdFX_Sprite * Canvas_getSpriteAt(int x, int y)
Gets a sprite at the given position with the highest Z-index.
int Sprite_fillCharAll(CmdFX_Sprite *sprite, char c)
Sets the character at all positions in the sprite.
int Sprite_scale(CmdFX_Sprite *sprite, double scale)
Scales the sprite by the given factor.
CmdFX_Sprite ** Canvas_getDrawnSprites()
Gets the sprites that have been drawn to the terminal.
int Sprite_setData(CmdFX_Sprite *sprite, char **data)
Sets the text data for the sprite.
int Sprite_appendAnsiAll(CmdFX_Sprite *sprite, char *ansi)
Appends an ANSI code to all positions in the sprite.
void Sprite_free(CmdFX_Sprite *sprite)
Frees the memory allocated for a sprite.
double Sprite_getRotationAngle(CmdFX_Sprite *sprite)
Gets the rotation angle of the sprite.
void Sprite_moveBy(CmdFX_Sprite *sprite, int dx, int dy)
Moves a sprite by the given amount.
int Sprite_center(CmdFX_Sprite *sprite)
Centers the sprite on the terminal.
int Sprite_setForeground(CmdFX_Sprite *sprite, int x, int y, int rgb)
Sets the foreground color of the sprite at the given position.
int Sprite_transpose(CmdFX_Sprite *sprite)
Transposes the sprite.
int Sprite_fillCharEmpty(CmdFX_Sprite *sprite, int x, int y, int width, int height, char c)
Fills positions in the sprite where there isn't a character.
int Sprite_resizeAndCenter(CmdFX_Sprite *sprite, int width, int height)
Resizes and centers the sprite on the terminal.
int Sprite_setChar(CmdFX_Sprite *sprite, int x, int y, char c)
Sets the character at the given position in the sprite.
CmdFX_Sprite * Sprite_create(char **text, char ***ansi, int z)
Creates a new sprite.
int Sprite_draw(int x, int y, CmdFX_Sprite *sprite)
Draws a sprite to the terminal.
int Sprite_appendAnsi(CmdFX_Sprite *sprite, int x, int y, char *ansi)
Appends an ANSI code to the given position in the sprite.
int Sprite_fillChar(CmdFX_Sprite *sprite, int x, int y, int width, int height, char c)
Fills positions in the sprite.
struct CmdFX_Sprite CmdFX_Sprite
Represents a sprite that can be drawn to the terminal.
int Sprite_resize(CmdFX_Sprite *sprite, int width, int height)
Resizes the sprite to the given dimensions.
int Canvas_getDrawnSpritesCount()
Gets the number of sprites that have been drawn to the terminal.
int Sprite_setForegroundAll256(CmdFX_Sprite *sprite, int color)
Sets the foreground color of the sprite at the given position using 256-bit color codes.
int Sprite_hFlip(CmdFX_Sprite *sprite)
Flips the sprite horizontally.
int Sprite_isOnTop(CmdFX_Sprite *sprite, int x, int y)
Gets whether the sprite is the top-most sprite at the given position.
int Sprite_setForegroundAll(CmdFX_Sprite *sprite, int rgb)
Sets the foreground color of the sprite at the given position.
int Sprite_resizeWithPadding(CmdFX_Sprite *sprite, int width, int height, char padding)
Resizes the sprite to the given dimensions.
Represents a sprite that can be drawn to the terminal.
Definition sprites.h:30
int x
The X position of the sprite.
Definition sprites.h:34
int y
The Y position of the sprite.
Definition sprites.h:38