TeamHypersomnia / Hypersomnia

Multiplayer top-down shooter made from scratch in C++. Play in your Browser! https://hypersomnia.io Made in 🇵🇱
https://hypersomnia.io/
GNU Affero General Public License v3.0
1.14k stars 49 forks source link

Implement Controls tab for Settings window #244

Closed geneotech closed 5 years ago

geneotech commented 7 years ago

Question is whether to use IMGUI for this or our own functionality from augs::?

There should be 4 categories, separated vertically:

Application controls Application controls (in-game) Game GUI controls Gameplay controls

To see examples of each, check out config.lua. Each line should consist of the name of the command to the left, and the button to the right, whose label contains the currently bound key, or "(unbound)" if there is none. The button, after being pressed, should receive the first keydown input and assign the new key if it is yet unbound. Otherwise, display a warning popup and don't do the assignment. IMGUI contains some code for popups.

e.g.

Move forward [ W ] Move backward [ S ] (...) Throw [ (unbound) ]

settings_gui.cpp contains the code that creates the Settings window. If we choose to use IMGUI, It should be implemented there. Otherwise, a call should be made from there to activate our own GUI.

geneotech commented 7 years ago

Hint: C++ enums are introspected in Hypersomnia. Each enum value can be visited with help of augs::for_each_enum_except_bounds. There also exists augs::enum_to_string and format_enum, which help convert the enums to readable format.