input prpg

This commit is contained in:
2025-09-20 12:47:47 -05:00
parent 1d16c0ae68
commit a896b772fb
5 changed files with 256 additions and 0 deletions

11
src/input/CMakeLists.txt Normal file
View File

@@ -0,0 +1,11 @@
# Copyright (c) 2025 Dominic Masters
#
# This software is released under the MIT License.
# https://opensource.org/licenses/MIT
# Sources
target_sources(${DAWN_TARGET_NAME}
PRIVATE
Input.cpp
InputButton.cpp
)

61
src/input/Input.cpp Normal file
View File

@@ -0,0 +1,61 @@
// Copyright (c) 2025 Dominic Masters
//
// This software is released under the MIT License.
// https://opensource.org/licenses/MIT
#include "Input.hpp"
using namespace Dawn;
Input::Input(void) :
states({}),
buttons({})
{
}
float_t Input::getCurrent(const InputBind &bind) const {
auto it = states.find(bind);
if(it != states.end()) {
return it->second.current;
}
return 0.0f;
}
float_t Input::getPrevious(const InputBind &bind) const {
auto it = states.find(bind);
if(it != states.end()) {
return it->second.previous;
}
return 0.0f;
}
float_t Input::getWhen(const InputBind &bind) const {
auto it = states.find(bind);
if(it != states.end()) {
return it->second.when;
}
return 0.0f;
}
bool_t Input::isDown(const InputBind &bind) const {
return this->getCurrent(bind) != 0.0f;
}
bool_t Input::isUp(const InputBind &bind) const {
return this->getCurrent(bind) == 0.0f;
}
bool_t Input::wasPressed(const InputBind &bind) const {
return this->getPrevious(bind) == 0.0f && this->getCurrent(bind) != 0.0f;
}
bool_t Input::wasReleased(const InputBind &bind) const {
return this->getPrevious(bind) != 0.0f && this->getCurrent(bind) == 0.0f;
}
void Input::update(void) {
}
Input::~Input(void) {
}

102
src/input/Input.hpp Normal file
View File

@@ -0,0 +1,102 @@
// Copyright (c) 2025 Dominic Masters
//
// This software is released under the MIT License.
// https://opensource.org/licenses/MIT
#pragma once
#include "InputButton.hpp"
namespace Dawn {
enum class InputBind {
UP = "UP",
DOWN = "DOWN",
LEFT = "LEFT",
RIGHT = "RIGHT",
ACCEPT = "ACCEPT",
CANCEL = "CANCEL"
};
struct InputBindState {
float_t current;
float_t previous;
float_t when;
};
struct Input {
private:
std::map<InputBind, InputBindState> states;
std::vector<InputButton> buttons;
public:
/**
* Initializes the input manager.
*/
Input(void);
/**
* Returns the current state of the input bind.
*
* @param bind The input bind to check.
* @return The current state of the input bind.
*/
float_t getCurrent(const InputBind &bind) const;
/**
* Returns the previous state of the input bind.
*
* @param bind The input bind to check.
* @return The previous state of the input bind.
*/
float_t getPrevious(const InputBind &bind) const;
/**
* Returns the time when the input last changed states.
*
* @param bind The input bind to check.
* @return The time when the input last changed states.
*/
float_t getWhen(const InputBind &bind) const;
/**
* Returns true if the input bind is currently down.
*
* @param bind The input bind to check.
* @return True if the input bind is currently down.
*/
bool_t isDown(const InputBind &bind) const;
/**
* Returns true if the input bind is currently up.
*
* @param bind The input bind to check.
* @return True if the input bind is currently up.
*/
bool_t isUp(const InputBind &bind) const;
/**
* Returns true if the input bind was pressed this frame.
*
* @param bind The input bind to check.
* @return True if the input bind was pressed this frame.
*/
bool_t wasPressed(const InputBind &bind) const;
/**
* Returns true if the input bind was released this frame.
*
* @param bind The input bind to check.
* @return True if the input bind was released this frame.
*/
bool_t wasReleased(const InputBind &bind) const;
/**
* Updates the input manager.
*/
void update(void);
/**
* Cleans up the input manager.
*/
~Input(void);
};
}

20
src/input/InputButton.cpp Normal file
View File

@@ -0,0 +1,20 @@
// Copyright (c) 2025 Dominic Masters
//
// This software is released under the MIT License.
// https://opensource.org/licenses/MIT
#include "InputButton.hpp"
using namespace Dawn;
InputButton::InputButton(
const std::string &name,
const InputButtonType buttonType
) :
name(name),
buttonType(buttonType),
data(data),
command("")
{
}

62
src/input/InputButton.hpp Normal file
View File

@@ -0,0 +1,62 @@
// Copyright (c) 2025 Dominic Masters
//
// This software is released under the MIT License.
// https://opensource.org/licenses/MIT
#pragma once
#include "dusk.hpp"
namespace Dawn {
enum class InputButtonType {
BUTTON,
AXIS
};
struct InputButtonData {
};
struct InputButton {
private:
const std::string name;
const InputButtonType buttonType;
const InputButtonData data;
std::string command;
public:
/**
* Constructor for an InputButton. An input button is basically any
* physical input on any device, such as a keyboard key, mouse button,
* gamepad button, or gamepad axis.
*
* @param name Human name for the input, used by the console for binding.
* @param buttonType The type of input button.
* @param data Data used to initialize the button, usually a scancode.
*/
InputButton(
const std::string &name,
const InputButtonType buttonType,
const InputButtonData data
);
/**
* Returns the human name of the input button.
*
* @return The human name of the input button.
*/
std::string getName(void) const;
/**
* Returns the type of the input button.
*
* @return The type of the input button.
*/
InputButtonType getType(void) const;
/**
* Command executed by the input button when pressed.
*
* @return The command that is executed when the input button is pressed.
*/
std::string getCommand(void) const;
};
}