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()); + + */ } }