Browse Source

修改演习模式下人员调派数量数据错误导致进场景后下车、力量部署、到场力量、在途力量、最后的统计中消防员的数量不对的问题

develop
曹衍涛 4 years ago
parent
commit
45446908a3
  1. 63
      Assets/Scripts/Common/ChatSystem/FireSiteInfo/ArrivedPower/ArrivedForceContent.cs
  2. 58
      Assets/Scripts/Common/ChatSystem/FireSiteInfo/ArrivedPower/ArrivedForceItem.cs
  3. 11
      Assets/Scripts/Common/ChatSystem/FireSiteInfo/ArrivedPower/ArrivedPowerTotal.cs
  4. 107
      Assets/Scripts/Common/ChatSystem/FireSiteInfo/OnwayForce/OnwayContent.cs
  5. 61
      Assets/Scripts/Common/ChatSystem/FireSiteInfo/OnwayForce/OnwayForceItem.cs
  6. 11
      Assets/Scripts/Common/ChatSystem/FireSiteInfo/OnwayForce/OnwayForceTotal.cs
  7. 6
      Assets/Scripts/Common/ChatSystem/NetWork/ARRIVAL_TIME_REPLY.cs
  8. 101
      Assets/Scripts/Common/CommandCenter/COMMANDCENTER_FIREMANNUM_SYNC.cs
  9. 11
      Assets/Scripts/Common/CommandCenter/COMMANDCENTER_FIREMANNUM_SYNC.cs.meta
  10. 23
      Assets/Scripts/Common/CommandCenter/PowerTransferController.cs
  11. 25
      Assets/Scripts/Common/GameSettings/GameSettings.cs
  12. 6
      Assets/Scripts/Common/NetworkSystem/NetWorkSync/FIREDEPLOY_ARRIVED_SYNC.cs
  13. 59
      Assets/Scripts/Common/OperationalPreparation/FIREDEPLOY_ENGINES_SYNC.cs
  14. 5
      Assets/Scripts/Common/OperationalPreparation/FireEngines.cs
  15. 39
      Assets/Scripts/Common/OperationalPreparation/FireEnginesData.cs
  16. 99
      Assets/Scripts/Common/ReceiveCars/CloneStayingAreaTool.cs
  17. 29
      Assets/Scripts/Common/ReportSystem/ReportDataMgr.cs
  18. 2
      Assets/Scripts/Common/RoomWaiting/COMMANDCENTER_VEHICLETRANSFER_SYNC.cs

63
Assets/Scripts/Common/ChatSystem/FireSiteInfo/ArrivedPower/ArrivedForceContent.cs

