📄 campmenu.cpp
字号:
{
C_PopupList *menu;
WayPoint wp;
// We've opened a steerpoint's popup menu. Setup current values!
wp = GetSelectedWayPoint();
menu=gPopupMgr->GetMenu(STEERPOINT_POP);
if(menu && wp)
{
if (wp->GetWPFlags() & WPF_TIME_LOCKED)
menu->SetItemState(MID_LOCK_TOS,1);
else
menu->SetItemState(MID_LOCK_TOS,0);
if (wp->GetWPFlags() & WPF_SPEED_LOCKED)
menu->SetItemState(MID_LOCK_SPEED,1);
else
menu->SetItemState(MID_LOCK_SPEED,0);
if (wp->GetWPFlags() & WPF_HOLDCURRENT)
menu->SetItemState(CLIMB_DELAY,1);
else
menu->SetItemState(CLIMB_IMMEDIATE,1);
menu->SetItemState(wp->GetWPFormation()+1,1);
menu->SetItemState(wp->GetWPAction() | 0x200,1);
menu->SetItemState(wp->GetWPRouteAction() | 0x100,1);
}
}
void MenuUnitDeleteCB(long,short,C_Base *)
{
C_Base *caller;
C_MapIcon *icon;
C_DrawList *piggy;
C_TreeList *tree;
TREELIST *item;
long iconid,count;
UI_Refresher *urec=NULL;
Unit unit,sec;
Package pkg;
gPopupMgr->CloseMenu();
caller=gPopupMgr->GetCallingControl();
if(caller == NULL)
return;
if(gPopupMgr->GetCallingType() == C_TYPE_CONTROL)
{
// Recon this + very close Objects
if(caller->_GetCType_() == _CNTL_MAPICON_)
{
icon=(C_MapIcon *)caller;
iconid=icon->GetIconID();
urec=(UI_Refresher *)gGps->Find(iconid);
}
else if(caller->_GetCType_() == _CNTL_DRAWLIST_)
{
piggy=(C_DrawList *)caller;
iconid=piggy->GetIconID();
urec=(UI_Refresher *)gGps->Find(iconid);
}
else if(caller->_GetCType_() == _CNTL_TREELIST_)
{
tree=(C_TreeList *)caller;
item=tree->GetLastItem();
if(item)
urec=(UI_Refresher *)gGps->Find(item->ID_);
}
if(urec)
{
unit=(Unit)vuDatabase->Find(urec->GetID());
if(unit && unit->IsUnit())
{
pkg=NULL;
count=0;
if(unit->IsFlight())
{
pkg=(Package)unit->GetUnitParent();
if(pkg && pkg->IsPackage())
{
sec=pkg->GetFirstUnitElement();
while(sec)
{
if(sec != unit)
count++;
sec=pkg->GetNextUnitElement();
}
}
else
pkg=NULL;
}
unit->Remove();
if(pkg && !count)
pkg->Remove();
}
}
}
}
void MenuReconCB(long,short,C_Base *)
{
C_Base *caller;
C_MapIcon *icon;
C_DrawList *piggy;
C_TreeList *tree;
C_Waypoint *wp;
TREELIST *item;
WAYPOINTLIST *wpicon;
long iconid;
UI_Refresher *urec=NULL;
float x=0.0f,y=0.0f,range=0.0f;
short relx,rely;
float maxy, scale;
CampEntity ent;
gPopupMgr->CloseMenu();
caller=gPopupMgr->GetCallingControl();
if(caller == NULL)
return;
if(gPopupMgr->GetCallingType() == C_TYPE_CONTROL)
{
// Recon this + very close Objects
if(caller->_GetCType_() == _CNTL_MAPICON_)
{
icon=(C_MapIcon *)caller;
iconid=icon->GetIconID();
urec=(UI_Refresher *)gGps->Find(iconid);
}
else if(caller->_GetCType_() == _CNTL_WAYPOINT_)
{
wp=(C_Waypoint *)caller;
if(wp)
{
wpicon=wp->GetLast();
if(wpicon)
{
x=caller->GetUserNumber(0)-wpicon->worldy;
y=wpicon->worldx;
range=18000.0f;
}
}
}
else if(caller->_GetCType_() == _CNTL_DRAWLIST_)
{
piggy=(C_DrawList *)caller;
iconid=piggy->GetIconID();
urec=(UI_Refresher *)gGps->Find(iconid);
}
else if(caller->_GetCType_() == _CNTL_TREELIST_)
{
tree=(C_TreeList *)caller;
item=tree->GetLastItem();
if(item)
urec=(UI_Refresher *)gGps->Find(item->ID_);
}
else if(caller->_GetCType_() == _CNTL_MAP_MOVER_)
{
// Recon Area...
range=18000.0f;
relx=static_cast<short>(((C_MapMover*)caller)->GetRelX() + caller->GetX() + caller->Parent_->GetX());
rely=static_cast<short>(((C_MapMover*)caller)->GetRelY() + caller->GetY() + caller->Parent_->GetY());
gMapMgr->GetMapRelativeXY (&relx, &rely);
scale = gMapMgr->GetMapScale ();
maxy = gMapMgr->GetMaxY ();
// x & y are reversed for SIM
y = relx / scale;
x = maxy - rely / scale;
}
if(urec)
{
ent=(CampEntity)vuDatabase->Find(urec->GetID());
if(ent)
{
range=6000.0f;
x=ent->XPos();
y=ent->YPos();
}
}
}
if(range > 1.0f)
ReconArea(x,y,range);
}
void MenuStatusCB(long,short,C_Base *)
{
C_Base *caller;
C_MapIcon *icon;
C_DrawList *piggy;
C_TreeList *tree;
TREELIST *item;
long iconid;
UI_Refresher *urec=NULL;
CampEntity ent;
gPopupMgr->CloseMenu();
caller=gPopupMgr->GetCallingControl();
if(caller == NULL)
return;
if(gPopupMgr->GetCallingType() == C_TYPE_CONTROL)
{
// Recon this + very close Objects
if(caller->_GetCType_() == _CNTL_MAPICON_)
{
icon=(C_MapIcon *)caller;
iconid=icon->GetIconID();
urec=(UI_Refresher *)gGps->Find(iconid);
}
else if(caller->_GetCType_() == _CNTL_DRAWLIST_)
{
piggy=(C_DrawList *)caller;
iconid=piggy->GetIconID();
urec=(UI_Refresher *)gGps->Find(iconid);
}
else if(caller->_GetCType_() == _CNTL_TREELIST_)
{
tree=(C_TreeList *)caller;
item=tree->GetLastItem();
if(item)
urec=(UI_Refresher *)gGps->Find(item->ID_);
}
if(urec)
{
ent=(CampEntity)vuDatabase->Find(urec->GetID());
if(ent)
{
BuildSpecificTargetList(ent->Id());
}
}
}
}
void MenuUnitStatusCB(long,short,C_Base *)
{
C_Window *win;
C_Base *caller;
C_MapIcon *icon;
C_DrawList *piggy;
C_TreeList *tree;
long iconid=0;
TREELIST *item;
CampEntity ent;
UI_Refresher *urec=NULL;
gPopupMgr->CloseMenu();
caller=gPopupMgr->GetCallingControl();
if(caller == NULL)
return;
if(caller->_GetCType_() == _CNTL_MAPICON_)
{
icon=(C_MapIcon *)caller;
iconid=icon->GetIconID();
urec=(UI_Refresher *)gGps->Find(iconid);
}
else if(caller->_GetCType_() == _CNTL_DRAWLIST_)
{
piggy=(C_DrawList *)caller;
iconid=piggy->GetIconID();
urec=(UI_Refresher *)gGps->Find(iconid);
}
else if(caller->_GetCType_() == _CNTL_TREELIST_)
{
tree=(C_TreeList *)caller;
item=tree->GetLastItem();
if(item)
{
iconid=item->ID_;
urec=(UI_Refresher *)gGps->Find(item->ID_ & 0x00ffffff); // strip off team (incase it is a division)
}
}
if(urec)
{
win=gMainHandler->FindWindow(UNIT_WIN);
if(win)
{
if(urec->GetType() == GPS_DIVISION)
SetupDivisionInfoWindow(urec->GetDivID(),urec->GetSide()); // Map & Tree save team # in top 8 bits (Needed to find division by team)
else
{
ent=(CampEntity)vuDatabase->Find(urec->GetID());
if(ent && ent->IsUnit())
{
if(ent->IsFlight() || ent->IsSquadron())
{
SetupSquadronInfoWindow(urec->GetID());
}
else if(ent->IsTaskForce())
{
BuildSpecificTargetList(urec->GetID());
}
else
SetupUnitInfoWindow(urec->GetID());
}
}
}
}
}
void MenuShowSquadronsCB(long,short,C_Base *)
{
}
void MenuOpenWpWindowCB(long,short,C_Base *)
{
}
void MenuLockCB(long ID,short,C_Base *)
{
WayPoint wp = NULL;
gPopupMgr->CloseMenu();
wp = GetSelectedWayPoint();
if (wp)
{
if (ID == MID_LOCK_TOS)
wp->SetWPFlag(WPF_TIME_LOCKED);
if (ID == MID_LOCK_SPEED)
wp->SetWPFlag(WPF_SPEED_LOCKED);
refresh_waypoint (wp);
}
}
void MenuClimbCB(long ID,short,C_Base *)
{
WayPoint wp = NULL;
gPopupMgr->CloseMenu();
wp = GetSelectedWayPoint();
if (wp)
{
if (ID == CLIMB_DELAY)
wp->SetWPFlag(WPF_HOLDCURRENT);
else
wp->UnSetWPFlag(WPF_HOLDCURRENT);
refresh_waypoint (wp);
}
}
void MenuFormationCB(long ID,short,C_Base *)
{
WayPoint wp = NULL;
int formation;
gPopupMgr->CloseMenu();
wp = GetSelectedWayPoint();
if (wp)
{
formation = ID & 0xff;
wp->SetWPFormation(formation-1);
refresh_waypoint (wp);
}
}
void MenuEnrouteCB(long ID,short,C_Base *)
{
WayPoint wp = NULL;
int action;
gPopupMgr->CloseMenu();
wp = GetSelectedWayPoint();
if (wp)
{
action = ID & 0xff;
wp->SetWPRouteAction(action);
refresh_waypoint (wp);
}
}
void MenuActionCB(long ID,short,C_Base *)
{
WayPoint wp = NULL;
int action;
gPopupMgr->CloseMenu();
wp = GetSelectedWayPoint();
if (wp)
{
action = ID & 0xff;
set_waypoint_action(wp,action);
refresh_waypoint (wp);
}
}
void MenuAddWPCB(long,short,C_Base *)
{
C_Waypoint
*cwp;
WayPoint
wp;
WAYPOINTLIST
*wps;
Unit
un;
int
num;
cwp = (C_Waypoint *) gPopupMgr->GetCallingControl ();
un = (Unit)vuDatabase->Find(gMapMgr->GetCurWPID());
if(!un)
return;
wp = un->GetFirstUnitWP ();
// if(un->GetCurrentUnitWP() != wp)
// return;
wps = cwp->GetLast ();
num = wps->ID & 0xff;
while ((num > 1) && (wp))
{
wp = wp->GetNextWP ();
num --;
}
wp->SplitWP ();
gMapMgr->SetCurrentWaypointList (un->Id ());
gPopupMgr->CloseMenu ();
}
void MenuDeleteWPCB(long,short hittype,C_Base *)
{
WayPoint wp,rw;
Unit un;
un = (Unit)vuDatabase->Find(gMapMgr->GetCurWPID());
if(!un)
return;
if(hittype != C_TYPE_LMOUSEUP)
return;
gPopupMgr->CloseMenu();
wp = GetSelectedWayPoint();
if (wp && (wp->GetPrevWP()) && (wp->GetNextWP()))
{
rw = wp->GetPrevWP();
un->DeleteUnitWP(wp);
recalculate_waypoints(rw);
}
gMapMgr->SetCurrentWaypointList (un->Id());
if ((TheCampaign.Flags & CAMP_TACTICAL_EDIT) && un->IsFlight())
{
fixup_unit (un);
gGps->Update();
gMapMgr->DrawMap();
}
}
void MenuEditPackageCB(long,short,C_Base *control)
{
C_Base *caller;
C_MapIcon *icon;
C_DrawList *piggy;
C_TreeList *tree;
TREELIST *item;
long iconid=0;
UI_Refresher *urec=NULL;
gPopupMgr->CloseMenu();
caller=gPopupMgr->GetCallingControl();
if(caller == NULL)
return;
if(caller->_GetCType_() == _CNTL_MAPICON_)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -