summaryrefslogtreecommitdiff
path: root/include/SSystem/SComponent/c_m3d_g_lin.h
blob: 1f85cac8d99cf943ddbad5c0357618d39755ecb9 (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
#ifndef C_M3D_G_LIN_H
#define C_M3D_G_LIN_H

#include "SSystem/SComponent/c_xyz.h"
#include "global.h"

// Line
class cM3dGLin {
private:
    /* 0x00 */ cXyz mStart;
    /* 0x0C */ cXyz mEnd;
    /* 0x18 vtable */

public:
    cM3dGLin() {}
    cM3dGLin(const cXyz& start, const cXyz& end) : mStart(start), mEnd(end) {}
    virtual ~cM3dGLin() {}
    void SetStartEnd(const cXyz& start, const cXyz& end) {
        mStart = start;
        mEnd = end;
    }
    void SetStartEnd(const Vec& start, const Vec& end) {
        mStart.set(start);
        mEnd.set(end);
    }
    void set(const Vec& start, const Vec& end) {
        SetStartEnd(start, end);
    }
    void CalcPos(Vec* out, f32 scale) const {
        Vec tmp;
        VECSubtract(&mEnd, &mStart, &tmp);
        VECScale(&tmp, &tmp, scale);
        VECAdd(&tmp, &mStart, out);
    }
    void CalcVec(Vec* pOut) const { VECSubtract(&this->mEnd, &this->mStart, pOut); }
    void SetEnd(const cXyz& pos) { mEnd = pos; }
    const cXyz* GetStartP() const { return &mStart; }
    cXyz* GetStartP() { return &mStart; }
    const cXyz& GetStart() const { return mStart; }
    cXyz& GetStart() { return mStart; }
    const cXyz* GetEndP() const { return &mEnd; }
    cXyz* GetEndP() { return &mEnd; }
    const cXyz& GetEnd() const { return mEnd; }
    cXyz& GetEnd() { return mEnd; }
    f32 GetLen() const { return VECDistance(&mStart, &mEnd); }
};  // Size = 0x1C

STATIC_ASSERT(0x1C == sizeof(cM3dGLin));

#endif /* C_M3D_G_LIN_H */