From 78c15c4828a540fd6ad4f1816b8cc9610409f740 Mon Sep 17 00:00:00 2001 From: aap Date: Wed, 31 Jul 2019 23:57:18 +0200 Subject: implemented CPlane --- src/vehicles/Plane.h | 71 ++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 58 insertions(+), 13 deletions(-) (limited to 'src/vehicles/Plane.h') diff --git a/src/vehicles/Plane.h b/src/vehicles/Plane.h index e263766e..eddbc2cd 100644 --- a/src/vehicles/Plane.h +++ b/src/vehicles/Plane.h @@ -1,27 +1,72 @@ #pragma once -#include "common.h" #include "Vehicle.h" +enum ePlanePositions +{ + PLANE_POS_LIGHT_LEFT, + PLANE_POS_LIGHT_RIGHT, + PLANE_POS_LIGHT_TAIL, +}; + +struct CPlaneNode +{ + CVector p; // position + float t; // xy-distance from start on path + bool bOnGround; // i.e. not flying +}; + +struct CPlaneInterpolationLine +{ + uint8 type; + float time; // when does this keyframe start + // initial values at start of frame + float position; + float speed; + float acceleration; +}; + class CPlane : public CVehicle { public: // 0x288 - int16 m_wIndex; - int16 field_650; - int16 m_wNextPathNode; + int16 m_nPlaneId; + int16 m_isFarAway; + int16 m_nCurPathNode; char field_654; char field_655; - float field_656; - int m_nFrameWhenHit; - char m_bHasBeenHit; - char m_bIsIncomingCesna; - char m_bIsDropoffCesna; - char field_667; - - CPlane(int, uint8); + float m_fSpeed; + uint32 m_nFrameWhenHit; + bool m_bHasBeenHit; + bool m_bIsDrugRunCesna; + bool m_bIsDropOffCesna; + + CPlane(int32 id, uint8 CreatedBy); ~CPlane(void); - CPlane* ctor(int, uint8); + + // from CEntity + void SetModelIndex(uint32 id); + void DeleteRwObject(void); + void ProcessControl(void); + void PreRender(void); + void Render(void); void FlagToDestroyWhenNextProcessed() { bRemoveFromWorld = true; } + + static void InitPlanes(void); + static void Shutdown(void); + static CPlaneNode *LoadPath(char const *filename, int32 &numNodes, float &totalLength, bool loop); + static void UpdatePlanes(void); + static bool TestRocketCollision(CVector *rocketPos); + static void CreateIncomingCesna(void); + static void CreateDropOffCesna(void); + static CVector FindDrugPlaneCoordinates(void); + static CVector FindDropOffCesnaCoordinates(void); + static bool HasCesnaLanded(void); + static bool HasCesnaBeenDestroyed(void); + static bool HasDropOffCesnaBeenShotDown(void); }; static_assert(sizeof(CPlane) == 0x29C, "CPlane: error"); + +extern float &LandingPoint; +extern float &TakeOffPoint; +extern float *PlanePathPosition; //[3] -- cgit v1.2.3