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

📄 instant.cpp

📁 空战游戏flacon源码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
			if(btn->GetState())
				InstantActionSettings.PilotLevel=_PILOT_LEVEL_VETERAN_;
		}
		btn=(C_Button *)win->FindControl(IA_LVL_ACE_CTRL);
		if(btn)
		{
			if(btn->GetState())
				InstantActionSettings.PilotLevel=_PILOT_LEVEL_ACE_;
		}

		InstantActionSettings.SamSites=_NO_SAM_SITES_;
		btn=(C_Button *)win->FindControl(IA_AD_SAMS_CTRL);
		if(btn)
		{
			if(btn->GetState())
				InstantActionSettings.SamSites=_SAM_SITES_;
		}
		InstantActionSettings.AAASites=_NO_AAA_SITES_;
		btn=(C_Button *)win->FindControl(IA_AD_AAA_CTRL);
		if(btn)
		{
			if(btn->GetState())
				InstantActionSettings.AAASites=_AAA_SITES_;
		}
	}
	win=gMainHandler->FindWindow(IA_MAP_WIN);
	if(win)
	{
		crsr=(C_Cursor *)win->FindControl(IA_MAP_CURSOR);
		if(crsr)
		{
			XPos=(float)(crsr->GetX()+crsr->GetW()/2-crsr->MinX_) * 4096.0f / (float)(crsr->MaxX_-crsr->MinX_)*256.0f;
			YPos=(float)((crsr->MaxY_-crsr->MinY_) - (crsr->GetY()+crsr->GetH()/2-crsr->MinY_)) * 4096.0f / (float)(crsr->MaxY_-crsr->MinY_)*256.0f;

			instant_action::set_start_position (YPos*FEET_PER_KM/1000.0f, XPos*FEET_PER_KM/1000.0f);
		}
	}

	win=gMainHandler->FindWindow(IA_SUA);
	if(win)
	{
		clk=(C_Clock*)win->FindControl(TIME_ID);
		if(clk)
			instant_action::set_start_time (clk->GetTime());
		else
			instant_action::set_start_time (static_cast<long>(12.0F * 60.0F * 60.0F));
	}

	ShiAssert(!TheCampaign.IsLoaded());

	// Load a campaign here
	strcpy(gUI_CampaignFile,"Instant");

	ShiAssert(gameCompressionRatio == 0);

	TheCampaign.SetOnlineStatus( 0 );
	TheCampaign.LoadCampaign(game_InstantAction, gUI_CampaignFile);

   instant_action::set_start_wave (InstantActionSettings.PilotLevel);
   instant_action::create_player_flight ();

	PostMessage(gMainHandler->GetAppWnd(),FM_START_INSTANTACTION,0,0);
}

