jak-project/game/system/newpad.h

89 lines
2.2 KiB
C
Raw Normal View History

2021-08-14 16:00:50 -04:00
#pragma once
/*!
* @file newpad.h
* PC-port specific cpad implementation on the C kernel. Monitors button inputs.
* Actual input detection is done through window events and is gfx pipeline-dependent.
*/
/* NOTE ABOUT KEY VALUES!
* I am using the renderer-dependent key value macros here (at least for now). This means that the
* button mapping may be renderer-dependent. When changing renderers, make sure to backup the
* original button mapping or something so that the user can reset it afterwards. Eventually we
* should fix this (or maybe it's not even a problem).
*/
#include <unordered_map>
2021-08-15 22:50:36 -04:00
#include "common/common_types.h"
2021-08-14 16:00:50 -04:00
namespace Pad {
2021-08-14 16:05:38 -04:00
static constexpr int CONTROLLER_COUNT = 2; // support 2 controllers.
2021-08-14 16:00:50 -04:00
// mirrors goal enum pad-buttons. used as indices to an array!
enum class Button {
Select = 0,
L3 = 1,
R3 = 2,
Start = 3,
Up = 4,
Right = 5,
Down = 6,
Left = 7,
L2 = 8,
R2 = 9,
L1 = 10,
R1 = 11,
Triangle = 12,
Circle = 13,
X = 14,
Square = 15,
Max = 16,
// aliases
Ecks = X,
Cross = X,
O = Circle
};
struct MappingInfo {
2021-08-15 22:50:36 -04:00
bool debug = true; // debug mode
bool buffer_mode = true; // use buffered inputs
2021-08-14 16:00:50 -04:00
int pad_mapping[CONTROLLER_COUNT][(int)Pad::Button::Max]; // controller button mapping
// TODO complex button mapping & key macros (e.g. shift+x for l2+r2 press etc.)
};
// key-down status of any detected key.
extern std::unordered_map<int, int> g_key_status;
// key-down status of any detected key. this is buffered for the remainder of a frame.
extern std::unordered_map<int, int> g_buffered_key_status;
void OnKeyPress(int key);
void OnKeyRelease(int key);
void ForceClearKeys();
void ClearKeys();
void DefaultMapping(MappingInfo& mapping);
int IsPressed(MappingInfo& mapping, Button button, int pad);
void MapButton(MappingInfo& mapping, Button button, int pad, int key);
2021-08-16 09:57:15 -04:00
// this enum is also in pc-pad-utils.gc
enum class InputModeStatus { Disabled, Enabled, Canceled };
extern MappingInfo g_input_mode_mapping;
void EnterInputMode();
void ExitInputMode(bool);
2021-08-15 22:50:36 -04:00
u64 input_mode_get();
u64 input_mode_get_key();
u64 input_mode_get_index();
2021-08-15 22:50:36 -04:00
void initialize();
void update_gamepads();
2021-08-14 16:00:50 -04:00
} // namespace Pad