@ -2,6 +2,7 @@
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using System.Linq;
public class ArrivedForceContent : MonoBehaviour {
public GameObject itemPre;
@ -19,18 +20,66 @@ public class ArrivedForceContent : MonoBehaviour {
{
itemPre = Resources.Load("ArrivedForce/ArrivedForceItem") as GameObject;
}
foreach(string team in arrivedCars.Keys)
if (GameSettings.othersSettings.mode == Mode.manoeuvre)
{
List<KeyValuePair<FireCarEngine, int>> list = arrivedCars[team];
foreach(KeyValuePair<FireCarEngine,int> pair in list)
foreach (string team in GameSettings.othersSettings.DisCarList_Dic.Keys)
{
for(int j = 0; j < pair.Value; j++)
if (GameSettings.othersSettings.DisPlay_Arrive_Dic[team])
{
GameObject item = Instantiate(itemPre, transform);
item.GetComponent<ArrivedForceItem>().Set(team,pair.Key, j);
List<KeyValuePair<FireCarEngine, bool>> list = GameSettings.othersSettings.DisCarList_Dic[team];
//int childcount = 0;
//车辆列表
List<FireCarEngine> carlist = new List<FireCarEngine>();
foreach (var item in list)
{
carlist.Add(item.Key);
}
//按照车辆类型名分组
var aa = from firecar in carlist group firecar by firecar.TypeName;
var bb = aa.ToList();
//将分组后的车辆转为list
List<List<FireCarEngine>> cc = new List<List<FireCarEngine>>();
foreach (var item in bb)
{
cc.Add(item.ToList());
}
foreach (var listcar in cc)
{
for (int j = 0; j < listcar.Count; j++)
{
GameObject item = Instantiate(itemPre, transform);
item.GetComponent<ArrivedForceItem>().Set(team, listcar[j], j);
}
}
////
//foreach (KeyValuePair<FireCarEngine, bool> pair in list)
//{
// childcount++;
// Debug.LogError("创建的到达item" + childcount);
// GameObject item = Instantiate(itemPre, transform);
// item.GetComponent<ArrivedForceItem>().Setitem(team, pair.Key, childcount,transform);
//}
}
}
}
else
{
foreach (string team in arrivedCars.Keys)
{
List<KeyValuePair<FireCarEngine, int>> list = arrivedCars[team];
foreach (KeyValuePair<FireCarEngine, int> pair in list)
{
for (int j = 0; j < pair.Value; j++)
{
GameObject item = Instantiate(itemPre, transform);
item.GetComponent<ArrivedForceItem>().Set(team, pair.Key, j);
}
}
}
}
}
}
public void CreateItems(List<TruckMessage> trucks)
{

58
Assets/Scripts/Common/ChatSystem/FireSiteInfo/ArrivedPower/ArrivedForceItem.cs

@ -9,6 +9,11 @@ public class ArrivedForceItem : MonoBehaviour {
public Text foam; //载泡沫量
public Text height; //高度
public Text num; //载人数量
public string TypeName;//车辆类型名
public string Team;//所属中队
public int index=1;//序号
private bool hasSet = false;
private void Awake()
{
fullName = transform.Find("FullName").GetComponent<Text>();
@ -24,7 +29,8 @@ public class ArrivedForceItem : MonoBehaviour {
foam.text = msg.MyCarMessage.FoamAmount.ToString();
height.text = msg.MyCarMessage.Height.ToString();
num.text = msg.MyCarMessage.PassengerCapacity.ToString();
}
}
public void Set(string team,FireCarEngine fireCarEngine,int num)
{
fullName.text = team + "-" + fireCarEngine.TypeName + "-" + (num + 1).ToString();
@ -33,4 +39,54 @@ public class ArrivedForceItem : MonoBehaviour {
height.text = fireCarEngine.Height.ToString();
this.num.text = fireCarEngine.PassengerCapacity.ToString();
}
public void Set(int num)
{
fullName.text = fullName.text + (num + 1).ToString();
}
public void Setitem(string team, FireCarEngine fireCarEngine,int childcount,Transform parent)
{
//fullName.text = team + "-" + fireCarEngine.TypeName;
water.text = fireCarEngine.WaterAmount.ToString();
foam.text = fireCarEngine.FoamAmount.ToString();
height.text = fireCarEngine.Height.ToString();
this.num.text = fireCarEngine.PassengerCapacity.ToString();
Team = team;
TypeName = fireCarEngine.TypeName;
fullName.text = team + "-" + fireCarEngine.TypeName + "-" + GetIndex(childcount, parent).ToString();
}
int GetIndex(int childcount,Transform parent)
{
if (!hasSet)
{
int childs = childcount;
//只有一条数据
if(parent.childCount - 2>=0)
{//有多条数据
//获取上一条数据的中队名
string lastteam = parent.GetChild(parent.childCount-2).GetComponent<ArrivedForceItem>().Team;
if (lastteam == Team)//如果是同一中队,获取上一个的车辆类型
{
string lasttype = parent.GetChild(childs - 1).GetComponent<ArrivedForceItem>().TypeName;
if (lasttype == TypeName) //同一中队同一车辆类型,获取上一个的index
{
int lastindex = parent.GetChild(childs - 1).GetComponent<ArrivedForceItem>().index;
index = lastindex + 1;
}
else
{
index = 1;
}
}
else
{
index = 1;
}
}
hasSet = true;
}
return index;
}
}

11
Assets/Scripts/Common/ChatSystem/FireSiteInfo/ArrivedPower/ArrivedPowerTotal.cs

@ -39,6 +39,17 @@ public class ArrivedPowerTotal : MonoBehaviour
firemenCount += (int)pair.Key.PassengerCapacity * pair.Value;
}
}
if (GameSettings.othersSettings.mode==Mode.manoeuvre)
{
firemenCount = 0;
foreach (var item in GameSettings.othersSettings.DisplayName_Num_Dic.Keys)
{
if (GameSettings.othersSettings.DisPlay_Arrive_Dic[item])
{
firemenCount += GameSettings.othersSettings.DisplayName_Num_Dic[item];
}
}
}
GetComponent<Text>().text = "到场力量共" + arrivedCars.Count + "个中队" + trucksCount + "辆车," + firemenCount + "名消防员。";
content.GetComponent<ArrivedForceContent>().CreateItems(arrivedCars);
}

107
Assets/Scripts/Common/ChatSystem/FireSiteInfo/OnwayForce/OnwayContent.cs

@ -1,8 +1,10 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Linq;
public class OnwayContent : MonoBehaviour {
public class OnwayContent : MonoBehaviour
{
public GameObject itemPre;
public void CreateItems(Dictionary<string, List<KeyValuePair<FireCarEngine, int>>> allCars)
@ -15,21 +17,108 @@ public class OnwayContent : MonoBehaviour {
{
itemPre = Resources.Load("OnwayForce/OnwayForceItem") as GameObject;
}
foreach(string team in allCars.Keys)
if (GameSettings.othersSettings.mode == Mode.manoeuvre)
{
/*foreach(KeyValuePair<FireCarEngine,int> pair in allCars[team])
//int childcount = 0;
foreach (var item in GameSettings.othersSettings.DisCarList_Dic.Keys)
{
GameObject item = Instantiate(itemPre, transform);
item.GetComponent<OnwayForceItem>().Set(team, pair);
}*/
foreach(KeyValuePair<FireCarEngine,int> pair in allCars[team])
if (GameSettings.othersSettings.DisPlay_Arrive_Dic[item] == false)
{
List<KeyValuePair<FireCarEngine, bool>> list = GameSettings.othersSettings.DisCarList_Dic[item];
List<FireCarEngine> carlist = new List<FireCarEngine>();
foreach (var Fireitem in list)
{
carlist.Add(Fireitem.Key);
}
//按照车辆类型名分组
var aa = from firecar in carlist group firecar by firecar.TypeName;
var bb = aa.ToList();
//将分组后的车辆转为list
List<List<FireCarEngine>> cc = new List<List<FireCarEngine>>();
foreach (var Listitem in bb)
{
cc.Add(Listitem.ToList());
}
foreach (var listcar in cc)
{
for (int j = 0; j < listcar.Count; j++)
{
GameObject preitem = Instantiate(itemPre, transform);
preitem.GetComponent<OnwayForceItem>().Set(item, (j + 1), listcar[j]);
}
}
//foreach (KeyValuePair<FireCarEngine, bool> pair in list)
//{
// childcount++;
// Debug.LogError("创建的到在途item" + childcount);
// GameObject itempre = Instantiate(itemPre, transform);
// itempre.GetComponent<OnwayForceItem>().SetItem(item, pair.Key, childcount,transform);
//}
}
}
}
else
{
foreach (string team in allCars.Keys)
{
for(int i = 0; i < pair.Value; i++)
/*foreach(KeyValuePair<FireCarEngine,int> pair in allCars[team])
{
GameObject item = Instantiate(itemPre, transform);
item.GetComponent<OnwayForceItem>().Set(team, i + 1, pair.Key);
item.GetComponent<OnwayForceItem>().Set(team, pair);
}*/
foreach (KeyValuePair<FireCarEngine, int> pair in allCars[team])
{
for (int i = 0; i < pair.Value; i++)
{
GameObject item = Instantiate(itemPre, transform);
item.GetComponent<OnwayForceItem>().Set(team, i + 1, pair.Key);
}
}
}
}
}
/// <summary>
/// 获取没有到达的中队
/// </summary>
/// <returns></returns>
private List<string> GetNotArriveTeam()
{
List<string> teams = new List<string>();
foreach (var item in GameSettings.othersSettings.DisPlay_Arrive_Dic.Keys)
{
if (GameSettings.othersSettings.DisPlay_Arrive_Dic[item] == false)
{
teams.Add(item);
}
}
return teams;
}
/// <summary>
/// 获取该中队调派的所有车辆
/// </summary>
/// <param name="team"></param>
/// <returns></returns>
private List<FireCarEngine> GetTeamCar(string team)
{
List<FireCarEngine> cars = new List<FireCarEngine>();
List<KeyValuePair<FireCarEngine, bool>> carpair = GameSettings.othersSettings.DisCarList_Dic[team];
for (int i = 0; i < carpair.Count; i++)
{
cars.Add(carpair[i].Key);
}
return cars;
}
private List<FireCarEngine> OrderCars(List<FireCarEngine> carslist)
{
List<FireCarEngine> orderlists = new List<FireCarEngine>();
var aa = from items in carslist orderby items.Type select items;
aa.ToList();//descending select items;
return orderlists;
}
}

61
Assets/Scripts/Common/ChatSystem/FireSiteInfo/OnwayForce/OnwayForceItem.cs

