📄 te_team_victory.cpp
字号:
lbox->SetItemFlags(vt_intercept,C_BIT_ENABLED);
lbox->SetValue(vt_intercept);
lbox->SetFlagBitOff(C_BIT_INVISIBLE);
if(vc->get_type() != vt_intercept)
vc->set_type(vt_intercept);
}
else if(ent->IsBattalion())
{
lbox->SetItemFlags(vt_occupy,C_BIT_INVISIBLE);
lbox->SetItemFlags(vt_destroy,C_BIT_INVISIBLE);
lbox->SetItemFlags(vt_degrade,C_BIT_INVISIBLE);
lbox->SetItemFlags(vt_intercept,C_BIT_INVISIBLE);
lbox->SetItemFlags(vt_attrit,C_BIT_ENABLED);
lbox->SetValue(vt_attrit);
lbox->SetFlagBitOff(C_BIT_INVISIBLE);
if(vc->get_type() != vt_attrit)
vc->set_type(vt_attrit);
}
else
lbox->SetFlagBitOn(C_BIT_INVISIBLE);
lbox->SetValue(vc->get_type());
}
else
lbox->SetFlagBitOn(C_BIT_INVISIBLE);
}
lbox=vctrl->GetArgs();
if(lbox)
{
switch(vc->get_type())
{
case vt_intercept:
lbox->SetRoot(intercept_lbox);
lbox->SetFlagBitOff(C_BIT_INVISIBLE);
if(ent && ent->IsFlight())
{
vc->set_tolerance(max(1,min(vc->get_tolerance (),4)));
}
else
{
vc->set_tolerance(1);
}
lbox->SetValue(max(1,min(4,vc->get_tolerance())));
for(i=1;i<=((Flight)ent)->GetTotalVehicles();i++)
lbox->SetItemFlags(i,C_BIT_ENABLED);
for(;i <= 4;i++)
lbox->SetItemFlags(i,C_BIT_INVISIBLE);
break;
case vt_attrit:
case vt_degrade:
lbox->SetRoot(percent_lbox);
lbox->SetFlagBitOff(C_BIT_INVISIBLE);
if(vc->get_tolerance() > 10)
vc->set_tolerance(10);
else if(vc->get_tolerance() < 1)
vc->set_tolerance(1);
lbox->SetValue(max(1,min(10,vc->get_tolerance())));
break;
default:
vctrl->GetArgs()->SetRoot(percent_lbox);
vctrl->GetArgs()->SetFlagBitOn(C_BIT_INVISIBLE);
lbox->SetValue(1);
break;
}
}
vctrl->Refresh();
}
}
// sets up team stuff
void VCChangeTeamNoCB(long,short hittype,C_Base *)
{
victory_condition *vc;
C_Victory *vctrl;
TREELIST *item;
if(hittype != C_TYPE_SELECT)
return;
item=gVCTree->GetLastItem();
if(item && item->Item_)
{
vctrl=(C_Victory*)item->Item_;
vc=(victory_condition*)vctrl->GetPtr();
if(vc)
{
if(vctrl->GetTeam()->GetTextID() != vc->get_team())
{
gMapMgr->RemoveVC(vc->get_team(),vc->get_number());
vc->set_team(vctrl->GetTeam()->GetTextID());
gMapMgr->AddVC(vc);
}
}
}
update_team_victory_window ();
}
// sets up the actions
void VCChangeActionCB(long,short hittype,C_Base *control)
{
victory_condition *vc;
C_Victory *vctrl;
TREELIST *item;
if(hittype != C_TYPE_SELECT)
return;
item=gVCTree->GetLastItem();
if(item && item->Item_)
{
vctrl=(C_Victory*)item->Item_;
vc=(victory_condition*)vctrl->GetPtr();
if(vc)
{
vc->set_type((victory_type)((C_ListBox*)control)->GetTextID());
UpdateVCOptions(vc);
if(vc->get_type() == vt_destroy && vc->get_sub_objective() < 0)
{
// we need to target a building
C_Window *win;
C_Base *btn;
SetCursor(gCursors[CRSR_WAIT]);
win=gMainHandler->FindWindow(RECON_LIST_WIN);
if(win)
{
if(TargetTree)
TargetTree->DeleteBranch(TargetTree->GetRoot());
if(!OldReconCWCB)
{
btn=win->FindControl(CLOSE_WINDOW);
if(btn)
{
OldReconCWCB=btn->GetCallback();
btn->SetCallback(TgtAssignCWCB);
}
}
btn=win->FindControl(SET_VC);
if(btn)
btn->SetFlagBitOff(C_BIT_INVISIBLE);
btn->Refresh();
}
SelectToolTypeCB(TARGET_VC,C_TYPE_LMOUSEUP,vctrl);
BuildSpecificTargetList(vc->get_vu_id());
}
else if(vc->get_type() != vt_destroy)
vc->set_sub_objective(-1);
}
}
}
// sets up the target
void VCSetTargetCB(long,short hittype,C_Base *control)
{
victory_condition *vc;
C_Victory *vctrl;
TREELIST *item;
C_Window *win;
C_Base *btn;
if(hittype != C_TYPE_LMOUSEUP)
return;
if(control && control->GetUserNumber(10))
{
SetCursor(gCursors[CRSR_WAIT]);
item=gVCTree->GetLastItem();
if(item && item->Item_)
{
vctrl=(C_Victory*)item->Item_;
vc=(victory_condition*)vctrl->GetPtr();
win=gMainHandler->FindWindow(RECON_LIST_WIN);
if(win && vc)
{
if(TargetTree)
TargetTree->DeleteBranch(TargetTree->GetRoot());
if(!OldReconCWCB)
{
btn=win->FindControl(CLOSE_WINDOW);
if(btn)
{
OldReconCWCB=btn->GetCallback();
btn->SetCallback(TgtAssignCWCB);
}
}
btn=win->FindControl(SET_VC);
if(btn)
btn->SetFlagBitOff(C_BIT_INVISIBLE);
btn->Refresh();
BuildSpecificTargetList(vc->get_vu_id());
}
}
}
SelectToolTypeCB(TARGET_VC,hittype,control);
}
// sets up the target & Args controls
void VCArgsCB(long,short hittype,C_Base *)
{
victory_condition *vc;
C_Victory *vctrl;
TREELIST *item;
if(hittype != C_TYPE_SELECT)
return;
item=gVCTree->GetLastItem();
if(item && item->Item_)
{
vctrl=(C_Victory*)item->Item_;
vc=(victory_condition*)vctrl->GetPtr();
if(vc)
{
vc->set_tolerance(vctrl->GetArgs()->GetTextID());
}
}
}
// sets up the target & Args controls
void VCSetPointsCB(long,short hittype,C_Base *control)
{
victory_condition *vc;
C_Victory *vctrl;
TREELIST *item;
if(hittype && hittype != DIK_RETURN)
return;
item=gVCTree->GetLastItem();
if(item && item->Item_)
{
vctrl=(C_Victory*)item->Item_;
vc=(victory_condition*)vctrl->GetPtr();
if(vc)
{
vc->set_points(((C_EditBox*)control)->GetInteger());
}
}
update_team_victory_window ();
}
void VCSelectVCCB(long,short hittype,C_Base *)
{
if(hittype != C_TYPE_LMOUSEUP)
return;
if(gVCTree)
gVCTree->SetAllControlStates(0,gVCTree->GetRoot());
SelectToolTypeCB(0,C_TYPE_LMOUSEUP,NULL);
}
void AssignVCCB(long ID,short hittype,C_Base *control)
{
TREELIST *item;
C_Victory *vctrl;
victory_condition *vc;
if(hittype != C_TYPE_LMOUSEUP)
return;
CloseReconWindowCB(ID,hittype,control);
if(FeatureID != FalconNullId && FeatureNo >= 0)
{
if(gVCTree)
{
item=gVCTree->GetLastItem();
if(item) // MUST MAKE SURE they didn't switch Items while targetting
{
vctrl=(C_Victory*)item->Item_;
if(vctrl)
{
vc=(victory_condition*)vctrl->GetPtr();
if(vc)
{
vc->set_vu_id(FeatureID);
vc->set_sub_objective(FeatureNo);
gMapMgr->AddVC(vc);
UpdateVCOptions(vc); // sets valid list box stuff etc
// Clear TOOL stuff
SelectToolTypeCB(0,C_TYPE_LMOUSEUP,NULL);
}
}
}
}
}
}
void SetVCTargetInfo(CampEntity ent)
{
TREELIST *item;
C_Victory *vctrl;
victory_condition *vc;
if(!gVCTree)
return;
if(ent->IsFlight())
{
item=gVCTree->GetLastItem();
if(item)
{
vctrl=(C_Victory*)item->Item_;
if(vctrl)
{
vc=(victory_condition*)vctrl->GetPtr();
if(vc)
{
vc->set_vu_id(ent->Id());
vc->set_type(vt_intercept);
vc->set_tolerance(max(1,min(4,((Flight)ent)->GetTotalVehicles())));
gMapMgr->AddVC(vc);
UpdateVCOptions(vc);
}
}
}
}
else if(ent->IsObjective())
{
C_Window *win;
C_Base *btn;
SetCursor(gCursors[CRSR_WAIT]);
win=gMainHandler->FindWindow(RECON_LIST_WIN);
if(win)
{
if(TargetTree)
TargetTree->DeleteBranch(TargetTree->GetRoot());
if(!OldReconCWCB)
{
btn=win->FindControl(CLOSE_WINDOW);
if(btn)
{
OldReconCWCB=btn->GetCallback();
btn->SetCallback(TgtAssignCWCB);
}
}
btn=win->FindControl(SET_VC);
if(btn)
btn->SetFlagBitOff(C_BIT_INVISIBLE);
btn->Refresh();
BuildSpecificTargetList(ent->Id());
}
}
else if(ent->IsBattalion())
{
item=gVCTree->GetLastItem();
if(item)
{
vctrl=(C_Victory*)item->Item_;
if(vctrl)
{
vc=(victory_condition*)vctrl->GetPtr();
if(vc)
{
vc->set_vu_id(ent->Id());
vc->set_type(vt_attrit);
vc->set_tolerance(10);
gMapMgr->AddVC(vc);
UpdateVCOptions(vc);
}
}
}
}
}
void SelectVCTargetCB(long ID,short hittype,C_Base *control)
{
C_MapIcon *icon;
UI_Refresher *urec;
CampEntity ent;
C_Victory *vctrl;
victory_condition *vc;
TREELIST *item;
if(hittype != C_TYPE_LMOUSEUP)
return;
icon=(C_MapIcon*)control;
if(control)
{
ID=icon->GetIconID();
urec=(UI_Refresher*)gGps->Find(ID);
if(urec)
{
item=gVCTree->GetLastItem();
if(item)
{
vctrl=(C_Victory*)item->Item_;
if(vctrl)
{
vc=(victory_condition*)vctrl->GetPtr();
if(vc)
{
ent=(CampEntity)vuDatabase->Find(urec->GetID());
if(ent)
{
vc->set_vu_id(urec->GetID());
gMapMgr->AddVC(vc);
if(ent->IsObjective())
{
if(vc->get_type() == vt_destroy)
{
SetVCTargetInfo(ent);
}
else
{
if(vc->get_type() != vt_occupy && vc->get_type() != vt_degrade)
{
vc->set_type(vt_degrade);
vc->set_tolerance(10);
}
UpdateVCOptions(vc);
}
}
else if(ent->IsFlight())
{
vc->set_type(vt_intercept);
vc->set_tolerance(min(4,((Flight)ent)->GetTotalVehicles()));
UpdateVCOptions(vc);
}
else if(ent->IsBattalion())
{
vc->set_type(vt_attrit);
vc->set_tolerance(10);
UpdateVCOptions(vc);
}
}
}
}
}
}
}
}
void VCActionOpenCB(C_Base *me)
{
TREELIST *item;
C_Victory *vctrl;
victory_condition *vc;
if(!gVCTree)
return;
item=gVCTree->GetLastItem();
if(!item)
return;
vctrl=(C_Victory *)item->Item_;
if(!vctrl)
return;
vc=(victory_condition*)vctrl->GetPtr();
if(!vc)
return;
switch(vc->get_type())
{
case vt_intercept:
((C_ListBox*)me)->SetItemFlags(vt_degrade,C_BIT_INVISIBLE);
((C_ListBox*)me)->SetItemFlags(vt_occupy,C_BIT_INVISIBLE);
((C_ListBox*)me)->SetItemFlags(vt_destroy,C_BIT_INVISIBLE);
((C_ListBox*)me)->SetItemFlags(vt_attrit,C_BIT_INVISIBLE);
((C_ListBox*)me)->SetItemFlags(vt_intercept,C_BIT_ENABLED);
break;
case vt_attrit:
((C_ListBox*)me)->SetItemFlags(vt_degrade,C_BIT_INVISIBLE);
((C_ListBox*)me)->SetItemFlags(vt_occupy,C_BIT_INVISIBLE);
((C_ListBox*)me)->SetItemFlags(vt_destroy,C_BIT_INVISIBLE);
((C_ListBox*)me)->SetItemFlags(vt_attrit,C_BIT_ENABLED);
((C_ListBox*)me)->SetItemFlags(vt_intercept,C_BIT_INVISIBLE);
break;
case vt_degrade:
case vt_occupy:
case vt_destroy:
((C_ListBox*)me)->SetItemFlags(vt_degrade,C_BIT_ENABLED);
((C_ListBox*)me)->SetItemFlags(vt_occupy,C_BIT_ENABLED);
((C_ListBox*)me)->SetItemFlags(vt_destroy,C_BIT_ENABLED);
((C_ListBox*)me)->SetItemFlags(vt_attrit,C_BIT_INVISIBLE);
((C_ListBox*)me)->SetItemFlags(vt_intercept,C_BIT_INVISIBLE);
break;
}
}
void VCArgsOpenCB(C_Base *me)
{
TREELIST *item;
C_Victory *vctrl;
victory_condition *vc;
CampEntity ent;
long i;
if(!gVCTree)
return;
item=gVCTree->GetLastItem();
if(!item)
return;
vctrl=(C_Victory *)item->Item_;
if(!vctrl)
return;
vc=(victory_condition*)vctrl->GetPtr();
if(!vc)
return;
if(vc->get_type() == vt_intercept)
{
ent=(CampEntity)vuDatabase->Find(vc->get_vu_id());
if(ent && ent->IsFlight())
{
for(i=1;i<=((Flight)ent)->GetTotalVehicles();i++)
((C_ListBox*)me)->SetItemFlags(i,C_BIT_ENABLED);
for(;i<=4;i++)
((C_ListBox*)me)->SetItemFlags(i,C_BIT_INVISIBLE);
}
}
}
C_Victory *MakeVCControl(victory_condition *vc)
{
C_Victory *vcntrl;
C_ListBox *lbox;
C_Button *btn;
C_EditBox *ebox;
C_Text *txt;
CampEntity ent;
_TCHAR buffer[60];
long fh;
if(!gVCTree)
return(NULL);
fh=gFontList->GetHeight(gVCTree->GetFont())+2;
ent=(CampEntity)vuDatabase->Find(vc->get_vu_id());
vcntrl=new C_Victory;
vcntrl->Setup(vc->get_number(),0);
vcntrl->SetPtr(vc);
vcntrl->SetCallback(VCSelectVCCB);
// VC ID #
_stprintf(buffer,"%1d",vc->get_number());
txt=new C_Text;
txt->Setup(C_DONT_CARE,0);
txt->SetFixedWidth(4);
txt->SetText(buffer);
txt->SetFlagBitOn(C_BIT_RIGHT);
vcntrl->SetNumber(txt);
// Team Name
lbox=new C_ListBox;
lbox->Setup(1,0,gMainHandler);
lbox->SetWH(gVCTree->GetUserNumber(11),fh);
lbox->SetBgFill(0,0,0,0);
lbox->SetBgColor(11370561); //
lbox->SetRoot(team_lbox);
lbox->SetValue(vc->get_team());
lbox->SetDropDown (BID_DROPDOWN);
lbox->SetCallback(VCChangeTeamNoCB);
lbox->SetFlagBitOff(C_BIT_ENABLED);
lbox->SetFlagBitOn(gVCTree->GetFlags() & C_BIT_ENABLED);
vcntrl->SetTeam(lbox);
// Action
lbox=new C_ListBox;
lbox->Setup(2,0,gMainHandler);
lbox->SetWH(gVCTree->GetUserNumber(12),fh);
lbox->SetBgFill(0,0,0,0);
lbox->SetBgColor(11370561); //
lbox->SetRoot(action_lbox);
lbox->SetValue(vc->get_type());
lbox->SetOpenCallback(VCActionOpenCB);
lbox->SetCallback(VCChangeActionCB);
lbox->SetFlagBitOff(C_BIT_ENABLED);
lbox->SetFlagBitOn(gVCTree->GetFlags() & C_BIT_ENABLED);
lbox->SetDropDown (BID_DROPDOWN);
if(!ent)
lbox->SetFlagBitOn(C_BIT_INVISIBLE);
vcntrl->SetAction(lbox);
if(ent)
{
if (ent->IsFlight())
GetCallsign (((Flight)ent)->callsign_id, ((Flight)ent)->callsign_num, buffer);
else if (ent->IsObjective())
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -