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

📄 general.cpp

📁 空战游戏flacon源码
💻 CPP
📖 第 1 页 / 共 4 页
字号:
								if(session)
									_stprintf(Buffer,"[%s]",session->GetPlayerName());
								else
								{
									if (!TheCampaign.MissionEvaluator->GetPilotName(i,PilotName))
									{
										_stprintf(Buffer,"[%s]",gStringMgr->GetString(TXT_TBD));
									}
									else
										_stprintf(Buffer,"[%s]",PilotName);
								}
								btn->SetFlagBitOn(C_BIT_ENABLED);
								btn->SetAllLabel(gStringMgr->GetText(gStringMgr->AddText(Buffer)));
								break;
							case AIRCRAFT_DEAD:
								btn->SetFlagBitOff(C_BIT_ENABLED);
								btn->SetAllLabel(TXT_KIA);
								break;
							case AIRCRAFT_RTB:
								btn->SetFlagBitOff(C_BIT_ENABLED);
								btn->SetAllLabel(TXT_RETURNTOBASE);
								break;
							case AIRCRAFT_MISSING:
								btn->SetFlagBitOff(C_BIT_ENABLED);
								btn->SetAllLabel(TXT_MIA);
								break;
							default:
								btn->SetFlagBitOff(C_BIT_ENABLED);
								btn->SetAllLabel(TXT_RETURNTOBASE);
								break;
						}
					}
				}
			}

			// Get Task string
			_tcscpy(Task,MissStr[curpackage->GetMissionRequest()->mission]);

			// Get Mission string

			if(curflight->GetUnitMission() != AMIS_ABORT)
			{
				GetMissionTarget(curpackage,curflight,Buffer);

				_tcscpy(Mission,Buffer);

				// Time on Target (TOT)
				_tcscpy(TOT," ");
				wp=curflight->GetFirstUnitWP();

				while(wp)
				{
					if(wp->GetWPFlags() & WPF_TARGET)
					{
						GetTimeString(wp->GetWPArrivalTime(),TOT);
						wp=NULL;
					}
					else
						wp=wp->GetNextWP();
				}
			}
			else
			{
				_tcscpy(Task,gStringMgr->GetString(TXT_RETURN_TO_BASE));
				_tcscpy(Mission,gStringMgr->GetString(TXT_MISSION_ABORTED));
				_tcscpy(TOT,gStringMgr->GetString(TXT_ABORTED));
			}

			// Task
			txt=(C_Text *)win->FindControl(ROLE_FIELD);
			if(txt)
			{
				txt->SetText(Task);
			}

			// Mission
			txt=(C_Text *)win->FindControl(MISSION_FIELD);
			if(txt)
			{
				txt->SetText(Mission);
			}

			// TOT
			txt=(C_Text *)win->FindControl(TOT_FIELD);
			if(txt)
			{
				txt->SetText(TOT);
			}
			for(i=1;i<5;i++)
				if(i == planecount)
					win->UnHideCluster(i);
				else
					win->HideCluster(i);
			win->UnHideCluster(5);
		}
		else
		{
			win->HideCluster(1);
			win->HideCluster(2);
			win->HideCluster(3);
			win->HideCluster(4);
			txt=(C_Text *)win->FindControl(FLIGHT_LABEL);
			if(txt)
			{
				_tcscpy(Buffer,gStringMgr->GetString(TXT_PLANNING));
				txt->SetText(Buffer);
			}

			_tcscpy(Task,gStringMgr->GetString(TXT_NOT_AVAILABLE));
			_tcscpy(Mission,gStringMgr->GetString(TXT_NOT_AVAILABLE));
			_tcscpy(TOT,gStringMgr->GetString(TXT_NOT_AVAILABLE));

			// Task
			txt=(C_Text *)win->FindControl(ROLE_FIELD);
			if(txt)
			{
				txt->SetText(Task);
			}

			// Mission
			txt=(C_Text *)win->FindControl(MISSION_FIELD);
			if(txt)
			{
				txt->SetText(Mission);
			}

			// TOT
			txt=(C_Text *)win->FindControl(TOT_FIELD);
			if(txt)
			{
				txt->SetText(TOT);
			}
		}
		win->RefreshWindow();
		UI_Leave(Leave);
	}
}

