⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ui_comms.cpp

📁 空战游戏flacon源码
💻 CPP
📖 第 1 页 / 共 4 页
字号:
					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 + -