using System.Collections.Generic; using UnityEngine; public class PartSelector : WPFMonoBehaviour, WidgetListener { public class PartDescOrder : IComparer { public int Compare(ConstructionUI.PartDesc obj1, ConstructionUI.PartDesc obj2) { if (obj1.sortKey < obj2.sortKey) { return -1; } if (obj1.sortKey > obj2.sortKey) { return 1; } return 0; } } public GameObject m_partButtonPrefab; public GameData m_gameData; private ScrollList m_scrollList; private List m_partDescs; private ConstructionUI m_constructionUI; private Dictionary m_partOrder = new Dictionary(); public GameObject FindPartButton(ConstructionUI.PartDesc partDesc) { return m_scrollList.FindButton(partDesc); } public void SetSelection(ConstructionUI.PartDesc targetObject) { m_scrollList.SetSelection(targetObject); } public void Select(Widget widget, object targetObject) { if ((bool)m_constructionUI) { m_constructionUI.SelectPart((ConstructionUI.PartDesc)targetObject); } } public void StartDrag(Widget widget, object targetObject) { if ((bool)m_constructionUI) { m_constructionUI.StartDrag((ConstructionUI.PartDesc)targetObject); } } public void CancelDrag(Widget widget, object targetObject) { if ((bool)m_constructionUI) { m_constructionUI.CancelDrag((ConstructionUI.PartDesc)targetObject); } } public void Drop(Widget widget, Vector3 dropPosition, object targetObject) { } public void SetParts(List partDescs) { m_partDescs = new List(partDescs); foreach (ConstructionUI.PartDesc partDesc in m_partDescs) { Assert.Check(m_partOrder.ContainsKey(partDesc.part.m_partType), "Part not found in order list: " + partDesc.part.m_partType); partDesc.sortKey = m_partOrder[partDesc.part.m_partType]; } m_partDescs.Sort(new PartDescOrder()); CreatePartList(false); } private void Awake() { m_scrollList = base.transform.FindChild("ScrollList").GetComponent(); m_scrollList.SetListener(this); if (DeviceInfo.Instance.ActiveDeviceFamily == DeviceInfo.DeviceFamily.Pc || DeviceInfo.Instance.ActiveDeviceFamily == DeviceInfo.DeviceFamily.Osx) { m_scrollList.SetMaxRows(2); } ReadPartOrder(); if (!WPFMonoBehaviour.levelManager) { CreateTestPartList(); } } private void Start() { m_constructionUI = WPFMonoBehaviour.FindObjectComponent("ConstructionUI"); } private void ReadPartOrder() { m_partOrder.Clear(); string text = m_gameData.m_partOrderList.text; char[] separator = new char[1] { '\n' }; string[] array = text.Split(separator); int num = 0; string[] array2 = array; foreach (string text2 in array2) { string text3 = text2.Trim(); if (!(text3 != string.Empty)) { continue; } BasePart.PartType key = BasePart.PartType.Unknown; foreach (GameObject part in m_gameData.m_parts) { BasePart.PartType partType = part.GetComponent().m_partType; if (partType.ToString() == text3) { key = partType; break; } } m_partOrder[key] = num; num++; } } private void CreatePartList(bool handleDragIcons) { foreach (ConstructionUI.PartDesc partDesc in m_partDescs) { BasePart part = partDesc.part; GameObject gameObject = (GameObject)Object.Instantiate(m_partButtonPrefab); gameObject.transform.parent = m_scrollList.transform; GameObject gameObject2 = part.m_constructionIconSprite.gameObject; gameObject.GetComponent().DragObject = partDesc; if (handleDragIcons) { gameObject.GetComponent().DragIconPrefab = gameObject2; } gameObject.GetComponent().DragIconScale = 1.75f; int renderQueue = 3001; gameObject.transform.FindChild("PartCount").GetComponent().text = partDesc.maxCount.ToString(); gameObject.transform.FindChild("PartCount").GetComponent().m_partType = partDesc.part.m_partType; gameObject.renderer.sharedMaterial.renderQueue = renderQueue; gameObject.transform.FindChild("PartCount").renderer.sharedMaterial.renderQueue = renderQueue; GameObject gameObject3 = (GameObject)Object.Instantiate(gameObject2); gameObject3.transform.parent = gameObject.transform; gameObject3.transform.localScale = new Vector3(1.75f, 1.75f, 1f); gameObject3.transform.localPosition = new Vector3(0f, 0f, -0.1f); gameObject3.renderer.sharedMaterial.renderQueue = renderQueue; gameObject.GetComponent().Icon = gameObject3; m_scrollList.AddButton(gameObject.GetComponent()); } } private void CreateTestPartList() { m_partDescs = new List(); foreach (GameObject part in m_gameData.m_parts) { ConstructionUI.PartDesc partDesc = new ConstructionUI.PartDesc(); partDesc.part = part.GetComponent(); partDesc.sortKey = m_partOrder[part.GetComponent().m_partType]; partDesc.maxCount = Random.Range(0, 20); m_partDescs.Add(partDesc); } m_partDescs.Sort(new PartDescOrder()); CreatePartList(true); } }