From 0d70b6e2f874d9adeb6528df355d3271c3943845 Mon Sep 17 00:00:00 2001 From: krzys-h Date: Sun, 31 Mar 2013 12:04:12 +0200 Subject: More parameters to destroy() Also, removed some warnings in script.cpp --- src/object/robotmain.cpp | 5 +++++ src/script/script.cpp | 36 +++++++++++++++++++++++++++++------- 2 files changed, 34 insertions(+), 7 deletions(-) diff --git a/src/object/robotmain.cpp b/src/object/robotmain.cpp index 1e9e207..e14af78 100644 --- a/src/object/robotmain.cpp +++ b/src/object/robotmain.cpp @@ -805,6 +805,11 @@ CRobotMain::CRobotMain(CApplication* app) CBotProgram::DefineNum("FilterOnlyLanding", FILTER_ONLYLANDING); CBotProgram::DefineNum("FilterOnlyFliying", FILTER_ONLYFLYING); + CBotProgram::DefineNum("ExploNone", 0); + CBotProgram::DefineNum("ExploBoum", EXPLO_BOUM); + CBotProgram::DefineNum("ExploBurn", EXPLO_BURN); + CBotProgram::DefineNum("ExploWater", EXPLO_WATER); + CBotProgram::DefineNum("PolskiPortalColobota", 1337); CBotClass* bc; diff --git a/src/script/script.cpp b/src/script/script.cpp index 2bfe632..6095e05 100644 --- a/src/script/script.cpp +++ b/src/script/script.cpp @@ -330,7 +330,6 @@ CBotTypResult CScript::cGetObject(CBotVar* &var, void* user) bool CScript::rGetObject(CBotVar* var, CBotVar* result, int& exception, void* user) { - CScript* script = (static_cast(user))->GetRunScript(); CObject* pObj; int rank; @@ -348,27 +347,48 @@ bool CScript::rGetObject(CBotVar* var, CBotVar* result, int& exception, void* us return true; } -// Compilation of the instruction "destroy(rank)". +// Compilation of the instruction "destroy(rank[, exploType[, force]])". 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 ) { + if ( var->GetType() != CBotTypInt ) return CBotTypResult(CBotErrBadNum); + var = var->GetNext(); + + if ( var != 0 ) { + if ( var->GetType() > CBotTypDouble ) return CBotTypResult(CBotErrBadNum); + var = var->GetNext(); + } + } + if ( var != 0 ) return CBotTypResult(CBotErrOverParam); return CBotTypResult(CBotTypFloat); } -// Instruction "destroy(rank)". +// Instruction "destroy(rank[, exploType[, force]])". bool CScript::rDestroy(CBotVar* var, CBotVar* result, int& exception, void* user) { - CScript* script = (static_cast(user))->GetRunScript(); CObject* pObj; int rank; + int exploType = 0; + float force = 1.0f; rank = var->GetValInt(); + var->GetNext(); + if ( var != 0 ) { + exploType = var->GetValInt(); + var->GetNext(); + if ( var != 0 ) { + force = var->GetValFloat(); + } + } pObj = static_cast(CObjectManager::GetInstancePointer()->SearchInstance(rank)); if ( pObj == 0 ) @@ -377,7 +397,11 @@ bool CScript::rDestroy(CBotVar* var, CBotVar* result, int& exception, void* user } else { - pObj->ExploObject(EXPLO_BOUM, 1.0f); + if ( exploType ) { + pObj->ExploObject(static_cast(exploType), force); + } else { + pObj->DeleteObject(false); + } } return true; } @@ -414,7 +438,6 @@ CBotTypResult CScript::cSearch(CBotVar* &var, void* user) bool CScript::rSearch(CBotVar* var, CBotVar* result, int& exception, void* user) { - CScript* script = (static_cast(user))->GetRunScript(); CObject *pObj, *pBest; CBotVar* array; Math::Vector pos, oPos; @@ -557,7 +580,6 @@ CBotTypResult CScript::cRadar(CBotVar* &var, void* user) bool CScript::rRadar(CBotVar* var, CBotVar* result, int& exception, void* user) { - CScript* script = (static_cast(user))->GetRunScript(); CObject* pThis = static_cast(user); CObject *pObj, *pBest; CPhysics* physics; -- cgit v1.2.3-1-g7c22