From a9673d5f724e5b118d4d885e83f06f5b26dbb17f Mon Sep 17 00:00:00 2001 From: krzys-h Date: Tue, 11 Aug 2015 23:13:57 +0200 Subject: [PATCH] Moved StartDetectEffect to CRobotMain --- src/object/old_object.cpp | 40 ----------------------------- src/object/old_object.h | 2 -- src/object/old_object_interface.cpp | 5 ---- src/object/old_object_interface.h | 3 --- src/object/robotmain.cpp | 40 +++++++++++++++++++++++++++++ src/object/robotmain.h | 3 +++ src/script/scriptfunc.cpp | 5 +++- 7 files changed, 47 insertions(+), 51 deletions(-) diff --git a/src/object/old_object.cpp b/src/object/old_object.cpp index dd6c411a..01ab979c 100644 --- a/src/object/old_object.cpp +++ b/src/object/old_object.cpp @@ -2446,46 +2446,6 @@ bool COldObject::JostleObject(float force) } -// Beginning of the effect when the instruction "detect" is used. - -void COldObject::StartDetectEffect(CObject *target, bool bFound) -{ - Math::Matrix* mat; - Math::Vector pos, goal; - Math::Point dim; - - mat = GetWorldMatrix(0); - pos = Math::Transform(*mat, Math::Vector(2.0f, 3.0f, 0.0f)); - - if ( target == 0 ) - { - goal = Math::Transform(*mat, Math::Vector(50.0f, 3.0f, 0.0f)); - } - else - { - goal = target->GetPosition(); - goal.y += 3.0f; - goal = Math::SegmentPoint(pos, goal, Math::Distance(pos, goal)-3.0f); - } - - dim.x = 3.0f; - dim.y = dim.x; - m_particle->CreateRay(pos, goal, Gfx::PARTIRAY2, dim, 0.2f); - - if ( target != 0 ) - { - goal = target->GetPosition(); - goal.y += 3.0f; - goal = Math::SegmentPoint(pos, goal, Math::Distance(pos, goal)-1.0f); - dim.x = 6.0f; - dim.y = dim.x; - m_particle->CreateParticle(goal, Math::Vector(0.0f, 0.0f, 0.0f), dim, - bFound?Gfx::PARTIGLINT:Gfx::PARTIGLINTr, 0.5f); - } - - m_sound->Play(bFound?SOUND_BUILD:SOUND_RECOVER); -} - // Management of time from which a virus is active. diff --git a/src/object/old_object.h b/src/object/old_object.h index f56cd0f0..0ca196f9 100644 --- a/src/object/old_object.h +++ b/src/object/old_object.h @@ -220,8 +220,6 @@ public: Math::Sphere GetJostlingSphere() const override; bool JostleObject(float force) override; - void StartDetectEffect(CObject *target, bool bFound) override; - void SetVirusMode(bool bEnable) override; bool GetVirusMode() override; diff --git a/src/object/old_object_interface.cpp b/src/object/old_object_interface.cpp index 18f323a5..b6a8f831 100644 --- a/src/object/old_object_interface.cpp +++ b/src/object/old_object_interface.cpp @@ -136,11 +136,6 @@ bool COldObjectInterface::GetFixed() } -void COldObjectInterface::StartDetectEffect(CObject *target, bool bFound) -{ - throw std::logic_error("StartDetectEffect: not implemented!"); -} - void COldObjectInterface::SetVirusMode(bool bEnable) { throw std::logic_error("SetVirusMode: not implemented!"); diff --git a/src/object/old_object_interface.h b/src/object/old_object_interface.h index 2a8ac14a..b4a2bfad 100644 --- a/src/object/old_object_interface.h +++ b/src/object/old_object_interface.h @@ -107,9 +107,6 @@ public: virtual void SetFixed(bool bFixed); virtual bool GetFixed(); - // This either goes to CProgrammableObject or gets removed entirely (detect() was used in Ceebot-Teen only, unless we want to restore it) - virtual void StartDetectEffect(CObject *target, bool bFound); - // Not sure. Maybe a separate interface, or maybe CControllableObject (buildings can have viruses too) virtual void SetVirusMode(bool bEnable); virtual bool GetVirusMode(); diff --git a/src/object/robotmain.cpp b/src/object/robotmain.cpp index 0215de58..d1a2dea7 100644 --- a/src/object/robotmain.cpp +++ b/src/object/robotmain.cpp @@ -6468,3 +6468,43 @@ float CRobotMain::GetGlobalMagnifyDamage() { return m_globalMagnifyDamage; } + +// Beginning of the effect when the instruction "detect" is used. + +void CRobotMain::StartDetectEffect(COldObject* object, CObject* target) +{ + Math::Matrix* mat; + Math::Vector pos, goal; + Math::Point dim; + + mat = object->GetWorldMatrix(0); + pos = Math::Transform(*mat, Math::Vector(2.0f, 3.0f, 0.0f)); + + if ( target == 0 ) + { + goal = Math::Transform(*mat, Math::Vector(50.0f, 3.0f, 0.0f)); + } + else + { + goal = target->GetPosition(); + goal.y += 3.0f; + goal = Math::SegmentPoint(pos, goal, Math::Distance(pos, goal)-3.0f); + } + + dim.x = 3.0f; + dim.y = dim.x; + m_particle->CreateRay(pos, goal, Gfx::PARTIRAY2, dim, 0.2f); + + if ( target != nullptr ) + { + goal = target->GetPosition(); + goal.y += 3.0f; + goal = Math::SegmentPoint(pos, goal, Math::Distance(pos, goal)-1.0f); + dim.x = 6.0f; + dim.y = dim.x; + m_particle->CreateParticle(goal, Math::Vector(0.0f, 0.0f, 0.0f), dim, + target != nullptr ? Gfx::PARTIGLINT : Gfx::PARTIGLINTr, 0.5f); + } + + m_sound->Play(target != nullptr ? SOUND_BUILD : SOUND_RECOVER); +} diff --git a/src/object/robotmain.h b/src/object/robotmain.h index 0fb18b24..d5cb0e66 100644 --- a/src/object/robotmain.h +++ b/src/object/robotmain.h @@ -83,6 +83,7 @@ class CSceneEndCondition; class CAudioChangeCondition; class CPlayerProfile; class CSettings; +class COldObject; namespace Gfx { @@ -370,6 +371,8 @@ public: //! Returns global magnifyDamage setting float GetGlobalMagnifyDamage(); + void StartDetectEffect(COldObject* object, CObject* target); + protected: bool EventFrame(const Event &event); bool EventObject(const Event &event); diff --git a/src/script/scriptfunc.cpp b/src/script/scriptfunc.cpp index ed6309b9..54a2fe52 100644 --- a/src/script/scriptfunc.cpp +++ b/src/script/scriptfunc.cpp @@ -1288,7 +1288,10 @@ bool CScriptFunctions::rDetect(CBotVar* var, CBotVar* result, int& exception, vo pBest = CObjectManager::GetInstancePointer()->Radar(pThis, type_v, 0.0f, 45.0f*Math::PI/180.0f, 0.0f, 20.0f, false, FILTER_NONE, true); - pThis->StartDetectEffect(pBest, pBest != nullptr); + if (pThis->Implements(ObjectInterfaceType::Old)) + { + script->m_main->StartDetectEffect(dynamic_cast(pThis), pBest); + } if ( pBest == 0 ) {