diff options
Diffstat (limited to '')
-rw-r--r-- | src/vehicles/Boat.cpp | 41 |
1 files changed, 32 insertions, 9 deletions
diff --git a/src/vehicles/Boat.cpp b/src/vehicles/Boat.cpp index 14eb2f05..348f2732 100644 --- a/src/vehicles/Boat.cpp +++ b/src/vehicles/Boat.cpp @@ -32,6 +32,13 @@ float WAKE_LIFETIME = 400.0f; CBoat *CBoat::apFrameWakeGeneratingBoats[4]; +const uint32 CBoat::nSaveStructSize = +#ifdef COMPATIBLE_SAVES + 1156; +#else + sizeof(CBoat); +#endif + CBoat::CBoat(int mi, uint8 owner) : CVehicle(owner) { CVehicleModelInfo *minfo = (CVehicleModelInfo*)CModelInfo::GetModelInfo(mi); @@ -137,7 +144,7 @@ CBoat::ProcessControl(void) ProcessCarAlarm(); - switch(m_status){ + switch(GetStatus()){ case STATUS_PLAYER: m_bIsAnchored = false; m_fOrientation = INVALID_ORIENTATION; @@ -176,7 +183,7 @@ CBoat::ProcessControl(void) } float collisionDamage = pHandling->fCollisionDamageMultiplier * m_fDamageImpulse; - if(collisionDamage > 25.0f && m_status != STATUS_WRECKED && m_fHealth >= 150.0f){ + if(collisionDamage > 25.0f && GetStatus() != STATUS_WRECKED && m_fHealth >= 150.0f){ float prevHealth = m_fHealth; if(this == FindPlayerVehicle()){ if(bTakeLessDamage) @@ -199,7 +206,7 @@ CBoat::ProcessControl(void) } // Damage particles - if(m_fHealth <= 600.0f && m_status != STATUS_WRECKED && + if(m_fHealth <= 600.0f && GetStatus() != STATUS_WRECKED && Abs(GetPosition().x - TheCamera.GetPosition().x) < 200.0f && Abs(GetPosition().y - TheCamera.GetPosition().y) < 200.0f){ float speedSq = m_vecMoveSpeed.MagnitudeSqr(); @@ -283,7 +290,7 @@ CBoat::ProcessControl(void) AddWakePoint(GetPosition()); float steerFactor = 1.0f - DotProduct(m_vecMoveSpeed, GetForward()); - if(m_modelIndex == MI_GHOST) + if (GetModelIndex() == MI_GHOST) steerFactor = 1.0f - DotProduct(m_vecMoveSpeed, GetForward())*0.3f; if(steerFactor < 0.0f) steerFactor = 0.0f; @@ -326,7 +333,7 @@ CBoat::ProcessControl(void) // Spray some particles CVector jetDir = -0.04f * force; if(m_fGasPedal > 0.0f){ - if(m_status == STATUS_PLAYER){ + if(GetStatus() == STATUS_PLAYER){ bool cameraHack = TheCamera.Cams[TheCamera.ActiveCam].Mode == CCam::MODE_TOPDOWN || TheCamera.WhoIsInControlOfTheCamera == CAMCONTROL_OBBE; CVector sternPos = GetColModel()->boundingBox.min; @@ -513,7 +520,7 @@ CBoat::ProcessControl(void) // is this some inlined CPlaceable method? CVector pos = GetPosition(); GetMatrix().RotateZ(m_fOrientation - GetForward().Heading()); - GetPosition() = pos; + GetMatrix().GetPosition() = pos; } } @@ -597,7 +604,7 @@ CBoat::BlowUpCar(CEntity *culprit) // explosion pushes vehicle up m_vecMoveSpeed.z += 0.13f; - m_status = STATUS_WRECKED; + SetStatus(STATUS_WRECKED); bRenderScorched = true; m_fHealth = 0.0; @@ -673,7 +680,7 @@ CBoat::BlowUpCar(CEntity *culprit) dist.Normalise(); if(GetUp().z > 0.0f) dist += GetUp(); - obj->GetPosition() += GetUp(); + obj->GetMatrix().GetPosition() += GetUp(); CWorld::Add(obj); @@ -764,7 +771,7 @@ void CBoat::Teleport(CVector v) { CWorld::Remove(this); - GetPosition() = v; + SetPosition(v); SetOrientation(0.0f, 0.0f, 0.0f); SetMoveSpeed(0.0f, 0.0f, 0.0f); SetTurnSpeed(0.0f, 0.0f, 0.0f); @@ -899,3 +906,19 @@ CBoat::AddWakePoint(CVector point) m_nNumWakePoints = 1; } } + +#ifdef COMPATIBLE_SAVES +void +CBoat::Save(uint8*& buf) +{ + CVehicle::Save(buf); + SkipSaveBuf(buf, 1156 - 648); +} + +void +CBoat::Load(uint8*& buf) +{ + CVehicle::Load(buf); + SkipSaveBuf(buf, 1156 - 648); +} +#endif |