Disable scripting engine in child process

This commit is contained in:
Benau 2020-03-11 15:35:02 +08:00
parent 1d855ccfd7
commit afa60c4537
2 changed files with 25 additions and 14 deletions

View File

@ -207,6 +207,8 @@ void Physics::update(int ticks)
// other object. So only a flag is set in the flyables, the actual
// clean up is then done later in the projectile manager.
std::vector<CollisionPair>::iterator p;
// Child process currently has no scripting engine
bool is_child = STKProcess::getType() == PT_CHILD;
for(p=m_all_collisions.begin(); p!=m_all_collisions.end(); ++p)
{
// Kart-kart collision
@ -217,15 +219,18 @@ void Physics::update(int ticks)
p->getContactPointCS(0),
p->getUserPointer(1)->getPointerKart(),
p->getContactPointCS(1) );
Scripting::ScriptEngine* script_engine =
Scripting::ScriptEngine::getInstance();
int kartid1 = p->getUserPointer(0)->getPointerKart()->getWorldKartId();
int kartid2 = p->getUserPointer(1)->getPointerKart()->getWorldKartId();
script_engine->runFunction(false, "void onKartKartCollision(int, int)",
[=](asIScriptContext* ctx) {
ctx->SetArgDWord(0, kartid1);
ctx->SetArgDWord(1, kartid2);
});
if (!is_child)
{
Scripting::ScriptEngine* script_engine =
Scripting::ScriptEngine::getInstance();
int kartid1 = p->getUserPointer(0)->getPointerKart()->getWorldKartId();
int kartid2 = p->getUserPointer(1)->getPointerKart()->getWorldKartId();
script_engine->runFunction(false, "void onKartKartCollision(int, int)",
[=](asIScriptContext* ctx) {
ctx->SetArgDWord(0, kartid1);
ctx->SetArgDWord(1, kartid2);
});
}
continue;
} // if kart-kart collision
@ -233,7 +238,6 @@ void Physics::update(int ticks)
{
// Kart hits physical object
// -------------------------
Scripting::ScriptEngine* script_engine = Scripting::ScriptEngine::getInstance();
AbstractKart *kart = p->getUserPointer(1)->getPointerKart();
int kartId = kart->getWorldKartId();
PhysicalObject* obj = p->getUserPointer(0)->getPointerPhysicalObject();
@ -248,8 +252,9 @@ void Physics::update(int ticks)
lib_id = library->getID();
lib_id_ptr = &lib_id;
if (scripting_function.size() > 0)
if (!is_child && scripting_function.size() > 0)
{
Scripting::ScriptEngine* script_engine = Scripting::ScriptEngine::getInstance();
script_engine->runFunction(true, "void " + scripting_function + "(int, const string, const string)",
[&](asIScriptContext* ctx) {
ctx->SetArgDWord(0, kartId);
@ -336,13 +341,13 @@ void Physics::update(int ticks)
{
// Projectile hits physical object
// -------------------------------
Scripting::ScriptEngine* script_engine = Scripting::ScriptEngine::getInstance();
Flyable* flyable = p->getUserPointer(0)->getPointerFlyable();
PhysicalObject* obj = p->getUserPointer(1)->getPointerPhysicalObject();
std::string obj_id = obj->getID();
std::string scripting_function = obj->getOnItemCollisionFunction();
if (scripting_function.size() > 0)
if (!is_child && scripting_function.size() > 0)
{
Scripting::ScriptEngine* script_engine = Scripting::ScriptEngine::getInstance();
script_engine->runFunction(true, "void " + scripting_function + "(int, int, const string)",
[&](asIScriptContext* ctx) {
ctx->SetArgDWord(0, (int)flyable->getType());

View File

@ -48,6 +48,7 @@
#include "tracks/track.hpp"
#include "tracks/track_manager.hpp"
#include "tracks/track_object_manager.hpp"
#include "utils/stk_process.hpp"
#include "utils/string_utils.hpp"
#include <IBillboardSceneNode.h>
@ -290,6 +291,10 @@ TrackObjectPresentationLibraryNode::TrackObjectPresentationLibraryNode(
void TrackObjectPresentationLibraryNode::update(float dt)
{
// Child process currently has no scripting engine
if (STKProcess::getType() == PT_CHILD)
return;
if (!m_start_executed)
{
m_start_executed = true;
@ -1138,7 +1143,8 @@ TrackObjectPresentationActionTrigger::TrackObjectPresentationActionTrigger(
// ----------------------------------------------------------------------------
void TrackObjectPresentationActionTrigger::onTriggerItemApproached(int kart_id)
{
if (m_reenable_timeout > StkTime::getMonoTimeMs())
if (m_reenable_timeout > StkTime::getMonoTimeMs() ||
STKProcess::getType() == PT_CHILD)
{
return;
}