⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 campmenu.cpp

📁 空战游戏flacon源码
💻 CPP
📖 第 1 页 / 共 4 页
字号:
	{
	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 + -