mirror of
https://github.com/izzy2lost/2ship2harkinian-Android.git
synced 2026-06-19 01:20:08 -07:00
Item tracker (#707)
* Core tracker code mostly done. * Format * Clean up enums. * Format * Header cleanup * Update * use CVars * format * Add editor to modern menu * format * Fix item tracker cvar loading/saving and add item tracker button for modern menu * update button label --------- Co-authored-by: Archez <archez39@me.com>
This commit is contained in:
@@ -21,6 +21,9 @@
|
||||
#include "include/global.h"
|
||||
#include "include/z64audio.h"
|
||||
|
||||
#include "Enhancements/Trackers/ItemTracker.h"
|
||||
#include "Enhancements/Trackers/ItemTrackerSettings.h"
|
||||
|
||||
namespace BenGui {
|
||||
// MARK: - Delegates
|
||||
|
||||
@@ -38,6 +41,8 @@ std::shared_ptr<EventLogWindow> mEventLogWindow;
|
||||
std::shared_ptr<BenMenu> mBenMenu;
|
||||
std::shared_ptr<BenInputEditorWindow> mBenInputEditorWindow;
|
||||
std::shared_ptr<Notification::Window> mNotificationWindow;
|
||||
std::shared_ptr<ItemTrackerWindow> mItemTrackerWindow;
|
||||
std::shared_ptr<ItemTrackerSettingsWindow> mItemTrackerSettingsWindow;
|
||||
|
||||
void SetupGuiElements() {
|
||||
auto gui = Ship::Context::GetInstance()->GetWindow()->GetGui();
|
||||
@@ -94,6 +99,13 @@ void SetupGuiElements() {
|
||||
|
||||
mEventLogWindow = std::make_shared<EventLogWindow>("gWindows.EventLog", "Event Log", ImVec2(520, 600));
|
||||
gui->AddGuiWindow(mEventLogWindow);
|
||||
|
||||
mItemTrackerWindow = std::make_shared<ItemTrackerWindow>("gWindows.ItemTracker", "Item Tracker");
|
||||
gui->AddGuiWindow(mItemTrackerWindow);
|
||||
|
||||
mItemTrackerSettingsWindow = std::make_shared<ItemTrackerSettingsWindow>("gWindows.ItemTrackerSettings",
|
||||
"Item Tracker Settings", ImVec2(800, 400));
|
||||
gui->AddGuiWindow(mItemTrackerSettingsWindow);
|
||||
gui->SetPadBtnTogglesMenu();
|
||||
|
||||
mNotificationWindow = std::make_shared<Notification::Window>("gWindows.Notifications", "Notifications Window");
|
||||
@@ -102,6 +114,9 @@ void SetupGuiElements() {
|
||||
}
|
||||
|
||||
void Destroy() {
|
||||
auto gui = Ship::Context::GetInstance()->GetWindow()->GetGui();
|
||||
|
||||
gui->RemoveAllGuiWindows();
|
||||
mBenMenuBar = nullptr;
|
||||
mBenMenu = nullptr;
|
||||
mStatsWindow = nullptr;
|
||||
@@ -111,9 +126,10 @@ void Destroy() {
|
||||
mCollisionViewerWindow = nullptr;
|
||||
mEventLogWindow = nullptr;
|
||||
mNotificationWindow = nullptr;
|
||||
|
||||
mSaveEditorWindow = nullptr;
|
||||
mHudEditorWindow = nullptr;
|
||||
mActorViewerWindow = nullptr;
|
||||
mItemTrackerWindow = nullptr;
|
||||
mItemTrackerSettingsWindow = nullptr;
|
||||
}
|
||||
} // namespace BenGui
|
||||
|
||||
@@ -12,6 +12,9 @@
|
||||
#include "2s2h/DeveloperTools/DeveloperTools.h"
|
||||
#include "HudEditor.h"
|
||||
|
||||
#include "2s2h/Enhancements/Trackers/ItemTracker.h"
|
||||
#include "2s2h/Enhancements/Trackers/ItemTrackerSettings.h"
|
||||
|
||||
extern "C" {
|
||||
#include "z64.h"
|
||||
#include "functions.h"
|
||||
@@ -345,6 +348,8 @@ void DrawSettingsMenu() {
|
||||
}
|
||||
|
||||
extern std::shared_ptr<HudEditorWindow> mHudEditorWindow;
|
||||
extern std::shared_ptr<ItemTrackerWindow> mItemTrackerWindow;
|
||||
extern std::shared_ptr<ItemTrackerSettingsWindow> mItemTrackerSettingsWindow;
|
||||
|
||||
void DrawEnhancementsMenu() {
|
||||
if (UIWidgets::BeginMenu("Enhancements")) {
|
||||
@@ -799,6 +804,15 @@ void DrawEnhancementsMenu() {
|
||||
{ .tooltip = "Enables the Hud Editor window, allowing you to edit your hud" });
|
||||
}
|
||||
|
||||
if (mItemTrackerWindow) {
|
||||
UIWidgets::WindowButton("Item Tracker", "gWindows.ItemTracker", mItemTrackerWindow);
|
||||
}
|
||||
|
||||
if (mItemTrackerSettingsWindow) {
|
||||
UIWidgets::WindowButton("Item Tracker Settings", "gWindows.ItemTrackerSettings",
|
||||
mItemTrackerSettingsWindow);
|
||||
}
|
||||
|
||||
ImGui::EndMenu();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1424,6 +1424,15 @@ void AddEnhancements() {
|
||||
"Enables the HUD Editor window, allowing you to modify your HUD",
|
||||
WIDGET_WINDOW_BUTTON,
|
||||
{ .size = UIWidgets::Sizes::Inline, .windowName = "HUD Editor" } } } } });
|
||||
enhancementsSidebar.push_back(
|
||||
{ "Item Tracker",
|
||||
1,
|
||||
{ // Item Tracker Settings
|
||||
{ { "Popout Item Tracker Settings",
|
||||
"gWindows.ItemTrackerSettings",
|
||||
"",
|
||||
WIDGET_WINDOW_BUTTON,
|
||||
{ .size = UIWidgets::Sizes::Inline, .windowName = "Item Tracker Settings" } } } } });
|
||||
}
|
||||
|
||||
void AddDevTools() {
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,82 @@
|
||||
#include "window/gui/Gui.h"
|
||||
#include "window/gui/GuiWindow.h"
|
||||
#include <array>
|
||||
|
||||
typedef enum class TrackerWindowType : uint8_t {
|
||||
Floating,
|
||||
Window,
|
||||
} TrackerWindowType;
|
||||
|
||||
typedef enum class ItemTrackerDisplayType : int8_t {
|
||||
Hidden,
|
||||
MainWindow,
|
||||
Seperate,
|
||||
} ItemTrackerDisplayType;
|
||||
|
||||
typedef enum {
|
||||
SECTION_INVENTORY,
|
||||
SECTION_MASKS,
|
||||
SECTION_SONGS,
|
||||
SECTION_DUNGEON,
|
||||
SECTION_MAX,
|
||||
} ItemTrackerSection;
|
||||
|
||||
typedef enum {
|
||||
DrawCurrent,
|
||||
DrawCurCapacity,
|
||||
DrawMaxCapacity,
|
||||
DrawCapacityMax,
|
||||
} ItemTrackerCapacityMode;
|
||||
|
||||
class ItemTrackerWindow : public Ship::GuiWindow {
|
||||
typedef struct AmmoInfo {
|
||||
uint8_t cur;
|
||||
uint8_t curCap;
|
||||
uint8_t maxCap;
|
||||
} AmmoInfo;
|
||||
|
||||
public:
|
||||
using GuiWindow::GuiWindow;
|
||||
~ItemTrackerWindow();
|
||||
void Draw() override;
|
||||
|
||||
ImVec4* GetBgColorPtr();
|
||||
float* GetIconSizePtr();
|
||||
float* GetIconSpacingPtr();
|
||||
float* GetTextSizePtr();
|
||||
float* GetTextOffsetPtr();
|
||||
TrackerWindowType* GetWindowTypePtr();
|
||||
bool* GetIsDraggablePtr();
|
||||
bool* GetOnlyShowPausedPtr();
|
||||
ItemTrackerDisplayType* GetDrawModePtr(ItemTrackerSection type);
|
||||
bool* GetCapacityModePtr(ItemTrackerCapacityMode mode);
|
||||
void LoadSettings();
|
||||
|
||||
protected:
|
||||
void InitElement() override;
|
||||
void DrawElement() override;
|
||||
void UpdateElement() override{};
|
||||
|
||||
private:
|
||||
void BeginFloatingWindows(const char* name, ImGuiWindowFlags flags = 0);
|
||||
void DrawItemsInRows(int columns = 6);
|
||||
int DrawItems(int columns, int startAt);
|
||||
int DrawMasks(int columns, int startAt);
|
||||
int DrawSongs(int columns, int startAt);
|
||||
void DrawNote(size_t songIndex, bool drawFaded);
|
||||
int DrawDungeonItemsVert(int columns, int startAt);
|
||||
void DrawAmmoCount(int itemId, const ImVec2& iconPos);
|
||||
bool HasAmmoCount(int itemId);
|
||||
AmmoInfo GetAmmoInfo(int itemId);
|
||||
|
||||
ImVec4 mBgColor;
|
||||
float mIconSize = 36.0f;
|
||||
float mIconSpacing = 12.0f;
|
||||
float mTextSize = 13.0f;
|
||||
float mTextOffset = 0.0f;
|
||||
TrackerWindowType mWindowType = TrackerWindowType::Floating;
|
||||
bool mIsDraggable = false;
|
||||
bool mOnlyDrawPaused = false;
|
||||
std::array<bool, DrawCapacityMax> mCapacityModes;
|
||||
std::array<ItemTrackerDisplayType, SECTION_MAX> mItemDrawModes;
|
||||
};
|
||||
@@ -0,0 +1,77 @@
|
||||
#include "ItemTrackerSettings.h"
|
||||
#include "ItemTracker.h"
|
||||
#include "../../BenGui/UIWidgets.hpp"
|
||||
|
||||
namespace BenGui {
|
||||
extern std::shared_ptr<ItemTrackerWindow> mItemTrackerWindow;
|
||||
}
|
||||
|
||||
using namespace BenGui;
|
||||
|
||||
void ItemTrackerSettingsWindow::UpdateElement() {
|
||||
}
|
||||
|
||||
void ItemTrackerSettingsWindow::InitElement() {
|
||||
}
|
||||
|
||||
static const char* windowTypes[2] = { "Floating", "Window" };
|
||||
static const char* displayTypes[3] = { "Hidden", "Main Window", "Separate" };
|
||||
static const char* displayModes[2] = { "Always", "Combo Button Hold" };
|
||||
|
||||
void ItemTrackerSettingsWindow::DrawElement() {
|
||||
ImGui::SetNextWindowSize(ImVec2(733, 472), ImGuiCond_FirstUseEver);
|
||||
const UIWidgets::FloatSliderOptions sliderOpts = { .format = "%.0f", .step = 1.0f };
|
||||
|
||||
if (!ImGui::BeginChild("Item Tracker Settings")) {
|
||||
ImGui::EndChild();
|
||||
return;
|
||||
}
|
||||
|
||||
UIWidgets::WindowButton("Show/Hide Item Tracker", "gWindows.ItemTracker", mItemTrackerWindow,
|
||||
{ .size = UIWidgets::Sizes::Inline });
|
||||
|
||||
ImGui::PushStyleVar(ImGuiStyleVar_CellPadding, { 8.0f, 8.0f });
|
||||
ImGui::BeginTable("itemTrackerSettingsTable", 2, ImGuiTableFlags_BordersH | ImGuiTableFlags_BordersV);
|
||||
ImGui::TableSetupColumn("General settings", ImGuiTableColumnFlags_WidthStretch, 200.0f);
|
||||
ImGui::TableSetupColumn("Section settings", ImGuiTableColumnFlags_WidthStretch, 200.0f);
|
||||
ImGui::TableHeadersRow();
|
||||
ImGui::TableNextRow();
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::Text("BG Color");
|
||||
ImGui::SameLine();
|
||||
|
||||
ImGui::PushItemWidth(ImGui::GetContentRegionAvail().x);
|
||||
|
||||
ImGui::ColorEdit4("BG Color", (float*)mItemTrackerWindow->GetBgColorPtr(),
|
||||
ImGuiColorEditFlags_AlphaPreview | ImGuiColorEditFlags_AlphaBar | ImGuiColorEditFlags_NoLabel);
|
||||
|
||||
UIWidgets::Combobox("Window Type", mItemTrackerWindow->GetWindowTypePtr(), windowTypes);
|
||||
UIWidgets::Checkbox("Enable Dragging", mItemTrackerWindow->GetIsDraggablePtr());
|
||||
UIWidgets::Checkbox("Only enable while paused", mItemTrackerWindow->GetOnlyShowPausedPtr());
|
||||
|
||||
UIWidgets::SliderFloat("Icon size : %.0fpx", mItemTrackerWindow->GetIconSizePtr(), 0.0f, 128.0f, sliderOpts);
|
||||
UIWidgets::SliderFloat("Icon margins : %.0fpx", mItemTrackerWindow->GetIconSpacingPtr(), -5.0f, 50.0f, sliderOpts);
|
||||
UIWidgets::SliderFloat("Text size : %.0fpx", mItemTrackerWindow->GetTextSizePtr(), 1.0f, 30.0f, sliderOpts);
|
||||
UIWidgets::SliderFloat("Text Offset : %0.fpx", mItemTrackerWindow->GetTextOffsetPtr(), 0.0f, 40.0f, sliderOpts);
|
||||
|
||||
ImGui::TableNextColumn();
|
||||
|
||||
UIWidgets::Combobox("Inventory", mItemTrackerWindow->GetDrawModePtr(SECTION_INVENTORY), displayTypes);
|
||||
UIWidgets::Combobox("Masks", mItemTrackerWindow->GetDrawModePtr(SECTION_MASKS), displayTypes);
|
||||
UIWidgets::Combobox("Songs", mItemTrackerWindow->GetDrawModePtr(SECTION_SONGS), displayTypes);
|
||||
UIWidgets::Combobox("Dungeon Items", mItemTrackerWindow->GetDrawModePtr(SECTION_DUNGEON), displayTypes);
|
||||
|
||||
UIWidgets::Checkbox("Draw Current Ammo",
|
||||
mItemTrackerWindow->GetCapacityModePtr(ItemTrackerCapacityMode::DrawCurrent));
|
||||
|
||||
UIWidgets::Checkbox("Draw Current Capacity",
|
||||
mItemTrackerWindow->GetCapacityModePtr(ItemTrackerCapacityMode::DrawCurCapacity));
|
||||
|
||||
UIWidgets::Checkbox("Draw Max Capacity",
|
||||
mItemTrackerWindow->GetCapacityModePtr(ItemTrackerCapacityMode::DrawMaxCapacity));
|
||||
|
||||
ImGui::PopStyleVar(1);
|
||||
ImGui::EndTable();
|
||||
|
||||
ImGui::EndChild();
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
#include "window/gui/Gui.h"
|
||||
#include "window/gui/GuiWindow.h"
|
||||
|
||||
class ItemTrackerSettingsWindow : public Ship::GuiWindow {
|
||||
public:
|
||||
using GuiWindow::GuiWindow;
|
||||
|
||||
protected:
|
||||
void InitElement() override;
|
||||
void DrawElement() override;
|
||||
void UpdateElement() override;
|
||||
};
|
||||
Reference in New Issue
Block a user