📄 cpselect.cpp
字号:
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 + -