forked from TerryCavanagh/VVVVVV
-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add support for button glyph display
This adds a function that converts an action (such as interacting in-game) to the corresponding button text ("ENTER", "E") or button glyph (PlayStation triangle, Steam Deck Y, etc). This function currently only gives the existing ENTERs or Es, because I don't know how best to detect controller usage, or whether the game is running on a Steam Deck, or what buttons need to be displayed there. Still, it should now be really easy to adapt the rendering of keyboard keys to consoles, controllers, or rebound keys. To identify the actions that currently need to be displayed, this commit also adds the initial enums for action sets as described by Ethan in a comment in TerryCavanagh#834 (Jan 18, 2022).
- Loading branch information
Showing
13 changed files
with
348 additions
and
46 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,80 @@ | ||
/* For now, this isn't really a foundation for action sets yet; button glyphs | ||
* just need to be able to identify actions that are printed in text like | ||
* "Press ENTER to teleport". Thus, this currently ONLY contains identifiers | ||
* for the actions that button glyphs are needed for. | ||
* | ||
* Based on this comment: | ||
* https://github.com/TerryCavanagh/VVVVVV/issues/834#issuecomment-1015692161 | ||
*/ | ||
|
||
|
||
#ifndef ACTIONSETS_H | ||
#define ACTIONSETS_H | ||
|
||
|
||
#ifdef __cplusplus | ||
extern "C" | ||
{ | ||
#endif | ||
|
||
|
||
/*----------------------------------------* | ||
* List of all action sets (all "states") * | ||
*----------------------------------------*/ | ||
typedef enum | ||
{ | ||
//ActionSet_Global, | ||
//ActionSet_Menu, | ||
ActionSet_InGame | ||
//ActionSet_Editor | ||
} | ||
ActionSet; | ||
|
||
|
||
/*----------------------------------------------------------* | ||
* An enum for each actionset, with the actions in that set * | ||
*----------------------------------------------------------*/ | ||
/* | ||
typedef enum | ||
{ | ||
Action_Global_Mute, | ||
Action_Global_MuteMusic | ||
} | ||
Action_Global; | ||
*/ | ||
|
||
typedef enum | ||
{ | ||
Action_InGame_Interact, | ||
Action_InGame_Map | ||
} | ||
Action_InGame; | ||
|
||
/* | ||
typedef enum | ||
{ | ||
//Action_Editor_PrevTool, | ||
//Action_Editor_NextTool | ||
} | ||
Action_Editor; | ||
*/ | ||
|
||
|
||
/*-----------------------------------------* | ||
* A union to represent any actionset enum * | ||
*-----------------------------------------*/ | ||
typedef union | ||
{ | ||
int intval; | ||
//Action_Global Global; | ||
Action_InGame InGame; | ||
//Action_Editor Editor; | ||
} | ||
Action; | ||
|
||
|
||
#ifdef __cplusplus | ||
} // extern "C" | ||
#endif | ||
|
||
#endif // ACTIONSETS_H |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,139 @@ | ||
#include "ButtonGlyphs.h" | ||
|
||
#include <SDL.h> | ||
|
||
#include "Game.h" | ||
#include "Localization.h" | ||
#include "UTF8.h" | ||
|
||
extern "C" | ||
{ | ||
|
||
typedef enum | ||
{ | ||
GLYPH_NINTENDO_DECK_A, // Note that for the Deck, the icons are same as Nintendo but the layout is the same as Xbox | ||
GLYPH_NINTENDO_DECK_B, | ||
GLYPH_NINTENDO_DECK_X, | ||
GLYPH_NINTENDO_DECK_Y, | ||
GLYPH_NINTENDO_PLUS, | ||
GLYPH_NINTENDO_MINUS, | ||
GLYPH_NINTENDO_L, | ||
GLYPH_NINTENDO_R, | ||
GLYPH_NINTENDO_ZL, | ||
GLYPH_NINTENDO_ZR, | ||
GLYPH_NINTENDO_XBOX_LSTICK, | ||
GLYPH_NINTENDO_XBOX_RSTICK, | ||
GLYPH_NINTENDO_SL, | ||
GLYPH_NINTENDO_SR, | ||
GLYPH_GENERIC_L, | ||
GLYPH_GENERIC_R, | ||
|
||
GLYPH_PLAYSTATION_CIRCLE, | ||
GLYPH_PLAYSTATION_CROSS, | ||
GLYPH_PLAYSTATION_TRIANGLE, | ||
GLYPH_PLAYSTATION_SQUARE, | ||
GLYPH_PLAYSTATION_START, | ||
GLYPH_PLAYSTATION_OPTIONS, | ||
GLYPH_PLAYSTATION_DECK_L1, | ||
GLYPH_PLAYSTATION_DECK_R1, | ||
GLYPH_PLAYSTATION_DECK_L2, | ||
GLYPH_PLAYSTATION_DECK_R2, | ||
GLYPH_PLAYSTATION_DECK_L3, | ||
GLYPH_PLAYSTATION_DECK_R3, | ||
GLYPH_DECK_L4, | ||
GLYPH_DECK_R4, | ||
GLYPH_DECK_L5, | ||
GLYPH_DECK_R5, | ||
|
||
GLYPH_XBOX_B, | ||
GLYPH_XBOX_A, | ||
GLYPH_XBOX_Y, | ||
GLYPH_XBOX_X, | ||
GLYPH_XBOX_DECK_VIEW, | ||
GLYPH_XBOX_DECK_MENU, | ||
GLYPH_XBOX_LB, | ||
GLYPH_XBOX_RB, | ||
GLYPH_XBOX_LT, | ||
GLYPH_XBOX_RT, | ||
GLYPH_NINTENDO_GENERIC_ACTIONRIGHT, | ||
GLYPH_NINTENDO_GENERIC_ACTIONDOWN, | ||
GLYPH_NINTENDO_GENERIC_ACTIONUP, | ||
GLYPH_NINTENDO_GENERIC_ACTIONLEFT, | ||
GLYPH_GENERIC_STICK, | ||
GLYPH_GENERIC_UNKNOWN, | ||
|
||
GLYPH_TOTAL | ||
} | ||
ButtonGlyphKey; | ||
|
||
static char glyph[GLYPH_TOTAL][5]; | ||
|
||
void BUTTONGLYPHS_init(void) | ||
{ | ||
/* Set glyph array to strings for all the button glyph codepoints (U+EBxx) */ | ||
for (int i = 0; i < GLYPH_TOTAL; i++) | ||
{ | ||
SDL_strlcpy(glyph[i], UTF8_encode(0xEB00+i).bytes, sizeof(glyph[i])); | ||
} | ||
} | ||
|
||
bool BUTTONGLYPHS_keyboard_is_available(void) | ||
{ | ||
/* Returns true if it makes sense to show button hints that are only available | ||
* on keyboards (like press M to mute), false if we're on a console. */ | ||
return true; | ||
} | ||
|
||
bool BUTTONGLYPHS_keyboard_is_active(void) | ||
{ | ||
/* Returns true if, not only do we have a keyboard available, but it's also the | ||
* active input method. (So, show keyboard keys, if false, show controller glyphs) */ | ||
return true; | ||
} | ||
|
||
const char* BUTTONGLYPHS_get_wasd_text(void) | ||
{ | ||
/* Returns the string to use in Welcome Aboard */ | ||
if (BUTTONGLYPHS_keyboard_is_active()) | ||
{ | ||
return loc::gettext("Press arrow keys or WASD to move"); | ||
} | ||
return loc::gettext("Press left/right to move"); | ||
} | ||
|
||
const char* BUTTONGLYPHS_get_button(const ActionSet actionset, const Action action) | ||
{ | ||
/* Given a specific action (like INTERACT in-game), | ||
* return either a (localized) keyboard key string like "ENTER" or "E", | ||
* or a controller button glyph from the table above like glyph[GLYPH_XBOX_Y], | ||
* to fill into strings like "Press {button} to activate terminal". */ | ||
switch (actionset) | ||
{ | ||
case ActionSet_InGame: | ||
switch (action.InGame) | ||
{ | ||
case Action_InGame_Interact: | ||
if (false) // TODO | ||
{ | ||
return glyph[GLYPH_PLAYSTATION_TRIANGLE]; | ||
} | ||
if (game.separate_interact) | ||
{ | ||
return "E"; | ||
} | ||
return loc::gettext("ENTER"); | ||
case Action_InGame_Map: | ||
if (false) // TODO | ||
{ | ||
return glyph[GLYPH_XBOX_DECK_VIEW]; | ||
} | ||
return loc::gettext("ENTER"); | ||
} | ||
break; | ||
} | ||
|
||
SDL_assert(0 && "Trying to get label/glyph for unknown action!"); | ||
return glyph[GLYPH_GENERIC_UNKNOWN]; | ||
} | ||
|
||
} // extern "C" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
#ifndef BUTTONGLYPHS_H | ||
#define BUTTONGLYPHS_H | ||
|
||
#include <stdbool.h> | ||
|
||
#include "ActionSets.h" | ||
|
||
#ifdef __cplusplus | ||
extern "C" | ||
{ | ||
#endif | ||
|
||
void BUTTONGLYPHS_init(void); | ||
|
||
bool BUTTONGLYPHS_keyboard_is_available(void); | ||
bool BUTTONGLYPHS_keyboard_is_active(void); | ||
const char* BUTTONGLYPHS_get_wasd_text(void); | ||
const char* BUTTONGLYPHS_get_button(ActionSet actionset, Action action); | ||
|
||
#ifdef __cplusplus | ||
} // extern "C" | ||
#endif | ||
|
||
#endif // BUTTONGLYPHS_H |
Oops, something went wrong.