📄 planner.cpp
字号:
/*
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 + -