Пример #1
0
void MaratisPlayer::start(void)
{
	// MEngine
	{
		MEngine * engine = MEngine::getInstance();

		// package manager
		engine->setPackageManager(m_packageManager);
		m_packageManager->init();
		
		// contexts
		engine->setSoundContext(m_soundContext); // sound context
		engine->setRenderingContext(m_render); // rendering context
		engine->setPhysicsContext(m_physics); // physics context
		engine->setScriptContext(m_script); // script context
		engine->setInputContext(m_input); // input context
		engine->setSystemContext(m_system); // system context

		// loaders
		engine->getImageLoader()->addLoader(M_loadImage); // image loader
		engine->getSoundLoader()->addLoader(M_loadSound); // sound loader
		engine->getLevelLoader()->addLoader(xmlLevelLoad); // level loader
		engine->getFontLoader()->addLoader(M_loadFont); // font loader
		engine->getFontLoader()->addLoader(M_loadBinFont); // bin font loader

		// add behaviors
		engine->getBehaviorManager()->addBehavior(MBLookAt::getStaticName(), M_OBJECT3D_CAMERA, MBLookAt::getNew);
		engine->getBehaviorManager()->addBehavior(MBFollow::getStaticName(), M_OBJECT3D, MBFollow::getNew);

		// add renderers
		engine->getRendererManager()->addRenderer(MStandardRenderer::getStaticName(), MStandardRenderer::getNew);
		engine->getRendererManager()->addRenderer(MFixedRenderer::getStaticName(), MFixedRenderer::getNew);
		
		// mesh loader
		engine->getMeshLoader()->addLoader(xmlMeshLoad);
		engine->getMeshLoader()->addLoader(M_loadBinMesh);
		engine->getArmatureAnimLoader()->addLoader(xmlArmatureAnimLoad);
		engine->getArmatureAnimLoader()->addLoader(M_loadBinArmatureAnim);
		engine->getTexturesAnimLoader()->addLoader(xmlTextureAnimLoad);
		engine->getTexturesAnimLoader()->addLoader(M_loadBinTexturesAnim);
		engine->getMaterialsAnimLoader()->addLoader(xmlMaterialAnimLoad);
        engine->getMaterialsAnimLoader()->addLoader(M_loadBinMaterialsAnim);

		// level
		engine->setLevel(m_level);

		// game
		engine->setGame(m_game);
		
		// set default renderer (standard)
		if(m_renderer == NULL)
			m_renderer = new MStandardRenderer();
		engine->setRenderer(m_renderer);


		engine->setSaveFileFactory(MSaveFileImpl::getNew);
	}
}
Пример #2
0
void MaratisPlayer::clear(void)
{
	MEngine * engine = MEngine::getInstance();
	
	// level
	m_level->clear();
	if(m_renderer){
		m_renderer->destroy();
		m_renderer = NULL;
	}
	
	// plugins
	SAFE_DELETE(m_gamePlugin);

	unsigned int i;
	unsigned int pSize = m_plugins.size();
	for(i=0; i<pSize; i++)
		SAFE_DELETE(m_plugins[i]);

	m_plugins.clear();

	// MEngine
	{
		// loaders
		engine->getImageLoader()->clear();
		engine->getSoundLoader()->clear();
		engine->getLevelLoader()->clear();
		engine->getFontLoader()->clear();
		engine->getFontLoader()->clear();

		// behaviors
		engine->getBehaviorManager()->clear();
		
		// renderer
		engine->getRendererManager()->clear();

		// mesh loader
		engine->getMeshLoader()->clear();
		engine->getArmatureAnimLoader()->clear();
		engine->getTexturesAnimLoader()->clear();
		engine->getMaterialsAnimLoader()->clear();
	}
}
Пример #3
0
    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;
    }
