summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorkrzys-h <krzys_h@interia.pl>2013-03-30 15:43:09 +0100
committerkrzys-h <krzys_h@interia.pl>2013-03-30 15:43:09 +0100
commit040a7e8f249a190b0d66b10ccec075ad33772d7c (patch)
tree098abd9c51463ce1137958c3941328cc5855b728 /src
parent06742cab166fa028d105850f868e0d72731d04b0 (diff)
downloadcolobot-040a7e8f249a190b0d66b10ccec075ad33772d7c.tar.gz
colobot-040a7e8f249a190b0d66b10ccec075ad33772d7c.tar.bz2
colobot-040a7e8f249a190b0d66b10ccec075ad33772d7c.zip
Added function destroy(rank)
Diffstat (limited to 'src')
-rw-r--r--src/script/script.cpp38
-rw-r--r--src/script/script.h2
2 files changed, 40 insertions, 0 deletions
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<CObject*>(user))->GetRunScript();
+ CObject* pObj;
+ int rank;
+
+ rank = var->GetValInt();
+
+ CInstanceManager* iMan = CInstanceManager::GetInstancePointer();
+
+ pObj = static_cast<CObject*>(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);