diff options
| author | Luke Street <luke@street.dev> | 2026-03-01 15:35:36 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-03-01 14:35:36 -0800 |
| commit | 9649319ec4926457ef85e6094f8207474c977c2d (patch) | |
| tree | 1c5cd4c7cc4c1aee03f28921213da47f2775444d /libs/JSystem/src/JAWExtSystem/JAWExtSystem.cpp | |
| parent | 6e149819e13b1f70ecbf8a4c66b030c17ffed2bb (diff) | |
Reorganize library code into `libs/` (#3119)
* Reorganize files into libs/{dolphin,JSystem,PowerPC_EABI_Support,revolution,TRK_MINNOW_DOLPHIN}
* Update configure.py and project.py for new libs structure
* Refactor `#include <dolphin/x.h>` -> `<x.h>`
* Remove `__REVOLUTION_SDK__` forwards from dolphin
* Fix dolphin/ references in revolution
* Wrap `#include <dolphin.h>` in `!__REVOLUTION_SDK__`
* Always build TRK against dolphin headers
* Resolve revolution SDK header resolution issues
Diffstat (limited to 'libs/JSystem/src/JAWExtSystem/JAWExtSystem.cpp')
| -rw-r--r-- | libs/JSystem/src/JAWExtSystem/JAWExtSystem.cpp | 166 |
1 files changed, 166 insertions, 0 deletions
diff --git a/libs/JSystem/src/JAWExtSystem/JAWExtSystem.cpp b/libs/JSystem/src/JAWExtSystem/JAWExtSystem.cpp new file mode 100644 index 0000000000..9495148ece --- /dev/null +++ b/libs/JSystem/src/JAWExtSystem/JAWExtSystem.cpp @@ -0,0 +1,166 @@ +#include "JSystem/JSystem.h" // IWYU pragma: keep + +#include "JSystem/JAWExtSystem/JAWExtSystem.h" +#include "JSystem/J2DGraph/J2DOrthoGraph.h" +#include "JSystem/JAWExtSystem/JAWGraphContext.h" +#include "JSystem/JAWExtSystem/JAWWindow.h" +#include "JSystem/JUtility/JUTGamePad.h" +#include <algorithm> + +JGadget::TList<JAWWindow*> JAWExtSystem::sPage[128]; +JAWExtSystem::TSystemInterface JAWExtSystem::sInterface; +s32 JAWExtSystem::sCurrentPage = ARRAY_SIZE(sPage) - 1; +u8 JAWExtSystem::lbl_80748E44; + +BOOL JAWExtSystem::registWindow(u32 param_1, JAWWindow* param_2, int param_3, int param_4) { + TCurrentHeap heap(sInterface); + if (param_1 >= ARRAY_SIZE(sPage)) { + return FALSE; + } + param_2->move(param_3, param_4); + sPage[param_1].push_back(param_2); + if (sCurrentPage > param_1) { + sCurrentPage = param_1; + } + return TRUE; +} + +BOOL JAWExtSystem::destroyWindow(u32 param_1, JAWWindow* param_2) { + TCurrentHeap heap(sInterface); + if (param_1 >= ARRAY_SIZE(sPage)) { + return FALSE; + } + JGadget::TList<JAWWindow*>* page = &sPage[param_1]; + JGadget::TList<JAWWindow*>::iterator it = std::find(page->begin(), page->end(), param_2); + if (it == page->end()) { + return FALSE; + } + page->erase(it); + return TRUE; +} + +void JAWExtSystem::nextPage() { + int page = sCurrentPage; + do { + sCurrentPage++; + if (sCurrentPage >= ARRAY_SIZE(sPage)) { + sCurrentPage = 0; + } + if (page == sCurrentPage) { + break; + } + } while (sPage[sCurrentPage].empty()); +} + +void JAWExtSystem::prevPage() { + int page = sCurrentPage; + do { + sCurrentPage--; + if (sCurrentPage < 0) { + sCurrentPage = ARRAY_SIZE(sPage) - 1; + } + if (page == sCurrentPage) { + break; + } + } while (sPage[sCurrentPage].empty()); +} + +void JAWExtSystem::nextWindow() { + JGadget::TList<JAWWindow*>* page = &sPage[sCurrentPage]; + JGadget::TList<JAWWindow*>::iterator begin = page->begin(); + if (begin == page->end()) { + return; + } + JAWWindow* window = *begin; + page->erase(begin); + page->push_back(window); +} + +void JAWExtSystem::prevWindow() { + JGadget::TList<JAWWindow*>* page = &sPage[sCurrentPage]; + JGadget::TList<JAWWindow*>::iterator end = page->end(); + end--; + if (end == page->end()) { + return; + } + JAWWindow* window = *end; + page->erase(end); + page->push_front(window); +} + +void JAWExtSystem::draw() { + TCurrentHeap heap(sInterface); + if (!JAWGraphContext::lbl_8074CD30) { + return; + } + J2DOrthoGraph ortho(0.0f, 0.0f, 640.0f, 480.0f, -1.0f, 1.0f); + ortho.setOrtho(0.0f, -20.0f, 640.0f, 520.0f, -1.0, 1.0f); + ortho.setPort(); + JGadget::TList<JAWWindow*>* page = &sPage[sCurrentPage]; + JGadget::TIterator_reverse<JGadget::TList<JAWWindow*>::iterator> it; + for (it = page->rbegin(); it != page->rend(); it++) { + JAWWindow** window = &*it; + (*window)->initIf(); + (*window)->setAlpha(lbl_80748E44); + (*window)->draw(0, 0, &ortho); + } + for (int i = 0; i < ARRAY_SIZE(sPage); i++) { + JGadget::TList<JAWWindow*>* page = &sPage[i]; + JGadget::TIterator_reverse<JGadget::TList<JAWWindow*>::iterator> it; + for (it = page->rbegin(); it != page->rend(); it++) { + JAWWindow** window = &*it; + (*window)->frameWork(); + } + } + GXSetScissor(0, 0, 640, 480); +} + +void JAWExtSystem::padProc(const JUTGamePad& pad) { + TCurrentHeap heap(sInterface); + if (pad.getAnalogR() && pad.testTrigger(PAD_BUTTON_MENU)) { + JAWGraphContext::lbl_8074CD30 ^= true; + } + if (!JAWGraphContext::lbl_8074CD30) { + return; + } + JGadget::TList<JAWWindow*>* page = &sPage[sCurrentPage]; + JGadget::TList<JAWWindow*>::iterator begin = page->begin(); + if (begin == page->end()) { + return; + } + JAWWindow* window = *begin; + if (pad.getAnalogR()) { + f32 f31 = pad.getAnalogL() * 0.1f + 8.0f; + int r25 = f31 * pad.getMainStickX(); + int r28 = -int(f31 * pad.getMainStickY()); + if (pad.testButton(PAD_BUTTON_X)) { + window->addSize(r25, r28); + } else if (pad.testButton(PAD_BUTTON_B)) { + int r29 = lbl_80748E44; + r29 += (r28 > 0 ? -2 : r28 < 0 ? 2 : 0) * (pad.getAnalogL() ? 2 : 1); + if (r29 < 0) { + r29 = 0; + } + if (r29 >= 256) { + r29 = 255; + } + lbl_80748E44 = r29; + } else { + window->addPosition(r25, r28); + } + if (pad.testTrigger(PAD_BUTTON_RIGHT)) { + nextPage(); + } + if (pad.testTrigger(PAD_BUTTON_LEFT)) { + prevPage(); + } + if (pad.testTrigger(PAD_BUTTON_UP)) { + prevWindow(); + } + if (pad.testTrigger(PAD_BUTTON_DOWN)) { + nextWindow(); + } + } else { + window->padProc(pad); + } +} |
