diff options
author | PaweX <wepc@10g.pl> | 2013-02-13 02:32:41 +0100 |
---|---|---|
committer | PaweX <wepc@10g.pl> | 2013-02-13 02:32:41 +0100 |
commit | 34a008a49d31e0efc3cc2235aab898946c863cdf (patch) | |
tree | cba3903e4da0cb32dce56807164191b20df37261 /src/script/script.cpp | |
parent | d3106c73ff6239e184dc5a83609f7d08391e6148 (diff) | |
download | colobot-34a008a49d31e0efc3cc2235aab898946c863cdf.tar.gz colobot-34a008a49d31e0efc3cc2235aab898946c863cdf.tar.bz2 colobot-34a008a49d31e0efc3cc2235aab898946c863cdf.zip |
Additional parameter for function aim(x, y).
Diffstat (limited to 'src/script/script.cpp')
-rw-r--r-- | src/script/script.cpp | 27 |
1 files changed, 23 insertions, 4 deletions
diff --git a/src/script/script.cpp b/src/script/script.cpp index 50ce830..ab8a1c1 100644 --- a/src/script/script.cpp +++ b/src/script/script.cpp @@ -2186,12 +2186,29 @@ bool CScript::rFire(CBotVar* var, CBotVar* result, int& exception, void* user) return Process(script, result, exception); } +// Compilation of the instruction "aim(x, y)". + +CBotTypResult cAim(CBotVar* &var, void* user) +{ + if ( var == 0 ) return CBotTypResult(CBotErrLowParam); + if ( var->GivType() > CBotTypDouble ) return CBotTypResult(CBotErrBadNum); + var = var->GivNext(); + + if ( var == 0 ) return CBotTypResult(CBotTypFloat); + if ( var->GivType() > CBotTypDouble ) return CBotTypResult(CBotErrBadNum); + var = var->GivNext(); + + if ( var != 0 ) return CBotTypResult(CBotErrOverParam); + + return CBotTypResult(CBotTypFloat); +} + // Instruction "aim(dir)". bool CScript::rAim(CBotVar* var, CBotVar* result, int& exception, void* user) { CScript* script = (static_cast<CObject *>(user))->GetRunScript(); - float value; + float x, y; Error err; exception = 0; @@ -2199,8 +2216,10 @@ bool CScript::rAim(CBotVar* var, CBotVar* result, int& exception, void* user) if ( script->m_primaryTask == 0 ) // no task in progress? { script->m_primaryTask = new CTaskManager(script->m_iMan, script->m_object); - value = var->GetValFloat(); - err = script->m_primaryTask->StartTaskGunGoal(value*Math::PI/180.0f, 0.0f); + x = var->GivValFloat(); + var = var->GivNext(); + var == 0 ? y=0.0f : y=var->GivValFloat(); + err = script->m_primaryTask->StartTaskGunGoal(x*Math::PI/180.0f, y*Math::PI/180.0f); if ( err != ERR_OK ) { delete script->m_primaryTask; @@ -2731,7 +2750,7 @@ void CScript::InitFonctions() CBotProgram::AddFunction("recycle", rRecycle, CScript::cNull); CBotProgram::AddFunction("shield", rShield, CScript::cShield); CBotProgram::AddFunction("fire", rFire, CScript::cFire); - CBotProgram::AddFunction("aim", rAim, CScript::cOneFloat); + CBotProgram::AddFunction("aim", rAim, CScript::cAim); CBotProgram::AddFunction("motor", rMotor, CScript::cMotor); CBotProgram::AddFunction("jet", rJet, CScript::cOneFloat); CBotProgram::AddFunction("topo", rTopo, CScript::cTopo); |