summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorerihel <erihel@gmail.com>2013-03-30 16:04:58 +0100
committererihel <erihel@gmail.com>2013-03-30 16:04:58 +0100
commit5a60a7a21958e2d8cfd33148f575d36e3bbd9ebb (patch)
treedee4ac380eb5d14d2a123b7b7b63b9cfa83ce9fb /src
parentb7b5f002a636154033166a2c828765386c14e5a5 (diff)
parent845c8e9437e26cf3193d4e3dae2a02f03e17747d (diff)
downloadcolobot-5a60a7a21958e2d8cfd33148f575d36e3bbd9ebb.tar.gz
colobot-5a60a7a21958e2d8cfd33148f575d36e3bbd9ebb.tar.bz2
colobot-5a60a7a21958e2d8cfd33148f575d36e3bbd9ebb.zip
Merge branch 'dev' of github:colobot/colobot into dev
Diffstat (limited to 'src')
-rw-r--r--src/object/object.cpp13
-rw-r--r--src/script/script.cpp38
-rw-r--r--src/script/script.h2
3 files changed, 50 insertions, 3 deletions
diff --git a/src/object/object.cpp b/src/object/object.cpp
index a0a3f09..23a757a 100644
--- a/src/object/object.cpp
+++ b/src/object/object.cpp
@@ -2658,7 +2658,7 @@ bool CObject::CreateBuilding(Math::Vector pos, float angle, float height,
if ( m_type == OBJECT_ENERGY )
{
- modelManager->AddModelReference("energy.mod", false, rank);
+ modelManager->AddModelCopy("energy.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetFloorHeight(0.0f);
@@ -2841,7 +2841,7 @@ bool CObject::CreateBuilding(Math::Vector pos, float angle, float height,
if ( m_type == OBJECT_STATION )
{
- modelManager->AddModelReference("station.mod", false, rank);
+ modelManager->AddModelCopy("station.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetFloorHeight(0.0f);
@@ -3207,7 +3207,14 @@ bool CObject::CreateResource(Math::Vector pos, float angle, ObjectType type,
if ( type == OBJECT_MARKKEYd ) name = "crossd.mod";
if ( type == OBJECT_EGG ) name = "egg.mod";
- modelManager->AddModelReference(name, false, rank);
+ if (type == OBJECT_POWER || type == OBJECT_ATOMIC)
+ {
+ modelManager->AddModelCopy(name, false, rank);
+ }
+ else
+ {
+ modelManager->AddModelReference(name, false, rank);
+ }
SetPosition(0, pos);
SetAngleY(0, angle);
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);