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

📄 ato.cpp

📁 空战游戏flacon源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// ATO Stuff Here
#include <windows.h>
#include "unit.h"
#include "campwp.h"
#include "campstr.h"
#include "squadron.h"
#include "flight.h"
#include "team.h"
#include "find.h"
#include "division.h"
#include "misseval.h"
#include "camplist.h"
#include "chandler.h"
#include "ui95_ext.h"
#include "uicomms.h"
#include "cmap.h"
#include "userids.h"
#include "textids.h"
#include "classtbl.h"

enum
{
	ATO_OCA=1,
	ATO_STRIKE,
	ATO_INTERDICTION,
	ATO_SEAD,
	ATO_CAS,
	ATO_DCA,
	ATO_CCCI,
	ATO_MARITIME,
	ATO_SUPPORT,
	ATO_OTHER,
};

static long AtoMissStr[]=
{
	0,
	TXT_OCA,
	TXT_STRIKE,
	TXT_INTERDICTION,
	TXT_SEAD,
	TXT_CAS,
	TXT_DCA,
	TXT_CCCI,
	TXT_MARITIME,
	TXT_SUPPORT,
	TXT_OTHER,
};

enum
{
	BID_DROPDOWN =50300,
	BID_CHK1_OFF=50301,
	BID_CHK1_ON=50302,
};

void AddLocationToBrief (char type, GridIndex x, GridIndex y, _TCHAR *brief);
void GetMissionTarget(Package curpackage,Flight curflight,_TCHAR Buffer[]);
int IsValidMission (int dindex, int mission);
void SetupFlightSpecificControls (Flight flt);

extern C_Handler *gMainHandler;
//extern LISTBOX *gTaskList;

extern C_Map *gMapMgr;

C_TreeList *gATOAll=NULL;
C_TreeList *gATOPackage=NULL;

VU_ID gSelectedPackage=FalconNullId;
VU_ID gSelectedFlightID=FalconNullId;
VU_ID gSelectedATOFlight=FalconNullId;	// Unselected when Package is selected
extern VU_ID gCurrentFlightID;

void ShowPackageWPs(VU_ID package)
{
	Package pkg;
	Flight flt;

	pkg=(Package)vuDatabase->Find(package);
	if(pkg && pkg->Final())
	{
		flt=(Flight)pkg->GetFirstUnitElement();
		while(flt)
		{
			gMapMgr->SetWaypointList(flt->Id());
			flt=(Flight)pkg->GetNextUnitElement();
		}
	}
}

void HidePackageWPs(VU_ID package)
{
	Package pkg;
	Flight flt;

	pkg=(Package)vuDatabase->Find(package);
	if(pkg && pkg->Final())
	{
		flt=(Flight)pkg->GetFirstUnitElement();
		while(flt)
		{
			gMapMgr->RemoveWaypoints(flt->GetTeam(),flt->GetCampID() << 8);
			flt=(Flight)pkg->GetNextUnitElement();
		}
	}
}

void UpdateTeamName(long team)
{
	TREELIST *item;
	C_Text *txt;

	if(!gATOAll || team >= NUM_TEAMS || !TeamInfo[team])
		return;

	item=gATOAll->Find(team | 0x20000000);
	if(item)
	{
		txt=(C_Text*)item->Item_;
		if(txt)
		{
			txt->Refresh();
			txt->SetText(TeamInfo[team]->GetName());
			txt->Refresh();
		}
	}
}

void SelectATOItemCB(long,short hittype,C_Base *control)
{
	TREELIST *item;
	C_ATO_Flight *ato;
	C_ATO_Package *pkg;
	if(hittype != C_TYPE_LMOUSEUP)
		return;

	gATOAll->SetAllControlStates(0,gATOAll->GetRoot());

	ato=(C_ATO_Flight*)control;
	ato->SetState(1);
	ato->Refresh();

	if(ato->GetOwner())
	{
		item=ato->GetOwner()->Parent;
		if(item && item->Item_)
		{
			pkg=(C_ATO_Package*)item->Item_;
			pkg->SetState(1);
			pkg->Refresh();
		}
	}

	gSelectedFlightID=ato->GetVUID();
	gSelectedATOFlight = gSelectedFlightID;
	if (TheCampaign.Flags & CAMP_TACTICAL_EDIT)
	{
		gCurrentFlightID=gSelectedFlightID;
		if(gMapMgr)
		{
			gMapMgr->SetCurrentWaypointList(gCurrentFlightID);
			SetupFlightSpecificControls((Flight)vuDatabase->Find(gCurrentFlightID));
			gMapMgr->FitFlightPlan();
			gMapMgr->DrawMap();
		}
	}
}