static void InsertScoreCB(long,short hittype,C_Base *)
{
	C_Window *win;
	int i,j,idx;
	C_EditBox *ebox;
	C_Text *txt;
	_TCHAR buf[MAX_NAME_LENGTH+1];

	if(hittype != C_TYPE_LMOUSEUP)
		return;

	i=0;
	while(i < MAX_SCORES && TotalScore <= Scores.Scores[i].Score && Scores.Scores[i].Name[0] != 0)
		i++;

	idx=MAX_SCORES;
	if(i < MAX_SCORES)
	{
		for(j=MAX_SCORES-2;j>=i;j--)
		{
			memset(Scores.Scores[j+1].Name,0,sizeof(_TCHAR)*MAX_NAME_LENGTH);
			_tcscpy(Scores.Scores[j+1].Name,Scores.Scores[j].Name);
			Scores.Scores[j+1].Score=Scores.Scores[j].Score;
		}
		idx=i;
		memset(Scores.Scores[i].Name,0,sizeof(_TCHAR)*MAX_NAME_LENGTH);
		Scores.Scores[i].Name[0]=' ';
		Scores.Scores[i].Score=TotalScore;

		ebox=NULL;
		win=gMainHandler->FindWindow(IA_HS_WIN);
		if(win)
		{
			ebox=(C_EditBox *)win->FindControl(IA_HS_NAME_EDIT);
			win->SetControl(0);
			gMainHandler->DisableWindowGroup(win->GetGroup());
		}
		if(ebox)
		{
			_tcsncpy(Scores.Scores[i].Name,ebox->GetText(),MAX_NAME_LENGTH);
			if(!Scores.Scores[i].Name[0])
			{
				Scores.Scores[i].Name[0]=' ';
				Scores.Scores[i].Name[1]=0;
			}
		}
		else
		{
			Scores.Scores[i].Name[0]=' ';
			Scores.Scores[i].Name[1]=0;
		}

		win=gMainHandler->FindWindow(IA_SH_WIN);
		if(win)
		{
			for(i=0;i<MAX_SCORES;i++)
			{
				if(Scores.Scores[i].Name[0] != 0)
				{
					// Set Name
					txt=(C_Text *)win->FindControl(TEXT_1+i*2);
					if(txt)
					{
						txt->SetText(Scores.Scores[i].Name);
						if(i == idx)
							txt->SetFGColor(0x00ff00);
						else
							txt->SetFGColor(0xffffff);
					}
					// Set Score
					txt=(C_Text *)win->FindControl(TEXT_1+i*2+1);
					if(txt)
					{
						_stprintf(buf,"%1ld",Scores.Scores[i].Score);
						txt->SetText(AddCommas(buf));
						if(i == idx)
							txt->SetFGColor(0x00ff00);
						else
							txt->SetFGColor(0xffffff);
					}
				}
			}
		}
		win->RefreshWindow();
		SaveHighScores();
	}
	win=gMainHandler->FindWindow(IA_DBRF_WIN);
	if(win)
		gMainHandler->EnableWindowGroup(win->GetGroup());
}

static void HighScoreKeyboardCB(long ID,short DKKey,C_Base *control)
{
	if(DKKey == DIK_RETURN)
		InsertScoreCB(ID,C_TYPE_LMOUSEUP,control);
}

void ChangeTimeCB(long,short hittype,C_Base *control)
{
	C_Clock *clk;
	short dir=0;
	long value,flag;

	if(hittype != C_TYPE_LMOUSEUP && hittype != C_TYPE_REPEAT)
		return;

	dir=static_cast<short>(control->GetUserNumber(1));

	clk=(C_Clock*)control->Parent_->FindControl(control->GetUserNumber(0));
	if(clk)
	{
		flag=0;
		if(clk->GetCurrentCtrl())
		{
			value=clk->GetLast()+dir;
			if(value < clk->GetCurrentCtrl()->GetMinInteger())
			{
				value=clk->GetCurrentCtrl()->GetMaxInteger();
				flag=clk->GetCurrentCtrl()->GetID();
			}
			else if(value > clk->GetCurrentCtrl()->GetMaxInteger())
			{
				value=clk->GetCurrentCtrl()->GetMinInteger();
				flag=clk->GetCurrentCtrl()->GetID();
			}
			clk->SetLast(value);
		}
		else
		{
			value=clk->GetSecond()+dir;
			if(value < clk->GetSecondCtrl()->GetMinInteger())
			{
				value=clk->GetSecondCtrl()->GetMaxInteger();
				flag=clk->GetSecondCtrl()->GetID();
			}
			else if(value > clk->GetSecondCtrl()->GetMaxInteger())
			{
				value=clk->GetSecondCtrl()->GetMinInteger();
				flag=clk->GetSecondCtrl()->GetID();
			}
			clk->SetSecond(value);
		}
		if(flag)
		{
			if(flag == 4)
			{
				flag=0;
				value=clk->GetMinute()+dir;
				if(value < clk->GetMinuteCtrl()->GetMinInteger())
				{
					value=clk->GetMinuteCtrl()->GetMaxInteger();
					flag=clk->GetMinuteCtrl()->GetID();
				}
				else if(value > clk->GetMinuteCtrl()->GetMaxInteger())
				{
					value=clk->GetMinuteCtrl()->GetMinInteger();
					flag=clk->GetMinuteCtrl()->GetID();
				}
				clk->SetMinute(value);
			}
			if(flag == 3)
			{
				flag=0;
				value=clk->GetHour()+dir;
				if(value < clk->GetHourCtrl()->GetMinInteger())
				{
					value=clk->GetHourCtrl()->GetMaxInteger();
					flag=clk->GetHourCtrl()->GetID();
				}
				else if(value > clk->GetHourCtrl()->GetMaxInteger())
				{
					value=clk->GetHourCtrl()->GetMinInteger();
					flag=clk->GetHourCtrl()->GetID();
				}
				clk->SetHour(value);
			}
			if(flag == 2)
			{
				if(clk->GetDayCtrl())
				{
					flag=0;
					value=clk->GetDay()+dir;
					if(value < clk->GetDayCtrl()->GetMinInteger()-1)
					{
						value=clk->GetDayCtrl()->GetMaxInteger()-1;
						flag=clk->GetDayCtrl()->GetID();
					}
					else if(value > clk->GetDayCtrl()->GetMaxInteger()-1)
					{
						value=clk->GetDayCtrl()->GetMinInteger()-1;
						flag=clk->GetDayCtrl()->GetID();
					}
					clk->SetDay(value);
				}
			}

		}
		clk->Refresh();
	}
}

