diff options
Diffstat (limited to '')
-rw-r--r-- | src/weapons/BulletInfo.cpp | 10 | ||||
-rw-r--r-- | src/weapons/ProjectileInfo.cpp | 4 | ||||
-rw-r--r-- | src/weapons/Weapon.cpp | 68 | ||||
-rw-r--r-- | src/weapons/Weapon.h | 5 | ||||
-rw-r--r-- | src/weapons/WeaponInfo.h | 2 |
5 files changed, 60 insertions, 29 deletions
diff --git a/src/weapons/BulletInfo.cpp b/src/weapons/BulletInfo.cpp index 36c3cc78..92d98a50 100644 --- a/src/weapons/BulletInfo.cpp +++ b/src/weapons/BulletInfo.cpp @@ -3,7 +3,7 @@ #include "BulletInfo.h" #include "AnimBlendAssociation.h" -#include "AudioManager.h" +#include "DMAudio.h" #include "AudioScriptObject.h" #ifdef FIX_BUGS #include "Collision.h" @@ -122,7 +122,7 @@ void CBulletInfo::Update(void) } if (pPed->GetPedState() == PED_DEAD) { CAnimBlendAssociation* pAnim; - if (RpAnimBlendClumpGetFirstAssociation(pPed->GetClump(), ASSOC_FLAG800)) + if (RpAnimBlendClumpGetFirstAssociation(pPed->GetClump(), ASSOC_FRONTAL)) pAnim = CAnimManager::BlendAnimation(pPed->GetClump(), ASSOCGRP_STD, ANIM_FLOOR_HIT_F, 8.0f); else pAnim = CAnimManager::BlendAnimation(pPed->GetClump(), ASSOCGRP_STD, ANIM_FLOOR_HIT, 8.0f); @@ -156,11 +156,11 @@ void CBulletInfo::Update(void) if (pHitEntity->IsObject()) { CObject* pObject = (CObject*)pHitEntity; if (!pObject->bInfiniteMass) { - if (pObject->bIsStatic && pObject->m_fUprootLimit <= 0.0f) { + if (pObject->IsStatic() && pObject->m_fUprootLimit <= 0.0f) { pObject->bIsStatic = false; pObject->AddToMovingList(); } - if (!pObject->bIsStatic) + if (!pObject->IsStatic()) pObject->ApplyMoveForce(-BULLET_HIT_FORCE * point.normal); } } @@ -171,7 +171,7 @@ void CBulletInfo::Update(void) } if (pBullet->m_eWeaponType == WEAPONTYPE_SNIPERRIFLE && bAddSound) { cAudioScriptObject* pAudio; - switch (pHitEntity->m_type) { + switch (pHitEntity->GetType()) { case ENTITY_TYPE_BUILDING: pAudio = new cAudioScriptObject(); pAudio->Posn = pHitEntity->GetPosition(); diff --git a/src/weapons/ProjectileInfo.cpp b/src/weapons/ProjectileInfo.cpp index c174305c..8297d953 100644 --- a/src/weapons/ProjectileInfo.cpp +++ b/src/weapons/ProjectileInfo.cpp @@ -193,7 +193,7 @@ CProjectileInfo::Update() if (!gaProjectileInfo[i].m_bInUse) continue; CPed *ped = (CPed*)gaProjectileInfo[i].m_pSource; - if (ped != nil && ped->m_type == ENTITY_TYPE_PED && !ped->IsPointerValid()) + if (ped != nil && ped->IsPed() && !ped->IsPointerValid()) gaProjectileInfo[i].m_pSource = nil; if (ms_apProjectile[i] == nil) { @@ -245,7 +245,7 @@ CProjectileInfo::IsProjectileInRange(float x1, float x2, float y1, float y2, flo for (int i = 0; i < ARRAY_SIZE(ms_apProjectile); i++) { if (gaProjectileInfo[i].m_bInUse) { if (gaProjectileInfo[i].m_eWeaponType == WEAPONTYPE_ROCKETLAUNCHER || gaProjectileInfo[i].m_eWeaponType == WEAPONTYPE_MOLOTOV || gaProjectileInfo[i].m_eWeaponType == WEAPONTYPE_GRENADE) { - CVector &pos = ms_apProjectile[i]->GetPosition(); + const CVector &pos = ms_apProjectile[i]->GetPosition(); if (pos.x >= x1 && pos.x <= x2 && pos.y >= y1 && pos.y <= y2 && pos.z >= z1 && pos.z <= z2) { result = true; if (remove) { diff --git a/src/weapons/Weapon.cpp b/src/weapons/Weapon.cpp index a3d52f69..aef53094 100644 --- a/src/weapons/Weapon.cpp +++ b/src/weapons/Weapon.cpp @@ -973,7 +973,7 @@ CWeapon::DoBulletImpact(CEntity *shooter, CEntity *victim, if ( victimPed->Dead() ) { CAnimBlendAssociation *asoc; - if ( RpAnimBlendClumpGetFirstAssociation(victimPed->GetClump(), ASSOC_FLAG800) ) + if ( RpAnimBlendClumpGetFirstAssociation(victimPed->GetClump(), ASSOC_FRONTAL) ) asoc = CAnimManager::BlendAnimation(victimPed->GetClump(), ASSOCGRP_STD, ANIM_FLOOR_HIT_F, 8.0f); else asoc = CAnimManager::BlendAnimation(victimPed->GetClump(), ASSOCGRP_STD, ANIM_FLOOR_HIT, 8.0f); @@ -990,7 +990,7 @@ CWeapon::DoBulletImpact(CEntity *shooter, CEntity *victim, } else { - switch ( victim->m_type ) + switch ( victim->GetType() ) { case ENTITY_TYPE_BUILDING: { @@ -1047,13 +1047,13 @@ CWeapon::DoBulletImpact(CEntity *shooter, CEntity *victim, if ( !victimObject->bInfiniteMass ) { - if ( victimObject->bIsStatic && victimObject->m_fUprootLimit <= 0.0f ) + if ( victimObject->IsStatic() && victimObject->m_fUprootLimit <= 0.0f ) { victimObject->bIsStatic = false; victimObject->AddToMovingList(); } - if ( !victimObject->bIsStatic ) + if ( !victimObject->IsStatic()) { CVector moveForce = point->normal*-4.0f; victimObject->ApplyMoveForce(moveForce.x, moveForce.y, moveForce.z); @@ -1065,7 +1065,7 @@ CWeapon::DoBulletImpact(CEntity *shooter, CEntity *victim, } } - switch ( victim->m_type ) + switch ( victim->GetType() ) { case ENTITY_TYPE_BUILDING: { @@ -1256,7 +1256,7 @@ CWeapon::FireShotgun(CEntity *shooter, CVector *fireSource) } else { - switch ( victim->m_type ) + switch ( victim->GetType() ) { case ENTITY_TYPE_VEHICLE: { @@ -1296,13 +1296,13 @@ CWeapon::FireShotgun(CEntity *shooter, CVector *fireSource) if ( !victimObject->bInfiniteMass ) { - if ( victimObject->bIsStatic && victimObject->m_fUprootLimit <= 0.0f ) + if ( victimObject->IsStatic() && victimObject->m_fUprootLimit <= 0.0f ) { victimObject->bIsStatic = false; victimObject->AddToMovingList(); } - if ( !victimObject->bIsStatic ) + if ( !victimObject->IsStatic()) { CVector moveForce = point.normal*-5.0f; victimObject->ApplyMoveForce(moveForce.x, moveForce.y, moveForce.z); @@ -1315,7 +1315,7 @@ CWeapon::FireShotgun(CEntity *shooter, CVector *fireSource) } } - switch ( victim->m_type ) + switch ( victim->GetType() ) { case ENTITY_TYPE_BUILDING: { @@ -1724,7 +1724,7 @@ CWeapon::FireInstantHitFromCar(CAutomobile *shooter, bool left) else CGlass::WasGlassHitByBullet(victim, point.point); - switch ( victim->m_type ) + switch ( victim->GetType() ) { case ENTITY_TYPE_BUILDING: { @@ -1796,10 +1796,10 @@ CWeapon::DoDoomAiming(CEntity *shooter, CVector *source, CVector *target) if ( (CEntity*)shooterPed != victim && shooterPed->CanSeeEntity(victim, DEGTORAD(22.5f)) ) { - if ( !(victim->m_status == STATUS_TRAIN_MOVING - || victim->m_status == STATUS_TRAIN_NOT_MOVING - || victim->m_status == STATUS_HELI - || victim->m_status == STATUS_PLANE) ) + if ( !(victim->GetStatus() == STATUS_TRAIN_MOVING + || victim->GetStatus() == STATUS_TRAIN_NOT_MOVING + || victim->GetStatus() == STATUS_HELI + || victim->GetStatus() == STATUS_PLANE) ) { float distToVictim = (shooterPed->GetPosition()-victim->GetPosition()).Magnitude2D(); float distToVictimZ = Abs(shooterPed->GetPosition().z-victim->GetPosition().z); @@ -1866,10 +1866,10 @@ CWeapon::DoTankDoomAiming(CEntity *shooter, CEntity *driver, CVector *source, CV if ( shooter != victim && driver != victim ) { - if ( !(victim->m_status == STATUS_TRAIN_MOVING - || victim->m_status == STATUS_TRAIN_NOT_MOVING - || victim->m_status == STATUS_HELI - || victim->m_status == STATUS_PLANE) ) + if ( !(victim->GetStatus() == STATUS_TRAIN_MOVING + || victim->GetStatus() == STATUS_TRAIN_NOT_MOVING + || victim->GetStatus() == STATUS_HELI + || victim->GetStatus() == STATUS_PLANE) ) { if ( !(victim->IsVehicle() && victim->bRenderScorched) ) { @@ -2086,7 +2086,7 @@ FireOneInstantHitRound(CVector *source, CVector *target, int32 damage) ((CVehicle *)victim)->InflictDamage(nil, WEAPONTYPE_UZI, damage); //BUG ? no CGlass::WasGlassHitByBullet - switch ( victim->m_type ) + switch ( victim->GetType() ) { case ENTITY_TYPE_BUILDING: { @@ -2232,7 +2232,7 @@ CWeapon::BlowUpExplosiveThings(CEntity *thing) object->m_vecMoveSpeed.x += float((CGeneral::GetRandomNumber()&255) - 128) * 0.0002f; object->m_vecMoveSpeed.y += float((CGeneral::GetRandomNumber()&255) - 128) * 0.0002f; - if ( object->bIsStatic ) + if ( object->IsStatic()) { object->bIsStatic = false; object->AddToMovingList(); @@ -2257,4 +2257,30 @@ bool CWeapon::ProcessLineOfSight(CVector const &point1, CVector const &point2, CColPoint &point, CEntity *&entity, eWeaponType type, CEntity *shooter, bool checkBuildings, bool checkVehicles, bool checkPeds, bool checkObjects, bool checkDummies, bool ignoreSeeThrough, bool ignoreSomeObjects) { return CWorld::ProcessLineOfSight(point1, point2, point, entity, checkBuildings, checkVehicles, checkPeds, checkObjects, checkDummies, ignoreSeeThrough, ignoreSomeObjects); -}
\ No newline at end of file +} + +#ifdef COMPATIBLE_SAVES +void +CWeapon::Save(uint8*& buf) +{ + WriteSaveBuf<uint32>(buf, m_eWeaponType); + WriteSaveBuf<uint32>(buf, m_eWeaponState); + WriteSaveBuf<uint32>(buf, m_nAmmoInClip); + WriteSaveBuf<uint32>(buf, m_nAmmoTotal); + WriteSaveBuf<uint32>(buf, m_nTimer); + WriteSaveBuf<bool>(buf, m_bAddRotOffset); + SkipSaveBuf(buf, 3); +} + +void +CWeapon::Load(uint8*& buf) +{ + m_eWeaponType = (eWeaponType)ReadSaveBuf<uint32>(buf); + m_eWeaponState = (eWeaponState)ReadSaveBuf<uint32>(buf); + m_nAmmoInClip = ReadSaveBuf<uint32>(buf); + m_nAmmoTotal = ReadSaveBuf<uint32>(buf); + m_nTimer = ReadSaveBuf<uint32>(buf); + m_bAddRotOffset = ReadSaveBuf<bool>(buf); + SkipSaveBuf(buf, 3); +} +#endif diff --git a/src/weapons/Weapon.h b/src/weapons/Weapon.h index 2c3a9657..1b2c0320 100644 --- a/src/weapons/Weapon.h +++ b/src/weapons/Weapon.h @@ -67,6 +67,11 @@ public: bool HasWeaponAmmoToBeUsed(void); static bool ProcessLineOfSight(CVector const &point1, CVector const &point2, CColPoint &point, CEntity *&entity, eWeaponType type, CEntity *shooter, bool checkBuildings, bool checkVehicles, bool checkPeds, bool checkObjects, bool checkDummies, bool ignoreSeeThrough, bool ignoreSomeObjects); + +#ifdef COMPATIBLE_SAVES + void Save(uint8*& buf); + void Load(uint8*& buf); +#endif }; VALIDATE_SIZE(CWeapon, 0x18); diff --git a/src/weapons/WeaponInfo.h b/src/weapons/WeaponInfo.h index 3bafd324..b5882082 100644 --- a/src/weapons/WeaponInfo.h +++ b/src/weapons/WeaponInfo.h @@ -46,4 +46,4 @@ public: static void Shutdown(void); }; -static_assert(sizeof(CWeaponInfo) == 0x54, "CWeaponInfo: error");
\ No newline at end of file +VALIDATE_SIZE(CWeaponInfo, 0x54);
\ No newline at end of file |