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

📄 campaign.cpp

📁 空战游戏flacon源码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	{
		FindMissionInBriefing(CB_MISSION_SCREEN);
	}
	UpdateMissionWindow(CB_MISSION_SCREEN);

	CheckCampaignFlyButton();

	TheCampaign.GetBullseyeLocation(&x,&y);
	gMapMgr->SetBullsEye(x * FEET_PER_KM,(TheCampaign.TheaterSizeY-y) * FEET_PER_KM);
	SetMapSettings();
	ReadyToPlayMovie=TRUE;
	PlayCampaignMusic();
	StartMovieQ();
}

//
// DO NOT USE THIS FUNCTION FOR CAMPAIGN
//
void TacticalEngagementSetup() // Everything that needs to be done to start the campaign (except loading the window)
{
	C_Window *win;
	C_TreeList *tree;
	C_Bitmap *bmp;
	C_Button *btn;
	C_EditBox *ebox;
	C_ListBox *lbox;
	C_Clock *clk;
	GridIndex x,y;

	InCleanup=0;

	gMusic->ClearQ();
	gMusic->FadeOut_Stop();
	gMusic->ToggleStream();
	StupidHackToCloseCSECT=0;
	StopLookingforMission=0;
	CurMapTool=NULL;

	ClearMapToolStates(TAC_FULLMAP_WIN);
	ClearMapToolStates(TAC_EDIT_WIN);
	ClearMapToolStates(TAC_PUA_MAP);

	SetupMapMgr();
	SetupOOBWindow();
	TallyPlayerSquadrons();
	// Mode 0=Play,1=Edit)
	if(TheCampaign.Flags & CAMP_TACTICAL_EDIT)
	{
		SetupTacEngMenus(1);
		win=gMainHandler->FindWindow(TAC_VC_WIN);
		if(win)
		{
			ebox=(C_EditBox*)win->FindControl(PTS_REQ_VICTORY);
			if(ebox)
				ebox->SetFlagBitOn(C_BIT_ENABLED);
			lbox=(C_ListBox*)win->FindControl(TAC_TYPE);
			if(lbox)
				lbox->SetFlagBitOn(C_BIT_ENABLED);
			clk=(C_Clock*)win->FindControl(START_TIME);
			if(clk)
			{
				clk->SetTime(TheCampaign.GetTEStartTime()/VU_TICS_PER_SECOND);
				clk->SetFlagBitOn(C_BIT_ENABLED);
			}
			clk=(C_Clock*)win->FindControl(TIME_LIMIT);
			if(clk)
			{
				clk->SetTime(TheCampaign.GetTETimeLimitTime()/VU_TICS_PER_SECOND);
				clk->SetFlagBitOn(C_BIT_ENABLED);
			}
			if(gVCTree)
				gVCTree->SetFlagBitOn(C_BIT_ENABLED);
			win->UnHideCluster(100);
		}
	}
	else
	{
		SetupTacEngMenus(0);
		win=gMainHandler->FindWindow(TAC_VC_WIN);
		if(win)
		{
			ebox=(C_EditBox*)win->FindControl(PTS_REQ_VICTORY);
			if(ebox)
				ebox->SetFlagBitOff(C_BIT_ENABLED);
			lbox=(C_ListBox*)win->FindControl(TAC_TYPE);
			if(lbox)
				lbox->SetFlagBitOff(C_BIT_ENABLED);
			clk=(C_Clock*)win->FindControl(START_TIME);
			if(clk)
			{
				clk->SetTime(TheCampaign.GetTEStartTime()/VU_TICS_PER_SECOND);
				clk->SetFlagBitOn(C_BIT_ENABLED);
			}
			clk=(C_Clock*)win->FindControl(TIME_LIMIT);
			if(clk)
			{
				clk->SetTime(TheCampaign.GetTETimeLimitTime()/VU_TICS_PER_SECOND);
				clk->SetFlagBitOn(C_BIT_ENABLED);
			}
			if(gVCTree)
				gVCTree->SetFlagBitOff(C_BIT_ENABLED);
			win->HideCluster(100);
		}
		win=gMainHandler->FindWindow(TAC_END_WIN);
		if(win)
		{
			ebox=(C_EditBox*)win->FindControl(PTS_REQ_VICTORY);
			if(ebox)
				ebox->SetFlagBitOff(C_BIT_ENABLED);
			clk=(C_Clock*)win->FindControl(TIME_LIMIT);
			if(clk)
			{
				clk->SetTime(TheCampaign.GetTETimeLimitTime()/VU_TICS_PER_SECOND);
				clk->SetFlagBitOn(C_BIT_ENABLED);
			}
		}
	}

	win=gMainHandler->FindWindow(TAC_EDIT_WIN);
	if(win)
		SetupMover(win,MAP_POP,gMapMgr_TACmover);

	win=gMainHandler->FindWindow(TAC_VC_WIN);
	if(win)
		SetupMover(win,MAP_POP,gMapMgr_TACmover);

	win=gMainHandler->FindWindow(TAC_PUA_MAP);
	if(win)
	{
		SetupMover(win,MAP_POP,gMapMgr_TACmover);
		gMapMgr->SetWindow(win);
		gMapMgr->SetupOverlay();
	}

	win=gMainHandler->FindWindow(TAC_FULLMAP_WIN);
	if(win)
		SetupMover(win,MAP_POP,gMapMgr_TACmover);
	
	win=gMainHandler->FindWindow(TAC_AIRCRAFT);
	if(win)
	{
		tree=(C_TreeList*)win->FindControl(MISSION_LIST_TREE);
		SetupGPS(tree);
	}

	win=gMainHandler->FindWindow(TAC_EDIT_SCREEN);
	if(win)
	{
		FalconLocalSession->SetPlayerFlight(NULL);
		btn=(C_Button*)win->FindControl(CO_MAIN_CTRL);
		if(btn)
		{
			if(!gCommsMgr->Online())
				btn->SetFlagBitOff(C_BIT_ENABLED);
			else
				btn->SetFlagBitOn(C_BIT_ENABLED);
		}
	}

	win=gMainHandler->FindWindow(TAC_PLAY_SCREEN);
	if(win)
	{
		FalconLocalSession->SetPlayerFlight(NULL);
		btn=(C_Button*)win->FindControl(CO_MAIN_CTRL);
		if(btn)
		{
			if(!gCommsMgr->Online())
				btn->SetFlagBitOff(C_BIT_ENABLED);
			else
				btn->SetFlagBitOn(C_BIT_ENABLED);
		}
	}

	win=gMainHandler->FindWindow(TAC_MISSION_SUA);
	if(win)
	{
		bmp=(C_Bitmap*)win->FindControl(TAC_OVERLAY);
		if(bmp)
			bmp->SetImage(gOccupationMap);
	}

	win=gMainHandler->FindWindow(TAC_MISSION_SUA);
	if(win)
	{
		short i,j;
		C_Blip *blip;

		blip=(C_Blip*)win->FindControl(9000000);
		if(blip)
		{
			for(i=0;i<8;i++)
			{
				if(TeamInfo[i] && TeamInfo[i]->flags & TEAM_ACTIVE)
				{
					for(j=0;j<8;j++)
						blip->SetImage(BLIP_IDS[TeamInfo[i]->GetColor()][j],static_cast<uchar>(i),static_cast<uchar>(j));
				}
				else
				{
					for(j=0;j<8;j++)
						blip->SetImage(BLIP_IDS[0][j],static_cast<uchar>(i),static_cast<uchar>(j));
				}
			}
		}
	}

	InitNewFlash();
	RefreshMapEventList(TAC_MISSION_SUA, 1);

	SetSingle_Comms_Ctrls();
	gSelectedFlightID=FalconNullId;
	gLoadoutFlightID=FalconNullId;
	gActiveFlightID=FalconNullId;
	gActiveWPNum=0;
	gCurrentFlightID=FalconNullId;
	gPlayerFlightID=FalconNullId;
	gPlayerPlane=-1;
	mcnt=0;
	atocnt=0;
	uintcnt=0;
	gLastUpdateGround=0l;
	gLastUpdateAir=0l;

	if (TheCampaign.Flags & CAMP_TACTICAL_EDIT)
	{
		gMoveBattalion = TRUE;
		gGps->SetTeamNo(-1); // Perfect Intel
	}
	else if(tactical_is_training ())
	{
		gMoveBattalion = FALSE;
		gGps->SetTeamNo(-1); // Perfect Intel
		gSelectedTeam=FalconLocalSession->GetTeam();
	}
	else
	{
		gMoveBattalion = FALSE;
		gGps->SetTeamNo(FalconLocalSession->GetTeam()); // See ONLY what is spotted
		gSelectedTeam=FalconLocalSession->GetTeam();
	}

	if(TacLastGroup)
 		do_tactical_debrief();

	gGps->Update();
	gMainHandler->AddUserCallback(TacEngListCB);
	gMainHandler->AddUserCallback(CampaignSoundEventCB);

	CheckCampaignFlyButton();
	if (!gTimeModeServer)
	{
		FindMissionInBriefing(TAC_AIRCRAFT);
	}
	UpdateMissionWindow(TAC_AIRCRAFT);

//	gATOAll->SetMenu (AIRUNIT_MENU);
//	gATOPackage->SetMenu (AIRUNIT_MENU);

	TheCampaign.GetBullseyeLocation(&x,&y);
	gMapMgr->SetBullsEye(x * FEET_PER_KM,(TheCampaign.TheaterSizeY-y) * FEET_PER_KM);
	SetMapSettings();

	InitVCArgLists();
	add_all_vcs_to_ui ();
	gRefreshScoresList=1;
	PlayCampaignMusic();

	if(ShowGameOverWindow)
		PostMessage(gMainHandler->GetAppWnd(),FM_OPEN_GAME_OVER_WIN,game_TacticalEngagement,0);
}

