|
@ -1,10 +1,11 @@ |
|
|
using System.Collections.Generic; |
|
|
using System.Collections.Generic; |
|
|
using UnityEngine; |
|
|
using UnityEngine; |
|
|
using UnityEngine.UI; |
|
|
using UnityEngine.UI; |
|
|
|
|
|
using System.Linq; |
|
|
|
|
|
|
|
|
namespace GWConquest |
|
|
namespace GWConquest |
|
|
{ |
|
|
{ |
|
|
public class TransportUIElement : MonoBehaviour |
|
|
|
|
|
|
|
|
public class TransportUIElement : MonoBehaviour, IUpdatable<object> |
|
|
{ |
|
|
{ |
|
|
public Image SpriteImage; |
|
|
public Image SpriteImage; |
|
|
public Text NameText; |
|
|
public Text NameText; |
|
@ -27,6 +28,10 @@ namespace GWConquest |
|
|
|
|
|
|
|
|
private List<TransportUIElement> ChildrenList = new List<TransportUIElement>(); |
|
|
private List<TransportUIElement> ChildrenList = new List<TransportUIElement>(); |
|
|
|
|
|
|
|
|
|
|
|
private List<TransportUIUnitIcon> UnitIconList = new List<TransportUIUnitIcon>(); |
|
|
|
|
|
private List<TransportUIItemIcon> ItemIconList = new List<TransportUIItemIcon>(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[System.NonSerialized] |
|
|
[System.NonSerialized] |
|
|
public bool IsDistrict; |
|
|
public bool IsDistrict; |
|
|
|
|
|
|
|
@ -69,7 +74,7 @@ namespace GWConquest |
|
|
} |
|
|
} |
|
|
else { |
|
|
else { |
|
|
//TODO
|
|
|
//TODO
|
|
|
return null; |
|
|
|
|
|
|
|
|
return new List<Formation>(); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
@ -82,83 +87,97 @@ namespace GWConquest |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
ChildrenList.Clear(); |
|
|
ChildrenList.Clear(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Util.DestroyAllChildren(UnitIconsTransform); |
|
|
|
|
|
UnitIconList.Clear(); |
|
|
|
|
|
|
|
|
|
|
|
Util.DestroyAllChildren(ItemIconsTransform); |
|
|
|
|
|
ItemIconList.Clear(); |
|
|
|
|
|
|
|
|
|
|
|
var AllItems = GetAllItems(); |
|
|
|
|
|
|
|
|
var SubFormations = GetSubFormations(); |
|
|
|
|
|
if(SubFormations != null) |
|
|
|
|
|
|
|
|
if(IsDistrict) |
|
|
{ |
|
|
{ |
|
|
foreach(Formation f in SubFormations) |
|
|
|
|
|
{ |
|
|
|
|
|
var subElGO = Instantiate(SubElementPrefab); |
|
|
|
|
|
|
|
|
SpriteImage.sprite = District.GetCurrentSprite(); |
|
|
|
|
|
NameText.text = District.GetDistrictName(); |
|
|
|
|
|
} |
|
|
|
|
|
else { |
|
|
|
|
|
NameText.text = Formation.FormationName; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
UpdateDisplay(null); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
var elementRT = subElGO.GetComponent<RectTransform>(); |
|
|
|
|
|
|
|
|
public void UpdateDisplay(object obj) |
|
|
|
|
|
{ |
|
|
|
|
|
var SubFormations = GetSubFormations().Cast<object>(); |
|
|
|
|
|
|
|
|
elementRT.SetParent(ChildrenTransform); |
|
|
|
|
|
elementRT.anchoredPosition = Vector2.zero; |
|
|
|
|
|
var size = elementRT.sizeDelta; |
|
|
|
|
|
size.x = 0f; |
|
|
|
|
|
elementRT.sizeDelta = size; |
|
|
|
|
|
|
|
|
GWLayout.UpdateGameObjects(ChildrenList, SubFormations.ToList(), d => { |
|
|
|
|
|
var subElGO = Instantiate(SubElementPrefab); |
|
|
|
|
|
|
|
|
var elementComp = subElGO.GetComponent<TransportUIElement>(); |
|
|
|
|
|
elementComp.IsDistrict = false; |
|
|
|
|
|
elementComp.Formation = f; |
|
|
|
|
|
elementComp.Rebuild(); |
|
|
|
|
|
|
|
|
var elementRT = subElGO.GetComponent<RectTransform>(); |
|
|
|
|
|
|
|
|
ChildrenList.Add(elementComp); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
elementRT.SetParent(ChildrenTransform); |
|
|
|
|
|
elementRT.anchoredPosition = Vector2.zero; |
|
|
|
|
|
var size = elementRT.sizeDelta; |
|
|
|
|
|
size.x = 0f; |
|
|
|
|
|
elementRT.sizeDelta = size; |
|
|
|
|
|
|
|
|
UnitIconsTransform.SetAsLastSibling(); |
|
|
|
|
|
ItemIconsTransform.SetAsLastSibling(); |
|
|
|
|
|
|
|
|
var elementComp = subElGO.GetComponent<TransportUIElement>(); |
|
|
|
|
|
elementComp.IsDistrict = false; |
|
|
|
|
|
elementComp.Formation = d as Formation; |
|
|
|
|
|
elementComp.Rebuild(); |
|
|
|
|
|
|
|
|
Util.DestroyAllChildren(UnitIconsTransform); |
|
|
|
|
|
|
|
|
return elementComp; |
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
if(!IsDistrict) |
|
|
if(!IsDistrict) |
|
|
{ |
|
|
{ |
|
|
var AllUnits = Formation.Units; |
|
|
var AllUnits = Formation.Units; |
|
|
|
|
|
|
|
|
foreach(Unit unit in AllUnits) |
|
|
|
|
|
{ |
|
|
|
|
|
|
|
|
GWLayout.UpdateGameObjects(UnitIconList, AllUnits.ToList(), unit => { |
|
|
var unitIconGO = Instantiate(UnitIconPrefab); |
|
|
var unitIconGO = Instantiate(UnitIconPrefab); |
|
|
|
|
|
|
|
|
unitIconGO.GetComponentInChildren<Image>().sprite = unit.Icon; |
|
|
|
|
|
|
|
|
|
|
|
unitIconGO.GetComponent<RectTransform>().SetParent(UnitIconsTransform); |
|
|
unitIconGO.GetComponent<RectTransform>().SetParent(UnitIconsTransform); |
|
|
unitIconGO.GetComponent<RectTransform>().anchoredPosition = Vector2.zero; |
|
|
unitIconGO.GetComponent<RectTransform>().anchoredPosition = Vector2.zero; |
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
Util.DestroyAllChildren(ItemIconsTransform); |
|
|
|
|
|
|
|
|
var unitIconComp = unitIconGO.GetComponent<TransportUIUnitIcon>(); |
|
|
|
|
|
|
|
|
var AllItems = GetAllItems(); |
|
|
|
|
|
|
|
|
unitIconComp.UpdateDisplay(unit); |
|
|
|
|
|
|
|
|
foreach(ItemStack stack in AllItems) |
|
|
|
|
|
{ |
|
|
|
|
|
var itemIconGO = Instantiate(ItemIconPrefab); |
|
|
|
|
|
|
|
|
return unitIconComp; |
|
|
|
|
|
}); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
itemIconGO.GetComponentInChildren<Image>().sprite = stack.Icon; |
|
|
|
|
|
itemIconGO.GetComponentInChildren<Image>().color = stack.IconColor; |
|
|
|
|
|
itemIconGO.GetComponentInChildren<Text>().text = stack.Amount.ToString(); |
|
|
|
|
|
|
|
|
var AllItems = GetAllItems(); |
|
|
|
|
|
GWLayout.UpdateGameObjects(ItemIconList, AllItems.ToList(), item => { |
|
|
|
|
|
var itemIconGO = Instantiate(ItemIconPrefab); |
|
|
|
|
|
|
|
|
itemIconGO.GetComponent<RectTransform>().SetParent(ItemIconsTransform); |
|
|
itemIconGO.GetComponent<RectTransform>().SetParent(ItemIconsTransform); |
|
|
itemIconGO.GetComponent<RectTransform>().anchoredPosition = Vector2.zero; |
|
|
itemIconGO.GetComponent<RectTransform>().anchoredPosition = Vector2.zero; |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//LayoutRebuilder.MarkLayoutForRebuild(ItemIconsTransform);
|
|
|
|
|
|
|
|
|
var itemIconComp = itemIconGO.GetComponent<TransportUIItemIcon>(); |
|
|
|
|
|
|
|
|
|
|
|
itemIconComp.UpdateDisplay(item); |
|
|
|
|
|
|
|
|
|
|
|
return itemIconComp; |
|
|
|
|
|
}, (i1,i2) => ItemStack.ItemsEqual(i1,i2)); |
|
|
|
|
|
|
|
|
|
|
|
UnitIconsTransform.SetAsLastSibling(); |
|
|
|
|
|
ItemIconsTransform.SetAsLastSibling(); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public object GetObject() |
|
|
|
|
|
{ |
|
|
if(IsDistrict) |
|
|
if(IsDistrict) |
|
|
{ |
|
|
{ |
|
|
SpriteImage.sprite = District.GetCurrentSprite(); |
|
|
|
|
|
NameText.text = District.GetDistrictName(); |
|
|
|
|
|
|
|
|
return District; |
|
|
} |
|
|
} |
|
|
else { |
|
|
else { |
|
|
NameText.text = Formation.FormationName; |
|
|
|
|
|
|
|
|
return Formation; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
//LayoutRebuilder.MarkLayoutForRebuild(GetComponent<RectTransform>());
|
|
|
|
|
|
|
|
|
|
|
|
//LayoutRebuilder.ForceRebuildLayoutImmediate(GetComponent<RectTransform>());
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|