static void MakeBar(C_Line *line,long valueID,long Team)
{
	long max=1;
	long value=0,w;

	switch(valueID)
	{
		case STAT_1:
			value=TeamInfo[Team]->GetCurrentStats()->aircraft;
			if(TeamInfo[2]->startStats.aircraft > TeamInfo[6]->startStats.aircraft)
				max=TeamInfo[2]->startStats.aircraft;
			else
				max=TeamInfo[6]->startStats.aircraft;
			break;
		case STAT_2:
			value=TeamInfo[Team]->GetCurrentStats()->airDefenseVehs;
			if(TeamInfo[2]->startStats.airDefenseVehs > TeamInfo[6]->startStats.airDefenseVehs)
				max=TeamInfo[2]->startStats.airDefenseVehs;
			else
				max=TeamInfo[6]->startStats.airDefenseVehs;
			break;
		case STAT_3:
			value=TeamInfo[Team]->GetCurrentStats()->groundVehs;
			if(TeamInfo[2]->startStats.groundVehs > TeamInfo[6]->startStats.groundVehs)
				max=TeamInfo[2]->startStats.groundVehs;
			else
				max=TeamInfo[6]->startStats.groundVehs;
			break;
		case STAT_4:
			value=TeamInfo[Team]->GetCurrentStats()->ships;
			if(TeamInfo[2]->startStats.ships > TeamInfo[6]->startStats.ships)
				max=TeamInfo[2]->startStats.ships;
			else
				max=TeamInfo[6]->startStats.ships;
			break;
		case STAT_5:
			value=TeamInfo[Team]->GetCurrentStats()->supplyLevel;
			if(TeamInfo[2]->startStats.supplyLevel > TeamInfo[6]->startStats.supplyLevel)
				max=TeamInfo[2]->startStats.supplyLevel;
			else
				max=TeamInfo[6]->startStats.supplyLevel;
			break;
		case STAT_6:
			value=TeamInfo[Team]->GetCurrentStats()->fuelLevel;
			if(TeamInfo[2]->startStats.fuelLevel > TeamInfo[6]->startStats.fuelLevel)
				max=TeamInfo[2]->startStats.fuelLevel;
			else
				max=TeamInfo[6]->startStats.fuelLevel;
			break;
		case STAT_7:
			value=TeamInfo[Team]->GetCurrentStats()->airbases;
			if(TeamInfo[2]->startStats.airbases > TeamInfo[6]->startStats.airbases)
				max=TeamInfo[2]->startStats.airbases;
			else
				max=TeamInfo[6]->startStats.airbases;
			break;
		case STAT_8:
			value=TeamInfo[Team]->GetCurrentStats()->aircraft;
			if(TeamInfo[2]->startStats.aircraft > TeamInfo[6]->startStats.aircraft)
				max=TeamInfo[2]->startStats.aircraft;
			else
				max=TeamInfo[6]->startStats.aircraft;
			break;
		case STAT_9:
			value=TeamInfo[Team]->GetCurrentStats()->groundVehs;
			if(TeamInfo[2]->startStats.groundVehs > TeamInfo[6]->startStats.groundVehs)
				max=TeamInfo[2]->startStats.groundVehs;
			else
				max=TeamInfo[6]->startStats.groundVehs;
			break;
	}
	if(line->GetUserNumber(0) == 0)
	{
		line->SetUserNumber(0,line->GetX());
		line->SetUserNumber(1,line->GetY());
		line->SetUserNumber(2,line->GetW());
		line->SetUserNumber(3,line->GetH());
	}
	if(!max)
		max=1000000;

	w=(line->GetUserNumber(2) * value) / max;
	if(w > line->GetUserNumber(2))
		w=line->GetUserNumber(2);

	line->SetW(w);

	line->Parent_->update_ |= C_DRAW_REFRESH;
	line->Parent_->SetUpdateRect(line->GetUserNumber(0),line->GetUserNumber(1),
								 line->GetUserNumber(0)+line->GetUserNumber(2),
								 line->GetUserNumber(1)+line->GetUserNumber(3),
								 line->GetFlags(),line->GetClient());
}

