bool MissionTrySetTile(Mission *m, Vec2i pos, unsigned short tile) { if (pos.x < 0 || pos.x >= m->Size.x || pos.y < 0 || pos.y >= m->Size.y) { return false; } CASSERT(m->Type == MAPTYPE_STATIC, "cannot set tile for map type"); switch (tile) { case MAP_WALL: // Check that there are no incompatible doors if (HasDoorOrientedAt(m, Vec2iNew(pos.x - 1, pos.y), 0) || HasDoorOrientedAt(m, Vec2iNew(pos.x + 1, pos.y), 0) || HasDoorOrientedAt(m, Vec2iNew(pos.x, pos.y - 1), 1) || HasDoorOrientedAt(m, Vec2iNew(pos.x, pos.y + 1), 1)) { // Can't place this wall return false; } break; case MAP_DOOR: { // Check that there is a clear passage through this door int isHClear = IsClear(GetTileAt(m, Vec2iNew(pos.x - 1, pos.y))) && IsClear(GetTileAt(m, Vec2iNew(pos.x + 1, pos.y))); int isVClear = IsClear(GetTileAt(m, Vec2iNew(pos.x, pos.y - 1))) && IsClear(GetTileAt(m, Vec2iNew(pos.x, pos.y + 1))); if (!isHClear && !isVClear) { return false; } // Check that there are no incompatible doors if (HasDoorOrientedAt(m, Vec2iNew(pos.x - 1, pos.y), 0) || HasDoorOrientedAt(m, Vec2iNew(pos.x + 1, pos.y), 0) || HasDoorOrientedAt(m, Vec2iNew(pos.x, pos.y - 1), 1) || HasDoorOrientedAt(m, Vec2iNew(pos.x, pos.y + 1), 1)) { // Can't place this door return false; } } break; } const int idx = pos.y * m->Size.x + pos.x; *(unsigned short *)CArrayGet(&m->u.Static.Tiles, idx) = tile; return true; }
void CClientListCtrl::OnNewClient(WPARAM wParam, LPARAM lParam) { if (!IsClear()) { CString oldclient = wParam ? m_OldDefClient : m_OldCurClient; CString newclient = GET_P4REGPTR()->GetP4Client((BOOL)wParam); CString curclient = GET_P4REGPTR()->GetP4Client(); CString defclient = GET_P4REGPTR()->GetP4Client(TRUE); LV_ITEM lvItem; lvItem.mask = LVIF_IMAGE; lvItem.iSubItem = 0; lvItem.state = lvItem.stateMask = 0; lvItem.iItem = FindInList(oldclient); if(lvItem.iItem > -1) { lvItem.iImage = CP4ViewImageList::GetClientIndex(false, oldclient == defclient); SetItem(&lvItem ); } lvItem.iItem = FindInList(newclient); if(lvItem.iItem > -1) { lvItem.iImage = CP4ViewImageList::GetClientIndex(true, newclient == defclient); SetItem(&lvItem ); } else if (GET_P4REGPTR()->GetClientFilteredFlags()) { int index = FindInListAll(newclient); if (index > -1) { CP4Client * client = new CP4Client; client->Create(m_ListAll.column[CLIENT_NAME].GetAt(index), m_ListAll.column[CLIENT_OWNER].GetAt(index), m_ListAll.column[CLIENT_HOST].GetAt(index), m_ListAll.column[CLIENT_ACCESSDATE].GetAt(index), m_ListAll.column[CLIENT_ROOT].GetAt(index), m_ListAll.column[CLIENT_DESC].GetAt(index)); m_ListAll.column[0].SetAt(index, _T("@@")); // Removes from list of all clients InsertClient(client, GetItemCount(), &curclient, &defclient); ReSort(); } } if (wParam) m_OldDefClient = newclient; else m_OldCurClient = newclient; } }
void CUserListCtrl::OnNewUser(WPARAM wParam, LPARAM lParam) { if (!IsClear()) { CString olduser = wParam ? m_OldDefUser : m_OldCurUser; CString newuser = GET_P4REGPTR()->GetP4User((BOOL)wParam); CString defuser = GET_P4REGPTR()->GetP4User(TRUE); LV_ITEM lvItem; lvItem.mask = LVIF_IMAGE; lvItem.iSubItem = 0; lvItem.state = lvItem.stateMask = 0; lvItem.iItem = FindInList(olduser); if(lvItem.iItem > -1) { lvItem.iImage = CP4ViewImageList::GetUserIndex(false, olduser == defuser); SetItem(&lvItem); } lvItem.iItem = FindInList(newuser); if(lvItem.iItem > -1) { lvItem.iImage = CP4ViewImageList::GetUserIndex(true, newuser == defuser); SetItem(&lvItem); } if (wParam) m_OldDefUser = newuser; else m_OldCurUser = newuser; } ::PostMessage(m_clientWnd, WM_NEWUSER, 0, 0); ::PostMessage(m_branchWnd, WM_NEWUSER, 0, 0); ::PostMessage(m_labelWnd, WM_NEWUSER, 0, 0); }