70 lines
1.3 KiB
C++
70 lines
1.3 KiB
C++
#pragma once
|
|
|
|
class CVehicle;
|
|
|
|
enum eDoorState
|
|
{
|
|
DOORST_SWINGING,
|
|
// actually wrong though,
|
|
// OPEN is really MAX_ANGLE and CLOSED is MIN_ANGLE
|
|
DOORST_OPEN,
|
|
DOORST_CLOSED
|
|
};
|
|
|
|
class CDoor
|
|
{
|
|
public:
|
|
float m_fMaxAngle;
|
|
float m_fMinAngle;
|
|
// direction of rotation for air resistance
|
|
int8 m_nDirn;
|
|
// axis in which this door rotates
|
|
int8 m_nAxis;
|
|
int8 m_nDoorState;
|
|
float m_fAngle;
|
|
float m_fPrevAngle;
|
|
float m_fAngVel;
|
|
CVector m_vecSpeed;
|
|
|
|
CDoor(void);
|
|
void Init(float minAngle, float maxAngle, int8 dir, int8 axis) {
|
|
m_fMinAngle = minAngle;
|
|
m_fMaxAngle = maxAngle;
|
|
m_nDirn = dir;
|
|
m_nAxis = axis;
|
|
}
|
|
void Open(float ratio);
|
|
void Process(CVehicle *veh);
|
|
float RetAngleWhenClosed(void); // dead
|
|
float RetAngleWhenOpen(void);
|
|
float GetAngleOpenRatio(void);
|
|
bool IsFullyOpen(void);
|
|
bool IsClosed(void); // dead
|
|
};
|
|
|
|
class CTrainDoor
|
|
{
|
|
public:
|
|
float m_fClosedPosn;
|
|
float m_fOpenPosn;
|
|
int8 m_nDirn;
|
|
int8 m_nDoorState; // same enum as above?
|
|
int8 m_nAxis;
|
|
float m_fPosn;
|
|
float m_fPrevPosn;
|
|
int field_14; // unused?
|
|
|
|
CTrainDoor(void);
|
|
void Init(float open, float closed, int8 dir, int8 axis) {
|
|
m_fOpenPosn = open;
|
|
m_fClosedPosn = closed;
|
|
m_nDirn = dir;
|
|
m_nAxis = axis;
|
|
}
|
|
bool IsClosed(void);
|
|
bool IsFullyOpen(void);
|
|
float RetTranslationWhenClosed(void);
|
|
float RetTranslationWhenOpen(void);
|
|
void Open(float ratio);
|
|
};
|