@ -19,6 +19,8 @@ public class OnwayForceItem : MonoBehaviour {
public UserData userData;
private string myTeam;
private FireCarEngine myCarEngine;
public int index = 0;
public void Set(string team,int i, FireCarEngine engine)
{
myTeam = team;
@ -45,6 +47,33 @@ public class OnwayForceItem : MonoBehaviour {
NetworkManager.Default.SendRequestAsync("ARRIVAL_TIME_REQUEST", new ArrivalTimePair() { sender = CurrentUserInfo.mySelf.Id, receiver = userData.UserInfo.Id, time = "",arrived=false});
}
}
public void SetItem(string team, FireCarEngine engine,int childcount,Transform parent)
{
myTeam = team;
myCarEngine = engine;
this.team = transform.Find("Team").GetComponent<Text>();
type = transform.Find("Type").GetComponent<Text>();
num = transform.Find("Num").GetComponent<Text>();
water = transform.Find("WaterAmount").GetComponent<Text>();
foam = transform.Find("FoamAmount").GetComponent<Text>();
height = transform.Find("Height").GetComponent<Text>();
firemen = transform.Find("FiremenCount").GetComponent<Text>();
arriveTime = transform.Find("ArriveTime").GetComponent<Text>();
this.team.text = team;
type.text = engine.TypeName;
water.text = engine.WaterAmount.ToString();
foam.text = engine.FoamAmount.ToString();
height.text = engine.Height.ToString();
firemen.text = engine.PassengerCapacity.ToString();
num.text = GetIndex(childcount, parent).ToString();
NetworkMessageDispatcher.AddListener("ARRIVAL_TIME_REPLY", SetArrivalTime);
userData = CurrentUserInfo.room.FindMidTeamUserIDByName(team);
if (userData != null)
{
NetworkManager.Default.SendRequestAsync("ARRIVAL_TIME_REQUEST", new ArrivalTimePair() { sender = CurrentUserInfo.mySelf.Id, receiver = userData.UserInfo.Id, time = "", arrived = false });
}
}
private void OnDestroy()
{
NetworkMessageDispatcher.RemoveListener("ARRIVAL_TIME_REPLY", SetArrivalTime);
@ -64,6 +93,38 @@ public class OnwayForceItem : MonoBehaviour {
}*/
}
}
int GetIndex(int childcount,Transform parent)
{
int childs = childcount;
//只有一条数据
if (childs < 2)
{
index = 1;
}
else
{//有多条数据
//获取上一条数据的中队名
string lastteam = parent.GetChild(childs - 1).GetComponent<OnwayForceItem>().team.text;
if (lastteam == team.text)//如果是同一中队,获取上一个的车辆类型
{
string lasttype = transform.parent.GetChild(childs - 1).GetComponent<OnwayForceItem>().type.text;
if (lasttype == type.text) //同一中队同一车辆类型,获取上一个的index
{
int lastindex = transform.parent.GetChild(childs - 1).GetComponent<OnwayForceItem>().index;
index = lastindex + 1;
}
else
{
index = 1;
}
}
else
{
index = 1;
}
}
return index;
}
}
/// <summary>
/// 中队力量到达时间信息对

11
Assets/Scripts/Common/ChatSystem/FireSiteInfo/OnwayForce/OnwayForceTotal.cs

@ -35,6 +35,17 @@ public class OnwayForceTotal : MonoBehaviour
firemen += (int)pair.Key.PassengerCapacity * pair.Value;
}
}
if (GameSettings.othersSettings.mode == Mode.manoeuvre)
{
firemen = 0;
foreach (var item in GameSettings.othersSettings.DisplayName_Num_Dic.Keys)
{
if (!GameSettings.othersSettings.DisPlay_Arrive_Dic[item])
{
firemen += GameSettings.othersSettings.DisplayName_Num_Dic[item];
}
}
}
GetComponent<Text>().text = "在途力量共" + teams + "个中队," + trucks + "辆车," + firemen + "名消防员";
if (content == null)
{

6
Assets/Scripts/Common/ChatSystem/NetWork/ARRIVAL_TIME_REPLY.cs

@ -15,6 +15,12 @@ public class ARRIVAL_TIME_REPLY : NetworkMessageBehaviour
{
string team = CurrentUserInfo.room.FindUserById(data.receiver).Org.DisplayName;
OnwayForceTotal.RemoveArrivedCar(team);
if (GameSettings.othersSettings.DisPlay_Arrive_Dic.ContainsKey(team))
{
GameSettings.othersSettings.DisPlay_Arrive_Dic[team] = true;
Debug.Log(team+"======="+ true);
}
}
}
}

101
Assets/Scripts/Common/CommandCenter/COMMANDCENTER_FIREMANNUM_SYNC.cs

