1#include "controller/seadControllerWrapperBase.h"
2
3#include "prim/seadMemUtil.h"
4
5namespace sead
6{
7ControllerWrapperBase::ControllerWrapperBase()
8 : ControllerBase(Controller::cPadIdx_Max, -1, -1, Controller::cPadIdx_Touch),
9 mController(nullptr), mIsEnable(true)
10{
11}
12
13ControllerWrapperBase::~ControllerWrapperBase()
14{
15 unregister();
16}
17
18void ControllerWrapperBase::registerWith(Controller* controller, bool copy_repeat_setting)
19{
20 SEAD_ASSERT(controller);
21
22 unregister();
23
24 controller->mWrappers.pushBack(item: this);
25 mController = controller;
26
27 if (copy_repeat_setting)
28 copyRepeatSetting(controller);
29}
30
31void ControllerWrapperBase::unregister()
32{
33 if (mController)
34 {
35 mController->mWrappers.erase(item: this);
36 mController = nullptr;
37 }
38}
39
40void ControllerWrapperBase::copyRepeatSetting(const Controller* controller)
41{
42 MemUtil::copy(dest: mPadRepeatDelays, src: controller->mPadRepeatDelays, size: 32);
43 MemUtil::copy(dest: mPadRepeatPulses, src: controller->mPadRepeatPulses, size: 32);
44}
45
46void ControllerWrapperBase::setEnable(bool enable)
47{
48 mIsEnable = enable;
49}
50
51void ControllerWrapperBase::setEnableOtherWrappers(bool enable) const
52{
53 if (!mController)
54 return;
55
56 OffsetList<ControllerWrapperBase>& wrappers = mController->mWrappers;
57 for (auto it = wrappers.begin(); it != wrappers.end(); ++it)
58 {
59 ControllerWrapperBase& wrapper = *it;
60 if (&wrapper != this)
61 wrapper.setEnable(enable);
62 }
63}
64
65void ControllerWrapperBase::setIdle()
66{
67 setIdleBase_();
68}
69
70bool ControllerWrapperBase::isIdle_()
71{
72 return isIdleBase_();
73}
74
75} // namespace sead
76