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

📄 cpselect.cpp

📁 空战游戏flacon源码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
			switch(TEMP_Settings.SAMSkill)
			{
				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();
		}

		sldr=(C_Slider *)win->FindControl(BAR_1_SCROLL);
		if(sldr)
		{
			sldr->Refresh();
			val=((sldr->GetSliderMax()-sldr->GetSliderMin()) * TEMP_Settings.AirForces)/4;
			sldr->SetSliderPos(val+sldr->GetSliderMin());
			sldr->Refresh();
		}
		sldr=(C_Slider *)win->FindControl(BAR_2_SCROLL);
		if(sldr)
		{
			sldr->Refresh();
			val=((sldr->GetSliderMax()-sldr->GetSliderMin()) * TEMP_Settings.AirDefenses)/4;
			sldr->SetSliderPos(val+sldr->GetSliderMin());
			sldr->Refresh();
		}
		sldr=(C_Slider *)win->FindControl(BAR_3_SCROLL);
		if(sldr)
		{
			sldr->Refresh();
			val=((sldr->GetSliderMax()-sldr->GetSliderMin()) * TEMP_Settings.GroundForces)/4;
			sldr->SetSliderPos(val+sldr->GetSliderMin());
			sldr->Refresh();
		}
		sldr=(C_Slider *)win->FindControl(BAR_4_SCROLL);
		if(sldr)
		{
			sldr->Refresh();
			val=((sldr->GetSliderMax()-sldr->GetSliderMin()) * TEMP_Settings.NavalForces)/4;
			sldr->SetSliderPos(val+sldr->GetSliderMin());
			sldr->Refresh();
		}
	}
}

void CopySettingsToTemp (void)
	{
	if(!CampSelMode)
		{
		TEMP_Settings.PilotSkill=static_cast<uchar>(PlayerOptions.CampaignEnemyAirExperience());
		TEMP_Settings.SAMSkill=static_cast<uchar>(PlayerOptions.CampaignEnemyGroundExperience());

		TEMP_Settings.AirForces=static_cast<uchar>(PlayerOptions.CampaignAirRatio());
		TEMP_Settings.AirDefenses=static_cast<uchar>(PlayerOptions.CampaignAirDefenseRatio());
		TEMP_Settings.GroundForces=static_cast<uchar>(PlayerOptions.CampaignGroundRatio());
		TEMP_Settings.NavalForces=static_cast<uchar>(PlayerOptions.CampaignNavalRatio());
		}
	else
		{
		TEMP_Settings.PilotSkill=TheCampaign.EnemyAirExp;
		TEMP_Settings.SAMSkill=TheCampaign.EnemyADExp;

		TEMP_Settings.AirForces=static_cast<uchar>(TheCampaign.AirRatio);
		TEMP_Settings.AirDefenses=static_cast<uchar>(TheCampaign.AirDefenseRatio);
		TEMP_Settings.GroundForces=static_cast<uchar>(TheCampaign.GroundRatio);
		TEMP_Settings.NavalForces=static_cast<uchar>(TheCampaign.NavalRatio);
		}
	}

static void ChallengeLevelCB(long,short hittype,C_Base *control)
{
	if(hittype != C_TYPE_SELECT)
		return;

	switch(((C_ListBox *)control)->GetTextID())
	{
		case ACE_LEVEL:
			TEMP_Settings.Challenge=4;
			TEMP_Settings.PilotSkill=4;
			TEMP_Settings.SAMSkill=4;
			if(!CampSelMode)
			{
				TEMP_Settings.AirForces=0;
				TEMP_Settings.AirDefenses=0;
				TEMP_Settings.GroundForces=0;
				TEMP_Settings.NavalForces=0;
			}
			break;
		case VETERAN_LEVEL:
			TEMP_Settings.Challenge=3;
			TEMP_Settings.PilotSkill=3;
			TEMP_Settings.SAMSkill=3;
			if(!CampSelMode)
			{
				TEMP_Settings.AirForces=1;
				TEMP_Settings.AirDefenses=1;
				TEMP_Settings.GroundForces=1;
				TEMP_Settings.NavalForces=1;
			}
			break;
		case ROOKIE_LEVEL:
			TEMP_Settings.Challenge=2;
			TEMP_Settings.PilotSkill=2;
			TEMP_Settings.SAMSkill=2;
			if(!CampSelMode)
			{
				TEMP_Settings.AirForces=2;
				TEMP_Settings.AirDefenses=2;
				TEMP_Settings.GroundForces=2;
				TEMP_Settings.NavalForces=2;
			}
			break;
		case CADET_LEVEL:
			TEMP_Settings.Challenge=1;
			TEMP_Settings.PilotSkill=1;
			TEMP_Settings.SAMSkill=1;
			if(!CampSelMode)
			{
				TEMP_Settings.AirForces=3;
				TEMP_Settings.AirDefenses=3;
				TEMP_Settings.GroundForces=3;
				TEMP_Settings.NavalForces=3;
			}
			break;
		default:
			TEMP_Settings.Challenge=0;
			TEMP_Settings.PilotSkill=0;
			TEMP_Settings.SAMSkill=0;
			if(!CampSelMode)
			{
				TEMP_Settings.AirForces=4;
				TEMP_Settings.AirDefenses=4;
				TEMP_Settings.GroundForces=4;
				TEMP_Settings.NavalForces=4;
			}
			break;
	}
	SetCampaignLevels();
	CalcChallengeLevel();
}

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

	// Copy in current settings
	CopySettingsToTemp();
	CalcChallengeLevel();
	SetCampaignLevels();

	gMainHandler->EnableWindowGroup(control->GetGroup());
}

