summaryrefslogtreecommitdiff
path: root/include/SSystem/SComponent/c_bg_s_lin_chk.h
blob: bd4581567db88e3b7e482fe62eb4ba31305c1850 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#ifndef C_BG_S_LIN_CHK_H
#define C_BG_S_LIN_CHK_H

#include "SSystem/SComponent/c_bg_s_chk.h"
#include "SSystem/SComponent/c_bg_s_poly_info.h"
#include "SSystem/SComponent/c_m3d_g_lin.h"
#include "dolphin/types.h"

class cBgS_LinChk : public cBgS_Chk, public cBgS_PolyInfo {
public:
    /* 0x024 */ cM3dGLin mLin;
    /* 0x040 */ cXyz field_0x40;
    /* 0x04C */ u32 mFlag;
    /* 0x050 */ bool mPreWallChk;
    /* 0x051 */ bool mPreGroundChk;
    /* 0x052 */ bool mPreRoofChk;
    /* 0x053 */ bool mFrontFlag;
    /* 0x054 */ bool mBackFlag;

public:
    cBgS_LinChk() { ct(); }
    void ct();
    void Set2(cXyz* pi_start, cXyz* pi_end, fpc_ProcID pi_actor);

    virtual ~cBgS_LinChk() {}

    void SetHit() { mFlag |= 0x10; }
    void ClrHit() { mFlag &= ~0x10; }
    bool ChkHit() { return mFlag & 0x10; }
    void SetSttsWallOff() { mFlag |= 0x40000000; }
    void ClrSttsWallOff() { mFlag &= ~0x40000000; }
    bool ChkSttsWallOff() { return mFlag & 0x40000000; }
    void SetSttsGroundOff() { mFlag |= 0x80000000; }
    void ClrSttsGroundOff() { mFlag &= ~0x80000000; }
    bool ChkSttsGroundOff() { return mFlag & 0x80000000; }
    void SetSttsRoofOff() { mFlag |= 0x20000000; }
    void ClrSttsRoofOff() { mFlag &= ~0x20000000; }
    bool ChkSttsRoofOff() { return mFlag & 0x20000000; }

    void SetCross(cXyz& pos) { mLin.SetEnd(pos); }
    cXyz& GetCross() { return mLin.GetEnd(); }
    cXyz* GetCrossP() { return mLin.GetEndP(); }
    cM3dGLin* GetLinP() { return &mLin; }

    void OnFrontFlag() { mFrontFlag = true; }
    void OffFrontFlag() { mFrontFlag = false; }
    bool ChkFrontFlag() { return mFrontFlag; }
    void OnBackFlag() { mBackFlag = true; }
    void OffBackFlag() { mBackFlag = false; }
    bool ChkBackFlag() { return mBackFlag; }
    bool GetPreWallChk() const { return mPreWallChk; }
    bool GetPreGroundChk() const { return mPreGroundChk; }
    bool GetPreRoofChk() const { return mPreRoofChk; }
    void PreCalc() {
        mPreWallChk = !ChkSttsWallOff();
        mPreGroundChk = !ChkSttsGroundOff();
        mPreRoofChk = !ChkSttsRoofOff();
    }
    void ClearCheckIndex() {} // TODO
};  // Size: 0x58

#endif /* C_BG_S_LIN_CHK_H */