More work on scripting
This commit is contained in:
parent
1559d03ea1
commit
d98c1044e6
@ -171,9 +171,11 @@ void Physics::update(float dt)
|
|||||||
Scripting::ScriptEngine* script_engine = World::getWorld()->getScriptEngine();
|
Scripting::ScriptEngine* script_engine = World::getWorld()->getScriptEngine();
|
||||||
int kartid1 = p->getUserPointer(0)->getPointerKart()->getWorldKartId();
|
int kartid1 = p->getUserPointer(0)->getPointerKart()->getWorldKartId();
|
||||||
int kartid2 = p->getUserPointer(1)->getPointerKart()->getWorldKartId();
|
int kartid2 = p->getUserPointer(1)->getPointerKart()->getWorldKartId();
|
||||||
// TODO: do not use globals this way, pass directly as function paramters
|
script_engine->runScript("void onKartKartCollision(int, int)",
|
||||||
Scripting::Physics::setCollision(kartid1,kartid2);
|
[=](asIScriptContext* ctx) {
|
||||||
script_engine->runScript("void onKartKartCollision()");
|
ctx->SetArgDWord(0, kartid1);
|
||||||
|
ctx->SetArgDWord(1, kartid2);
|
||||||
|
});
|
||||||
continue;
|
continue;
|
||||||
} // if kart-kart collision
|
} // if kart-kart collision
|
||||||
|
|
||||||
@ -182,28 +184,27 @@ void Physics::update(float dt)
|
|||||||
// Kart hits physical object
|
// Kart hits physical object
|
||||||
// -------------------------
|
// -------------------------
|
||||||
Scripting::ScriptEngine* script_engine = World::getWorld()->getScriptEngine();
|
Scripting::ScriptEngine* script_engine = World::getWorld()->getScriptEngine();
|
||||||
Scripting::Physics::setCollision(0, 0);
|
AbstractKart *kart = p->getUserPointer(1)->getPointerKart();
|
||||||
//Scripting::Physics::setCollisionType("KartObject"); //object as in physical object
|
int kartId = kart->getWorldKartId();
|
||||||
Scripting::Physics::setCollision(
|
std::string obj_id = p->getUserPointer(0)->getPointerPhysicalObject()->getID();
|
||||||
p->getUserPointer(0)->getPointerPhysicalObject()->getID(),
|
|
||||||
"kart"
|
// TODO: pass obj_id as arguent
|
||||||
);
|
script_engine->runScript("void onKartObjectCollision(int)",
|
||||||
script_engine->runScript("void onKartObjectCollision()");
|
[=](asIScriptContext* ctx) {
|
||||||
|
ctx->SetArgDWord(0, kartId);
|
||||||
|
});
|
||||||
PhysicalObject *obj = p->getUserPointer(0)
|
PhysicalObject *obj = p->getUserPointer(0)
|
||||||
->getPointerPhysicalObject();
|
->getPointerPhysicalObject();
|
||||||
if (obj->isCrashReset())
|
if (obj->isCrashReset())
|
||||||
{
|
{
|
||||||
AbstractKart *kart = p->getUserPointer(1)->getPointerKart();
|
|
||||||
new RescueAnimation(kart);
|
new RescueAnimation(kart);
|
||||||
}
|
}
|
||||||
else if (obj->isExplodeKartObject())
|
else if (obj->isExplodeKartObject())
|
||||||
{
|
{
|
||||||
AbstractKart *kart = p->getUserPointer(1)->getPointerKart();
|
|
||||||
ExplosionAnimation::create(kart);
|
ExplosionAnimation::create(kart);
|
||||||
}
|
}
|
||||||
else if (obj->isFlattenKartObject())
|
else if (obj->isFlattenKartObject())
|
||||||
{
|
{
|
||||||
AbstractKart *kart = p->getUserPointer(1)->getPointerKart();
|
|
||||||
const KartProperties* kp = kart->getKartProperties();
|
const KartProperties* kp = kart->getKartProperties();
|
||||||
kart->setSquash(kp->getSquashDuration() * kart->getPlayerDifficulty()->getSquashDuration(),
|
kart->setSquash(kp->getSquashDuration() * kart->getPlayerDifficulty()->getSquashDuration(),
|
||||||
kp->getSquashSlowdown() * kart->getPlayerDifficulty()->getSquashSlowdown());
|
kp->getSquashSlowdown() * kart->getPlayerDifficulty()->getSquashSlowdown());
|
||||||
@ -211,7 +212,6 @@ void Physics::update(float dt)
|
|||||||
else if(obj->isSoccerBall() &&
|
else if(obj->isSoccerBall() &&
|
||||||
race_manager->getMinorMode() == RaceManager::MINOR_MODE_SOCCER)
|
race_manager->getMinorMode() == RaceManager::MINOR_MODE_SOCCER)
|
||||||
{
|
{
|
||||||
int kartId = p->getUserPointer(1)->getPointerKart()->getWorldKartId();
|
|
||||||
SoccerWorld* soccerWorld = (SoccerWorld*)World::getWorld();
|
SoccerWorld* soccerWorld = (SoccerWorld*)World::getWorld();
|
||||||
soccerWorld->setLastKartTohitBall(kartId);
|
soccerWorld->setLastKartTohitBall(kartId);
|
||||||
}
|
}
|
||||||
@ -255,12 +255,11 @@ void Physics::update(float dt)
|
|||||||
// Projectile hits physical object
|
// Projectile hits physical object
|
||||||
// -------------------------------
|
// -------------------------------
|
||||||
Scripting::ScriptEngine* script_engine = World::getWorld()->getScriptEngine();
|
Scripting::ScriptEngine* script_engine = World::getWorld()->getScriptEngine();
|
||||||
Scripting::Physics::setCollision(0,0); //TODO : support item types etc
|
// TODO: pass arguments
|
||||||
//Scripting::Physics::setCollisionType("ItemObject");
|
//Scripting::Physics::setColl0ision(
|
||||||
Scripting::Physics::setCollision(
|
// p->getUserPointer(1)->getPointerPhysicalObject()->getID(),
|
||||||
p->getUserPointer(1)->getPointerPhysicalObject()->getID(),
|
// "item"
|
||||||
"item"
|
//);
|
||||||
);
|
|
||||||
script_engine->runScript("void onItemObjectCollision()");
|
script_engine->runScript("void onItemObjectCollision()");
|
||||||
p->getUserPointer(0)->getPointerFlyable()
|
p->getUserPointer(0)->getPointerFlyable()
|
||||||
->hit(NULL, p->getUserPointer(1)->getPointerPhysicalObject());
|
->hit(NULL, p->getUserPointer(1)->getPointerPhysicalObject());
|
||||||
|
@ -31,8 +31,6 @@ namespace Scripting
|
|||||||
namespace Physics
|
namespace Physics
|
||||||
{
|
{
|
||||||
void registerScriptFunctions(asIScriptEngine *engine);
|
void registerScriptFunctions(asIScriptEngine *engine);
|
||||||
void setCollision(int collider1,int collider2);
|
|
||||||
void setCollision(std::string collider1, std::string collider2);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace Kart
|
namespace Kart
|
||||||
|
@ -36,40 +36,10 @@ namespace Scripting
|
|||||||
HitEffect *he = new Explosion(*explosion_loc, "explosion", "explosion_bomb.xml");
|
HitEffect *he = new Explosion(*explosion_loc, "explosion", "explosion_bomb.xml");
|
||||||
projectile_manager->addHitEffect(he);
|
projectile_manager->addHitEffect(he);
|
||||||
}
|
}
|
||||||
//Bind getters for colliding karts
|
|
||||||
void getCollidingKart1(asIScriptGeneric *gen)
|
|
||||||
{
|
|
||||||
gen->SetReturnDWord(m_collidingkartid1);
|
|
||||||
}
|
|
||||||
void getCollidingKart2(asIScriptGeneric *gen)
|
|
||||||
{
|
|
||||||
gen->SetReturnDWord(m_collidingkartid2);
|
|
||||||
}
|
|
||||||
//Bind getter for colliding objects
|
|
||||||
void getCollidingID(asIScriptGeneric *gen)
|
|
||||||
{
|
|
||||||
void *pointer = &m_collider1;
|
|
||||||
gen->SetReturnObject(pointer);
|
|
||||||
}
|
|
||||||
|
|
||||||
//Callbacks from Physics Engine, for collisions
|
|
||||||
void setCollision(int collider1,int collider2)
|
|
||||||
{
|
|
||||||
m_collidingkartid1 = collider1;
|
|
||||||
m_collidingkartid2 = collider2;
|
|
||||||
}
|
|
||||||
void setCollision(std::string collider1, std::string collider2)
|
|
||||||
{
|
|
||||||
m_collider1 = collider1;
|
|
||||||
m_collider2 = collider2;
|
|
||||||
}
|
|
||||||
void registerScriptFunctions(asIScriptEngine *engine)
|
void registerScriptFunctions(asIScriptEngine *engine)
|
||||||
{
|
{
|
||||||
int r;
|
int r;
|
||||||
engine->SetDefaultNamespace("Physics");
|
engine->SetDefaultNamespace("Physics");
|
||||||
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 getCollidingID()", asFUNCTION(getCollidingID), asCALL_GENERIC); assert(r >= 0);
|
|
||||||
r = engine->RegisterGlobalFunction("string createExplosion(Vec3 &in)", asFUNCTION(createExplosion), asCALL_GENERIC); assert(r >= 0);
|
r = engine->RegisterGlobalFunction("string createExplosion(Vec3 &in)", asFUNCTION(createExplosion), asCALL_GENERIC); assert(r >= 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -27,34 +27,11 @@ namespace Scripting
|
|||||||
|
|
||||||
namespace Physics
|
namespace Physics
|
||||||
{
|
{
|
||||||
|
|
||||||
//IDs of kart collisions
|
|
||||||
int m_collidingkartid1;
|
|
||||||
int m_collidingkartid2;
|
|
||||||
|
|
||||||
//Details of collision
|
|
||||||
std::string m_collider1;
|
|
||||||
std::string m_collider2;
|
|
||||||
std::string m_collisionType;
|
|
||||||
|
|
||||||
//script engine functions
|
//script engine functions
|
||||||
void registerScriptFunctions(asIScriptEngine *engine);
|
void registerScriptFunctions(asIScriptEngine *engine);
|
||||||
asIScriptFunction*
|
asIScriptFunction*
|
||||||
registerScriptCallbacks(asIScriptEngine *engine);
|
registerScriptCallbacks(asIScriptEngine *engine);
|
||||||
|
|
||||||
|
|
||||||
//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);
|
|
||||||
void getCollidingID(asIScriptGeneric *gen);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user