v2
This commit is contained in:
59
include/assets.hpp
Normal file
59
include/assets.hpp
Normal file
@@ -0,0 +1,59 @@
|
||||
#ifndef ASSETS_HPP
|
||||
#define ASSETS_HPP
|
||||
|
||||
#include <SDL3/SDL.h>
|
||||
#include <SDL3_image/SDL_image.h>
|
||||
#include <unordered_map>
|
||||
#include <string>
|
||||
|
||||
// Structs
|
||||
struct Rect {
|
||||
int x;
|
||||
int y;
|
||||
int width;
|
||||
int height;
|
||||
|
||||
Rect(int x = 0, int y = 0, int width = 0, int height = 0)
|
||||
: x(x), y(y), width(width), height(height) {}
|
||||
Rect(const SDL_Rect& rect)
|
||||
: x(rect.x), y(rect.y), width(rect.w), height(rect.h) {}
|
||||
};
|
||||
|
||||
struct Tile {
|
||||
Rect srcRect;
|
||||
std::string assetName;
|
||||
};
|
||||
|
||||
// Classes
|
||||
class AssetManager {
|
||||
public:
|
||||
AssetManager();
|
||||
~AssetManager();
|
||||
|
||||
void load(const std::string& name, const std::string& filePath);
|
||||
SDL_Surface* getAsset(const std::string& name) const;
|
||||
void unloadAsset(const std::string& name);
|
||||
void clearAssets();
|
||||
|
||||
private:
|
||||
std::unordered_map<std::string, SDL_Surface*> assets;
|
||||
};
|
||||
|
||||
struct TileMap {
|
||||
public:
|
||||
TileMap(AssetManager& assetManager);
|
||||
~TileMap();
|
||||
|
||||
void addTile(const std::string& name, const Tile& tile);
|
||||
Tile getTile(const std::string& name) const;
|
||||
SDL_Surface* getTileAsset(const std::string& name) const;
|
||||
Rect getTileRect(const std::string& name) const;
|
||||
void removeTile(const std::string& name);
|
||||
void clear();
|
||||
|
||||
private:
|
||||
std::unordered_map<std::string, Tile> tiles;
|
||||
AssetManager& assetManager;
|
||||
};
|
||||
|
||||
#endif
|
@@ -1,30 +0,0 @@
|
||||
#include "input.h"
|
||||
#include "text.h"
|
||||
#include "sprite.h"
|
||||
#include "vector.h"
|
||||
#include <SDL.h>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include "sound.h"
|
||||
|
||||
class Engine
|
||||
{
|
||||
private:
|
||||
const char* ctitle;
|
||||
int frameStart = 0;
|
||||
bool soundInitialized = false;
|
||||
|
||||
public:
|
||||
Input input;
|
||||
int targetFrameRate = 60;
|
||||
SDL_Window *window;
|
||||
SDL_Renderer *renderer;
|
||||
|
||||
Engine(std::string title, int width, int height);
|
||||
void initSound();
|
||||
void clear(SDL_Color color);
|
||||
void startFrame();
|
||||
void render();
|
||||
void update();
|
||||
~Engine();
|
||||
};
|
50
include/engine.hpp
Normal file
50
include/engine.hpp
Normal file
@@ -0,0 +1,50 @@
|
||||
#ifndef RENDER_HPP
|
||||
#define RENDER_HPP
|
||||
|
||||
// Include necessary headers
|
||||
#include "assets.hpp"
|
||||
#include "input.hpp"
|
||||
#include <SDL3/SDL.h>
|
||||
|
||||
// Structs
|
||||
struct Color {
|
||||
Uint8 r;
|
||||
Uint8 g;
|
||||
Uint8 b;
|
||||
Uint8 a;
|
||||
|
||||
Color(Uint8 r = 0, Uint8 g = 0, Uint8 b = 0, Uint8 a = 255) : r(r), g(g), b(b), a(a) {}
|
||||
};
|
||||
|
||||
// Classes
|
||||
class Engine {
|
||||
public:
|
||||
Engine(const char* windowTitle, int windowWidth, int windowHeight, int windowFlags);
|
||||
Engine(const char* windowTitle, int windowWidth, int windowHeight)
|
||||
: Engine(windowTitle, windowWidth, windowHeight, 0) {}
|
||||
~Engine();
|
||||
|
||||
void targetFPS(int fps);
|
||||
void startFrame();
|
||||
void clearScreen(const Color& color);
|
||||
void draw(SDL_Surface* surface, Rect destRect);
|
||||
void draw(SDL_Surface* surface, Rect srcRect, Rect destRect);
|
||||
void draw(Tile tile, Rect destRect);
|
||||
void draw(SDL_Surface* surface, Vector2 pos) { draw(surface, Rect(pos.x, pos.y, surface->w, surface->h)); }
|
||||
void draw(SDL_Surface* surface, Rect srcRect, Vector2 pos) { draw(surface, srcRect, Rect(pos.x, pos.y, srcRect.width, srcRect.height)); }
|
||||
void draw(Tile tile, Vector2 pos) { draw(tile, Rect(pos.x, pos.y, tile.srcRect.width, tile.srcRect.height)); }
|
||||
void present();
|
||||
|
||||
Input input; // Input handler
|
||||
AssetManager assets; // Asset manager
|
||||
|
||||
private:
|
||||
SDL_Window* window;
|
||||
SDL_Renderer* renderer;
|
||||
int targetFPSValue = 60; // Target frames per second
|
||||
Uint64 frameStartTime = 0; // Start time of the current frame
|
||||
Uint64 frameEndTime = 0; // End time of the current frame
|
||||
Uint64 frameDuration = 0; // Duration of the current frame in milliseconds
|
||||
};
|
||||
|
||||
#endif
|
@@ -1,61 +0,0 @@
|
||||
#include <SDL.h>
|
||||
#include <map>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
enum CBUTTONS
|
||||
{
|
||||
DPAD_UP = SDL_CONTROLLER_BUTTON_DPAD_UP,
|
||||
DPAD_DOWN = SDL_CONTROLLER_BUTTON_DPAD_DOWN,
|
||||
DPAD_LEFT = SDL_CONTROLLER_BUTTON_DPAD_LEFT,
|
||||
DPAD_RIGHT = SDL_CONTROLLER_BUTTON_DPAD_RIGHT,
|
||||
A = SDL_CONTROLLER_BUTTON_A,
|
||||
B = SDL_CONTROLLER_BUTTON_B,
|
||||
X = SDL_CONTROLLER_BUTTON_X,
|
||||
Y = SDL_CONTROLLER_BUTTON_Y,
|
||||
BACK = SDL_CONTROLLER_BUTTON_BACK,
|
||||
GUIDE = SDL_CONTROLLER_BUTTON_GUIDE,
|
||||
START = SDL_CONTROLLER_BUTTON_START,
|
||||
LEFTSTICK = SDL_CONTROLLER_BUTTON_LEFTSTICK,
|
||||
RIGHTSTICK = SDL_CONTROLLER_BUTTON_RIGHTSTICK,
|
||||
LEFTSHOULDER = SDL_CONTROLLER_BUTTON_LEFTSHOULDER,
|
||||
RIGHTSHOULDER = SDL_CONTROLLER_BUTTON_RIGHTSHOULDER
|
||||
};
|
||||
|
||||
struct Controller
|
||||
{
|
||||
SDL_GameController* controller;
|
||||
std::string name;
|
||||
std::map<Uint8, bool> buttons;
|
||||
Sint16 leftStickX = 0;
|
||||
Sint16 leftStickY = 0;
|
||||
Sint16 rightStickX = 0;
|
||||
Sint16 rightStickY = 0;
|
||||
Sint16 leftTrigger = 0;
|
||||
Sint16 rightTrigger = 0;
|
||||
};
|
||||
|
||||
struct Mouse
|
||||
{
|
||||
int x;
|
||||
int y;
|
||||
int wheel;
|
||||
std::map<int, bool> buttons;
|
||||
};
|
||||
|
||||
class Input
|
||||
{
|
||||
private:
|
||||
SDL_Event event;
|
||||
|
||||
public:
|
||||
bool exit;
|
||||
std::map<int, Controller> controllers;
|
||||
std::map<SDL_Keycode, bool> activeKeys;
|
||||
Mouse mouse;
|
||||
|
||||
Input();
|
||||
void update();
|
||||
bool keysPressed(std::vector<SDL_Keycode> keys);
|
||||
bool controllerPressed(std::vector<Uint8> buttons, int controller = 0);
|
||||
};
|
45
include/input.hpp
Normal file
45
include/input.hpp
Normal file
@@ -0,0 +1,45 @@
|
||||
#ifndef INPUT_HPP
|
||||
#define INPUT_HPP
|
||||
|
||||
#include <SDL3/SDL.h>
|
||||
#include <unordered_map>
|
||||
#include <vector>
|
||||
|
||||
// Structs
|
||||
struct Vector2 {
|
||||
int x;
|
||||
int y;
|
||||
Vector2(int x = 0, int y = 0) : x(x), y(y) {}
|
||||
};
|
||||
|
||||
// Classes
|
||||
class Input {
|
||||
public:
|
||||
Input();
|
||||
~Input();
|
||||
|
||||
void handleEvents();
|
||||
bool quitRequested() const;
|
||||
bool isKeyPressed(SDL_Scancode key);
|
||||
bool isKeyPressed(std::vector<SDL_Scancode> keys);
|
||||
bool hasKeyBeenPressed(SDL_Scancode key);
|
||||
bool hasKeyBeenPressed(std::vector<SDL_Scancode> keys);
|
||||
bool isMouseButtonPressed(Uint8 button);
|
||||
bool isMouseButtonPressed(std::vector<Uint8> buttons);
|
||||
bool hasMouseButtonBeenPressed(Uint8 button);
|
||||
bool hasMouseButtonBeenPressed(std::vector<Uint8> buttons);
|
||||
Vector2 getMousePosition() const;
|
||||
|
||||
|
||||
private:
|
||||
SDL_Event event;
|
||||
std::unordered_map<SDL_Scancode, bool> keyStates;
|
||||
std::unordered_map<SDL_Scancode, bool> keyFallingEdgeStates;
|
||||
std::unordered_map<Uint8, bool> mouseButtonStates;
|
||||
std::unordered_map<Uint8, bool> mouseButtonFallingEdgeStates;
|
||||
Vector2 mousePosition;
|
||||
bool quitRequestedFlag = false;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@@ -1,26 +0,0 @@
|
||||
#include <SDL_mixer.h>
|
||||
|
||||
class Music
|
||||
{
|
||||
private:
|
||||
Mix_Music* music;
|
||||
public:
|
||||
Music(const char* path);
|
||||
void play(int loops = -1);
|
||||
void pause();
|
||||
void stop();
|
||||
void resume();
|
||||
void setVolume(int volume);
|
||||
~Music();
|
||||
};
|
||||
|
||||
class Effect
|
||||
{
|
||||
private:
|
||||
Mix_Chunk* effect;
|
||||
public:
|
||||
Effect(const char* path);
|
||||
void setVolume(int volume);
|
||||
void play(int loops = 0, int channel = -1);
|
||||
~Effect();
|
||||
};
|
@@ -1,68 +0,0 @@
|
||||
#include <SDL.h>
|
||||
#include <map>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include "vector.h"
|
||||
#pragma once
|
||||
|
||||
class Sprite
|
||||
{
|
||||
private:
|
||||
std::map<std::string, SDL_Rect> frames;
|
||||
SDL_Surface* surface;
|
||||
SDL_Texture* Texture;
|
||||
int_vec2 size;
|
||||
|
||||
public:
|
||||
SDL_Rect dstrect;
|
||||
int_vec2 scale = { 1, 1 };
|
||||
double angle = 0;
|
||||
Sprite(SDL_Renderer* renderer, SDL_Surface* surface);
|
||||
void draw(SDL_Renderer* renderer, std::string frame, bool autoRect = true, bool flip = false);
|
||||
void addFrame(std::string name, SDL_Rect rect);
|
||||
void move(int_vec2 position);
|
||||
void setPos(int_vec2 position);
|
||||
int_vec2 getSize(std::string frame);
|
||||
void autorect(std::string frame);
|
||||
~Sprite();
|
||||
};
|
||||
|
||||
class Animation
|
||||
{
|
||||
private:
|
||||
std::vector<std::string> frames;
|
||||
Sprite* sprite;
|
||||
int frameDuration = 0;
|
||||
int frameCounter = 0;
|
||||
std::string currentFrameName;
|
||||
|
||||
public:
|
||||
bool end = false;
|
||||
int frameDirection = 1;
|
||||
int frameIndex = 0;
|
||||
bool loop = true;
|
||||
bool pingpong = false;
|
||||
Animation(std::map<std::string, SDL_Rect> frames, Sprite* sprite, int frameDuration);
|
||||
void update();
|
||||
void draw(SDL_Renderer* renderer, bool autoRect = true, bool flip = false);
|
||||
void reset();
|
||||
};
|
||||
|
||||
class AnimationManager
|
||||
{
|
||||
private:
|
||||
std::map<std::string, Animation*> animations;
|
||||
std::map<std::string, bool> flip;
|
||||
std::map<std::string, bool> autoRect;
|
||||
std::string currentAnimation;
|
||||
bool playing = false;
|
||||
Sprite* sprite;
|
||||
|
||||
public:
|
||||
AnimationManager(Sprite* sprite);
|
||||
void addAnimation(std::string name, std::map<std::string, SDL_Rect> animation, int frameDuration = 10, bool flip = false, bool autoRect = true, bool loop = true, bool pingpong = false);
|
||||
void setAnimation(std::string name);
|
||||
void playAnimation(std::string name);
|
||||
void update();
|
||||
void draw(SDL_Renderer* renderer);
|
||||
};
|
@@ -1,17 +0,0 @@
|
||||
#include <SDL.h>
|
||||
#include <SDL_ttf.h>
|
||||
#include <string>
|
||||
|
||||
class Text
|
||||
{
|
||||
private:
|
||||
SDL_Surface* surface;
|
||||
SDL_Texture* texture;
|
||||
TTF_Font* font;
|
||||
SDL_Color color;
|
||||
SDL_Rect rect;
|
||||
|
||||
public:
|
||||
Text(TTF_Font* font, SDL_Color color);
|
||||
void draw(SDL_Renderer* renderer, std::string text, int x, int y);
|
||||
};
|
@@ -1,58 +0,0 @@
|
||||
// prevent multiple inclusion
|
||||
#pragma once
|
||||
|
||||
// class for 2D float vector
|
||||
class float_vec2
|
||||
{
|
||||
// public members
|
||||
public:
|
||||
// x and y coordinates
|
||||
float x, y;
|
||||
// operator functions
|
||||
float_vec2 operator+(float_vec2 vec)
|
||||
{
|
||||
return { x + vec.x, y + vec.y };
|
||||
}
|
||||
float_vec2 operator*(float v)
|
||||
{
|
||||
return { x * v, y * v };
|
||||
}
|
||||
float_vec2 operator*(float_vec2 vec)
|
||||
{
|
||||
return { x * vec.x, y * vec.y };
|
||||
}
|
||||
float_vec2 operator-(float_vec2 vec)
|
||||
{
|
||||
return { x - vec.x, y - vec.y };
|
||||
}
|
||||
float_vec2 operator-(float v)
|
||||
{
|
||||
return { x - v, y - v };
|
||||
}
|
||||
};
|
||||
|
||||
// class for 2D integer vector
|
||||
class int_vec2
|
||||
{
|
||||
// public members
|
||||
public:
|
||||
// x and y coordinates
|
||||
int x, y;
|
||||
// operator functions
|
||||
int_vec2 operator+(int_vec2 vec)
|
||||
{
|
||||
return { x + vec.x, y + vec.y };
|
||||
}
|
||||
int_vec2 operator*(int v)
|
||||
{
|
||||
return { x * v, y * v };
|
||||
}
|
||||
int_vec2 operator*(int_vec2 vec)
|
||||
{
|
||||
return { x * vec.x, y * vec.y };
|
||||
}
|
||||
int_vec2 operator-(int_vec2 vec)
|
||||
{
|
||||
return { x - vec.x, y - vec.y };
|
||||
}
|
||||
};
|
Reference in New Issue
Block a user