@ -0,0 +1,101 @@
using AX.Network.Protocols;
using AX.Serialization;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class COMMANDCENTER_FIREMANNUM_SYNC : NetworkMessageBehaviour
{
static CommandFiremanNumSyncData thisinfo;
protected override void Execute(BinaryMessage message)
{
if(GameSettings.othersSettings.mode==Mode.manoeuvre)
{
var info = message.Body.Deserialize<CommandFiremanNumSyncData>();
thisinfo = info;
//当前客户端是调派客户端
if (CurrentUserInfo.mySelf.Id==info.selectUserData.UserInfo.Id)
{
GameSettings.othersSettings.nowperson = info.num;
GameSettings.othersSettings.personNum += info.num;
}
if (!GameSettings.othersSettings.DisplayName_Num_Dic.ContainsKey(info.selectUserData.Org.DisplayName))
{
GameSettings.othersSettings.DisplayName_Num_Dic.Add(info.selectUserData.Org.DisplayName, info.num);
}
else
{
GameSettings.othersSettings.DisplayName_Num_Dic[info.selectUserData.Org.DisplayName] += info.num;
}
Debug.Log( GameSettings.othersSettings.DisplayName_Num_Dic[info.selectUserData.Org.DisplayName]);
}
}
public static void SetCar()
{
//给新派遣的车辆分配人数
int nowperson = thisinfo.num;
List<KeyValuePair<FireCarEngine, bool>> carlistpire = new List<KeyValuePair<FireCarEngine, bool>>();
//查找该中队还未分配人数的车辆,也就是本次调派的车辆
if (GameSettings.othersSettings.DisCarList_Dic.ContainsKey(thisinfo.selectUserData.Org.DisplayName))
{
carlistpire = GameSettings.othersSettings.DisCarList_Dic[thisinfo.selectUserData.Org.DisplayName];
}
List<FireCarEngine> carlist = new List<FireCarEngine>();
List<FireCarEngine> carlistready = new List<FireCarEngine>();
if (carlistpire.Count > 0)
{
for (int i = 0; i < carlistpire.Count; i++)
{
if (carlistpire[i].Value == false)
{
carlist.Add(carlistpire[i].Key);
// carlistpire.Remove(carlistpire[i]);
}
else
{
carlistready.Add(carlistpire[i].Key);
}
}
}
if (nowperson > 0)
{
int[] PersonNum = new int[carlist.Count];
while (nowperson > 0)
{
for (int i = 0; i < carlist.Count; i++)
{
if (nowperson > 0 && PersonNum[i] < carlist[i].PassengerCapacity)
{
PersonNum[i] += 1;
nowperson--;
}
}
}
carlistpire.Clear();
for (int i = 0; i < carlistready.Count; i++)
{
KeyValuePair<FireCarEngine, bool> carpire = new KeyValuePair<FireCarEngine, bool>(carlistready[i], true);
carlistpire.Add(carpire);
}
for (int i = 0; i < carlist.Count; i++)
{
carlist[i].PassengerCapacity = PersonNum[i];
KeyValuePair<FireCarEngine, bool> carpire = new KeyValuePair<FireCarEngine, bool>(carlist[i], true);
carlistpire.Add(carpire);
}
GameSettings.othersSettings.DisCarList_Dic[thisinfo.selectUserData.Org.DisplayName] = carlistpire;
}
}
protected override void OnDestroy()
{
base.OnDestroy();
thisinfo = null;
}
}

11
Assets/Scripts/Common/CommandCenter/COMMANDCENTER_FIREMANNUM_SYNC.cs.meta

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 2206610ba23068244a480991e6309920
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

23
Assets/Scripts/Common/CommandCenter/PowerTransferController.cs

