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

📄 te_team_victory.cpp

📁 空战游戏flacon源码
💻 CPP
📖 第 1 页 / 共 4 页
字号:

					lbox->SetItemFlags(vt_intercept,C_BIT_ENABLED);
					lbox->SetValue(vt_intercept);
					lbox->SetFlagBitOff(C_BIT_INVISIBLE);
					if(vc->get_type() != vt_intercept)
						vc->set_type(vt_intercept);
				}
				else if(ent->IsBattalion())
				{
					lbox->SetItemFlags(vt_occupy,C_BIT_INVISIBLE);
					lbox->SetItemFlags(vt_destroy,C_BIT_INVISIBLE);
					lbox->SetItemFlags(vt_degrade,C_BIT_INVISIBLE);
					lbox->SetItemFlags(vt_intercept,C_BIT_INVISIBLE);

					lbox->SetItemFlags(vt_attrit,C_BIT_ENABLED);
					lbox->SetValue(vt_attrit);
					lbox->SetFlagBitOff(C_BIT_INVISIBLE);
					if(vc->get_type() != vt_attrit)
						vc->set_type(vt_attrit);
				}
				else
					lbox->SetFlagBitOn(C_BIT_INVISIBLE);
				lbox->SetValue(vc->get_type());
			}
			else
				lbox->SetFlagBitOn(C_BIT_INVISIBLE);
		}

		lbox=vctrl->GetArgs();
		if(lbox)
		{
			switch(vc->get_type())
			{
				case vt_intercept:
					lbox->SetRoot(intercept_lbox);
					lbox->SetFlagBitOff(C_BIT_INVISIBLE);
					if(ent && ent->IsFlight())
					{
						vc->set_tolerance(max(1,min(vc->get_tolerance (),4)));
					}
					else
					{
						vc->set_tolerance(1);
					}
					lbox->SetValue(max(1,min(4,vc->get_tolerance())));
					for(i=1;i<=((Flight)ent)->GetTotalVehicles();i++)
						lbox->SetItemFlags(i,C_BIT_ENABLED);
					for(;i <= 4;i++)
						lbox->SetItemFlags(i,C_BIT_INVISIBLE);
					break;
				case vt_attrit:
				case vt_degrade:
					lbox->SetRoot(percent_lbox);
					lbox->SetFlagBitOff(C_BIT_INVISIBLE);
					if(vc->get_tolerance() > 10)
						vc->set_tolerance(10);
					else if(vc->get_tolerance() < 1)
						vc->set_tolerance(1);
					lbox->SetValue(max(1,min(10,vc->get_tolerance())));
					break;
				default:
					vctrl->GetArgs()->SetRoot(percent_lbox);
					vctrl->GetArgs()->SetFlagBitOn(C_BIT_INVISIBLE);
					lbox->SetValue(1);
					break;
			}
		}
		vctrl->Refresh();
	}
}

// sets up team stuff
void VCChangeTeamNoCB(long,short hittype,C_Base *)
{
	victory_condition *vc;
	C_Victory *vctrl;
	TREELIST *item;

	if(hittype != C_TYPE_SELECT)
		return;

	item=gVCTree->GetLastItem();
	if(item && item->Item_)
	{
		vctrl=(C_Victory*)item->Item_;
		vc=(victory_condition*)vctrl->GetPtr();
		if(vc)
		{
			if(vctrl->GetTeam()->GetTextID() != vc->get_team())
			{
				gMapMgr->RemoveVC(vc->get_team(),vc->get_number());
				vc->set_team(vctrl->GetTeam()->GetTextID());
				gMapMgr->AddVC(vc);
			}
		}
	}
	update_team_victory_window ();
}

// sets up the actions
void VCChangeActionCB(long,short hittype,C_Base *control)
{
	victory_condition *vc;
	C_Victory *vctrl;
	TREELIST *item;

	if(hittype != C_TYPE_SELECT)
		return;

	item=gVCTree->GetLastItem();
	if(item && item->Item_)
	{
		vctrl=(C_Victory*)item->Item_;
		vc=(victory_condition*)vctrl->GetPtr();
		if(vc)
		{
			vc->set_type((victory_type)((C_ListBox*)control)->GetTextID());
			UpdateVCOptions(vc);
			if(vc->get_type() == vt_destroy && vc->get_sub_objective() < 0)
			{
				// we need to target a building
				C_Window *win;
				C_Base *btn;

				SetCursor(gCursors[CRSR_WAIT]);

				win=gMainHandler->FindWindow(RECON_LIST_WIN);
				if(win)
				{
					if(TargetTree)
						TargetTree->DeleteBranch(TargetTree->GetRoot());

					if(!OldReconCWCB)
					{
						btn=win->FindControl(CLOSE_WINDOW);
						if(btn)
						{
							OldReconCWCB=btn->GetCallback();
							btn->SetCallback(TgtAssignCWCB);
						}
					}
					btn=win->FindControl(SET_VC);
					if(btn)
						btn->SetFlagBitOff(C_BIT_INVISIBLE);
					btn->Refresh();
				}
				SelectToolTypeCB(TARGET_VC,C_TYPE_LMOUSEUP,vctrl);
				BuildSpecificTargetList(vc->get_vu_id());
			}
			else if(vc->get_type() != vt_destroy)
				vc->set_sub_objective(-1);
		}
	}
}