void CloseChallengeCB(long ID,short hittype,C_Base *control)
{
	CopySettingsToTemp();
	CloseWindowCB(ID, hittype, control);
}

void CampDelFileCB(long,short hittype,C_Base *control)
{
	C_TreeList *tree;
	C_Window *win;

	if(hittype != C_TYPE_LMOUSEUP)
		return;

	win=gMainHandler->FindWindow(CS_SELECT_WIN);
	if(!win)
		return;

	gMainHandler->HideWindow(control->Parent_); // Close Verify Window

	if(!CheckExclude(gLastCampFilename,FalconCampUserSaveDirectory,CampExcludeList,"cam"))
	{
		DeleteFile(gLastCampFilename);
		gLastCampFilename[0]=0;
	}

	tree=(C_TreeList*)win->FindControl(FILELIST_TREE);
	if(tree)
	{
		tree->DeleteBranch(tree->GetRoot());
		GetFileListTree(tree,"campaign\\save\\*.cam",CampExcludeList,C_TYPE_ITEM,TRUE,0);
		tree->RecalcSize();
		if(tree->Parent_)
			tree->Parent_->RefreshClient(tree->GetClient());
	}
	DisableScenarioInfo();
}

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

	if(gLastCampFilename[0])
		VerifyDelete(0,CampDelFileCB,CloseWindowCB);
}

static void SetSkillSettingsCB(long ID,short hittype,C_Base *control)
{
	uchar value;

	if(hittype != C_TYPE_SELECT)
		return;

	switch(((C_ListBox *)control)->GetTextID())
	{
		case CADET_LEVEL:
			value=1;
			break;
		case ROOKIE_LEVEL:
			value=2;
			break;
		case VETERAN_LEVEL:
			value=3;
			break;
		case ACE_LEVEL:
			value=4;
			break;
		default:
			value=0;
			break;
	}
	switch(ID)
	{
		case PILOT_SKILL:
			TEMP_Settings.PilotSkill=value;
			break;
		case SAM_SKILL:
			TEMP_Settings.SAMSkill=value;
			break;
	}

	CalcChallengeLevel();
}

static void SetSliderSettingsCB(long ID,short hittype,C_Base *control)
{
	long val;
	C_Slider *sldr;

	if(hittype != C_TYPE_MOUSEMOVE)
		return;
	sldr=(C_Slider *)control;

	val  = (sldr->GetSliderPos() - sldr->GetSliderMin())*4;
	val /= (sldr->GetSliderMax() - sldr->GetSliderMin());

	switch(ID)
	{
		case BAR_1_SCROLL:
			if (val != TEMP_Settings.AirForces)
				{
				TEMP_Settings.AirForces=static_cast<uchar>(val);
				// Force the aircraft field to update
				LoadSquadronInfo();
				}
			break;
		case BAR_2_SCROLL:
			TEMP_Settings.AirDefenses=static_cast<uchar>(val);
			break;
		case BAR_3_SCROLL:
			TEMP_Settings.GroundForces=static_cast<uchar>(val);
			break;
		case BAR_4_SCROLL:
			TEMP_Settings.NavalForces=static_cast<uchar>(val);
			break;
		default:
			return;
	}
	CalcChallengeLevel();
}

