summaryrefslogtreecommitdiffstats
path: root/src/script
diff options
context:
space:
mode:
authorkrzys-h <krzys_h@interia.pl>2013-05-01 22:11:08 +0200
committerkrzys-h <krzys_h@interia.pl>2013-05-01 22:11:08 +0200
commitfb5d14dddf180a369617968bc3b14492ded329af (patch)
tree65ead91027c028549d84aa08e078282b91fd7eed /src/script
parent07374db2a34448f961c31f2ae617d73f46eac0f6 (diff)
downloadcolobot-fb5d14dddf180a369617968bc3b14492ded329af.tar.gz
colobot-fb5d14dddf180a369617968bc3b14492ded329af.tar.bz2
colobot-fb5d14dddf180a369617968bc3b14492ded329af.zip
Functions playmusic(filename, repeat) and stopmusic()
for MissionController Parameter repeat can be 0 or 1
Diffstat (limited to 'src/script')
-rw-r--r--src/script/script.cpp50
-rw-r--r--src/script/script.h3
2 files changed, 51 insertions, 2 deletions
diff --git a/src/script/script.cpp b/src/script/script.cpp
index 5c430d7..d108c7a 100644
--- a/src/script/script.cpp
+++ b/src/script/script.cpp
@@ -39,6 +39,8 @@
#include "script/cbottoken.h"
+#include "sound/sound.h"
+
#include "ui/interface.h"
#include "ui/edit.h"
#include "ui/list.h"
@@ -313,7 +315,7 @@ bool CScript::rAbs(CBotVar* var, CBotVar* result, int& exception, void* user)
return true;
}
-// Compilation of the instruction "endmission(result)"
+// Compilation of the instruction "endmission(result, delay)"
CBotTypResult CScript::cEndMission(CBotVar* &var, void* user)
{
@@ -327,7 +329,7 @@ CBotTypResult CScript::cEndMission(CBotVar* &var, void* user)
return CBotTypResult(CBotTypFloat);
}
-// Instruction "endmission(result)"
+// Instruction "endmission(result, delay)"
bool CScript::rEndMission(CBotVar* var, CBotVar* result, int& exception, void* user)
{
@@ -343,6 +345,48 @@ bool CScript::rEndMission(CBotVar* var, CBotVar* result, int& exception, void* u
return true;
}
+// Compilation of the instruction "playmusic(filename, repeat)"
+
+CBotTypResult CScript::cPlayMusic(CBotVar* &var, void* user)
+{
+ if ( var == 0 ) return CBotTypResult(CBotErrLowParam);
+ if ( var->GetType() != CBotTypString ) return CBotTypResult(CBotErrBadNum);
+ var = var->GetNext();
+ 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 "playmusic(filename, repeat)"
+
+bool CScript::rPlayMusic(CBotVar* var, CBotVar* result, int& exception, void* user)
+{
+ std::string filename;
+ CBotString cbs;
+ bool repeat;
+
+ cbs = var->GetValString();
+ filename = std::string(cbs);
+ var = var->GetNext();
+
+ repeat = var->GetValInt();
+
+ CApplication::GetInstancePointer()->GetSound()->StopMusic();
+ CApplication::GetInstancePointer()->GetSound()->PlayMusic(filename, repeat);
+ return true;
+}
+
+// Instruction "stopmusic()"
+
+bool CScript::rStopMusic(CBotVar* var, CBotVar* result, int& exception, void* user)
+{
+ CApplication::GetInstancePointer()->GetSound()->StopMusic();
+ return true;
+}
+
+
// Compilation of the instruction "retobject(rank)".
CBotTypResult CScript::cGetObject(CBotVar* &var, void* user)
@@ -2982,6 +3026,8 @@ void CScript::InitFonctions()
CBotProgram::AddFunction("abs", rAbs, CScript::cOneFloat);
CBotProgram::AddFunction("endmission",rEndMission,CScript::cEndMission);
+ CBotProgram::AddFunction("playmusic", rPlayMusic ,CScript::cPlayMusic);
+ CBotProgram::AddFunction("stopmusic", rStopMusic ,CScript::cNull);
CBotProgram::AddFunction("retobject", rGetObject, CScript::cGetObject);
CBotProgram::AddFunction("destroy", rDestroy, CScript::cDestroy);
diff --git a/src/script/script.h b/src/script/script.h
index 956aca6..535b974 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 cEndMission(CBotVar* &var, void* user);
+ static CBotTypResult cPlayMusic(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);
@@ -136,6 +137,8 @@ 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 rEndMission(CBotVar* var, CBotVar* result, int& exception, void* user);
+ static bool rPlayMusic(CBotVar* var, CBotVar* result, int& exception, void* user);
+ static bool rStopMusic(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);