diff options
| author | Max Roncace <me@caseif.net> | 2026-02-18 01:58:52 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-02-17 22:58:52 -0800 |
| commit | a790efafc526f79a79fad38186335d222a215cb5 (patch) | |
| tree | 963dadd351a6aebd60f4a87d03ef32fe3bd10762 /include/d | |
| parent | 34ea82dd28e74bb375d0ace2cf6aab94da9de569 (diff) | |
d_cursor_mng mostly matching (#3101)
Diffstat (limited to 'include/d')
| -rw-r--r-- | include/d/d_cc_s.h | 4 | ||||
| -rw-r--r-- | include/d/d_cursor_mng.h | 116 |
2 files changed, 120 insertions, 0 deletions
diff --git a/include/d/d_cc_s.h b/include/d/d_cc_s.h index 2f9b475f70..dbd3c18285 100644 --- a/include/d/d_cc_s.h +++ b/include/d/d_cc_s.h @@ -61,6 +61,10 @@ public: void ChkActor(fopAc_ac_c*); +#if PLATFORM_WII + BOOL ChkLine(cXyz&, cXyz&, f32, fopAc_ac_c**); +#endif + static bool m_mtrl_hit_tbl[64]; // /* 0x0000 */ cCcS mCCcS; diff --git a/include/d/d_cursor_mng.h b/include/d/d_cursor_mng.h index 459d747ffa..d8a84eb381 100644 --- a/include/d/d_cursor_mng.h +++ b/include/d/d_cursor_mng.h @@ -1,9 +1,125 @@ #ifndef D_CURSOR_MNG_H #define D_CURSOR_MNG_H +#include "JSystem/J2DGraph/J2DScreen.h" +#include "m_Do/m_Do_graphic.h" #include "m_Re/m_Re_controller_pad.h" // TODO: putting this here until a more appropriate place is found extern u8 data_8053a730; +class dCsr_mng_c { + struct csr_c; + + struct node_c : mDoGph_gInf_c::csr_c { + BOOL set(u8 i_priority, u8, u16 i_mask); + + /* 0x04 */ u8 m_priority; + /* 0x05 */ u8 field_0x05; + /* 0x06 */ u16 m_mask; + /* 0x08 */ node_c* m_prev; + /* 0x0C */ node_c* m_next; + /* 0x10 */ int m_actor_id; + /* 0x14 */ csr_c* m_csr; + /* 0x18 */ node_c* m_pointed_obj; + }; + + struct obj_c : node_c { + }; + + struct list_c { + list_c() : m_root(NULL) { + } + + virtual ~list_c(void) {} + void entry(node_c* i_node); + node_c* release(node_c* i_node); + node_c* release(u16 i_mask); + BOOL isEntry(const node_c* i_node) const; + + /* 0x04 */ node_c* m_root; + }; + + struct bloObj_c { + struct paneObj_c { + paneObj_c(void) { + m_handle = NULL; + m_min_x = 0; + m_min_y = 0; + m_max_x = 0; + m_max_y = 0; + } + virtual ~paneObj_c(void) {} + + /* 0x04 */ J2DPane* m_handle; + /* 0x08 */ s16 m_min_x; + /* 0x0A */ s16 m_min_y; + /* 0x0C */ s16 m_max_x; + /* 0x0E */ s16 m_max_y; + }; + + bloObj_c() { + m_panes = new paneObj_c[1]; + m_screen = 0; + } + + virtual ~bloObj_c(void); + virtual u32 signature(void) const { + return 0x626c6f20; + } + virtual BOOL isInside(s16 i_x, s16 i_y); + BOOL create(J2DScreen* i_screen, u16 i_mask, u8 i_priority, u8); + void calc(void); + void calcPaneObjNum(J2DPane* i_pane); + void createPaneObj(paneObj_c** i_panes, J2DPane* i_pane); + + /* 0x04 */ u8 field_0x04[0x10 - 0x4]; + /* 0x10 */ J2DScreen* m_screen; + /* 0x14 */ paneObj_c* m_panes; + /* 0x18 */ u16 m_pane_num; + /* 0x1A */ u8 m_is_calc; + /* 0x1C */ J2DPane* m_pane_handle; + }; + + struct ccObj_c : node_c { + virtual ~ccObj_c(void); + virtual int signature(void) const { + return 'cc '; + } + virtual BOOL isInside(s16, s16); + void set(u16, u8, u8); + }; + + struct csr_c : node_c { + virtual ~csr_c(void); + BOOL set(mDoGph_gInf_c::csr_c* i_csr, u16, u8, u8); + }; + +private: + dCsr_mng_c() : is_csr_on(true) { + } + + void update_(void); + void releaseCsr_(csr_c* i_csr); + void insideObjReleaseCheck_(void); + +public: + static void create(void); + static void update(void); + static void entryCsr(csr_c* i_csr); + static void releaseCsr(csr_c* i_csr); + static void entryObj(obj_c* i_obj); + static void releaseObj(obj_c* i_obj); + static void releaseObj(u16 i_mask); + static void onCsr(void); + static void offCsr(void); + + static dCsr_mng_c* m_myObj; + +private: + /* 0x00 */ list_c m_csr_list; + /* 0x08 */ list_c m_obj_list; + /* 0x10 */ bool is_csr_on; +}; + #endif /* D_CURSOR_MNG_H */ |
