BLT/include/blt/window/window.h

82 lines
2.6 KiB
C
Raw Normal View History

2023-01-16 14:08:28 -05:00
/*
* Created by Brett on 16/01/23.
* Licensed under GNU General Public License V3.0
* See LICENSE file for license detail
*/
#ifndef BLT_WINDOW_H
#define BLT_WINDOW_H
#include <functional>
#include <vector>
#ifndef BLT_MAP_FUNC
#include <unordered_map>
#define BLT_MAP_FUNC std::unordered_map
#endif
#define KEY_MAP BLT_MAP_FUNC<int, bool>
2023-01-16 14:08:28 -05:00
namespace blt {
2023-01-17 11:09:25 -05:00
class window;
#define WINDOW_MAP BLT_MAP_FUNC<window*, window*>
extern WINDOW_MAP activeWindows;
2023-01-16 14:08:28 -05:00
class window {
protected:
bool m_windowOpen = true;
int m_width, m_height;
2023-01-17 11:09:25 -05:00
std::vector<std::function<void(window*)>> renderFunctions{};
std::vector<std::function<void(window*, int, bool)>> keyListeners{};
std::vector<std::function<void(window*, int, bool)>> mouseListeners{};
KEY_MAP keysDown{};
KEY_MAP mouseDown{};
2023-01-16 14:08:28 -05:00
public:
2023-01-17 11:09:25 -05:00
window() {
activeWindows.insert({this, this});
}
window(int width, int height) {
2023-01-17 11:09:25 -05:00
activeWindows.insert({this, this});
m_width = width;
m_height = height;
}
2023-01-16 14:08:28 -05:00
virtual void createWindow() = 0;
virtual void startMainLoop() = 0;
2023-01-16 14:08:28 -05:00
virtual void destroyWindow() = 0;
2023-01-17 11:09:25 -05:00
virtual ~window() {
activeWindows.insert({this, nullptr});
};
2023-01-16 14:08:28 -05:00
virtual inline bool setResizeable(bool resizeEnabled) = 0;
virtual inline bool setWindowSize(int width, int height) = 0;
[[nodiscard]] inline int getWidth() const {return m_width;};
[[nodiscard]] inline int getHeight() const {return m_height;};
2023-01-16 14:08:28 -05:00
[[nodiscard]] virtual inline bool isWindowOpen() const {return m_windowOpen;};
virtual inline void closeWindow(){
m_windowOpen = false;
}
2023-01-17 11:09:25 -05:00
virtual inline void registerLoopFunction(std::function<void(window*)> func) {
renderFunctions.push_back(func);
}
virtual inline bool isKeyDown(int key) const { return keysDown.at(key); }
virtual inline bool isMouseDown(int button) const {return mouseDown.at(button);};
2023-01-16 14:08:28 -05:00
// Function signature is window pointer to this, key press, pressed/released (true/false)
2023-01-17 10:35:01 -05:00
virtual inline void registerKeyListener(const std::function<void(window*, int, bool)>& listener) {
keyListeners.push_back(listener);
}
2023-01-16 14:08:28 -05:00
// Function signature is window pointer to this, mouse button press, pressed/released (true/false)
2023-01-17 10:35:01 -05:00
virtual inline void registerMouseListener(const std::function<void(window*, int, bool)>& listener) {
mouseListeners.push_back(listener);
}
2023-01-16 14:08:28 -05:00
};
}
#endif