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