_TCHAR *ObjStr[5]= {NULL,NULL,NULL,NULL,NULL};
void UpdateIntel(long ID)
{
	C_Window *win;
	C_ListBox *lbox;
	C_Line *line;
	C_Text *txt;
	short Team;
	short i;

	Team=FalconLocalSession->GetTeam();

	for(i=0;i<5;i++)
		if(ObjStr[i] == NULL)
		{
			ObjStr[i]=new _TCHAR[256];
			memset(ObjStr[i],0,sizeof(_TCHAR)*256);
		}

	i=static_cast<short>(GetTopPriorityObjectives(Team,ObjStr));

	win=gMainHandler->FindWindow(ID);
	if(win)
	{
		if (TeamInfo[Team]->GetOffensiveAirAction()->actionType > AACTION_DCA)
			win->UnHideCluster(3);
		else
			win->HideCluster(3);
		lbox=(C_ListBox *)win->FindControl(OFFENSIVE_AIR_TEXT);
		if(lbox)
		{
			lbox->Refresh();
			if (TeamInfo[Team] && TeamInfo[Team]->GetOffensiveAirAction()->actionType)
				lbox->SetValue(TeamInfo[Team]->GetOffensiveAirAction()->actionType);
			else
				lbox->SetValue(0);
			lbox->Refresh();
		}
		txt=(C_Text *)win->FindControl(TIME_AIR_OP);
		if(txt)
		{
			txt->Refresh();
			if (TeamInfo[Team] && TeamInfo[Team]->GetOffensiveAirAction()->actionType)
				{
				_TCHAR	timeStr[30]={0};
				AddTimeToBuffer (TeamInfo[Team]->GetOffensiveAirAction()->actionStartTime, timeStr, FALSE);
				// KCK HACK: Can't seem to get this to size right. Remind me to ask Peter about
				// this when he gets in
				_tcscat(timeStr,"   ");
				txt->SetText(timeStr);
				}
			else
				txt->SetText("");
			txt->Refresh();
		}
		lbox=(C_ListBox *)win->FindControl(POSTURE_TEXT);
		if(lbox)
		{
			if (TeamInfo[Team])
			{
				lbox->SetValue(TeamInfo[Team]->GetGroundAction()->actionType);
				lbox->Refresh();
			}
		}
		if (TeamInfo[Team]->GetGroundAction()->actionType >= GACTION_MINOROFFENSIVE)
			{
			win->UnHideCluster(2);
			win->HideCluster(1);
			}
		else
			{
			win->UnHideCluster(1);
			win->HideCluster(2);
			}
		lbox=(C_ListBox *)win->FindControl(OFFENSIVE_GROUND_TEXT);
		if(lbox)
		{
			lbox->Refresh();
			if (TeamInfo[Team])
			{
				lbox->SetValue(TeamInfo[Team]->GetGroundAction()->actionType);
				lbox->Refresh();
			}
		}
		txt=(C_Text *)win->FindControl(TIME_GROUND_OP);
		if(txt)
		{
			_TCHAR	timeStr[30]={0};
			txt->Refresh();
			AddTimeToBuffer (TeamInfo[Team]->GetGroundAction()->actionTime, timeStr, FALSE);
			// KCK HACK: Can't seem to get this to size right. Remind me to ask Peter about
			// this when he gets in
			_tcscat(timeStr,"   ");
			txt->SetText(timeStr);
			txt->Refresh();
		}
		lbox=(C_ListBox *)win->FindControl(BAR_1);
		if(lbox)
		{
			line=(C_Line *)win->FindControl(BLUE_BAR_1);
			if(line)
				MakeBar(line,lbox->GetTextID(),2);
			line=(C_Line *)win->FindControl(RED_BAR_1);
			if(line)
				MakeBar(line,lbox->GetTextID(),6);
		}
		lbox=(C_ListBox *)win->FindControl(BAR_2);
		if(lbox)
		{
			line=(C_Line *)win->FindControl(BLUE_BAR_2);
			if(line)
				MakeBar(line,lbox->GetTextID(),2);
			line=(C_Line *)win->FindControl(RED_BAR_2);
			if(line)
				MakeBar(line,lbox->GetTextID(),6);
		}
		lbox=(C_ListBox *)win->FindControl(BAR_3);
		if(lbox)
		{
			line=(C_Line *)win->FindControl(BLUE_BAR_3);
			if(line)
				MakeBar(line,lbox->GetTextID(),2);
			line=(C_Line *)win->FindControl(RED_BAR_3);
			if(line)
				MakeBar(line,lbox->GetTextID(),6);
		}
		lbox=(C_ListBox *)win->FindControl(BAR_4);
		if(lbox)
		{
			line=(C_Line *)win->FindControl(BLUE_BAR_4);
			if(line)
				MakeBar(line,lbox->GetTextID(),2);
			line=(C_Line *)win->FindControl(RED_BAR_4);
			if(line)
				MakeBar(line,lbox->GetTextID(),6);
		}

		txt=(C_Text *)win->FindControl(OBJ_1);
		if(txt)
		{
			txt->Refresh();
			if(i > 0)
				txt->SetText(ObjStr[0]);
			else
				txt->SetText(" ");
			txt->Refresh();
		}
		txt=(C_Text *)win->FindControl(OBJ_2);
		if(txt)
		{
			txt->Refresh();
			if(i > 1)
				txt->SetText(ObjStr[1]);
			else
				txt->SetText(" ");
			txt->Refresh();
		}
		txt=(C_Text *)win->FindControl(OBJ_3);
		if(txt)
		{
			txt->Refresh();
			if(i > 2)
				txt->SetText(ObjStr[2]);
			else
				txt->SetText(" ");
			txt->Refresh();
		}
		txt=(C_Text *)win->FindControl(OBJ_4);
		if(txt)
		{
			txt->Refresh();
			if(i > 3)
				txt->SetText(ObjStr[3]);
			else
				txt->SetText(" ");
			txt->Refresh();
		}
		txt=(C_Text *)win->FindControl(OBJ_5);
		if(txt)
		{
			txt->Refresh();
			if(i > 4)
				txt->SetText(ObjStr[4]);
			else
				txt->SetText(" ");
			txt->Refresh();
		}
	}
}