static void UseChallengeSettingsCB(long,short hittype,C_Base *control)
{
	C_Window *win;
	C_Button *btn;

	if(hittype != C_TYPE_LMOUSEUP)
		return;
	if(CampSelMode != 2)
	{
		PlayerOptions.SetCampEnemyAirExperience(TEMP_Settings.PilotSkill);
		PlayerOptions.SetCampEnemyGroundExperience(TEMP_Settings.SAMSkill);
	}

	if(!CampSelMode)
	{
		PlayerOptions.SetCampAirRatio(TEMP_Settings.AirForces);
		PlayerOptions.SetCampAirDefenseRatio(TEMP_Settings.AirDefenses);
		PlayerOptions.SetCampGroundRatio(TEMP_Settings.GroundForces);
		PlayerOptions.SetCampNavalRatio(TEMP_Settings.NavalForces);
	}
	win=gMainHandler->FindWindow(CS_PUA_WIN);
	if(win)
	{
		btn=(C_Button *)win->FindControl(SET_CHALLENGE);
		if(btn)
		{
			btn->Refresh();
			btn->SetState(TEMP_Settings.Challenge);
			btn->Refresh();
		}
	}
	LoadSquadronInfo();
	gMainHandler->DisableWindowGroup(control->GetGroup());
}

void CopyinTempSettings(void)
	{
	TheCampaign.GroundRatio=TEMP_Settings.GroundForces;
	TheCampaign.AirRatio=TEMP_Settings.AirForces;
	TheCampaign.AirDefenseRatio=TEMP_Settings.AirDefenses;
	TheCampaign.NavalRatio=TEMP_Settings.NavalForces;
	TheCampaign.EnemyAirExp=TEMP_Settings.PilotSkill;
	TheCampaign.EnemyADExp=TEMP_Settings.SAMSkill;
	}