@ -6,6 +6,14 @@ using System.Linq;
using UnityEngine.UI;
using AX.NetworkSystem;
/// <summary>
/// 指挥中心调派人数数据类(演习模式)
/// </summary>
public class CommandFiremanNumSyncData
{
public UserData selectUserData;
public int num;
}
public class PowerTransferController : MonoBehaviour
{
public GameObject SelectOne;
@ -223,9 +231,19 @@ public class PowerTransferController : MonoBehaviour
{
powers.Add(new KeyValuePair<FireCarEngine, int>(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<long, KeyValuePair<PoliceCallData, List<KeyValuePair<FireCarEngine, int>>>>(NowSelectUser.UserInfo.Id,
new KeyValuePair<PoliceCallData, List<KeyValuePair<FireCarEngine, int>>>(GameSettings.disasterSetting.policeCallData, powers)
@ -235,6 +253,9 @@ public class PowerTransferController : MonoBehaviour
NetworkManager.Default.SendAsync("FIREDEPLOY_ENGINES_SYNC",
new KeyValuePair<string, List<KeyValuePair<FireCarEngine, int>>>(NowSelectUser.Org.DisplayName, powers));
//合理分配人数给中队派车(出警界面刷出车辆信息开始计时)
//禁用已经调派车辆
foreach (var item in SelectCars)
{

25
Assets/Scripts/Common/GameSettings/GameSettings.cs

@ -41,6 +41,24 @@ public class OthersSettings
//总指挥移交需要
public List<Organization> orgs = new List<Organization>();
public int personNum = 0;
public int nowperson = 0;
public Dictionary<string, int> DisplayName_Num_Dic = new Dictionary<string, int>();
/// <summary>
/// 中队是否到达
/// </summary>
public Dictionary<string, bool> DisPlay_Arrive_Dic = new Dictionary<string, bool>();
/// <summary>
/// 所有调派的车辆,key为中队名,List<KeyValuePair<FireCarEngine,bool>>是该中队的车辆,键值对的value为false表示该车还没有分派人数
/// </summary>
public Dictionary<string, List<KeyValuePair<FireCarEngine,bool>>> DisCarList_Dic=new Dictionary<string, List<KeyValuePair<FireCarEngine, bool>>>();
///// <summary>
///// 车辆是否到达,false为没有到达
///// </summary>
//public List<KeyValuePair<FireCarEngine, bool>> CarArriveList = new List<KeyValuePair<FireCarEngine, bool>>();
/// <summary>
/// 添加车辆
/// </summary>
@ -113,7 +131,12 @@ public class OthersSettings
//总指挥移交需要
orgs = new List<Organization>();
isSelectedDisaster = false;
}
personNum = 0;
nowperson = 0;
DisplayName_Num_Dic = new Dictionary<string, int>();
DisPlay_Arrive_Dic = new Dictionary<string, bool>();
DisCarList_Dic = new Dictionary<string, List<KeyValuePair<FireCarEngine, bool>>>();
}
}

6
Assets/Scripts/Common/NetworkSystem/NetWorkSync/FIREDEPLOY_ARRIVED_SYNC.cs

@ -12,5 +12,11 @@ public class FIREDEPLOY_ARRIVED_SYNC : NetworkMessageBehaviour
{
var team = message.Body.Deserialize<string>();
OnwayForceTotal.RemoveArrivedCar(team);
if (GameSettings.othersSettings.DisPlay_Arrive_Dic.ContainsKey(team))
{
GameSettings.othersSettings.DisPlay_Arrive_Dic[team] = true;
Debug.Log(team + "=======" + true);
}
}
}

59
Assets/Scripts/Common/OperationalPreparation/FIREDEPLOY_ENGINES_SYNC.cs

@ -5,6 +5,7 @@ using AX.NetworkSystem;
using AX.Serialization;
using AX.Network.Protocols;
using System;
using System.Reflection;
public class FIREDEPLOY_ENGINES_SYNC : NetworkMessageBehaviour
{
@ -18,5 +19,63 @@ public class FIREDEPLOY_ENGINES_SYNC : NetworkMessageBehaviour
//添加在途车辆
OnwayForceTotal.AddNewDeployedCar(info);
if (GameSettings.othersSettings.mode==Mode.manoeuvre)
{
if (!GameSettings.othersSettings.DisPlay_Arrive_Dic.ContainsKey(info.Key))
{
GameSettings.othersSettings.DisPlay_Arrive_Dic.Add(info.Key, false);
}
//把所有调派了的车辆添加到一个字典里
if (!GameSettings.othersSettings.DisCarList_Dic.ContainsKey(info.Key))
{
List<KeyValuePair<FireCarEngine, bool>> carlists = new List<KeyValuePair<FireCarEngine, bool>>();
List<KeyValuePair<FireCarEngine, int>> infovalue = info.Value;
for (int i = 0; i < infovalue.Count; i++)
{
FireCarEngine caroinfo = infovalue[i].Key;
for (int j = 0; j < infovalue[i].Value; j++)
{
FireCarEngine car = DeepCopyByReflection(caroinfo);
carlists.Add(new KeyValuePair<FireCarEngine, bool>(car, false));
}
}
GameSettings.othersSettings.DisCarList_Dic.Add(info.Key, carlists);
}
else
{
List<KeyValuePair<FireCarEngine, bool>> carlists = new List<KeyValuePair<FireCarEngine, bool>>();
List<KeyValuePair<FireCarEngine, int>> infovalue = info.Value;
for (int i = 0; i < infovalue.Count; i++)
{
for (int j = 0; j < infovalue[i].Value; j++)
{
FireCarEngine car = DeepCopyByReflection(infovalue[i].Key);
carlists.Add(new KeyValuePair<FireCarEngine, bool>(car, false));
}
}
GameSettings.othersSettings.DisCarList_Dic[info.Key].AddRange(carlists);
}
COMMANDCENTER_FIREMANNUM_SYNC.SetCar();
}
}
public static T DeepCopyByReflection<T>(T obj)
{
if (obj is string || obj.GetType().IsValueType)
return obj;
object retval = Activator.CreateInstance(obj.GetType());
FieldInfo[] fields = obj.GetType().GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance);
foreach (var field in fields)
{
try
{
field.SetValue(retval, DeepCopyByReflection(field.GetValue(obj)));
}
catch { }
}
return (T)retval;
}
}

