网上演练
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

130 lines
4.9 KiB

using AX.Network.Protocols;
using AX.NetworkSystem;
using AX.Serialization;
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class OnwayForceTotal : MonoBehaviour {
private static Dictionary<string, List<KeyValuePair<FireCarEngine, int>>> onwayCars = new Dictionary<string, List<KeyValuePair<FireCarEngine, int>>>();
//public static event Func<Dictionary<string, List<KeyValuePair<FireCarEngine, int>>>, Dictionary<string, List<KeyValuePair<FireCarEngine, int>>>> getOnwayCars;
private int teams = 0;
private int trucks = 0;
private int firemen = 0;
public GameObject content;
private void OnEnable()
{
//allCars = FireEnginesData.Instance.GetAllCas();
/*if (getOnwayCars != null)
{
allCars = getOnwayCars(allCars);
}*/
teams = onwayCars.Count;
trucks = 0;
firemen = 0;
foreach(string team in onwayCars.Keys)
{
foreach(KeyValuePair<FireCarEngine,int> pair in onwayCars[team])
{
trucks += pair.Value;
firemen += (int)pair.Key.PassengerCapacity * pair.Value;
}
}
GetComponent<Text>().text = "在途力量共" + teams + "个中队," + trucks + "辆车," + firemen + "名消防员";
if (content == null)
{
content = transform.parent.Find("Scroll View/Viewport/Content").gameObject;
}
content.GetComponent<OnwayContent>().CreateItems(onwayCars);
}
/// <summary>
/// 有新车辆调派
/// </summary>
/// <param name="cars"></param>
public static void AddNewDeployedCar(KeyValuePair<string, List<KeyValuePair<FireCarEngine, int>>> carPair)
{
List<KeyValuePair<FireCarEngine, int>> cars = new List<KeyValuePair<FireCarEngine, int>>();
//之前已经有这个中队,将该中队已有的在途车辆提取出到typeCars
if (onwayCars.TryGetValue(carPair.Key,out cars))
{
foreach (KeyValuePair<FireCarEngine, int> item in carPair.Value)
{
//更新
AddCar(cars, item);
}
}
//之前没有这个中队
else
{
onwayCars.Add(carPair.Key,carPair.Value);
}
UserData userData = CurrentUserInfo.room.FindMidTeamUserIDByName(carPair.Key);
NetworkManager.Default.SendRequestAsync("ARRIVAL_TIME_REQUEST", new ArrivalTimePair() { sender = CurrentUserInfo.mySelf.Id, receiver = userData.UserInfo.Id, time = "", arrived = false });
}
private static void AddCar(List<KeyValuePair<FireCarEngine, int>> typeCars, KeyValuePair<FireCarEngine, int> item)
{
//如果之前保存过这种车型
for(int i = 0; i < typeCars.Count; i++)
{
if (typeCars[i].Key.TypeName == item.Key.TypeName)
{
typeCars[i] = new KeyValuePair<FireCarEngine, int>(typeCars[i].Key, typeCars[i].Value + item.Value);
return;
}
}
//如果还没保存过这种车型
typeCars.Add(item);
}
/// <summary>
/// 从在途力量中删去到达车辆
/// </summary>
/// <param name="team"></param>
/// <param name="fireCarEngine"></param>
public static void RemoveArrivedCar(string team,FireCarEngine fireCarEngine)
{
List<KeyValuePair<FireCarEngine, int>> list = new List<KeyValuePair<FireCarEngine, int>>();
if(onwayCars.TryGetValue(team,out list))
{
for (int i = 0; i < list.Count; i++)
{
if (list[i].Key.TypeName == fireCarEngine.TypeName)
{
list[i] = new KeyValuePair<FireCarEngine, int>(list[i].Key, list[i].Value - 1);
if (list[i].Value == 0)
{
list.Remove(list[i]);
}
if (list.Count == 0)
{
onwayCars.Remove(team);
}
return;
}
}
}
}
/// <summary>
/// 从在途力量中删除到达中队车辆
/// </summary>
/// <param name="team"></param>
public static void RemoveArrivedCar(string team)
{
List<KeyValuePair<FireCarEngine, int>> list = new List<KeyValuePair<FireCarEngine, int>>();
if(onwayCars.TryGetValue(team,out list))
{
//深拷贝
List<KeyValuePair<FireCarEngine, int>> listCopy = new List<KeyValuePair<FireCarEngine, int>>();
for(int i = 0; i < list.Count; i++)
{
KeyValuePair<FireCarEngine, int> pair = new KeyValuePair<FireCarEngine, int>(list[i].Key, list[i].Value);
listCopy.Add(pair);
}
ArrivedPowerTotal.addArrivedCar(team, listCopy);
onwayCars.Remove(team);
}
}
}