📄 general.cpp
字号:
if(session)
_stprintf(Buffer,"[%s]",session->GetPlayerName());
else
{
if (!TheCampaign.MissionEvaluator->GetPilotName(i,PilotName))
{
_stprintf(Buffer,"[%s]",gStringMgr->GetString(TXT_TBD));
}
else
_stprintf(Buffer,"[%s]",PilotName);
}
btn->SetFlagBitOn(C_BIT_ENABLED);
btn->SetAllLabel(gStringMgr->GetText(gStringMgr->AddText(Buffer)));
break;
case AIRCRAFT_DEAD:
btn->SetFlagBitOff(C_BIT_ENABLED);
btn->SetAllLabel(TXT_KIA);
break;
case AIRCRAFT_RTB:
btn->SetFlagBitOff(C_BIT_ENABLED);
btn->SetAllLabel(TXT_RETURNTOBASE);
break;
case AIRCRAFT_MISSING:
btn->SetFlagBitOff(C_BIT_ENABLED);
btn->SetAllLabel(TXT_MIA);
break;
default:
btn->SetFlagBitOff(C_BIT_ENABLED);
btn->SetAllLabel(TXT_RETURNTOBASE);
break;
}
}
}
}
// Get Task string
_tcscpy(Task,MissStr[curpackage->GetMissionRequest()->mission]);
// Get Mission string
if(curflight->GetUnitMission() != AMIS_ABORT)
{
GetMissionTarget(curpackage,curflight,Buffer);
_tcscpy(Mission,Buffer);
// Time on Target (TOT)
_tcscpy(TOT," ");
wp=curflight->GetFirstUnitWP();
while(wp)
{
if(wp->GetWPFlags() & WPF_TARGET)
{
GetTimeString(wp->GetWPArrivalTime(),TOT);
wp=NULL;
}
else
wp=wp->GetNextWP();
}
}
else
{
_tcscpy(Task,gStringMgr->GetString(TXT_RETURN_TO_BASE));
_tcscpy(Mission,gStringMgr->GetString(TXT_MISSION_ABORTED));
_tcscpy(TOT,gStringMgr->GetString(TXT_ABORTED));
}
// Task
txt=(C_Text *)win->FindControl(ROLE_FIELD);
if(txt)
{
txt->SetText(Task);
}
// Mission
txt=(C_Text *)win->FindControl(MISSION_FIELD);
if(txt)
{
txt->SetText(Mission);
}
// TOT
txt=(C_Text *)win->FindControl(TOT_FIELD);
if(txt)
{
txt->SetText(TOT);
}
for(i=1;i<5;i++)
if(i == planecount)
win->UnHideCluster(i);
else
win->HideCluster(i);
win->UnHideCluster(5);
}
else
{
win->HideCluster(1);
win->HideCluster(2);
win->HideCluster(3);
win->HideCluster(4);
txt=(C_Text *)win->FindControl(FLIGHT_LABEL);
if(txt)
{
_tcscpy(Buffer,gStringMgr->GetString(TXT_PLANNING));
txt->SetText(Buffer);
}
_tcscpy(Task,gStringMgr->GetString(TXT_NOT_AVAILABLE));
_tcscpy(Mission,gStringMgr->GetString(TXT_NOT_AVAILABLE));
_tcscpy(TOT,gStringMgr->GetString(TXT_NOT_AVAILABLE));
// Task
txt=(C_Text *)win->FindControl(ROLE_FIELD);
if(txt)
{
txt->SetText(Task);
}
// Mission
txt=(C_Text *)win->FindControl(MISSION_FIELD);
if(txt)
{
txt->SetText(Mission);
}
// TOT
txt=(C_Text *)win->FindControl(TOT_FIELD);
if(txt)
{
txt->SetText(TOT);
}
}
win->RefreshWindow();
UI_Leave(Leave);
}
}
static void MakeBar(C_Line *line,long valueID,long Team)
{
long max=1;
long value=0,w;
switch(valueID)
{
case STAT_1:
value=TeamInfo[Team]->GetCurrentStats()->aircraft;
if(TeamInfo[2]->startStats.aircraft > TeamInfo[6]->startStats.aircraft)
max=TeamInfo[2]->startStats.aircraft;
else
max=TeamInfo[6]->startStats.aircraft;
break;
case STAT_2:
value=TeamInfo[Team]->GetCurrentStats()->airDefenseVehs;
if(TeamInfo[2]->startStats.airDefenseVehs > TeamInfo[6]->startStats.airDefenseVehs)
max=TeamInfo[2]->startStats.airDefenseVehs;
else
max=TeamInfo[6]->startStats.airDefenseVehs;
break;
case STAT_3:
value=TeamInfo[Team]->GetCurrentStats()->groundVehs;
if(TeamInfo[2]->startStats.groundVehs > TeamInfo[6]->startStats.groundVehs)
max=TeamInfo[2]->startStats.groundVehs;
else
max=TeamInfo[6]->startStats.groundVehs;
break;
case STAT_4:
value=TeamInfo[Team]->GetCurrentStats()->ships;
if(TeamInfo[2]->startStats.ships > TeamInfo[6]->startStats.ships)
max=TeamInfo[2]->startStats.ships;
else
max=TeamInfo[6]->startStats.ships;
break;
case STAT_5:
value=TeamInfo[Team]->GetCurrentStats()->supplyLevel;
if(TeamInfo[2]->startStats.supplyLevel > TeamInfo[6]->startStats.supplyLevel)
max=TeamInfo[2]->startStats.supplyLevel;
else
max=TeamInfo[6]->startStats.supplyLevel;
break;
case STAT_6:
value=TeamInfo[Team]->GetCurrentStats()->fuelLevel;
if(TeamInfo[2]->startStats.fuelLevel > TeamInfo[6]->startStats.fuelLevel)
max=TeamInfo[2]->startStats.fuelLevel;
else
max=TeamInfo[6]->startStats.fuelLevel;
break;
case STAT_7:
value=TeamInfo[Team]->GetCurrentStats()->airbases;
if(TeamInfo[2]->startStats.airbases > TeamInfo[6]->startStats.airbases)
max=TeamInfo[2]->startStats.airbases;
else
max=TeamInfo[6]->startStats.airbases;
break;
case STAT_8:
value=TeamInfo[Team]->GetCurrentStats()->aircraft;
if(TeamInfo[2]->startStats.aircraft > TeamInfo[6]->startStats.aircraft)
max=TeamInfo[2]->startStats.aircraft;
else
max=TeamInfo[6]->startStats.aircraft;
break;
case STAT_9:
value=TeamInfo[Team]->GetCurrentStats()->groundVehs;
if(TeamInfo[2]->startStats.groundVehs > TeamInfo[6]->startStats.groundVehs)
max=TeamInfo[2]->startStats.groundVehs;
else
max=TeamInfo[6]->startStats.groundVehs;
break;
}
if(line->GetUserNumber(0) == 0)
{
line->SetUserNumber(0,line->GetX());
line->SetUserNumber(1,line->GetY());
line->SetUserNumber(2,line->GetW());
line->SetUserNumber(3,line->GetH());
}
if(!max)
max=1000000;
w=(line->GetUserNumber(2) * value) / max;
if(w > line->GetUserNumber(2))
w=line->GetUserNumber(2);
line->SetW(w);
line->Parent_->update_ |= C_DRAW_REFRESH;
line->Parent_->SetUpdateRect(line->GetUserNumber(0),line->GetUserNumber(1),
line->GetUserNumber(0)+line->GetUserNumber(2),
line->GetUserNumber(1)+line->GetUserNumber(3),
line->GetFlags(),line->GetClient());
}
_TCHAR *ObjStr[5]= {NULL,NULL,NULL,NULL,NULL};
void UpdateIntel(long ID)
{
C_Window *win;
C_ListBox *lbox;
C_Line *line;
C_Text *txt;
short Team;
short i;
Team=FalconLocalSession->GetTeam();
for(i=0;i<5;i++)
if(ObjStr[i] == NULL)
{
ObjStr[i]=new _TCHAR[256];
memset(ObjStr[i],0,sizeof(_TCHAR)*256);
}
i=static_cast<short>(GetTopPriorityObjectives(Team,ObjStr));
win=gMainHandler->FindWindow(ID);
if(win)
{
if (TeamInfo[Team]->GetOffensiveAirAction()->actionType > AACTION_DCA)
win->UnHideCluster(3);
else
win->HideCluster(3);
lbox=(C_ListBox *)win->FindControl(OFFENSIVE_AIR_TEXT);
if(lbox)
{
lbox->Refresh();
if (TeamInfo[Team] && TeamInfo[Team]->GetOffensiveAirAction()->actionType)
lbox->SetValue(TeamInfo[Team]->GetOffensiveAirAction()->actionType);
else
lbox->SetValue(0);
lbox->Refresh();
}
txt=(C_Text *)win->FindControl(TIME_AIR_OP);
if(txt)
{
txt->Refresh();
if (TeamInfo[Team] && TeamInfo[Team]->GetOffensiveAirAction()->actionType)
{
_TCHAR timeStr[30]={0};
AddTimeToBuffer (TeamInfo[Team]->GetOffensiveAirAction()->actionStartTime, timeStr, FALSE);
// KCK HACK: Can't seem to get this to size right. Remind me to ask Peter about
// this when he gets in
_tcscat(timeStr," ");
txt->SetText(timeStr);
}
else
txt->SetText("");
txt->Refresh();
}
lbox=(C_ListBox *)win->FindControl(POSTURE_TEXT);
if(lbox)
{
if (TeamInfo[Team])
{
lbox->SetValue(TeamInfo[Team]->GetGroundAction()->actionType);
lbox->Refresh();
}
}
if (TeamInfo[Team]->GetGroundAction()->actionType >= GACTION_MINOROFFENSIVE)
{
win->UnHideCluster(2);
win->HideCluster(1);
}
else
{
win->UnHideCluster(1);
win->HideCluster(2);
}
lbox=(C_ListBox *)win->FindControl(OFFENSIVE_GROUND_TEXT);
if(lbox)
{
lbox->Refresh();
if (TeamInfo[Team])
{
lbox->SetValue(TeamInfo[Team]->GetGroundAction()->actionType);
lbox->Refresh();
}
}
txt=(C_Text *)win->FindControl(TIME_GROUND_OP);
if(txt)
{
_TCHAR timeStr[30]={0};
txt->Refresh();
AddTimeToBuffer (TeamInfo[Team]->GetGroundAction()->actionTime, timeStr, FALSE);
// KCK HACK: Can't seem to get this to size right. Remind me to ask Peter about
// this when he gets in
_tcscat(timeStr," ");
txt->SetText(timeStr);
txt->Refresh();
}
lbox=(C_ListBox *)win->FindControl(BAR_1);
if(lbox)
{
line=(C_Line *)win->FindControl(BLUE_BAR_1);
if(line)
MakeBar(line,lbox->GetTextID(),2);
line=(C_Line *)win->FindControl(RED_BAR_1);
if(line)
MakeBar(line,lbox->GetTextID(),6);
}
lbox=(C_ListBox *)win->FindControl(BAR_2);
if(lbox)
{
line=(C_Line *)win->FindControl(BLUE_BAR_2);
if(line)
MakeBar(line,lbox->GetTextID(),2);
line=(C_Line *)win->FindControl(RED_BAR_2);
if(line)
MakeBar(line,lbox->GetTextID(),6);
}
lbox=(C_ListBox *)win->FindControl(BAR_3);
if(lbox)
{
line=(C_Line *)win->FindControl(BLUE_BAR_3);
if(line)
MakeBar(line,lbox->GetTextID(),2);
line=(C_Line *)win->FindControl(RED_BAR_3);
if(line)
MakeBar(line,lbox->GetTextID(),6);
}
lbox=(C_ListBox *)win->FindControl(BAR_4);
if(lbox)
{
line=(C_Line *)win->FindControl(BLUE_BAR_4);
if(line)
MakeBar(line,lbox->GetTextID(),2);
line=(C_Line *)win->FindControl(RED_BAR_4);
if(line)
MakeBar(line,lbox->GetTextID(),6);
}
txt=(C_Text *)win->FindControl(OBJ_1);
if(txt)
{
txt->Refresh();
if(i > 0)
txt->SetText(ObjStr[0]);
else
txt->SetText(" ");
txt->Refresh();
}
txt=(C_Text *)win->FindControl(OBJ_2);
if(txt)
{
txt->Refresh();
if(i > 1)
txt->SetText(ObjStr[1]);
else
txt->SetText(" ");
txt->Refresh();
}
txt=(C_Text *)win->FindControl(OBJ_3);
if(txt)
{
txt->Refresh();
if(i > 2)
txt->SetText(ObjStr[2]);
else
txt->SetText(" ");
txt->Refresh();
}
txt=(C_Text *)win->FindControl(OBJ_4);
if(txt)
{
txt->Refresh();
if(i > 3)
txt->SetText(ObjStr[3]);
else
txt->SetText(" ");
txt->Refresh();
}
txt=(C_Text *)win->FindControl(OBJ_5);
if(txt)
{
txt->Refresh();
if(i > 4)
txt->SetText(ObjStr[4]);
else
txt->SetText(" ");
txt->Refresh();
}
}
}
void UpdateIntelBarCB(long ID,short hittype,C_Base *control)
{
C_Line *line;
C_Window *win;
C_ListBox *lbox;
if(hittype != C_TYPE_SELECT)
return;
lbox=(C_ListBox *)control;
win=control->Parent_;
switch(ID)
{
case BAR_1:
line=(C_Line *)win->FindControl(BLUE_BAR_1);
if(line)
MakeBar(line,lbox->GetTextID(),2);
line=(C_Line *)win->FindControl(RED_BAR_1);
if(line)
MakeBar(line,lbox->GetTextID(),6);
break;
case BAR_2:
line=(C_Line *)win->FindControl(BLUE_BAR_2);
if(line)
MakeBar(line,lbox->GetTextID(),2);
line=(C_Line *)win->FindControl(RED_BAR_2);
if(line)
MakeBar(line,lbox->GetTextID(),6);
break;
case BAR_3:
line=(C_Line *)win->FindControl(BLUE_BAR_3);
if(line)
MakeBar(line,lbox->GetTextID(),2);
line=(C_Line *)win->FindControl(RED_BAR_3);
if(line)
MakeBar(line,lbox->GetTextID(),6);
break;
case BAR_4:
line=(C_Line *)win->FindControl(BLUE_BAR_4);
if(line)
MakeBar(line,lbox->GetTextID(),2);
line=(C_Line *)win->FindControl(RED_BAR_4);
if(line)
MakeBar(line,lbox->GetTextID(),6);
break;
}
}
short AddButtonToWindow(C_Window *,short,short,COLORREF,_TCHAR *)
{
return(0);
}
short AddTextToWindow(C_Window *win,short x,short y,COLORREF color,_TCHAR *str)
{
C_Text *txt;
if(win == NULL || str == NULL)
return(0);
txt=new C_Text;
txt->Setup(C_DONT_CARE,C_TYPE_NORMAL);
txt->SetFixedWidth(_tcsclen(str)+1);
txt->SetText(str);
txt->SetXY(x,y);
txt->SetFGColor(color);
txt->SetFont(win->Font_);
txt->SetUserNumber(_UI95_DELGROUP_SLOT_,_UI95_DELGROUP_ID_);
txt->SetFlagBitOn(C_BIT_LEFT);
win->AddControl(txt);
return(static_cast<short>(txt->GetX()+txt->GetW()));
}
void AddHorizontalLineToWindow(C_Window *win,short *,short *y,short startcol,short endcol,COLORREF,long Client)
{
C_Box
*box;
box = new C_Box;
box->Setup (C_DONT_CARE, 0);
box->SetXYWH (startcol, *y, endcol, 0);
box->SetColor (0x00AD8041);
box->SetClient (static_cast<short>(Client));
box->SetUserNumber(_UI95_DELGROUP_SLOT_,_UI95_DELGROUP_ID_);
win->AddControl (box);
*y += 2;
}
BOOL AddWordWrapTextToWindow(C_Window *win,short *x,short *y,short,short endcol,COLORREF color,_TCHAR *str,long Client)
{
C_Text *txt;
short wrap_w;
BOOL retval;
retval=TRUE;
if(win == NULL || str == NULL)
return(0);
wrap_w=static_cast<short>(max(50,endcol-*x));
if(str)
{
txt=new C_Text;
txt->Setup(C_DONT_CARE,C_TYPE_NORMAL);
txt->SetFixedWidth(_tcsclen(str)+1);
txt->SetXY(*x,*y);
txt->SetW(wrap_w);
txt->SetFGColor(color);
txt->SetFont(win->Font_);
txt->SetUserNumber(_UI95_DELGROUP_SLOT_,_UI95_DELGROUP_ID_);
txt->SetFlagBitOn(C_BIT_LEFT|C_BIT_WORDWRAP);
txt->SetText(str);
txt->SetClient(static_cast<short>(Client));
win->AddControl(txt);
if(gFontList->StrWidth(win->Font_,str) > wrap_w)
{
*y += txt->GetH() - gFontList->GetHeight(win->Font_);
*x += txt->GetW();
}
else
{
*x += gFontList->StrWidth(win->Font_,str);
}
retval=1;
#if 0
wrap=UI_WordWrap(win,str,win->Font_,wrap_w,&status);
if(!status)
retval=status;
while(wrap)
{
wrap_w=endcol-startcol;
txt=new C_Text;
txt->Setup(C_DONT_CARE,C_TYPE_NORMAL);
txt->SetFixedWidth(_tcsclen(wrap)+1);
txt->SetText(wrap);
txt->SetXY(*x,*y);
txt->SetFGColor(color);
txt->SetFont(win->Font_);
txt->SetUserNumber(_UI95_DELGROUP_SLOT_,_UI95_DELGROUP_ID_);
txt->SetFlagBitOn(C_BIT_LEFT);
txt->SetClient(Client);
win->AddControl(txt);
wrap=UI_WordWrap(win,NULL,win->Font_,wrap_w,&status);
if(wrap)
{
*x=startcol;
*y+=gFontList->GetHeight(win->Font_);
}
if(!status)
retval=status;
}
*x=txt->GetX()+txt->GetW();
#endif
}
return(retval);
}
static CampUIEventElement *RetrieveEvent(short num)
{
short i=0;
CampUIEventElement *retval=NULL;
CampUIEventElement *evt;
CampEnterCriticalSection();
evt=TheCampaign.StandardEventQueue;
while(evt && i < num)
{
evt=evt->next;
i++;
}
if(evt)
{
retval=new uieventnode;
memcpy(retval,evt,sizeof(CampUIEventElement));
retval->eventText=new _TCHAR[_tcslen(evt->eventText)+1];
_tcscpy(retval->eventText,evt->eventText);
retval->next=NULL;
}
CampLeaveCriticalSection();
return(retval);
}
void RefreshMapEventList(long winID, long client)
{
CampUIEventElement *evt;
C_Window *win;
C_Text *txt;
C_Blip *blip;
short x,y;
F4CSECTIONHANDLE *Leave;
win=gMainHandler->FindWindow(winID);
if(win)
{
Leave=UI_Enter(win);
evt=RetrieveEvent(0);
if(evt)
{
txt=(C_Text*)win->FindControl(CP_EVENT);
if(txt)
{
txt->Refresh();
txt->SetText(gStringMgr->GetText(gStringMgr->AddText(evt->eventText)));
txt->Refresh();
}
blip=(C_Blip*)win->FindControl(9000000);
if(blip)
{
x=static_cast<short>(evt->x/MAP_RATIO-2);
y=static_cast<short>(170-(evt->y/MAP_RATIO)-2);
blip->AddBlip(x,y,evt->team,evt->time/(VU_TICS_PER_SECOND*60));
blip->Refresh();
}
delete evt->eventText;
delete evt;
win->RefreshClient(client);
}
UI_Leave(Leave);
}
}
void RefreshEventList()
{
CampUIEventElement *evt;
C_Window *win;
C_Text *txt;
_TCHAR buffer[10];
short y,wrap_w,i;
win=gMainHandler->FindWindow(RVNTS_WIN);
if(win)
{
DeleteGroupList(RVNTS_WIN);
wrap_w=static_cast<short>(win->ClientArea_[0].right-win->ClientArea_[0].left - 40);
y=0;
i=0;
evt=RetrieveEvent(i);
while(evt)
{
if(evt->eventText)
{
GetTimeString(evt->time,buffer);
buffer[5] = 0;
txt=new C_Text;
txt->Setup(C_DONT_CARE,C_TYPE_NORMAL);
txt->SetFixedWidth(_tcsclen(buffer)+1);
txt->SetText(buffer);
txt->SetFont(win->Font_);
txt->SetXY(1,y);
txt->SetFGColor(0xe0e0e0);
txt->SetUserNumber(_UI95_DELGROUP_SLOT_,_UI95_DELGROUP_ID_);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -