#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:
public:
    /* 0x00 */ cXyz mStart;
    /* 0x0C */ cXyz mEnd;
    /* 0x18 vtable */

    cM3dGLin() {}
    cM3dGLin(const cXyz&, const cXyz&);
    virtual ~cM3dGLin() {}
    void SetStartEnd(const cXyz& start, const cXyz& end) {
        mStart = start;
        mEnd = end;
    }
    void SetStartEnd(const Vec& start, const Vec& end) {
        mStart = start;
        mEnd = end;
    }
    void CalcPos(Vec*, f32) const;
    void CalcVec(Vec* pOut) const { VECSubtract(&this->mEnd, &this->mStart, pOut); }
    void SetEnd(const cXyz&);
    const cXyz& GetStartP() const { return mStart; }
    cXyz& GetStartP() { return mStart; }
    cXyz& GetStart() { return mStart; }
    const cXyz& GetEndP() const { return mEnd; }
    cXyz& GetEndP() { return mEnd; }
    cXyz& GetEnd() { return mEnd; }
};  // Size = 0x1C

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

#endif /* C_M3D_G_LIN_H */