// sets up the target
void VCSetTargetCB(long,short hittype,C_Base *control)
{
	victory_condition *vc;
	C_Victory *vctrl;
	TREELIST *item;
	C_Window *win;
	C_Base *btn;

	if(hittype != C_TYPE_LMOUSEUP)
		return;

	if(control && control->GetUserNumber(10))
	{
		SetCursor(gCursors[CRSR_WAIT]);

		item=gVCTree->GetLastItem();
		if(item && item->Item_)
		{
			vctrl=(C_Victory*)item->Item_;
			vc=(victory_condition*)vctrl->GetPtr();
			win=gMainHandler->FindWindow(RECON_LIST_WIN);
			if(win && vc)
			{
				if(TargetTree)
					TargetTree->DeleteBranch(TargetTree->GetRoot());

				if(!OldReconCWCB)
				{
					btn=win->FindControl(CLOSE_WINDOW);
					if(btn)
					{
						OldReconCWCB=btn->GetCallback();
						btn->SetCallback(TgtAssignCWCB);
					}
				}
				btn=win->FindControl(SET_VC);
				if(btn)
					btn->SetFlagBitOff(C_BIT_INVISIBLE);
				btn->Refresh();
				BuildSpecificTargetList(vc->get_vu_id());
			}
		}
	}
	SelectToolTypeCB(TARGET_VC,hittype,control);
}

// sets up the target & Args controls
void VCArgsCB(long,short hittype,C_Base *)
{
	victory_condition *vc;
	C_Victory *vctrl;
	TREELIST *item;

	if(hittype != C_TYPE_SELECT)
		return;

	item=gVCTree->GetLastItem();
	if(item && item->Item_)
	{
		vctrl=(C_Victory*)item->Item_;
		vc=(victory_condition*)vctrl->GetPtr();
		if(vc)
		{
			vc->set_tolerance(vctrl->GetArgs()->GetTextID());
		}
	}
}

// sets up the target & Args controls
void VCSetPointsCB(long,short hittype,C_Base *control)
{
	victory_condition *vc;
	C_Victory *vctrl;
	TREELIST *item;

	if(hittype && hittype != DIK_RETURN)
		return;

	item=gVCTree->GetLastItem();
	if(item && item->Item_)
	{
		vctrl=(C_Victory*)item->Item_;
		vc=(victory_condition*)vctrl->GetPtr();
		if(vc)
		{
			vc->set_points(((C_EditBox*)control)->GetInteger());
		}
	}
	update_team_victory_window ();
}

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

	if(gVCTree)
		gVCTree->SetAllControlStates(0,gVCTree->GetRoot());
	SelectToolTypeCB(0,C_TYPE_LMOUSEUP,NULL);
}

void AssignVCCB(long ID,short hittype,C_Base *control)
{
	TREELIST *item;
	C_Victory *vctrl;
	victory_condition *vc;
	if(hittype != C_TYPE_LMOUSEUP)
		return;

	CloseReconWindowCB(ID,hittype,control);

	if(FeatureID != FalconNullId && FeatureNo >= 0)
	{
		if(gVCTree)
		{
			item=gVCTree->GetLastItem();
			if(item) // MUST MAKE SURE they didn't switch Items while targetting
			{
				vctrl=(C_Victory*)item->Item_;
				if(vctrl)
				{
					vc=(victory_condition*)vctrl->GetPtr();
					if(vc)
					{
						vc->set_vu_id(FeatureID);
						vc->set_sub_objective(FeatureNo);
						gMapMgr->AddVC(vc);
						UpdateVCOptions(vc); // sets valid list box stuff etc
						// Clear TOOL stuff
						SelectToolTypeCB(0,C_TYPE_LMOUSEUP,NULL);
					}
				}
			}
		}
	}
}

