From c4f9b9573f1535d3297946fbb5c73393594ffa24 Mon Sep 17 00:00:00 2001 From: aap Date: Sun, 19 May 2019 21:28:10 +0200 Subject: CPhysical almost done --- src/entities/Physical.h | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) (limited to 'src/entities/Physical.h') diff --git a/src/entities/Physical.h b/src/entities/Physical.h index 574238ab..06ae3166 100644 --- a/src/entities/Physical.h +++ b/src/entities/Physical.h @@ -1,6 +1,7 @@ #pragma once #include "Lists.h" +#include "Timer.h" #include "Entity.h" #include "Treadable.h" @@ -37,16 +38,16 @@ public: char field_EC; uint8 m_nStaticFrames; uint8 m_nCollisionRecords; - char field_EF; + bool field_EF; CEntity *m_aCollisionRecords[PHYSICAL_MAX_COLLISIONRECORDS]; float m_fDistanceTravelled; // damaged piece - float m_fCollisionImpulse; - CEntity *m_pCollidingEntity; - CVector m_vecCollisionDirection; - int16 m_nCollisionPieceType; + float m_fDamageImpulse; + CEntity *m_pDamageEntity; + CVector m_vecDamageNormal; + int16 m_nDamagePieceType; uint8 m_phy_flagA1 : 1; uint8 bAffectedByGravity : 1; @@ -88,6 +89,7 @@ public: bool GetHasCollidedWith(CEntity *ent); void RemoveRefsToEntity(CEntity *ent); + float GetDistanceSq(void) { return m_vecMoveSpeed.MagnitudeSqr() * sq(CTimer::GetTimeStep()); } // get speed of point p relative to entity center CVector GetSpeed(const CVector &r); CVector GetSpeed(void) { return GetSpeed(CVector(0.0f, 0.0f, 0.0f)); } @@ -133,12 +135,19 @@ public: bool ProcessShiftSectorList(CPtrList *ptrlists); bool ProcessCollisionSectorList_SimpleCar(CPtrList *lists); + bool ProcessCollisionSectorList(CPtrList *lists); + bool CheckCollision(void); + bool CheckCollision_SimpleCar(void); + void ProcessShift(void); + void ProcessCollision(void); // to make patching virtual functions possible void Add_(void) { CPhysical::Add(); } void Remove_(void) { CPhysical::Remove(); } CRect GetBoundRect_(void) { return CPhysical::GetBoundRect(); } void ProcessControl_(void) { CPhysical::ProcessControl(); } + void ProcessShift_(void) { CPhysical::ProcessShift(); } + void ProcessCollision_(void) { CPhysical::ProcessCollision(); } int32 ProcessEntityCollision_(CEntity *ent, CColPoint *point) { return CPhysical::ProcessEntityCollision(ent, point); } }; static_assert(sizeof(CPhysical) == 0x128, "CPhysical: error"); -- cgit v1.2.3