using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using System.Linq; using UnityEngine.UI; using AX.NetworkSystem; /// /// 指挥中心调派人数数据类(演习模式) /// public class CommandFiremanNumSyncData { public UserData selectUserData; public int num; } public class PowerTransferController : MonoBehaviour { public GameObject SelectOne; public GameObject SelectTwo; public DropDownRecordByAC SelectDrop; public Transform ScrollOneParent; public Transform ScrollTwoParent; public GameObject ScrollItemPrefab; public Transform PowerItemParent; public Transform PowerItemParent1; public List AllCarMessage; public GameObject PowerItemPrefab; public InputField PeoPleNumInput; public ButtonRecordByAC SureBtn; public GameObject Shows; public Text ShowsTitle; private List BindList; private List AllOrgDataList; private bool IsTwo; private Dictionary DropDownDic; private Dictionary ToggleDic; private ToggleGroup Tgroup; private List BindCarList; private List BindCarList1; private UserData NowSelectUser; public GameObject Error; public GameObject Caption; public GameObject ShowScroll; public GameObject Caption1; public GameObject ShowScroll1; public GameObject PeopleNum; public GameObject InputFieldPeopleNum; private int shuiGuanCheNum; private int paoMoCheNum; private int gaoPenCheCheNum; private int yunTiCheNum; private int juGaoCheNum; private int paiYanCheNum; private int qiangXianCheNum; private int zhaoMingCheNum; private int qiChaiCheNum; private int gongQiCheNum; private int poChaiCheNum; public GameObject hintWin; private List SelectCars1 = new List(); private List CarsNum1 = new List(); void Bind() { Tgroup = GetComponent(); if (IsTwo) { SelectTwo.gameObject.SetActive(true); SelectOne.gameObject.SetActive(false); } else { SelectTwo.gameObject.SetActive(false); SelectOne.gameObject.SetActive(true); List dataList = new List(); foreach (var item in CurrentUserInfo.room.UserList) { if (GetParentOrgId(item.Org.ParentId) == CurrentUserInfo.organization.Id && item.Role == Role.中队指挥) { dataList.Add(item); } } SelectScrollBind(dataList); } SureBtn.OutInterFaceButton = SureBtnClick; } private void SureBtnClick() { if (GameSettings.othersSettings.mode == Mode.manoeuvre) { List ActiveCars = new List(); List SelectCars = new List(); if (PeoPleNumInput.text == null || PeoPleNumInput.text == "") { //提示需要输入调派人数 Error.SetActive(true); Error.GetComponent().text = "请输入调派人数"; return; } else { int result = int.Parse(PeoPleNumInput.text); if (result <= 0) {//提示请输入正整数 Error.SetActive(true); Error.GetComponent().text = "请输入正整数"; return; } } int num = int.Parse(PeoPleNumInput.text); int minnum, maxnum = 0, persons = 0; if (CurrentUserInfo.role == Role.总队指挥中心) { foreach (Transform child in ScrollTwoParent) { if (child.GetComponent().isOn) { persons = child.GetComponent().Persons; } } } if (CurrentUserInfo.role == Role.支队指挥中心) { foreach (Transform child in ScrollOneParent) { if (child.GetComponent().isOn) { persons = child.GetComponent().Persons; } } } if (num > persons) { //提示调派人数大于此中队的总人数 Error.SetActive(true); Error.GetComponent().text = "调派人数大于中队总人数"; return; } foreach (FireCarEngine f in BindCarList) { if (f.IsActive == 1) { ActiveCars.Add(f); } } if (ActiveCars.Count <= 0) { //提示没有可用的车辆调派 Error.SetActive(true); Error.GetComponent().text = "该中队没有可用的车辆调派"; return; } foreach (Transform t in PowerItemParent) { if (t.GetComponent().ControlToggle.isOn) { SelectCars.Add(t.GetComponent().MyData); } } if (SelectCars.Count == 0) { //提示没有选择要调派的车辆 Error.SetActive(true); Error.GetComponent().text = "请选择要调派的车辆"; return; } foreach (Transform t in PowerItemParent) { if (t.GetComponent().ControlToggle.isOn) { maxnum += int.Parse(t.GetComponent().MyData.PassengerCapacity.ToString()); } } if (num > maxnum) { //提示调派人数大于可载总人数 Error.SetActive(true); Error.GetComponent().text = "调派人数大于可载总人数"; return; } minnum = SelectCars.Count; if (minnum > num) { //提示调派人数少于车辆辆数 Error.SetActive(true); Error.GetComponent().text = "调派人数少于调派的车辆数"; return; } //动态分配人数 int[] PersonNum = new int[SelectCars.Count]; while (num > 0) { for (int i = 0; i < SelectCars.Count; i++) { if (num > 0 && PersonNum[i] < SelectCars[i].PassengerCapacity) { PersonNum[i] += 1; num--; } } } List> tempPowers = new List>(); for (int i = 0; i < SelectCars.Count; i++) { SelectCars[i].PassengerCapacity = PersonNum[i]; tempPowers.Add(new KeyValuePair(SelectCars[i], 1)); } List> powers = new List>(); var GroupResult = from FireCarEngine in tempPowers group FireCarEngine by FireCarEngine.Key.Type; foreach (IGrouping> item in GroupResult) { powers.Add(new KeyValuePair(item.ToList()[0].Key, item.Count())); } //foreach (var item in powers) //{ // for (int i = 0; i < item.Value; i++) // { // } //} //发给各个客户端调派人数,下车跟作战部署用 NetworkManager.Default.SendAsync("COMMANDCENTER_FIREMANNUM_SYNC", new CommandFiremanNumSyncData() { selectUserData = NowSelectUser, num = int.Parse(PeoPleNumInput.text) }); //先通报灾情 NetworkManager.Default.SendAsync("COMMANDCENTER_VEHICLETRANSFER_SYNC", new KeyValuePair>>>(NowSelectUser.UserInfo.Id, new KeyValuePair>>(GameSettings.disasterSetting.policeCallData, powers) )); //发送给房间内各个客服端调派车辆数据,作战部署力量列表用 NetworkManager.Default.SendAsync("FIREDEPLOY_ENGINES_SYNC", new KeyValuePair>>(NowSelectUser.Org.DisplayName, powers)); //合理分配人数给中队派车(出警界面刷出车辆信息开始计时) //禁用已经调派车辆 foreach (var item in SelectCars) { foreach (var c in AllCarMessage) { if (c.Id == item.Id) { c.IsActive = 0; break; } } } //刷新显示 foreach (var item in SelectCars) { foreach (Transform t in PowerItemParent) { if (t.GetComponent().MyData.Id == item.Id) { t.GetComponent().Bind(item); } } } StartCoroutine(WaitBtnEnable()); } if (GameSettings.othersSettings.mode == Mode.Practice) { SelectCars1.Clear(); CarsNum1.Clear(); foreach (Transform t in PowerItemParent1) { if (t.GetComponent().ControlToggle.isOn) { SelectCars1.Add(t.GetComponent().MyData); int result; if (int.TryParse(t.Find("PoliceCallNum").GetComponent().text, out result)) { CarsNum1.Add(int.Parse(t.Find("PoliceCallNum").GetComponent().text)); } } } if (SelectCars1.Count == 0) { //提示没有选择要调派的车辆 Error.SetActive(true); Error.GetComponent().text = "请选择要调派的车辆"; return; } bool flag = false; foreach (Transform t in PowerItemParent1) { if (t.GetComponent().ControlToggle.isOn) { if (t.Find("PoliceCallNum").GetComponent().text == "") { flag = true; break; } } } if (flag) { //提示没有选择要调派的车辆 Error.SetActive(true); Error.GetComponent().text = "选择的车辆有未输入调派数量的项"; return; } bool flag1 = false; foreach (Transform t in PowerItemParent1) { if (t.GetComponent().ControlToggle.isOn) { int inputCount = int.Parse(t.Find("PoliceCallNum").GetComponent().text); int activeCount = int.Parse(t.Find("ActiveCars").GetComponent().text); if (inputCount > activeCount) { flag1 = true; break; } } } if (flag1) { hintWin.SetActive(true); } else { Sure(); } } } public void Sure() { List> powers = new List>(); for (int i = 0; i < SelectCars1.Count; i++) { powers.Add(new KeyValuePair(SelectCars1[i], CarsNum1[i])); } //先通报灾情 //合理分配人数给中队派车(出警界面刷出车辆信息开始计时) NetworkManager.Default.SendAsync("COMMANDCENTER_VEHICLETRANSFER_SYNC", new KeyValuePair>>>(NowSelectUser.UserInfo.Id, new KeyValuePair>>(GameSettings.disasterSetting.policeCallData, powers) )); hintWin.SetActive(false); //发送给房间内各个客服端调派车辆数据,作战部署力量列表用 NetworkManager.Default.SendAsync("FIREDEPLOY_ENGINES_SYNC", new KeyValuePair>>(NowSelectUser.Org.DisplayName, powers)); StartCoroutine(WaitBtnEnable()); } IEnumerator WaitBtnEnable() { SureBtn.GetComponent