Bound TrackObject type to scripts

This commit is contained in:
Sachith Hasaranga Seneviratne 2014-06-11 10:52:04 +05:30
parent 113c87dccf
commit e567adb0ca
4 changed files with 62 additions and 5 deletions

View File

@ -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
}

View File

@ -23,7 +23,7 @@
#include "states_screens/dialogs/tutorial_message_dialog.hpp"
#include "tracks/track_object_manager.hpp"
#include "tracks/track.hpp"
#include <iostream> //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);
}

View File

@ -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.

View File

@ -66,6 +66,8 @@ public:
void removeObject(TrackObject* who);
TrackObject* getTrackObject(std::string name);
PtrVector<TrackObject>& getObjects() { return m_all_objects; }
const PtrVector<TrackObject>& getObjects() const { return m_all_objects; }