📄 ui_comms.cpp
字号:
win->DisableCluster(3);
win->EnableCluster(1);
win->EnableCluster(2);
win->EnableCluster(4);
win->RefreshWindow();
break;
case game_TacticalEngagement:
case game_Campaign:
win->EnableCluster(1);
win->EnableCluster(2);
win->EnableCluster(3);
win->EnableCluster(4);
win->RefreshWindow();
break;
}
}
item=People->CreateItem(1,C_TYPE_ROOT,txt);
if(item)
People->AddItem(People->GetRoot(),item);
btn=(C_Button*)win->FindControl(CHAT_ALL);
if(btn)
btn->SetState(1);
btn=(C_Button*)win->FindControl(CHAT_TEAM);
if(btn)
btn->SetState(0);
btn=(C_Button*)win->FindControl(CHAT_PACKAGE);
if(btn)
btn->SetState(0);
btn=(C_Button*)win->FindControl(CHAT_FLIGHT);
if(btn)
btn->SetState(0);
btn=(C_Button*)win->FindControl(CHAT_DISCONNECT);
if(btn)
{
if(game == vuPlayerPoolGroup)
btn->SetFlagBitOff(C_BIT_INVISIBLE);
else
btn->SetFlagBitOn(C_BIT_INVISIBLE);
}
PeopleChatType=1;
DeleteGroupList(CHAT_WIN);
CurChatY=0;
}
}
static void CheckPlayerGroup(FalconSessionEntity *session,C_Player *plyr)
{
Flight player,me;
if(session == FalconLocalSession)
{
plyr->SetState(1);
plyr->SetMute(0);
}
else if(PeopleChatType == 1) // CHAT_ALL
{
plyr->SetState(1);
plyr->SetMute(0);
}
else if(PeopleChatType == 2) // CHAT_TEAM
{
if(FalconLocalSession->GetTeam() == session->GetTeam())
{
plyr->SetState(1);
plyr->SetMute(0);
}
else
{
plyr->SetState(0);
plyr->SetMute(1);
}
}
else if(PeopleChatType == 3) // CHAT_PACKAGE (ONLY Campaign & TE)
{
me=(Flight)vuDatabase->Find(FalconLocalSession->GetPlayerFlightID());
player=(Flight)vuDatabase->Find(session->GetPlayerFlightID());
if(me && player)
{
if(me->GetUnitPackage() == player->GetUnitPackage())
{
plyr->SetState(1);
plyr->SetMute(0);
}
else
{
plyr->SetState(0);
plyr->SetMute(1);
}
}
else
{
plyr->SetState(0);
plyr->SetMute(1);
}
}
else if(PeopleChatType == 4) // CHAT_FLIGHT
{
if(FalconLocalSession->GetPlayerFlightID() == session->GetPlayerFlightID() && FalconLocalSession->GetPlayerFlightID() != FalconNullId)
{
plyr->SetState(1);
plyr->SetMute(0);
}
else
{
plyr->SetState(0);
plyr->SetMute(1);
}
}
else // Ignore them
{
plyr->SetState(0);
plyr->SetMute(1);
}
}
void CheckChatFilters(FalconSessionEntity *session)
{
TREELIST *item;
C_Player *player;
if(!People)
return;
item=People->Find(session->Id().creator_);
if(item)
{
player=(C_Player*)item->Item_;
if(player)
{
player->SetName(session->GetPlayerCallsign());
CheckPlayerGroup(session,player);
player->Refresh();
}
}
}
void MutePlayerCB(long,short hittype,C_Base *)
{
C_TreeList *tree;
TREELIST *item;
C_Player *plyr;
if(hittype != C_TYPE_LMOUSEUP)
return;
if(gPopupMgr->GetCallingType() == C_TYPE_CONTROL)
{
tree=(C_TreeList*)gPopupMgr->GetCallingControl();
if(tree)
{
item=tree->GetLastItem();
if(item)
{
plyr=(C_Player *)item->Item_;
if(plyr)
{
if(plyr->GetVUID() != FalconLocalSessionId)
{
if(plyr->GetMute())
plyr->SetMute(0);
else
plyr->SetMute(1);
}
}
}
}
}
gPopupMgr->CloseMenu();
}
void IgnorePlayerCB(long,short hittype,C_Base *)
{
C_TreeList *tree;
TREELIST *item;
C_Player *plyr;
if(hittype != C_TYPE_LMOUSEUP)
return;
if(gPopupMgr->GetCallingType() == C_TYPE_CONTROL)
{
tree=(C_TreeList*)gPopupMgr->GetCallingControl();
if(tree)
{
item=tree->GetLastItem();
if(item)
{
plyr=(C_Player *)item->Item_;
if(plyr)
{
if(plyr->GetVUID() != FalconLocalSession->Id())
{
if(plyr->GetIgnore())
plyr->SetIgnore(0);
else
plyr->SetIgnore(1);
}
}
}
}
}
gPopupMgr->CloseMenu();
}
void UpdateLocalGameTree()
{
TREELIST *player;
C_Text *txt;
VU_ID *tmpID=NULL;
long Age;
_TCHAR buffer[60];
if(!People)
return;
if(!FalconLocalGame)
return;
Age=GetCurrentTime();
if(People->GetRoot())
{
txt=(C_Text*)People->GetRoot()->Item_;
if(txt)
{
tmpID=(VU_ID*)txt->GetUserPtr(_UI95_VU_ID_SLOT_);
if(tmpID)
{
if(FalconLocalGame->Id() != *tmpID)
MakeLocalGameTree(FalconLocalGame);
}
else if((VuGameEntity*)FalconLocalGame != vuPlayerPoolGroup)
MakeLocalGameTree(FalconLocalGame);
}
}
else
MakeLocalGameTree(FalconLocalGame);
if(People->GetRoot())
People->GetRoot()->Item_->SetUserNumber(100,Age);
VuSessionsIterator sessionWalker(FalconLocalGame);
FalconSessionEntity *session;
session = (FalconSessionEntity*)sessionWalker.GetFirst();
while(session)
{
player=StartTreeSearch(session->Id(),People->GetRoot(),People);
if(player == NULL)
{
player=CreatePlayerButton(People,session);
if(player)
{
People->AddItem(People->GetRoot(),player);
if(PeopleChatType == 1)
player->Item_->SetState(1);
else
CheckPlayerGroup(session,(C_Player*)player->Item_);
player->Item_->SetUserNumber(100,Age);
player->Item_->SetMenu(CHAT_POP);
_stprintf(buffer,"%s %s",((C_Player*)player->Item_)->GetName(),gStringMgr->GetString(TXT_JOINED_GAME));
ReceiveChatString(FalconNullId,buffer);
}
}
else
{
player->Item_->SetUserNumber(100,Age);
}
session = (FalconSessionEntity*)sessionWalker.GetNext();
}
People->SetDelCallback(RemoveOldPeopleTreeCB);
People->RemoveOld(100,Age);
People->SetDelCallback(NULL);
People->RecalcSize();
if(People->Parent_)
People->Parent_->RefreshClient(People->GetClient());
}
void RebuildGameTree()
{
_TCHAR *gamename;
FalconGameType gametype;
if(People)
People->Refresh();
if(DogfightGames)
DogfightGames->Refresh();
if(TacticalGames)
TacticalGames->Refresh();
if(CampaignGames)
CampaignGames->Refresh();
if ((gCommsMgr) && (gCommsMgr->Online()))
{
UpdateLocalGameTree(); // Updates Game in Chat window (Current area we are in)
if(DogfightGames)
TrimPlayerTree(DogfightGames,DogfightGames->GetRoot());
if(TacticalGames)
TrimPlayerTree(TacticalGames,TacticalGames->GetRoot());
if(CampaignGames)
TrimPlayerTree(CampaignGames,CampaignGames->GetRoot());
VuDatabaseIterator dbiter;
VuTypeFilter filter(static_cast<unsigned short>(F4GameType+VU_LAST_ENTITY_TYPE));
FalconGameEntity *game;
game = (FalconGameEntity*)dbiter.GetFirst(&filter);
while(game)
{
gametype=game->GetGameType();
gamename=game->GameName();
switch(gametype)
{
case game_Dogfight:
if(DogfightGames)
UpdateGameTreeBranch(gametype,game,DogfightGames,DogfightGames->GetRoot(),FALSE);
break;
case game_TacticalEngagement:
if(TacticalGames)
UpdateGameTreeBranch(gametype,game,TacticalGames,TacticalGames->GetRoot(),FALSE);
break;
case game_Campaign:
if(CampaignGames)
UpdateGameTreeBranch(gametype,game,CampaignGames,CampaignGames->GetRoot(),FALSE);
break;
}
game = (FalconGameEntity*)dbiter.GetNext(&filter);
}
}
else
{
if(People)
People->DeleteBranch(People->GetRoot());
if(DogfightGames)
DogfightGames->DeleteBranch(DogfightGames->GetRoot());
if(TacticalGames)
TacticalGames->DeleteBranch(TacticalGames->GetRoot());
if(CampaignGames)
CampaignGames->DeleteBranch(CampaignGames->GetRoot());
}
if(People)
{
People->RecalcSize();
if(People->Parent_)
People->Parent_->RefreshClient(People->GetClient());
}
if(DogfightGames)
{
DogfightGames->RecalcSize();
if(DogfightGames->Parent_)
DogfightGames->Parent_->RefreshClient(DogfightGames->GetClient());
}
if(TacticalGames)
{
TacticalGames->RecalcSize();
if(TacticalGames->Parent_)
TacticalGames->Parent_->RefreshClient(TacticalGames->GetClient());
}
if(CampaignGames)
{
CampaignGames->RecalcSize();
if(CampaignGames->Parent_)
CampaignGames->Parent_->RefreshClient(CampaignGames->GetClient());
}
}
void RemoveFromTree(C_TreeList *list,VU_ID ID)
{
TREELIST *item;
if(!list || ID == FalconNullId)
return;
item=StartTreeSearch(ID,list->GetRoot(),list);
if(item)
{
list->Refresh();
if(item->Type_ == C_TYPE_MENU)
{
if(item->Child)
list->DeleteBranch(item->Child);
}
list->DeleteItem(item);
list->RecalcSize();
if(list->Parent_)
list->Parent_->RefreshClient(list->GetClient());
}
}
// This function gets called when VU adds messages to my Queue
void UI_UpdateGameList()
{
QUEUEITEM *q;
FalconGameEntity *game;
FalconSessionEntity *session;
TREELIST *gamelist,*player;
C_TreeList *theTree;
FalconGameType gametype;
if(!gUICommsQ)
return;
q=gUICommsQ->Root_;
while(q)
{
switch(q->Type)
{
case _Q_GAME_ADD_:
game=(FalconGameEntity*)vuDatabase->Find(q->GameID);
if(game)
{
gametype=game->GetGameType();
switch(gametype)
{
case game_Dogfight:
theTree=DogfightGames;
break;
case game_TacticalEngagement:
theTree=TacticalGames;
break;
case game_Campaign:
theTree=CampaignGames;
break;
default:
theTree=NULL;
break;
}
if(theTree)
{
// Add to Game's TreeList
UpdateGameTreeBranch(gametype,game,theTree,theTree->GetRoot(),FALSE);
theTree->RecalcSize();
if(theTree->GetParent())
theTree->GetParent()->RefreshClient(theTree->GetClient());
}
}
break;
case _Q_GAME_REMOVE_:
RemoveFromTree(DogfightGames,q->GameID);
RemoveFromTree(TacticalGames,q->GameID);
RemoveFromTree(CampaignGames,q->GameID);
// Remove game from gCommsMgr... if current
if(q->GameID == gCommsMgr->GetTargetGameID())
{
gCommsMgr->LookAtGame(NULL);
ClearDFTeamLists();
}
break;
case _Q_GAME_UPDATE_:
game=(FalconGameEntity*)vuDatabase->Find(q->GameID);
if(game)
{
if(game == FalconLocalGame)
UpdateLocalGameTree();
gametype=game->GetGameType();
switch(gametype)
{
case game_Dogfight:
theTree=DogfightGames;
break;
case game_TacticalEngagement:
theTree=TacticalGames;
break;
case game_Campaign:
theTree=CampaignGames;
break;
default:
theTree=NULL;
break;
}
if(theTree)
{
// Add to Game's TreeList
UpdateGameTreeBranch(gametype,game,theTree,theTree->GetRoot(),FALSE);
theTree->RecalcSize();
if(theTree->GetParent())
theTree->GetParent()->RefreshClient(theTree->GetClient());
}
}
break;
case _Q_SESSION_ADD_:
game=(FalconGameEntity*)vuDatabase->Find(q->GameID);
session=(FalconSessionEntity*)vuDatabase->Find(q->SessionID);
if(game && session)
{
if(game == FalconLocalGame)
UpdateLocalGameTree();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -