Esempio n. 1
0
void CWallTool::OnDeleteWall () 
{
	bool bRefresh = false;
	INT16 wallnum;

GetWalls ();
for (BOOL bSide = FALSE; bSide <= m_bBothSides; bSide++) {
	wallnum = m_nWall [bSide];
	if (bSide && (m_nWall [1] > m_nWall [0]))
		wallnum--;
	if (wallnum >= 0) {
		m_bDelayRefresh = true;
		m_mine->DeleteWall ((UINT16) wallnum);
		m_bDelayRefresh = false;
		bRefresh = true;
		}
	else if (!bExpertMode)
		if (m_mine->GameInfo ().walls.count == 0)
			ErrorMsg ("There are no walls in this mine.");
		else
			ErrorMsg ("There is no wall at this side of the current cube.");
	}
if (bRefresh) {
	theApp.MineView ()->Refresh ();
	Refresh ();
	}
}
Esempio n. 2
0
void CWallTool::OnSetClip ()
{
	int		clipnum;
	CDWall	*wall;
/*
m_nWall [0] = CBWallNo ()->GetCurSel ();
m_pWall [0] = m_mine->Walls () + m_nWall [0];
*/
GetWalls ();
m_nClip = CBClipNo ()->GetCurSel ();
for (BOOL bSide = FALSE; bSide <= m_bBothSides; bSide++)
	if (wall = m_pWall [bSide])
		if ((wall->type == WALL_BLASTABLE) || (wall->type == WALL_DOOR)) {
			if (m_nWall [bSide] < m_mine->GameInfo ().walls.count) {
				theApp.SetModified (TRUE);
				theApp.LockUndo ();
				clipnum = clip_num [m_nClip];
				wall->clip_num = clipnum;
				// define door textures based on clip number
				if (wall->clip_num >= 0)
					m_mine->SetWallTextures (m_nWall [bSide], m_defTexture);
				theApp.UnlockUndo ();
				theApp.MineView ()->Refresh ();
				Refresh ();
				}
			}
		else
			wall->clip_num = -1;
}
Esempio n. 3
0
void CWallTool::OnKey (int i) 
{
GetWalls ();
memset (m_bKeys, 0, sizeof (m_bKeys));
m_bKeys [i] = TRUE;
for (BOOL bSide = FALSE; bSide <= m_bBothSides; bSide++)
	if (m_pWall [bSide]) {
		theApp.SetModified (TRUE);
		m_pWall [bSide]->keys = (1 << i);
		Refresh ();
		}
}
Esempio n. 4
0
void CWallTool::OnFlag (int i) 
{
GetWalls ();
m_bFlags [i] = BtnCtrl (IDC_WALL_BLASTED + i)->GetCheck ();
for (BOOL bSide = FALSE; bSide <= m_bBothSides; bSide++)
	if (m_pWall [bSide]) {
		theApp.SetModified (TRUE);
		if (m_bFlags [i])
			m_pWall [bSide]->flags |= wall_flags [i];
		else
			m_pWall [bSide]->flags &= ~wall_flags [i];
		Refresh ();
		}
}
Esempio n. 5
0
void ReleaseWalledCells (void)
{
	unsigned char MouseX = GetMouseX();
	unsigned char MouseY = GetMouseY();
	unsigned char Walls = GetWalls(MouseX,MouseY);

	/*

	Having reserved all cells around destination, some may be unaccessible as
	there is a wall in the way. If so, cell does not need to be reserved, so
	release that cell.
	*/


	if (MouseY) //North boundary check
	{
		if ( (GetCellReserved(MouseX, MouseY-1)) && (Walls & NORTH) )
		{
			ReleaseCell(MouseX, MouseY-1);						//release north
		}
	}
	if ( MouseX != (MAZEX-1) )	//East boundary check
	{
		if( (GetCellReserved(MouseX+1, MouseY))  && (Walls & EAST) )
		{
			ReleaseCell(MouseX+1, MouseY);						//release east
		}
	}
	if ( MouseY != (MAZEY-1) ) //South boundary check
	{
		if ( (GetCellReserved(MouseX, MouseY+1))  && (Walls & SOUTH) )
		{
			ReleaseCell(MouseX, MouseY+1);						//release south
		}
	}
	if (MouseX)	//West boundary check
	{
		if ( (GetCellReserved(MouseX-1, MouseY))  && (Walls & WEST) )
		{
			ReleaseCell(MouseX-1, MouseY);						//release west
		}
	}
}
Esempio n. 6
0
void CWallTool::OnSetType ()
{
	CDSegment	*seg [2];
	CDSide		*side [2];
	CDWall		*wall;
	INT16			segnum [2], sidenum [2];
	int			nType;

GetWalls ();
nType = CBType ()->GetItemData (CBType ()->GetCurSel ());
if ((nType > WALL_CLOSED) && !file_type) 
	return;
if ((nType > WALL_CLOAKED) && (level_version < 9)) 
	return;

m_defWall.type = m_nType = nType;
/*
m_nWall [0] = CBWallNo ()->GetCurSel ();
m_pWall [0] = m_mine->Walls (m_nWall [0]);
*/
seg [0] = m_mine->CurrSeg ();
side [0] = m_mine->CurrSide ();
segnum [0] = m_mine->Current ()->segment;
sidenum [0] = m_mine->Current ()->side;
if (m_mine->GetOppositeSide (segnum [1], sidenum [1], segnum [0], sidenum [0])) {
	seg [1] = m_mine->Segments (segnum [1]);
	side [1] = seg [1]->sides + sidenum [1];
	}
for (BOOL bSide = FALSE; bSide <= m_bBothSides; bSide++)
	if ((wall = m_pWall [bSide]) && side [bSide]) {
		INT16 nBaseTex  = side [bSide]->nBaseTex;
		INT16 nOvlTex = side [bSide]->nOvlTex;
		m_mine->DefineWall (segnum [bSide], sidenum [bSide], m_nWall [bSide], m_nType, m_pWall [0]->clip_num, -1, true);
		if ((wall->type == WALL_OPEN) || (wall->type == WALL_CLOSED))
			m_mine->SetTexture (wall->segnum, wall->sidenum, nBaseTex, nOvlTex);
//		else if ((wall->type == WALL_CLOAKED) || (wall->type == WALL_TRANSPARENT))
//			wall->cloak_value = m_defWall.cloak_value;
		}
theApp.MineView ()->Refresh ();
Refresh ();
}
Esempio n. 7
0
void CWallTool::OnSetWall ()
{
if (GetWalls ())
	theApp.MineView ()->Refresh ();
Refresh ();
}
Esempio n. 8
0
BOOL CWallTool::OnSetActive ()
{
Refresh ();
GetWalls ();
return CTexToolDlg::OnSetActive ();
}
double
WinnerDownlinkChannelRealization::GetPathLoss (void)
{
    /*
     * Path Loss Model For Indoor Environment.
     * "WINNER II channel models, ver 1.1, Tech Report"
     * PL = A*log10(r) + B + C*log10(fc/5) + X; [r in meters; fc in GHz]
     * I = 128.1 – 2GHz
     * X depends on the number of walls in between
     * FL = 17 + 4 (Nfloors - 1) --- floor loss
     */

    double distance;
    UserEquipment* ue;
    ENodeB* enb;

    assert (GetDestinationNode ()->GetNodeType () == NetworkNode::TYPE_HOME_BASE_STATION  || GetSourceNode ()->GetNodeType () == NetworkNode::TYPE_HOME_BASE_STATION);

    if (GetSourceNode ()->GetNodeType () == NetworkNode::TYPE_UE
            && GetDestinationNode ()->GetNodeType () == NetworkNode::TYPE_HOME_BASE_STATION )
    {
        ue = (UserEquipment*) GetSourceNode ();
        enb = (ENodeB*) GetDestinationNode ();

        distance =  ue->GetMobilityModel ()->GetAbsolutePosition ()->GetDistance (enb->GetMobilityModel ()->GetAbsolutePosition ());
    }

    else if (GetDestinationNode ()->GetNodeType () == NetworkNode::TYPE_UE
             && GetSourceNode ()->GetNodeType () == NetworkNode::TYPE_HOME_BASE_STATION )
    {
        ue = (UserEquipment*) GetDestinationNode ();
        enb = (ENodeB*) GetSourceNode ();

        distance =  ue->GetMobilityModel ()->GetAbsolutePosition ()->GetDistance (enb->GetMobilityModel ()->GetAbsolutePosition ());
    }

    int* nbWalls = GetWalls( (Femtocell*) (enb->GetCell()), ue);

    double A, B, C;
    double ExternalWallsAttenuation = 20.0;
    double InternalWallsAttenuation = 10.0;

    if (nbWalls[0] == 0 && nbWalls[1] == 0)
    {   //LOS
        A = 18.7;
        B = 46.8;
        C = 20.0;
    }
    else
    {   //NLOS
        A = 20.0;
        B = 46.4;
        C = 20.0;
    }

    m_pathLoss = A * log10( distance ) +
                 B +
                 C * log10(2. / 5.0) +
                 InternalWallsAttenuation * nbWalls[1] +
                 ExternalWallsAttenuation * nbWalls[0];

    delete [] nbWalls;
    return m_pathLoss;
}