diff --git a/data/scripts/haybail.as b/data/scripts/haybail.as index 7a6ad51bf..429120e72 100644 --- a/data/scripts/haybail.as +++ b/data/scripts/haybail.as @@ -6,6 +6,10 @@ void onTrigger() */ displayMessage("Haybail deactivated"); - disableAnimation("hayBail.b3d"); + //disableAnimation("hayBail.b3d"); + //track_obj_manager.disable("hayBail.b3d","mesh"); + //track_obj_manager.disable("hayBail.b3d"); + TrackObject @t_obj = getTrackObject("hayBail.b3d"); + squashKart(0,35.0); //id of kart,time to squash } diff --git a/src/scriptengine/script_track.cpp b/src/scriptengine/script_track.cpp index 7631755be..8828ded8d 100644 --- a/src/scriptengine/script_track.cpp +++ b/src/scriptengine/script_track.cpp @@ -23,7 +23,7 @@ #include "states_screens/dialogs/tutorial_message_dialog.hpp" #include "tracks/track_object_manager.hpp" #include "tracks/track.hpp" - +#include //debug namespace Scripting { @@ -36,6 +36,24 @@ namespace Scripting func = engine->GetModule(0)->GetFunctionByDecl("void onTrigger()"); return func; } + /* + void disableAnimation(std::string *name, void *memory) + { + std::string *str = name; + std::string type = "mesh"; + World::getWorld()->getTrack()->getTrackObjectManager()->disable(*str, type); + }*/ + void getTrackObject(asIScriptGeneric *gen) + { + std::string *str = (std::string*)gen->GetArgAddress(0); + TrackObject* t_obj = World::getWorld()->getTrack()->getTrackObjectManager()->getTrackObject(*str); + gen->SetReturnObject(t_obj); + } + /*TrackObject* getTrackObject(std::string *name) + { + TrackObject* t_obj = World::getWorld()->getTrack()->getTrackObjectManager()->getTrackObject(*name); + return t_obj; + }*/ void registerScriptFunctions(asIScriptEngine *engine) { int r; @@ -47,6 +65,21 @@ namespace Scripting r = engine->RegisterGlobalFunction("void disableTrigger(string &in)", asFUNCTION(disableTrigger), asCALL_GENERIC); assert(r >= 0); r = engine->RegisterGlobalFunction("void createTrigger(string &in,float x,float y,float z, float distance)", asFUNCTION(createTrigger), asCALL_GENERIC); assert(r >= 0); + /* + //Test singleton, and various calling conventions + // Register the track object manager as a singleton. The script will access it through the global property + // r = engine->RegisterObjectType("TrackObjectManager", 0, asOBJ_REF | asOBJ_NOHANDLE); assert(r >= 0); + r = engine->RegisterObjectType("TrackObjectManager", 0, asOBJ_REF | asOBJ_NOCOUNT); assert(r >= 0); + + // Register the track object manager's methods + TrackObjectManager* track_obj_manager = World::getWorld()->getTrack()->getTrackObjectManager(); + r = engine->RegisterGlobalProperty("TrackObjectManager track_obj_manager", track_obj_manager); assert(r >= 0); + //r = engine->RegisterObjectMethod("TrackObjectManager", "void disable(string name , string type)", asMETHOD(TrackObjectManager, disable), asCALL_THISCALL); assert(r >= 0); + //r = engine->RegisterObjectMethod("TrackObjectManager", "void disable(string &in name)", asFUNCTION(disableAnimation), asCALL_GENERIC); assert(r >= 0); + r = engine->RegisterObjectMethod("TrackObjectManager", "void disable(string &in)", asFUNCTION(disableAnimation), asCALL_CDECL_OBJLAST); assert(r >= 0); + */ + r = engine->RegisterObjectType("TrackObject", 0, asOBJ_REF | asOBJ_NOCOUNT); assert(r >= 0); + r = engine->RegisterGlobalFunction("TrackObject @getTrackObject(string &in)", asFUNCTION(getTrackObject), asCALL_GENERIC); assert(r >= 0); } diff --git a/src/tracks/track_object_manager.cpp b/src/tracks/track_object_manager.cpp index ccc7ce5e8..6386f9322 100644 --- a/src/tracks/track_object_manager.cpp +++ b/src/tracks/track_object_manager.cpp @@ -87,7 +87,8 @@ void TrackObjectManager::reset() } // reset // ---------------------------------------------------------------------------- -void TrackObjectManager::disable(std::string name , std::string type){ +void TrackObjectManager::disable(std::string name , std::string type) +{ TrackObject* curr; for_in (curr,m_all_objects){ if (type != curr->getType())continue; @@ -103,7 +104,8 @@ void TrackObjectManager::disable(std::string name , std::string type){ } } } -void TrackObjectManager::enable(std::string name , std::string type){ +void TrackObjectManager::enable(std::string name , std::string type) +{ TrackObject* curr; for_in (curr,m_all_objects){ if (type != curr->getType())continue; @@ -121,7 +123,8 @@ void TrackObjectManager::enable(std::string name , std::string type){ } } } -bool TrackObjectManager::getStatus(std::string name){ +bool TrackObjectManager::getStatus(std::string name) +{ TrackObject* curr; for_in (curr,m_all_objects){ if (curr->getName() == (name)||curr->getID()==(name)) @@ -134,6 +137,21 @@ bool TrackObjectManager::getStatus(std::string name){ //object not found return false; } + +TrackObject* TrackObjectManager::getTrackObject(std::string name) +{ + TrackObject* curr; + for_in(curr, m_all_objects){ + if (curr->getName() == (name) || curr->getID() == (name)) + { + + return curr; + + } + } + //object not found + return NULL; +} /** Handles an explosion, i.e. it makes sure that all physical objects are * affected accordingly. * \param pos Position of the explosion. diff --git a/src/tracks/track_object_manager.hpp b/src/tracks/track_object_manager.hpp index 95023a675..cf5647a2b 100644 --- a/src/tracks/track_object_manager.hpp +++ b/src/tracks/track_object_manager.hpp @@ -66,6 +66,8 @@ public: void removeObject(TrackObject* who); + TrackObject* getTrackObject(std::string name); + PtrVector& getObjects() { return m_all_objects; } const PtrVector& getObjects() const { return m_all_objects; }