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 (); } }
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; }
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 (); } }
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 (); } }
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 } } }
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 (); }
void CWallTool::OnSetWall () { if (GetWalls ()) theApp.MineView ()->Refresh (); Refresh (); }
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; }