Files
ph/include/Player/PlayerControl.hpp
T
2025-02-18 18:33:12 +01:00

145 lines
5.0 KiB
C++

#pragma once
#include "global.h"
#include "nds/math.h"
#include "types.h"
#include "Actor/Actor.hpp"
#include "Actor/ActorManager.hpp"
#include "Debug/DebugHierarchy.hpp"
#include "Item/Item.hpp"
#include "Player/TouchControl.hpp"
#include "Player/TouchGesture.hpp"
typedef s16 TouchEdge;
enum TouchEdge_ {
TouchEdge_Right = 0,
TouchEdge_Left = 1,
TouchEdge_Bottom = 2,
TouchEdge_Top = 3,
TouchEdge_Middle = 4
};
class PlayerControl : public TouchControl {
public:
/* 00 (base) */
/* 38 */ Vec3p mTouchWorld; // tile position
/* 44 */ Vec3p mUnk_44;
/* 50 */ q20 mTouchSpeedX; // how fast the stylus moves
/* 54 */ q20 mTouchSpeedY;
/* 58 */ q20 mTouchDist; // pixel distance from touch to link, deadzone is 20 pixels
/* 5c */ q20 mTouchSpeed;
/* 60 */ s16 mTouchDuration;
/* 62 */ s16 mTouchSlowDuration; // resets to 0 if stylus is fast enough
/* 64 */ s16 mTouchFastTime; // gets set to mTouchDuration if stylus is fast enough
/* 66 */ s16 mTouchFastX; // gets set to mTouchX if stylus is fast enough
/* 68 */ s16 mTouchFastY; // gets set to mTouchY if stylus is fast enough
/* 6a */ s16 mTouchAngle; // angle from touch to link, 0 = down, 0x4000 = right, 0x8000 = up, 0xc000 = left
/* 6c */ s16 mTouchFastAngle; // gets set to mTouchAngle if stylus is fast enough
/* 6e */ TouchEdge mTouchEdge; // changes value when touching close to the edge of the screen
/* 70 */ TouchEdge mTouchLastEdge;
/* 72 */ s16 mTouchDiffX;
/* 74 */ s16 mTouchDiffY;
/* 76 */ bool mTouchFast;
/* 77 */ unk8 mUnk_77;
/* 78 */ bool mUnk_78;
/* 79 */ bool mUsingEquipItem;
/* 7a */ bool mUnk_7a;
/* 7b */ bool mUnk_7b;
/* 7c */ u8 mUnk_7c;
/* 7d */ bool mUnk_7d;
/* 7e */ u8 mUnk_7e;
/* 7f */ bool mUnk_7f;
/* 80 */ bool mUnk_80;
/* 81 */ bool mFollowing;
/* 82 */ bool mUnk_82;
/* 83 */ bool mUnk_83;
/* 84 */ ActorRef mFollowRef;
/* 8c */ ActorRef mNextFollowRef;
/* 94 */ ActorRef mLastFollowRef;
/* 9c */ Vec2b mUnk_9c;
/* 9e */ unk8 mUnk_9e[2];
/* a0 */ void *mFollowObject;
/* a4 */ q20 mFollowDist;
/* a8 */ s16 mFollowStuckTimer;
/* aa */ s16 mCutsceneEndTimer;
/* ac */ s16 mUnk_ac;
/* ae */ unk16 mUnk_ae;
/* b0 */ Vec3p mAim; // used by boomerang, bow and rope
/* bc */ Vec3p mAimWorld; // used by hammer
/* c8 */ s32 mUnk_c8;
/* cc */ s32 mUnk_cc;
/* d0 */ TouchGesture **mTouchGesture;
/* d4 */ DebugHierarchy *mDebug;
/* d8 */
static bool func_ov00_020aeeac();
static bool func_ov00_020aeef8();
void func_ov00_020aef30();
void UpdateAim();
Actor *GetFollowActor();
bool func_ov00_020af01c(Vec2b *param1);
void SetUnk_80();
void StopFollowing();
void func_ov00_020af06c();
void UpdateUsingEquipItem();
bool func_ov00_020af2d4(u32 param1, bool param2);
bool CheckTouchedNow(u32 param1);
bool CheckUntouchedNow(u32 param1);
bool CheckTouching(u32 param1);
bool CheckTouchFast(u32 param1);
bool func_ov00_020af4a4();
void func_ov00_020af538(bool param1, u8 param2);
void func_ov00_020af6e4(Vec3p *param1, s32 param3, s32 param4);
bool func_ov00_020af778();
bool func_ov00_020afad8(Vec3p *param1);
void func_ov00_020afb6c();
bool func_ov00_020afe88(s32 param1, bool param2);
bool func_ov00_020afeec(unk32 param1, bool param2);
void func_ov00_020aff90(Vec3p *param1, unk32 param2);
void func_ov00_020affec(Vec3p *param1, s32 y, s32 param3, Vec3p *param4);
void func_ov00_020b014c(Vec3p *param1);
void ResetAim();
bool UpdateAimWorld(Vec3p *param1);
s16 GetTouchAngle();
u32 func_ov00_020b034c();
s32 func_ov00_020b0418();
bool func_ov00_020b049c(Vec3p *param1, bool param2);
bool func_ov00_020b05e8(Vec3p *param1);
bool func_ov00_020b0778(Vec3p *param1, u32 param2, unk32 *param3);
bool CheckNotTouching();
bool func_ov00_020b0ad0(Actor *actor);
bool func_ov00_020b0b0c(s16 *pAngle, ItemFlag *pEquipId, unk32 *pCardinal, bool *pFast);
bool func_ov00_020b0de8(Vec3p *param1);
bool func_ov00_020b0e54(Vec3p *param1, Vec3p *param2);
bool func_ov00_020b0f88(Vec3p *param1, unk32 scale, Vec3p *param3);
bool func_ov00_020b1058(Vec3p *param1, unk32 param2, Vec3p *param3, Vec3p *param4);
bool IsUntouchedNow();
bool IsNotUntouchedNow();
bool func_ov00_020b1248(unk32 *param1);
bool func_ov00_020b129c();
bool func_ov00_020b12d0(s16 *pAngle);
bool IsNotTouching();
bool IsTouchingFast();
bool IsTappedNow();
bool func_ov00_020b13c4();
void ResetTouchWorld();
void InitTouchMovement();
void func_ov000_020b7924(s32 param1);
void ApplyTouchWorld(Vec3p *result, unk32 scale);
bool func_ov000_020b7d6c();
PlayerControl();
~PlayerControl();
static void Create();
static void Destroy();
void Init();
void func_ov004_0210b1d0();
static void func_ov004_0210b1f0();
bool func_ov024_02178348(Vec3p *param1);
};
extern PlayerControl *gPlayerControl;