void UpdateIntelBarCB(long ID,short hittype,C_Base *control)
{
	C_Line *line;
	C_Window *win;
	C_ListBox *lbox;
	if(hittype != C_TYPE_SELECT)
		return;

	lbox=(C_ListBox *)control;
	win=control->Parent_;

	switch(ID)
	{
		case BAR_1:
			line=(C_Line *)win->FindControl(BLUE_BAR_1);
			if(line)
				MakeBar(line,lbox->GetTextID(),2);
			line=(C_Line *)win->FindControl(RED_BAR_1);
			if(line)
				MakeBar(line,lbox->GetTextID(),6);
			break;
		case BAR_2:
			line=(C_Line *)win->FindControl(BLUE_BAR_2);
			if(line)
				MakeBar(line,lbox->GetTextID(),2);
			line=(C_Line *)win->FindControl(RED_BAR_2);
			if(line)
				MakeBar(line,lbox->GetTextID(),6);
			break;
		case BAR_3:
			line=(C_Line *)win->FindControl(BLUE_BAR_3);
			if(line)
				MakeBar(line,lbox->GetTextID(),2);
			line=(C_Line *)win->FindControl(RED_BAR_3);
			if(line)
				MakeBar(line,lbox->GetTextID(),6);
			break;
		case BAR_4:
			line=(C_Line *)win->FindControl(BLUE_BAR_4);
			if(line)
				MakeBar(line,lbox->GetTextID(),2);
			line=(C_Line *)win->FindControl(RED_BAR_4);
			if(line)
				MakeBar(line,lbox->GetTextID(),6);
			break;
	}
}

short AddButtonToWindow(C_Window *,short,short,COLORREF,_TCHAR *)
{
	return(0);
}

short AddTextToWindow(C_Window *win,short x,short y,COLORREF color,_TCHAR *str)
{
	C_Text *txt;

	if(win == NULL || str == NULL)
		return(0);

	txt=new C_Text;
	txt->Setup(C_DONT_CARE,C_TYPE_NORMAL);
	txt->SetFixedWidth(_tcsclen(str)+1);
	txt->SetText(str);
	txt->SetXY(x,y);
	txt->SetFGColor(color);
	txt->SetFont(win->Font_);
	txt->SetUserNumber(_UI95_DELGROUP_SLOT_,_UI95_DELGROUP_ID_);
	txt->SetFlagBitOn(C_BIT_LEFT);

	win->AddControl(txt);

	return(static_cast<short>(txt->GetX()+txt->GetW()));
}

void AddHorizontalLineToWindow(C_Window *win,short *,short *y,short startcol,short endcol,COLORREF,long Client)
{
	C_Box
		*box;

	box = new C_Box;

	box->Setup (C_DONT_CARE, 0);
	box->SetXYWH (startcol, *y, endcol, 0);
	box->SetColor (0x00AD8041);
	box->SetClient (static_cast<short>(Client));
	box->SetUserNumber(_UI95_DELGROUP_SLOT_,_UI95_DELGROUP_ID_);

	win->AddControl (box);

	*y += 2;
}

