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

📄 priority.cpp

📁 空战游戏flacon源码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
			TeamInfo[team]->SetObjTypePriority(TYPE_REFINERY, value);
		}
		// Naval bases
		sldr=(C_Slider*)win->FindControl(TARGET_10);
		if(sldr)
		{
			value=static_cast<uchar>(SliderValue(sldr));
			TeamInfo[team]->SetObjTypePriority(TYPE_PORT, value); 
		}
		// Armored Units
		sldr=(C_Slider*)win->FindControl(TARGET_11);
		if(sldr)
		{
			value=static_cast<uchar>(SliderValue(sldr));
			TeamInfo[team]->SetUnitTypePriority(STYPE_UNIT_ARMOR, value);
			TeamInfo[team]->SetUnitTypePriority(STYPE_UNIT_ARMORED_CAV, value);
		}
		// Infantry Units
		sldr=(C_Slider*)win->FindControl(TARGET_12);
		if(sldr)
		{
			value=static_cast<uchar>(SliderValue(sldr));
			TeamInfo[team]->SetUnitTypePriority(STYPE_UNIT_INFANTRY, value);
			TeamInfo[team]->SetUnitTypePriority(STYPE_UNIT_MARINE, value);
			TeamInfo[team]->SetUnitTypePriority(STYPE_UNIT_MECHANIZED, value);
			TeamInfo[team]->SetUnitTypePriority(STYPE_UNIT_AIRMOBILE, value);
			TeamInfo[team]->SetUnitTypePriority(STYPE_UNIT_RESERVE, value);
		}
		// Artillery Units
		sldr=(C_Slider*)win->FindControl(TARGET_13);
		if(sldr)
		{
			value=static_cast<uchar>(SliderValue(sldr));
			TeamInfo[team]->SetUnitTypePriority(STYPE_UNIT_ROCKET, value);
			TeamInfo[team]->SetUnitTypePriority(STYPE_UNIT_SP_ARTILLERY, value);
			TeamInfo[team]->SetUnitTypePriority(STYPE_UNIT_SS_MISSILE, value);
			TeamInfo[team]->SetUnitTypePriority(STYPE_UNIT_TOWED_ARTILLERY, value);
		}
		// Support units
		sldr=(C_Slider*)win->FindControl(TARGET_14);
		if(sldr)
		{
			value=static_cast<uchar>(SliderValue(sldr));
			TeamInfo[team]->SetUnitTypePriority(STYPE_UNIT_ENGINEER, value);
			TeamInfo[team]->SetUnitTypePriority(STYPE_UNIT_HQ, value);
		}
		// Naval Units
		sldr=(C_Slider*)win->FindControl(TARGET_15);
		if(sldr)
		{
			value=static_cast<uchar>(SliderValue(sldr));
			TeamInfo[team]->SetUnitTypePriority(MAX_UNITTYPE-1, value);
//			TeamInfo[team]->SetMissionPriority(AMIS_ASHIP, value);
		}
	}
}

void SaveMissionPriorities()
{
	C_Window *win;
	C_Slider *sldr;
	uchar value;
	int team = FalconLocalSession->GetTeam();

	win=gMainHandler->FindWindow(STRAT_WIN);
	if(win)
	{
		// Mission Types
		// OCA
		sldr=(C_Slider*)win->FindControl(MISSION_1);
		if(sldr)
		{
			value=static_cast<uchar>(SliderValue(sldr));
			TeamInfo[team]->SetMissionPriority(AMIS_OCASTRIKE, value);
			TeamInfo[team]->SetMissionPriority(AMIS_SWEEP, value);
		}
		// SAM Suppression
		sldr=(C_Slider*)win->FindControl(MISSION_2);
		if(sldr)
		{
			value=static_cast<char>(SliderValue(sldr));
			TeamInfo[team]->SetMissionPriority(AMIS_SEADSTRIKE, value);
			TeamInfo[team]->SetMissionPriority(AMIS_SEADESCORT, value);
		}
		// Interdiction
		sldr=(C_Slider*)win->FindControl(MISSION_3);
		if(sldr)
		{
			value=static_cast<uchar>(SliderValue(sldr));
			TeamInfo[team]->SetMissionPriority(AMIS_SAD, value);
			TeamInfo[team]->SetMissionPriority(AMIS_INT, value);
			TeamInfo[team]->SetMissionPriority(AMIS_BAI, value);
		}
		// CAS
		sldr=(C_Slider*)win->FindControl(MISSION_4);
		if(sldr)
		{
			value=static_cast<uchar>(SliderValue(sldr));
			TeamInfo[team]->SetMissionPriority(AMIS_ONCALLCAS, value);
			TeamInfo[team]->SetMissionPriority(AMIS_PRPLANCAS, value);
			TeamInfo[team]->SetMissionPriority(AMIS_CAS, value);
		}
		// Strategic Strikes
		sldr=(C_Slider*)win->FindControl(MISSION_5);
		if(sldr)
		{
			value=static_cast<uchar>(SliderValue(sldr));
			TeamInfo[team]->SetMissionPriority(AMIS_INTSTRIKE, value);
			TeamInfo[team]->SetMissionPriority(AMIS_STRIKE, value);
			TeamInfo[team]->SetMissionPriority(AMIS_DEEPSTRIKE, value);
		}
		// Anti shipping
		sldr=(C_Slider*)win->FindControl(MISSION_6);
		if(sldr)
		{
			value=static_cast<uchar>(SliderValue(sldr));
			TeamInfo[team]->SetMissionPriority(AMIS_ASW, value);
			TeamInfo[team]->SetMissionPriority(AMIS_ASHIP, value);
		}
		// DCA
		sldr=(C_Slider*)win->FindControl(MISSION_7);
		if(sldr)
		{
			value=static_cast<uchar>(SliderValue(sldr));
			TeamInfo[team]->SetMissionPriority(AMIS_BARCAP, value);
			TeamInfo[team]->SetMissionPriority(AMIS_BARCAP2, value);
			TeamInfo[team]->SetMissionPriority(AMIS_HAVCAP, value);
			TeamInfo[team]->SetMissionPriority(AMIS_TARCAP, value);
			TeamInfo[team]->SetMissionPriority(AMIS_RESCAP, value);
			TeamInfo[team]->SetMissionPriority(AMIS_AMBUSHCAP, value);
			TeamInfo[team]->SetMissionPriority(AMIS_INTERCEPT, value);
		}
		// Recon
		sldr=(C_Slider*)win->FindControl(MISSION_8);
		if(sldr)
		{
			value=static_cast<uchar>(SliderValue(sldr));
			TeamInfo[team]->SetMissionPriority(AMIS_BDA, value);
			TeamInfo[team]->SetMissionPriority(AMIS_RECON, value);
			TeamInfo[team]->SetMissionPriority(AMIS_RECONPATROL, value);
		}
	}
}

