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

📄 campaign.cpp

📁 空战游戏flacon源码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	if(hittype != C_TYPE_LMOUSEUP)
		return;

	JStarsDirection=1;
	JStarsDelay=1 * _UI95_TICKS_PER_SECOND_; // Seconds
	control->Parent_->SetGroupState(-200,0);
	control->SetState(1);
}

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

	JStarsDirection=-1;
	JStarsDelay=1*_UI95_TICKS_PER_SECOND_; // Seconds
	control->Parent_->SetGroupState(-200,0);
	control->SetState(1);
}

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

	JStarsDirection=0;
	if(JStarsCurrent < (JStarsLast-1))
		JStarsCurrent++;
	control->Parent_->SetGroupState(-200,0);
}

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

	JStarsDirection=0;
	if(JStarsCurrent > JStarsFirst)
		JStarsCurrent--;
	control->Parent_->SetGroupState(-200,0);
}

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

	JStarsDirection=1;
	JStarsDelay=static_cast<long>(0.25*_UI95_TICKS_PER_SECOND_); // Second
	control->Parent_->SetGroupState(-200,0);
	control->SetState(1);
}

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

	JStarsDirection=-1;
	JStarsDelay=static_cast<long>(0.25*_UI95_TICKS_PER_SECOND_); // Second
	control->Parent_->SetGroupState(-200,0);
	control->SetState(1);
}

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

	JStarsDirection=0;
	control->Parent_->SetGroupState(-200,0);
}

void HistoryDragBallCB(long,short hittype,C_Base *control)
{
	C_Slider *sldr;
	long Offset,step,Range;
	if(hittype != C_TYPE_MOUSEMOVE)
		return;

	JStarsDirection=0;

	sldr=(C_Slider*)control;
	Offset=sldr->GetSliderPos()-sldr->GetSliderMin();
	Range=sldr->GetSliderMax()-sldr->GetSliderMin();
	if(Range >= 1)
	{
		step=(Offset * (JStarsLast-2)) / Range + JStarsFirst;
		if(step < JStarsFirst)
			step=JStarsFirst;
		if(step >= (JStarsLast-1))
			step=JStarsLast-1;
		JStarsCurrent=step;
	}
}

void HistoryTimerCB(long,short,C_Base *control)
{
	C_History *hist;
	C_Text *txt;
	C_Slider *sldr;
	long TimeID;
	_TCHAR buffer[15];
	F4CSECTIONHANDLE *Leave;
	if(JStarsCurrent != JStarsPrevious)
	{
		Leave=UI_Enter(control->Parent_);
		control->Parent_->HideGroup(JStarsPrevious);
		JStarsPrevious=JStarsCurrent;
		control->Parent_->UnHideGroup(JStarsPrevious);
		control->Parent_->RefreshClient(control->GetClient());
		txt=(C_Text*)control->Parent_->FindControl(COUNTER);
		if(txt)
		{
			hist=(C_History*)control->Parent_->FindControl(JStarsCurrent);
			if(hist)
			{
				TimeID=hist->GetUserNumber(0);
				_stprintf(buffer,"%s%2ld  %02d:00",gStringMgr->GetString(TXT_DAY),TimeID/1440l+1,(TimeID/60)%24);
				txt->Refresh();
				txt->SetText(buffer);
				txt->Refresh();
			}
		}
		sldr=(C_Slider*)control->Parent_->FindControl(PLAYBALL);
		if(sldr)
			PositionSlider(sldr,JStarsCurrent,JStarsFirst,JStarsLast-2);
		UI_Leave(Leave);
	}

	if(!JStarsDirection)
		return;

	if(control->GetUserNumber(_UI95_TIMER_COUNTER_) < 1)
	{
		JStarsCurrent+=JStarsDirection;
		if(JStarsCurrent >= JStarsLast)
		{
			JStarsDirection=0;
			JStarsCurrent=JStarsLast-1;
			control->Parent_->SetGroupState(-200,0);
		}
		if(JStarsCurrent < JStarsFirst)
		{
			JStarsCurrent=JStarsFirst;
			JStarsDirection=0;
			control->Parent_->SetGroupState(-200,0);
		}
		control->SetUserNumber(_UI95_TIMER_COUNTER_,JStarsDelay);
	}
	control->SetUserNumber(_UI95_TIMER_COUNTER_,control->GetUserNumber(_UI95_TIMER_COUNTER_)-1);
}

