Exemplo n.º 1
0
void test()
{
	Ogre::Root* pOgre = new Ogre::Root("", "");

    pOgre->loadPlugin(RENDER_SYSTEM);
	pOgre->setRenderSystem(pOgre->getAvailableRenderers().front());

	pOgre->initialise(false);
	
	Ogre::NameValuePairList lArgs;
	//lArgs["externalWindowHandle"] = bk::format("%d", (bk::uint)l_window.get_handle()).astr;
	Ogre::RenderWindow* pWindow = pOgre->createRenderWindow("Heart|Dockyard", 1024, 768, false, &lArgs);

	Ogre::SceneManager* pSceneManager = pOgre->createSceneManager(Ogre::ST_GENERIC,"SceneManager");
	pSceneManager->setShadowTechnique(Ogre::SHADOWTYPE_STENCIL_ADDITIVE);
	pSceneManager->setShadowCameraSetup(Ogre::ShadowCameraSetupPtr(new Ogre::FocusedShadowCameraSetup()));
	pSceneManager->setAmbientLight(Ogre::ColourValue(0.1f, 0.1f, 0.1f));

	Ogre::Camera* pCamera = pSceneManager->createCamera("Camera");
	pCamera->setFixedYawAxis(true, Ogre::Vector3::UNIT_Z);
	pCamera->setPosition(Ogre::Vector3(0.0f, 50.0f, 20.0f));
	pCamera->lookAt(Ogre::Vector3(0.0f, 0.0f, 0.0f)); 
	pCamera->setNearClipDistance(0.1f);
	pCamera->setFarClipDistance(100.0f);
	Ogre::Viewport* pViewport = pWindow->addViewport(pCamera);
	pViewport->setBackgroundColour(Ogre::ColourValue(0.0f, 0.0f, 0.0f));
	pCamera->setAspectRatio(Ogre::Real(pViewport->getActualWidth()) / Ogre::Real(pViewport->getActualHeight()));

	Ogre::ResourceGroupManager::getSingleton().addResourceLocation("../data/dockyard.zip", "Zip", "Dockyard", true);
	Ogre::ResourceGroupManager::getSingleton().initialiseAllResourceGroups();

	Ogre::MeshManager::getSingleton().createPlane("GroundPlane", "Dockyard", Ogre::Plane(0.0f, 0.0f, 1.0f, 0.0f), 100.0f, 100.0f, 100, 100, true, 1, 3.0f, 3.0f);
	Ogre::Entity* pGroundEntity = pSceneManager->createEntity("GroundPlane");
	pGroundEntity->setMaterialName("Examples/Rockwall");
	pGroundEntity->setCastShadows(false);
	pGroundEntity->getSubEntity(0)->getMaterial()->setShadingMode(Ogre::SO_PHONG);
	Ogre::SceneNode* pGroundNode = pSceneManager->getRootSceneNode()->createChildSceneNode();
	pGroundNode->attachObject(pGroundEntity);

	Ogre::Entity* pCubeEntity = pSceneManager->createEntity("Cube", Ogre::SceneManager::PT_CUBE);
	pCubeEntity->setMaterialName("Examples/10PointBlock");
	pCubeEntity->setCastShadows(true);
	Ogre::SceneNode* pCubeNode = pSceneManager->getRootSceneNode()->createChildSceneNode();
	pCubeNode->attachObject(pCubeEntity);
	pCubeNode->setPosition(0.0f, 0.0f, 5.f);
	pCubeNode->setScale(0.1f, 0.1f, 0.1f);

	Ogre::ColourValue lColour1(1.0f, 1.0f, 1.0f);
	Ogre::ColourValue lColour2(1.0f, 1.0f, 1.0f);
	Ogre::ColourValue lColour3(1.0f, 1.0f, 1.0f);
	Ogre::Light* pLight1 = pSceneManager->createLight();
	pLight1->setType(Ogre::Light::LT_SPOTLIGHT);
	pLight1->setPosition(30.0f, 30.0f, 30.0f);
	pLight1->setDirection(-1.0f, -1.0f, -1.0f);
	pLight1->setSpotlightRange(Ogre::Degree(30), Ogre::Degree(50));
	pLight1->setDiffuseColour(lColour1 * 0.5f);
	Ogre::Light* pLight2 = pSceneManager->createLight();
	pLight2->setType(Ogre::Light::LT_SPOTLIGHT);
	pLight2->setPosition(-30.0f, 30.0f, 30.0f);
	pLight2->setDirection(1.0f, -1.0f, -1.0f);
	pLight2->setSpotlightRange(Ogre::Degree(30), Ogre::Degree(50));
	pLight2->setDiffuseColour(lColour2 * 0.5f);
	Ogre::Light* pLight3 = pSceneManager->createLight();
	pLight3->setType(Ogre::Light::LT_SPOTLIGHT);
	pLight3->setPosition(30.0f, -30.0f, 30.0f);
	pLight3->setDirection(-1.0f, 1.0f, -1.0f);
	pLight3->setSpotlightRange(Ogre::Degree(30), Ogre::Degree(50));
	pLight3->setDiffuseColour(lColour3 * 0.5f);

	Ogre::Overlay* pMenuOverlay = Ogre::OverlayManager::getSingleton().create("Menu");
	Ogre::OverlayElement* pMenu = Ogre::OverlayManager::getSingleton().createOverlayElement("Panel", "Menu");
    pMenu->setMetricsMode(Ogre::GMM_PIXELS);
    pMenu->setWidth(200);
    pMenu->setHeight(200);
    pMenu->setTop(30);
    pMenu->setLeft(30);
    pMenu->setMaterialName("Examples/BumpyMetal");
	if (pMenu->isContainer()) pMenuOverlay->add2D(static_cast<Ogre::OverlayContainer*>(pMenu));
	pMenuOverlay->show();

	pOgre->startRendering();
}
Exemplo n.º 2
0
bool MyFrameListener::frameStarted(const Ogre::FrameEvent& evt) {
	
	Ogre::Vector3 vt(0,0,0);
	Ogre::Real deltaT = evt.timeSinceLastFrame;
	Ogre::Real tSpeed = 20.0;
	int fps = 1.0 / deltaT;

	_keyboard->capture();
	if(_keyboard->isKeyDown(OIS::KC_ESCAPE)) return false;
	if(_keyboard->isKeyDown(OIS::KC_0)) // reset
	{
		if (_gameState == 1)
		{
			_gameState = 0;
			deleteBoard();
			_overlayManager->getByName("Title")->show();
		}
	}
	if(_keyboard->isKeyDown(OIS::KC_1)) // jugar
	{
		if (_gameState == 0)
		{
			_gameState = 1;
			createBoard();
			_overlayManager->getByName("Title")->hide();
			_overlayManager->getByName("Win")->hide();
			_overlayManager->getByName("Lose")->hide();
		}
	}

	//if(_keyboard->isKeyDown(OIS::KC_2)) return false;

	// Captura del raton
	_mouse->capture();
	int posx = _mouse->getMouseState().X.abs;
	int posy = _mouse->getMouseState().Y.abs;

	// Dibujado del cursor
	Ogre::OverlayElement *oe;
	oe = _overlayManager->getOverlayElement("cursor");
	oe->setLeft(posx);
	oe->setTop(posy);
	
	// Accion del raton
	bool mbleft = _mouse->getMouseState().buttonDown(OIS::MB_Left);
	if (mbleft) {
		Ogre::Ray r = setRayQuery(posx, posy, 1);
		Ogre::RaySceneQueryResult &result = _raySceneQuery->execute();
		Ogre::RaySceneQueryResult::iterator it;
		it = result.begin();
		//AGUA
		if (it != result.end())
		{
			if (it->movable->getParentSceneNode()->getName() != "nodeG")
			{
				Ogre::Vector3 pos = it->movable->getParentSceneNode()->getPosition();
				it->movable->detachFromParent();
				
				// tirada del CPU.
				int lResult = 0;
				do
				{
					lResult = playCPU();
					if (endGame()!=0)
					{
						_gameState = 0;
						deleteBoard();
						_overlayManager->getByName("Title")->show();
						_overlayManager->getByName("Lose")->show();
					}
				}
				while ((lResult == 1) && (_gameState==1));
			}
		}
		//TOCADO
		r = setRayQuery(posx, posy, 2);
		Ogre::RaySceneQueryResult &resultShip = _raySceneQuery->execute();
		it = resultShip.begin();
		if (it != resultShip.end())
		{
			if (it->movable->getParentSceneNode()->getName() != "nodeG")
			{
				
				Ogre::Vector3 pos = it->movable->getParentSceneNode()->getPosition();
				it->movable->detachFromParent();
				
				// Creacion de otro cubo para cuando haya barco.
				Ogre::Entity* ent1;
				ent1 = _sceneManager->createEntity("CuboBarco.mesh");
				ent1->setQueryFlags(4);
				Ogre::SceneNode* node1 = _sceneManager->createSceneNode();
				node1->attachObject(ent1);
				node1->translate(pos.x,pos.y,pos.z);
				_sceneManager->getRootSceneNode()->addChild(node1);
				
				_maxFires--;
				// no tira CPU
				if (endGame()!=0)
				{
					_gameState = 0;
					deleteBoard();
					_overlayManager->getByName("Title")->show();
					_overlayManager->getByName("Win")->show();

				}

			}
		}
		
	}
	
	return true;
}