diff --git a/source/game/BaseCharacter.cpp b/source/game/BaseCharacter.cpp index 859ba65d862ec8deed5fb3578470da99f6819fff..c0e866e83e7edd1ac96a29e9235628819647822c 100644 --- a/source/game/BaseCharacter.cpp +++ b/source/game/BaseCharacter.cpp @@ -76,7 +76,8 @@ void CBaseCharacter::onPostLoad() //btTransform startTransform; startTransform.setIdentity(); - startTransform.setOrigin(F3_BTVEC(m_vPosition + float3(0.0f, m_fCapsHeight * 0.5f, 0.0f))); + float3 vPos = getPos() + float3(0.0f, m_fCapsHeight * 0.5f, 0.0f); + startTransform.setOrigin(F3_BTVEC(vPos)); //startTransform.setOrigin(btVector3(0, 12, 10)); m_pGhostObject = new btPairCachingGhostObject(); diff --git a/source/game/BaseEntity.h b/source/game/BaseEntity.h index a53dd17699a90a6df2cd24d59086e23af51c6c33..59106d18b8ffab9cde2bf9944d696180553f7b68 100644 --- a/source/game/BaseEntity.h +++ b/source/game/BaseEntity.h @@ -192,23 +192,24 @@ private: bool m_isInOnParentMoved = false; void onParentMoved(bool bAdjustOffsets = false); -protected: - virtual void _cleanup(); - virtual void _initEditorBoxes(); - virtual void _releaseEditorBoxes(); - - CEntityManager *m_pMgr = NULL; - //! Позиция объекта float3_t m_vPosition; //! вращение SMQuaternion m_qOrientation; + //! Позиция смещения (для иерархической структуры) float3_t m_vOffsetPos; //! Вращение смещения (для иерархической структуры) SMQuaternion m_qOffsetOrient; +protected: + virtual void _cleanup(); + virtual void _initEditorBoxes(); + virtual void _releaseEditorBoxes(); + + CEntityManager *m_pMgr = NULL; + //! Идентификатор в системе ID m_iId = 0; diff --git a/source/game/BaseTool.cpp b/source/game/BaseTool.cpp index f68dcd7e72b2927d1958bf81afa93eac27287c5a..877cfd464516e5dedeb4334723e460b0a0ff2a45 100644 --- a/source/game/BaseTool.cpp +++ b/source/game/BaseTool.cpp @@ -227,7 +227,7 @@ void CBaseTool::dbgMove(int dir, float dy) printf(COLOR_GREEN "slot_offset = " COLOR_LGREEN "%f %f %f\n" COLOR_GREEN "slot_rotation = " COLOR_LGREEN "%f %f %f %f\n" COLOR_GREEN "center_length = " COLOR_LGREEN "%f\n" COLOR_RESET - , m_vOffsetPos.x, m_vOffsetPos.y, m_vOffsetPos.z + , m_vSlotPosResult.x, m_vSlotPosResult.y, m_vSlotPosResult.z , m_qSlotRotResult.x, m_qSlotRotResult.y, m_qSlotRotResult.z, m_qSlotRotResult.w , m_fCenterLength); break; @@ -239,16 +239,6 @@ void CBaseTool::dbgMove(int dir, float dy) #if 0 void CBaseTool::onSync() { - if(m_pOwner) - { - float3_t ang = ((CPlayer*)m_pOwner.getEntity())->getWeaponDeltaAngles(); - m_qOffsetOrient = m_qSlotRotResult * SMQuaternion(ang.x, 'x') * SMQuaternion(ang.y, 'y') * SMQuaternion(ang.z, 'z'); - } - else - { - m_qOffsetOrient = m_qSlotRotResult; - } - m_vOffsetPos = m_vSlotPosResult; BaseClass::onSync(); if(m_pModel && m_pModel->asAnimatedModel()) { diff --git a/source/game/Player.cpp b/source/game/Player.cpp index 13b47219c88b435a0c146426562ea5c791a94374..d2f2782e21a8c0f987c60a844ce0a48a34549815 100644 --- a/source/game/Player.cpp +++ b/source/game/Player.cpp @@ -203,7 +203,7 @@ void CPlayer::updateInput(float dt) if(m_uMoveDir & PM_OBSERVER) { - m_vPosition = (float3)(m_vPosition + m_pHeadEnt->getOrient() * (SMVector3Normalize(dir) * dt)); + setPos(getPos() + m_pHeadEnt->getOrient() * (SMVector3Normalize(dir) * dt)); } else { @@ -292,7 +292,7 @@ void CPlayer::updateInput(float dt) float sin = cosf(m_fViewbobStep * 2.0f); float sin2 = sinf(m_fViewbobStep); float3 vec(1.0f, 0.0f, 0.0f); - vec = m_qOrientation * vec; + vec = getOrient() * vec; m_fViewbobY = (sin * ((m_uMoveDir & PM_RUN) ? *cl_bob_run_y : *cl_bob_walk_y)); m_fViewbobStrafe = (float3)(vec * sin2 * ((m_uMoveDir & PM_RUN) ? *cl_bob_run_x : *cl_bob_walk_x)); //m_vOrientation = SMQuaternion(SMToRadian(10) * sinf(m_fViewbobStep), 'z') * m_vOrientation; @@ -310,7 +310,7 @@ void CPlayer::updateInput(float dt) m_vWpnShakeAngles.x = clampf(m_vWpnShakeAngles.x, -fMaxAng, fMaxAng); } - GameData::m_pHUDcontroller->setPlayerPos(m_vPosition); + GameData::m_pHUDcontroller->setPlayerPos(getPos()); } @@ -387,7 +387,7 @@ void CPlayer::spawn() m_pCrosshair->enable(); GameData::m_pHUDcontroller->setPlayerRot(m_vPitchYawRoll); - GameData::m_pHUDcontroller->setPlayerPos(m_vPosition); + GameData::m_pHUDcontroller->setPlayerPos(getPos()); GameData::m_pHUDcontroller->setPlayerHealth(m_fHealth); return; }