sead
Loading...
Searching...
No Matches
seadControllerBase.h
Go to the documentation of this file.
1#ifndef SEAD_CONTROLLER_BASE_H_
2#define SEAD_CONTROLLER_BASE_H_
3
4#include <math/seadBoundBox.h>
5#include <math/seadVector.h>
6#include <prim/seadBitFlag.h>
7
8namespace sead {
9
11
13{
14public:
19
20public:
21 ControllerBase(s32 padBitMax, s32 leftStickCrossStartBit, s32 rightStickCrossStartBit, s32 touchKeyBit);
22
23 u32 getHoldMask() const { return mPadHold.getDirect(); }
24 u32 getTrigMask() const { return mPadTrig.getDirect(); }
25 u32 getReleaseMask() const { return mPadRelease.getDirect(); }
26 u32 getRepeatMask() const { return mPadRepeat.getDirect(); }
27
29 {
30 u32 trig = getTrigMask();
31 u32 repeat = getRepeatMask();
32 return repeat | trig;
33 }
34
35 u32 getPadHoldCount(s32 bit) const;
36
37 const Vector2f& getLeftStick() const { return mLeftStick; }
38 const Vector2f& getRightStick() const { return mRightStick; }
39 f32 getLeftAnalogTrigger() const { return mLeftAnalogTrigger; }
40 f32 getRightAnalogTrigger() const { return mRightAnalogTrigger; }
41
42 const Vector2f& getPointer() const
43 {
44 if (isPointerOn())
45 return mPointer;
46 else
47 return cInvalidPointer;
48 }
49
50 const Vector2i& getPointerPrev() const
51 {
52 if ((isPointerOn() && !isPointerOnNow()) || isPointerOffNow()) // This is something I came up with
53 return mPointerS32;
54 else
55 return cInvalidPointerS32;
56 }
57
58 bool isPointerOn() const { return mPointerFlag.isOn(cPointerOn); }
59 bool isPointerOnNow() const { return mPointerFlag.isOn(cPointerOnNow); }
60 bool isPointerOffNow() const { return mPointerFlag.isOn(cPointerOffNow); }
61 bool isPointerUnkFlag3() const { return mPointerFlag.isOn(cPointerUnkFlag3); }
62
63 bool isHold(u32 mask) const { return mask & getHoldMask(); }
64 bool isTrig(u32 mask) const { return mask & getTrigMask(); }
65 bool isHoldAll(u32 mask) const { return (mask & getHoldMask()) == mask; }
66 bool isRelease(u32 mask) const { return mask & getReleaseMask(); }
67 bool isRepeat(u32 mask) const { return mask & getRepeatMask(); }
68 bool isTrigWithRepeat(u32 mask) const { return mask & getTrigMaskWithRepeat(); }
69
70 void setPadRepeat(u32 mask, u8 delay_frame, u8 pulse_frame);
71
72 void setLeftStickCrossThreshold(f32 hold, f32 release);
73 void setRightStickCrossThreshold(f32 hold, f32 release);
74
75 void setPointerBound(const BoundBox2f& bound);
76 const BoundBox2f& getPointerBound() const { return mPointerBound; }
77
78protected:
79 bool isIdleBase_();
80 void setIdleBase_();
81 void setPointerWithBound_(bool is_on, bool touchkey_hold, const Vector2f& pos);
82 void updateDerivativeParams_(u32 prev_hold, bool prev_pointer_on);
83 u32 getStickHold_(u32 prev_hold, const Vector2f& stick, f32 hold_threshold, f32 release_threshold, s32 start_bit);
85
86 enum
87 {
89 };
90
92 {
93 cPointerOn = 1 << 0,
94 cPointerOnNow = 1 << 1,
97 };
98
99 enum
100 {
105 };
106
131
132 friend class ControllerWrapper;
133};
134#ifdef cafe
135static_assert(sizeof(ControllerBase) == 0x130, "sead::ControllerBase size mismatch");
136#endif // cafe
137
138} // namespace sead
139
140#endif // SEAD_CONTROLLER_BASE_H_
Definition seadControllerBase.h:13
const Vector2f & getRightStick() const
Definition seadControllerBase.h:38
void setIdleBase_()
Definition seadControllerBase.cpp:260
f32 getRightAnalogTrigger() const
Definition seadControllerBase.h:40
f32 mRightStickReleaseThreshold
Definition seadControllerBase.h:119
u32 getReleaseMask() const
Definition seadControllerBase.h:25
Vector2i mPointerS32
Definition seadControllerBase.h:111
f32 mLeftStickHoldThreshold
Definition seadControllerBase.h:116
void updateDerivativeParams_(u32 prev_hold, bool prev_pointer_on)
Definition seadControllerBase.cpp:88
bool isIdleBase_()
Definition seadControllerBase.cpp:250
s32 mRightStickCrossStartBit
Definition seadControllerBase.h:122
f32 mLeftAnalogTrigger
Definition seadControllerBase.h:129
@ cCrossDown
Definition seadControllerBase.h:102
@ cCrossUp
Definition seadControllerBase.h:101
@ cCrossLeft
Definition seadControllerBase.h:103
@ cCrossRight
Definition seadControllerBase.h:104
Vector2f mLeftStick
Definition seadControllerBase.h:127
u32 createStickCrossMask_()
Definition seadControllerBase.cpp:279
u32 getTrigMaskWithRepeat() const
Definition seadControllerBase.h:28
bool isTrigWithRepeat(u32 mask) const
Definition seadControllerBase.h:68
const Vector2f & getLeftStick() const
Definition seadControllerBase.h:37
static const Vector2f cInvalidPointer
Definition seadControllerBase.h:17
void setPadRepeat(u32 mask, u8 delay_frame, u8 pulse_frame)
Definition seadControllerBase.cpp:144
u32 getStickHold_(u32 prev_hold, const Vector2f &stick, f32 hold_threshold, f32 release_threshold, s32 start_bit)
Definition seadControllerBase.cpp:191
BitFlag32 mPadRelease
Definition seadControllerBase.h:108
u8 mPadRepeatDelays[cPadIdx_MaxBase]
Definition seadControllerBase.h:114
PointerFlagMask
Definition seadControllerBase.h:92
@ cPointerOffNow
Definition seadControllerBase.h:95
@ cPointerOnNow
Definition seadControllerBase.h:94
@ cPointerUnkFlag3
Definition seadControllerBase.h:96
@ cPointerOn
Definition seadControllerBase.h:93
s32 mPadBitMax
Definition seadControllerBase.h:120
bool isRelease(u32 mask) const
Definition seadControllerBase.h:66
bool isHoldAll(u32 mask) const
Definition seadControllerBase.h:65
bool isPointerOnNow() const
Definition seadControllerBase.h:59
bool isPointerOffNow() const
Definition seadControllerBase.h:60
f32 mRightStickHoldThreshold
Definition seadControllerBase.h:117
BitFlag32 mPointerFlag
Definition seadControllerBase.h:110
BitFlag32 mPadHold
Definition seadControllerBase.h:125
ControllerBase(s32 padBitMax, s32 leftStickCrossStartBit, s32 rightStickCrossStartBit, s32 touchKeyBit)
Definition seadControllerBase.cpp:12
u32 getTrigMask() const
Definition seadControllerBase.h:24
bool isRepeat(u32 mask) const
Definition seadControllerBase.h:67
bool isHold(u32 mask) const
Definition seadControllerBase.h:63
@ cPadIdx_MaxBase
Definition seadControllerBase.h:88
void setLeftStickCrossThreshold(f32 hold, f32 release)
Definition seadControllerBase.cpp:158
BitFlag32 mPadRepeat
Definition seadControllerBase.h:109
static const f32 cStickHoldThresholdDefault
Definition seadControllerBase.h:15
bool isTrig(u32 mask) const
Definition seadControllerBase.h:64
u8 mPadRepeatPulses[cPadIdx_MaxBase]
Definition seadControllerBase.h:115
void setPointerBound(const BoundBox2f &bound)
Definition seadControllerBase.cpp:184
bool isPointerUnkFlag3() const
Definition seadControllerBase.h:61
f32 mLeftStickReleaseThreshold
Definition seadControllerBase.h:118
const BoundBox2f & getPointerBound() const
Definition seadControllerBase.h:76
BitFlag32 mPadTrig
Definition seadControllerBase.h:107
s32 mLeftStickCrossStartBit
Definition seadControllerBase.h:121
f32 getLeftAnalogTrigger() const
Definition seadControllerBase.h:39
static const f32 cStickReleaseThresholdDefault
Definition seadControllerBase.h:16
void setPointerWithBound_(bool is_on, bool touchkey_hold, const Vector2f &pos)
Definition seadControllerBase.cpp:49
s32 mIdleFrame
Definition seadControllerBase.h:124
s32 mTouchKeyBit
Definition seadControllerBase.h:123
BoundBox2f mPointerBound
Definition seadControllerBase.h:112
u32 mPadHoldCounts[cPadIdx_MaxBase]
Definition seadControllerBase.h:113
bool isPointerOn() const
Definition seadControllerBase.h:58
const Vector2i & getPointerPrev() const
Definition seadControllerBase.h:50
f32 mRightAnalogTrigger
Definition seadControllerBase.h:130
Vector2f mRightStick
Definition seadControllerBase.h:128
const Vector2f & getPointer() const
Definition seadControllerBase.h:42
static const Vector2i cInvalidPointerS32
Definition seadControllerBase.h:18
void setRightStickCrossThreshold(f32 hold, f32 release)
Definition seadControllerBase.cpp:171
u32 getRepeatMask() const
Definition seadControllerBase.h:26
u32 getHoldMask() const
Definition seadControllerBase.h:23
u32 getPadHoldCount(s32 bit) const
Definition seadControllerBase.cpp:138
Vector2f mPointer
Definition seadControllerBase.h:126
Definition seadControllerWrapper.h:9
Definition seadAssert.h:44
Vector2< f32 > Vector2f
Definition seadVector.h:238
BitFlag< u32 > BitFlag32
Definition seadBitFlag.h:125
Vector2< s32 > Vector2i
Definition seadVector.h:234
BoundBox2< f32 > BoundBox2f
Definition seadBoundBox.h:187