void LoadCampaignWindows()
{
	long ID;
	C_Window *win;
	C_TimerHook *tmr;

	if(CPLoaded) return;

	CampEventSoundID=0;
	if( _LOAD_ART_RESOURCES_)
		gMainParser->LoadImageList("art\\cp_res.lst");
	else
		gMainParser->LoadImageList("art\\cp_art.lst");
	gMainParser->LoadSoundList("art\\cp_snd.lst");
	gMainParser->LoadWindowList("art\\cp_scf.lst");

	ID=gMainParser->GetFirstWindowLoaded();
	while(ID)
	{
		HookupCampaignControls(ID);
		ID=gMainParser->GetNextWindowLoaded();
	}

	LoadCommonWindows();

	CPLoaded++;
	win=gMainHandler->FindWindow(CB_MAIN_SCREEN);
	if(win)
	{
		tmr=new C_TimerHook;
		tmr->Setup(C_DONT_CARE,C_TYPE_TIMER);
		tmr->SetUpdateCallback(GenericTimerCB);
		tmr->SetRefreshCallback(BlinkCommsButtonTimerCB);
		tmr->SetUserNumber(_UI95_TIMER_DELAY_,1*_UI95_TICKS_PER_SECOND_); // Timer activates every 2 seconds (Only when this window is open)

		win->AddControl(tmr);
	}
}

int mcnt=0;
int atocnt=0;
int uintcnt=0;
void CampaignListCB()
{
	if(uintcnt < 1)
	{
		UpdateIntel(CB_INTEL_WIN);
		uintcnt=20;
	}
	uintcnt--;
	if(NewEvents)
	{
		NewEvents=FALSE;
		RefreshEventList();
		RefreshMapEventList(CP_SUA, 0);
	}
	if(mcnt < 1)
	{
		if(gGps)
		{
			Flight flt;
			gGps->Update();
			flt=(Flight)vuDatabase->Find(gCurrentFlightID);
			if(flt)
			{
				if(flt->GetTotalVehicles() < 1 || flt->Dead())
				{
					if (!gTimeModeServer)
					{
						FindMissionInBriefing(CB_MISSION_SCREEN);
					}
					UpdateMissionWindow(CB_MISSION_SCREEN);
				}
			}
			else
			{
				if (!gTimeModeServer)
				{
					FindMissionInBriefing(CB_MISSION_SCREEN);
					UpdateMissionWindow(CB_MISSION_SCREEN);
				}
			}
		}
		if(gMapMgr)
			gMapMgr->RemoveOldWaypoints();

		mcnt=5;
	}
	mcnt--;
}

void TacEngListCB()
{
	if(NewEvents)
	{
		NewEvents=FALSE;
		RefreshMapEventList(TAC_MISSION_SUA, 1);
	}
	if(mcnt < 1)
	{
		if(gGps)
		{
			Flight flt;
			gGps->Update();
			UpdateVCs();
			flt=(Flight)vuDatabase->Find(gCurrentFlightID);
			if(flt)
			{
				if(flt->GetTotalVehicles() < 1 || flt->Dead())
				{
					if (!gTimeModeServer)
					{
						FindMissionInBriefing(TAC_AIRCRAFT);
					}
					UpdateMissionWindow(TAC_AIRCRAFT);
				}
			}
			else
			{
				if (!gTimeModeServer)
				{
					FindMissionInBriefing(TAC_AIRCRAFT);
					UpdateMissionWindow(TAC_AIRCRAFT);
				}
			}
		}
		if(gMapMgr)
			gMapMgr->RemoveOldWaypoints();
		mcnt=5;
	}
	mcnt--;
}

void CampaignSoundEventCB()
{
	if(CampEventSoundID > 0)
	{
		gSoundMgr->PlaySound(CampEventSoundID);
		CampEventSoundID=0;
	}
}

static void OpenFlightPlanWindowCB(long,short hittype,C_Base *control)
{
	C_Window *win;
	WayPoint wp;
	Flight flt;

	if(hittype != C_TYPE_LMOUSEUP)
		return;

	flt=(Flight)vuDatabase->Find(gActiveFlightID);
	if(!flt)
		return;

	win=gMainHandler->FindWindow(FLIGHT_PLAN_WIN);
	if(win)
	{
		if(!(gMainHandler->GetWindowFlags(FLIGHT_PLAN_WIN) & C_BIT_ENABLED))
		{
			wp=flt->GetFirstUnitWP();
			if(wp)
			{
				UpdateWaypointWindowInfo(win,wp,1);
				gMainHandler->EnableWindowGroup(control->GetGroup());
			}
		}
		else
			gMainHandler->WindowToFront(win);
	}
}

// "Fly" button
void CampaignButtonCB(long,short hittype,C_Base *)
{
	Flight	fl;
	int		pilotSlot,entryType;
	WayPoint wp;
	C_Window *win;
	C_Button *btn;

	// Check for correct mouse click and campaign over state
	if(hittype != C_TYPE_LMOUSEUP || TheCampaign.EndgameResult)
		return;

	if(TheCampaign.EndgameResult)
	{
		AreYouSure(TXT_ERROR,TXT_GAME_OVER,NULL,CloseWindowCB);
		return;
	}

	fl = FalconLocalSession->GetPlayerFlight();
	pilotSlot = FalconLocalSession->GetPilotSlot();

	if(!fl || pilotSlot == 255)
	{
		// PETER TODO: Clear mission window's selection TOO!
		FalconLocalSession->SetPlayerFlight(NULL);
		FalconLocalSession->SetPilotSlot(255);
		return;
	}

	ReadyToPlayMovie=FALSE;

	TheCampaign.MissionEvaluator->PreMissionEval(fl,static_cast<uchar>(pilotSlot));

	// KCK HACK TO ISOLATE KNEEBOARD CRASH BUG
//	if (!TheCampaign.MissionEvaluator->player_pilot)
//		*((unsigned int *) 0x00) = 0;
	// END HACK

#ifdef DEBUG
	gPlayerPilotLock = 1;
#endif

	ShiAssert (TheCampaign.MissionEvaluator->player_pilot);

	// Trigger the campaign to compress time and takeoff.
	entryType = CompressCampaignUntilTakeoff(fl);

	wp=fl->GetFirstUnitWP();
	if(wp)
	{
		if(TheCampaign.CurrentTime < wp->GetWPArrivalTime())
		{

			// Open Countdown window if we're waiting for takeoff
			win=gMainHandler->FindWindow(CP_COUNTDOWN_WIN);
			if(win && entryType < 0)
			{
				gMainHandler->EnterCritical();

				btn=(C_Button*)win->FindControl(WAIT_TAXI);
				if(btn)
				{
					if ((gCommsMgr) && (gCommsMgr->Online ()))
					{
						btn->SetFlagBitOn (C_BIT_INVISIBLE);
					}
					else
					{
						btn->SetFlagBitOff (C_BIT_INVISIBLE);
						if(PlayerOptions.GetTaxiFlag())
							btn->SetState(1);
						else
							btn->SetState(0);
					}
					btn->Refresh();
				}
				btn=(C_Button*)win->FindControl(WAIT_TAKEOFF);
				if(btn)
				{
					if ((gCommsMgr) && (gCommsMgr->Online ()))
					{
						btn->SetFlagBitOn (C_BIT_INVISIBLE);
					}
					else
					{
						btn->SetFlagBitOff (C_BIT_INVISIBLE);
						if(PlayerOptions.GetTaxiFlag())
							btn->SetState(0);
						else
							btn->SetState(1);
					}
					btn->Refresh();
				}

⌨️ 快捷键说明

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