void SelectATOPackageCB(long,short hittype,C_Base *control)
{
	C_ATO_Package *package;
	VU_ID *tmpID;
	if(hittype != C_TYPE_LMOUSEUP)
		return;

	package=(C_ATO_Package*)control;
	package->SetState(1);
	package->Refresh();

	gSelectedATOFlight = FalconNullId;

	if(control->_GetCType_() == _CNTL_PACKAGE_)
		gSelectedPackage=package->GetVUID();
	else
	{
		tmpID=(VU_ID*)control->GetUserPtr(_UI95_VU_ID_SLOT_);
		if(tmpID)
			gSelectedPackage=*tmpID;
		else
			gSelectedPackage=FalconNullId;
	}

	if(package->GetWPState())
	{ // Add a bunch of waypoints to the map
		ShowPackageWPs(gSelectedPackage);
	}
	else
	{ // Remove a bunch of waypoints from the map
		HidePackageWPs(gSelectedPackage);
	}
}

void RedrawTreeWindowCB(long,short,C_Base *control)
{
	if (control->Parent_)
		control->Parent_->RefreshClient(control->GetClient());
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////

int MissionToATOMiss (int mistype)
{
	switch(mistype)
	{
		case AMIS_OCASTRIKE: case AMIS_SWEEP: case AMIS_TARCAP: case AMIS_ESCORT:
			return ATO_OCA;
			break;
		case AMIS_STRIKE: case AMIS_DEEPSTRIKE: case AMIS_STSTRIKE: case AMIS_STRATBOMB:
			return ATO_STRIKE;
			break;
		case AMIS_INTSTRIKE: case AMIS_INT: case AMIS_SAD: case AMIS_BAI:
			return ATO_INTERDICTION;
			break;
		case AMIS_SEADSTRIKE: case AMIS_SEADESCORT:
			return ATO_SEAD;
			break;
		case AMIS_PRPLANCAS: case AMIS_CAS: case AMIS_ONCALLCAS: case AMIS_FAC:
			return ATO_CAS;
			break;
		case AMIS_BARCAP: case AMIS_BARCAP2: case AMIS_HAVCAP: case AMIS_AMBUSHCAP: case AMIS_INTERCEPT: case AMIS_ALERT:
			return ATO_DCA;
			break;
		case AMIS_AWACS: case AMIS_JSTAR: case AMIS_ECM: case AMIS_RECON: case AMIS_BDA: case AMIS_RECONPATROL: case AMIS_PATROL:
			return ATO_CCCI;
			break;
		case AMIS_ASW: case AMIS_ASHIP:
			return ATO_MARITIME;
			break;
		case AMIS_TANKER: case AMIS_AIRLIFT: case AMIS_SAR: case AMIS_RESCAP:
			return ATO_SUPPORT;
			break;
		default:
			return ATO_OTHER;
			break;
	}
}

void ChangeFlightTypeCB (long, short hittype, C_Base *control)
{
	C_ListBox
		*listbox;

	Flight	flight;
	int		camp_id;
	uchar	type;

	if (hittype != C_TYPE_SELECT)
	{
		return;
	}

	listbox = (C_ListBox *) control;

	type = static_cast<uchar>(listbox->GetTextID ());

	camp_id = listbox->GetID ();
	
	flight = (Flight) GetEntityByCampID (camp_id);

	flight->SetUnitMission (type);
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////

C_ATO_Flight *BuildATOFlightInfo(Flight fl)
{
	C_ATO_Flight *newinfo;
	C_ListBox *lbox;
	_TCHAR buffer[200];
	_TCHAR cmpbuf[200];
	CampEntity airbase;
	Unit squadron;
	UnitClassDataType *UnitPtr;
	int mission;

	UnitPtr=fl->GetUnitClassData();
	if(UnitPtr == NULL)
		return(NULL);

	// Create new parent class
	newinfo=new C_ATO_Flight;
	newinfo->Setup(fl->GetCampID(),0);
	newinfo->SetWH(286,52);
	newinfo->InitFlight(gMainHandler);
	newinfo->SetVUID(fl->Id());
	newinfo->SetUserNumber(0,fl->GetTeam());

	// Set BG Area behind Airplane Icon
	newinfo->SetIconBgColor(0x7c5600,0);
	newinfo->SetIconBg(0,0,46,50);
	// Set BG Area behind rest of ATO text
	newinfo->SetFlightBgColor(0,0x7c5600);
	newinfo->SetFlightBg(46,0,240,50);
	// Set Icon Image
	newinfo->SetIcon(23,25,UnitPtr->IconIndex);
	// Select current Task type in List
	newinfo->SetCurrentTask(fl->GetUnitMission());

	// Set TaskList List
	lbox = newinfo->GetTaskCtrl();
	lbox->RemoveAllItems();
	newinfo->SetTask(49,5,NULL);
	mission = fl->GetUnitMission();
	if (TheCampaign.Flags & CAMP_TACTICAL_EDIT)
		{
		// Setup list box with only valid roles
		int	i,added;
		for (i=1,added=0;i<AMIS_OTHER;i++)
			{
			if (IsValidMission(fl->Type()-VU_LAST_ENTITY_TYPE,i))
				{
				lbox->AddItem(i,C_TYPE_ITEM,MissStr[i]);
				if (!added || i == mission)
					{
					lbox->SetValue(i);
					added=1;
					}
				}
			}
		lbox->SetFlagBitOn (C_BIT_ENABLED);
		lbox->SetCallback (ChangeFlightTypeCB);
		}
	else
		{

		lbox->AddItem(mission,C_TYPE_ITEM,MissStr[mission]);
		lbox->SetValue(mission);
		lbox->SetFlagBitOff (C_BIT_ENABLED);
		lbox->SetCallback (NULL);
		}

	// Set Callsign
	GetCallsign(fl, buffer);
	newinfo->SetCallsign(190,5,gStringMgr->GetText(gStringMgr->AddText(buffer)));

	// Set # & Airplane type, Squadron
	squadron=fl->GetUnitSquadron();
	if(squadron)
		squadron->GetName(cmpbuf,40,FALSE);
	else
		_tcscpy(cmpbuf,"Kevin, Which squadron is this?");
	_stprintf(buffer,"%1d %s  \"%s\"",fl->GetTotalVehicles(),GetVehicleName(fl->GetVehicleID(0)),cmpbuf);
	newinfo->SetPlanes(54,20,gStringMgr->GetText(gStringMgr->AddText(buffer)));

	// Set Starting Airbase
	if(squadron)
		airbase=squadron->GetUnitAirbase();
	else
		airbase=fl->GetUnitAirbase();
	if(airbase)
		airbase->GetName(buffer,40,FALSE);
	else
		_tcscpy(buffer,"Kevin, what airbase am I at?");
	newinfo->SetAirbase(54,35,gStringMgr->GetText(gStringMgr->AddText(buffer)));

	return(newinfo);
}

C_ATO_Package *BuildATOPackageInfo(Package pkg)
{
	C_ATO_Package *newinfo;
	_TCHAR buffer[200];
	int mistype;

	// Create new parent class
	newinfo=new C_ATO_Package;
	newinfo->Setup(pkg->GetCampID(),0);
	newinfo->SetWH(300,22);
	newinfo->InitPackage(gMainHandler);
	newinfo->SetVUID(pkg->Id());
	newinfo->SetUserNumber(0,pkg->GetTeam());

	if(pkg->GetFirstUnitElement())
	{
		mistype=pkg->GetFirstUnitElement()->GetUnitMission();
		_stprintf(buffer,"%s %1d - %s",gStringMgr->GetString(TXT_PACKAGE),pkg->GetCampID(),MissStr[mistype]);
		newinfo->SetTitle(0,0,gStringMgr->GetText(gStringMgr->AddText(buffer)));
	}
	else
	{
		_tcscpy(buffer,"Error: Package doesn't have a flight");
		newinfo->SetTitle(0,0,gStringMgr->GetText(gStringMgr->AddText(buffer)));
	}

	newinfo->SetCheckBox(280,0,BID_CHK1_OFF,BID_CHK1_ON);
	return(newinfo);
}

void ToggleATOInfoCB(long,short hittype,C_Base *control)
{
	if(hittype != C_TYPE_LMOUSEUP)
		return;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -