mirror of
https://github.com/DrBeef/Raze.git
synced 2024-12-15 15:11:01 +00:00
2997bb6292
Obviously the existing menu implementation from Duke Nukem needs to be tossed out at some point, but at least the functionality is there again.
178 lines
4.2 KiB
C++
178 lines
4.2 KiB
C++
#pragma once
|
|
|
|
#include <stdint.h>
|
|
#include "tarray.h"
|
|
#include "zstring.h"
|
|
#include "name.h"
|
|
|
|
// Order is that of EDuke32 by necessity because it exposes the key binds to scripting by index instead of by name.
|
|
enum GameFunction_t
|
|
{
|
|
gamefunc_Move_Forward,
|
|
gamefunc_Move_Backward,
|
|
gamefunc_Turn_Left,
|
|
gamefunc_Turn_Right,
|
|
gamefunc_Strafe,
|
|
gamefunc_Fire,
|
|
gamefunc_Open,
|
|
gamefunc_Run,
|
|
gamefunc_Alt_Fire, // Duke3D, Blood
|
|
gamefunc_Jump,
|
|
gamefunc_Crouch,
|
|
gamefunc_Look_Up,
|
|
gamefunc_Look_Down,
|
|
gamefunc_Look_Left,
|
|
gamefunc_Look_Right,
|
|
gamefunc_Strafe_Left,
|
|
gamefunc_Strafe_Right,
|
|
gamefunc_Aim_Up,
|
|
gamefunc_Aim_Down,
|
|
gamefunc_Weapon_1,
|
|
gamefunc_Weapon_2,
|
|
gamefunc_Weapon_3,
|
|
gamefunc_Weapon_4,
|
|
gamefunc_Weapon_5,
|
|
gamefunc_Weapon_6,
|
|
gamefunc_Weapon_7,
|
|
gamefunc_Weapon_8,
|
|
gamefunc_Weapon_9,
|
|
gamefunc_Weapon_10,
|
|
gamefunc_Inventory,
|
|
gamefunc_Inventory_Use = gamefunc_Inventory,
|
|
gamefunc_Inventory_Left,
|
|
gamefunc_Inventory_Right,
|
|
gamefunc_Holo_Duke, // Duke3D, RR
|
|
gamefunc_Jetpack,
|
|
gamefunc_JumpBoots = gamefunc_Jetpack,
|
|
gamefunc_NightVision,
|
|
gamefunc_Night_Vision = gamefunc_NightVision,
|
|
gamefunc_MedKit,
|
|
gamefunc_Med_Kit = gamefunc_MedKit,
|
|
gamefunc_TurnAround,
|
|
gamefunc_SendMessage,
|
|
gamefunc_Map,
|
|
gamefunc_Map_Toggle = gamefunc_Map,
|
|
gamefunc_Shrink_Screen,
|
|
gamefunc_Enlarge_Screen,
|
|
gamefunc_Center_View,
|
|
gamefunc_Holster_Weapon,
|
|
gamefunc_Show_Opponents_Weapon,
|
|
gamefunc_Map_Follow_Mode,
|
|
gamefunc_See_Coop_View,
|
|
gamefunc_See_Co_Op_View = gamefunc_See_Coop_View,
|
|
gamefunc_Mouse_Aiming,
|
|
gamefunc_Toggle_Crosshair,
|
|
gamefunc_Steroids,
|
|
gamefunc_Quick_Kick,
|
|
gamefunc_Next_Weapon,
|
|
gamefunc_Previous_Weapon,
|
|
gamefunc_Show_Console,
|
|
gamefunc_Show_DukeMatch_Scores,
|
|
gamefunc_Dpad_Select,
|
|
gamefunc_Dpad_Aiming,
|
|
gamefunc_AutoRun,
|
|
gamefunc_Last_Weapon,
|
|
gamefunc_Quick_Save,
|
|
gamefunc_Quick_Load,
|
|
gamefunc_Alt_Weapon,
|
|
gamefunc_Third_Person_View,
|
|
gamefunc_See_Chase_View = gamefunc_Third_Person_View, // this was added by Blood
|
|
gamefunc_Toggle_Crouch,
|
|
gamefunc_BeastVision,
|
|
gamefunc_CrystalBall,
|
|
gamefunc_ProximityBombs,
|
|
gamefunc_RemoteBombs,
|
|
gamefunc_Smoke_Bomb, // and these by ShadowWarrior (todo: There's quite a bit of potential for consolidation here - is it worth it?)
|
|
gamefunc_Gas_Bomb,
|
|
gamefunc_Flash_Bomb,
|
|
gamefunc_Caltrops,
|
|
|
|
NUMGAMEFUNCTIONS
|
|
};
|
|
|
|
|
|
// Actions
|
|
struct FButtonStatus
|
|
{
|
|
enum { MAX_KEYS = 6 }; // Maximum number of keys that can press this button
|
|
|
|
uint16_t Keys[MAX_KEYS];
|
|
bool bDown; // Button is down right now
|
|
bool bWentDown; // Button went down this tic
|
|
bool bWentUp; // Button went up this tic
|
|
|
|
bool PressKey (int keynum); // Returns true if this key caused the button to be pressed.
|
|
bool ReleaseKey (int keynum); // Returns true if this key is no longer pressed.
|
|
void ResetTriggers () { bWentDown = bWentUp = false; }
|
|
void Reset () { bDown = bWentDown = bWentUp = false; }
|
|
};
|
|
|
|
|
|
class ButtonMap
|
|
{
|
|
|
|
FButtonStatus Buttons[NUMGAMEFUNCTIONS];
|
|
FString NumToName[NUMGAMEFUNCTIONS]; // The internal name of the button
|
|
FString NumToAlias[NUMGAMEFUNCTIONS]; // The display name which can be altered by scripts.
|
|
TMap<FName, int> NameToNum;
|
|
|
|
public:
|
|
ButtonMap();
|
|
void SetGameAliases();
|
|
|
|
constexpr int NumButtons() const
|
|
{
|
|
return NUMGAMEFUNCTIONS;
|
|
}
|
|
|
|
int FindButtonIndex(const char* func) const;
|
|
|
|
FButtonStatus *FindButton(const char *func)
|
|
{
|
|
int index = FindButtonIndex(func);
|
|
return index > -1? &Buttons[index] : nullptr;
|
|
}
|
|
|
|
const char* GetButtonName(int32_t func) const
|
|
{
|
|
if ((unsigned)func >= (unsigned)NumButtons())
|
|
return nullptr;
|
|
return NumToName[func];
|
|
}
|
|
|
|
const char* GetButtonAlias(int32_t func) const
|
|
{
|
|
if ((unsigned)func >= (unsigned)NumButtons())
|
|
return nullptr;
|
|
return NumToAlias[func];
|
|
}
|
|
|
|
void SetButtonAlias(int num, const char* text);
|
|
void ClearButtonAlias(int num);
|
|
void ResetButtonTriggers (); // Call ResetTriggers for all buttons
|
|
void ResetButtonStates (); // Same as above, but also clear bDown
|
|
int ListActionCommands(const char* pattern);
|
|
|
|
|
|
bool ButtonDown(int x) const
|
|
{
|
|
return Buttons[x].bDown;
|
|
}
|
|
|
|
bool ButtonPressed(int x) const
|
|
{
|
|
return Buttons[x].bWentDown;
|
|
}
|
|
|
|
bool ButtonReleased(int x) const
|
|
{
|
|
return Buttons[x].bWentUp;
|
|
}
|
|
|
|
void ClearButton(int x)
|
|
{
|
|
Buttons[x].Reset();
|
|
}
|
|
};
|
|
|
|
extern ButtonMap buttonMap;
|