aboutsummaryrefslogtreecommitdiffstats
path: root/src/vehicles/Door.h
blob: da5a3de05bfc6d35c9d98fa57715a50bddb39e13 (plain) (blame)
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#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);
};


class CFerryDoor {
private:
	float m_fClosedPosn;
	float m_fOpenPosn;
	int8 m_nDirn;
	int8 m_nAxis;
	int8 m_nDoorState;
	float m_fPosn;
	float m_fPrevPosn;
public:
	bool	IsInUse(void);
	float	RetTranslationWhenClosed(void);
	float	RetTranslationWhenOpen(void);
	bool	IsClosed(void);
	bool	IsFullyOpen(void);
	void	Open(float ratio);
};