static void HookupIAControls(long ID)
{
	C_Window *winme;
	C_Button *ctrl;
	C_EditBox *ebox;
	C_Clock *clk;

	winme=gMainHandler->FindWindow(ID);

	if(winme == NULL)
		return;

	// Hook up IDs here

	// Time/Date CB
	clk=(C_Clock *)winme->FindControl(TIME_ID);
	if(clk)
	{
		clk->SetHour(12);
		clk->SetMinute(0);
		clk->SetSecond(0);
		clk->Refresh();
	}

	// Hook up Instant Action Buttons
	// Set Fly Button for IA
	ctrl=(C_Button *)winme->FindControl(SINGLE_FLY_CTRL);
	if(ctrl)
		ctrl->SetCallback(InstantActionFlyCB);

	ctrl=(C_Button *)winme->FindControl(MUNITIONS_BUTTON);
	if(ctrl)
		ctrl->SetCallback(OpenIAMunitionsCB);

	// editbox for high score callback
	ebox=(C_EditBox *)winme->FindControl(IA_HS_NAME_EDIT);
	if(ebox)
	{
		ebox->SetCallback(HighScoreKeyboardCB);
		if(!*ebox->GetText())
		{
			ebox->SetText(UI_logbk.Name());
		}
	}
	// Hook up Close Button
	ctrl=(C_Button *)winme->FindControl(CLOSE_WINDOW);
	if(ctrl)
		ctrl->SetCallback(CloseWindowCB);

	ctrl=(C_Button *)winme->FindControl(TIME_EARLIER);
	if(ctrl)
		ctrl->SetCallback(ChangeTimeCB);

	ctrl=(C_Button *)winme->FindControl(TIME_LATER);
	if(ctrl)
		ctrl->SetCallback(ChangeTimeCB);

// Help GUIDE thing
	ctrl=(C_Button*)winme->FindControl(UI_HELP_GUIDE);
	if(ctrl)
		ctrl->SetCallback(UI_Help_Guide_CB);
}