void FitFlightPlanCB(long,short hittype,C_Base *control)
{
	F4CSECTIONHANDLE *Leave;

	if(hittype != C_TYPE_LMOUSEUP)
		return;

	if(gMapMgr)
	{
		Leave=UI_Enter(control->Parent_);

		gMapMgr->FitFlightPlan();
		gMapMgr->DrawMap();

		UI_Leave(Leave);
	}
}

void OpenCrossSectionCB(long,short hittype,C_Base *control)
{
	C_Text *txt;
	C_Window *win;
	C_Waypoint *wpz;
	_TCHAR buffer[30];
	F4CSECTIONHANDLE *Leave;

	if(hittype != C_TYPE_LMOUSEUP)
		return;

	win=gMapMgr->GetZWindow();
	if(win)
	{
		Leave=UI_Enter(win);
		if(StupidHackToCloseCSECT != control->GetUserNumber(0))
		{
			StupidHackToCloseCSECT=control->GetUserNumber(0);
			gMapMgr->RecalcWaypointZs(StupidHackToCloseCSECT/100);
			wpz=gMapMgr->GetCurWPZ();
			txt=(C_Text*)win->FindControl(DISTANCE_FIELD);
			if(txt)
			{
				if(wpz)
					_stprintf(buffer,"%5.1f%s",(float)(wpz->GetUserNumber(2))*FT_TO_NM,gStringMgr->GetString(TXT_NM));
				else
					_tcscpy(buffer," ");
				Uni_Float(buffer);
				txt->SetText(buffer);
			}
			txt=(C_Text*)win->FindControl(FUEL_FIELD);
			if(txt)
			{
				if(wpz)
					_stprintf(buffer,"%1ld",wpz->GetUserNumber(3));
				else
					_tcscpy(buffer," ");
				txt->SetText(buffer);
			}
			txt=(C_Text*)win->FindControl(DURATION_FIELD);
			if(txt)
			{
				if(wpz)
					GetTimeString(wpz->GetUserNumber(1),buffer);
				else
					_tcscpy(buffer," ");
				txt->SetText(buffer);
			}
			win->HideCluster(control->GetUserNumber(1));
			win->UnHideCluster(StupidHackToCloseCSECT);
			win->RefreshWindow();
			gMainHandler->ShowWindow(win);
		}
		else
		{
			gMainHandler->HideWindow(win);
			StupidHackToCloseCSECT=0;
		}
		UI_Leave(Leave);
	}
}

