From f86b5f91afba99712743b33b9514ba0e94cfe356 Mon Sep 17 00:00:00 2001 From: Sachith Hasaranga Seneviratne Date: Thu, 19 Jun 2014 19:02:00 +0530 Subject: [PATCH] Trigger scripts now work by binding to the FUNCTION pointed by the trigger action instead of by the FILENAME. Started adding files into a structure similiar to that present in the tracks/ directory --- data/scripts/{ => farm}/haybail-activate.as | 0 data/scripts/{ => farm}/haybail.as | 0 data/scripts/farm/start.as | 10 ++++++ data/scripts/farm/triggers.as | 35 +++++++++++++++++++++ data/scripts/farm/update.as | 4 +++ data/scripts/start.as | 2 +- src/scriptengine/script_engine.cpp | 6 ++-- src/scriptengine/script_engine.hpp | 2 +- src/scriptengine/script_track.cpp | 10 +++--- src/scriptengine/script_track.hpp | 2 +- src/tracks/track_object_presentation.cpp | 2 +- 11 files changed, 63 insertions(+), 10 deletions(-) rename data/scripts/{ => farm}/haybail-activate.as (100%) rename data/scripts/{ => farm}/haybail.as (100%) create mode 100644 data/scripts/farm/start.as create mode 100644 data/scripts/farm/triggers.as create mode 100644 data/scripts/farm/update.as diff --git a/data/scripts/haybail-activate.as b/data/scripts/farm/haybail-activate.as similarity index 100% rename from data/scripts/haybail-activate.as rename to data/scripts/farm/haybail-activate.as diff --git a/data/scripts/haybail.as b/data/scripts/farm/haybail.as similarity index 100% rename from data/scripts/haybail.as rename to data/scripts/farm/haybail.as diff --git a/data/scripts/farm/start.as b/data/scripts/farm/start.as new file mode 100644 index 000000000..05b2441aa --- /dev/null +++ b/data/scripts/farm/start.as @@ -0,0 +1,10 @@ +void onStart() +{ + + displayMessage("Track Loaded"); + //For green valley sheep test. See sheep_approach.as + createTrigger("haybail_deactivate", 69.97 ,8.08 ,-107.84, 20.00); //follows xzy for now + createTrigger("haybail",100.72, 10.20,-26.22 , 30.00); + +} + diff --git a/data/scripts/farm/triggers.as b/data/scripts/farm/triggers.as new file mode 100644 index 000000000..ff075ab37 --- /dev/null +++ b/data/scripts/farm/triggers.as @@ -0,0 +1,35 @@ +void haybail() +{ +/*to activate this add the following line to stk-assets/farm/scene.xml + + + +*/ + displayMessage("Haybail deactivated"); + //disableAnimation("hayBail.b3d"); + TrackObject @t_obj = getTrackObject("hayBail.b3d"); + //t_obj.setEnable(false); + PhysicalObject @haybail = t_obj.getPhysicalObject(); + haybail.disable(); + Mesh @haybailMesh = t_obj.getMesh(); + Animator @haybailAnimator = t_obj.getAnimator(); + haybailAnimator.setPaused(true); + //if (haybail.isFlattener())squashKart(0,35.0); +} + +void haybail_deactivate() +{ +/*to activate this add the following line to stk-assets/farm/scene.xml + + + +*/ + displayMessage("Haybail reactivated"); + //enableAnimation("hayBail.b3d"); + squashKart(0,35.0); //id of kart,time to squash + TrackObject @t_obj = getTrackObject("hayBail.b3d"); + Animator @haybailAnimator = t_obj.getAnimator(); + haybailAnimator.setPaused(false); +} + + diff --git a/data/scripts/farm/update.as b/data/scripts/farm/update.as new file mode 100644 index 000000000..8b9cb74cd --- /dev/null +++ b/data/scripts/farm/update.as @@ -0,0 +1,4 @@ +void onUpdate() +{ + +} diff --git a/data/scripts/start.as b/data/scripts/start.as index b185c9e00..3b02db26d 100644 --- a/data/scripts/start.as +++ b/data/scripts/start.as @@ -1,4 +1,4 @@ -void onUpdate() +void onStart() { displayMessage("Track Loaded"); diff --git a/src/scriptengine/script_engine.cpp b/src/scriptengine/script_engine.cpp index abaab8402..9d4b7e053 100644 --- a/src/scriptengine/script_engine.cpp +++ b/src/scriptengine/script_engine.cpp @@ -58,7 +58,8 @@ ScriptEngine::~ScriptEngine() std::string getScript(std::string scriptName) { std::string script_dir = file_manager->getAsset(FileManager::SCRIPT, ""); - + script_dir += World::getWorld()->getTrack()->getIdent() + "/"; + if (scriptName != "update" && scriptName != "collisions" && scriptName!="start") scriptName = "triggers"; script_dir += scriptName + ".as"; FILE *f = fopen(script_dir.c_str(), "rb"); if( f == 0 ) @@ -129,7 +130,8 @@ void ScriptEngine::runScript(std::string scriptName) } else { - func = Scripting::Track::registerScriptCallbacks(m_engine); + //trigger type can have different names + func = Scripting::Track::registerScriptCallbacks(m_engine , scriptName); } if( func == 0 ) { diff --git a/src/scriptengine/script_engine.hpp b/src/scriptengine/script_engine.hpp index a14bb842d..828471378 100644 --- a/src/scriptengine/script_engine.hpp +++ b/src/scriptengine/script_engine.hpp @@ -47,7 +47,7 @@ namespace Scripting void registerScriptFunctions(asIScriptEngine *engine); asIScriptFunction* - registerScriptCallbacks(asIScriptEngine *engine); + registerScriptCallbacks(asIScriptEngine *engine, std::string scriptName); asIScriptFunction* registerUpdateScriptCallbacks(asIScriptEngine *engine); diff --git a/src/scriptengine/script_track.cpp b/src/scriptengine/script_track.cpp index 75347377d..bf98cf4d9 100644 --- a/src/scriptengine/script_track.cpp +++ b/src/scriptengine/script_track.cpp @@ -25,6 +25,7 @@ #include "tracks/track_object.hpp" #include "tracks/track.hpp" #include "animations/three_d_animation.hpp" +#include //debug namespace Scripting { @@ -32,16 +33,17 @@ namespace Scripting namespace Track { - asIScriptFunction* registerScriptCallbacks(asIScriptEngine *engine) + asIScriptFunction* registerScriptCallbacks(asIScriptEngine *engine, std::string scriptName) { asIScriptFunction *func; - func = engine->GetModule(0)->GetFunctionByDecl("void onTrigger()"); + std::string function_name = "void " + scriptName + "()"; + func = engine->GetModule(0)->GetFunctionByDecl(function_name.c_str()); return func; } asIScriptFunction* registerStartScriptCallbacks(asIScriptEngine *engine) { asIScriptFunction *func; - func = engine->GetModule(0)->GetFunctionByDecl("void onUpdate()"); + func = engine->GetModule(0)->GetFunctionByDecl("void onStart()"); return func; } asIScriptFunction* registerUpdateScriptCallbacks(asIScriptEngine *engine) @@ -188,7 +190,7 @@ namespace Scripting float y = gen->GetArgFloat(2); float z = gen->GetArgFloat(3); float distance = gen->GetArgFloat(4); //triggering distance - core::vector3df posi(0, 0, 0); + core::vector3df posi(x, y, z); core::vector3df hpr(0, 0, 0); core::vector3df scale(1.0f, 1.0f, 1.0f); TrackObjectPresentationActionTrigger* newtrigger = diff --git a/src/scriptengine/script_track.hpp b/src/scriptengine/script_track.hpp index 3517cc6e6..c1ee41f09 100644 --- a/src/scriptengine/script_track.hpp +++ b/src/scriptengine/script_track.hpp @@ -30,7 +30,7 @@ namespace Scripting //script engine functions void registerScriptFunctions(asIScriptEngine *engine); asIScriptFunction* - registerScriptCallbacks(asIScriptEngine *engine); + registerScriptCallbacks(asIScriptEngine *engine , std::string scriptName); //script-bound functions diff --git a/src/tracks/track_object_presentation.cpp b/src/tracks/track_object_presentation.cpp index edd51a9eb..98f5ce97a 100644 --- a/src/tracks/track_object_presentation.cpp +++ b/src/tracks/track_object_presentation.cpp @@ -778,7 +778,7 @@ TrackObjectPresentationActionTrigger::TrackObjectPresentationActionTrigger (const core::vector3df& xyz,std::string script_name, float distance) :TrackObjectPresentation(xyz) { - m_init_xyz = core::vector3df(0, 0, 0); + m_init_xyz = xyz; m_init_hpr = core::vector3df(0, 0, 0); m_init_scale = core::vector3df(1, 1, 1); float trigger_distance = distance;