diff --git a/src/level/robotmain.cpp b/src/level/robotmain.cpp index a0bb7a5a..2b2623da 100644 --- a/src/level/robotmain.cpp +++ b/src/level/robotmain.cpp @@ -1921,6 +1921,7 @@ CObject* CRobotMain::DetectObject(Math::Point pos) } //! Indicates whether an object is selectable +// TODO: Refactor this, calling CControllableObject::GetSelectable should always be enough bool CRobotMain::IsSelectable(CObject* obj) { if (obj->GetType() == OBJECT_TOTO) return true; diff --git a/src/level/robotmain.h b/src/level/robotmain.h index 13814c45..5b400e69 100644 --- a/src/level/robotmain.h +++ b/src/level/robotmain.h @@ -373,6 +373,8 @@ public: void StartDetectEffect(COldObject* object, CObject* target); + bool IsSelectable(CObject* pObj); + protected: bool EventFrame(const Event &event); bool EventObject(const Event &event); @@ -397,7 +399,6 @@ protected: void RemoteCamera(float pan, float zoom, float rTime); void KeyCamera(EventType event, InputSlot key); void AbortMovie(); - bool IsSelectable(CObject* pObj); void SelectOneObject(CObject* pObj, bool displayError=true); void HelpObject(); bool DeselectObject(); diff --git a/src/ui/controls/target.cpp b/src/ui/controls/target.cpp index 2c4d33a8..18a2f8a7 100644 --- a/src/ui/controls/target.cpp +++ b/src/ui/controls/target.cpp @@ -147,9 +147,8 @@ CObject* CTarget::DetectFriendObject(Math::Point pos) if ( !target->GetDetectable() ) continue; if ( target->GetProxyActivate() ) continue; - if ( !target->Implements(ObjectInterfaceType::Controllable) ) continue; - if ( dynamic_cast(target)->GetSelect() ) continue; - if ( !dynamic_cast(target)->GetSelectable() ) continue; + if ( target->Implements(ObjectInterfaceType::Controllable) && dynamic_cast(target)->GetSelect() ) continue; + if ( !m_main->IsSelectable(target) ) continue; if (!target->Implements(ObjectInterfaceType::Old)) continue; // TODO: To be removed after COldObjectInterface is gone