void LoadTroopMovementHistory()
{
	C_Window *win;
	C_History *hist;
	C_Slider *sldr;
	int i,recnum;
	CampaignTime time;
	UnitHistoryType *rec;
	char *filedata;
	FILE *fp;
	short Reading;
	short count;
	C_Text *txt;
	long TimeID;
	_TCHAR buffer[15];

	JStarsFirst=0;
	JStarsLast=0;
	JStarsCurrent=0;
	recnum=1;
	DeleteGroupList(HISTORY_WIN);

	win=gMainHandler->FindWindow(HISTORY_WIN);
	if(win)
	{
		fp = OpenCampFile("tmp","his","rb");
		if(!fp)
			return;
	
		CampEnterCriticalSection();
		Reading=1;
		while(Reading)
		{
			Reading=static_cast<short>(fread(&time,sizeof(CampaignTime),1,fp));
			if(Reading)
			{
				fread(&count,sizeof(short),1,fp);
				if(count)
				{
					if(recnum == 1)
					{
						txt=(C_Text*)win->FindControl(COUNTER);
						if(txt)
						{
							TimeID=time/(VU_TICS_PER_SECOND*60);
							_stprintf(buffer,"%s%2ld  %02d:00",gStringMgr->GetString(TXT_DAY),TimeID/1440l+1,(TimeID/60)%24);
							txt->Refresh();
							txt->SetText(buffer);
							txt->Refresh();
						}
					}
					hist=new C_History;
					hist->Setup(recnum,0,count);
					hist->SetFlagBitOn(C_BIT_INVISIBLE);
					hist->SetGroup(recnum);
					hist->SetClient(1);
					hist->SetUserNumber(0,(long)time/(VU_TICS_PER_SECOND*60));
					hist->SetUserNumber(_UI95_DELGROUP_SLOT_,_UI95_DELGROUP_ID_);
					hist->SetImage(0,REDDOT5);
					hist->SetImage(1,BLUEDOT5);
					hist->SetImage(2,BLUEDOT5);
					hist->SetImage(3,BLUEDOT5);
					hist->SetImage(4,REDDOT5);
					hist->SetImage(5,REDDOT5);
					hist->SetImage(6,REDDOT5);
					hist->SetImage(7,REDDOT5);

					filedata=new char[count * sizeof(UnitHistoryType)];
					fread(filedata,count * sizeof(UnitHistoryType),1,fp);
					rec=(UnitHistoryType*)filedata;
					for(i=0;i<count;i++)
					{
						hist->AddIconSet(static_cast<short>(i),rec->team,(short)((float)rec->x * 0.36198),(short)((float)(1024-rec->y) * 0.36198));
						rec++;
					}
					hist->SetReady(1);
					delete filedata;
					win->AddControl(hist);
					recnum++;
				}
			}
		}
		fclose(fp);
		CampLeaveCriticalSection();

		JStarsDirection=0;
		JStarsFirst=1;
		JStarsLast=recnum;
		JStarsCurrent=1;
		JStarsPrevious=1;
		sldr=(C_Slider*)win->FindControl(PLAYBALL);
		if(sldr)
		{
			sldr->Refresh();
			sldr->SetSliderPos(0);
			sldr->Refresh();
			if(recnum > 2)
				sldr->SetFlagBitOn(C_BIT_ENABLED);
			else
				sldr->SetFlagBitOff(C_BIT_ENABLED);
		}
		win->UnHideGroup(JStarsCurrent);
	}
}

#define _MAX_CATEGORIES_ (7)

long FrcLvlCatID[_MAX_CATEGORIES_]=
{
	STAT_1,
	STAT_2,
	STAT_3,
	STAT_4,
	STAT_5,
	STAT_6,
	STAT_7,
};

static long FindStatIndex(long ID)
{
	short i;

	for(i=0;i<_MAX_CATEGORIES_;i++)
		if(ID == FrcLvlCatID[i])
			return(i);
	return(0);
}

void SelectForceCategoryCB(long,short hittype,C_Base *control)
{
	C_Window *win;
	C_Text *txt;
	C_Level *lvl;
	if(hittype != C_TYPE_SELECT)
		return;

	win=gMainHandler->FindWindow(FORCE_WIN);
	if(win)
	{
		win->HideGroup(LastForceCatID);
		LastForceCatID=((C_ListBox *)control)->GetTextID();
		lvl=(C_Level*)win->FindControl(4441313+FindStatIndex(LastForceCatID));
		if(lvl)
		{
			txt=(C_Text*)win->FindControl(HIGH_Y);
			if(txt)
			{
				txt->Refresh();
				txt->SetText(lvl->GetYLabel(2));
				txt->Refresh();
			}
			txt=(C_Text*)win->FindControl(HALF_Y);
			if(txt)
			{
				txt->Refresh();
				txt->SetText(lvl->GetYLabel(1));
				txt->Refresh();
			}
			txt=(C_Text*)win->FindControl(LOW_Y);
			if(txt)
			{
				txt->Refresh();
				txt->SetText(lvl->GetYLabel(0));
				txt->Refresh();
			}
		}
		win->UnHideGroup(LastForceCatID);
		win->RefreshClient(1);
	}
}

COLORREF FrcTeamColors[_LEVEL_MAX_TEAMS_]=
{
	0x00000000, // Team 0
	0x00ff0000, // Team 1 (US)
	0x00f5f502, // Team 2 (ROK)
	0x00000000, // Team 3 (Japan)
	0x000098ec, // Team 4 (CIS)
	0x0000ffff, // Team 5 (China)
	0x000202f8, // Team 6 (DPRK)
	0x00000000, // Team 7
};

