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

📄 planner.cpp

📁 空战游戏flacon源码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
/*

  UI Planner stuff Here

*/

#include <windows.h>
#include "Graphics\Include\RViewPnt.h"
#include "Graphics\Include\render3d.h"
#include "Graphics\Include\drawBSP.h"
#include "Graphics\Include\matrix.h"
#include "Graphics\Include\loader.h"
#include "entity.h"
#include "squadron.h"
#include "cmpclass.h"
#include "flight.h"
#include "find.h"
#include "cbsplist.h"
#include "cstores.h"
#include "cbsplist.h"
#include "chandler.h"
#include "ui95_ext.h"
#include "c3dview.h"
#include "userids.h"
#include "textids.h"
#include "MissEval.h"
#include "falcsess.h"
#include "f4find.h"
#include "playerop.h"
#include "railinfo.h"

extern int PlannerLoaded;
extern C_Handler *gMainHandler;
extern C_Parser *gMainParser;
extern VU_ID gSelectedFlightID;
extern VU_ID gLoadoutFlightID;
extern VU_ID gPlayerFlightID;
extern VU_ID gActiveFlightID;
extern short gActiveWPNum;
extern Render3D *UIrend3d;
extern long PlaneEditList[];
extern long FirstPlane;
extern LoadoutStruct gCurStores[];
extern long HardPoints;
extern long PlaneCount;
extern BOOL ReadyToPlayMovie;
extern RailList gCurRails[4];
extern VehicleClassDataType *gVCPtr;
extern int gVehID;

extern OBJECTINFO Object,Recon;

void UI_Help_Guide_CB(long ID,short hittype,C_Base *ctrl);
void SetBullsEye(C_Window *);
void SetSlantRange(C_Window *);
void SetHeading(C_Window *);
extern RViewPoint *UIviewPoint;
extern C_TreeList *gATOAll,*gATOPackage,*gOOBTree;
void RedrawTreeWindowCB(long ID,short hittype,C_Base *control);
void refresh_waypoint (WayPointClass * wp);
BOOL ReconListSortCB(TREELIST *list,TREELIST *newitem);
void ReconArea(float x,float y,float range);
void BuildTargetList(float x,float y,float range);
void AssignVCCB(long ID,short hittype,C_Base *control);
void CloseReconWindowCB(long ID,short hittype,C_Base *control);
void UpdateRemoteCompression();

// 3d Object loading stuff
void PositionCamera(OBJECTINFO *Info,C_Window *win,long client);
void LoadFlight(VU_ID flightID);
void SetPlaneToArm(long Plane,BOOL ArmIt);
void SetupLoadoutDisplay();
BOOL GetRackAndWeapon(VehicleClassDataType* vc,short VehID,short WeaponID,short count,short hardpoint,short center,RailInfo *rail);
void LoadHardPoint(long plane,long hp,long center);
void ClearHardPoint(long plane,long hardpoint,long center,RailInfo *rail);
void LoadHardPoint(long plane,long hardpoint,long center,RailInfo *rail);
void ApplyWaypointChangesCB(long ID,short hittype,C_Base *control);
void LoadAFile(long TitleID,_TCHAR *filespec,_TCHAR *excludelist[],void (*YesCB)(long,short,C_Base*),void (*NoCB)(long,short,C_Base*));
void SaveAFile(long TitleID,_TCHAR *filespec,_TCHAR *excludelist[],void (*YesCB)(long,short,C_Base*),void (*NoCB)(long,short,C_Base*));
void ViewTimerCB(long ID,short hittype,C_Base *control);
void ViewObjectCB(long ID,short hittype,C_Base *control);
void MoveViewTimerCB(long ID,short hittype,C_Base *control);
void AssignTargetCB(long ID,short hittype,C_Base *control);
void DisplayView(long ID,short hittype,C_Base *control);
void ViewTimerAnimCB(long ID,short hittype,C_Base *control);
void CancelCampaignCompression (void);

void GetObjectivesNear(float x,float y,float range);
void SetupMunitionsWindow(VU_ID FlightID);
void SetCurrentLoadout();
void RestoreStores(C_Window *win);
void ClearStores(C_Window *win);
void UseStores();
void MakeStoresList(C_Window *win,long client);
void CloseWindowCB(long ID,short hittype,C_Base *control);
void ViewObjectCB(long ID,short hittype,C_Base *control);
void HookupPlannerControls(long ID);
void ToggleATOInfoCB(long ID,short hittype,C_Base *control);
void DelSTRFileCB(long ID,short hittype,C_Base *control);
void DelDFSFileCB(long ID,short hittype,C_Base *control);
void DelLSTFileCB(long ID,short hittype,C_Base *control);
void DelCamFileCB(long ID,short hittype,C_Base *control);
void DelTacFileCB(long ID,short hittype,C_Base *control);
void DelTGAFileCB(long ID,short hittype,C_Base *control);
void DelVHSFileCB(long ID,short hittype,C_Base *control);
void DelKeyFileCB(long ID,short hittype,C_Base *control);
void SetDeleteCallback(void (*cb)(long,short,C_Base*));
void GotoFlightCB(long ID,short hittype,C_Base *control);
void GotoPrevWaypointCB(long ID,short hittype,C_Base *control);
void GotoNextWaypointCB(long ID,short hittype,C_Base *control);
void set_waypoint_climb_mode(long ID,short hittype,C_Base *control);
void set_waypoint_enroute_action(long ID,short hittype,C_Base *control);
void set_waypoint_action(long ID,short hittype,C_Base *control);
void set_waypoint_formation(long ID,short hittype,C_Base *control);
void MinMaxWindowCB(long ID,short hittype,C_Base *control);
void MoveRendererCB(C_Window *win);
void PlaceLoadedWeapons(LoadoutStruct *loadout);
void MoveRendererClient0CB(C_Window *win);
void DeleteGroupList(long ID);
void ChangeTOSCB(long ID,short hittype,C_Base *control);
void ChangeTOSLockCB(long ID,short hittype,C_Base *control);
void ChangeAirspeedCB(long ID,short hittype,C_Base *control);
void ChangeAirspeedLockCB(long ID,short hittype,C_Base *control);
void ChangeAltCB(long ID,short hittype,C_Base *control);
void ChangePatrolCB(long ID,short hittype,C_Base *control);
void ToggleOOBTeamCB(long ID,short hittype,C_Base *control);
void ToggleOOBFilterCB(long ID,short hittype,C_Base *control);
void RemoveGPSItemCB(TREELIST *item);
void AreYouSure(long TitleID,long MessageID,void (*OkCB)(long,short,C_Base*),void (*CancelCB)(long,short,C_Base*));
void AreYouSure(long TitleID,_TCHAR *text,void (*OkCB)(long,short,C_Base*),void (*CancelCB)(long,short,C_Base*));
void SquadronAirUnitCB(long ID,short hittype,C_Base *control);
void PilotAirUnitCB(long ID,short hittype,C_Base *control);
void OpenPriorityCB(long ID,short hittype,C_Base *control);
void GetGroundUnitsNear(float x,float y,float range);
void OOBFindCB(long ID,short hittype,C_Base *control);
void OOBInfoCB(long ID,short hittype,C_Base *control);
void SquadronFindCB(long ID,short hittype,C_Base *control);
void CloseAllRenderers(long winID);
void UpdateInventoryCount();
// This stuff used for targetting
void (*OldReconCWCB)(long,short,C_Base*)=NULL;
VU_ID FeatureID=FalconNullId;
long FeatureNo=0;
extern C_TreeList *TargetTree;
extern C_TreeList *gVCTree;

extern long gFlightOverloaded;

void LoadPlannerWindows()
{
	long ID;
	C_Window *win;
	C_TimerHook *tmr;
	if(PlannerLoaded) return;

	if( _LOAD_ART_RESOURCES_)
		gMainParser->LoadImageList("art\\pln_res.lst");
	else
		gMainParser->LoadImageList("art\\pln_art.lst");
	gMainParser->LoadSoundList("art\\pln_snd.lst");
	gMainParser->LoadWindowList("art\\pln_scf.lst");

	ID=gMainParser->GetFirstWindowLoaded();
	while(ID)
	{
		HookupPlannerControls(ID);
		ID=gMainParser->GetNextWindowLoaded();
	}
	PlannerLoaded++;
	win=gMainHandler->FindWindow(RECON_WIN);
	if(win)
	{
		tmr=new C_TimerHook;
		tmr->Setup(C_DONT_CARE,C_TYPE_NORMAL);
		tmr->SetClient(0);
		tmr->SetXY(win->ClientArea_[0].left,win->ClientArea_[0].top);
		tmr->SetW(win->ClientArea_[0].right - win->ClientArea_[0].left);
		tmr->SetH(win->ClientArea_[0].bottom - win->ClientArea_[0].top);
		tmr->SetRefreshCallback(ViewTimerCB);
		tmr->SetDrawCallback(DisplayView);
		tmr->SetFlagBitOff(C_BIT_TIMER);
		tmr->SetReady(1);
		win->AddControl(tmr);

		tmr=new C_TimerHook;
		tmr->Setup(C_DONT_CARE,C_TYPE_TIMER);
		tmr->SetUpdateCallback(MoveViewTimerCB);
		tmr->SetUserNumber(_UI95_TIMER_DELAY_,2);
		tmr->SetFlagBitOn(C_BIT_ABSOLUTE);
		win->AddControl(tmr);

		// Add Drag CB

	}
	win=gMainHandler->FindWindow(MUNITIONS_WIN);
	if(win)
	{
		tmr=new C_TimerHook;
		tmr->Setup(C_DONT_CARE,C_TYPE_NORMAL);
		tmr->SetClient(2);
		tmr->SetXY(win->ClientArea_[2].left,win->ClientArea_[2].top);
		tmr->SetW(win->ClientArea_[2].right - win->ClientArea_[2].left);
		tmr->SetH(win->ClientArea_[2].bottom - win->ClientArea_[2].top);
		tmr->SetRefreshCallback(ViewTimerCB);
		tmr->SetDrawCallback(ViewObjectCB);
		tmr->SetFlagBitOff(C_BIT_TIMER);
		tmr->SetReady(1);
		win->AddControl(tmr);

		tmr=new C_TimerHook;
		tmr->Setup(C_DONT_CARE,C_TYPE_NORMAL);
		tmr->SetClient(2);
		tmr->SetXY(win->ClientArea_[2].left,win->ClientArea_[2].top);
		tmr->SetW(win->ClientArea_[2].right - win->ClientArea_[2].left);
		tmr->SetH(win->ClientArea_[2].bottom - win->ClientArea_[2].top);
		tmr->SetUpdateCallback(ViewTimerAnimCB);
		tmr->SetUserNumber(_UI95_TIMER_DELAY_,1);
		tmr->SetReady(1);
		win->AddControl(tmr);
	}
}


static void SpinViewCB(long ID,short hittype,C_Base *control)
{
	C_Button *btn;
	if(hittype != C_TYPE_LMOUSEUP) return;
	switch(ID)
	{
		case LEFT_SPIN:
			if(!((C_Button*)control)->GetState())
			{
				Recon.Direction=2;
				((C_Button*)control)->SetState(1);
				((C_Button*)control)->Refresh();
			}
			else
			{
				Recon.Direction=0;
				((C_Button*)control)->SetState(0);
				((C_Button*)control)->Refresh();
			}
			btn=(C_Button *)control->Parent_->FindControl(RIGHT_SPIN);
			if(btn)
			{
				btn->SetState(0);
				btn->Refresh();
			}
			break;
		case RIGHT_SPIN:
			if(!((C_Button*)control)->GetState())
			{
				Recon.Direction=-2;
				((C_Button*)control)->SetState(1);
				((C_Button*)control)->Refresh();
			}
			else
			{
				Recon.Direction=0;
				((C_Button*)control)->SetState(0);
				((C_Button*)control)->Refresh();
			}
			btn=(C_Button *)control->Parent_->FindControl(LEFT_SPIN);
			if(btn)
			{
				btn->SetState(0);
				btn->Refresh();
			}
			break;
	}
}

static void OverHeadCB(long,short hittype,C_Base *control)
{
	if(hittype != C_TYPE_LMOUSEUP) return;
	Recon.Pitch=90;
	PositionCamera(&Recon,control->Parent_,0);
}

static void ViewPannerCB(long,short hittype,C_Base *control)
{
	float dx,dy;
	C_Panner *pnr;
	if(hittype != C_TYPE_LMOUSEUP && hittype != C_TYPE_REPEAT)
		return;

	pnr=(C_Panner*)control;
	dx=static_cast<float>(pnr->GetHRange());
	dy=static_cast<float>(pnr->GetVRange());

	if(dx < 0) dx=-2.5f;
	if(dx > 0) dx=2.5f;
	if(dy < 0) dy=-2.5f;
	if(dy > 0) dy=2.5f;

	if(dx)
	{
		Recon.Heading -= dx;
		if(Recon.Heading > 360.0f) Recon.Heading-=360.0f;
		if(Recon.Heading < 0.0f) Recon.Heading+=360.0f;
	}
	if(dy)
	{
		Recon.Pitch -= dy;
		if(Recon.Pitch > 90.0f) Recon.Pitch=90.0f;
		if(Recon.Pitch < 10.0f) Recon.Pitch=10.0f;
	}

	PositionCamera(&Recon,control->Parent_,0);
}

static void ZoomPannerCB(long,short hittype,C_Base *control)
{
	C_Panner *pnr=(C_Panner*)control;
	C_Text *txt;
	_TCHAR buffer[20];
	int dx;
	if(hittype != C_TYPE_LMOUSEUP && hittype != C_TYPE_REPEAT)
		return;

	dx=pnr->GetVRange();

	Recon.Distance += dx*10;

	if(Recon.Distance < Recon.MinDistance)
		Recon.Distance=Recon.MinDistance;
	if(Recon.Distance > Recon.MaxDistance)
		Recon.Distance=Recon.MaxDistance;

	txt=(C_Text*)control->Parent_->FindControl(SLANT_RANGE);
	if(txt)
	{
		txt->Refresh();
		_stprintf(buffer,"%1ld %s",(long)Recon.Distance,gStringMgr->GetString(TXT_FT));
		txt->SetText(buffer);
		txt->Refresh();
	}

	PositionCamera(&Recon,control->Parent_,0);
}

void AssignTargetCB(long ID,short hittype,C_Base *control)
{
	Flight flight;
	WayPoint wp;
	long i;

	if(hittype != C_TYPE_LMOUSEUP)
		return;

	CloseReconWindowCB(ID,hittype,control);

	if(FeatureID != FalconNullId && FeatureNo >= 0)
	{
		// Set Target
		flight=(Flight)vuDatabase->Find(gActiveFlightID);
		if(flight)
		{
			i=1;
			wp=flight->GetFirstUnitWP();
			while(i < gActiveWPNum && wp)
			{
				wp=wp->GetNextWP();
				i++;
			}
			if(wp)
			{
				wp->SetWPTarget(FeatureID);
				wp->SetWPTargetBuilding(static_cast<uchar>(FeatureNo));
				refresh_waypoint(wp);
			}
		}
	}
}

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

	gMainHandler->HideWindow(control->Parent_);

	Flags1=gMainHandler->GetWindowFlags(RECON_WIN);
	Flags2=gMainHandler->GetWindowFlags(RECON_LIST_WIN);

	if(!(Flags1 & C_BIT_ENABLED) && !(Flags2 & C_BIT_ENABLED))
	{
		if(gUIViewer)
		{
			gUIViewer->Cleanup();
			delete gUIViewer;
			gUIViewer=NULL;
		}
	}
}

void TgtAssignCWCB(long ID,short hittype,C_Base *control)
{
	C_Base *btn;

	if(hittype != C_TYPE_LMOUSEUP)
		return;

	btn=control->Parent_->FindControl(SET_TARGET);
	if(btn)
		btn->SetFlagBitOn(C_BIT_INVISIBLE);

	btn=control->Parent_->FindControl(SET_VC);
	if(btn)
		btn->SetFlagBitOn(C_BIT_INVISIBLE);

	control->SetCallback(OldReconCWCB);
	OldReconCWCB=NULL;

	CloseReconWindowCB(ID,hittype,control);
}

static void OpenReconWindowCB(long,short hittype,C_Base *)
{
	C_Window *win;
	C_Base *btn;
	Flight flight;
	WayPoint wp;
	int i;
	float x,y,z;

	if(hittype != C_TYPE_LMOUSEUP)
		return;

	SetCursor(gCursors[CRSR_WAIT]);

	win=gMainHandler->FindWindow(RECON_LIST_WIN);
	if(win)

⌨️ 快捷键说明

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