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

📄 cpselect.cpp

📁 空战游戏flacon源码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
					lb->SetValue(RECRUIT_LEVEL);
					break;
			}
			lb->Refresh();
		}
	}
}

void LoadScenarioInfo()
{
	C_Window *win;
	C_Text *txt;
	C_EditBox *ebox;
	C_Button *btn;
	C_Clock *clk;
	_TCHAR buffer[60];

	CopySettingsToTemp();
	CalcChallengeLevel();

	win=gMainHandler->FindWindow(CS_PUA_WIN);
	if(win)
	{
		ebox=(C_EditBox *)win->FindControl(TITLE_LABEL);
		if(ebox)
		{
			_stprintf(buffer,"%s",gUI_ScenarioName);
			ebox->SetText(buffer);
		}

		// Situation
		txt=(C_Text *)win->FindControl(SIT_FIELD);
		if(txt)
		{
			txt->SetText(SituationStr[TheCampaign.Situation%5]);
		}
		LoadSquadronInfo();
		btn=(C_Button *)win->FindControl(SET_CHALLENGE);
		if(btn)
		{
			btn->Refresh();
			btn->SetState(TEMP_Settings.Challenge);
			btn->Refresh();
		}
	}
	win=gMainHandler->FindWindow(CS_SUA_WIN);
	if(win)
	{
		clk=(C_Clock *)win->FindControl(TIME_ID);
		if(clk)
		{
			clk->SetTime(TheCampaign.CurrentTime / VU_TICS_PER_SECOND);
			clk->Refresh();
		}

	}
	SetupMapWindow();
	AddSquadronsToMap();
	EnableScenarioInfo(4050);
}

void EnableScenarioText(C_Base *control)
{
	C_Window *win;

	win=gMainHandler->FindWindow(CS_PUA_WIN);
	if(win)
	{
		if(control)
		{
			win->HideCluster(control->GetUserNumber(1));
			win->HideCluster(control->GetUserNumber(2));
			win->UnHideCluster(control->GetUserNumber(0));
		}
		else
		{
			win->HideCluster(2);
			win->HideCluster(3);
			win->UnHideCluster(1);
		}
	}
}

void CloseSelectWindowCB(long ID,short hittype,C_Base *control)
{
	if(hittype != C_TYPE_LMOUSEUP)
		return;

	DisableScenarioInfo();
	CloseWindowCB(ID,hittype,control);
}

void SelectScenarioButtons(long ID)
{
	C_Window *win;
	C_Button *btn;
	F4CSECTIONHANDLE *Leave;

	win=gMainHandler->FindWindow(CS_SELECT_WIN);
	if(win)
	{
		Leave=UI_Enter(win);
		btn=(C_Button*)win->FindControl(CS_LOAD_SCENARIO1);
		if(btn)
		{
			if(btn->GetID() == ID)
				btn->SetState(1);
			else
				btn->SetState(0);
			btn->Refresh();
		}
		btn=(C_Button*)win->FindControl(CS_LOAD_SCENARIO2);
		if(btn)
		{
			if(btn->GetID() == ID)
				btn->SetState(1);
			else
				btn->SetState(0);
			btn->Refresh();
		}
		btn=(C_Button*)win->FindControl(CS_LOAD_SCENARIO3);
		if(btn)
		{
			if(btn->GetID() == ID)
				btn->SetState(1);
			else
				btn->SetState(0);
			btn->Refresh();
		}
		UI_Leave(Leave);
	}
}

void SelectScenarioCB(long ID,short hittype,C_Base *control)
{
	int	i;

	if(hittype != C_TYPE_LMOUSEUP)
		return;

	SelectScenarioButtons(ID);

	gLastCampFilename[0]=0;
	switch(ID)
	{
		case CS_LOAD_SCENARIO1:
			strcpy(gUI_CampaignFile,"save0");
			_tcscpy(gUI_ScenarioName,gStringMgr->GetString(TXT_SCENARIO_1));
			break;

		case CS_LOAD_SCENARIO2:
			strcpy(gUI_CampaignFile,"save1");
			_tcscpy(gUI_ScenarioName,gStringMgr->GetString(TXT_SCENARIO_2));
			break;

		case CS_LOAD_SCENARIO3:
			strcpy(gUI_CampaignFile,"save2");
			_tcscpy(gUI_ScenarioName,gStringMgr->GetString(TXT_SCENARIO_3));
			break;
		default:
			return;
	}
	TheCampaign.LoadScenarioStats(game_Campaign, gUI_CampaignFile);
	// Pick the default squadron ID
	gSelectedSquadronID = -1;
	for(i=0; i<TheCampaign.NumAvailSquadrons; i++)
	{
		if (TheCampaign.CampaignSquadronData[i].id == TheCampaign.PlayerSquadronID && (TheCampaign.IsValidSquadron(i) || _IsF16_))
			gSelectedSquadronID = i;
	}
	EnableScenarioText(control);
	LoadScenarioInfo();
	if(control)
	{
		if(control->GetUserNumber(0))
		{
			PlayUIMovie(control->GetUserNumber(100));
		}
	}
}

void RecieveScenarioInfo()
{
	_TCHAR *name;
	int i;
	VuGameEntity * game;
	if(gMainHandler == NULL)
		return;

	// KCK: These really should be a better way to figure out which windows need updating than 
	// checking the flag field of TheCampaign. Doesn't the UI know which window groups are active?
	if (TheCampaign.Flags & CAMP_LIGHT)
		{
		// Do dogfight/IA stuff
		}
	else if (TheCampaign.Flags & CAMP_TACTICAL)
		{
		game=gCommsMgr->GetTargetGame();
		if(game)
		{
			name=game->GameName();
			_tcscpy(gUI_ScenarioName,name);
		}

		gSelectedSquadronID = -1;
		for(i=0; i<TheCampaign.NumAvailSquadrons; i++)
			{
			if (TheCampaign.CampaignSquadronData[i].id == TheCampaign.PlayerSquadronID && (TheCampaign.IsValidSquadron(i) || _IsF16_))
				gSelectedSquadronID = i;
			}
		// Update the campaign selection windows
		create_tactical_scenario_info ();
		}
	else
		{
		game=gCommsMgr->GetTargetGame();
		if(game)
		{
			name=game->GameName();
			_tcscpy(gUI_ScenarioName,name);
		}

		gSelectedSquadronID = -1;
		for(i=0; i<TheCampaign.NumAvailSquadrons; i++)
			{
			if (TheCampaign.CampaignSquadronData[i].id == TheCampaign.PlayerSquadronID && (TheCampaign.IsValidSquadron(i) || _IsF16_))
				gSelectedSquadronID = i;
			}
		// Update the campaign selection windows
		LoadScenarioInfo();
		}
}

static void ReallyCreateCB(void)
{
	// Load a Campaign
	StartCampaignGame(TRUE, game_Campaign);
}

static void ReallyJoinCB(void)
{
	DisplayJoinStatusWindow (0);

	StartCampaignGame(FALSE, game_Campaign);
}

void CancelJoinCB(void)
{
}

static void CommitCB(long,short hittype,C_Base *)
	{
	FalconGameEntity *game=NULL;
	C_EditBox *ebox;
	C_Window *win;

	if(hittype != C_TYPE_LMOUSEUP)
		return;

	if(TheCampaign.NumAvailSquadrons < 1)
		return;

	SetCursor(gCursors[CRSR_WAIT]);
	LoadCampaignWindows();

	if (!TheCampaign.CampaignSquadronData)
		return;

	FalconLocalSession->SetCountry(TheCampaign.CampaignSquadronData[gSelectedSquadronID].country);
	gPlayerSquadronId = TheCampaign.CampaignSquadronData[gSelectedSquadronID].id;

	if(CampSelMode != 2)
	{
		if(gCommsMgr->Online())
			SetupInfoWindow(ReallyCreateCB,CancelJoinCB);
		else
			ReallyCreateCB();
	}
	else
	{
		// Join a Campaign
		game=(FalconGameEntity*)gCommsMgr->GetTargetGame();
		if(!game)
			return;
		if(game != FalconLocalGame)
			{
			win=gMainHandler->FindWindow(INFO_WIN);
			if(win)
				{
				ebox=(C_EditBox*)win->FindControl(INFO_PASSWORD);
				if(ebox)
					{
//					if(!PlayerOptions.InCompliance(game->GetRules()) || !game->CheckPassword(ebox->GetText()))
//						{
						SetupInfoWindow(ReallyJoinCB,CancelJoinCB);
//						}
//					else
//						ReallyJoinCB();
					}
				}
			}
		else
			ReallyJoinCB();
	}
}

static void CommsCommitCB(long ID,short hittype,C_Base *control)
{
	if(hittype != C_TYPE_LMOUSEUP)
		return;

	if(TheCampaign.NumAvailSquadrons < 1)
		return;

	if(!gCommsMgr->Online())
		return;

	CommitCB(ID,hittype,control); // Do rest of NORMAL Commit button
}

static void PickAirbaseCB(long,short,C_Base *control)
{
	gSelectedSquadronID=-1;
	SetupMapSquadronWindow(control->GetX(),control->GetY());
}

static void PickSquadronCB(long ID,short,C_Base *)
{
	gSelectedSquadronID=ID-1;
	LoadSquadronInfo();
}

static void HostCampaignCB(long,short hittype,C_Base *)
{
	if(hittype != C_TYPE_LMOUSEUP)
		return;
}

static void LoadCampaignFileCB(long,short hittype,C_Base *control)
{
	C_TreeList *tree;
	TREELIST *item;
	C_Button   *btn;

	int	i;
	if(hittype != C_TYPE_LMOUSEUP)
		return;

	tree=(C_TreeList*)control;
	if(tree)
	{
		item=tree->GetLastItem();
		if(item)
		{
			btn=(C_Button*)item->Item_;

			if(btn)
			{
				tree->SetAllControlStates(0,tree->GetRoot());
				btn->SetState(1);
				tree->Refresh();
				_tcscpy(gUI_CampaignFile,btn->GetText(C_STATE_0));
				_stprintf(gLastCampFilename,"%s\\%s.cam",FalconCampUserSaveDirectory,gUI_CampaignFile);
				TheCampaign.LoadScenarioStats(game_Campaign, gUI_CampaignFile);
				// Pick the last selected squadron
				for(i=0;i<TheCampaign.NumAvailSquadrons;i++)
					{
					if (TheCampaign.CampaignSquadronData[i].id == TheCampaign.PlayerSquadronID)
						gSelectedSquadronID = i;
					}
				_tcscpy(gUI_ScenarioName,TheCampaign.SaveFile);
				LoadScenarioInfo();
			}
		}
	}
}

void SetCampaignSelectCB(long ID,short hittype,C_Base *control)
{
	C_Window *win;
	C_Slider *sldr;
	C_TreeList *tree;

	if(hittype != C_TYPE_LMOUSEUP)
		return;

	switch(ID)
	{
		case CS_NEW_CTRL:
			if(!CampSelMode)
				return;
			break;
		case CS_LOAD_CTRL:
			if(CampSelMode == 1)
				return;
			break;
		case CS_JOIN_CTRL:
			if(CampSelMode == 2)
				return;
			break;
	}

	SelectScenarioButtons(0); // Unselect any Scenario

	DisableScenarioInfo();
	if(control->Parent_)
	{
		control->Parent_->UnHideCluster(control->GetUserNumber(0));
		control->Parent_->HideCluster(control->GetUserNumber(1));
		control->Parent_->HideCluster(control->GetUserNumber(2));
	}
	control->Parent_->RefreshWindow();
	gLastCampFilename[0]=0;
	switch(ID)
	{
		case CS_NEW_CTRL:
			CampSelMode=0;
			break;
		case CS_LOAD_CTRL:
			CampSelMode=1;
			tree=(C_TreeList*)control->Parent_->FindControl(FILELIST_TREE);
			if(tree)
			{
				tree->DeleteBranch(tree->GetRoot());
				tree->SetUserNumber(0,1);
				tree->SetSortType(TREE_SORT_CALLBACK);
				tree->SetSortCallback(FileNameSortCB);
				tree->SetCallback(LoadCampaignFileCB);
				GetFileListTree(tree,"campaign\\save\\*.cam",CampExcludeList,C_TYPE_ITEM,TRUE,0);
				tree->RecalcSize();
				if(tree->Parent_)
					tree->Parent_->RefreshClient(tree->GetClient());
			}
			break;
		case CS_JOIN_CTRL:
			CampSelMode=2;
			if(!gCommsMgr->Online())
			{
				win=gMainHandler->FindWindow(PB_WIN);
				if(win)
					gMainHandler->EnableWindowGroup(win->GetGroup());
			}
			break;
	}
	win=gMainHandler->FindWindow(CHALLENGE_WIN);
	if(win)
	{
		sldr=(C_Slider *)win->FindControl(BAR_1_SCROLL);
		if(sldr)
		{
			if(CampSelMode)
				sldr->SetFlagBitOff(C_BIT_ENABLED);
			else
				sldr->SetFlagBitOn(C_BIT_ENABLED);
		}
		sldr=(C_Slider *)win->FindControl(BAR_2_SCROLL);
		if(sldr)
		{
			if(CampSelMode)
				sldr->SetFlagBitOff(C_BIT_ENABLED);
			else
				sldr->SetFlagBitOn(C_BIT_ENABLED);
		}
		sldr=(C_Slider *)win->FindControl(BAR_3_SCROLL);
		if(sldr)
		{
			if(CampSelMode)
				sldr->SetFlagBitOff(C_BIT_ENABLED);
			else
				sldr->SetFlagBitOn(C_BIT_ENABLED);
		}
		sldr=(C_Slider *)win->FindControl(BAR_4_SCROLL);
		if(sldr)
		{
			if(CampSelMode)
				sldr->SetFlagBitOff(C_BIT_ENABLED);
			else
				sldr->SetFlagBitOn(C_BIT_ENABLED);
		}
	}
}

// ONLY use this as a Tree Callback... or it will CRASH Badly!!!
static void CampSelectGameCB(long,short hittype,C_Base *control)
{
	VU_ID *tmpID;
	FalconGameEntity *game;
	TREELIST *item;

	if(hittype != C_TYPE_LMOUSEUP)
		return;

	SetCursor(gCursors[CRSR_WAIT]);
	item=((C_TreeList *)control)->GetLastItem();
	if(item == NULL) return;
	if(item->Item_ == NULL) return;

	if(item->Type_ == C_TYPE_MENU)
	{
		if(!item->Item_->GetState())
		{
			item->Item_->SetState(1);
			item->Item_->Refresh();
			tmpID=(VU_ID *)item->Item_->GetUserPtr(_UI95_VU_ID_SLOT_);
			if(tmpID)
			{
				game = (FalconGameEntity*) vuDatabase->Find(*tmpID);
				gCommsMgr->LookAtGame(game);
				if (game)
				{
					if(game->GetGameType() == game_Campaign)
						SendMessage(gMainHandler->GetAppWnd(),FM_JOIN_CAMPAIGN,JOIN_PRELOAD_ONLY,game_Campaign);
				}
			}
		}
		else
		{
			item->Item_->SetState(0);
			item->Item_->Refresh();
			gCommsMgr->LookAtGame(NULL);
			DisableScenarioInfo();
		}
	}
	//SetCursor(gCursors[CRSR_F16]);
}

static void SetCampaignLevels()
{
	C_Window *win;
	C_Slider *sldr;
	C_ListBox *lb;
	long val;

	win=gMainHandler->FindWindow(CHALLENGE_WIN);
	if(win)
	{
		lb=(C_ListBox *)win->FindControl(CHALLENGE_LIST);
		if(lb)
		{
			lb->Refresh();
			switch(TEMP_Settings.Challenge)
			{
				case 1:
					lb->SetValue(CADET_LEVEL);
					break;
				case 2:
					lb->SetValue(ROOKIE_LEVEL);
					break;
				case 3:
					lb->SetValue(VETERAN_LEVEL);
					break;
				case 4:
					lb->SetValue(ACE_LEVEL);
					break;
				default:
					lb->SetValue(RECRUIT_LEVEL);
					break;
			}
			lb->Refresh();
		}
		lb=(C_ListBox *)win->FindControl(PILOT_SKILL);
		if(lb)
		{
			lb->Refresh();
			switch(TEMP_Settings.PilotSkill)
			{
				case 1:
					lb->SetValue(CADET_LEVEL);
					break;
				case 2:
					lb->SetValue(ROOKIE_LEVEL);
					break;
				case 3:
					lb->SetValue(VETERAN_LEVEL);
					break;
				case 4:
					lb->SetValue(ACE_LEVEL);
					break;
				default:
					lb->SetValue(RECRUIT_LEVEL);
					break;
			}
			lb->Refresh();
		}
		lb=(C_ListBox *)win->FindControl(SAM_SKILL);
		if(lb)
		{
			lb->Refresh();

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -