clang-format .hpp files (#5307)

* Add hpp files to clang-format script

* clang-format hpp files
This commit is contained in:
Archez 2025-04-03 23:33:35 -04:00 committed by GitHub
parent 2deea6e105
commit f37c3aa228
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
15 changed files with 1048 additions and 1058 deletions

View file

@ -37,7 +37,7 @@ if (-not (Test-Path $clangFormatFilePath) -or ($currentVersion -ne $requiredVers
$basePath = (Resolve-Path .).Path
$files = Get-ChildItem -Path $basePath\soh -Recurse -File `
| Where-Object { ($_.Extension -eq '.c' -or $_.Extension -eq '.cpp' -or `
($_.Extension -eq '.h' -and `
(($_.Extension -eq '.h' -or $_.Extension -eq '.hpp') -and `
(-not ($_.FullName -like "*\soh\src\*" -or $_.FullName -like "*\soh\include\*")))) -and `
(-not ($_.FullName -like "*\soh\assets\*")) }

View file

@ -10,8 +10,8 @@
# -name "*.c" -o -name "*.cpp"
# find all .c and .cpp files
#
# -name "*.h" ! -path "soh/src/**.h" ! -path "soh/include/**.h"
# find all .h files that aren't in soh/src or soh/include
# ( -name "*.h" -o -name "*.hpp" ) ! -path "soh/src/**.h" ! -path "soh/include/**.h"
# find all .h and .hpp files that aren't in soh/src or soh/include
# this is because zret decomp only runs clang-format on c files
# https://github.com/zeldaret/mm/blob/b7e5468ca16315a7e322055eff3d97fe980bbc25/format.py#L182
#
@ -26,4 +26,4 @@
# and pass it as an argument to clang-format
# verbose to print files being formatted and X out of Y status
find soh -type f \( -name "*.c" -o -name "*.cpp" -o \( -name "*.h" ! -path "soh/src/**.h" ! -path "soh/include/**.h" \) \) ! -path "soh/assets/*" -print0 | xargs -0 clang-format-14 -i --verbose
find soh -type f \( -name "*.c" -o -name "*.cpp" -o \( \( -name "*.h" -o -name "*.hpp" \) ! -path "soh/src/*" ! -path "soh/include/*" \) \) ! -path "soh/assets/*" -print0 | xargs -0 clang-format-14 -i --verbose

View file

@ -6,28 +6,28 @@
#include "text.hpp"
namespace CustomMessages {
std::string MESSAGE_END();
std::string WAIT_FOR_INPUT();
std::string HORIZONTAL_SPACE(uint8_t x);
std::string GO_TO(uint16_t x);
std::string INSTANT_TEXT_ON();
std::string INSTANT_TEXT_OFF();
std::string SHOP_MESSAGE_BOX();
std::string EVENT_TRIGGER();
std::string DELAY_FRAMES(uint8_t x);
std::string CLOSE_AFTER(uint8_t x);
std::string PLAYER_NAME();
std::string PLAY_OCARINA();
std::string ITEM_OBTAINED(uint8_t x);
std::string SET_SPEED(uint8_t x);
std::string SKULLTULAS_DESTROYED();
std::string CURRENT_TIME();
std::string UNSKIPPABLE();
std::string TWO_WAY_CHOICE();
std::string NEWLINE();
std::string COLOR(std::string x);
std::string CENTER_TEXT();
std::string IF_NOT_MQ();
std::string MQ_ELSE();
std::string MQ_END();
}
std::string MESSAGE_END();
std::string WAIT_FOR_INPUT();
std::string HORIZONTAL_SPACE(uint8_t x);
std::string GO_TO(uint16_t x);
std::string INSTANT_TEXT_ON();
std::string INSTANT_TEXT_OFF();
std::string SHOP_MESSAGE_BOX();
std::string EVENT_TRIGGER();
std::string DELAY_FRAMES(uint8_t x);
std::string CLOSE_AFTER(uint8_t x);
std::string PLAYER_NAME();
std::string PLAY_OCARINA();
std::string ITEM_OBTAINED(uint8_t x);
std::string SET_SPEED(uint8_t x);
std::string SKULLTULAS_DESTROYED();
std::string CURRENT_TIME();
std::string UNSKIPPABLE();
std::string TWO_WAY_CHOICE();
std::string NEWLINE();
std::string COLOR(std::string x);
std::string CENTER_TEXT();
std::string IF_NOT_MQ();
std::string MQ_ELSE();
std::string MQ_END();
} // namespace CustomMessages

View file

@ -7,21 +7,21 @@
#include <vector>
#include <string>
//RANDOTODO merge into Logic once Logic is a class passed to logic funtions
// RANDOTODO merge into Logic once Logic is a class passed to logic funtions
struct GetAccessibleLocationsStruct {
std::vector<RandomizerCheck> accessibleLocations;
std::vector<RandomizerRegion> regionPool;
//Variables for playthrough
// Variables for playthrough
int gsCount;
int maxGsCount;
std::vector<LogicVal> buyIgnores;
//Variables for search
// Variables for search
std::vector<Rando::ItemLocation*> newItemLocations;
bool logicUpdated;
bool resetSphere;
//Variables For Validating Entrences
// Variables For Validating Entrences
bool haveTimeAccess;
bool foundTempleOfTime;
bool validatedStartingRegion;
@ -36,15 +36,15 @@ struct GetAccessibleLocationsStruct {
bool calculatingAvailableChecks = false;
GetAccessibleLocationsStruct(int _maxGsCount){
regionPool = {RR_ROOT};
GetAccessibleLocationsStruct(int _maxGsCount) {
regionPool = { RR_ROOT };
gsCount = 0;
maxGsCount = _maxGsCount;
logicUpdated = false;
resetSphere = false;
}
void InitLoop(){
void InitLoop() {
logicUpdated = false;
for (Rando::ItemLocation* location : newItemLocations) {
location->ApplyPlacedItemEffect();
@ -64,10 +64,12 @@ std::vector<RandomizerCheck> GetEmptyLocations(std::vector<RandomizerCheck> allo
void ProcessRegion(Region* region, GetAccessibleLocationsStruct& gals, RandomizerGet ignore = RG_NONE,
bool stopOnBeatable = false, bool addToPlaythrough = false);
std::vector<RandomizerCheck> ReachabilitySearch(const std::vector<RandomizerCheck>& allowedLocations, RandomizerGet ignore=RG_NONE, bool calculatingAvailableChecks=false);
std::vector<RandomizerCheck> ReachabilitySearch(const std::vector<RandomizerCheck>& allowedLocations,
RandomizerGet ignore = RG_NONE,
bool calculatingAvailableChecks = false);
void GeneratePlaythrough();
bool CheckBeatable(RandomizerGet ignore=RG_NONE);
bool CheckBeatable(RandomizerGet ignore = RG_NONE);
void ValidateEntrances(bool checkPoeCollectorAccess, bool checkOtherEntranceAccess);

View file

@ -31,9 +31,10 @@ struct HintSetting {
};
class HintText {
public:
public:
HintText() = default;
HintText(CustomMessage clearText_, std::vector<CustomMessage> ambiguousText_ = {}, std::vector<CustomMessage> obscureText_ = {});
HintText(CustomMessage clearText_, std::vector<CustomMessage> ambiguousText_ = {},
std::vector<CustomMessage> obscureText_ = {});
const CustomMessage& GetClear() const;
const CustomMessage& GetObscure() const;
const CustomMessage& GetObscure(uint8_t selection) const;
@ -46,13 +47,13 @@ public:
bool operator==(const HintText& right) const;
bool operator!=(const HintText& right) const;
private:
private:
CustomMessage clearText;
std::vector<CustomMessage> ambiguousText = {};
std::vector<CustomMessage> obscureText = {};
};
struct StaticHintInfo{
struct StaticHintInfo {
HintType type;
std::vector<RandomizerHintTextKey> hintKeys;
RandomizerSettingKey setting;
@ -64,9 +65,10 @@ struct StaticHintInfo{
int num;
StaticHintInfo() = default;
StaticHintInfo(HintType _type, std::vector<RandomizerHintTextKey> _hintKeys, RandomizerSettingKey _setting, std::variant<bool, uint8_t> _condition,
std::vector<RandomizerCheck> _targetChecks, std::vector<RandomizerGet> _targetItems = {},
std::vector<RandomizerCheck> _hintChecks = {}, bool _yourPocket = false, int _num = 0);
StaticHintInfo(HintType _type, std::vector<RandomizerHintTextKey> _hintKeys, RandomizerSettingKey _setting,
std::variant<bool, uint8_t> _condition, std::vector<RandomizerCheck> _targetChecks,
std::vector<RandomizerGet> _targetItems = {}, std::vector<RandomizerCheck> _hintChecks = {},
bool _yourPocket = false, int _num = 0);
};
RandomizerHintTextKey GetRandomJunkHint();

View file

@ -13,4 +13,5 @@
#define DELETE_PRESET 6
#define RESET_TO_DEFAULTS 8
bool GenerateRandomizer(std::set<RandomizerCheck> excludedLocations, std::set<RandomizerTrick> enabledTricks, std::string seedInput);
bool GenerateRandomizer(std::set<RandomizerCheck> excludedLocations, std::set<RandomizerTrick> enabledTricks,
std::string seedInput);

View file

@ -4,6 +4,8 @@
#include "../context.h"
namespace Playthrough {
int Playthrough_Init(uint32_t seed, std::set<RandomizerCheck> excludedLocations, std::set<RandomizerTrick> enabledTricks);
int Playthrough_Repeat(std::set<RandomizerCheck> excludedLocations, std::set<RandomizerTrick> enabledTricks, int count = 1);
}
int Playthrough_Init(uint32_t seed, std::set<RandomizerCheck> excludedLocations,
std::set<RandomizerTrick> enabledTricks);
int Playthrough_Repeat(std::set<RandomizerCheck> excludedLocations, std::set<RandomizerTrick> enabledTricks,
int count = 1);
} // namespace Playthrough

View file

@ -5,8 +5,7 @@
#include <iostream>
#include <iterator>
template <typename T, typename Predicate>
static void erase_if(std::vector<T>& vector, Predicate pred) {
template <typename T, typename Predicate> static void erase_if(std::vector<T>& vector, Predicate pred) {
vector.erase(std::remove_if(begin(vector), end(vector), pred), end(vector));
}
@ -27,13 +26,11 @@ std::vector<T> FilterAndEraseFromPool(std::vector<T>& vector, Predicate pred) {
return FilterFromPool(vector, pred, true);
}
template <typename T, typename FromPool>
void AddElementsToPool(std::vector<T>& toPool, const FromPool& fromPool) {
template <typename T, typename FromPool> void AddElementsToPool(std::vector<T>& toPool, const FromPool& fromPool) {
toPool.insert(toPool.end(), std::cbegin(fromPool), std::cend(fromPool));
}
template <typename T, typename Container>
bool ElementInContainer(T& element, const Container& container) {
template <typename T, typename Container> bool ElementInContainer(T& element, const Container& container) {
return std::find(container.begin(), container.end(), element) != container.end();
}

View file

@ -3,5 +3,6 @@
#include <set>
namespace RandoMain {
void GenerateRando(std::set<RandomizerCheck> excludedLocations, std::set<RandomizerTrick> enabledTricks, std::string seedInput);
void GenerateRando(std::set<RandomizerCheck> excludedLocations, std::set<RandomizerTrick> enabledTricks,
std::string seedInput);
}

View file

@ -11,9 +11,8 @@ void Random_Init(uint32_t seed);
uint32_t Random(int min, int max);
double RandomDouble();
//Get a random element from a vector or array
template <typename T>
T RandomElement(std::vector<T>& vector, bool erase) {
// Get a random element from a vector or array
template <typename T> T RandomElement(std::vector<T>& vector, bool erase) {
const auto idx = Random(0, vector.size());
const T selected = vector[idx];
if (erase) {
@ -21,17 +20,14 @@ T RandomElement(std::vector<T>& vector, bool erase) {
}
return selected;
}
template <typename Container>
auto& RandomElement(Container& container) {
template <typename Container> auto& RandomElement(Container& container) {
return container[Random(0, std::size(container))];
}
template <typename Container>
const auto& RandomElement(const Container& container) {
template <typename Container> const auto& RandomElement(const Container& container) {
return container[Random(0, std::size(container))];
}
template <typename T>
const T RandomElementFromSet(const std::set<T>& set) {
template <typename T> const T RandomElementFromSet(const std::set<T>& set) {
if (set.size() == 1) {
return *set.begin();
}
@ -44,19 +40,15 @@ const T RandomElementFromSet(const std::set<T>& set) {
return *it;
}
//Shuffle items within a vector or array
//RANDOTODO There's probably a more efficient way to do what this does.
template <typename T>
void Shuffle(std::vector<T>& vector) {
for (std::size_t i = 0; i + 1 < vector.size(); i++)
{
// Shuffle items within a vector or array
// RANDOTODO There's probably a more efficient way to do what this does.
template <typename T> void Shuffle(std::vector<T>& vector) {
for (std::size_t i = 0; i + 1 < vector.size(); i++) {
std::swap(vector[i], vector[Random(i, vector.size())]);
}
}
template <typename T, std::size_t size>
void Shuffle(std::array<T, size>& arr) {
for (std::size_t i = 0; i + 1 < arr.size(); i++)
{
template <typename T, std::size_t size> void Shuffle(std::array<T, size>& arr) {
for (std::size_t i = 0; i + 1 < arr.size(); i++) {
std::swap(arr[i], arr[Random(i, arr.size())]);
}
}

View file

@ -16,16 +16,10 @@ struct PriceSettingsStruct {
RandomizerSettingKey tycoonWallet;
RandomizerSettingKey affordable;
PriceSettingsStruct(RandomizerSettingKey _main,
RandomizerSettingKey _fixedPrice,
RandomizerSettingKey _range1,
RandomizerSettingKey _range2,
RandomizerSettingKey _noWallet,
RandomizerSettingKey _childWallet,
RandomizerSettingKey _adultWallet,
RandomizerSettingKey _giantWallet,
RandomizerSettingKey _tycoonWallet,
RandomizerSettingKey _affordable);
PriceSettingsStruct(RandomizerSettingKey _main, RandomizerSettingKey _fixedPrice, RandomizerSettingKey _range1,
RandomizerSettingKey _range2, RandomizerSettingKey _noWallet, RandomizerSettingKey _childWallet,
RandomizerSettingKey _adultWallet, RandomizerSettingKey _giantWallet,
RandomizerSettingKey _tycoonWallet, RandomizerSettingKey _affordable);
};
extern void PlaceVanillaShopItems();
@ -34,5 +28,3 @@ extern uint16_t GetRandomPrice(Rando::Location* loc, PriceSettingsStruct priceSe
extern uint16_t GetCheapBalancedPrice();
extern int GetShopsanityReplaceAmount();
extern Text GetIceTrapName(uint8_t id);

View file

@ -7,22 +7,20 @@
#define SINGULAR 1
class Text {
public:
public:
Text() = default;
Text(std::string english_, std::string french_, std::string spanish_)
: english(std::move(english_)),
french(std::move(french_)),
spanish(std::move(spanish_)),
: english(std::move(english_)), french(std::move(french_)), spanish(std::move(spanish_)),
german(std::move("")) {
// german defaults to english text until a translation is provided.
german = english;
}
Text(std::string english_, std::string french_, std::string spanish_, std::string german_)
: english(std::move(english_)),
french(std::move(french_)),
spanish(std::move(spanish_)),
german(std::move(german_)) {}
Text(std::string english_) : english(std::move(english_)), french(std::move("")), spanish(std::move("")), german(std::move("")) {
: english(std::move(english_)), french(std::move(french_)), spanish(std::move(spanish_)),
german(std::move(german_)) {
}
Text(std::string english_)
: english(std::move(english_)), french(std::move("")), spanish(std::move("")), german(std::move("")) {
// default unprovided languages to english text
french = spanish = german = english;
}
@ -54,24 +52,24 @@ public:
const std::string& GetForLanguage(uint8_t language) const {
switch (language) {
case 0: //LANGUAGE_ENG: changed to resolve #include loops
case 0: // LANGUAGE_ENG: changed to resolve #include loops
return GetEnglish();
case 2: //LANGUAGE_FRA:
case 2: // LANGUAGE_FRA:
return GetFrench();
case 1: //LANGUAGE_GER:
case 1: // LANGUAGE_GER:
return GetGerman();
default:
return GetEnglish();
}
}
Text operator+ (const Text& right) const {
return Text{english + right.GetEnglish(), french + right.GetFrench(), spanish + right.GetSpanish(),
german + right.GetGerman()};
Text operator+(const Text& right) const {
return Text{ english + right.GetEnglish(), french + right.GetFrench(), spanish + right.GetSpanish(),
german + right.GetGerman() };
}
Text operator+ (const std::string& right) const {
return Text{english + right, french + right, spanish + right, german + right};
Text operator+(const std::string& right) const {
return Text{ english + right, french + right, spanish + right, german + right };
}
bool operator==(const Text& right) const {
@ -88,7 +86,7 @@ public:
void Replace(std::string oldStr, std::string newStr) {
for (std::string* str : {&english, &french, &spanish, &german}) {
for (std::string* str : { &english, &french, &spanish, &german }) {
size_t position = str->find(oldStr);
while (position != std::string::npos) {
str->replace(position, oldStr.length(), newStr);
@ -123,15 +121,15 @@ public:
// Convert first char to upper case
Text Capitalize(void) const {
Text cap = *this + "";
for (std::string* str : {&cap.english, &cap.french, &cap.spanish, &cap.german}) {
for (std::string* str : { &cap.english, &cap.french, &cap.spanish, &cap.german }) {
(*str)[0] = std::toupper((*str)[0]);
}
return cap;
}
//find the appropriate bars that separate singular from plural
// find the appropriate bars that separate singular from plural
void SetForm(int form) {
for (std::string* str : {&english, &french, &spanish, &german}) {
for (std::string* str : { &english, &french, &spanish, &german }) {
size_t firstBar = str->find('|');
if (firstBar != std::string::npos) {
@ -151,7 +149,7 @@ public:
}
}
}
//remove the remaining bar
// remove the remaining bar
this->Replace("|", "");
}

View file

@ -32,14 +32,15 @@
#include "SohModals.h"
namespace SohGui {
void SetupHooks();
void SetupGuiElements();
void Draw();
void Destroy();
void RegisterPopup(std::string title, std::string message, std::string button1 = "OK", std::string button2 = "", std::function<void()> button1callback = nullptr, std::function<void()> button2callback = nullptr);
void ShowRandomizerSettingsMenu();
UIWidgets::Colors GetMenuThemeColor();
}
void SetupHooks();
void SetupGuiElements();
void Draw();
void Destroy();
void RegisterPopup(std::string title, std::string message, std::string button1 = "OK", std::string button2 = "",
std::function<void()> button1callback = nullptr, std::function<void()> button2callback = nullptr);
void ShowRandomizerSettingsMenu();
UIWidgets::Colors GetMenuThemeColor();
} // namespace SohGui
#define THEME_COLOR SohGui::GetMenuThemeColor()

View file

@ -14,9 +14,9 @@
namespace UIWidgets {
using SectionFunc = void(*)();
using SectionFunc = void (*)();
struct TextFilters {
struct TextFilters {
static int FilterNumbers(ImGuiInputTextCallbackData* data) {
if (data->EventChar < 256 && strchr("1234567890", (char)data->EventChar)) {
return 0;
@ -31,22 +31,23 @@ namespace UIWidgets {
}
return 1;
}
};
};
std::string WrappedText(const char* text, unsigned int charactersPerLine = 80);
std::string WrappedText(const std::string& text, unsigned int charactersPerLine = 80);
void PaddedSeparator(bool padTop = true, bool padBottom = true, float extraVerticalTopPadding = 0.0f, float extraVerticalBottomPadding = 0.0f);
void Tooltip(const char* text);
std::string WrappedText(const char* text, unsigned int charactersPerLine = 80);
std::string WrappedText(const std::string& text, unsigned int charactersPerLine = 80);
void PaddedSeparator(bool padTop = true, bool padBottom = true, float extraVerticalTopPadding = 0.0f,
float extraVerticalBottomPadding = 0.0f);
void Tooltip(const char* text);
typedef enum ColorPickerModifiers {
typedef enum ColorPickerModifiers {
ColorPickerResetButton = 1,
ColorPickerRandomButton = 2,
ColorPickerRainbowCheck = 4,
ColorPickerLockCheck = 8,
} ColorPickerModifiers;
} ColorPickerModifiers;
// mostly in order for colors usable by the menu without custom text color
enum Colors {
// mostly in order for colors usable by the menu without custom text color
enum Colors {
Red,
DarkRed,
Orange,
@ -69,56 +70,43 @@ namespace UIWidgets {
LightGray,
White,
NoColor
};
};
enum InputTypes {
String,
Scalar
};
enum InputTypes { String, Scalar };
const std::unordered_map<Colors, ImVec4> ColorValues = {
{ Colors::Pink, ImVec4(0.87f, 0.3f, 0.87f, 1.0f) },
{ Colors::Red, ImVec4(0.55f, 0.0f, 0.0f, 1.0f) },
{ Colors::DarkRed, ImVec4(0.3f, 0.0f, 0.0f, 1.0f) },
{ Colors::Orange, ImVec4(0.85f, 0.55f, 0.0f, 1.0f) },
{ Colors::Yellow, ImVec4(0.95f, 0.95f, 0.0f, 1.0f) },
{ Colors::Green, ImVec4(0.0f, 0.55f, 0.0f, 1.0f) },
{ Colors::DarkGreen, ImVec4(0.0f, 0.3f, 0.0f, 1.0f) },
{ Colors::Cyan, ImVec4(0.0f, 0.9f, 0.9f, 1.0f) },
{ Colors::LightBlue, ImVec4(0.0f, 0.24f, 0.8f, 1.0f) },
{ Colors::Blue, ImVec4(0.08f, 0.03f, 0.65f, 1.0f) },
{ Colors::DarkBlue, ImVec4(0.03f, 0.0f, 0.5f, 1.0f) },
{ Colors::Indigo, ImVec4(0.35f, 0.0f, 0.87f, 1.0f) },
{ Colors::Violet, ImVec4(0.5f, 0.0f, 0.9f, 1.0f) },
{ Colors::Purple, ImVec4(0.31f, 0.0f, 0.67f, 1.0f) },
{ Colors::Brown, ImVec4(0.37f, 0.18f, 0.0f, 1.0f) },
{ Colors::LightGray, ImVec4(0.75f, 0.75f, 0.75f, 1.0f) },
{ Colors::Gray, ImVec4(0.45f, 0.45f, 0.45f, 1.0f) },
{ Colors::DarkGray, ImVec4(0.15f, 0.15f, 0.15f, 1.0f) },
{ Colors::Black, ImVec4(0.0f, 0.0f, 0.0f, 1.0f)},
{ Colors::White, ImVec4(1.0f, 1.0f, 1.0f, 1.0f) },
{ Colors::NoColor, ImVec4(0.0f, 0.0f, 0.0f, 0.0f)},
};
const std::unordered_map<Colors, ImVec4> ColorValues = {
{ Colors::Pink, ImVec4(0.87f, 0.3f, 0.87f, 1.0f) }, { Colors::Red, ImVec4(0.55f, 0.0f, 0.0f, 1.0f) },
{ Colors::DarkRed, ImVec4(0.3f, 0.0f, 0.0f, 1.0f) }, { Colors::Orange, ImVec4(0.85f, 0.55f, 0.0f, 1.0f) },
{ Colors::Yellow, ImVec4(0.95f, 0.95f, 0.0f, 1.0f) }, { Colors::Green, ImVec4(0.0f, 0.55f, 0.0f, 1.0f) },
{ Colors::DarkGreen, ImVec4(0.0f, 0.3f, 0.0f, 1.0f) }, { Colors::Cyan, ImVec4(0.0f, 0.9f, 0.9f, 1.0f) },
{ Colors::LightBlue, ImVec4(0.0f, 0.24f, 0.8f, 1.0f) }, { Colors::Blue, ImVec4(0.08f, 0.03f, 0.65f, 1.0f) },
{ Colors::DarkBlue, ImVec4(0.03f, 0.0f, 0.5f, 1.0f) }, { Colors::Indigo, ImVec4(0.35f, 0.0f, 0.87f, 1.0f) },
{ Colors::Violet, ImVec4(0.5f, 0.0f, 0.9f, 1.0f) }, { Colors::Purple, ImVec4(0.31f, 0.0f, 0.67f, 1.0f) },
{ Colors::Brown, ImVec4(0.37f, 0.18f, 0.0f, 1.0f) }, { Colors::LightGray, ImVec4(0.75f, 0.75f, 0.75f, 1.0f) },
{ Colors::Gray, ImVec4(0.45f, 0.45f, 0.45f, 1.0f) }, { Colors::DarkGray, ImVec4(0.15f, 0.15f, 0.15f, 1.0f) },
{ Colors::Black, ImVec4(0.0f, 0.0f, 0.0f, 1.0f) }, { Colors::White, ImVec4(1.0f, 1.0f, 1.0f, 1.0f) },
{ Colors::NoColor, ImVec4(0.0f, 0.0f, 0.0f, 0.0f) },
};
namespace Sizes {
const ImVec2 Inline = ImVec2(0.0f, 0.0f);
const ImVec2 Fill = ImVec2(-1.0f, 0.0f);
}
namespace Sizes {
const ImVec2 Inline = ImVec2(0.0f, 0.0f);
const ImVec2 Fill = ImVec2(-1.0f, 0.0f);
} // namespace Sizes
enum LabelPositions {
enum LabelPositions {
Near,
Far,
Above,
None,
Within,
};
};
enum ComponentAlignments {
enum ComponentAlignments {
Left,
Right,
};
};
struct WidgetOptions{
struct WidgetOptions {
const char* tooltip = "";
bool disabled = false;
const char* disabledTooltip = "";
@ -135,18 +123,18 @@ namespace UIWidgets {
disabledTooltip = disabledTooltip_;
return *this;
}
};
};
struct TextOptions : WidgetOptions {
struct TextOptions : WidgetOptions {
Colors color = Colors::NoColor;
TextOptions& Color(Colors color_) {
color = color_;
return *this;
}
};
};
struct ButtonOptions : WidgetOptions {
struct ButtonOptions : WidgetOptions {
ImVec2 size = Sizes::Fill;
ImVec2 padding = ImVec2(10.0f, 8.0f);
Colors color = Colors::Gray;
@ -167,9 +155,9 @@ namespace UIWidgets {
color = color_;
return *this;
}
};
};
struct WindowButtonOptions : WidgetOptions {
struct WindowButtonOptions : WidgetOptions {
ImVec2 size = Sizes::Inline;
ImVec2 padding = ImVec2(10.0f, 8.0f);
Colors color = Colors::Gray;
@ -200,9 +188,9 @@ namespace UIWidgets {
embedWindow = embedWindow_;
return *this;
}
};
};
struct CheckboxOptions : WidgetOptions {
struct CheckboxOptions : WidgetOptions {
bool defaultValue = false; // Only applicable to CVarCheckbox
ComponentAlignments alignment = ComponentAlignments::Left;
LabelPositions labelPosition = LabelPositions::Near;
@ -232,9 +220,9 @@ namespace UIWidgets {
WidgetOptions::disabledTooltip = disabledTooltip_;
return *this;
}
};
};
struct ComboboxOptions : WidgetOptions {
struct ComboboxOptions : WidgetOptions {
std::unordered_map<int32_t, const char*> comboMap = {};
uint32_t defaultIndex = 0; // Only applicable to CVarCombobox
ComponentAlignments alignment = ComponentAlignments::Left;
@ -266,9 +254,9 @@ namespace UIWidgets {
color = color_;
return *this;
}
};
};
struct IntSliderOptions : WidgetOptions {
struct IntSliderOptions : WidgetOptions {
bool showButtons = true;
const char* format = "%d";
int32_t step = 1;
@ -280,7 +268,7 @@ namespace UIWidgets {
LabelPositions labelPosition = LabelPositions::Above;
Colors color = Colors::Gray;
ImGuiSliderFlags flags = 0;
ImVec2 size = {0,0};
ImVec2 size = { 0, 0 };
IntSliderOptions& ShowButtons(bool showButtons_) {
showButtons = showButtons_;
@ -330,9 +318,9 @@ namespace UIWidgets {
clamp = clamp_;
return *this;
}
};
};
struct FloatSliderOptions : WidgetOptions {
struct FloatSliderOptions : WidgetOptions {
bool showButtons = true;
const char* format = "%f";
float step = 0.01f;
@ -345,7 +333,7 @@ namespace UIWidgets {
LabelPositions labelPosition = LabelPositions::Above;
Colors color = Colors::Gray;
ImGuiSliderFlags flags = 0;
ImVec2 size = {0,0};
ImVec2 size = { 0, 0 };
FloatSliderOptions& ShowButtons(bool showButtons_) {
showButtons = showButtons_;
@ -402,9 +390,9 @@ namespace UIWidgets {
clamp = clamp_;
return *this;
}
};
};
struct RadioButtonsOptions : WidgetOptions {
struct RadioButtonsOptions : WidgetOptions {
std::unordered_map<int32_t, const char*> buttonMap;
Colors color = Colors::LightBlue;
@ -420,13 +408,13 @@ namespace UIWidgets {
color = color_;
return *this;
}
};
};
struct InputOptions : WidgetOptions {
struct InputOptions : WidgetOptions {
ComponentAlignments alignment = ComponentAlignments::Left;
LabelPositions labelPosition = LabelPositions::Above;
Colors color = Colors::Gray;
ImVec2 size = {0,0};
ImVec2 size = { 0, 0 };
std::string placeholder = "";
InputTypes type = InputTypes::String;
std::string defaultValue = "";
@ -475,55 +463,57 @@ namespace UIWidgets {
secret = secret_;
return *this;
}
};
};
void PushStyleMenu(const ImVec4& color);
void PushStyleMenu(Colors color = Colors::LightBlue);
void PopStyleMenu();
bool BeginMenu(const char* label, Colors color = Colors::LightBlue);
void PushStyleMenu(const ImVec4& color);
void PushStyleMenu(Colors color = Colors::LightBlue);
void PopStyleMenu();
bool BeginMenu(const char* label, Colors color = Colors::LightBlue);
void PushStyleMenuItem(const ImVec4& color);
void PushStyleMenuItem(Colors color = Colors::LightBlue);
void PopStyleMenuItem();
bool MenuItem(const char* label, const char* shortcut = NULL, Colors color = Colors::LightBlue);
void PushStyleMenuItem(const ImVec4& color);
void PushStyleMenuItem(Colors color = Colors::LightBlue);
void PopStyleMenuItem();
bool MenuItem(const char* label, const char* shortcut = NULL, Colors color = Colors::LightBlue);
void PushStyleButton(const ImVec4& color, ImVec2 padding = ImVec2(10.0f, 8.0f));
void PushStyleButton(Colors color = Colors::Gray, ImVec2 padding = ImVec2(10.0f, 8.0f));
void PopStyleButton();
bool Button(const char* label, const ButtonOptions& options = {});
bool WindowButton(const char* label, const char* cvarName, std::shared_ptr<Ship::GuiWindow> windowPtr, const WindowButtonOptions& options = {});
void PushStyleButton(const ImVec4& color, ImVec2 padding = ImVec2(10.0f, 8.0f));
void PushStyleButton(Colors color = Colors::Gray, ImVec2 padding = ImVec2(10.0f, 8.0f));
void PopStyleButton();
bool Button(const char* label, const ButtonOptions& options = {});
bool WindowButton(const char* label, const char* cvarName, std::shared_ptr<Ship::GuiWindow> windowPtr,
const WindowButtonOptions& options = {});
void PushStyleCheckbox(const ImVec4& color);
void PushStyleCheckbox(Colors color = Colors::LightBlue);
void PopStyleCheckbox();
void RenderText(ImVec2 pos, const char* text, const char* text_end, bool hide_text_after_hash);
bool Checkbox(const char* label, bool* v, const CheckboxOptions& options = {});
bool CVarCheckbox(const char* label, const char* cvarName, const CheckboxOptions& options = {});
void PushStyleCheckbox(const ImVec4& color);
void PushStyleCheckbox(Colors color = Colors::LightBlue);
void PopStyleCheckbox();
void RenderText(ImVec2 pos, const char* text, const char* text_end, bool hide_text_after_hash);
bool Checkbox(const char* label, bool* v, const CheckboxOptions& options = {});
bool CVarCheckbox(const char* label, const char* cvarName, const CheckboxOptions& options = {});
void PushStyleCombobox(const ImVec4& color);
void PushStyleCombobox(Colors color = Colors::LightBlue);
void PopStyleCombobox();
void PushStyleCombobox(const ImVec4& color);
void PushStyleCombobox(Colors color = Colors::LightBlue);
void PopStyleCombobox();
void PushStyleTabs(const ImVec4& color);
void PushStyleTabs(Colors color = Colors::LightBlue);
void PopStyleTabs();
void PushStyleTabs(const ImVec4& color);
void PushStyleTabs(Colors color = Colors::LightBlue);
void PopStyleTabs();
void PushStyleInput(const ImVec4& color);
void PushStyleInput(Colors color = Colors::LightBlue);
void PopStyleInput();
void PushStyleInput(const ImVec4& color);
void PushStyleInput(Colors color = Colors::LightBlue);
void PopStyleInput();
void PushStyleHeader(const ImVec4& color);
void PushStyleHeader(Colors color = Colors::LightBlue);
void PopStyleHeader();
void PushStyleHeader(const ImVec4& color);
void PushStyleHeader(Colors color = Colors::LightBlue);
void PopStyleHeader();
void Spacer(float height = 0.0f);
void Separator(bool padTop = true, bool padBottom = true, float extraVerticalTopPadding = 0.0f,
void Spacer(float height = 0.0f);
void Separator(bool padTop = true, bool padBottom = true, float extraVerticalTopPadding = 0.0f,
float extraVerticalBottomPadding = 0.0f);
float CalcComboWidth(const char* preview_value, ImGuiComboFlags flags);
float CalcComboWidth(const char* preview_value, ImGuiComboFlags flags);
template <typename T>
bool Combobox(const char* label, T* value, const std::unordered_map<T, const char*>& comboMap, const ComboboxOptions& options = {}) {
template <typename T>
bool Combobox(const char* label, T* value, const std::unordered_map<T, const char*>& comboMap,
const ComboboxOptions& options = {}) {
bool dirty = false;
float startX = ImGui::GetCursorPosX();
std::string invisibleLabelStr = "##" + std::string(label);
@ -593,17 +583,19 @@ namespace UIWidgets {
PopStyleCombobox();
ImGui::EndDisabled();
ImGui::EndGroup();
if (options.disabled && ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenDisabled) && !Ship_IsCStringEmpty(options.disabledTooltip)) {
if (options.disabled && ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenDisabled) &&
!Ship_IsCStringEmpty(options.disabledTooltip)) {
ImGui::SetTooltip("%s", WrappedText(options.disabledTooltip).c_str());
} else if (ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenDisabled) && !Ship_IsCStringEmpty(options.tooltip)) {
ImGui::SetTooltip("%s", WrappedText(options.tooltip).c_str());
}
ImGui::PopID();
return dirty;
}
}
template <typename T = size_t>
bool Combobox(const char* label, T* value, const std::vector<const char*>& comboVector, const ComboboxOptions& options = {}) {
template <typename T = size_t>
bool Combobox(const char* label, T* value, const std::vector<const char*>& comboVector,
const ComboboxOptions& options = {}) {
bool dirty = false;
size_t currentValueIndex = static_cast<size_t>(*value);
std::string invisibleLabelStr = "##" + std::string(label);
@ -675,17 +667,19 @@ namespace UIWidgets {
PopStyleCombobox();
ImGui::EndDisabled();
ImGui::EndGroup();
if (options.disabled && ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenDisabled) && !Ship_IsCStringEmpty(options.disabledTooltip)) {
if (options.disabled && ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenDisabled) &&
!Ship_IsCStringEmpty(options.disabledTooltip)) {
ImGui::SetTooltip("%s", WrappedText(options.disabledTooltip).c_str());
} else if (ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenDisabled) && !Ship_IsCStringEmpty(options.tooltip)) {
ImGui::SetTooltip("%s", WrappedText(options.tooltip).c_str());
}
ImGui::PopID();
return dirty;
}
}
template <typename T = size_t>
bool Combobox(const char* label, T* value, const std::vector<std::string>& comboVector, const ComboboxOptions& options = {}) {
template <typename T = size_t>
bool Combobox(const char* label, T* value, const std::vector<std::string>& comboVector,
const ComboboxOptions& options = {}) {
bool dirty = false;
size_t currentValueIndex = static_cast<size_t>(*value);
std::string invisibleLabelStr = "##" + std::string(label);
@ -747,7 +741,8 @@ namespace UIWidgets {
ImGui::SameLine();
ImGui::Text("%s", label);
} else if (options.labelPosition == LabelPositions::Far) {
float width = ImGui::CalcTextSize(comboVector.at(*value).c_str()).x + ImGui::GetStyle().FramePadding.x * 2;
float width =
ImGui::CalcTextSize(comboVector.at(*value).c_str()).x + ImGui::GetStyle().FramePadding.x * 2;
ImGui::SameLine(ImGui::GetContentRegionAvail().x - width);
ImGui::Text("%s", label);
}
@ -757,17 +752,18 @@ namespace UIWidgets {
PopStyleCombobox();
ImGui::EndDisabled();
ImGui::EndGroup();
if (options.disabled && ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenDisabled) && !Ship_IsCStringEmpty(options.disabledTooltip)) {
if (options.disabled && ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenDisabled) &&
!Ship_IsCStringEmpty(options.disabledTooltip)) {
ImGui::SetTooltip("%s", WrappedText(options.disabledTooltip).c_str());
} else if (ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenDisabled) && !Ship_IsCStringEmpty(options.tooltip)) {
ImGui::SetTooltip("%s", WrappedText(options.tooltip).c_str());
}
ImGui::PopID();
return dirty;
}
}
template <typename T = size_t, size_t N>
bool Combobox(const char* label, T* value, const char* (&comboArray)[N], const ComboboxOptions& options = {}) {
template <typename T = size_t, size_t N>
bool Combobox(const char* label, T* value, const char* (&comboArray)[N], const ComboboxOptions& options = {}) {
bool dirty = false;
size_t currentValueIndex = static_cast<size_t>(*value);
if (currentValueIndex >= N) {
@ -841,17 +837,19 @@ namespace UIWidgets {
PopStyleCombobox();
ImGui::EndDisabled();
ImGui::EndGroup();
if (options.disabled && ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenDisabled) && !Ship_IsCStringEmpty(options.disabledTooltip)) {
if (options.disabled && ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenDisabled) &&
!Ship_IsCStringEmpty(options.disabledTooltip)) {
ImGui::SetTooltip("%s", WrappedText(options.disabledTooltip).c_str());
} else if (ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenDisabled) && !Ship_IsCStringEmpty(options.tooltip)) {
ImGui::SetTooltip("%s", WrappedText(options.tooltip).c_str());
}
ImGui::PopID();
return dirty;
}
}
template <typename T = int32_t>
bool CVarCombobox(const char* label, const char* cvarName, const std::unordered_map<T, const char*>& comboMap, const ComboboxOptions& options = {}) {
template <typename T = int32_t>
bool CVarCombobox(const char* label, const char* cvarName, const std::unordered_map<T, const char*>& comboMap,
const ComboboxOptions& options = {}) {
bool dirty = false;
int32_t value = CVarGetInteger(cvarName, options.defaultIndex);
if (Combobox<T>(label, &value, comboMap, options)) {
@ -861,10 +859,11 @@ namespace UIWidgets {
dirty = true;
}
return dirty;
}
}
template <typename T = int32_t>
bool CVarCombobox(const char* label, const char* cvarName, const std::vector<const char*>& comboVector, const ComboboxOptions& options = {}) {
template <typename T = int32_t>
bool CVarCombobox(const char* label, const char* cvarName, const std::vector<const char*>& comboVector,
const ComboboxOptions& options = {}) {
bool dirty = false;
int32_t value = CVarGetInteger(cvarName, options.defaultIndex);
if (Combobox<T>(label, &value, comboVector, options)) {
@ -874,10 +873,11 @@ namespace UIWidgets {
dirty = true;
}
return dirty;
}
}
template <typename T = int32_t, size_t N>
bool CVarCombobox(const char* label, const char* cvarName, const char* (&comboArray)[N], const ComboboxOptions& options = {}) {
template <typename T = int32_t, size_t N>
bool CVarCombobox(const char* label, const char* cvarName, const char* (&comboArray)[N],
const ComboboxOptions& options = {}) {
bool dirty = false;
int32_t value = CVarGetInteger(cvarName, options.defaultIndex);
if (Combobox<T>(label, &value, comboArray, options)) {
@ -887,30 +887,32 @@ namespace UIWidgets {
dirty = true;
}
return dirty;
}
void PushStyleSlider(Colors color = Colors::LightBlue);
void PopStyleSlider();
bool SliderInt(const char* label, int32_t* value, const IntSliderOptions& options = {});
bool CVarSliderInt(const char* label, const char* cvarName, const IntSliderOptions& options = {});
bool SliderFloat(const char* label, float* value, const FloatSliderOptions& options = {});
bool CVarSliderFloat(const char* label, const char* cvarName, const FloatSliderOptions& options = {});
bool InputString(const char* label, std::string* value, const InputOptions& options = {});
bool CVarInputString(const char* label, const char* cvarName, const InputOptions& options = {});
bool InputInt(const char* label, int32_t* value, const InputOptions& options = {});
bool CVarInputInt(const char* label, const char* cvarName, const InputOptions& options = {});
bool CVarColorPicker(const char* label, const char* cvarName, Color_RGBA8 defaultColor, bool hasAlpha = false, uint8_t modifiers = 0, UIWidgets::Colors themeColor = UIWidgets::Colors::LightBlue);
bool RadioButton(const char* label, bool active);
bool CVarRadioButton(const char* text, const char* cvarName, int32_t id, const RadioButtonsOptions& options);
bool StateButton(const char* str_id, const char* label, ImVec2 size, UIWidgets::ButtonOptions options, ImGuiButtonFlags flags = ImGuiButtonFlags_None);
void DrawFlagArray32(const std::string& name, uint32_t& flags, Colors color = Colors::LightBlue);
void DrawFlagArray16(const std::string& name, uint16_t& flags, Colors color = Colors::LightBlue);
void DrawFlagArray8(const std::string& name, uint8_t& flags, Colors color = Colors::LightBlue);
void DrawFlagArray8Mask(const std::string& name, uint8_t& flags, Colors color = Colors::LightBlue);
void InsertHelpHoverText(const std::string& text);
void InsertHelpHoverText(const char* text);
}
void PushStyleSlider(Colors color = Colors::LightBlue);
void PopStyleSlider();
bool SliderInt(const char* label, int32_t* value, const IntSliderOptions& options = {});
bool CVarSliderInt(const char* label, const char* cvarName, const IntSliderOptions& options = {});
bool SliderFloat(const char* label, float* value, const FloatSliderOptions& options = {});
bool CVarSliderFloat(const char* label, const char* cvarName, const FloatSliderOptions& options = {});
bool InputString(const char* label, std::string* value, const InputOptions& options = {});
bool CVarInputString(const char* label, const char* cvarName, const InputOptions& options = {});
bool InputInt(const char* label, int32_t* value, const InputOptions& options = {});
bool CVarInputInt(const char* label, const char* cvarName, const InputOptions& options = {});
bool CVarColorPicker(const char* label, const char* cvarName, Color_RGBA8 defaultColor, bool hasAlpha = false,
uint8_t modifiers = 0, UIWidgets::Colors themeColor = UIWidgets::Colors::LightBlue);
bool RadioButton(const char* label, bool active);
bool CVarRadioButton(const char* text, const char* cvarName, int32_t id, const RadioButtonsOptions& options);
bool StateButton(const char* str_id, const char* label, ImVec2 size, UIWidgets::ButtonOptions options,
ImGuiButtonFlags flags = ImGuiButtonFlags_None);
void DrawFlagArray32(const std::string& name, uint32_t& flags, Colors color = Colors::LightBlue);
void DrawFlagArray16(const std::string& name, uint16_t& flags, Colors color = Colors::LightBlue);
void DrawFlagArray8(const std::string& name, uint8_t& flags, Colors color = Colors::LightBlue);
void DrawFlagArray8Mask(const std::string& name, uint8_t& flags, Colors color = Colors::LightBlue);
void InsertHelpHoverText(const std::string& text);
void InsertHelpHoverText(const char* text);
} // namespace UIWidgets
ImVec4 GetRandomValue();
Color_RGBA8 RGBA8FromVec(ImVec4 vec);