1
0
Fork 0
mirror of https://github.com/jugeeya/UltimateTrainingModpack.git synced 2025-06-17 16:52:36 +00:00

help-related fixes

This commit is contained in:
jugeeya 2020-08-19 22:53:34 -07:00
parent 257c122b63
commit 766d6e546c
2 changed files with 56 additions and 16 deletions
TrainingModpackOverlay

View file

@ -3,6 +3,7 @@
#include <list> #include <list>
#include <cstdint> #include <cstdint>
#include <tesla.hpp> #include <tesla.hpp>
#include "gui_help.hpp"
#include "gui_sublist.hpp" #include "gui_sublist.hpp"
#include "cpp_utils.hpp" #include "cpp_utils.hpp"
@ -93,12 +94,14 @@ public:
using FlagType = detail::FlagTypeT<T>; using FlagType = detail::FlagTypeT<T>;
private: private:
T m_mask; T m_mask;
FlagType* m_value; FlagType* m_value;
std::string m_name;
std::string m_help;
public: public:
BitFlagToggleListItem(const std::string& text, T mask, FlagType* value) BitFlagToggleListItem(const std::string& text, T mask, FlagType* value, std::string name = "", std::string help = "")
: tsl::elm::ToggleListItem(text, (mask & *value) != 0, "\uE14B", "\uE14C"), m_mask(mask), m_value(value) : tsl::elm::ToggleListItem(text, (mask & *value) != 0, "\uE14B", "\uE14C"), m_mask(mask), m_value(value), m_name(name), m_help(help)
{ {
setStateChangedListener([this](bool v) { setStateChangedListener([this](bool v) {
if(v) if(v)
@ -120,7 +123,11 @@ public:
return ListItem::onClick(keys); return ListItem::onClick(keys);
} }
else if(keys & KEY_Y) else if(keys & KEY_Y)
{} {
if (m_help != "") {
tsl::changeTo<GuiHelp>(m_name, m_help);
}
}
return false; return false;
} }
virtual void setState(bool state) override virtual void setState(bool state) override
@ -140,13 +147,17 @@ class SetToggleListItem : public tsl::elm::ListItem
{ {
std::vector<tsl::elm::ToggleListItem*> m_itemsOn; std::vector<tsl::elm::ToggleListItem*> m_itemsOn;
std::vector<tsl::elm::ToggleListItem*> m_itemsOff; std::vector<tsl::elm::ToggleListItem*> m_itemsOff;
std::string m_name;
std::string m_help;
public: public:
SetToggleListItem(std::vector<tsl::elm::ToggleListItem*> itemsOn, SetToggleListItem(std::vector<tsl::elm::ToggleListItem*> itemsOn,
std::vector<tsl::elm::ToggleListItem*> itemsOff, std::vector<tsl::elm::ToggleListItem*> itemsOff,
const std::string& text, const std::string& text,
const std::string& value = "") const std::string name = "",
: tsl::elm::ListItem(text, value), m_itemsOn(std::move(itemsOn)), m_itemsOff(std::move(itemsOff)) const std::string help = "",
const std::string& value = "")
: tsl::elm::ListItem(text, value), m_itemsOn(std::move(itemsOn)), m_itemsOff(std::move(itemsOff)), m_name(name), m_help(help)
{ {
setClickListener([this](u64 keys) -> bool { setClickListener([this](u64 keys) -> bool {
if(keys & KEY_A) if(keys & KEY_A)
@ -161,6 +172,12 @@ public:
} }
return true; return true;
} }
else if(keys & KEY_Y)
{
if (m_help != "") {
tsl::changeTo<GuiHelp>(m_name, m_help);
}
}
return false; return false;
}); });
} }

View file