static void SetIAStartup(C_Window *win)
{
	C_Button *btn;

	btn=(C_Button *)win->FindControl(IA_MIS_FTR_CTRL);
	if(btn)
	{
		if(InstantActionSettings.MissionType == _MISSION_AIR_TO_AIR_)
			btn->SetState(1);
		else
			btn->SetState(0);
		btn->Refresh();
	}
	btn=(C_Button *)win->FindControl(IA_MIS_MUD_CTRL);
	if(btn)
	{
		if(InstantActionSettings.MissionType == _MISSION_AIR_TO_GROUND_)
			btn->SetState(1);
		else
			btn->SetState(0);
		btn->Refresh();
	}

	btn=(C_Button *)win->FindControl(IA_LVL_NOVICE_CTRL);
	if(btn)
	{
		if(InstantActionSettings.PilotLevel == _PILOT_LEVEL_NOVICE_)
			btn->SetState(1);
		else
			btn->SetState(0);
		btn->Refresh();
	}
	btn=(C_Button *)win->FindControl(IA_LVL_CADET_CTRL);
	if(btn)
	{
		if(InstantActionSettings.PilotLevel == _PILOT_LEVEL_CADET_)
			btn->SetState(1);
		else
			btn->SetState(0);
		btn->Refresh();
	}
	btn=(C_Button *)win->FindControl(IA_LVL_ROOKIE_CTRL);
	if(btn)
	{
		if(InstantActionSettings.PilotLevel == _PILOT_LEVEL_ROOKIE_)
			btn->SetState(1);
		else
			btn->SetState(0);
		btn->Refresh();
	}
	btn=(C_Button *)win->FindControl(IA_LVL_VETERAN_CTRL);
	if(btn)
	{
		if(InstantActionSettings.PilotLevel == _PILOT_LEVEL_VETERAN_)
			btn->SetState(1);
		else
			btn->SetState(0);
		btn->Refresh();
	}
	btn=(C_Button *)win->FindControl(IA_LVL_ACE_CTRL);
	if(btn)
	{
		if(InstantActionSettings.PilotLevel == _PILOT_LEVEL_ACE_)
			btn->SetState(1);
		else
			btn->SetState(0);
		btn->Refresh();
	}

	btn=(C_Button *)win->FindControl(IA_AD_SAMS_CTRL);
	if(btn)
	{
		if(InstantActionSettings.SamSites == _SAM_SITES_)
			btn->SetState(1);
		else
			btn->SetState(0);
		btn->Refresh();
	}
	btn=(C_Button *)win->FindControl(IA_AD_AAA_CTRL);
	if(btn)
	{
		if(InstantActionSettings.AAASites == _AAA_SITES_)
			btn->SetState(1);
		else
			btn->SetState(0);
		btn->Refresh();
	}
}

static void SetMapStartup(C_Window *win)
{
	C_Cursor *crsr;
	float XPos,YPos, start_x, start_y;

	crsr=(C_Cursor *)win->FindControl(IA_MAP_CURSOR);
	if(crsr)
	{
		instant_action::get_start_position (start_x, start_y);

		XPos=start_y/(FEET_PER_KM/1000.0f*4096.0f*256.0f);
		XPos*=((float)(crsr->MaxX_-crsr->MinX_));
		YPos=1.0f-(start_x/(FEET_PER_KM/1000.0f*4096.0f*256.0f));
		YPos*=((float)(crsr->MaxY_-crsr->MinY_));
		XPos-=crsr->GetW()/2;
		YPos-=crsr->GetH()/2;
		if(XPos < 0.0f)
			XPos=0.0f;
		if(XPos > (float)(win->ClientArea_[0].right-crsr->GetW()))
			XPos=(float)win->ClientArea_[0].right-crsr->GetW();
		if(YPos < 0.0f)
			YPos=0.0f;
		if(YPos > (float)(win->ClientArea_[0].bottom-crsr->GetH()))
			YPos=(float)win->ClientArea_[0].bottom-crsr->GetH();

		crsr->SetXY((int)XPos+crsr->MinX_,(int)YPos+crsr->MinY_);
		win->RefreshWindow();
	}
}