void SetVCTargetInfo(CampEntity ent)
{
	TREELIST *item;
	C_Victory *vctrl;
	victory_condition *vc;

	if(!gVCTree)
		return;

	if(ent->IsFlight())
	{
		item=gVCTree->GetLastItem();
		if(item)
		{
			vctrl=(C_Victory*)item->Item_;
			if(vctrl)
			{
				vc=(victory_condition*)vctrl->GetPtr();
				if(vc)
				{
					vc->set_vu_id(ent->Id());
					vc->set_type(vt_intercept);
					vc->set_tolerance(max(1,min(4,((Flight)ent)->GetTotalVehicles())));
					gMapMgr->AddVC(vc);
					UpdateVCOptions(vc);
				}
			}
		}
	}
	else if(ent->IsObjective())
	{
		C_Window *win;
		C_Base *btn;

		SetCursor(gCursors[CRSR_WAIT]);

		win=gMainHandler->FindWindow(RECON_LIST_WIN);
		if(win)
		{
			if(TargetTree)
				TargetTree->DeleteBranch(TargetTree->GetRoot());

			if(!OldReconCWCB)
			{
				btn=win->FindControl(CLOSE_WINDOW);
				if(btn)
				{
					OldReconCWCB=btn->GetCallback();
					btn->SetCallback(TgtAssignCWCB);
				}
			}
			btn=win->FindControl(SET_VC);
			if(btn)
				btn->SetFlagBitOff(C_BIT_INVISIBLE);
			btn->Refresh();
			BuildSpecificTargetList(ent->Id());
		}
	}
	else if(ent->IsBattalion())
	{
		item=gVCTree->GetLastItem();
		if(item)
		{
			vctrl=(C_Victory*)item->Item_;
			if(vctrl)
			{
				vc=(victory_condition*)vctrl->GetPtr();
				if(vc)
				{
					vc->set_vu_id(ent->Id());
					vc->set_type(vt_attrit);
					vc->set_tolerance(10);
					gMapMgr->AddVC(vc);
					UpdateVCOptions(vc);
				}
			}
		}
	}
}

void SelectVCTargetCB(long ID,short hittype,C_Base *control)
{
	C_MapIcon *icon;
	UI_Refresher *urec;
	CampEntity ent;
	C_Victory *vctrl;
	victory_condition *vc;
	TREELIST *item;

	if(hittype != C_TYPE_LMOUSEUP)
		return;

	icon=(C_MapIcon*)control;
	if(control)
	{
		ID=icon->GetIconID();
		urec=(UI_Refresher*)gGps->Find(ID);
		if(urec)
		{
			item=gVCTree->GetLastItem();
			if(item)
			{
				vctrl=(C_Victory*)item->Item_;
				if(vctrl)
				{
					vc=(victory_condition*)vctrl->GetPtr();
					if(vc)
					{
						ent=(CampEntity)vuDatabase->Find(urec->GetID());
						if(ent)
						{
							vc->set_vu_id(urec->GetID());
							gMapMgr->AddVC(vc);
							if(ent->IsObjective())
							{
								if(vc->get_type() == vt_destroy)
								{
									SetVCTargetInfo(ent);
								}
								else
								{
									if(vc->get_type() != vt_occupy && vc->get_type() != vt_degrade)
									{
										vc->set_type(vt_degrade);
										vc->set_tolerance(10);
									}
									UpdateVCOptions(vc);
								}
							}
							else if(ent->IsFlight())
							{
								vc->set_type(vt_intercept);
								vc->set_tolerance(min(4,((Flight)ent)->GetTotalVehicles()));
								UpdateVCOptions(vc);
							}
							else if(ent->IsBattalion())
							{
								vc->set_type(vt_attrit);
								vc->set_tolerance(10);
								UpdateVCOptions(vc);
							}
						}
					}
				}
			}
		}
	}
}

void VCActionOpenCB(C_Base *me)
{
	TREELIST *item;
	C_Victory *vctrl;
	victory_condition *vc;

	if(!gVCTree)
		return;

	item=gVCTree->GetLastItem();
	if(!item)
		return;

	vctrl=(C_Victory *)item->Item_;
	if(!vctrl)
		return;

	vc=(victory_condition*)vctrl->GetPtr();
	if(!vc)
		return;

	switch(vc->get_type())
	{
		case vt_intercept:
			((C_ListBox*)me)->SetItemFlags(vt_degrade,C_BIT_INVISIBLE);
			((C_ListBox*)me)->SetItemFlags(vt_occupy,C_BIT_INVISIBLE);
			((C_ListBox*)me)->SetItemFlags(vt_destroy,C_BIT_INVISIBLE);
			((C_ListBox*)me)->SetItemFlags(vt_attrit,C_BIT_INVISIBLE);
			((C_ListBox*)me)->SetItemFlags(vt_intercept,C_BIT_ENABLED);
			break;
		case vt_attrit:
			((C_ListBox*)me)->SetItemFlags(vt_degrade,C_BIT_INVISIBLE);
			((C_ListBox*)me)->SetItemFlags(vt_occupy,C_BIT_INVISIBLE);
			((C_ListBox*)me)->SetItemFlags(vt_destroy,C_BIT_INVISIBLE);
			((C_ListBox*)me)->SetItemFlags(vt_attrit,C_BIT_ENABLED);
			((C_ListBox*)me)->SetItemFlags(vt_intercept,C_BIT_INVISIBLE);
			break;
		case vt_degrade:
		case vt_occupy:
		case vt_destroy:
			((C_ListBox*)me)->SetItemFlags(vt_degrade,C_BIT_ENABLED);
			((C_ListBox*)me)->SetItemFlags(vt_occupy,C_BIT_ENABLED);
			((C_ListBox*)me)->SetItemFlags(vt_destroy,C_BIT_ENABLED);
			((C_ListBox*)me)->SetItemFlags(vt_attrit,C_BIT_INVISIBLE);
			((C_ListBox*)me)->SetItemFlags(vt_intercept,C_BIT_INVISIBLE);
			break;
	}
}