void SavePAKPriorities()
{
	long i,idx;
	POData POD;

	VuListIterator poit(POList);
	Objective o;

	idx=1;
	o = (Objective) poit.GetFirst();
	while(o)
	{
		POD=GetPOData(o);
		if(POD)
		{
			// KCK: Technically, the player should only be able to modify priorities for his team
			i = FalconLocalSession->GetTeam();
			if (i>0 && i<NUM_TEAMS && TeamInfo[i])
//			for(i=0;i<NUM_TEAMS;i++)
			{
				POD->player_priority[i]=PAKPriorities[idx][i][0];
				POD->flags |= GTMOBJ_PLAYER_SET_PRIORITY;
				PAKPriorities[idx][i][1]=0;
			}
		}

		o = (Objective) poit.GetNext();
		idx++;
	}

	// For multiplayer - send our new priorities
	if (TRUE)		// isOnline()
	{
		uchar teammask;
		teammask = static_cast<uchar>((1 << FalconLocalSession->GetTeam()));
		SendPrimaryObjectiveList (teammask);
	}
}

// Init the PAK Slider to the campaign's current value
void SelectPAK(long PAKID,long TeamID)
{
	C_Window *win;
	C_Slider *sldr;
	WORD *Pal;
	F4CSECTIONHANDLE *Leave;

	if(PAKID >= MAX_PAKS || TeamID >= NUM_TEAMS)
		return;


	win=gMainHandler->FindWindow(STRAT_WIN);
	if(win)
	{
		Leave=UI_Enter(win);
		if(BlinkPAK < 0) // restore before changing
		{
			Pal=(WORD*)(PAKMap->Owner->GetData() + PAKMap->Header->paletteoffset);
			Pal[CurrentPAK]=PAKPalette[PAKPriorities[CurrentPAK][FalconLocalSession->GetTeam()][0]];
		}
		CurrentPAK=PAKID;
		BlinkPAK=static_cast<char>(CurrentPAK);
		sldr=(C_Slider*)win->FindControl(PAK_SLIDER);
		if(sldr)
			PositionSlider(100 - PAKPriorities[PAKID][TeamID][0],sldr); // Value is in range of 0 -> 100
		UI_Leave(Leave);
	}
}

// UI Callbacks

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

	control->Parent_->HideCluster(control->GetUserNumber(1));
	control->Parent_->HideCluster(control->GetUserNumber(2));
	control->Parent_->UnHideCluster(control->GetUserNumber(0));

	control->Parent_->RefreshWindow();
}

void UsePriotityCB(long ID,short hittype,C_Base *control)
{
	C_Button *btn;
	if(hittype != C_TYPE_LMOUSEUP)
		return;

	btn=(C_Button*)control->Parent_->FindControl(HQ_FLAG);
	if(btn && !btn->GetState())
	{
		SaveTargetPriorities();
		SaveMissionPriorities();
		SavePAKPriorities();
	}
	else
		ResetToDefaults();

	CloseWindowCB(ID,hittype,control);
}