static void HookupCampaignSelectControls(long ID)
{
	C_Window *winme;
	C_Button *ctrl;
	C_ListBox *lb;
	C_Slider *sldr;
	C_TreeList *tree;

	winme=gMainHandler->FindWindow(ID);

	if(winme == NULL)
		return;

	// Hook up IDs here

	// Set Commit Button
	ctrl=(C_Button *)winme->FindControl(SINGLE_COMMIT_CTRL);
	if(ctrl)
		ctrl->SetCallback(CommitCB);

	// Set Commit Button
	ctrl=(C_Button *)winme->FindControl(CS_DELETE);
	if(ctrl)
		ctrl->SetCallback(CampDelVerifyCB);

	ctrl=(C_Button *)winme->FindControl(COMMS_COMMIT_CTRL);
	if(ctrl)
		ctrl->SetCallback(CommsCommitCB);

	// Hook up Close Button
	ctrl=(C_Button *)winme->FindControl(CLOSE_WINDOW);
	if(ctrl)
		ctrl->SetCallback(CloseWindowCB);

	ctrl=(C_Button *)winme->FindControl(SELECT_CLOSE_WINDOW);
	if(ctrl)
		ctrl->SetCallback(CloseSelectWindowCB);

	ctrl=(C_Button *)winme->FindControl(CS_LOAD_SCENARIO1);
	if(ctrl)
		ctrl->SetCallback(SelectScenarioCB);

	ctrl=(C_Button *)winme->FindControl(CS_LOAD_SCENARIO2);
	if(ctrl)
		ctrl->SetCallback(SelectScenarioCB);

	ctrl=(C_Button *)winme->FindControl(CS_LOAD_SCENARIO3);
	if(ctrl)
		ctrl->SetCallback(SelectScenarioCB);

	ctrl=(C_Button *)winme->FindControl(CS_HOST_CTRL);
	if(ctrl)
		ctrl->SetCallback(HostCampaignCB);

	ctrl=(C_Button *)winme->FindControl(CS_NEW_CTRL);
	if(ctrl)
		ctrl->SetCallback(SetCampaignSelectCB);

	ctrl=(C_Button *)winme->FindControl(CS_LOAD_CTRL);
	if(ctrl)
		ctrl->SetCallback(SetCampaignSelectCB);

	ctrl=(C_Button *)winme->FindControl(CS_JOIN_CTRL);
	if(ctrl)
	{
		ctrl->SetCallback(SetCampaignSelectCB);
	}

	lb=(C_ListBox *)winme->FindControl(CHALLENGE_LIST);
	if(lb)
		lb->SetCallback(ChallengeLevelCB);

	lb=(C_ListBox *)winme->FindControl(PILOT_SKILL);
	if(lb)
		lb->SetCallback(SetSkillSettingsCB);

	lb=(C_ListBox *)winme->FindControl(SAM_SKILL);
	if(lb)
		lb->SetCallback(SetSkillSettingsCB);

	ctrl=(C_Button *)winme->FindControl(SET_CHALLENGE);
	if(ctrl)
		ctrl->SetCallback(OpenChallengeCB);

	ctrl=(C_Button *)winme->FindControl(CHALL_OK);
	if(ctrl)
		ctrl->SetCallback(UseChallengeSettingsCB);

	ctrl=(C_Button *)winme->FindControl(CHALL_CANCEL);
	if(ctrl)
		ctrl->SetCallback(CloseChallengeCB);

	sldr=(C_Slider *)winme->FindControl(BAR_1_SCROLL);
	if(sldr)
		sldr->SetCallback(SetSliderSettingsCB);

	sldr=(C_Slider *)winme->FindControl(BAR_2_SCROLL);
	if(sldr)
		sldr->SetCallback(SetSliderSettingsCB);

	sldr=(C_Slider *)winme->FindControl(BAR_3_SCROLL);
	if(sldr)
		sldr->SetCallback(SetSliderSettingsCB);

	sldr=(C_Slider *)winme->FindControl(BAR_4_SCROLL);
	if(sldr)
		sldr->SetCallback(SetSliderSettingsCB);

	ctrl=(C_Button *)winme->FindControl(CS_INFO_CTRL);
	if(ctrl)
		ctrl->SetCallback(InfoButtonCB);

	tree=(C_TreeList *)winme->FindControl(CAMPAIGN_TREE);
	if(tree)
	{
		CampaignGames=tree;
		CampaignGames->SetCallback(CampSelectGameCB);
	}

// Help GUIDE thing
	ctrl=(C_Button*)winme->FindControl(UI_HELP_GUIDE);
	if(ctrl)
		ctrl->SetCallback(UI_Help_Guide_CB);
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////

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

	MonoPrint ("Cancel Join\n");

	gMainHandler->HideWindow(control->Parent_);

	StopCampaignLoad ();
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////

static int
	join_status_bits = 0;

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
/*
static void UpdateJoinStatusWindow (C_Window *win)
{
	short
		x,
		y;

	char
		buffer[10];

	sprintf (buffer, "%08x", join_status_bits);

	x=0; y=0;
	DeleteGroupList(win->GetID());
	AddWordWrapTextToWindow
	(
		win,
		&x,
		&y,
		0,
		win->ClientArea_[1].right-win->ClientArea_[1].left,
		0xe0e0e0,
		buffer,
		1
	);
}
*/
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////

void DisplayJoinStatusWindow (int bits)
{
	static long
		last_id;

	long
		id = 0;//! uninitialized

	C_Window
		*win;

	if ((!gCommsMgr->Online()) || (FalconLocalGame->IsLocal()))
	{
		return;
	}

	if (TheCampaign.IsLoaded ())
	{
		return;
	}

	if (bits == 0)
	{
		join_status_bits = 0;
	}
	else
	{
		join_status_bits |= bits;
	}

	switch (bits)
	{
		case CAMP_GAME_FULL:
			id = TXT_GAME_IS_OVER;
			break;
		case 0:
		case CAMP_NEED_PRELOAD:
			id = TXT_JOIN_STARTING;
			break;
		case CAMP_NEED_ENTITIES:
		case CAMP_NEED_WEATHER:
			id = TXT_JOIN_WEATHER;
			break;
		case CAMP_NEED_PERSIST:
		case CAMP_NEED_OBJ_DELTAS:
			id = TXT_JOIN_OBJECTS;
			break;
		case CAMP_NEED_TEAM_DATA:
		case CAMP_NEED_UNIT_DATA:
		case CAMP_NEED_VC:
		case CAMP_NEED_PRIORITIES:
			id = TXT_JOIN_UNITS;
			break;
	}

	if (id != last_id)
	{
		win=gMainHandler->FindWindow(COMMLINK_WIN);
		if (win)
		{
			gMainHandler->HideWindow (win);
		}

		last_id = id;
	}

	CommsErrorDialog (TXT_JOINING_GAME, id, NULL, JoinStatusCancelCB);
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////

⌨️ 快捷键说明

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