void VCArgsOpenCB(C_Base *me)
{
	TREELIST *item;
	C_Victory *vctrl;
	victory_condition *vc;
	CampEntity ent;
	long i;

	if(!gVCTree)
		return;

	item=gVCTree->GetLastItem();
	if(!item)
		return;

	vctrl=(C_Victory *)item->Item_;
	if(!vctrl)
		return;

	vc=(victory_condition*)vctrl->GetPtr();
	if(!vc)
		return;

	if(vc->get_type() == vt_intercept)
	{
		ent=(CampEntity)vuDatabase->Find(vc->get_vu_id());
		if(ent && ent->IsFlight())
		{
			for(i=1;i<=((Flight)ent)->GetTotalVehicles();i++)
				((C_ListBox*)me)->SetItemFlags(i,C_BIT_ENABLED);

			for(;i<=4;i++)
				((C_ListBox*)me)->SetItemFlags(i,C_BIT_INVISIBLE);
		}
	}
}

C_Victory *MakeVCControl(victory_condition *vc)
{
	C_Victory *vcntrl;
	C_ListBox *lbox;
	C_Button *btn;
	C_EditBox *ebox;
	C_Text *txt;
	CampEntity ent;
	_TCHAR buffer[60];
	long fh;

	if(!gVCTree)
		return(NULL);

	fh=gFontList->GetHeight(gVCTree->GetFont())+2;

	ent=(CampEntity)vuDatabase->Find(vc->get_vu_id());

	vcntrl=new C_Victory;
	vcntrl->Setup(vc->get_number(),0);
	vcntrl->SetPtr(vc);
	vcntrl->SetCallback(VCSelectVCCB);

	// VC ID #
	_stprintf(buffer,"%1d",vc->get_number());
	txt=new C_Text;
	txt->Setup(C_DONT_CARE,0);
	txt->SetFixedWidth(4);
	txt->SetText(buffer);
	txt->SetFlagBitOn(C_BIT_RIGHT);
	vcntrl->SetNumber(txt);

	// Team Name
	lbox=new C_ListBox;
	lbox->Setup(1,0,gMainHandler);
	lbox->SetWH(gVCTree->GetUserNumber(11),fh);
	lbox->SetBgFill(0,0,0,0);
	lbox->SetBgColor(11370561); // 
	lbox->SetRoot(team_lbox);
	lbox->SetValue(vc->get_team());
	lbox->SetDropDown (BID_DROPDOWN);
	lbox->SetCallback(VCChangeTeamNoCB);
	lbox->SetFlagBitOff(C_BIT_ENABLED);
	lbox->SetFlagBitOn(gVCTree->GetFlags() & C_BIT_ENABLED);
	vcntrl->SetTeam(lbox);
	
	// Action
	lbox=new C_ListBox;
	lbox->Setup(2,0,gMainHandler);
	lbox->SetWH(gVCTree->GetUserNumber(12),fh);
	lbox->SetBgFill(0,0,0,0);
	lbox->SetBgColor(11370561); // 
	lbox->SetRoot(action_lbox);
	lbox->SetValue(vc->get_type());
	lbox->SetOpenCallback(VCActionOpenCB);
	lbox->SetCallback(VCChangeActionCB);
	lbox->SetFlagBitOff(C_BIT_ENABLED);
	lbox->SetFlagBitOn(gVCTree->GetFlags() & C_BIT_ENABLED);
	lbox->SetDropDown (BID_DROPDOWN);
	if(!ent)
		lbox->SetFlagBitOn(C_BIT_INVISIBLE);
	vcntrl->SetAction(lbox);

	
	if(ent)
		{
		if (ent->IsFlight())
			GetCallsign (((Flight)ent)->callsign_id, ((Flight)ent)->callsign_num, buffer);
		else if (ent->IsObjective())

⌨️ 快捷键说明

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