void LoadForceLevelHistory()
{
	C_Window *win;
	C_Level *stats[_MAX_CATEGORIES_];
	C_Text *txt;
	short i,j;
	short numteams;
	CampaignTime time;
	TeamStatusType teamstats[_LEVEL_MAX_TEAMS_];
	C_ListBox *lbox;
	FILE *fp;
	short Reading,First=1;
	long MaxValue,MinValue;
	long TimeID,StatIdx,count,start=0,end=0;
	_TCHAR buffer[20];

	DeleteGroupList(FORCE_WIN);

	win=gMainHandler->FindWindow(FORCE_WIN);
	if(win)
	{
		fp = OpenCampFile("tmp","frc","rb");
		if(!fp)
			return;
	
		for(i=0;i<_MAX_CATEGORIES_;i++)
		{
			stats[i]=new C_Level;
			stats[i]->Setup(4441313+i,0);
			stats[i]->SetDrawArea(1,1,
								static_cast<short>(win->ClientArea_[1].right-win->ClientArea_[1].left-2),
								static_cast<short>(win->ClientArea_[1].bottom-win->ClientArea_[1].top-2));
			stats[i]->SetGroup(FrcLvlCatID[i]);
			stats[i]->SetClient(1);
			stats[i]->SetFlagBitOn(C_BIT_INVISIBLE);
			stats[i]->SetUserNumber(_UI95_DELGROUP_SLOT_,_UI95_DELGROUP_ID_);

			for(j=0;j<_LEVEL_MAX_TEAMS_;j++)
				stats[i]->SetTeamColor(static_cast<short>(j),FrcTeamColors[j]);
		}

		CampEnterCriticalSection();
		Reading=1;
		numteams=0;
		count=0;
		while(Reading)
		{
			Reading=static_cast<short>(fread(&time,sizeof(CampaignTime),1,fp));
			if(Reading)
			{
				count++;
				TimeID=time / (VU_TICS_PER_SECOND * 60);
				if(First)
					start = TimeID;
				end = TimeID;

				if(!fread(&numteams,sizeof(short),1,fp))
					MonoPrint("Error Reading Force Level\n");
				for (i=0; i<numteams; i++)
				{
					if(!fread(&teamstats[i],sizeof(TeamStatusType),1,fp))
						MonoPrint("Error Reading Force Level\n");
				}
				for(i=0;i<_MAX_CATEGORIES_;i++)
				{
					if(First)
						stats[i]->SetStart(TimeID);
					stats[i]->SetEnd(TimeID);
				}
				First=0;
				for(i=0;i<numteams;i++)
				{
					if (teamstats[i].supplyLevel < 255)
						{
						// Team is active
						stats[0]->AddPoint(i,teamstats[i].airDefenseVehs);
						stats[1]->AddPoint(i,teamstats[i].ships);
						stats[2]->AddPoint(i,teamstats[i].supplyLevel);
						stats[3]->AddPoint(i,teamstats[i].fuelLevel);
						stats[4]->AddPoint(i,teamstats[i].airbases);
						stats[5]->AddPoint(i,teamstats[i].aircraft);
						stats[6]->AddPoint(i,teamstats[i].groundVehs);
						}
					else
						{
						// Team is inactive.
						stats[0]->AddPoint(i,-1);
						stats[1]->AddPoint(i,-1);
						stats[2]->AddPoint(i,-1);
						stats[3]->AddPoint(i,-1);
						stats[4]->AddPoint(i,-1);
						stats[5]->AddPoint(i,-1);
						stats[6]->AddPoint(i,-1);
						}
				}
			}
		}
		fclose(fp);
		CampLeaveCriticalSection();

		for(i=0;i<_MAX_CATEGORIES_;i++)
		{
			stats[i]->CalcPositions();
			MaxValue=stats[i]->GetMaxValue();
			MinValue=stats[i]->GetMinValue();

			_stprintf(buffer,"%1ld",MaxValue);
			stats[i]->SetYLabel(2,buffer);
			_stprintf(buffer,"%1ld",(MaxValue-MinValue)/2);
			stats[i]->SetYLabel(1,buffer);
			_stprintf(buffer,"%1ld",MinValue);
			stats[i]->SetYLabel(0,buffer);

			win->AddControl(stats[i]);
		}

		_stprintf(buffer,"%s %1ld %02ld:00",gStringMgr->GetString(TXT_DAY),start / (60 * 24)+1,(start / 60) % 24);
		txt=(C_Te

⌨️ 快捷键说明

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