📄 instant.cpp
字号:
if(btn->GetState())
InstantActionSettings.PilotLevel=_PILOT_LEVEL_VETERAN_;
}
btn=(C_Button *)win->FindControl(IA_LVL_ACE_CTRL);
if(btn)
{
if(btn->GetState())
InstantActionSettings.PilotLevel=_PILOT_LEVEL_ACE_;
}
InstantActionSettings.SamSites=_NO_SAM_SITES_;
btn=(C_Button *)win->FindControl(IA_AD_SAMS_CTRL);
if(btn)
{
if(btn->GetState())
InstantActionSettings.SamSites=_SAM_SITES_;
}
InstantActionSettings.AAASites=_NO_AAA_SITES_;
btn=(C_Button *)win->FindControl(IA_AD_AAA_CTRL);
if(btn)
{
if(btn->GetState())
InstantActionSettings.AAASites=_AAA_SITES_;
}
}
win=gMainHandler->FindWindow(IA_MAP_WIN);
if(win)
{
crsr=(C_Cursor *)win->FindControl(IA_MAP_CURSOR);
if(crsr)
{
XPos=(float)(crsr->GetX()+crsr->GetW()/2-crsr->MinX_) * 4096.0f / (float)(crsr->MaxX_-crsr->MinX_)*256.0f;
YPos=(float)((crsr->MaxY_-crsr->MinY_) - (crsr->GetY()+crsr->GetH()/2-crsr->MinY_)) * 4096.0f / (float)(crsr->MaxY_-crsr->MinY_)*256.0f;
instant_action::set_start_position (YPos*FEET_PER_KM/1000.0f, XPos*FEET_PER_KM/1000.0f);
}
}
win=gMainHandler->FindWindow(IA_SUA);
if(win)
{
clk=(C_Clock*)win->FindControl(TIME_ID);
if(clk)
instant_action::set_start_time (clk->GetTime());
else
instant_action::set_start_time (static_cast<long>(12.0F * 60.0F * 60.0F));
}
ShiAssert(!TheCampaign.IsLoaded());
// Load a campaign here
strcpy(gUI_CampaignFile,"Instant");
ShiAssert(gameCompressionRatio == 0);
TheCampaign.SetOnlineStatus( 0 );
TheCampaign.LoadCampaign(game_InstantAction, gUI_CampaignFile);
instant_action::set_start_wave (InstantActionSettings.PilotLevel);
instant_action::create_player_flight ();
PostMessage(gMainHandler->GetAppWnd(),FM_START_INSTANTACTION,0,0);
}
static void InsertScoreCB(long,short hittype,C_Base *)
{
C_Window *win;
int i,j,idx;
C_EditBox *ebox;
C_Text *txt;
_TCHAR buf[MAX_NAME_LENGTH+1];
if(hittype != C_TYPE_LMOUSEUP)
return;
i=0;
while(i < MAX_SCORES && TotalScore <= Scores.Scores[i].Score && Scores.Scores[i].Name[0] != 0)
i++;
idx=MAX_SCORES;
if(i < MAX_SCORES)
{
for(j=MAX_SCORES-2;j>=i;j--)
{
memset(Scores.Scores[j+1].Name,0,sizeof(_TCHAR)*MAX_NAME_LENGTH);
_tcscpy(Scores.Scores[j+1].Name,Scores.Scores[j].Name);
Scores.Scores[j+1].Score=Scores.Scores[j].Score;
}
idx=i;
memset(Scores.Scores[i].Name,0,sizeof(_TCHAR)*MAX_NAME_LENGTH);
Scores.Scores[i].Name[0]=' ';
Scores.Scores[i].Score=TotalScore;
ebox=NULL;
win=gMainHandler->FindWindow(IA_HS_WIN);
if(win)
{
ebox=(C_EditBox *)win->FindControl(IA_HS_NAME_EDIT);
win->SetControl(0);
gMainHandler->DisableWindowGroup(win->GetGroup());
}
if(ebox)
{
_tcsncpy(Scores.Scores[i].Name,ebox->GetText(),MAX_NAME_LENGTH);
if(!Scores.Scores[i].Name[0])
{
Scores.Scores[i].Name[0]=' ';
Scores.Scores[i].Name[1]=0;
}
}
else
{
Scores.Scores[i].Name[0]=' ';
Scores.Scores[i].Name[1]=0;
}
win=gMainHandler->FindWindow(IA_SH_WIN);
if(win)
{
for(i=0;i<MAX_SCORES;i++)
{
if(Scores.Scores[i].Name[0] != 0)
{
// Set Name
txt=(C_Text *)win->FindControl(TEXT_1+i*2);
if(txt)
{
txt->SetText(Scores.Scores[i].Name);
if(i == idx)
txt->SetFGColor(0x00ff00);
else
txt->SetFGColor(0xffffff);
}
// Set Score
txt=(C_Text *)win->FindControl(TEXT_1+i*2+1);
if(txt)
{
_stprintf(buf,"%1ld",Scores.Scores[i].Score);
txt->SetText(AddCommas(buf));
if(i == idx)
txt->SetFGColor(0x00ff00);
else
txt->SetFGColor(0xffffff);
}
}
}
}
win->RefreshWindow();
SaveHighScores();
}
win=gMainHandler->FindWindow(IA_DBRF_WIN);
if(win)
gMainHandler->EnableWindowGroup(win->GetGroup());
}
static void HighScoreKeyboardCB(long ID,short DKKey,C_Base *control)
{
if(DKKey == DIK_RETURN)
InsertScoreCB(ID,C_TYPE_LMOUSEUP,control);
}
void ChangeTimeCB(long,short hittype,C_Base *control)
{
C_Clock *clk;
short dir=0;
long value,flag;
if(hittype != C_TYPE_LMOUSEUP && hittype != C_TYPE_REPEAT)
return;
dir=static_cast<short>(control->GetUserNumber(1));
clk=(C_Clock*)control->Parent_->FindControl(control->GetUserNumber(0));
if(clk)
{
flag=0;
if(clk->GetCurrentCtrl())
{
value=clk->GetLast()+dir;
if(value < clk->GetCurrentCtrl()->GetMinInteger())
{
value=clk->GetCurrentCtrl()->GetMaxInteger();
flag=clk->GetCurrentCtrl()->GetID();
}
else if(value > clk->GetCurrentCtrl()->GetMaxInteger())
{
value=clk->GetCurrentCtrl()->GetMinInteger();
flag=clk->GetCurrentCtrl()->GetID();
}
clk->SetLast(value);
}
else
{
value=clk->GetSecond()+dir;
if(value < clk->GetSecondCtrl()->GetMinInteger())
{
value=clk->GetSecondCtrl()->GetMaxInteger();
flag=clk->GetSecondCtrl()->GetID();
}
else if(value > clk->GetSecondCtrl()->GetMaxInteger())
{
value=clk->GetSecondCtrl()->GetMinInteger();
flag=clk->GetSecondCtrl()->GetID();
}
clk->SetSecond(value);
}
if(flag)
{
if(flag == 4)
{
flag=0;
value=clk->GetMinute()+dir;
if(value < clk->GetMinuteCtrl()->GetMinInteger())
{
value=clk->GetMinuteCtrl()->GetMaxInteger();
flag=clk->GetMinuteCtrl()->GetID();
}
else if(value > clk->GetMinuteCtrl()->GetMaxInteger())
{
value=clk->GetMinuteCtrl()->GetMinInteger();
flag=clk->GetMinuteCtrl()->GetID();
}
clk->SetMinute(value);
}
if(flag == 3)
{
flag=0;
value=clk->GetHour()+dir;
if(value < clk->GetHourCtrl()->GetMinInteger())
{
value=clk->GetHourCtrl()->GetMaxInteger();
flag=clk->GetHourCtrl()->GetID();
}
else if(value > clk->GetHourCtrl()->GetMaxInteger())
{
value=clk->GetHourCtrl()->GetMinInteger();
flag=clk->GetHourCtrl()->GetID();
}
clk->SetHour(value);
}
if(flag == 2)
{
if(clk->GetDayCtrl())
{
flag=0;
value=clk->GetDay()+dir;
if(value < clk->GetDayCtrl()->GetMinInteger()-1)
{
value=clk->GetDayCtrl()->GetMaxInteger()-1;
flag=clk->GetDayCtrl()->GetID();
}
else if(value > clk->GetDayCtrl()->GetMaxInteger()-1)
{
value=clk->GetDayCtrl()->GetMinInteger()-1;
flag=clk->GetDayCtrl()->GetID();
}
clk->SetDay(value);
}
}
}
clk->Refresh();
}
}
static void HookupIAControls(long ID)
{
C_Window *winme;
C_Button *ctrl;
C_EditBox *ebox;
C_Clock *clk;
winme=gMainHandler->FindWindow(ID);
if(winme == NULL)
return;
// Hook up IDs here
// Time/Date CB
clk=(C_Clock *)winme->FindControl(TIME_ID);
if(clk)
{
clk->SetHour(12);
clk->SetMinute(0);
clk->SetSecond(0);
clk->Refresh();
}
// Hook up Instant Action Buttons
// Set Fly Button for IA
ctrl=(C_Button *)winme->FindControl(SINGLE_FLY_CTRL);
if(ctrl)
ctrl->SetCallback(InstantActionFlyCB);
ctrl=(C_Button *)winme->FindControl(MUNITIONS_BUTTON);
if(ctrl)
ctrl->SetCallback(OpenIAMunitionsCB);
// editbox for high score callback
ebox=(C_EditBox *)winme->FindControl(IA_HS_NAME_EDIT);
if(ebox)
{
ebox->SetCallback(HighScoreKeyboardCB);
if(!*ebox->GetText())
{
ebox->SetText(UI_logbk.Name());
}
}
// Hook up Close Button
ctrl=(C_Button *)winme->FindControl(CLOSE_WINDOW);
if(ctrl)
ctrl->SetCallback(CloseWindowCB);
ctrl=(C_Button *)winme->FindControl(TIME_EARLIER);
if(ctrl)
ctrl->SetCallback(ChangeTimeCB);
ctrl=(C_Button *)winme->FindControl(TIME_LATER);
if(ctrl)
ctrl->SetCallback(ChangeTimeCB);
// Help GUIDE thing
ctrl=(C_Button*)winme->FindControl(UI_HELP_GUIDE);
if(ctrl)
ctrl->SetCallback(UI_Help_Guide_CB);
}
static void SetIAStartup(C_Window *win)
{
C_Button *btn;
btn=(C_Button *)win->FindControl(IA_MIS_FTR_CTRL);
if(btn)
{
if(InstantActionSettings.MissionType == _MISSION_AIR_TO_AIR_)
btn->SetState(1);
else
btn->SetState(0);
btn->Refresh();
}
btn=(C_Button *)win->FindControl(IA_MIS_MUD_CTRL);
if(btn)
{
if(InstantActionSettings.MissionType == _MISSION_AIR_TO_GROUND_)
btn->SetState(1);
else
btn->SetState(0);
btn->Refresh();
}
btn=(C_Button *)win->FindControl(IA_LVL_NOVICE_CTRL);
if(btn)
{
if(InstantActionSettings.PilotLevel == _PILOT_LEVEL_NOVICE_)
btn->SetState(1);
else
btn->SetState(0);
btn->Refresh();
}
btn=(C_Button *)win->FindControl(IA_LVL_CADET_CTRL);
if(btn)
{
if(InstantActionSettings.PilotLevel == _PILOT_LEVEL_CADET_)
btn->SetState(1);
else
btn->SetState(0);
btn->Refresh();
}
btn=(C_Button *)win->FindControl(IA_LVL_ROOKIE_CTRL);
if(btn)
{
if(InstantActionSettings.PilotLevel == _PILOT_LEVEL_ROOKIE_)
btn->SetState(1);
else
btn->SetState(0);
btn->Refresh();
}
btn=(C_Button *)win->FindControl(IA_LVL_VETERAN_CTRL);
if(btn)
{
if(InstantActionSettings.PilotLevel == _PILOT_LEVEL_VETERAN_)
btn->SetState(1);
else
btn->SetState(0);
btn->Refresh();
}
btn=(C_Button *)win->FindControl(IA_LVL_ACE_CTRL);
if(btn)
{
if(InstantActionSettings.PilotLevel == _PILOT_LEVEL_ACE_)
btn->SetState(1);
else
btn->SetState(0);
btn->Refresh();
}
btn=(C_Button *)win->FindControl(IA_AD_SAMS_CTRL);
if(btn)
{
if(InstantActionSettings.SamSites == _SAM_SITES_)
btn->SetState(1);
else
btn->SetState(0);
btn->Refresh();
}
btn=(C_Button *)win->FindControl(IA_AD_AAA_CTRL);
if(btn)
{
if(InstantActionSettings.AAASites == _AAA_SITES_)
btn->SetState(1);
else
btn->SetState(0);
btn->Refresh();
}
}
static void SetMapStartup(C_Window *win)
{
C_Cursor *crsr;
float XPos,YPos, start_x, start_y;
crsr=(C_Cursor *)win->FindControl(IA_MAP_CURSOR);
if(crsr)
{
instant_action::get_start_position (start_x, start_y);
XPos=start_y/(FEET_PER_KM/1000.0f*4096.0f*256.0f);
XPos*=((float)(crsr->MaxX_-crsr->MinX_));
YPos=1.0f-(start_x/(FEET_PER_KM/1000.0f*4096.0f*256.0f));
YPos*=((float)(crsr->MaxY_-crsr->MinY_));
XPos-=crsr->GetW()/2;
YPos-=crsr->GetH()/2;
if(XPos < 0.0f)
XPos=0.0f;
if(XPos > (float)(win->ClientArea_[0].right-crsr->GetW()))
XPos=(float)win->ClientArea_[0].right-crsr->GetW();
if(YPos < 0.0f)
YPos=0.0f;
if(YPos > (float)(win->ClientArea_[0].bottom-crsr->GetH()))
YPos=(float)win->ClientArea_[0].bottom-crsr->GetH();
crsr->SetXY((int)XPos+crsr->MinX_,(int)YPos+crsr->MinY_);
win->RefreshWindow();
}
}
/*
for(y=0;y<EVT_MESSAGE_BITS;y++)
mask[y]=0;
mask[WeaponFireMsg >> 3] |= 0x01 << (WeaponFireMsg & 0x0007);
mask[DeathMessage >> 3] |= 0x01 << (DeathMessage & 0x0007);
mask[DamageMsg >> 3] |= 0x01 << (DamageMsg & 0x0007);
mask[MissileEndMsg >> 3] |= 0x01 << (MissileEndMsg & 0x0007);
mask[LandingMessage >> 3] |= 0x01 << (LandingMessage & 0x0007);
mask[EjectMsg >> 3] |= 0x01 << (EjectMsg & 0x0007);
mask[PlayerStatusMsg >> 3] |= 0x01 << (PlayerStatusMsg & 0x0007);
*/
static void ProcessKills(C_Window *win)
{
int y,fh;
C_Text *txt;
_TCHAR buffer[100];
kill_list *cur;
long UseFont;
y=0;
UseFont=win->Font_;
fh=gFontList->GetHeight(UseFont);
if(AircraftKills)
{
cur=AircraftKills;
while(cur)
{
_stprintf(buffer,"%s",GetClassName (cur->id));
txt=new C_Text;
txt->Setup(C_DONT_CARE,C_TYPE_LEFT);
txt->SetText(buffer);
txt->SetXY(20,y);
txt->SetFGColor(0xf0f0f0);
txt->SetFont(UseFont);
txt->SetFlagBitOn(C_BIT_LEFT);
txt->SetClient(2);
win->AddControl(txt);
_stprintf(buffer,"(%1d)",cur->num);
txt=new C_Text;
txt->Setup(C_DONT_CARE,C_TYPE_LEFT);
txt->SetFixedWidth(_tcsclen(buffer)+1);
txt->SetText(buffer);
txt->SetXY(130,y);
txt->SetFGColor(0xf0f0f0);
txt->SetFont(UseFont);
txt->SetFlagBitOn(C_BIT_LEFT);
txt->SetClient(2);
win->AddControl(txt);
_stprintf(buffer,"%1ld",cur->points);
AddCommas(buffer);
txt=new C_Text;
txt->Setup(C_DONT_CARE,C_TYPE_RIGHT);
txt->SetFixedWidth(_tcsclen(buffer)+1);
txt->SetText(buffer);
txt->SetXY(215,y);
txt->SetFGColor(0x00ff00);
txt->SetFont(UseFont);
txt->SetFlagBitOn(C_BIT_RIGHT);
txt->SetClient(2);
win->AddControl(txt);
TotalScore+=cur->points;
y+=fh;
cur=cur->next;
}
RemoveAircraftKillsList();
}
if(ObjectKills)
{
cur=ObjectKills;
while(cur)
{
_stprintf(buffer,"%s",GetClassName (cur->id));
txt=new C_Text;
txt->Setup(C_DONT_CARE,C_TYPE_LEFT);
txt->SetText(buffer);
txt->SetXY(20,y);
txt->SetFGColor(0xf0f0f0);
txt->SetFont(UseFont);
txt->SetFlagBitOn(C_BIT_LEFT);
txt->SetClient(2);
win->AddControl(txt);
_stprintf(buffer,"(%1d)",cur->num);
txt=new C_Text;
txt->Setup(C_DONT_CARE,C_TYPE_LEFT);
txt->SetFixedWidth(_tcsclen(buffer)+1);
txt->SetText(buffer);
txt->SetXY(130,y);
txt->SetFGColor(0xf0f0f0);
txt->SetFont(UseFont);
txt->SetFlagBitOn(C_BIT_LEFT);
txt->SetClient(2);
win->AddControl(txt);
_stprintf(buffer,"%1ld",cur->points);
AddCommas(buffer);
txt=new C_Text;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -