diff options
author | krzys-h <krzys_h@interia.pl> | 2013-03-31 12:04:12 +0200 |
---|---|---|
committer | krzys-h <krzys_h@interia.pl> | 2013-03-31 12:04:12 +0200 |
commit | 0d70b6e2f874d9adeb6528df355d3271c3943845 (patch) | |
tree | af2bd6f19da49b9a1b1c2606b9a20b4316ab142e /src | |
parent | 2f7ff844d3b754948e2cecc0b8573b8d45b465ec (diff) | |
download | colobot-0d70b6e2f874d9adeb6528df355d3271c3943845.tar.gz colobot-0d70b6e2f874d9adeb6528df355d3271c3943845.tar.bz2 colobot-0d70b6e2f874d9adeb6528df355d3271c3943845.zip |
More parameters to destroy()
Also, removed some warnings in script.cpp
Diffstat (limited to 'src')
-rw-r--r-- | src/object/robotmain.cpp | 5 | ||||
-rw-r--r-- | 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<CObject*>(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<CObject*>(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<CObject*>(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>(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<CObject *>(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<CObject *>(user))->GetRunScript(); CObject* pThis = static_cast<CObject *>(user); CObject *pObj, *pBest; CPhysics* physics; |