5
Assets/Scripts/Common/OperationalPreparation/FireEngines.cs

@ -130,6 +130,11 @@ public class FireEngines : MonoBehaviour {
{
GameObject engine = GameObject.Instantiate(Engine, dept.transform.Find("Viewport/Content")) as GameObject;
engine.transform.Find("Text").GetComponent<Text>().text = "消防员" + "(" + Persons[orgList[i].DisplayName] + ")";
if (GameSettings.othersSettings.mode==Mode.manoeuvre)
{
engine.transform.Find("Text").GetComponent<Text>().text
= "消防员" + "(" + GameSettings.othersSettings.DisplayName_Num_Dic[orgList[i].DisplayName] + ")";
}
engine.transform.Find("Toggle/Background").GetComponent<Image>().color = colors[i];
engine.GetComponent<EngineItem>().org = orgList[i];

39
Assets/Scripts/Common/OperationalPreparation/FireEnginesData.cs

@ -84,8 +84,45 @@ public class FireEnginesData
Persons.Add(orgName, typeCarPersons);
}
//演习模式下设置每个单位人数
if(GameSettings.othersSettings.mode==Mode.manoeuvre)
{
foreach (var item in GameSettings.othersSettings.DisplayName_Num_Dic.Keys)
{
Persons[orgName] = GameSettings.othersSettings.DisplayName_Num_Dic[orgName];//GetNum(item);
}
}
}
public void UpdatePerson()
{
if (GameSettings.othersSettings.mode == Mode.manoeuvre)
{
foreach (var item in Persons.Keys)
{
Persons[item] = GetNum(item);
}
int allNum = 0;
foreach (var item in Persons.Keys)
{
allNum += Persons[item];
}
Debug.Log(allNum);
}
}
private int GetNum(string DisName)
{
int num = 0;
foreach (var item in GameSettings.othersSettings.DisplayName_Num_Dic.Keys)
{
if (item==DisName)
{
num = GameSettings.othersSettings.DisplayName_Num_Dic[item];
}
}
return num;
}
public Dictionary<string, List<KeyValuePair<FireCarEngine, int>>> GetAllCas()
{
return DeptCars;

99
Assets/Scripts/Common/ReceiveCars/CloneStayingAreaTool.cs

@ -7,6 +7,7 @@ using AX.InputSystem;
using UnityEngine.AI;
using AX.NetworkSystem;
using System.Linq.Expressions.Reimplement;
using System.Reflection;
public class CloneStayingAreaTool : CloneBase//集结区调车时注意场景中是否还有名称显示的预设(TheHeadName)
{
@ -263,9 +264,46 @@ public class CloneStayingAreaTool : CloneBase//集结区调车时注意场景中
{
for (int i = 0; i < item.Value; i++)
{
NowMyCarList.Add(item.Key);
FireCarEngine car = DeepCopyByReflection(item.Key);
NowMyCarList.Add(car);
}
}
// 演习模式单独处理车辆载人数
if (GameSettings.othersSettings.mode == Mode.manoeuvre)
{
// if(GameSettings.othersSettings.personNum >0)
{
int carnum = 0;
foreach (var item in GameSettings.othersSettings.CarList)
{
carnum += item.Value;
}
int[] PersonNum = new int[carnum];
int nowperson = GameSettings.othersSettings.personNum;
while (nowperson > 0)
{
for (int i = 0; i < NowMyCarList.Count; i++)
{
if (nowperson > 0 && PersonNum[i] < NowMyCarList[i].PassengerCapacity)
{
PersonNum[i] += 1;
nowperson--;
}
}
}
for (int i = 0; i < NowMyCarList.Count; i++)
{
NowMyCarList[i].PassengerCapacity = PersonNum[i];
}
for (int i = 0; i < PersonNum.Length; i++)
{
NowMyCarList[i].PassengerCapacity = PersonNum[i];
Debug.Log(NowMyCarList[i].PassengerCapacity);
}
}
}
}
//}
}
@ -273,7 +311,41 @@ public class CloneStayingAreaTool : CloneBase//集结区调车时注意场景中
//用来显示收到新调派的车辆
public void ReceiveNewCars(List<FireCarEngine> NewCars)
{
foreach (var NewCar in NewCars)
List<FireCarEngine> deepnewcars = new List<FireCarEngine>();
for (int i = 0; i < NewCars.Count; i++)
{
FireCarEngine car = DeepCopyByReflection(NewCars[i]);
deepnewcars.Add(car);
}
//演练模式单独处理当前客户端车辆载人数
if (GameSettings.othersSettings.mode==Mode.manoeuvre)
{
int nowperson = GameSettings.othersSettings.nowperson;
if (nowperson > 0)
{
int[] PersonNum = new int[deepnewcars.Count];
while (nowperson > 0)
{
for (int i = 0; i < deepnewcars.Count; i++)
{
if (nowperson > 0 && PersonNum[i] < deepnewcars[i].PassengerCapacity)
{
PersonNum[i] += 1;
nowperson--;
}
}
}
for (int i = 0; i < deepnewcars.Count; i++)
{
deepnewcars[i].PassengerCapacity = PersonNum[i];
}
}
}
foreach (var NewCar in deepnewcars)
{
NowMyCarList.Add(NewCar);
}
@ -350,6 +422,10 @@ public class CloneStayingAreaTool : CloneBase//集结区调车时注意场景中
Controller.PosList.Add(PosPoints[j]);
arg.fireCarEngine = NowMyCarList[0];
if (GameSettings.othersSettings.mode==Mode.manoeuvre)
{
arg.fireCarEngine.PassengerCapacity = NowMyCarList[0].PassengerCapacity;
}
long Id = EntitiesManager.Instance.CreateObjID(CurrentUserInfo.mySelf.Id);
CloneCommand.Instance.Execute(Id, arg);
NowMyCarList.Remove(NowMyCarList[0]);
@ -518,4 +594,23 @@ public class CloneStayingAreaTool : CloneBase//集结区调车时注意场景中
}
return safe;
}
public static T DeepCopyByReflection<T>(T obj)
{
if (obj is string || obj.GetType().IsValueType)
return obj;
object retval = Activator.CreateInstance(obj.GetType());
FieldInfo[] fields = obj.GetType().GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance);
foreach (var field in fields)
{
try
{
field.SetValue(retval, DeepCopyByReflection(field.GetValue(obj)));
}
catch { }
}
return (T)retval;
}
}

