From e607fed265070be8c518d4302d8b76f738421fb3 Mon Sep 17 00:00:00 2001 From: Piotr Dziwinski Date: Sat, 30 Mar 2013 14:45:55 +0100 Subject: Fixed power cell bug (#120) --- src/object/object.cpp | 13 ++++++++++--- 1 file changed, 10 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); -- cgit v1.2.3-1-g7c22 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