void ResetPriorityCB(long,short hittype,C_Base *control)
{
	long PAKID;
	C_ListBox *lbox;

	if(hittype != C_TYPE_LMOUSEUP)
		return;

// Kevin TODO: Reset priorities to those set by the campaign

	LoadTargetPriorities();
	LoadMissionPriorities();
	LoadPAKPriorities();

	lbox=(C_ListBox*)control->Parent_->FindControl(PAK_TITLE);
	if(lbox)
	{
		PAKID=((C_ListBox*)lbox)->GetTextID();
		if(!PAKID)
			PAKID=1;
		if(PAKID)
			SelectPAK(PAKID,FalconLocalSession->GetTeam());
	}
}

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

	CloseWindowCB(ID,hittype,control);
}

void OpenPriorityCB(long,short hittype,C_Base *control)
{
	C_Window *win;
	C_Button *btn;
	C_ListBox *lbox;
	if(hittype != C_TYPE_LMOUSEUP)
		return;

	InitPAKMap();

	LoadTargetPriorities();
	LoadMissionPriorities();
	LoadPAKPriorities();

	SelectPAK(1,FalconLocalSession->GetTeam());

	// Init window... make sure proper stuff is visible or hidden
	win=gMainHandler->FindWindow(STRAT_WIN);
	if(win)
	{
		lbox=(C_ListBox*)win->FindControl(PAK_TITLE);
		if(lbox)
		{
			lbox->Refresh();
			lbox->SetValue(1);
			lbox->Refresh();
		}
		btn=(C_Button*)win->FindControl(TARGET_PRIORITIES);
		if(btn)
		{
			btn->SetState(1);
			PriorityTabsCB(btn->GetID(),C_TYPE_LMOUSEUP,btn);
			btn->Refresh();
		}
		btn=(C_Button*)win->FindControl(MISSION_PRIORITIES);
		if(btn)
		{
			btn->SetState(0);
			btn->Refresh();
		}
		btn=(C_Button*)win->FindControl(PAK_PRIORITIES);
		if(btn)
		{
			btn->SetState(0);
			btn->Refresh();
		}
	}
	// Display window
	gMainHandler->EnableWindowGroup(control->GetGroup());
}

// Callback from MAP x,y checker
void MapSelectPAKCB(long,short hittype,C_Base *control)
{
	C_Button *btn;
	C_ListBox *lbox;
	long x,y,PAKID;
	char *overlay;

	if(hittype != C_TYPE_LMOUSEUP)
		return;

	if(!control || !PAKMap)
		return;

	btn=(C_Button*)control;
	x=btn->GetRelX();
	y=btn->GetRelY();
	if(x < 0 || x >= 256 || y < 0 || y >= 256)
		return;

	overlay=PAKMap->Owner->GetData();

	PAKID=overlay[y * 256 + x];
	if(PAKID)
	{
		SelectPAK(PAKID,FalconLocalSession->GetTeam());
		lbox=(C_ListBox*)control->Parent_->FindControl(PAK_TITLE);
		if(lbox)
		{
			lbox->Refresh();
			lbox->SetValue(PAKID);
			lbox->Refresh();
		}
	}
}

void SelectPAKCB(long,short hittype,C_Base *control)
{
	long PAKID;

	if(hittype != C_TYPE_SELECT)
		return;

	PAKID=((C_ListBox*)control)->GetTextID();
	if(PAKID)
		SelectPAK(PAKID,FalconLocalSession->GetTeam());
}

void SetPAKPriorityCB(long,short hittype,C_Base *control)
{
	long value;

	if(hittype != C_TYPE_MOUSEMOVE)
		return;

	value=100 - SliderValue((C_Slider*)control);

	PAKPriorities[CurrentPAK][FalconLocalSession->GetTeam()][0]=static_cast<short>(value);
	PAKPriorities[CurrentPAK][FalconLocalSession->GetTeam()][1]=1; // Mark as changed

	TurnOffHQButton();
}

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

	if(base->GetState())
	{
		LoadDefaultTargetPriorities();
		LoadDefaultMissionPriorities();
		LoadDefaultPAKPriorities();

		SelectPAK(CurrentPAK,FalconLocalSession->GetTeam());
	}
	else
	{

	}
	base->Refresh();
}

BOOL PAKMapTimerCB(C_Base *me)
{
	WORD *Pal;
	if(CurrentPAK)
	{
		me->SetUserNumber(0,(me->GetUserNumber(0)+1) & 0x03);
		if(!me->GetUserNumber(0))
		{
			Pal=(WORD*)(PAKMap->Owner->GetData() + PAKMap->Header->paletteoffset);
			BlinkPAK=static_cast<char>(-BlinkPAK);
			if(BlinkPAK < 0) // Flash BLACK
			{
				Pal[CurrentPAK]=0;
			}
			else // Show Actual color
			{
				Pal[CurrentPAK]=PAKPalette[PAKPriorities[CurrentPAK][FalconLocalSession->GetTeam()][0]];
			}
			return(TRUE);
		}
	}
	return(FALSE);
}

⌨️ 快捷键说明

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