diff options
| author | Star Rauchenberger <fefferburbia@gmail.com> | 2025-03-08 16:13:23 -0500 |
|---|---|---|
| committer | Star Rauchenberger <fefferburbia@gmail.com> | 2025-03-08 16:13:23 -0500 |
| commit | 5436dc4f12671d2605944bed03e1f8ab7853056c (patch) | |
| tree | 3fdd1348a988435e323fe3abfe134e1fab610e6a | |
| parent | 49c45e69febb321d6d5787f9056771bebfb01eec (diff) | |
| download | lingo-ap-tracker-5436dc4f12671d2605944bed03e1f8ab7853056c.tar.gz lingo-ap-tracker-5436dc4f12671d2605944bed03e1f8ab7853056c.tar.bz2 lingo-ap-tracker-5436dc4f12671d2605944bed03e1f8ab7853056c.zip | |
Added options pane
| -rw-r--r-- | CMakeLists.txt | 1 | ||||
| -rw-r--r-- | src/ap_state.cpp | 15 | ||||
| -rw-r--r-- | src/ap_state.h | 6 | ||||
| -rw-r--r-- | src/options_pane.cpp | 71 | ||||
| -rw-r--r-- | src/options_pane.h | 19 | ||||
| -rw-r--r-- | src/tracker_frame.cpp | 5 | ||||
| -rw-r--r-- | src/tracker_frame.h | 2 |
7 files changed, 119 insertions, 0 deletions
| diff --git a/CMakeLists.txt b/CMakeLists.txt index 5cd41d8..1904518 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt | |||
| @@ -57,6 +57,7 @@ set(SOURCE_FILES | |||
| 57 | "src/icons.cpp" | 57 | "src/icons.cpp" |
| 58 | "src/paintings_pane.cpp" | 58 | "src/paintings_pane.cpp" |
| 59 | "src/items_pane.cpp" | 59 | "src/items_pane.cpp" |
| 60 | "src/options_pane.cpp" | ||
| 60 | "vendor/whereami/whereami.c" | 61 | "vendor/whereami/whereami.c" |
| 61 | ) | 62 | ) |
| 62 | 63 | ||
| diff --git a/src/ap_state.cpp b/src/ap_state.cpp index 01ee065..c3e7f5b 100644 --- a/src/ap_state.cpp +++ b/src/ap_state.cpp | |||
| @@ -71,6 +71,7 @@ struct APState { | |||
| 71 | DoorShuffleMode door_shuffle_mode = kNO_DOORS; | 71 | DoorShuffleMode door_shuffle_mode = kNO_DOORS; |
| 72 | bool group_doors = false; | 72 | bool group_doors = false; |
| 73 | bool color_shuffle = false; | 73 | bool color_shuffle = false; |
| 74 | PanelShuffleMode panel_shuffle_mode = kNO_PANELS; | ||
| 74 | bool painting_shuffle = false; | 75 | bool painting_shuffle = false; |
| 75 | int mastery_requirement = 21; | 76 | int mastery_requirement = 21; |
| 76 | int level_2_requirement = 223; | 77 | int level_2_requirement = 223; |
| @@ -133,6 +134,7 @@ struct APState { | |||
| 133 | door_shuffle_mode = kNO_DOORS; | 134 | door_shuffle_mode = kNO_DOORS; |
| 134 | group_doors = false; | 135 | group_doors = false; |
| 135 | color_shuffle = false; | 136 | color_shuffle = false; |
| 137 | panel_shuffle_mode = kNO_PANELS; | ||
| 136 | painting_shuffle = false; | 138 | painting_shuffle = false; |
| 137 | painting_mapping.clear(); | 139 | painting_mapping.clear(); |
| 138 | painting_codomain.clear(); | 140 | painting_codomain.clear(); |
| @@ -469,6 +471,7 @@ struct APState { | |||
| 469 | } | 471 | } |
| 470 | } | 472 | } |
| 471 | color_shuffle = slot_data["shuffle_colors"].get<int>() == 1; | 473 | color_shuffle = slot_data["shuffle_colors"].get<int>() == 1; |
| 474 | panel_shuffle_mode = slot_data["shuffle_panels"].get<PanelShuffleMode>(); | ||
| 472 | painting_shuffle = slot_data["shuffle_paintings"].get<int>() == 1; | 475 | painting_shuffle = slot_data["shuffle_paintings"].get<int>() == 1; |
| 473 | mastery_requirement = slot_data["mastery_achievements"].get<int>(); | 476 | mastery_requirement = slot_data["mastery_achievements"].get<int>(); |
| 474 | level_2_requirement = slot_data["level_2_requirement"].get<int>(); | 477 | level_2_requirement = slot_data["level_2_requirement"].get<int>(); |
| @@ -762,6 +765,12 @@ int AP_GetLevel2Requirement() { | |||
| 762 | return GetState().level_2_requirement; | 765 | return GetState().level_2_requirement; |
| 763 | } | 766 | } |
| 764 | 767 | ||
| 768 | LocationChecks AP_GetLocationsChecks() { | ||
| 769 | std::lock_guard state_guard(GetState().state_mutex); | ||
| 770 | |||
| 771 | return GetState().location_checks; | ||
| 772 | } | ||
| 773 | |||
| 765 | bool AP_IsLocationVisible(int classification) { | 774 | bool AP_IsLocationVisible(int classification) { |
| 766 | std::lock_guard state_guard(GetState().state_mutex); | 775 | std::lock_guard state_guard(GetState().state_mutex); |
| 767 | 776 | ||
| @@ -789,6 +798,12 @@ bool AP_IsLocationVisible(int classification) { | |||
| 789 | return (world_state & classification); | 798 | return (world_state & classification); |
| 790 | } | 799 | } |
| 791 | 800 | ||
| 801 | PanelShuffleMode AP_GetPanelShuffleMode() { | ||
| 802 | std::lock_guard state_guard(GetState().state_mutex); | ||
| 803 | |||
| 804 | return GetState().panel_shuffle_mode; | ||
| 805 | } | ||
| 806 | |||
| 792 | VictoryCondition AP_GetVictoryCondition() { | 807 | VictoryCondition AP_GetVictoryCondition() { |
| 793 | std::lock_guard state_guard(GetState().state_mutex); | 808 | std::lock_guard state_guard(GetState().state_mutex); |
| 794 | 809 | ||
| diff --git a/src/ap_state.h b/src/ap_state.h index 8b8db03..298df8c 100644 --- a/src/ap_state.h +++ b/src/ap_state.h | |||
| @@ -26,6 +26,8 @@ enum LocationChecks { | |||
| 26 | kPANELSANITY = 2 | 26 | kPANELSANITY = 2 |
| 27 | }; | 27 | }; |
| 28 | 28 | ||
| 29 | enum PanelShuffleMode { kNO_PANELS = 0, kREARRANGE_PANELS = 1 }; | ||
| 30 | |||
| 29 | enum SunwarpAccess { | 31 | enum SunwarpAccess { |
| 30 | kSUNWARP_ACCESS_NORMAL = 0, | 32 | kSUNWARP_ACCESS_NORMAL = 0, |
| 31 | kSUNWARP_ACCESS_DISABLED = 1, | 33 | kSUNWARP_ACCESS_DISABLED = 1, |
| @@ -88,8 +90,12 @@ int AP_GetMasteryRequirement(); | |||
| 88 | 90 | ||
| 89 | int AP_GetLevel2Requirement(); | 91 | int AP_GetLevel2Requirement(); |
| 90 | 92 | ||
| 93 | LocationChecks AP_GetLocationsChecks(); | ||
| 94 | |||
| 91 | bool AP_IsLocationVisible(int classification); | 95 | bool AP_IsLocationVisible(int classification); |
| 92 | 96 | ||
| 97 | PanelShuffleMode AP_GetPanelShuffleMode(); | ||
| 98 | |||
| 93 | VictoryCondition AP_GetVictoryCondition(); | 99 | VictoryCondition AP_GetVictoryCondition(); |
| 94 | 100 | ||
| 95 | bool AP_HasAchievement(const std::string& achievement_name); | 101 | bool AP_HasAchievement(const std::string& achievement_name); |
| diff --git a/src/options_pane.cpp b/src/options_pane.cpp new file mode 100644 index 0000000..844e145 --- /dev/null +++ b/src/options_pane.cpp | |||
| @@ -0,0 +1,71 @@ | |||
| 1 | #include "options_pane.h" | ||
| 2 | |||
| 3 | #include "ap_state.h" | ||
| 4 | |||
| 5 | namespace { | ||
| 6 | |||
| 7 | const char* kDoorShuffleLabels[] = {"None", "Panels", "Doors"}; | ||
| 8 | const char* kLocationChecksLabels[] = {"Normal", "Reduced", "Insanity"}; | ||
| 9 | const char* kPanelShuffleLabels[] = {"None", "Rearrange"}; | ||
| 10 | const char* kVictoryConditionLabels[] = {"The End", "The Master", "Level 2", | ||
| 11 | "Pilgrimage"}; | ||
| 12 | const char* kSunwarpAccessLabels[] = {"Normal", "Disabled", "Unlock", | ||
| 13 | "Individual", "Progressive"}; | ||
| 14 | |||
| 15 | void AddRow(wxDataViewListCtrl* list, const std::string& text) { | ||
| 16 | wxVector<wxVariant> data; | ||
| 17 | data.push_back(wxVariant{text + ": "}); | ||
| 18 | data.push_back(wxVariant{""}); | ||
| 19 | list->AppendItem(data); | ||
| 20 | } | ||
| 21 | |||
| 22 | } // namespace | ||
| 23 | |||
| 24 | OptionsPane::OptionsPane(wxWindow* parent) | ||
| 25 | : wxDataViewListCtrl(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, | ||
| 26 | wxDV_ROW_LINES) { | ||
| 27 | AppendTextColumn("Name", wxDATAVIEW_CELL_INERT, wxCOL_WIDTH_AUTOSIZE); | ||
| 28 | AppendTextColumn("Value"); | ||
| 29 | AddRow(this, "Shuffle Doors"); | ||
| 30 | AddRow(this, "Group Doors"); | ||
| 31 | AddRow(this, "Location Checks"); | ||
| 32 | AddRow(this, "Shuffle Colors"); | ||
| 33 | AddRow(this, "Shuffle Panels"); | ||
| 34 | AddRow(this, "Shuffle Paintings"); | ||
| 35 | AddRow(this, "Victory Condition"); | ||
| 36 | AddRow(this, "Early Color Hallways"); | ||
| 37 | AddRow(this, "Shuffle Postgame"); | ||
| 38 | AddRow(this, "Enable Pilgrimage"); | ||
| 39 | AddRow(this, "Pilgrimage Roof Access"); | ||
| 40 | AddRow(this, "Pilgrimage Paintings"); | ||
| 41 | AddRow(this, "Sunwarp Access"); | ||
| 42 | AddRow(this, "Shuffle Sunwarps"); | ||
| 43 | AddRow(this, "Mastery Achievements"); | ||
| 44 | AddRow(this, "Level 2 Requirement"); | ||
| 45 | } | ||
| 46 | |||
| 47 | void OptionsPane::OnConnect() { | ||
| 48 | SetTextValue(kDoorShuffleLabels[static_cast<size_t>(AP_GetDoorShuffleMode())], | ||
| 49 | 0, 1); | ||
| 50 | SetTextValue(AP_AreDoorsGrouped() ? "Yes" : "No", 1, 1); | ||
| 51 | SetTextValue( | ||
| 52 | kLocationChecksLabels[static_cast<size_t>(AP_GetLocationsChecks())], 2, | ||
| 53 | 1); | ||
| 54 | SetTextValue(AP_IsColorShuffle() ? "Yes" : "No", 3, 1); | ||
| 55 | SetTextValue( | ||
| 56 | kPanelShuffleLabels[static_cast<size_t>(AP_GetPanelShuffleMode())], 4, 1); | ||
| 57 | SetTextValue(AP_IsPaintingShuffle() ? "Yes" : "No", 5, 1); | ||
| 58 | SetTextValue( | ||
| 59 | kVictoryConditionLabels[static_cast<size_t>(AP_GetVictoryCondition())], 6, | ||
| 60 | 1); | ||
| 61 | SetTextValue(AP_HasEarlyColorHallways() ? "Yes" : "No", 7, 1); | ||
| 62 | SetTextValue(AP_IsPostgameShuffle() ? "Yes" : "No", 8, 1); | ||
| 63 | SetTextValue(AP_IsPilgrimageEnabled() ? "Yes" : "No", 9, 1); | ||
| 64 | SetTextValue(AP_DoesPilgrimageAllowRoofAccess() ? "Yes" : "No", 10, 1); | ||
| 65 | SetTextValue(AP_DoesPilgrimageAllowPaintings() ? "Yes" : "No", 11, 1); | ||
| 66 | SetTextValue(kSunwarpAccessLabels[static_cast<size_t>(AP_GetSunwarpAccess())], | ||
| 67 | 12, 1); | ||
| 68 | SetTextValue(AP_IsSunwarpShuffle() ? "Yes" : "No", 13, 1); | ||
| 69 | SetTextValue(std::to_string(AP_GetMasteryRequirement()), 14, 1); | ||
| 70 | SetTextValue(std::to_string(AP_GetLevel2Requirement()), 15, 1); | ||
| 71 | } | ||
| diff --git a/src/options_pane.h b/src/options_pane.h new file mode 100644 index 0000000..e9df9f0 --- /dev/null +++ b/src/options_pane.h | |||
| @@ -0,0 +1,19 @@ | |||
| 1 | #ifndef OPTIONS_PANE_H_026A0EC0 | ||
| 2 | #define OPTIONS_PANE_H_026A0EC0 | ||
| 3 | |||
| 4 | #include <wx/wxprec.h> | ||
| 5 | |||
| 6 | #ifndef WX_PRECOMP | ||
| 7 | #include <wx/wx.h> | ||
| 8 | #endif | ||
| 9 | |||
| 10 | #include <wx/dataview.h> | ||
| 11 | |||
| 12 | class OptionsPane : public wxDataViewListCtrl { | ||
| 13 | public: | ||
| 14 | explicit OptionsPane(wxWindow* parent); | ||
| 15 | |||
| 16 | void OnConnect(); | ||
| 17 | }; | ||
| 18 | |||
| 19 | #endif /* end of include guard: OPTIONS_PANE_H_026A0EC0 */ | ||
| diff --git a/src/tracker_frame.cpp b/src/tracker_frame.cpp index 0ab043d..2e7a7d7 100644 --- a/src/tracker_frame.cpp +++ b/src/tracker_frame.cpp | |||
| @@ -18,6 +18,7 @@ | |||
| 18 | #include "ipc_dialog.h" | 18 | #include "ipc_dialog.h" |
| 19 | #include "ipc_state.h" | 19 | #include "ipc_state.h" |
| 20 | #include "items_pane.h" | 20 | #include "items_pane.h" |
| 21 | #include "options_pane.h" | ||
| 21 | #include "paintings_pane.h" | 22 | #include "paintings_pane.h" |
| 22 | #include "settings_dialog.h" | 23 | #include "settings_dialog.h" |
| 23 | #include "subway_map.h" | 24 | #include "subway_map.h" |
| @@ -127,6 +128,9 @@ TrackerFrame::TrackerFrame() | |||
| 127 | items_pane_ = new ItemsPane(choicebook); | 128 | items_pane_ = new ItemsPane(choicebook); |
| 128 | choicebook->AddPage(items_pane_, "Items"); | 129 | choicebook->AddPage(items_pane_, "Items"); |
| 129 | 130 | ||
| 131 | options_pane_ = new OptionsPane(choicebook); | ||
| 132 | choicebook->AddPage(options_pane_, "Options"); | ||
| 133 | |||
| 130 | paintings_pane_ = new PaintingsPane(choicebook); | 134 | paintings_pane_ = new PaintingsPane(choicebook); |
| 131 | choicebook->AddPage(paintings_pane_, "Paintings"); | 135 | choicebook->AddPage(paintings_pane_, "Paintings"); |
| 132 | 136 | ||
| @@ -301,6 +305,7 @@ void TrackerFrame::OnStateReset(wxCommandEvent &event) { | |||
| 301 | tracker_panel_->UpdateIndicators(); | 305 | tracker_panel_->UpdateIndicators(); |
| 302 | achievements_pane_->UpdateIndicators(); | 306 | achievements_pane_->UpdateIndicators(); |
| 303 | items_pane_->ResetIndicators(); | 307 | items_pane_->ResetIndicators(); |
| 308 | options_pane_->OnConnect(); | ||
| 304 | paintings_pane_->ResetIndicators(); | 309 | paintings_pane_->ResetIndicators(); |
| 305 | subway_map_->OnConnect(); | 310 | subway_map_->OnConnect(); |
| 306 | if (panels_panel_ != nullptr) { | 311 | if (panels_panel_ != nullptr) { |
| diff --git a/src/tracker_frame.h b/src/tracker_frame.h index e7a3958..3bf0753 100644 --- a/src/tracker_frame.h +++ b/src/tracker_frame.h | |||
| @@ -15,6 +15,7 @@ | |||
| 15 | 15 | ||
| 16 | class AchievementsPane; | 16 | class AchievementsPane; |
| 17 | class ItemsPane; | 17 | class ItemsPane; |
| 18 | class OptionsPane; | ||
| 18 | class PaintingsPane; | 19 | class PaintingsPane; |
| 19 | class SubwayMap; | 20 | class SubwayMap; |
| 20 | class TrackerPanel; | 21 | class TrackerPanel; |
| @@ -108,6 +109,7 @@ class TrackerFrame : public wxFrame { | |||
| 108 | TrackerPanel *tracker_panel_; | 109 | TrackerPanel *tracker_panel_; |
| 109 | AchievementsPane *achievements_pane_; | 110 | AchievementsPane *achievements_pane_; |
| 110 | ItemsPane *items_pane_; | 111 | ItemsPane *items_pane_; |
| 112 | OptionsPane *options_pane_; | ||
| 111 | PaintingsPane *paintings_pane_; | 113 | PaintingsPane *paintings_pane_; |
| 112 | SubwayMap *subway_map_; | 114 | SubwayMap *subway_map_; |
| 113 | TrackerPanel *panels_panel_ = nullptr; | 115 | TrackerPanel *panels_panel_ = nullptr; |
