📄 te_team_victory.cpp
字号:
ent->GetName(buffer,40,TRUE);
else
ent->GetName(buffer,40,FALSE);
}
// Target
btn=new C_Button;
btn->Setup(TARGET_VC,C_TYPE_NORMAL,0,0);
if(ent)
btn->SetText(0,buffer);
else
btn->SetText(0,TXT_ASSIGN);
btn->SetFlagBitOn(C_BIT_USELINE);
btn->SetCallback(VCSetTargetCB);
btn->SetUserNumber(1,HELP_PICK_VC_TARGET);
if(vc->get_type() == vt_destroy)
btn->SetUserNumber(10,1);
vcntrl->SetTarget(btn);
// Arguments (other than target)
lbox=new C_ListBox;
lbox->Setup(4,0,gMainHandler);
lbox->SetWH(gVCTree->GetUserNumber(14),fh);
lbox->SetBgFill(0,0,0,0);
lbox->SetBgColor(11370561); //
lbox->SetDropDown (BID_DROPDOWN);
lbox->SetCallback(VCArgsCB);
lbox->SetOpenCallback(VCArgsOpenCB);
lbox->SetFlagBitOff(C_BIT_ENABLED);
lbox->SetFlagBitOn(gVCTree->GetFlags() & C_BIT_ENABLED);
if(vc->get_type() == vt_intercept)
lbox->SetRoot(intercept_lbox);
else
lbox->SetRoot(percent_lbox);
vcntrl->SetArgs(lbox);
switch(vc->get_type())
{
case vt_attrit:
case vt_intercept:
case vt_degrade:
lbox->SetFlagBitOff(C_BIT_INVISIBLE);
break;
default:
lbox->SetFlagBitOn(C_BIT_INVISIBLE);
break;
}
lbox->SetValue(vc->get_tolerance());
if(!ent)
lbox->SetFlagBitOn(C_BIT_INVISIBLE);
// Points
ebox=new C_EditBox;
ebox->Setup(5,C_TYPE_INTEGER);
ebox->SetMaxLen(6);
ebox->SetWH(gVCTree->GetUserNumber(15),fh);
ebox->SetMinInteger(-99999);
ebox->SetMaxInteger(99999);
ebox->SetInteger(vc->get_points());
ebox->SetBgColor(11370561); //
ebox->SetFlagBitOn(C_BIT_USEOUTLINE|C_BIT_RIGHT);
ebox->SetCallback(VCSetPointsCB);
vcntrl->SetPoints(ebox);
vcntrl->SetNumberX(static_cast<short>(gVCTree->GetUserNumber(0)));
vcntrl->SetTeamX(static_cast<short>(gVCTree->GetUserNumber(1)));
vcntrl->SetActionX(static_cast<short>(gVCTree->GetUserNumber(2)));
vcntrl->SetTargetX(static_cast<short>(gVCTree->GetUserNumber(3)));
vcntrl->SetArgsX(static_cast<short>(gVCTree->GetUserNumber(4)));
vcntrl->SetPointsX(static_cast<short>(gVCTree->GetUserNumber(5)));
vcntrl->SetFont(gVCTree->GetFont());
vcntrl->SetWH(ebox->GetX()+ebox->GetW(),fh+1);
vcntrl->SetState(0);
return(vcntrl);
}
int advance_team (int team, int state)
{
int
ok,
test,
loop;
for (test = 1; test < NUM_COUNS; test ++)
{
state ++; if (state > 8) state = 1;
ok = TRUE;
for (loop = 1; loop < NUM_TEAMS; loop ++)
{
if
(
(loop != team) &&
(TeamInfo[loop]) &&
(TeamInfo[loop]->GetFlag () == state)
)
{
ok = FALSE;
break;
}
}
if (ok)
{
return state;
}
}
return FALSE;
}
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
long VCFlagIDs[NUM_TEAMS][4]=
{
{ COLOR_1, FLAG_1, TEAM_01, CURRENT_PTS_01 },
{ COLOR_2, FLAG_2, TEAM_02, CURRENT_PTS_02 },
{ COLOR_3, FLAG_3, TEAM_03, CURRENT_PTS_03 },
{ COLOR_4, FLAG_4, TEAM_04, CURRENT_PTS_04 },
{ COLOR_5, FLAG_5, TEAM_05, CURRENT_PTS_05 },
{ COLOR_6, FLAG_6, TEAM_06, CURRENT_PTS_06 },
{ COLOR_7, FLAG_7, TEAM_07, CURRENT_PTS_07 },
{ COLOR_8, FLAG_8, TEAM_08, CURRENT_PTS_08 },
};
long GetCurrentVCScore(long teamno)
{
victory_condition *vc;
long value;
value=0;
vc=current_tactical_mission->get_first_unfiltered_victory_condition();
while(vc)
{
if(vc->get_team() == teamno && vc->get_active())
value+=vc->get_points();
vc=current_tactical_mission->get_next_unfiltered_victory_condition();
}
return(value);
}
long GetPossibleVCScore(long teamno)
{
victory_condition *vc;
long value;
value=0;
vc=current_tactical_mission->get_first_unfiltered_victory_condition();
while(vc)
{
if(vc->get_team() == teamno && vc->get_points() > 0)
value+=vc->get_points();
vc=current_tactical_mission->get_next_unfiltered_victory_condition();
}
return(value);
}
void UpdateVCScoring(long WinID,short mode)
{
long sortindex[NUM_TEAMS],points[NUM_TEAMS];
long i,j,line,tmp;
C_Window *win;
C_EditBox *ebox;
C_Bitmap *bmp;
C_Box *box;
memset(sortindex,0,sizeof(sortindex));
memset(points,0,sizeof(points));
line=0;
for(i=0;i<NUM_TEAMS;i++)
{
if(TeamInfo[i] && (TeamInfo[i]->flags & TEAM_ACTIVE))
{
sortindex[line]=i;
if(!mode) // Show current score for this team
{
points[line]=GetCurrentVCScore(i);
}
else // Show possible score for this team
{
points[line]=GetPossibleVCScore(i);
}
line++;
}
}
if(!mode)
{
for(i=1;i<line;i++)
{
for(j=0;j<i;j++)
{
if(points[sortindex[j]] > points[sortindex[i]])
{
tmp=sortindex[i];
sortindex[i]=sortindex[j];
sortindex[j]=tmp;
tmp=points[i];
points[i]=points[j];
points[j]=tmp;
}
}
}
}
win=gMainHandler->FindWindow (WinID);
if(win)
{
ebox=(C_EditBox*)win->FindControl(PTS_REQ_VICTORY);
if(ebox)
{
ebox->SetInteger(current_tactical_mission->get_points_required());
ebox->Refresh();
}
for(i=0;i<line;i++)
{
if(TeamInfo[sortindex[i]])
{
box=(C_Box*)win->FindControl(VCFlagIDs[i][0]);
if(box)
{
box->SetColor(TeamColorList[TeamInfo[sortindex[i]]->GetColor()]);
box->Refresh();
}
bmp=(C_Bitmap*)win->FindControl(VCFlagIDs[i][1]);
if(bmp)
{
bmp->SetImage(FlagImageID[TeamInfo[sortindex[i]]->GetFlag()][BIG_HORIZ]);
bmp->Refresh();
}
ebox=(C_EditBox*)win->FindControl(VCFlagIDs[i][2]);
if(ebox)
{
ebox->SetText(TeamInfo[sortindex[i]]->GetName());
ebox->Refresh();
}
ebox=(C_EditBox*)win->FindControl(VCFlagIDs[i][3]);
if(ebox)
{
ebox->SetInteger(points[i]);
ebox->Refresh();
}
win->UnHideCluster (i+1);
}
}
while (i <= NUM_TEAMS)
{
win->HideCluster (i+1);
i ++;
}
}
}
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
void update_team_victory_window (void)
{
if(gMainHandler)
{
if(TheCampaign.Flags & CAMP_TACTICAL_EDIT)
UpdateVCScoring(TAC_VC_WIN,1);
else
UpdateVCScoring(TAC_VC_WIN,0);
}
}
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
static void evaluate_filter (void)
{
victory_condition_filter
vcf;
#if 0
if (show_team_button->GetState ())
{
if (show_achieved_button->GetState ())
{
vcf = vcf_team_achieved;
}
else if (show_remaining_button->GetState ())
{
vcf = vcf_team_remaining;
}
else
{
vcf = vcf_team;
}
}
else
{
if (show_achieved_button->GetState ())
{
vcf = vcf_all_achieved;
}
else if (show_remaining_button->GetState ())
{
vcf = vcf_all_remaining;
}
else
{
vcf = vcf_all;
}
}
#endif
vcf = vcf_all;
if (current_tactical_mission)
{
current_tactical_mission->set_victory_condition_filter (vcf);
current_tactical_mission->set_victory_condition_team_filter (1);
}
}
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
static void delete_current_vc (long, short hittype, C_Base *)
{
TREELIST *item;
C_Victory *vctrl;
victory_condition *vc;
if(hittype != C_TYPE_LMOUSEUP)
return;
if(!gVCTree)
return;
SelectToolTypeCB(0,C_TYPE_LMOUSEUP,NULL);
item=gVCTree->GetLastItem();
if(item)
{
vctrl=(C_Victory*)item->Item_;
if(vctrl)
{
vc=(victory_condition*)vctrl->GetPtr();
if(vc)
{
gMapMgr->RemoveVC(vc->get_team(),vc->get_number());
gVCTree->DeleteItem(item->ID_);
delete vc;
gVCTree->RecalcSize();
gVCTree->Parent_->RefreshClient(gVCTree->GetClient());
}
}
}
update_team_victory_window ();
}
static void new_victory_condition (long, short hittype, C_Base *)
{
victory_condition *vc;
TREELIST *item;
if (hittype != C_TYPE_LMOUSEUP)
return;
//MonoPrint ("New Victory Condition\n");
if(!gVCTree)
return;
vc = new victory_condition (current_tactical_mission);
vc->set_team (1);
vc->control=MakeVCControl(vc);
item=gVCTree->CreateItem(vc->get_number(),C_TYPE_ITEM,vc->control);
if(item)
{
gVCTree->AddItem(gVCTree->GetRoot(),item);
((C_Victory*)vc->control)->SetOwner(item);
vc->control->SetReady(1);
vc->control->SetClient(gVCTree->GetClient());
vc->control->SetParent(gVCTree->Parent_);
vc->control->SetSubParents(gVCTree->Parent_);
gVCTree->RecalcSize();
if(gVCTree->Parent_)
gVCTree->Parent_->RefreshClient(gVCTree->GetClient());
}
if (gMapMgr)
{
gMapMgr->AddVC (vc);
}
UpdateVCOptions(vc);
evaluate_filter ();
update_team_victory_window ();
}
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
#if 0
static void change_vc_team_name (long ID, short hittype, C_Base *ctrl)
{
victory_condition
*vc;
C_ListBox
*listbox;
int
id,
old_team,
new_team;
if (hittype != C_TYPE_SELECT)
{
return;
}
listbox = (C_ListBox *) ctrl;
vc = (victory_condition *) listbox->GetUserNumber (0);
old_team = vc->get_team ();
new_team = listbox->GetTextID ();
vc->set_team (new_team);
if
(
((old_team > 0) && (new_team > 0)) ||
((new_team < 0) && (old_team < 0))
)
{
// don't need to do anything else, cos the team hasn't changed type.
return;
}
id = ctrl->GetID ();
listbox = (C_ListBox *) ctrl->Parent_->FindControl (id + 1);
if (listbox)
{
listbox->RemoveAllItems ();
listbox->AddItem (vt_occupy, C_TYPE_ITEM, "Occupy");
listbox->AddItem (vt_destroy, C_TYPE_ITEM, "Destroy");
listbox->AddItem (vt_attrit, C_TYPE_ITEM, "Attrit");
listbox->AddItem (vt_intercept, C_TYPE_ITEM, "Intercept");
listbox->AddItem (vt_degrade, C_TYPE_ITEM, "Degrade");
/*
if (new_team == -1)
{
listbox->AddItem (vt_kills, C_TYPE_ITEM, "Kills");
listbox->AddItem (vt_frags, C_TYPE_ITEM, "Frags");
listbox->AddItem (vt_deaths, C_TYPE_ITEM, "Deaths");
listbox->AddItem (vt_landing, C_TYPE_ITEM, "Landing");
}
listbox->AddItem (vt_tos, C_TYPE_ITEM, "Tos");
listbox->AddItem (vt_airspeed, C_TYPE_ITEM, "Airspeed");
listbox->AddItem (vt_altitude, C_TYPE_ITEM, "Altitude");
listbox->AddItem (vt_position, C_TYPE_ITEM, "Position");
*/
}
gMapMgr->RemoveVC(old_team,vc->get_number());
gMapMgr->AddVC(vc);
}
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
static void change_vc_team_action (long ID, short hittype, C_Base *ctrl)
{
victory_condition
*vc;
C_ListBox
*listbox;
C_Window
*win;
if (hittype != C_TYPE_SELECT)
{
return;
}
win = ctrl->GetParent ();
listbox = (C_ListBox *) ctrl;
vc = (victory_condition *) listbox->GetUserNumber (0);
vc->set_type ((victory_type) listbox->GetTextID ());
if (vc->arg1_control)
{
vc->arg1_control->SetFlagBitOn (C_BIT_INVISIBLE);
}
if (vc->arg2_control)
{
vc->arg2_control->SetFlagBitOn (C_BIT_INVISIBLE);
}
if (vc->arg3_control)
{
vc->arg3_control->SetFlagBitOn (C_BIT_INVISIBLE);
}
team_victory_id = add_team_args (vc->team_control->GetY (), win, vc, team_victory_id);
win->ScanClientAreas ();
win->RefreshClient (2);
win->RefreshWindow ();
}
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
static void change_vc_tolerance (long ID, short hittype, C_Base *ctrl)
{
victory_condition
*vc;
C_ListBox
*listbox;
C_Window
*win;
if (hittype != C_TYPE_SELECT)
{
return;
}
win = ctrl->GetParent ();
listbox = (C_ListBox *) ctrl;
vc = (victory_condition *) listbox->GetUserNumber (0);
vc->set_tolerance (listbox->GetTextID ());
}
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
static void change_vc_steerpoint (long ID, short hittype, C_Base *ctrl)
{
victory_condition
*vc;
C_ListBox
*listbox;
C_Window
*win;
if (hittype != C_TYPE_SELECT)
{
return;
}
win = ctrl->GetParent ();
listbox = (C_ListBox *) ctrl;
vc = (victory_condition *) listbox->GetUserNumber (0);
vc->set_steerpoint (listbox->GetTextID ());
}
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
static void set_vc_points (long ID, short hittype, C_Base *ctrl)
{
C_EditBox
*editbox;
victory_condition
*vc;
editbox = (C_EditBox *) ctrl;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -