Hitting a physical object with an object now triggers a message (Test in tutorial by shooting at the boxes). All currently suppported collision types now denote the type in the message that appears.

This commit is contained in:
Sachith Hasaranga Seneviratne
2014-05-29 18:51:48 +05:30
parent 870f438b06
commit 038aaa6f3b
5 changed files with 21 additions and 3 deletions

View File

@@ -3,5 +3,5 @@ void onCollision()
/*
Currently activates on Kart collisions
*/
displayMessage("Whoa! Road rage... between Kart: " + getCollidingKart1() + " - " + getCollidingKart2());
displayMessage("Whoa! Road rage... between Kart: " + getCollidingKart1() + " - " + getCollidingKart2() + " " + getCollisionType());
}

View File

@@ -173,8 +173,8 @@ void Physics::update(float dt)
Scripting::ScriptEngine* script_engine = World::getWorld()->getScriptEngine();
int kartid1 = p->getUserPointer(0)->getPointerKart()->getWorldKartId();
int kartid2 = p->getUserPointer(1)->getPointerKart()->getWorldKartId();
//script_engine->setCollision(kartid1,kartid2);
Scripting::Physics::setCollision(kartid1,kartid2);
Scripting::Physics::setCollisionType("Kart-Kart");
script_engine->runScript("collisions");
continue;
} // if kart-kart collision
@@ -245,6 +245,10 @@ void Physics::update(float dt)
{
// Projectile hits physical object
// -------------------------------
Scripting::ScriptEngine* script_engine = World::getWorld()->getScriptEngine();
Scripting::Physics::setCollision(0,0); //TODO : support item types etc
Scripting::Physics::setCollisionType("Projectile-PhysObj");
script_engine->runScript("collisions");
p->getUserPointer(0)->getPointerFlyable()
->hit(NULL, p->getUserPointer(1)->getPointerPhysicalObject());
PhysicalObject* obj = p->getUserPointer(1)->getPointerPhysicalObject();

View File

@@ -31,6 +31,7 @@ namespace Scripting{
asIScriptFunction*
registerScriptCallbacks(asIScriptEngine *engine);
void setCollision(int collider1,int collider2);
void setCollisionType(std::string collisionType);
}
namespace Kart{

View File

@@ -33,11 +33,20 @@ namespace Scripting{
{
gen->SetReturnDWord(m_collidingkartid2);
}
void getCollisionType(asIScriptGeneric *gen)
{
void *pointer = &m_collisionType;
gen->SetReturnObject(pointer);
}
void setCollision(int collider1,int collider2)
{
m_collidingkartid1 = collider1;
m_collidingkartid2 = collider2;
}
void setCollisionType(std::string collisionType)
{
m_collisionType = collisionType;
}
asIScriptFunction* registerScriptCallbacks(asIScriptEngine *engine)
{
@@ -50,6 +59,7 @@ namespace Scripting{
int r;
r = engine->RegisterGlobalFunction("uint getCollidingKart1()", asFUNCTION(getCollidingKart1), asCALL_GENERIC); assert( r >= 0 );
r = engine->RegisterGlobalFunction("uint getCollidingKart2()", asFUNCTION(getCollidingKart2), asCALL_GENERIC); assert( r >= 0 );
r = engine->RegisterGlobalFunction("string getCollisionType()", asFUNCTION(getCollisionType), asCALL_GENERIC); assert(r >= 0);
}
}

View File

@@ -20,6 +20,7 @@
#define HEADER_SCRIPT_PHYSICS_HPP
#include <angelscript.h>
#include <string>
namespace Scripting{
@@ -28,7 +29,7 @@ namespace Scripting{
//private:
int m_collidingkartid1;
int m_collidingkartid2;
std::string m_collisionType;
//public:
//script engine functions
@@ -39,12 +40,14 @@ namespace Scripting{
//game engine functions
void setCollision(int collider1, int collider2);
void setCollisionType(std::string);
//script-bound functions
void getCollidingKart1(asIScriptGeneric *gen);
void getCollidingKart2(asIScriptGeneric *gen);
void getCollsionType(asIScriptGeneric *gen);
}