#pragma once #include #include #include #include #include #include "Text.hh" #include "Types.hh" class Client; template struct ChoiceSearchConfigT { U32T disabled = 1; // 0 = enabled, 1 = disabled. Unused in command C3 struct Entry { U16T parent_choice_id = 0; U16T choice_id = 0; } __packed_ws__(Entry, 4); parray entries; int32_t get_setting(uint16_t parent_choice_id) const { for (size_t z = 0; z < this->entries.size(); z++) { if (this->entries[z].parent_choice_id == parent_choice_id) { return this->entries[z].choice_id; } } return -1; } operator ChoiceSearchConfigT() const { ChoiceSearchConfigT ret; ret.disabled = this->disabled; for (size_t z = 0; z < this->entries.size(); z++) { auto& ret_e = ret.entries[z]; const auto& this_e = this->entries[z]; ret_e.parent_choice_id = this_e.parent_choice_id; ret_e.choice_id = this_e.choice_id; } return ret; } } __attribute__((packed)); using ChoiceSearchConfig = ChoiceSearchConfigT; using ChoiceSearchConfigBE = ChoiceSearchConfigT; check_struct_size(ChoiceSearchConfig, 0x18); check_struct_size(ChoiceSearchConfigBE, 0x18); struct ChoiceSearchCategory { struct Choice { uint16_t id; const char* name; }; uint16_t id; const char* name; std::vector choices; std::function searcher_c, std::shared_ptr target_c, uint16_t choice_id)> client_matches; }; extern const std::vector CHOICE_SEARCH_CATEGORIES;