/*
	for(y=0;y<EVT_MESSAGE_BITS;y++)
		mask[y]=0;

	mask[WeaponFireMsg >> 3] |= 0x01 << (WeaponFireMsg & 0x0007);
	mask[DeathMessage >> 3] |= 0x01 << (DeathMessage & 0x0007);
	mask[DamageMsg >> 3] |= 0x01 << (DamageMsg & 0x0007);
	mask[MissileEndMsg >> 3] |= 0x01 << (MissileEndMsg & 0x0007);
	mask[LandingMessage >> 3] |= 0x01 << (LandingMessage & 0x0007);
	mask[EjectMsg >> 3] |= 0x01 << (EjectMsg & 0x0007);
	mask[PlayerStatusMsg >> 3] |= 0x01 << (PlayerStatusMsg & 0x0007);

*/

static void ProcessKills(C_Window *win)
{
	int y,fh;
	C_Text *txt;
	_TCHAR buffer[100];
	kill_list *cur;
	long UseFont;

	y=0;
	UseFont=win->Font_;
	fh=gFontList->GetHeight(UseFont);

	if(AircraftKills)
	{
		cur=AircraftKills;
		while(cur)
		{
			_stprintf(buffer,"%s",GetClassName (cur->id));
			txt=new C_Text;
			txt->Setup(C_DONT_CARE,C_TYPE_LEFT);
			txt->SetText(buffer);
			txt->SetXY(20,y);
			txt->SetFGColor(0xf0f0f0);
			txt->SetFont(UseFont);
			txt->SetFlagBitOn(C_BIT_LEFT);
			txt->SetClient(2);
			win->AddControl(txt);

			_stprintf(buffer,"(%1d)",cur->num);
			txt=new C_Text;
			txt->Setup(C_DONT_CARE,C_TYPE_LEFT);
			txt->SetFixedWidth(_tcsclen(buffer)+1);
			txt->SetText(buffer);
			txt->SetXY(130,y);
			txt->SetFGColor(0xf0f0f0);
			txt->SetFont(UseFont);
			txt->SetFlagBitOn(C_BIT_LEFT);
			txt->SetClient(2);
			win->AddControl(txt);

			_stprintf(buffer,"%1ld",cur->points);
			AddCommas(buffer);
			txt=new C_Text;
			txt->Setup(C_DONT_CARE,C_TYPE_RIGHT);
			txt->SetFixedWidth(_tcsclen(buffer)+1);
			txt->SetText(buffer);
			txt->SetXY(215,y);
			txt->SetFGColor(0x00ff00);
			txt->SetFont(UseFont);
			txt->SetFlagBitOn(C_BIT_RIGHT);
			txt->SetClient(2);
			win->AddControl(txt);

			TotalScore+=cur->points;

			y+=fh;
			cur=cur->next;
		}
		RemoveAircraftKillsList();
	}

	if(ObjectKills)
	{
		cur=ObjectKills;
		while(cur)
		{
			_stprintf(buffer,"%s",GetClassName (cur->id));
			txt=new C_Text;
			txt->Setup(C_DONT_CARE,C_TYPE_LEFT);
			txt->SetText(buffer);
			txt->SetXY(20,y);
			txt->SetFGColor(0xf0f0f0);
			txt->SetFont(UseFont);
			txt->SetFlagBitOn(C_BIT_LEFT);
			txt->SetClient(2);
			win->AddControl(txt);

			_stprintf(buffer,"(%1d)",cur->num);
			txt=new C_Text;
			txt->Setup(C_DONT_CARE,C_TYPE_LEFT);
			txt->SetFixedWidth(_tcsclen(buffer)+1);
			txt->SetText(buffer);
			txt->SetXY(130,y);
			txt->SetFGColor(0xf0f0f0);
			txt->SetFont(UseFont);
			txt->SetFlagBitOn(C_BIT_LEFT);
			txt->SetClient(2);
			win->AddControl(txt);

			_stprintf(buffer,"%1ld",cur->points);
			AddCommas(buffer);
			txt=new C_Text;

⌨️ 快捷键说明

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