Ejemplo n.º 1
0
/**
 * 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();
}
Ejemplo n.º 2
0
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;
}
Ejemplo n.º 3
0
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;
}
Ejemplo n.º 4
0
/**
 * 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();
}
Ejemplo n.º 5
0
// 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);
}
Ejemplo n.º 6
0
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;
}
Ejemplo n.º 7
0
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);
}
Ejemplo n.º 8
0
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();
}
Ejemplo n.º 9
0
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;
		}
	}
}