mirror of
https://github.com/halpz/re3.git
synced 2025-06-28 06:16:21 +00:00
implemented CTrain
This commit is contained in:
@ -1,25 +1,93 @@
|
||||
#pragma once
|
||||
|
||||
#include "common.h"
|
||||
#include "patcher.h"
|
||||
#include "Vehicle.h"
|
||||
#include "Door.h"
|
||||
|
||||
enum
|
||||
{
|
||||
TRAIN_DOOR_STATE2 = 2
|
||||
TRACK_ELTRAIN,
|
||||
TRACK_SUBWAY
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
TRAIN_DOOR_CLOSED,
|
||||
TRAIN_DOOR_OPENING,
|
||||
TRAIN_DOOR_OPEN,
|
||||
TRAIN_DOOR_CLOSING
|
||||
};
|
||||
|
||||
enum eTrainNodes
|
||||
{
|
||||
TRAIN_DOOR_LHS = 1,
|
||||
TRAIN_DOOR_RHS
|
||||
};
|
||||
|
||||
enum eTrainPositions
|
||||
{
|
||||
TRAIN_POS_LIGHT_FRONT,
|
||||
TRAIN_POS_LIGHT_REAR,
|
||||
TRAIN_POS_LEFT_ENTRY,
|
||||
TRAIN_POS_MID_ENTRY,
|
||||
TRAIN_POS_RIGHT_ENTRY
|
||||
};
|
||||
|
||||
struct CTrainNode
|
||||
{
|
||||
CVector p; // position
|
||||
float t; // xy-distance from start on track
|
||||
};
|
||||
|
||||
struct CTrainInterpolationLine
|
||||
{
|
||||
uint8 type;
|
||||
float time; // when does this keyframe start
|
||||
// initial values at start of frame
|
||||
float position;
|
||||
float speed;
|
||||
float acceleration;
|
||||
};
|
||||
|
||||
class CTrain : public CVehicle
|
||||
{
|
||||
public:
|
||||
// 0x288
|
||||
uint8 stuff1[20];
|
||||
uint8 m_trackId;
|
||||
uint8 stuff2[7];
|
||||
int16 m_doorState;
|
||||
uint8 stuff3[62];
|
||||
float m_fWagonPosition;
|
||||
int16 m_nWagonId;
|
||||
int16 m_isFarAway; // don't update so often?
|
||||
int16 m_nCurTrackNode;
|
||||
int16 m_nWagonGroup;
|
||||
float m_fSpeed;
|
||||
bool m_bProcessDoor;
|
||||
bool m_bTrainStopping;
|
||||
bool m_bIsFirstWagon;
|
||||
bool m_bIsLastWagon;
|
||||
uint8 m_nTrackId; // or m_bUsesSubwayTracks?
|
||||
uint32 m_nDoorTimer;
|
||||
int16 m_nDoorState;
|
||||
CTrainDoor Doors[2];
|
||||
RwFrame *m_aTrainNodes[3];
|
||||
|
||||
CTrain(int, uint8);
|
||||
CTrain* ctor(int, uint8);
|
||||
// unused
|
||||
static CVector aStationCoors[3];
|
||||
static CVector aStationCoors_S[4];
|
||||
|
||||
CTrain(int32 id, uint8 CreatedBy);
|
||||
|
||||
// from CEntity
|
||||
void SetModelIndex(uint32 id);
|
||||
void ProcessControl(void);
|
||||
void PreRender(void);
|
||||
void Render(void);
|
||||
|
||||
void AddPassenger(CPed *ped);
|
||||
void OpenTrainDoor(float ratio);
|
||||
void TrainHitStuff(CPtrList &list);
|
||||
|
||||
static void InitTrains(void);
|
||||
static void Shutdown(void);
|
||||
static void ReadAndInterpretTrackFile(char *filename, CTrainNode **nodes, int16 *numNodes, int32 numStations, float *stationDists,
|
||||
float *totalLength, float *totalDuration, CTrainInterpolationLine *interpLines, bool rightRail);
|
||||
static void UpdateTrains(void);
|
||||
};
|
||||
static_assert(sizeof(CTrain) == 0x2E4, "CTrain: error");
|
||||
|
Reference in New Issue
Block a user