@ -19,7 +19,7 @@ static struct TrainingModpackMenu
DefensiveFlags DEFENSIVE_STATE = DefensiveFlags::All; DefensiveFlags DEFENSIVE_STATE = DefensiveFlags::All;
DelayFlags OOS_OFFSET = DelayFlags::None; DelayFlags OOS_OFFSET = DelayFlags::None;
DelayFlags REACTION_TIME = DelayFlags::None; DelayFlags REACTION_TIME = DelayFlags::None;
OnOffFlags MASH_IN_NEUTRAL = OnOffFlags::None; OnOffFlags MASH_IN_NEUTRAL = OnOffFlag::Off;
BoolFlags FAST_FALL = BoolFlags::None; BoolFlags FAST_FALL = BoolFlags::None;
DelayFlags FAST_FALL_DELAY = DelayFlags::None; DelayFlags FAST_FALL_DELAY = DelayFlags::None;
BoolFlags FALLING_AERIALS = BoolFlags::None; BoolFlags FALLING_AERIALS = BoolFlags::None;
@ -271,6 +271,29 @@ public:
FsFileSystem m_fs; FsFileSystem m_fs;
}; };
class OverlayFrameWithHelp : public tsl::elm::OverlayFrame
{
public:
OverlayFrameWithHelp(const std::string& title, const std::string& subtitle) : tsl::elm::OverlayFrame(title, subtitle)
{}
virtual void draw(tsl::gfx::Renderer* renderer) override
{
renderer->fillScreen(a(tsl::style::color::ColorFrameBackground));
renderer->drawRect(tsl::cfg::FramebufferWidth - 1, 0, 1, tsl::cfg::FramebufferHeight, a(0xF222));
renderer->drawString(this->m_title.c_str(), false, 20, 50, 30, a(tsl::style::color::ColorText));
renderer->drawString(this->m_subtitle.c_str(), false, 20, 70, 15, a(tsl::style::color::ColorDescription));
renderer->drawRect(15, tsl::cfg::FramebufferHeight - 73, tsl::cfg::FramebufferWidth - 30, 1, a(tsl::style::color::ColorText));
renderer->drawString("\uE0E1 Back \uE0E0 OK \uE0E3 Help", false, 30, 693, 23, a(tsl::style::color::ColorText));
if (this->m_contentElement != nullptr)
this->m_contentElement->frame(renderer);
}
};
namespace namespace
{ {
template<typename T> tsl::elm::ListItem* createBitFlagOption(T* option, const std::string& name, const std::string& help, GuiMain* guiMain) template<typename T> tsl::elm::ListItem* createBitFlagOption(T* option, const std::string& name, const std::string& help, GuiMain* guiMain)
@ -281,16 +304,16 @@ template<typename T> tsl::elm::ListItem* createBitFlagOption(T* option, const st
item->setClickListener([name, help, option, guiMain](u64 keys) -> bool { item->setClickListener([name, help, option, guiMain](u64 keys) -> bool {
if(keys & KEY_A) if(keys & KEY_A)
{ {
tsl::changeTo<GuiLambda>([option, name]() -> tsl::elm::Element* { tsl::changeTo<GuiLambda>([option, name, help]() -> tsl::elm::Element* {
auto toggleList = new tsl::elm::List(); auto toggleList = new tsl::elm::List();
std::vector<tsl::elm::ToggleListItem*> items; std::vector<tsl::elm::ToggleListItem*> items;
for(auto& [flag, str] : detail::EnumArray<FlagType>::values) for(auto& [flag, str] : detail::EnumArray<FlagType>::values)
{ {
items.emplace_back(new BitFlagToggleListItem<FlagType>(str, flag, option)); items.emplace_back(new BitFlagToggleListItem<FlagType>(str, flag, option, name, help));
} }
auto allOff = new SetToggleListItem({}, items, "None"); auto allOff = new SetToggleListItem({}, items, "None", name, help);
auto allOn = new SetToggleListItem(items, {}, "All"); auto allOn = new SetToggleListItem(items, {}, "All", name, help);
toggleList->addItem(allOn); toggleList->addItem(allOn);
toggleList->addItem(allOff); toggleList->addItem(allOff);
@ -300,7 +323,7 @@ template<typename T> tsl::elm::ListItem* createBitFlagOption(T* option, const st
toggleList->addItem(it); toggleList->addItem(it);
} }
auto frame = new tsl::elm::OverlayFrame(name, ""); auto frame = new OverlayFrameWithHelp(name, "Press \uE0E3 for help with these options.");
frame->setContent(toggleList); frame->setContent(toggleList);
return frame; return frame;
}, guiMain); }, guiMain);
@ -320,7 +343,7 @@ tsl::elm::Element* GuiMain::createUI()
{ {
char buffer[256]; char buffer[256];
snprintf(buffer, 256, "Version %s", VERSION); snprintf(buffer, 256, "Version %s", VERSION);
tsl::elm::OverlayFrame* rootFrame = new tsl::elm::OverlayFrame("Training Modpack", buffer); OverlayFrameWithHelp* rootFrame = new OverlayFrameWithHelp("Training Modpack", buffer);
auto list = new tsl::elm::List(); auto list = new tsl::elm::List();
@ -372,7 +395,7 @@ tsl::elm::Element* GuiMain::createUI()
list->addItem(createBitFlagOption(&menu.MASH_STATE, "Mash Toggles", mash_help, this)); list->addItem(createBitFlagOption(&menu.MASH_STATE, "Mash Toggles", mash_help, this));
list->addItem(createBitFlagOption(&menu.FOLLOW_UP, "Followup Toggles", follow_up_help, this)); list->addItem(createBitFlagOption(&menu.FOLLOW_UP, "Followup Toggles", follow_up_help, this));
list->addItem(new BitFlagToggleListItem<OnOffFlags::Type>("Mash In Neutral", OnOffFlag::On, &menu.MASH_IN_NEUTRAL)); list->addItem(new BitFlagToggleListItem<OnOffFlags::Type>("Mash In Neutral", OnOffFlag::On, &menu.MASH_IN_NEUTRAL, "Mash In Neutral", mash_neutral_help));
list->addItem(new tsl::elm::CategoryHeader("Left Stick", true)); list->addItem(new tsl::elm::CategoryHeader("Left Stick", true));
@ -422,7 +445,7 @@ tsl::elm::Element* GuiMain::createUI()
list->addItem(new tsl::elm::CategoryHeader("Miscellaneous", true)); list->addItem(new tsl::elm::CategoryHeader("Miscellaneous", true));
list->addItem(new BitFlagToggleListItem<OnOffFlags::Type>("Hitbox Visualization", OnOffFlag::On, &menu.HITBOX_VIS)); list->addItem(new BitFlagToggleListItem<OnOffFlags::Type>("Hitbox Visualization", OnOffFlag::On, &menu.HITBOX_VIS, "Hitbox Visualization", hitbox_help));
ClickableListItem* saveStateItem = new ClickableListItem( ClickableListItem* saveStateItem = new ClickableListItem(
"Save States", empty_items, nullptr, "saveStates", 0, "Save States", save_states_help); "Save States", empty_items, nullptr, "saveStates", 0, "Save States", save_states_help);