summaryrefslogtreecommitdiffstats
path: root/src/script
diff options
context:
space:
mode:
authorPaweX <wepc@10g.pl>2013-02-13 02:32:41 +0100
committerPaweX <wepc@10g.pl>2013-02-13 02:32:41 +0100
commit34a008a49d31e0efc3cc2235aab898946c863cdf (patch)
treecba3903e4da0cb32dce56807164191b20df37261 /src/script
parentd3106c73ff6239e184dc5a83609f7d08391e6148 (diff)
downloadcolobot-34a008a49d31e0efc3cc2235aab898946c863cdf.tar.gz
colobot-34a008a49d31e0efc3cc2235aab898946c863cdf.tar.bz2
colobot-34a008a49d31e0efc3cc2235aab898946c863cdf.zip
Additional parameter for function aim(x, y).
Diffstat (limited to 'src/script')
-rw-r--r--src/script/script.cpp27
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);