From 6534978deaa4b4be79f2460fe5a225f55922fb19 Mon Sep 17 00:00:00 2001 From: Piotr Dziwinski Date: Mon, 17 Aug 2015 21:23:07 +0200 Subject: [PATCH] Refactor Character::posPower --- src/object/interface/powered_object.h | 5 +++++ src/object/motion/motionvehicle.cpp | 18 +++++++++--------- src/object/old_object.cpp | 11 +++++++++++ src/object/old_object.h | 5 +++-- src/object/old_object_interface.h | 12 ++---------- src/object/subclass/base_building.cpp | 10 +++++----- src/object/subclass/static_object.cpp | 1 + src/object/subclass/static_object.h | 2 ++ src/object/task/taskgoto.cpp | 5 ++--- src/object/task/taskmanip.cpp | 13 +++++-------- src/object/task/tasktake.cpp | 10 ++++------ src/physics/physics.cpp | 2 +- 12 files changed, 50 insertions(+), 44 deletions(-) diff --git a/src/object/interface/powered_object.h b/src/object/interface/powered_object.h index b3251dd1..05a7c8fe 100644 --- a/src/object/interface/powered_object.h +++ b/src/object/interface/powered_object.h @@ -48,6 +48,11 @@ public: virtual CObject* GetPower() = 0; //! Sets power cell virtual void SetPower(CObject* power) = 0; + + //! Returns the relative position of power cell + virtual Math::Vector GetPowerPosition() = 0; + //! Sets the relative position of power cell + virtual void SetPowerPosition(const Math::Vector& powerPosition) = 0; }; inline float GetObjectEnergy(CObject* object) diff --git a/src/object/motion/motionvehicle.cpp b/src/object/motion/motionvehicle.cpp index 390a627b..28c42af4 100644 --- a/src/object/motion/motionvehicle.cpp +++ b/src/object/motion/motionvehicle.cpp @@ -920,7 +920,7 @@ void CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, m_object->CreateEffectLight(20.0f, color); CObject* powerCell = nullptr; - Math::Vector powerCellPos = m_object->GetCharacter()->posPower; + Math::Vector powerCellPos = m_object->GetPowerPosition(); float powerCellAngle = 0.0f; if (power <= 1.0f) { @@ -963,7 +963,7 @@ void CMotionVehicle::CreatePhysics(ObjectType type) character->wheelBack = 4.0f; character->wheelLeft = 4.0f; character->wheelRight = 4.0f; - character->posPower = Math::Vector(-3.2f, 3.0f, 0.0f); + m_object->SetPowerPosition(Math::Vector(-3.2f, 3.0f, 0.0f)); m_physics->SetLinMotionX(MO_ADVSPEED, 20.0f); m_physics->SetLinMotionX(MO_RECSPEED, 10.0f); @@ -989,7 +989,7 @@ void CMotionVehicle::CreatePhysics(ObjectType type) character->wheelBack = 3.0f; character->wheelLeft = 4.0f; character->wheelRight = 4.0f; - character->posPower = Math::Vector(-3.2f, 3.0f, 0.0f); + m_object->SetPowerPosition(Math::Vector(-3.2f, 3.0f, 0.0f)); m_physics->SetLinMotionX(MO_ADVSPEED, 20.0f); m_physics->SetLinMotionX(MO_RECSPEED, 10.0f); @@ -1018,7 +1018,7 @@ void CMotionVehicle::CreatePhysics(ObjectType type) character->wheelBack = 4.0f; character->wheelLeft = 4.8f; character->wheelRight = 4.8f; - character->posPower = Math::Vector(-3.2f, 3.0f, 0.0f); + m_object->SetPowerPosition(Math::Vector(-3.2f, 3.0f, 0.0f)); m_physics->SetLinMotionX(MO_ADVSPEED, 15.0f); m_physics->SetLinMotionX(MO_RECSPEED, 8.0f); @@ -1047,7 +1047,7 @@ void CMotionVehicle::CreatePhysics(ObjectType type) character->wheelBack = 4.0f; character->wheelLeft = 5.0f; character->wheelRight = 5.0f; - character->posPower = Math::Vector(-3.2f, 3.0f, 0.0f); + m_object->SetPowerPosition(Math::Vector(-3.2f, 3.0f, 0.0f)); m_physics->SetLinMotionX(MO_ADVSPEED, 15.0f); m_physics->SetLinMotionX(MO_RECSPEED, 8.0f); @@ -1078,7 +1078,7 @@ void CMotionVehicle::CreatePhysics(ObjectType type) character->wheelBack = 4.0f; character->wheelLeft = 4.5f; character->wheelRight = 4.5f; - character->posPower = Math::Vector(-3.2f, 3.0f, 0.0f); + m_object->SetPowerPosition(Math::Vector(-3.2f, 3.0f, 0.0f)); m_physics->SetLinMotionX(MO_ADVSPEED, 50.0f); m_physics->SetLinMotionX(MO_RECSPEED, 50.0f); @@ -1112,7 +1112,7 @@ void CMotionVehicle::CreatePhysics(ObjectType type) character->wheelBack = 5.0f; character->wheelLeft = 6.0f; character->wheelRight = 6.0f; - character->posPower = Math::Vector(-5.8f, 4.0f, 0.0f); + m_object->SetPowerPosition(Math::Vector(-5.8f, 4.0f, 0.0f)); m_physics->SetLinMotionX(MO_ADVSPEED, 10.0f); m_physics->SetLinMotionX(MO_RECSPEED, 5.0f); @@ -1138,7 +1138,7 @@ void CMotionVehicle::CreatePhysics(ObjectType type) character->wheelBack = 4.0f; character->wheelLeft = 4.0f; character->wheelRight = 4.0f; - character->posPower = Math::Vector(-5.0f, 3.0f, 0.0f); + m_object->SetPowerPosition(Math::Vector(-5.0f, 3.0f, 0.0f)); m_physics->SetLinMotionX(MO_ADVSPEED, 15.0f); m_physics->SetLinMotionX(MO_RECSPEED, 10.0f); @@ -1164,7 +1164,7 @@ void CMotionVehicle::CreatePhysics(ObjectType type) character->wheelBack = 4.0f; character->wheelLeft = 4.0f; character->wheelRight = 4.0f; - character->posPower = Math::Vector(-5.0f, 3.0f, 0.0f); + m_object->SetPowerPosition(Math::Vector(-5.0f, 3.0f, 0.0f)); m_physics->SetLinMotionX(MO_ADVSPEED, 15.0f); m_physics->SetLinMotionX(MO_RECSPEED, 10.0f); diff --git a/src/object/old_object.cpp b/src/object/old_object.cpp index a164136e..f6ae1321 100644 --- a/src/object/old_object.cpp +++ b/src/object/old_object.cpp @@ -1551,6 +1551,17 @@ CObject* COldObject::GetPower() return m_power; } +void COldObject::SetPowerPosition(const Math::Vector& powerPosition) +{ + m_powerPosition = powerPosition; +} + +Math::Vector COldObject::GetPowerPosition() +{ + return m_powerPosition; +} + + // Management of the object transport. void COldObject::SetCargo(CObject* cargo) diff --git a/src/object/old_object.h b/src/object/old_object.h index 8cc048a5..894334c2 100644 --- a/src/object/old_object.h +++ b/src/object/old_object.h @@ -175,6 +175,8 @@ public: void SetPower(CObject* power) override; CObject* GetPower() override; + Math::Vector GetPowerPosition(); + void SetPowerPosition(const Math::Vector& powerPosition); void SetCargo(CObject* cargo) override; CObject* GetCargo() override; void SetTransporter(CObject* transporter) override; @@ -302,8 +304,6 @@ protected: void TransformCrashSphere(Math::Sphere &crashSphere) override; void TransformCameraCollisionSphere(Math::Sphere& collisionSphere) override; - Error EndedTask(); - protected: Gfx::CEngine* m_engine; Gfx::CLightManager* m_lightMan; @@ -329,6 +329,7 @@ protected: Math::Vector m_cirVibration; // circular vibration Math::Vector m_tilt; // tilt CObject* m_power; // battery used by the vehicle + Math::Vector m_powerPosition; CObject* m_cargo; // object transported CObject* m_transporter; // object with the latter int m_transporterLink; // part diff --git a/src/object/old_object_interface.h b/src/object/old_object_interface.h index 20d7c629..a75da0d2 100644 --- a/src/object/old_object_interface.h +++ b/src/object/old_object_interface.h @@ -24,20 +24,13 @@ #pragma once -#include "graphics/engine/camera.h" -#include "graphics/engine/engine.h" +#include "math/matrix.h" +#include "math/vector.h" #include "object/object_type.h" -#include "sound/sound_type.h" -#include - -class CPhysics; -class CMotion; class CAuto; -class CBotVar; -class CScript; struct Character @@ -47,7 +40,6 @@ struct Character float wheelLeft = 0.0f; // position Z of the left wheels float wheelRight = 0.0f; // position Z of the right wheels float height = 0.0f; // normal height on top of ground - Math::Vector posPower; // position of the battery }; class COldObjectInterface diff --git a/src/object/subclass/base_building.cpp b/src/object/subclass/base_building.cpp index 1effcf5e..9dfd1f0c 100644 --- a/src/object/subclass/base_building.cpp +++ b/src/object/subclass/base_building.cpp @@ -297,7 +297,7 @@ std::unique_ptr CBaseBuilding::Create( obj->AddCrashSphere(CrashSphere(Math::Vector(0.0f, 14.0f, 0.0f), 7.0f, SOUND_BOUMm, 0.45f)); obj->SetCameraCollisionSphere(Math::Sphere(Math::Vector(0.0f, 8.0f, 0.0f), 12.0f)); - obj->GetCharacter()->posPower = Math::Vector(7.5f, 3.0f, 0.0f); + obj->SetPowerPosition(Math::Vector(7.5f, 3.0f, 0.0f)); obj->CreateShadowCircle(12.0f, 1.0f); } @@ -350,7 +350,7 @@ std::unique_ptr CBaseBuilding::Create( obj->AddCrashSphere(CrashSphere(Math::Vector( 0.0f, 1.0f, 0.0f), 1.5f, SOUND_BOUMm, 0.45f)); obj->SetCameraCollisionSphere(Math::Sphere(Math::Vector(-7.0f, 5.0f, 0.0f), 5.0f)); - obj->GetCharacter()->posPower = Math::Vector(0.0f, 3.0f, 0.0f); + obj->SetPowerPosition(Math::Vector(0.0f, 3.0f, 0.0f)); obj->SetEnergyLevel(params.power); // initializes the energy level obj->CreateShadowCircle(6.0f, 0.5f); @@ -411,7 +411,7 @@ std::unique_ptr CBaseBuilding::Create( obj->AddCrashSphere(CrashSphere(Math::Vector(-12.0f, 3.0f, -3.0f), 4.0f, SOUND_BOUMm, 0.45f)); obj->SetCameraCollisionSphere(Math::Sphere(Math::Vector(-10.0f, 5.0f, 0.0f), 7.0f)); - obj->GetCharacter()->posPower = Math::Vector(0.0f, 3.0f, 0.0f); + obj->SetPowerPosition(Math::Vector(0.0f, 3.0f, 0.0f)); obj->CreateShadowCircle(7.0f, 0.5f); } @@ -606,7 +606,7 @@ std::unique_ptr CBaseBuilding::Create( obj->AddCrashSphere(CrashSphere(Math::Vector(0.0f, 24.0f, 0.0f), 5.0f, SOUND_BOUMm, 0.45f)); obj->SetCameraCollisionSphere(Math::Sphere(Math::Vector(0.0f, 5.0f, 0.0f), 7.0f)); - obj->GetCharacter()->posPower = Math::Vector(5.0f, 3.0f, 0.0f); + obj->SetPowerPosition(Math::Vector(5.0f, 3.0f, 0.0f)); obj->CreateShadowCircle(6.0f, 1.0f); } @@ -631,7 +631,7 @@ std::unique_ptr CBaseBuilding::Create( obj->AddCrashSphere(CrashSphere(Math::Vector(22.0f, 1.0f, 0.0f), 1.5f, SOUND_BOUMm, 0.45f)); obj->SetCameraCollisionSphere(Math::Sphere(Math::Vector(0.0f, 17.0f, 0.0f), 26.0f)); - obj->GetCharacter()->posPower = Math::Vector(22.0f, 3.0f, 0.0f); + obj->SetPowerPosition(Math::Vector(22.0f, 3.0f, 0.0f)); obj->CreateShadowCircle(21.0f, 1.0f); } diff --git a/src/object/subclass/static_object.cpp b/src/object/subclass/static_object.cpp index 83f50b6d..0b9b8fac 100644 --- a/src/object/subclass/static_object.cpp +++ b/src/object/subclass/static_object.cpp @@ -21,6 +21,7 @@ #include "common/make_unique.h" +#include "graphics/engine/engine.h" #include "graphics/engine/terrain.h" #include "graphics/model/model.h" diff --git a/src/object/subclass/static_object.h b/src/object/subclass/static_object.h index 36bc4fa8..1f7ae1af 100644 --- a/src/object/subclass/static_object.h +++ b/src/object/subclass/static_object.h @@ -21,6 +21,7 @@ #include "object/object.h" +#include #include namespace Gfx @@ -28,6 +29,7 @@ namespace Gfx class CModelManager; class CEngine; class CModel; +class CTerrain; } // namespace Gfx class CStaticObject; diff --git a/src/object/task/taskgoto.cpp b/src/object/task/taskgoto.cpp index a4df61fd..d61200e2 100644 --- a/src/object/task/taskgoto.cpp +++ b/src/object/task/taskgoto.cpp @@ -1023,7 +1023,6 @@ CObject* CTaskGoto::SearchTarget(Math::Vector pos, float margin) bool CTaskGoto::AdjustTarget(CObject* pObj, Math::Vector &pos, float &distance) { ObjectType type; - Character* character; Math::Matrix* mat; Math::Vector goal; float dist, suppl; @@ -1090,8 +1089,8 @@ bool CTaskGoto::AdjustTarget(CObject* pObj, Math::Vector &pos, float &distance) type == OBJECT_MOBILEit || type == OBJECT_MOBILEdr ) { - character = pObj->GetCharacter(); - pos = character->posPower; + assert(pObj->Implements(ObjectInterfaceType::Powered)); + pos = dynamic_cast(pObj)->GetPowerPosition(); pos.x -= TAKE_DIST+TAKE_DIST_OTHER+distance; mat = pObj->GetWorldMatrix(0); pos = Transform(*mat, pos); diff --git a/src/object/task/taskmanip.cpp b/src/object/task/taskmanip.cpp index ebf760d4..c1823419 100644 --- a/src/object/task/taskmanip.cpp +++ b/src/object/task/taskmanip.cpp @@ -939,8 +939,7 @@ CObject* CTaskManip::SearchOtherObject(bool bAdvance, Math::Vector &pos, } mat = pObj->GetWorldMatrix(0); - character = pObj->GetCharacter(); - Math::Vector oPos = Transform(*mat, character->posPower); + Math::Vector oPos = Transform(*mat, dynamic_cast(pObj)->GetPowerPosition()); oAngle = pObj->GetRotationY(); if ( type == OBJECT_TOWER || @@ -975,8 +974,8 @@ CObject* CTaskManip::SearchOtherObject(bool bAdvance, Math::Vector &pos, angle = Math::RotateAngle(oPos.x-iPos.x, iPos.z-oPos.z); // CW ! if ( Math::TestAngle(angle, iAngle-aLimit, iAngle+aLimit) ) { - character = pObj->GetCharacter(); - height = character->posPower.y; + Math::Vector powerPos = dynamic_cast(pObj)->GetPowerPosition(); + height = powerPos.y; pos = oPos; return pObj; } @@ -1204,8 +1203,7 @@ bool CTaskManip::TransporterDeposeObject() dynamic_cast(cargo)->SetTransporter(m_object); dynamic_cast(cargo)->SetTransporterPart(0); // carried by the base - Character* character = m_object->GetCharacter(); - cargo->SetPosition(character->posPower); + cargo->SetPosition(m_object->GetPowerPosition()); cargo->SetRotationY(0.0f); cargo->SetRotationX(0.0f); cargo->SetRotationZ(0.0f); @@ -1235,8 +1233,7 @@ bool CTaskManip::TransporterDeposeObject() dynamic_cast(other)->SetPower(cargo); dynamic_cast(cargo)->SetTransporter(other); - Character* character = other->GetCharacter(); - cargo->SetPosition(character->posPower); + cargo->SetPosition(dynamic_cast(other)->GetPowerPosition()); cargo->SetRotationY(0.0f); cargo->SetRotationX(0.0f); cargo->SetRotationZ(0.0f); diff --git a/src/object/task/tasktake.cpp b/src/object/task/tasktake.cpp index 5b0ccb6c..e0aab6aa 100644 --- a/src/object/task/tasktake.cpp +++ b/src/object/task/tasktake.cpp @@ -421,8 +421,7 @@ CObject* CTaskTake::SearchFriendObject(float &angle, } Math::Matrix* mat = pObj->GetWorldMatrix(0); - Character* character = pObj->GetCharacter(); - Math::Vector oPos = Transform(*mat, character->posPower); + Math::Vector oPos = Math::Transform(*mat, dynamic_cast(pObj)->GetPowerPosition()); float distance = fabs(Math::Distance(oPos, iPos) - (iRad+1.0f)); if ( distance <= dLimit ) @@ -430,8 +429,8 @@ CObject* CTaskTake::SearchFriendObject(float &angle, angle = Math::RotateAngle(oPos.x-iPos.x, iPos.z-oPos.z); // CW ! if ( Math::TestAngle(angle, iAngle-aLimit, iAngle+aLimit) ) { - character = pObj->GetCharacter(); - m_height = character->posPower.y; + Math::Vector powerPos = dynamic_cast(pObj)->GetPowerPosition(); + m_height = powerPos.y; return pObj; } } @@ -538,8 +537,7 @@ bool CTaskTake::TransporterDeposeObject() dynamic_cast(other)->SetPower(cargo); dynamic_cast(cargo)->SetTransporter(other); - Character* character = other->GetCharacter(); - cargo->SetPosition(character->posPower); + cargo->SetPosition(dynamic_cast(other)->GetPowerPosition()); cargo->SetRotationY(0.0f); cargo->SetRotationX(0.0f); cargo->SetRotationZ(0.0f); diff --git a/src/physics/physics.cpp b/src/physics/physics.cpp index 4a678a91..ce550ed9 100644 --- a/src/physics/physics.cpp +++ b/src/physics/physics.cpp @@ -2978,7 +2978,7 @@ void CPhysics::PowerParticle(float factor, bool bBreak) mat = m_object->GetWorldMatrix(0); character = m_object->GetCharacter(); - pos = character->posPower; + pos = m_object->GetPowerPosition(); pos.x -= 0.3f; pos.y += 1.0f; // battery center position pos = Transform(*mat, pos);