diff --git a/data/scripts/cycle1.as b/data/scripts/cycle1.as
new file mode 100644
index 000000000..e0f7126a5
--- /dev/null
+++ b/data/scripts/cycle1.as
@@ -0,0 +1,14 @@
+void onTrigger()
+{
+/*to activate these 3 scripts add the following lines to stk-assets/20_harvest/scene.xml
+
+
+
+
+
+*/
+ displayMessage("1 triggered, 2 activated, 3 deactivated");
+ enableTrigger("cycle2");
+ disableTrigger("cycle3");
+
+}
diff --git a/data/scripts/cycle2.as b/data/scripts/cycle2.as
new file mode 100644
index 000000000..bfc7f714f
--- /dev/null
+++ b/data/scripts/cycle2.as
@@ -0,0 +1,14 @@
+void onTrigger()
+{
+/*to activate these 3 scripts add the following lines to stk-assets/20_harvest/scene.xml
+
+
+
+
+
+*/
+ displayMessage("2 triggered, 3 activated, 1 deactivated");
+ enableTrigger("cycle3");
+ disableTrigger("cycle1");
+
+}
diff --git a/data/scripts/cycle3.as b/data/scripts/cycle3.as
new file mode 100644
index 000000000..fc7b0caaa
--- /dev/null
+++ b/data/scripts/cycle3.as
@@ -0,0 +1,14 @@
+void onTrigger()
+{
+/*to activate these 3 scripts add the following lines to stk-assets/20_harvest/scene.xml
+
+
+
+
+
+*/
+ displayMessage("3 triggered, 1 activated, 2 deactivated");
+ enableTrigger("cycle1");
+ disableTrigger("cycle2");
+
+}
diff --git a/src/scriptengine/script_engine.cpp b/src/scriptengine/script_engine.cpp
index 8f005fd41..775dce211 100644
--- a/src/scriptengine/script_engine.cpp
+++ b/src/scriptengine/script_engine.cpp
@@ -67,11 +67,23 @@ void displayMessage(asIScriptGeneric *gen){
}
void disableAnimation(asIScriptGeneric *gen){
std::string *str = (std::string*)gen->GetArgAddress(0);
- World::getWorld()->getTrack()->getTrackObjectManager()->disable(*str);
+ std::string type = "mesh";
+ World::getWorld()->getTrack()->getTrackObjectManager()->disable(*str,type);
}
void enableAnimation(asIScriptGeneric *gen){
std::string *str = (std::string*)gen->GetArgAddress(0);
- World::getWorld()->getTrack()->getTrackObjectManager()->enable(*str);
+ std::string type = "mesh";
+ World::getWorld()->getTrack()->getTrackObjectManager()->enable(*str,type);
+}
+void disableTrigger(asIScriptGeneric *gen){
+ std::string *str = (std::string*)gen->GetArgAddress(0);
+ std::string type = "action-trigger";
+ World::getWorld()->getTrack()->getTrackObjectManager()->disable(*str,type);
+}
+void enableTrigger(asIScriptGeneric *gen){
+ std::string *str = (std::string*)gen->GetArgAddress(0);
+ std::string type = "action-trigger";
+ World::getWorld()->getTrack()->getTrackObjectManager()->enable(*str,type);
}
void squashKart(asIScriptGeneric *gen){
int id = (int)gen->GetArgDWord(0);
@@ -215,6 +227,8 @@ void ScriptEngine::configureEngine(asIScriptEngine *engine)
r = engine->RegisterGlobalFunction("void disableAnimation(string &in)", asFUNCTION(disableAnimation), asCALL_GENERIC); assert(r>=0);
r = engine->RegisterGlobalFunction("void enableAnimation(string &in)", asFUNCTION(enableAnimation), asCALL_GENERIC); assert(r>=0);
r = engine->RegisterGlobalFunction("void squashKart(int id, float time)", asFUNCTION(squashKart), asCALL_GENERIC); assert(r>=0);
+ r = engine->RegisterGlobalFunction("void enableTrigger(string &in)", asFUNCTION(enableTrigger), asCALL_GENERIC); assert(r>=0);
+ r = engine->RegisterGlobalFunction("void disableTrigger(string &in)", asFUNCTION(disableTrigger), asCALL_GENERIC); assert(r>=0);
// It is possible to register the functions, properties, and types in
// configuration groups as well. When compiling the scripts it can then
diff --git a/src/tracks/track_object.cpp b/src/tracks/track_object.cpp
index 101e8a531..e12120810 100644
--- a/src/tracks/track_object.cpp
+++ b/src/tracks/track_object.cpp
@@ -141,6 +141,8 @@ void TrackObject::init(const XMLNode &xml_node, scene::ISceneNode* parent,
std::string m_action;
xml_node.get("action", &m_action);
xml_node.get("distance", &m_distance);
+ m_name = m_action;
+ //adds action as name so that it can be found by using getName()
if (m_action == "garage")
{
m_garage = true;
diff --git a/src/tracks/track_object_manager.cpp b/src/tracks/track_object_manager.cpp
index 667a49972..03f6c32c8 100644
--- a/src/tracks/track_object_manager.cpp
+++ b/src/tracks/track_object_manager.cpp
@@ -87,22 +87,27 @@ void TrackObjectManager::reset()
} // reset
// ----------------------------------------------------------------------------
-void TrackObjectManager::disable(std::string name){
+void TrackObjectManager::disable(std::string name , std::string type){
TrackObject* curr;
for_in (curr,m_all_objects){
+ if (type != curr->getType())continue;
+
if (curr->getName() == (name)){
- curr->setEnable(false);
+ curr->setEnable(false);
}
}
}
-void TrackObjectManager::enable(std::string name){
+void TrackObjectManager::enable(std::string name , std::string type){
TrackObject* curr;
for_in (curr,m_all_objects){
+ if (type != curr->getType())continue;
+
if (curr->getName() == (name)){
-
- curr->setEnable(true);
+
+ curr->reset();
+ curr->setEnable(true);
}
}
@@ -111,8 +116,8 @@ bool TrackObjectManager::getStatus(std::string name){
TrackObject* curr;
for_in (curr,m_all_objects){
if (curr->getName() == (name)){
- //OutputDebugString("came here2");
- return curr->isEnabled();
+
+ return curr->isEnabled();
}
}
diff --git a/src/tracks/track_object_manager.hpp b/src/tracks/track_object_manager.hpp
index 8ef95e2e5..95023a675 100644
--- a/src/tracks/track_object_manager.hpp
+++ b/src/tracks/track_object_manager.hpp
@@ -55,8 +55,8 @@ public:
bool secondary_hits=true);
void reset();
void init();
- void disable(std::string name);
- void enable(std::string name);
+ void disable(std::string name , std::string type);
+ void enable (std::string name , std::string type);
bool getStatus(std::string name);
/** Enable or disable fog on objects */
diff --git a/src/tracks/track_object_presentation.cpp b/src/tracks/track_object_presentation.cpp
index e3aafd673..c7317af72 100644
--- a/src/tracks/track_object_presentation.cpp
+++ b/src/tracks/track_object_presentation.cpp
@@ -47,9 +47,6 @@
#include
#include
-//for testing
-#include
-#include
// ----------------------------------------------------------------------------
TrackObjectPresentation::TrackObjectPresentation(const XMLNode& xml_node)
@@ -896,9 +893,18 @@ void TrackObjectPresentationActionTrigger::onTriggerItemApproached(Item* who)
return;
}
else
- {
- fprintf(stderr, "[TrackObject] WARNING: unknown action <%s>\n",
+ {
+ //TODO move all above functions into scripts and remove the ifs
+ ScriptEngine* m_script_engine = World::getWorld()->getScriptEngine();
+ m_action_active = false;
+ m_script_engine->runScript(m_action);
+
+ /*
+ Catch exception -> script not found
+ fprintf(stderr, "[TrackObject] WARNING: unknown action <%s>\n",
m_action.c_str());
+
+ */
}
}