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.
385 lines
15 KiB
385 lines
15 KiB
using UnityEngine; |
|
using System.Collections; |
|
using System.Collections.Generic; |
|
using UnityEngine.UI; |
|
using System; |
|
using UnityEngine.Events; |
|
using AX.TrackRecord; |
|
|
|
public class EquipSubmit : MonoBehaviour { |
|
|
|
public static List<GameObject> selectEquipPlayers = new List<GameObject>();//所选装备的人 |
|
|
|
public static Dictionary<string, CostEquip> costSelectedEquips = new Dictionary<string, CostEquip>();//选择的有消耗的装备 |
|
public static Dictionary<string, UnCostEquip> unCostSelectedEquips = new Dictionary<string, UnCostEquip>();//选择的无消耗的装备 |
|
private bool flag; |
|
|
|
GameObject canvas; |
|
GameObject BagEquipImg; |
|
// Use this for initialization |
|
void Start () { |
|
this.GetComponent<Button>().onClick.AddListener(SubmitSelectedEquips); |
|
|
|
canvas = GameObject.Find("Canvas"); |
|
BagEquipImg = Resources.Load<GameObject>("UIPrefab/Equipment/BagEquipImg"); |
|
} |
|
|
|
private void SubmitSelectedEquips() |
|
{ |
|
flag = false; |
|
|
|
bool tipFlag = GetLastUnCostSelectedEquips(unCostSelectedEquips); |
|
|
|
if (!flag) |
|
{ |
|
GetLastCostSelectedEquips(costSelectedEquips); |
|
|
|
DrawEquipsInBag(); |
|
} |
|
for (int i = 0; i < selectEquipPlayers.Count; i++) |
|
{ |
|
selectEquipPlayers[i].GetComponent<Bag>().ChangeEquip(); |
|
} |
|
|
|
if (RecordManager.Instance.IsRecording && !tipFlag) |
|
{ |
|
TrackRecordHelpClass.RecordSubmitEquipEvent(selectEquipPlayers); |
|
} |
|
|
|
} |
|
|
|
// Update is called once per frame |
|
void Update () { |
|
|
|
} |
|
|
|
|
|
|
|
|
|
void OnDestroy() |
|
{ |
|
this.GetComponent<Button>().onClick.RemoveListener(SubmitSelectedEquips); |
|
} |
|
|
|
private bool GetLastUnCostSelectedEquips(Dictionary<string, UnCostEquip> unCostSelectedEqp) |
|
{ |
|
bool flag1 = false; |
|
bool flag2 = false; |
|
bool tipFlag = false; |
|
foreach (var item in unCostSelectedEqp) |
|
{ |
|
if (item.Key.Contains("消防避火服") || item.Key.Contains("隔热防护服") || item.Key.Contains("抢险救援服") |
|
|| item.Key.Contains("消防防化服")|| item.Key.Contains("灭火防护服") || item.Key.Contains("指挥员") || item.Key.Contains("义务消防员")) |
|
{ |
|
flag1 = true; |
|
break; |
|
} |
|
} |
|
|
|
foreach (GameObject obj in selectEquipPlayers) |
|
{ |
|
bool flag = false; |
|
Dictionary<string, UnCostEquip> unCostSelectedEquips = obj.GetComponent<Bag>().unCostSelectedEquips; |
|
foreach (var item in unCostSelectedEquips) |
|
{ |
|
if (item.Key.Contains("消防避火服") || item.Key.Contains("隔热防护服") || item.Key.Contains("抢险救援服") |
|
|| item.Key.Contains("消防防化服") || item.Key.Contains("灭火防护服") || item.Key.Contains("指挥员") || item.Key.Contains("义务消防员")) |
|
{ |
|
flag2 = true; |
|
flag = true; |
|
break; |
|
} |
|
} |
|
|
|
if (flag) break; |
|
} |
|
|
|
if (flag1) |
|
{ |
|
int count = 0; |
|
foreach (var item in unCostSelectedEqp) |
|
{ |
|
if (item.Key.Contains("消防避火服") || item.Key.Contains("隔热防护服") || item.Key.Contains("抢险救援服") |
|
|| item.Key.Contains("消防防化服") || item.Key.Contains("灭火防护服") || item.Key.Contains("指挥员") || item.Key.Contains("义务消防员")) |
|
{ |
|
count++; |
|
} |
|
} |
|
|
|
if (count != 0) |
|
{ |
|
if (count > 1) |
|
{ |
|
GameObject TipWin = Instantiate(Resources.Load<GameObject>("UIPrefab/TipWindow")) as GameObject; |
|
string tips = "每次只能选择一套套装!"; |
|
TipWin.GetComponent<TipWindowManager>().SetWindow(tips, null, null); |
|
flag = true; |
|
} |
|
else |
|
{ |
|
if (!flag2) |
|
{ |
|
foreach (GameObject obj in selectEquipPlayers) |
|
{ |
|
Dictionary<string, UnCostEquip> unCostSelectedEquips = obj.GetComponent<Bag>().unCostSelectedEquips; |
|
foreach (var item in unCostSelectedEqp) |
|
{ |
|
string[] str = item.Key.Split('/'); |
|
bool flag = false; |
|
|
|
foreach (string key in unCostSelectedEquips.Keys) |
|
{ |
|
if (key.IndexOf(str[2]) > -1) |
|
{ |
|
flag = true; |
|
|
|
break; |
|
} |
|
} |
|
|
|
if (!flag) |
|
{ |
|
unCostSelectedEquips.Add(item.Key, item.Value); |
|
} |
|
} |
|
} |
|
} |
|
else |
|
{ |
|
GameObject TipWin = Instantiate(Resources.Load<GameObject>("UIPrefab/TipWindow")) as GameObject; |
|
string tips = "是否确定换装?"; |
|
TipWin.GetComponent<TipWindowManager>().SetWindow(tips, new UnityAction(SureChangeEquip), null); |
|
flag = true; |
|
tipFlag = true; |
|
} |
|
} |
|
} |
|
} |
|
else |
|
{ |
|
foreach (GameObject obj in selectEquipPlayers) |
|
{ |
|
Dictionary<string, UnCostEquip> unCostSelectedEquips = obj.GetComponent<Bag>().unCostSelectedEquips; |
|
foreach (var item in unCostSelectedEqp) |
|
{ |
|
string[] str = item.Key.Split('/'); |
|
bool flag = false; |
|
|
|
foreach (string key in unCostSelectedEquips.Keys) |
|
{ |
|
if (key.IndexOf(str[2]) > -1) |
|
{ |
|
flag = true; |
|
|
|
break; |
|
} |
|
} |
|
|
|
if (!flag) |
|
{ |
|
unCostSelectedEquips.Add(item.Key, item.Value); |
|
} |
|
} |
|
} |
|
} |
|
return tipFlag; |
|
} |
|
|
|
private void GetLastCostSelectedEquips(Dictionary<string, CostEquip> costSelectedEqp) |
|
{ |
|
foreach (GameObject obj in selectEquipPlayers) |
|
{ |
|
Dictionary<string, CostEquip> costSelectedEquips = obj.GetComponent<Bag>().costSelectedEquips; |
|
foreach (var item in costSelectedEqp) |
|
{ |
|
string[] str = item.Key.Split('/'); |
|
bool flag = false; |
|
|
|
foreach (string key in costSelectedEquips.Keys) |
|
{ |
|
if (key.IndexOf(str[2]) > -1) |
|
{ |
|
costSelectedEquips[key].selectedEquipNum += item.Value.selectedEquipNum; |
|
flag = true; |
|
break; |
|
} |
|
} |
|
|
|
if (!flag) |
|
{//所选的消耗装备,给多少个人选装就要实例化对应消防员的所选装备实例(防止所有消防员的所选装备实例指向同一个内存地址) |
|
string key = item.Key; |
|
|
|
CostEquip eqp = null; |
|
if (str[2] == "消防高压水带") |
|
{ |
|
//eqp = new pipeLine(item.Value.unit); |
|
eqp = new CostEquip(item.Value.unit); |
|
} |
|
|
|
if (str[2] == "救生照明线") |
|
{ |
|
//eqp = new lifeSaveLightLine(item.Value.unit); |
|
eqp = new CostEquip(item.Value.unit); |
|
} |
|
|
|
eqp.selectedEquipName = item.Value.selectedEquipName; |
|
eqp.selectedEquipNum = item.Value.selectedEquipNum; |
|
eqp.useNum = item.Value.useNum; |
|
|
|
costSelectedEquips.Add(key, eqp); |
|
obj.GetComponent<AgentRecord>().SetList(); |
|
} |
|
} |
|
} |
|
} |
|
|
|
private void SureChangeEquip() |
|
{ |
|
foreach (var obj in selectEquipPlayers) |
|
{ |
|
Dictionary<string, UnCostEquip> unCostSelectedEquip = obj.GetComponent<Bag>().unCostSelectedEquips; |
|
foreach (var item in unCostSelectedEquip) |
|
{ |
|
if (item.Key.Contains("消防避火服") || item.Key.Contains("隔热防护服") || item.Key.Contains("抢险救援服") |
|
|| item.Key.Contains("消防防化服") || item.Key.Contains("灭火防护服") || item.Key.Contains("指挥员") || item.Key.Contains("义务消防员")) |
|
{ |
|
unCostSelectedEquip.Remove(item.Key); |
|
break; |
|
} |
|
} |
|
} |
|
|
|
GetLastCostSelectedEquips(costSelectedEquips, selectEquipPlayers); |
|
|
|
GetLastUnCostSelectedEquips(unCostSelectedEquips, selectEquipPlayers); |
|
|
|
DrawEquipsInBag(); |
|
selectEquipPlayers[0].GetComponent<Bag>().ChangeEquip();//更换装备后,触发换装逻辑 |
|
|
|
if (RecordManager.Instance.IsRecording) |
|
{ |
|
TrackRecordHelpClass.RecordSubmitEquipEvent(selectEquipPlayers); |
|
} |
|
|
|
} |
|
|
|
private void GetLastCostSelectedEquips(Dictionary<string, CostEquip> costSelectedEqp, List<GameObject> changeEqpPlayers) |
|
{ |
|
foreach (GameObject obj in changeEqpPlayers) |
|
{ |
|
Dictionary<string, CostEquip> costSelectedEquips = obj.GetComponent<Bag>().costSelectedEquips; |
|
foreach (var item in costSelectedEqp) |
|
{ |
|
string[] str = item.Key.Split('/'); |
|
bool flag = false; |
|
|
|
foreach (string key in costSelectedEquips.Keys) |
|
{ |
|
if (key.IndexOf(str[2]) > -1) |
|
{ |
|
costSelectedEquips[key].selectedEquipNum += item.Value.selectedEquipNum; |
|
flag = true; |
|
break; |
|
} |
|
} |
|
|
|
if (!flag) |
|
{//所选的消耗装备,给多少个人选装就要实例化对应消防员的所选装备实例(防止所有消防员的所选装备实例指向同一个内存地址) |
|
string key = item.Key; |
|
|
|
CostEquip eqp = null; |
|
if (str[2] == "消防高压水带") |
|
{ |
|
//eqp = new pipeLine(item.Value.unit); |
|
eqp = new CostEquip(item.Value.unit); |
|
} |
|
|
|
if (str[2] == "救生照明线") |
|
{ |
|
//eqp = new lifeSaveLightLine(item.Value.unit); |
|
eqp = new CostEquip(item.Value.unit); |
|
} |
|
|
|
eqp.selectedEquipName = item.Value.selectedEquipName; |
|
eqp.selectedEquipNum = item.Value.selectedEquipNum; |
|
eqp.useNum = item.Value.useNum; |
|
|
|
costSelectedEquips.Add(key, eqp); |
|
} |
|
} |
|
} |
|
} |
|
|
|
private void GetLastUnCostSelectedEquips(Dictionary<string, UnCostEquip> unCostSelectedEqp, List<GameObject> changeEqpPlayers) |
|
{ |
|
foreach (GameObject obj in changeEqpPlayers) |
|
{ |
|
Dictionary<string, UnCostEquip> unCostSelectedEquips = obj.GetComponent<Bag>().unCostSelectedEquips; |
|
foreach (var item in unCostSelectedEqp) |
|
{ |
|
string[] str = item.Key.Split('/'); |
|
bool flag = false; |
|
|
|
foreach (string key in unCostSelectedEquips.Keys) |
|
{ |
|
if (key.IndexOf(str[2]) > -1) |
|
{ |
|
flag = true; |
|
|
|
break; |
|
} |
|
} |
|
|
|
if (!flag) |
|
{ |
|
unCostSelectedEquips.Add(item.Key, item.Value); |
|
} |
|
} |
|
} |
|
} |
|
|
|
private void DrawEquipsInBag() |
|
{ |
|
RemoveAllChild(canvas.transform.Find("BagWin").Find("BagImage")); |
|
|
|
Dictionary<string, CostEquip> costSelectedEquips = selectEquipPlayers[0].GetComponent<Bag>().costSelectedEquips; |
|
Dictionary<string, UnCostEquip> unCostSelectedEquips = selectEquipPlayers[0].GetComponent<Bag>().unCostSelectedEquips; |
|
|
|
//存在消耗的装备 |
|
foreach (string key in costSelectedEquips.Keys) |
|
{ |
|
string[] str = key.Split('/'); |
|
string equipSpriteNameX = str[2] + "X"; |
|
var equipSpriteX = Resources.Load<GameObject>("UIPrefab/Equipment/" + equipSpriteNameX); |
|
var equipmentSelectedImg = Instantiate(BagEquipImg) as GameObject; |
|
equipmentSelectedImg.name = equipSpriteNameX.Substring(0, equipSpriteNameX.Length - 1); |
|
equipmentSelectedImg.transform.parent = canvas.transform.Find("BagWin").Find("BagImage"); |
|
equipmentSelectedImg.GetComponent<RectTransform>().localScale = new Vector3(1f, 1f, 1f); |
|
equipmentSelectedImg.GetComponent<Image>().sprite = equipSpriteX.GetComponent<SpriteRenderer>().sprite; |
|
equipmentSelectedImg.transform.Find("Text").GetComponent<Text>().text = (costSelectedEquips[key].selectedEquipNum - costSelectedEquips[key].useNum).ToString(); |
|
equipmentSelectedImg.AddComponent<ViewBagEquip>(); |
|
} |
|
|
|
//不存在消耗的装备 |
|
foreach (string key in unCostSelectedEquips.Keys) |
|
{ |
|
string[] str = key.Split('/'); |
|
string equipSpriteNameX = str[2] + "X"; |
|
var equipSpriteX = Resources.Load<GameObject>("UIPrefab/Equipment/" + equipSpriteNameX); |
|
var equipmentSelectedImg = Instantiate(BagEquipImg) as GameObject; |
|
equipmentSelectedImg.name = equipSpriteNameX.Substring(0, equipSpriteNameX.Length - 1); |
|
equipmentSelectedImg.transform.parent = canvas.transform.Find("BagWin").Find("BagImage"); |
|
equipmentSelectedImg.GetComponent<RectTransform>().localScale = new Vector3(1f, 1f, 1f); |
|
equipmentSelectedImg.GetComponent<Image>().sprite = equipSpriteX.GetComponent<SpriteRenderer>().sprite; |
|
equipmentSelectedImg.AddComponent<ViewBagEquip>(); |
|
} |
|
} |
|
|
|
private void RemoveAllChild(Transform tsf) |
|
{ |
|
foreach (Transform t in tsf) |
|
{ |
|
Destroy(t.gameObject); |
|
} |
|
} |
|
}
|
|
|