From 040a7e8f249a190b0d66b10ccec075ad33772d7c Mon Sep 17 00:00:00 2001 From: krzys-h Date: Sat, 30 Mar 2013 15:43:09 +0100 Subject: Added function destroy(rank) --- src/script/script.cpp | 38 ++++++++++++++++++++++++++++++++++++++ src/script/script.h | 2 ++ 2 files changed, 40 insertions(+) diff --git a/src/script/script.cpp b/src/script/script.cpp index d5fe2ce..f09b53a 100644 --- a/src/script/script.cpp +++ b/src/script/script.cpp @@ -349,6 +349,43 @@ bool CScript::rGetObject(CBotVar* var, CBotVar* result, int& exception, void* us return true; } +// Compilation of the instruction "destroy(rank)". + +CBotTypResult CScript::cDestroy(CBotVar* &var, void* user) +{ + if ( var == 0 ) return CBotTypResult(CBotErrLowParam); + if ( var->GetType() > CBotTypDouble ) return CBotTypResult(CBotErrBadNum); + var = var->GetNext(); + if ( var != 0 ) return CBotTypResult(CBotErrOverParam); + + return CBotTypResult(CBotTypFloat); +} + +// Instruction "destroy(rank)". + +bool CScript::rDestroy(CBotVar* var, CBotVar* result, int& exception, void* user) +{ + CScript* script = (static_cast(user))->GetRunScript(); + CObject* pObj; + int rank; + + rank = var->GetValInt(); + + CInstanceManager* iMan = CInstanceManager::GetInstancePointer(); + + pObj = static_cast(iMan->SearchInstance(CLASS_OBJECT, rank)); + if ( pObj == 0 ) + { + return true; + } + else + { + pObj->ExploObject(EXPLO_BOUM, 1.0f); + } + return true; +} + + // Compilation of the instruction "search(type, pos)". @@ -2898,6 +2935,7 @@ void CScript::InitFonctions() CBotProgram::AddFunction("abs", rAbs, CScript::cOneFloat); CBotProgram::AddFunction("retobject", rGetObject, CScript::cGetObject); + CBotProgram::AddFunction("destroy", rDestroy, CScript::cDestroy); CBotProgram::AddFunction("search", rSearch, CScript::cSearch); CBotProgram::AddFunction("radar", rRadar, CScript::cRadar); CBotProgram::AddFunction("detect", rDetect, CScript::cDetect); diff --git a/src/script/script.h b/src/script/script.h index 982d12b..0d2726a 100644 --- a/src/script/script.h +++ b/src/script/script.h @@ -100,6 +100,7 @@ private: static CBotTypResult cTwoFloat(CBotVar* &var, void* user); static CBotTypResult cString(CBotVar* &var, void* user); static CBotTypResult cGetObject(CBotVar* &var, void* user); + static CBotTypResult cDestroy(CBotVar* &var, void* user); static CBotTypResult cSearch(CBotVar* &var, void* user); static CBotTypResult cRadar(CBotVar* &var, void* user); static CBotTypResult cDetect(CBotVar* &var, void* user); @@ -133,6 +134,7 @@ private: static bool rRand(CBotVar* var, CBotVar* result, int& exception, void* user); static bool rAbs(CBotVar* var, CBotVar* result, int& exception, void* user); static bool rGetObject(CBotVar* var, CBotVar* result, int& exception, void* user); + static bool rDestroy(CBotVar* var, CBotVar* result, int& exception, void* user); static bool rSearch(CBotVar* var, CBotVar* result, int& exception, void* user); static bool rRadar(CBotVar* var, CBotVar* result, int& exception, void* user); static bool rDetect(CBotVar* var, CBotVar* result, int& exception, void* user); -- cgit v1.2.3-1-g7c22