Files
JJBB/Assets/Project/Script/GUI/Other/SystemLogicList.cs
2024-08-23 15:49:34 +08:00

94 lines
3.0 KiB
C#

using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
[RequireComponent(typeof(ToggleGroup))]
public class SystemLogicList : MonoBehaviour
{
public static SystemLogicList Instance;
public GameObject[] views;
private string[] names = { "#{3816}", "#{86717}", "#{4344}" };
public Toggle toggle;
public Sprite bgCloseSprite;
public Sprite arrowCloseSprite;
private void Awake()
{
Instance = this;
var toggleGroup = GetComponent<ToggleGroup>();
for (var i = 0; i < views.Length; i++)
{
// 最后一个直接使用样例
Toggle target;
if (i < views.Length - 1)
{
target = Instantiate(toggle);
target.transform.SetParent(toggle.transform.parent, false);
}
else
target = toggle;
var item = new SystemLogicItem();
var isOn = i == 0;
target.group = toggleGroup;
string title = GCGame.Table.StrDictionary.GetClientDictionaryString(names[i]);
item.Init(target, title, views[i], arrowCloseSprite, bgCloseSprite, isOn);
target.transform.SetAsLastSibling();
views[i].transform.SetAsLastSibling();
}
}
// 等待页面本身的Init完全执行
private void Start()
{
for (var i = 0; i < views.Length; i++)
{
var isOn = i == 0;
views[i].gameObject.SetActive(isOn);
}
}
private class SystemLogicItem
{
private Image _arrow;
private Image _backGround;
private GameObject _view;
private Sprite _arrowCloseSprite;
private Sprite _arrowSprite;
private Sprite _bgCloseSprite;
private Sprite _bgSprite;
public void Init(Toggle toggle, string name, GameObject view, Sprite arrowCloseSprite, Sprite bgCloseSprite, bool isOn)
{
toggle.isOn = isOn;
toggle.transform.Find("Name").GetComponent<Text>().text = name;
_arrow = toggle.transform.Find("Arrow").GetComponent<Image>();
_backGround = toggle.transform.Find("BackGround").GetComponent<Image>();
_view = view;
_arrowSprite = _arrow.sprite;
_arrowCloseSprite = arrowCloseSprite;
_bgSprite = _backGround.sprite;
_bgCloseSprite = bgCloseSprite;
toggle.onValueChanged.AddListener(OnToggleUpdate);
_arrow.sprite = isOn ? _arrowSprite : _arrowCloseSprite;
_backGround.sprite = isOn ? _bgSprite : _bgCloseSprite;
}
private void OnToggleUpdate(bool isOn)
{
_arrow.sprite = isOn ? _arrowSprite : _arrowCloseSprite;
_backGround.sprite = isOn ? _bgSprite : _bgCloseSprite;
_view.SetActive(isOn);
}
}
private void OnDestroy()
{
Instance = null;
}
public void ShowTeamSeting()
{
toggle.isOn = true;
}
}