/** * Set the height of the building in stories. If the building has no levels, * two will be created: for the walls and the roof. If the number of stories * is greater than before, the additional stories are added to the top-most * non-roof level. If lesser, stories and levels are removed from the top * down until the desired number is met. * * \param iStories Number of stories to set. */ void vtBuilding::SetStories(int iStories) { vtLevel *pLev; int previous = GetStories(); if (previous == iStories) return; // this method assume each building must have at least two levels: one // for the walls and one for the roof. int levels = m_Levels.GetSize(); if (levels == 0) { CreateLevel(); levels++; } if (levels == 1) { vtLevel *pFirstLev = GetLevel(0); pLev = CreateLevel(); pLev->SetFootprint(pFirstLev->GetFootprint()); pLev->SetRoofType(ROOF_FLAT, 0); levels++; } previous = GetStories(); // Just in case it changed // increase if necessary if (iStories > previous) { // get top non-roof level pLev = m_Levels[levels-2]; // added some stories pLev->m_iStories += (iStories - previous); } // decrease if necessary while (GetStories() > iStories) { // get top non-roof level pLev = m_Levels[levels-2]; pLev->m_iStories--; if (pLev->m_iStories == 0) { delete pLev; m_Levels.SetSize(levels-1); levels--; } } // keep 2d and 3d in synch DetermineLocalFootprints(); }
void FPxScene::InitLevel( ULevel* level ) { pxguard(FPxScene::InitLevel); PX_LOG( PX_NAME, TEXT("%s >> %s ::"), PX_LOGP ); if( !level ) { PX_ERR( PX_NAME, TEXT("%s !! %s :: No level provided"), PX_LOGP ); return; } if( !mLevel ) { CreateLevel(level); } else if( mLevel != level ) { PX_LOG( PX_NAME, TEXT("%s !! %s :: Different level already loaded"), PX_LOGP ); return; } // Add level actors for( INT i=0; i<level->Actors.Num(); i++ ) if( level->Actors(i) ) InitActor( level->Actors(i) ); PX_LOG( PX_NAME, TEXT("%s << %s ::"), PX_LOGP ); unguard; }
bool UIListTreeType::MoveRight(bool do_refresh) { if (!currentpos || !currentlevel) { return true; } if (currentpos->childCount() > 0) { currentlevel->SetActive(false); curlevel++; CreateLevel(curlevel); currentlevel = GetLevel(curlevel); FillLevelFromTree(currentpos, currentlevel); currentlevel->SetVisible(true); currentlevel->SetActive(true); SetCurrentPosition(); if (do_refresh) { Redraw(); } return true; } return false; }
/** * Set the footprintf of the given level of the building. * * \param lev The level, from 0 for the base level and up. * \param poly The footprint. */ void vtBuilding::SetFootprint(int lev, const DPolygon2 &poly) { int levs = GetNumLevels(); if (lev >= levs) CreateLevel(); m_Levels[lev]->SetFootprint(poly); // keep 2d and 3d in synch DetermineLocalFootprints(); }
// Prepares for a new game, resets counters etc. void NewGame(){ if(game_state == GAME_STATE_NOT_STARTED) return; balls_left = BALLS_MAX; CreateLevel(); SpawnNewBall(); UpdateStatusTexts(); game_state = GAME_STATE_NOT_STARTED; overlay->SetActive(true); game_start_txt->SetActive(true); game_lost_txt->SetActive(false); game_won_txt->SetActive(false); game_restart_txt->SetActive(false); }
void CGameServer::ReadLevelInfo(tstring sFile) { std::basic_ifstream<tchar> f(sFile.c_str()); CData* pData = new CData(); CDataSerializer::Read(f, pData); CResource<CLevel> pLevel = CreateLevel(); pLevel->SetFile(sFile.replace("\\", "/")); pLevel->ReadInfoFromData(pData); m_apLevels.push_back(pLevel); delete pData; }
void UIListTreeType::SetTree(UIListGenericTree *toplevel) { if (treetop) { listLevels.clear(); currentlevel = NULL; treetop = NULL; currentpos = NULL; levels = 0; curlevel = -1; } levels = - 1; currentpos = (UIListGenericTree *)toplevel->getChildAt(0); if (!currentpos) { // // Not really an error, as UIListTreeType is perfectly capable of drawing an empty list. // // cerr << "No top-level children?\n"; return; } treetop = toplevel; CreateLevel(0); currentlevel = GetLevel(0); if (!currentlevel) { cerr << "Something is seriously wrong (currentlevel = NULL)\n"; return; } FillLevelFromTree(toplevel, currentlevel); currentlevel->SetVisible(true); currentlevel->SetActive(true); currentpos = (UIListGenericTree *)(currentlevel->GetItemFirst()->getData()); curlevel = 0; emit requestUpdate(); emit itemEntered(this, currentpos); }
void vtBuilding::AddDefaultDetails() { // requires at least 2 levels to operate int numlevels = GetNumLevels(); while (numlevels < 2) { CreateLevel(); numlevels = GetNumLevels(); } // add some default windows/doors vtLevel *lev; vtEdge *edge; int i, j; for (i = 0; i < numlevels - 1; i++) { lev = m_Levels[i]; int edges = lev->NumEdges(); for (j = 0; j < edges; j++) { edge = lev->GetEdge(j); int doors = 0; int windows = (int) (lev->GetEdgeLength(j) / 6.0f); edge->Set(doors, windows, BMAT_NAME_SIDING); } } // process roof level vtLevel *roof = m_Levels[i]; int edges = roof->NumEdges(); if (0 == edges) roof->SetFootprint(m_Levels[0]->GetFootprint()); edges = roof->NumEdges(); for (j = 0; j < edges; j++) { edge = roof->GetEdge(j); edge->m_iSlope = 0; // flat roof } DetermineLocalFootprints(); }
void vtBuilding::CopyFromDefault(vtBuilding *pDefBld, bool bDoHeight) { SetElevationOffset(pDefBld->GetElevationOffset()); DPolygon2 foot; uint from_levels = pDefBld->GetNumLevels(); uint copy_levels; if (bDoHeight) copy_levels = from_levels; else copy_levels = GetNumLevels(); for (uint i = 0; i < copy_levels; i++) { vtLevel *pLevel = GetLevel(i); if (pLevel) foot = pLevel->GetFootprint(); else pLevel = CreateLevel(foot); vtLevel *pFromLevel; if (bDoHeight) { pFromLevel = pDefBld->GetLevel(i); pLevel->m_iStories = pFromLevel->m_iStories; pLevel->m_fStoryHeight = pFromLevel->m_fStoryHeight; } else { // The target building may have more more levels than the default. // Try to guess an appropriate corresponding level. int from_level; if (i == 0) from_level = 0; else if (i == copy_levels-1) from_level = from_levels - 1; else { from_level = i; if (from_levels > 2) from_level = 1; else from_level = 0; } pFromLevel = pDefBld->GetLevel(from_level); } pLevel->SetEdgeColor(pFromLevel->GetEdge(0)->m_Color); pLevel->SetEdgeMaterial(*pFromLevel->GetEdge(0)->m_pMaterial); int slope = pFromLevel->GetEdge(0)->m_iSlope; if (slope == 0) pLevel->SetRoofType(ROOF_FLAT, slope); else if (slope > 0 && slope < 90) pLevel->SetRoofType(ROOF_HIP, slope); else { for (int j = 0; j < pLevel->NumEdges(); j++) pLevel->GetEdge(j)->m_iSlope = pFromLevel->GetEdge(0)->m_iSlope; } } }