void TerrainManager::CreateTerrain( unsigned int nTerrainPageX, unsigned int nTerrainPageY, unsigned int nTerrainSize, float fTerrainWorldSize, const Ogre::Vector3 &TerrainPos ) { m_nTerrainSize = nTerrainSize; m_fWorldTerrainSize = fTerrainWorldSize; m_TerrainPos = TerrainPos; const Ogre::String filename("terrain"); const Ogre::String extension("dat"); /*Ogre::ResourceGroupManager &rgm = Ogre::ResourceGroupManager::getSingleton(); rgm.addResourceLocation("defaultsTexture", "FileSystem", "temp"); rgm.initialiseResourceGroup("temp");*/ DestroyTerrain(); m_pkTerrainGroup = new Ogre::TerrainGroup(m_pkSceneManager, Ogre::Terrain::ALIGN_X_Z, m_nTerrainSize, m_fWorldTerrainSize); m_pkTerrainGroup->setFilenameConvention(filename, extension); m_pkTerrainGroup->setOrigin(m_TerrainPos); m_pkTerrainGroup->setResourceGroup("ControlCarChapter"); ConfigTerrainDefaults(); for (long x = 0; x <= nTerrainPageX; ++x) for (long y = 0; y <= nTerrainPageY; ++y) m_pkTerrainGroup->defineTerrain(x, y, 0.0f); m_pkTerrainGroup->loadAllTerrains(true); m_pkTerrainGroup->saveAllTerrains(true); m_pkTerrainGroup->removeAllTerrains(); m_bCreate = true; LoadTerrain(filename, extension, nTerrainPageX, nTerrainPageY, "ControlCarChapter"); }
void TerrainManager::LoadTerrain(const Ogre::String& prefix, const Ogre::String& extension, unsigned int nTerrainPageX, unsigned int nTerrainPageY, const Ogre::String &ResourceGroup) { m_nTerrainPageX = nTerrainPageX; m_nTerrainPageY = nTerrainPageY; // Paging setup // Since we're not loading any pages from .page files, we need a way just // to say we've loaded them without them actually being loaded if( m_bCreate ) { m_bCreate = false; } else { DestroyTerrain(); /*Ogre::ResourceGroupManager::getSingleton().addResourceLocation("defaultsTexture", "FileSystem", ResourceGroup); Ogre::ResourceGroupManager::getSingleton().initialiseResourceGroup(ResourceGroup);*/ m_pkTerrainGroup = new Ogre::TerrainGroup(m_pkSceneManager, Ogre::Terrain::ALIGN_X_Z, m_nTerrainSize, m_fWorldTerrainSize); m_pkTerrainGroup->setResourceGroup(ResourceGroup); m_pkTerrainGroup->setFilenameConvention(prefix, extension); ConfigTerrainDefaults(); } m_pkPageManager->setPageProvider(&m_DummyPageProvider); m_pkPageManager->addCamera(m_pkCamera); Ogre::PagedWorld* world = m_pkPageManager->createWorld(); Ogre::TerrainPagedWorldSection *d = m_pkTerrainPaging->createWorldSection(world, m_pkTerrainGroup, 2000, 3000, 0, 0, m_nTerrainPageX, m_nTerrainPageY); m_pkTerrainGroup->freeTemporaryResources(); }
void TerrainManager::ShutDown() { DestroyTerrain(); if( m_pkTerrainPaging ) { delete m_pkTerrainPaging; m_pkTerrainPaging = 0; } if( m_pkPageManager ) { delete m_pkPageManager; m_pkPageManager = 0; } if( m_pkTerrainGlobals ) { delete m_pkTerrainGlobals; m_pkTerrainGlobals = 0; } }
// Called every frame void AGameplayPawn::Tick( float DeltaTime ) { Super::Tick( DeltaTime ); //SpawnParticle(); GroupedFloatingSprite->ClearInstances(); if (LMBPressed) { FVector2D mousePos = GetMouseWorldPosition(); //GEngine->AddOnScreenDebugMessage(-1, 5.0, FColor::Green, FString::FromInt(nx) + FString(", ") + FString::FromInt(ny)); //GEngine->AddOnScreenDebugMessage(-1, 5.0, FColor::Green, GetMouseWorldPosition().ToString()); DestroyTerrain(mousePos); } else PrevMouseX = -32767; UpdateLF(DeltaTime); for (int i = 0; i < NumFloaters; i++) { GroupedFloatingSprite->AddInstance(FTransform(FRotator(0.0f, FMath::RadiansToDegrees(FloatingBody[i]->GetAngle()), 90.0f), FVector(FloatingBody[i]->GetPosition().x*SCALE_FACTOR, FloatingBody[i]->GetPosition().y*SCALE_FACTOR, -7.0f), FVector(1.0f, 1.0f, 1.0f)), FloatingSprite->GetSprite(), true, FColor::White); } UpdateWinCheck(); //GEngine->AddOnScreenDebugMessage(0, 1.0, FColor::Green, FString::FromInt(particleSystem->GetParticleCount())); }