mirror of
https://github.com/bailwillharr/engine.git
synced 2024-09-21 04:51:18 +00:00
begin adding SceneManager
This commit is contained in:
parent
fd6c99ea12
commit
45a8c7be3c
@ -12,8 +12,10 @@ project(engine LANGUAGES CXX
|
|||||||
set(SRC_FILES
|
set(SRC_FILES
|
||||||
"src/engine.cpp"
|
"src/engine.cpp"
|
||||||
"src/window.cpp"
|
"src/window.cpp"
|
||||||
"src/input.cpp"
|
"src/input_manager.cpp"
|
||||||
|
"src/scene_manager.cpp"
|
||||||
"src/gfx_device_vulkan.cpp"
|
"src/gfx_device_vulkan.cpp"
|
||||||
|
|
||||||
"src/util/files.cpp"
|
"src/util/files.cpp"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -26,7 +28,8 @@ set(INCLUDE_FILES
|
|||||||
"include/window.hpp"
|
"include/window.hpp"
|
||||||
"include/inputs/keyboard.hpp"
|
"include/inputs/keyboard.hpp"
|
||||||
"include/inputs/mouse.hpp"
|
"include/inputs/mouse.hpp"
|
||||||
"include/input.hpp"
|
"include/input_manager.hpp"
|
||||||
|
"include/scene_manager.hpp"
|
||||||
"include/gfx.hpp"
|
"include/gfx.hpp"
|
||||||
"include/gfx_device.hpp"
|
"include/gfx_device.hpp"
|
||||||
"include/util/files.hpp"
|
"include/util/files.hpp"
|
||||||
|
@ -1,31 +1,37 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
namespace engine {
|
namespace engine {
|
||||||
|
|
||||||
class Window;
|
class Window;
|
||||||
class GFXDevice;
|
class GFXDevice;
|
||||||
class Input;
|
class InputManager;
|
||||||
|
class SceneManager;
|
||||||
|
|
||||||
class Application {
|
class Application {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Application(const char* appName, const char* appVersion);
|
Application(const char* appName, const char* appVersion);
|
||||||
|
~Application();
|
||||||
Application(const Application&) = delete;
|
Application(const Application&) = delete;
|
||||||
Application& operator=(const Application&) = delete;
|
Application& operator=(const Application&) = delete;
|
||||||
|
|
||||||
~Application();
|
/* methods */
|
||||||
|
|
||||||
void gameLoop();
|
void gameLoop();
|
||||||
|
|
||||||
Window* window() { return m_win; }
|
/* getters */
|
||||||
GFXDevice* gfx() { return m_gfx; }
|
Window* window() { return m_window.get(); }
|
||||||
Input* input() { return m_input; }
|
GFXDevice* gfx() { return m_gfx.get(); }
|
||||||
|
InputManager* inputManager() { return m_inputManager.get(); }
|
||||||
|
SceneManager* sceneManager() { return m_sceneManager.get(); }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Window* m_win;
|
std::unique_ptr<Window> m_window;
|
||||||
GFXDevice* m_gfx;
|
std::unique_ptr<GFXDevice> m_gfx;
|
||||||
Input* m_input;
|
std::unique_ptr<InputManager> m_inputManager;
|
||||||
|
std::unique_ptr<SceneManager> m_sceneManager;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
@ -21,15 +21,15 @@ namespace engine {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// This class should be used to get platform/input-device independent input
|
// This class should be used to get platform/input-device independent input
|
||||||
class ENGINE_API Input {
|
class ENGINE_API InputManager {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
// requires a window reference to get input from
|
// requires a window reference to get input from
|
||||||
Input(const Window& win);
|
InputManager(const Window* win);
|
||||||
Input(const Input&) = delete;
|
InputManager(const InputManager&) = delete;
|
||||||
Input& operator=(const Input&) = delete;
|
InputManager& operator=(const InputManager&) = delete;
|
||||||
~Input();
|
~InputManager();
|
||||||
|
|
||||||
// Add a mouse input
|
// Add a mouse input
|
||||||
void addInputButton(const std::string& name, inputs::MouseButton button);
|
void addInputButton(const std::string& name, inputs::MouseButton button);
|
||||||
@ -68,7 +68,7 @@ namespace engine {
|
|||||||
int low;
|
int low;
|
||||||
};
|
};
|
||||||
|
|
||||||
const Window& m_win;
|
const Window* const m_win;
|
||||||
|
|
||||||
std::vector<struct ButtonEntry> m_buttonEntries;
|
std::vector<struct ButtonEntry> m_buttonEntries;
|
||||||
std::vector<struct AxisEntry> m_axisEntries;
|
std::vector<struct AxisEntry> m_axisEntries;
|
17
include/scene_manager.hpp
Normal file
17
include/scene_manager.hpp
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
namespace engine {
|
||||||
|
|
||||||
|
class SceneManager {
|
||||||
|
|
||||||
|
public:
|
||||||
|
SceneManager();
|
||||||
|
~SceneManager();
|
||||||
|
SceneManager(const SceneManager&) = delete;
|
||||||
|
SceneManager& operator=(const SceneManager&) = delete;
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
@ -4,7 +4,8 @@
|
|||||||
|
|
||||||
#include "window.hpp"
|
#include "window.hpp"
|
||||||
#include "gfx_device.hpp"
|
#include "gfx_device.hpp"
|
||||||
#include "input.hpp"
|
#include "input_manager.hpp"
|
||||||
|
#include "scene_manager.hpp"
|
||||||
|
|
||||||
// To allow the FPS-limiter to put the thread to sleep
|
// To allow the FPS-limiter to put the thread to sleep
|
||||||
#include <thread>
|
#include <thread>
|
||||||
@ -13,17 +14,13 @@ namespace engine {
|
|||||||
|
|
||||||
Application::Application(const char* appName, const char* appVersion)
|
Application::Application(const char* appName, const char* appVersion)
|
||||||
{
|
{
|
||||||
m_win = new Window(appName, true, true);
|
m_window = std::make_unique<Window>(appName, true, true);
|
||||||
m_gfx = new GFXDevice(appName, appVersion, m_win->getHandle());
|
m_gfx = std::make_unique<GFXDevice>(appName, appVersion, m_window->getHandle());
|
||||||
m_input = new Input(*m_win);
|
m_inputManager = std::make_unique<InputManager>(window());
|
||||||
|
m_sceneManager = std::make_unique<SceneManager>();
|
||||||
}
|
}
|
||||||
|
|
||||||
Application::~Application()
|
Application::~Application() {}
|
||||||
{
|
|
||||||
delete m_input;
|
|
||||||
delete m_gfx;
|
|
||||||
delete m_win;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Application::gameLoop()
|
void Application::gameLoop()
|
||||||
{
|
{
|
||||||
@ -35,7 +32,7 @@ namespace engine {
|
|||||||
auto endFrame = beginFrame + FRAMETIME_LIMIT;
|
auto endFrame = beginFrame + FRAMETIME_LIMIT;
|
||||||
|
|
||||||
// single-threaded game loop
|
// single-threaded game loop
|
||||||
while (m_win->isRunning()) {
|
while (m_window->isRunning()) {
|
||||||
|
|
||||||
/* logic */
|
/* logic */
|
||||||
|
|
||||||
@ -43,7 +40,7 @@ namespace engine {
|
|||||||
m_gfx->renderFrame();
|
m_gfx->renderFrame();
|
||||||
|
|
||||||
/* poll events */
|
/* poll events */
|
||||||
m_win->getInputAndEvents();
|
m_window->getInputAndEvents();
|
||||||
|
|
||||||
/* fps limiter */
|
/* fps limiter */
|
||||||
std::this_thread::sleep_until(endFrame);
|
std::this_thread::sleep_until(endFrame);
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#include "input.hpp"
|
#include "input_manager.hpp"
|
||||||
|
|
||||||
#include "window.hpp"
|
#include "window.hpp"
|
||||||
|
|
||||||
@ -7,30 +7,30 @@
|
|||||||
|
|
||||||
namespace engine {
|
namespace engine {
|
||||||
|
|
||||||
Input::Input(const Window& win) : m_win(win)
|
InputManager::InputManager(const Window* win) : m_win(win)
|
||||||
{
|
{
|
||||||
m_enabledDevices.fill(true);
|
m_enabledDevices.fill(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
Input::~Input()
|
InputManager::~InputManager()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
// private methods
|
// private methods
|
||||||
|
|
||||||
float Input::getDeviceAxis(enum InputDevice device, int axis) const
|
float InputManager::getDeviceAxis(enum InputDevice device, int axis) const
|
||||||
{
|
{
|
||||||
switch (device) {
|
switch (device) {
|
||||||
case InputDevice::MOUSE:
|
case InputDevice::MOUSE:
|
||||||
switch (static_cast<inputs::MouseAxis>(axis)) {
|
switch (static_cast<inputs::MouseAxis>(axis)) {
|
||||||
case inputs::MouseAxis::X:
|
case inputs::MouseAxis::X:
|
||||||
return static_cast<float>(m_win.getMouseDX());
|
return static_cast<float>(m_win->getMouseDX());
|
||||||
case inputs::MouseAxis::Y:
|
case inputs::MouseAxis::Y:
|
||||||
return static_cast<float>(m_win.getMouseDY());
|
return static_cast<float>(m_win->getMouseDY());
|
||||||
case inputs::MouseAxis::X_SCR:
|
case inputs::MouseAxis::X_SCR:
|
||||||
return m_win.getMouseScrollX();
|
return m_win->getMouseScrollX();
|
||||||
case inputs::MouseAxis::Y_SCR:
|
case inputs::MouseAxis::Y_SCR:
|
||||||
return m_win.getMouseScrollY();
|
return m_win->getMouseScrollY();
|
||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -43,13 +43,13 @@ namespace engine {
|
|||||||
throw std::runtime_error("Error getting device axis");
|
throw std::runtime_error("Error getting device axis");
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Input::getDeviceButton(enum InputDevice device, int button) const
|
bool InputManager::getDeviceButton(enum InputDevice device, int button) const
|
||||||
{
|
{
|
||||||
switch (device) {
|
switch (device) {
|
||||||
case InputDevice::MOUSE:
|
case InputDevice::MOUSE:
|
||||||
return m_win.getButton(static_cast<inputs::MouseButton>(button));
|
return m_win->getButton(static_cast<inputs::MouseButton>(button));
|
||||||
case InputDevice::KEYBOARD:
|
case InputDevice::KEYBOARD:
|
||||||
return m_win.getKey(static_cast<inputs::Key>(button));
|
return m_win->getKey(static_cast<inputs::Key>(button));
|
||||||
case InputDevice::CONTROLLER:
|
case InputDevice::CONTROLLER:
|
||||||
break;
|
break;
|
||||||
default: break;
|
default: break;
|
||||||
@ -57,13 +57,13 @@ namespace engine {
|
|||||||
throw std::runtime_error("Error getting device button");
|
throw std::runtime_error("Error getting device button");
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Input::getDeviceButtonDown(enum InputDevice device, int button) const
|
bool InputManager::getDeviceButtonDown(enum InputDevice device, int button) const
|
||||||
{
|
{
|
||||||
switch (device) {
|
switch (device) {
|
||||||
case InputDevice::MOUSE:
|
case InputDevice::MOUSE:
|
||||||
return m_win.getButtonPress(static_cast<enum inputs::MouseButton>(button));
|
return m_win->getButtonPress(static_cast<enum inputs::MouseButton>(button));
|
||||||
case InputDevice::KEYBOARD:
|
case InputDevice::KEYBOARD:
|
||||||
return m_win.getKeyPress(static_cast<enum inputs::Key>(button));
|
return m_win->getKeyPress(static_cast<enum inputs::Key>(button));
|
||||||
case InputDevice::CONTROLLER:
|
case InputDevice::CONTROLLER:
|
||||||
break;
|
break;
|
||||||
default: break;
|
default: break;
|
||||||
@ -71,13 +71,13 @@ namespace engine {
|
|||||||
throw std::runtime_error("Error getting device button");
|
throw std::runtime_error("Error getting device button");
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Input::getDeviceButtonUp(enum InputDevice device, int button) const
|
bool InputManager::getDeviceButtonUp(enum InputDevice device, int button) const
|
||||||
{
|
{
|
||||||
switch (device) {
|
switch (device) {
|
||||||
case InputDevice::MOUSE:
|
case InputDevice::MOUSE:
|
||||||
return m_win.getButtonRelease(static_cast<enum inputs::MouseButton>(button));
|
return m_win->getButtonRelease(static_cast<enum inputs::MouseButton>(button));
|
||||||
case InputDevice::KEYBOARD:
|
case InputDevice::KEYBOARD:
|
||||||
return m_win.getKeyRelease(static_cast<enum inputs::Key>(button));
|
return m_win->getKeyRelease(static_cast<enum inputs::Key>(button));
|
||||||
case InputDevice::CONTROLLER:
|
case InputDevice::CONTROLLER:
|
||||||
break;
|
break;
|
||||||
default: break;
|
default: break;
|
||||||
@ -85,7 +85,7 @@ namespace engine {
|
|||||||
throw std::runtime_error("Error getting device button");
|
throw std::runtime_error("Error getting device button");
|
||||||
}
|
}
|
||||||
|
|
||||||
float Input::getButtonAxis(enum InputDevice device, int high, int low) const
|
float InputManager::getButtonAxis(enum InputDevice device, int high, int low) const
|
||||||
{
|
{
|
||||||
float value = 0.0f;
|
float value = 0.0f;
|
||||||
if (getDeviceButton(device, high)) value += 1.0f;
|
if (getDeviceButton(device, high)) value += 1.0f;
|
||||||
@ -97,17 +97,17 @@ namespace engine {
|
|||||||
|
|
||||||
// public methods
|
// public methods
|
||||||
|
|
||||||
void Input::addInputButton(const std::string& name, InputDevice device, int button)
|
void InputManager::addInputButton(const std::string& name, InputDevice device, int button)
|
||||||
{
|
{
|
||||||
m_buttonEntries.push_back({ name, device, button });
|
m_buttonEntries.push_back({ name, device, button });
|
||||||
}
|
}
|
||||||
|
|
||||||
void Input::addInputAxis(const std::string& name, InputDevice device, int axis)
|
void InputManager::addInputAxis(const std::string& name, InputDevice device, int axis)
|
||||||
{
|
{
|
||||||
m_axisEntries.push_back({ name, device, axis, false, 0, 0 });
|
m_axisEntries.push_back({ name, device, axis, false, 0, 0 });
|
||||||
}
|
}
|
||||||
|
|
||||||
void Input::addInputButtonAsAxis(const std::string& name, InputDevice device, int high, int low)
|
void InputManager::addInputButtonAsAxis(const std::string& name, InputDevice device, int high, int low)
|
||||||
{
|
{
|
||||||
m_axisEntries.push_back({ name, device, 0, true, high, low });
|
m_axisEntries.push_back({ name, device, 0, true, high, low });
|
||||||
}
|
}
|
||||||
@ -115,56 +115,56 @@ namespace engine {
|
|||||||
// OVERLOADS:
|
// OVERLOADS:
|
||||||
|
|
||||||
// Add a mouse input
|
// Add a mouse input
|
||||||
void Input::addInputButton(const std::string& name, inputs::MouseButton button)
|
void InputManager::addInputButton(const std::string& name, inputs::MouseButton button)
|
||||||
{
|
{
|
||||||
addInputButton(name, InputDevice::MOUSE, static_cast<int>(button));
|
addInputButton(name, InputDevice::MOUSE, static_cast<int>(button));
|
||||||
}
|
}
|
||||||
|
|
||||||
void Input::addInputAxis(const std::string& name, inputs::MouseAxis axis)
|
void InputManager::addInputAxis(const std::string& name, inputs::MouseAxis axis)
|
||||||
{
|
{
|
||||||
addInputAxis(name, InputDevice::MOUSE, static_cast<int>(axis));
|
addInputAxis(name, InputDevice::MOUSE, static_cast<int>(axis));
|
||||||
}
|
}
|
||||||
|
|
||||||
void Input::addInputButtonAsAxis(const std::string& name, inputs::MouseButton high, inputs::MouseButton low)
|
void InputManager::addInputButtonAsAxis(const std::string& name, inputs::MouseButton high, inputs::MouseButton low)
|
||||||
{
|
{
|
||||||
addInputButtonAsAxis(name, InputDevice::MOUSE, static_cast<int>(high), static_cast<int>(low));
|
addInputButtonAsAxis(name, InputDevice::MOUSE, static_cast<int>(high), static_cast<int>(low));
|
||||||
}
|
}
|
||||||
|
|
||||||
void Input::addInputButton(const std::string& name, inputs::Key button)
|
void InputManager::addInputButton(const std::string& name, inputs::Key button)
|
||||||
{
|
{
|
||||||
addInputButton(name, InputDevice::KEYBOARD, static_cast<int>(button));
|
addInputButton(name, InputDevice::KEYBOARD, static_cast<int>(button));
|
||||||
}
|
}
|
||||||
|
|
||||||
void Input::addInputButtonAsAxis(const std::string& name, inputs::Key high, inputs::Key low)
|
void InputManager::addInputButtonAsAxis(const std::string& name, inputs::Key high, inputs::Key low)
|
||||||
{
|
{
|
||||||
addInputButtonAsAxis(name, InputDevice::KEYBOARD, static_cast<int>(high), static_cast<int>(low));
|
addInputButtonAsAxis(name, InputDevice::KEYBOARD, static_cast<int>(high), static_cast<int>(low));
|
||||||
}
|
}
|
||||||
|
|
||||||
void Input::delInputButton(int index)
|
void InputManager::delInputButton(int index)
|
||||||
{
|
{
|
||||||
std::vector<struct ButtonEntry>::iterator it = m_buttonEntries.begin();
|
std::vector<struct ButtonEntry>::iterator it = m_buttonEntries.begin();
|
||||||
std::advance(it, index);
|
std::advance(it, index);
|
||||||
m_buttonEntries.erase(it);
|
m_buttonEntries.erase(it);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Input::delInputAxis(int index)
|
void InputManager::delInputAxis(int index)
|
||||||
{
|
{
|
||||||
std::vector<struct AxisEntry>::iterator it = m_axisEntries.begin();
|
std::vector<struct AxisEntry>::iterator it = m_axisEntries.begin();
|
||||||
std::advance(it, index);
|
std::advance(it, index);
|
||||||
m_axisEntries.erase(it);
|
m_axisEntries.erase(it);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Input::setDeviceActive(enum InputDevice device, bool active)
|
void InputManager::setDeviceActive(enum InputDevice device, bool active)
|
||||||
{
|
{
|
||||||
m_enabledDevices[static_cast<int>(device)] = active;
|
m_enabledDevices[static_cast<int>(device)] = active;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Input::getDeviceActive(enum InputDevice device) const
|
bool InputManager::getDeviceActive(enum InputDevice device) const
|
||||||
{
|
{
|
||||||
return m_enabledDevices[static_cast<int>(device)];
|
return m_enabledDevices[static_cast<int>(device)];
|
||||||
}
|
}
|
||||||
|
|
||||||
float Input::getAxis(const std::string& axisName) const
|
float InputManager::getAxis(const std::string& axisName) const
|
||||||
{
|
{
|
||||||
for (const AxisEntry& e : m_axisEntries) {
|
for (const AxisEntry& e : m_axisEntries) {
|
||||||
if (e.name == axisName) {
|
if (e.name == axisName) {
|
||||||
@ -182,7 +182,7 @@ namespace engine {
|
|||||||
// throw std::runtime_error("Unable to find mapping in input table");
|
// throw std::runtime_error("Unable to find mapping in input table");
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Input::getButton(const std::string& buttonName) const
|
bool InputManager::getButton(const std::string& buttonName) const
|
||||||
{
|
{
|
||||||
bool isDown = false;
|
bool isDown = false;
|
||||||
|
|
||||||
@ -199,7 +199,7 @@ namespace engine {
|
|||||||
return isDown;
|
return isDown;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Input::getButtonPress(const std::string& buttonName) const
|
bool InputManager::getButtonPress(const std::string& buttonName) const
|
||||||
{
|
{
|
||||||
bool isPressed = false;
|
bool isPressed = false;
|
||||||
|
|
||||||
@ -216,7 +216,7 @@ namespace engine {
|
|||||||
return isPressed;
|
return isPressed;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Input::getButtonRelease(const std::string& buttonName) const
|
bool InputManager::getButtonRelease(const std::string& buttonName) const
|
||||||
{
|
{
|
||||||
bool isReleased = false;
|
bool isReleased = false;
|
||||||
|
|
15
src/scene_manager.cpp
Normal file
15
src/scene_manager.cpp
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
#include "scene_manager.hpp"
|
||||||
|
|
||||||
|
namespace engine {
|
||||||
|
|
||||||
|
SceneManager::SceneManager()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
SceneManager::~SceneManager()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user