From 94aa76e7a1512c5a1e782c4f5e5b02674429c9aa Mon Sep 17 00:00:00 2001 From: Fiftytwo Date: Thu, 30 Nov 2017 20:41:44 +0100 Subject: [PATCH] Add auto object detection for takeoff, destroy, camerafocus --- src/script/scriptfunc.cpp | 35 +++++++++++++++++++++++++++-------- 1 file changed, 27 insertions(+), 8 deletions(-) diff --git a/src/script/scriptfunc.cpp b/src/script/scriptfunc.cpp index eb40aeb5..30b8e92f 100644 --- a/src/script/scriptfunc.cpp +++ b/src/script/scriptfunc.cpp @@ -406,7 +406,12 @@ bool CScriptFunctions::rDestroy(CBotVar* var, CBotVar* result, int& exception, v exception = 0; Error err; - CObject* obj = static_cast(var->GetUserPtr()); + CObject* obj; + if (var == nullptr) + obj = CObjectManager::GetInstancePointer()->FindNearest(pThis, OBJECT_DESTROYER); + else + obj = static_cast(var->GetUserPtr()); + if (obj == nullptr) { exception = ERR_WRONG_OBJ; @@ -660,7 +665,12 @@ bool CScriptFunctions::rTakeOff(CBotVar* var, CBotVar* result, int& exception, v Error err; exception = 0; - CObject* base = static_cast(var->GetUserPtr()); + CObject* base; + if (var == nullptr) + base = CObjectManager::GetInstancePointer()->FindNearest(pThis, OBJECT_BASE); + else + base = static_cast(var->GetUserPtr()); + if (base == nullptr) { exception = ERR_WRONG_OBJ; @@ -3015,20 +3025,29 @@ bool CScriptFunctions::rPenWidth(CBotVar* var, CBotVar* result, int& exception, CBotTypResult CScriptFunctions::cOneObject(CBotVar* &var, void* user) { - if ( var == nullptr ) return CBotTypResult(CBotErrLowParam); - var = var->GetNext(); - if ( var == nullptr ) return CBotTypResult(CBotTypFloat); - + if ( var != nullptr ) + { + var = var->GetNext(); + if ( var == nullptr ) return CBotTypResult(CBotTypFloat); + } + else + return CBotTypResult(CBotTypFloat); + return CBotTypResult(CBotErrOverParam); + } // Instruction "camerafocus(object)". bool CScriptFunctions::rCameraFocus(CBotVar* var, CBotVar* result, int& exception, void* user) { - CScript* script = static_cast(user); + CScript* script = static_cast(user); - CObject* object = static_cast(var->GetUserPtr()); + CObject* object; + if (var == nullptr) + object = script->m_object; + else + object = static_cast(var->GetUserPtr()); script->m_main->SelectObject(object, false);