Blob Blame History Raw
diff --git a/src/graphics/engine/camera.cpp b/src/graphics/engine/camera.cpp
index 461f46a..1244f7d 100644
--- a/src/graphics/engine/camera.cpp
+++ b/src/graphics/engine/camera.cpp
@@ -59,14 +59,14 @@ static void SetTransparency(CObject* obj, float value)
 
     if (obj->Implements(ObjectInterfaceType::Carrier))
     {
-        CObject* cargo = dynamic_cast<CCarrierObject*>(obj)->GetCargo();
+        CObject* cargo = dynamic_cast<CCarrierObject&>(*obj).GetCargo();
         if (cargo != nullptr)
             cargo->SetTransparency(value);
     }
 
     if (obj->Implements(ObjectInterfaceType::Powered))
     {
-        CObject* power = dynamic_cast<CPoweredObject*>(obj)->GetPower();
+        CObject* power = dynamic_cast<CPoweredObject&>(*obj).GetPower();
         if (power != nullptr)
             power->SetTransparency(value);
     }
@@ -1233,7 +1233,7 @@ bool CCamera::EventFrameBack(const Event &event)
 
         bool ground = true;
         if (m_cameraObj->Implements(ObjectInterfaceType::Movable))
-            ground = dynamic_cast<CMovableObject*>(m_cameraObj)->GetPhysics()->GetLand();
+            ground = dynamic_cast<CMovableObject&>(*m_cameraObj).GetPhysics()->GetLand();
         if ( ground )  // ground?
         {
             Math::Vector pos = lookatPt + (lookatPt - m_eyePt);
@@ -1326,7 +1326,7 @@ bool CCamera::EventFrameOnBoard(const Event &event)
     {
         assert(m_cameraObj->Implements(ObjectInterfaceType::Controllable));
         Math::Vector lookatPt, upVec;
-        dynamic_cast<CControllableObject*>(m_cameraObj)->AdjustCamera(m_eyePt, m_directionH, m_directionV, lookatPt, upVec, m_type);
+        dynamic_cast<CControllableObject&>(*m_cameraObj).AdjustCamera(m_eyePt, m_directionH, m_directionV, lookatPt, upVec, m_type);
         Math::Vector eye    = m_effectOffset * 0.3f + m_eyePt;
         Math::Vector lookat = m_effectOffset * 0.3f + lookatPt;
 
diff --git a/src/object/interface/carrier_object.h b/src/object/interface/carrier_object.h
index b534fd4..a8510b6 100644
--- a/src/object/interface/carrier_object.h
+++ b/src/object/interface/carrier_object.h
@@ -51,5 +51,5 @@ public:
 inline bool IsObjectCarryingCargo(CObject* obj)
 {
     return obj->Implements(ObjectInterfaceType::Carrier) &&
-           dynamic_cast<CCarrierObject*>(obj)->IsCarryingCargo();
+           dynamic_cast<CCarrierObject&>(*obj).IsCarryingCargo();
 }
diff --git a/src/object/interface/powered_object.h b/src/object/interface/powered_object.h
index 54b6dd1..1216eda 100644
--- a/src/object/interface/powered_object.h
+++ b/src/object/interface/powered_object.h
@@ -61,10 +61,10 @@ inline float GetObjectEnergy(CObject* object)
 
     if (object->Implements(ObjectInterfaceType::Powered))
     {
-        CObject* power = dynamic_cast<CPoweredObject*>(object)->GetPower();
+        CObject* power = dynamic_cast<CPoweredObject&>(*object).GetPower();
         if (power != nullptr && power->Implements(ObjectInterfaceType::PowerContainer))
         {
-            energy = dynamic_cast<CPowerContainerObject*>(power)->GetEnergy();
+            energy = dynamic_cast<CPowerContainerObject&>(*power).GetEnergy();
         }
     }
 
@@ -77,10 +77,10 @@ inline float GetObjectEnergyLevel(CObject* object)
 
     if (object->Implements(ObjectInterfaceType::Powered))
     {
-        CObject* power = dynamic_cast<CPoweredObject*>(object)->GetPower();
+        CObject* power = dynamic_cast<CPoweredObject&>(*object).GetPower();
         if (power != nullptr && power->Implements(ObjectInterfaceType::PowerContainer))
         {
-            energy = dynamic_cast<CPowerContainerObject*>(power)->GetEnergyLevel();
+            energy = dynamic_cast<CPowerContainerObject&>(*power).GetEnergyLevel();
         }
     }
 
@@ -90,5 +90,5 @@ inline float GetObjectEnergyLevel(CObject* object)
 inline bool ObjectHasPowerCell(CObject* object)
 {
     return object->Implements(ObjectInterfaceType::Powered) &&
-           dynamic_cast<CPoweredObject*>(object)->GetPower() != nullptr;
+           dynamic_cast<CPoweredObject&>(*object).GetPower() != nullptr;
 }
diff --git a/src/object/interface/transportable_object.h b/src/object/interface/transportable_object.h
index 2d0f90f..1ad95d0 100644
--- a/src/object/interface/transportable_object.h
+++ b/src/object/interface/transportable_object.h
@@ -54,5 +54,5 @@ public:
 inline bool IsObjectBeingTransported(CObject* obj)
 {
     return obj->Implements(ObjectInterfaceType::Transportable) &&
-           dynamic_cast<CTransportableObject*>(obj)->IsBeingTransported();
+           dynamic_cast<CTransportableObject&>(*obj).IsBeingTransported();
 }