BOOL AddWordWrapTextToWindow(C_Window *win,short *x,short *y,short,short endcol,COLORREF color,_TCHAR *str,long Client)
{
	C_Text *txt;
	short wrap_w;
	BOOL retval;

	retval=TRUE;

	if(win == NULL || str == NULL)
		return(0);

	wrap_w=static_cast<short>(max(50,endcol-*x));

	if(str)
	{
		txt=new C_Text;
		txt->Setup(C_DONT_CARE,C_TYPE_NORMAL);
		txt->SetFixedWidth(_tcsclen(str)+1);
		txt->SetXY(*x,*y);
		txt->SetW(wrap_w);
		txt->SetFGColor(color);
		txt->SetFont(win->Font_);
		txt->SetUserNumber(_UI95_DELGROUP_SLOT_,_UI95_DELGROUP_ID_);
		txt->SetFlagBitOn(C_BIT_LEFT|C_BIT_WORDWRAP);
		txt->SetText(str);
		txt->SetClient(static_cast<short>(Client));
		win->AddControl(txt);

		if(gFontList->StrWidth(win->Font_,str) > wrap_w)
		{
			*y += txt->GetH() - gFontList->GetHeight(win->Font_);
			*x += txt->GetW();
		}
		else
		{
			*x += gFontList->StrWidth(win->Font_,str);
		}
		retval=1;
#if 0
		wrap=UI_WordWrap(win,str,win->Font_,wrap_w,&status);
		if(!status)
			retval=status;

		while(wrap)
		{
			wrap_w=endcol-startcol;
			txt=new C_Text;
			txt->Setup(C_DONT_CARE,C_TYPE_NORMAL);
			txt->SetFixedWidth(_tcsclen(wrap)+1);
			txt->SetText(wrap);
			txt->SetXY(*x,*y);
			txt->SetFGColor(color);
			txt->SetFont(win->Font_);
			txt->SetUserNumber(_UI95_DELGROUP_SLOT_,_UI95_DELGROUP_ID_);
			txt->SetFlagBitOn(C_BIT_LEFT);
			txt->SetClient(Client);
			win->AddControl(txt);
			wrap=UI_WordWrap(win,NULL,win->Font_,wrap_w,&status);
			if(wrap)
			{
				*x=startcol;
				*y+=gFontList->GetHeight(win->Font_);
			}
			if(!status)
				retval=status;
		}
		*x=txt->GetX()+txt->GetW();
#endif
	}
	return(retval);
}

static CampUIEventElement *RetrieveEvent(short num)
{
	short i=0;
	CampUIEventElement *retval=NULL;
	CampUIEventElement *evt;

	CampEnterCriticalSection();
	evt=TheCampaign.StandardEventQueue;
	while(evt && i < num)
	{
		evt=evt->next;
		i++;
	}
	if(evt)
	{
		retval=new uieventnode;
		memcpy(retval,evt,sizeof(CampUIEventElement));
		retval->eventText=new _TCHAR[_tcslen(evt->eventText)+1];
		_tcscpy(retval->eventText,evt->eventText);
		retval->next=NULL;
	}
	CampLeaveCriticalSection();
	return(retval);
}

void RefreshMapEventList(long winID, long client)
{
	CampUIEventElement *evt;
	C_Window *win;
	C_Text *txt;
	C_Blip *blip;
	short x,y;
	F4CSECTIONHANDLE *Leave;

	win=gMainHandler->FindWindow(winID);
	if(win)
	{
		Leave=UI_Enter(win);

		evt=RetrieveEvent(0);
		if(evt)
		{
			txt=(C_Text*)win->FindControl(CP_EVENT);
			if(txt)
			{
				txt->Refresh();
				txt->SetText(gStringMgr->GetText(gStringMgr->AddText(evt->eventText)));
				txt->Refresh();
			}
			blip=(C_Blip*)win->FindControl(9000000);
			if(blip)
			{
				x=static_cast<short>(evt->x/MAP_RATIO-2);
				y=static_cast<short>(170-(evt->y/MAP_RATIO)-2);

				blip->AddBlip(x,y,evt->team,evt->time/(VU_TICS_PER_SECOND*60));
				blip->Refresh();
			}
			delete evt->eventText;
			delete evt;
			win->RefreshClient(client);
		}
		UI_Leave(Leave);
	}
}

void RefreshEventList()
{
	CampUIEventElement *evt;
	C_Window *win;
	C_Text *txt;
	_TCHAR buffer[10];
	short y,wrap_w,i;

	win=gMainHandler->FindWindow(RVNTS_WIN);
	if(win)
	{
		DeleteGroupList(RVNTS_WIN);

		wrap_w=static_cast<short>(win->ClientArea_[0].right-win->ClientArea_[0].left - 40);

		y=0;
		i=0;
		evt=RetrieveEvent(i);
		while(evt)
		{
			if(evt->eventText)
			{
				GetTimeString(evt->time,buffer);
				buffer[5] = 0;

				txt=new C_Text;
				txt->Setup(C_DONT_CARE,C_TYPE_NORMAL);
				txt->SetFixedWidth(_tcsclen(buffer)+1);
				txt->SetText(buffer);
				txt->SetFont(win->Font_);
				txt->SetXY(1,y);
				txt->SetFGColor(0xe0e0e0);
				txt->SetUserNumber(_UI95_DELGROUP_SLOT_,_UI95_DELGROUP_ID_);

⌨️ 快捷键说明

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