void MGame::onBeginScene(void) { MEngine * engine = MEngine::getInstance(); // get level MLevel * level = MEngine::getInstance()->getLevel(); if(! level) return; // get current scene MScene * scene = level->getCurrentScene(); if(! scene) return; // update objects scene->updateObjectsMatrices(); // start sound scene->playLoopSounds(); // prepare physics scene->preparePhysics(); // run script if(engine->getScriptContext()) engine->getScriptContext()->runScript(scene->getScriptFilename()); }
int ScriptAtlasSelect() { MEngine* engine = MEngine::getInstance(); MScriptContext* script = engine->getScriptContext(); if(Atlas* atlas = (Atlas*)script->getPointer(0)) atlas->Select(); return 0; }
void MPluginEnd(MScriptExt) { MResource::unregisterFactory("MScriptExt", MScriptExtGetter); MEngine* engine = MEngine::getInstance(); if(engine->getScriptContext() == s_script) engine->setScriptContext(NULL); delete s_script; }
int ScriptAtlasWrite() { MEngine* engine = MEngine::getInstance(); MScriptContext* script = engine->getScriptContext(); Atlas* atlas = (Atlas*)script->getPointer(0); atlas->Save(); return 0; }
void MGame::update(void) { MEngine * engine = MEngine::getInstance(); // run script if(engine->getScriptContext()) engine->getScriptContext()->callFunction("onSceneUpdate"); // get level MLevel * level = MEngine::getInstance()->getLevel(); if(! level) return; // get current scene MScene * scene = level->getCurrentScene(); if(! scene) return; // update behaviors unsigned int i; unsigned int oSize = scene->getObjectsNumber(); for(i=0; i<oSize; i++) { MObject3d * object = scene->getObjectByIndex(i); if(! object->isActive()) continue; object->updateBehaviors(); } // update scene scene->update(); // update physics scene->updatePhysics(); // update objects matrices scene->updateObjectsMatrices(); // flush input engine->getInputContext()->flush(); }
int ScriptAtlasImageDestroy() { MEngine* engine = MEngine::getInstance(); MScriptContext* script = engine->getScriptContext(); MImage* image = (MImage*)script->getPointer(0); if(image) delete image; return 0; }
int ScriptAtlasDestroy() { MEngine* engine = MEngine::getInstance(); MScriptContext* script = engine->getScriptContext(); Atlas* atlas = (Atlas*)script->getPointer(0); if(atlas) delete atlas; return 0; }
int ScriptAtlasCreate() { MEngine* engine = MEngine::getInstance(); MScriptContext* script = engine->getScriptContext(); unsigned int size = script->getInteger(0); const char* name = script->getString(1); script->pushPointer(new Atlas(size, 4, name)); return 1; }
int ScriptAtlasImageWrite() { MEngine* engine = MEngine::getInstance(); MScriptContext* script = engine->getScriptContext(); MImage* image = (MImage*)script->getPointer(0); const char* file = script->getString(1); engine->getImageSaver()->loadData(file, image); return 0; }
void MScene::begin(void) { MEngine * engine = MEngine::getInstance(); MScriptContext * scriptContext = engine->getScriptContext(); updateObjectsMatrices(); playLoopSounds(); preparePhysics(); // run script if(scriptContext) scriptContext->runScript(getScriptFilename()); }
int ScriptAtlasImageGetSize() { MEngine* engine = MEngine::getInstance(); MScriptContext* script = engine->getScriptContext(); MImage* image = (MImage*)script->getPointer(0); if(image) { script->pushInteger(image->getWidth()); script->pushInteger(image->getHeight()); return 2; } return 0; }
int ScriptAtlasGetSize() { MEngine* engine = MEngine::getInstance(); MScriptContext* script = engine->getScriptContext(); Atlas* atlas = (Atlas*)script->getPointer(0); if(atlas) { MImage* image = atlas->GetImage(); script->pushInteger(image->getWidth()); script->pushInteger(image->getHeight()); return 2; } return 0; }
int ScriptAtlasGetUVs() { MEngine* engine = MEngine::getInstance(); MScriptContext* script = engine->getScriptContext(); MVector2 uvs[2]; if(Atlas* atlas = (Atlas*)script->getPointer(0)) atlas->GetUVs(uvs, script->getString(1)); script->pushFloat(uvs[0].x); script->pushFloat(uvs[0].y); script->pushFloat(uvs[1].x); script->pushFloat(uvs[1].y); return 4; }
int ScriptSetColour() { MEngine* engine = MEngine::getInstance(); MScriptContext* script = engine->getScriptContext(); if(script->getArgsNumber() >= 3) { g_CurrentColour.r = script->getInteger(0); g_CurrentColour.g = script->getInteger(1); g_CurrentColour.b = script->getInteger(2); if(script->getArgsNumber() >= 4) g_CurrentColour.a = script->getInteger(3); else g_CurrentColour.a = 255; } }
void MPluginStart(MScriptExt) { MResource::registerFactory("MScriptExt", MScriptExtGetter); MEngine* engine = MEngine::getInstance(); s_script = new MScriptExtImpl; // copy the existing environment MScriptContext* oldScriptContext = engine->getScriptContext(); char fnName[256]; if(oldScriptContext) for(int i = 0; i < oldScriptContext->getNumCFunctions(); ++i) { MScriptContext::CFunction fn = oldScriptContext->getCFunction(i, fnName); s_script->addFunction(fnName, fn); } engine->setScriptContext(s_script); s_script->init(); }
int ScriptAtlasAdd() { MEngine* engine = MEngine::getInstance(); MScriptContext* script = engine->getScriptContext(); Atlas* atlas = (Atlas*)script->getPointer(0); const char* path = script->getString(1); MImage* img = new MImage; if( engine->getImageLoader()->loadData(path, img) && atlas) { MImage* ref = atlas->AddImage(img, path); script->pushPointer(ref); if(ref != img) delete img; return ref != NULL ? 1 : 0; } delete img; return 0; }
int ScriptAddQuad() { MEngine* engine = MEngine::getInstance(); MScriptContext* script = engine->getScriptContext(); if(g_Cnt >= MAX_QUAD) return 0; MVector3 verts[4]; MVector2 uvs[4]; for(int i = 0; i < 4; ++i) { MVector2 vert; script->getFloatArray(i*2, &vert.x, 2); verts[i] = MVector3(vert.x, vert.y, 1); script->getFloatArray(i*2 + 1, &uvs[i].x, 2); } // copy the vertices g_Vertices[g_Cnt*6 + 0] = verts[0]; g_Vertices[g_Cnt*6 + 1] = verts[1]; g_Vertices[g_Cnt*6 + 2] = verts[2]; g_Vertices[g_Cnt*6 + 3] = verts[0]; g_Vertices[g_Cnt*6 + 4] = verts[2]; g_Vertices[g_Cnt*6 + 5] = verts[3]; // copy the UVs in order g_UVs[g_Cnt*6 + 0] = uvs[0]; g_UVs[g_Cnt*6 + 1] = uvs[1]; g_UVs[g_Cnt*6 + 2] = uvs[2]; g_UVs[g_Cnt*6 + 3] = uvs[0]; g_UVs[g_Cnt*6 + 4] = uvs[2]; g_UVs[g_Cnt*6 + 5] = uvs[3]; for(int i = 0; i < 6; ++i) g_Colours[g_Cnt*6 + i] = g_CurrentColour; g_Cnt ++; return 0; }