Пример #4
0
void MTextureRef::update(void)
{
    M_PROFILE_SCOPE(MTextureRef::update);
	MEngine * engine = MEngine::getInstance();
	MRenderingContext * render = engine->getRenderingContext();

	MImage image;
	if(engine->getImageLoader()->loadData(getFilename(), &image))
	{
		if(m_textureId == 0)
			render->createTexture(&m_textureId);

		m_components = image.getComponents();
		m_width = image.getWidth();
		m_height = image.getHeight();
				
		// send texture image
		render->bindTexture(m_textureId);
		render->sendTextureImage(&image, isMipmapEnabled(), 1, 0);
	}
}
Пример #5
0
// main
int main(int argc, char **argv)
{
	setlocale(LC_NUMERIC, "C");

	unsigned int width = 800;
	unsigned int height = 400;
	bool fullscreen = false;

	// get engine
	MEngine* engine = MEngine::getInstance();

	// get window
	MWindow* window = MWindow::getInstance();
	window->setPointerEvent(windowEvents); // window events

	// create window
	if(! window->create("Maratis - ManualUse example", width, height, 32, fullscreen))
	{
		MLOG(4, "window create failed");
		return 0;
	}
	
	if(fullscreen)
		window->hideCursor();

	// set current directory
	{
		char rep[256];
		getRepertory(rep, argv[0]);
		window->setCurrentDirectory(rep);
	}

	// create virtual contexts
	MSoundContext * soundContext = new MALContext();
	MRenderingContext * render = new MGLContext();
	MPhysicsContext * physics = new MBulletContext();
	MScriptContext * script = new MScript();
	MInputContext *	input = new MInput();
	MSystemContext * system = new MWinContext();

	MLOG(5, "Render version: " << render->getRendererVersion());
	
	// create default Level and Game
	MLevel * level = new MLevel();
	MGame * game = new MyGame(); // MyGame
	
	// init MEngine (you can replace all contexts by others and add or use different data loaders)
	engine->setSoundContext(soundContext); // sound context
	engine->setRenderingContext(render); // rendering context
	engine->setPhysicsContext(physics); // physics context
	engine->setScriptContext(script); // script context
	engine->setInputContext(input); // input context
	engine->setSystemContext(system); // system context

	engine->getImageLoader()->addLoader(M_loadImage); // image loader
	engine->getSoundLoader()->addLoader(M_loadSound); // sound loader
	// engine->getLevelLoader()->addLoader(xmlLevelLoad); // level loader : uncomment if wanted
	engine->getFontLoader()->addLoader(M_loadFont); // font loader
	// engine->getFontLoader()->addLoader(M_loadBinFont); // bin font loader : uncomment if wanted

	// add some default "Maratis" behaviors : uncomment if wanted or add custom
	// engine->getBehaviorManager()->addBehavior(MBLookAt::getStaticName(), M_OBJECT3D_CAMERA, MBLookAt::getNew);
	// engine->getBehaviorManager()->addBehavior(MBFollow::getStaticName(), M_OBJECT3D, MBFollow::getNew);

	// add renderers
	engine->getRendererManager()->addRenderer(MStandardRenderer::getStaticName(), MStandardRenderer::getNew);
	engine->getRendererManager()->addRenderer(MFixedRenderer::getStaticName(), MFixedRenderer::getNew);

	// mesh loader
	engine->getMeshLoader()->addLoader(xmlMeshLoad);
	engine->getArmatureAnimLoader()->addLoader(xmlArmatureAnimLoad);
	engine->getTexturesAnimLoader()->addLoader(xmlTextureAnimLoad);
	engine->getMaterialsAnimLoader()->addLoader(xmlMaterialAnimLoad);

	// set level
	engine->setLevel(level);

	// set game
	engine->setGame(game);

	// set renderer (standard)
	MRenderer * renderer = engine->getRendererManager()->getRendererByName("StandardRenderer")->getNewRenderer();
	engine->setRenderer(renderer);

	// begin game
	game->begin();

	// time
	unsigned int frequency = 60;
	unsigned long previousFrame = 0;
	unsigned long startTick = window->getSystemTick();

	// on events
	while(window->isActive())
	{
		// on events
		if(window->onEvents())
		{
			// compute target tick
			unsigned long currentTick = window->getSystemTick();

			unsigned long tick = currentTick - startTick;
			unsigned long frame = (unsigned long)(tick * (frequency * 0.001f));

			// update elapsed time
			unsigned int i;
			unsigned int steps = (unsigned int)(frame - previousFrame);

			if(window->getFocus())
			{
				// don't wait too much
				if(steps >= (frequency/2))
				{
					update();
					draw();
					previousFrame += steps;
					continue;
				}

				// update
				for(i=0; i<steps; i++)
				{
					update();
					previousFrame++;
				}

				// draw
				if(steps > 0){
					draw();
				}
			}
			else
			{
				previousFrame = frame;
				window->swapBuffer();
			}
		}
	}

	MLOG(5, "ending game...");
	game->end();
	
    MLOG(5, "destroying renderer...");
	renderer->destroy();

	SAFE_DELETE(game);
	SAFE_DELETE(level);

	SAFE_DELETE(render);
	SAFE_DELETE(soundContext);
	SAFE_DELETE(physics);
	SAFE_DELETE(script);
	SAFE_DELETE(input);
	SAFE_DELETE(system);

	return 0;
}
Пример #6
0
// main
int main(int argc, char **argv)
{
    setlocale(LC_NUMERIC, "C");

    char dir[256];
    getDirectory(dir, argv[0]);
    MGUI_setCurrentDirectory(dir);

    // get engine
    MEngine *engine = MEngine::getInstance();

    // init
    if (!MGUI_init())
        return EXIT_FAILURE;

    // add loaders
    M_initFreeImage();

    engine->getImageLoader()->addLoader(M_loadImage); // image loader
    //engine->getSoundLoader()->addLoader(M_loadSound); // sound loader
    //engine->getLevelLoader()->addLoader(xmlLevelLoad); // level loader : uncomment if wanted
    engine->getFontLoader()->addLoader(M_loadFont); // font loader
    //engine->getFontLoader()->addLoader(M_loadBinFont); // bin font loader : uncomment if wanted

    // mesh loader
    engine->getMeshLoader()->addLoader(xmlMeshLoad);
    engine->getArmatureAnimLoader()->addLoader(xmlArmatureAnimLoad);
    engine->getTexturesAnimLoader()->addLoader(xmlTextureAnimLoad);
    engine->getMaterialsAnimLoader()->addLoader(xmlMaterialAnimLoad);

    // create main window
    MWindow *window = MGUI_createWindow("Manual Use", 10, 10, 800, 600, winEvents);
    if (!window)
    {
        MGUI_close();
        M_closeFreeImage();
        return EXIT_FAILURE;
    }

    window->setDrawCallback(drawCallback);

    const float frequency = 60.0;
    double currentTick, startTick = MGUI_getTime();
    unsigned int numFrame = 0;
    unsigned int currFrame = 0;
    unsigned int prevFrame = startTick * frequency;
    unsigned int steps, i;

    // update
    while (1)
    {
        ++numFrame;
        currentTick = MGUI_getTime();

        if (currentTick - startTick >= 1.0)
        {
            startTick += 1.0;

            MLOG(6, "fps: " << numFrame << ", ft: " << 1000.0f / numFrame << "ms");

            numFrame = 0;
        }

        currFrame = currentTick * frequency;
        steps = currFrame - prevFrame;
        prevFrame = currFrame;

        for (i = 0; i < steps; i++)
            game->update();

        if (!MGUI_update())
            break;
    }

    MGUI_close();
    M_closeFreeImage();
    return EXIT_SUCCESS;
}