29
Assets/Scripts/Common/ReportSystem/ReportDataMgr.cs

@ -413,6 +413,15 @@ public class ReportDataMgr
// 检测是什么车
CheckedTruckData(item);
}
if (GameSettings.othersSettings.mode==Mode.manoeuvre)
{
totalFireman = 0;
foreach (var item in GameSettings.othersSettings.DisplayName_Num_Dic.Values)
{
totalFireman += item;
}
}
}
else
{
@ -437,6 +446,26 @@ public class ReportDataMgr
}
}
}
//演习模式单独处理消防员数量
if (GameSettings.othersSettings.mode==Mode.manoeuvre)
{
totalFireman = 0;
for (int i = 0; i < CurrentUserInfo.room.UserList.Count; i++)
{
if (allSubId.Contains(CurrentUserInfo.room.UserList[i].UserInfo.Id)
|| CurrentUserInfo.room.UserList[i].UserInfo.Id==CurrentUserInfo.mySelf.Id)
{
foreach (var item in GameSettings.othersSettings.DisplayName_Num_Dic.Keys)
{
if (CurrentUserInfo.room.UserList[i].Org.DisplayName == item)
{
totalFireman += GameSettings.othersSettings.DisplayName_Num_Dic[item];
}
}
}
}
}
}
}
// 获取营救人员数量

2
Assets/Scripts/Common/RoomWaiting/COMMANDCENTER_VEHICLETRANSFER_SYNC.cs

@ -12,7 +12,7 @@ public class COMMANDCENTER_VEHICLETRANSFER_SYNC : NetworkMessageBehaviour
protected override void Execute(BinaryMessage message)
{
var info = message.Body.Deserialize<KeyValuePair<PoliceCallData, List<KeyValuePair<FireCarEngine, int>>>>();
// if (SceneManager.GetActiveScene().name == "RoomWaiting")//房间等待收到派车指令
if (transform.Find("RoomWaiting").gameObject.activeInHierarchy&&
!transform.Find("Police").gameObject.activeInHierarchy)

Loading…
Cancel
Save