| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381 | using System;using System.Collections;using System.Collections.Generic;using System.Runtime.Serialization;using Fort23.Core;using Fort23.Mono;using Fort23.UTool;using TMPro;using UnityEngine;using UnityEngine.UI;using Utility;using Object = UnityEngine.Object;public class CustomStateController : MonoBehaviour, ISerializationCallbackReceiver{    [Flags]    [Serializable]    public enum UIStateType    {        Null = 0,        Scale = 2,        Active = 4,        Position = 8,        Rotation = 16,        RBSize = 32,        ImageColor = 64,        TextColor = 128,        TextValue = 256,        Icon = 512,        OutLineColor = 1024,        Sizedata = 2048,        CustomState = 4096,        TmpColor = 8192    }    [Serializable]    public class UIStateData    {        public List<StateInfo> StateInfos;        public UIStateData()        {            StateInfos = new List<StateInfo>();        }    }    [Serializable]    public class StateInfo    {        [SerializeField] public GameObject Target;        //v4专用数据源        [SerializeField] public List<UIStateType> UIStateV4Types;        [SerializeField] public List<Vector4> UIStateV4Datas;        //Str 专用数据源        [SerializeField] public List<UIStateType> UIStateStrTypes;        [SerializeField] public List<string> UIStateStrDatas;    }    [SerializeField] public List<UIStateData> data = new List<UIStateData>();    public List<Object> AllComs = new List<Object>();    [SerializeField] public List<UIStateType> AllComsStateTypes = new List<UIStateType>();    public int CurrIndex;    public void AddData()    {        data.Add(CreatData());        CurrIndex = data.Count - 1;    }    public void RemoveData(int index)    {        data.RemoveAt(index);        CurrIndex = data.Count - 1;        if (data.Count == 0)        {            ChangeState(-1);        }    }    public void SaveData()    {        data[CurrIndex] = CreatData();    }    public UIStateData CreatData()    {        UIStateData uiStateData = new UIStateData();        for (var i = 0; i < AllComs.Count; i++)        {            Object _object = AllComs[i];            if (_object == null)            {                LogTool.Error("保存状态数据的目标为空");                continue;            }            GameObject go = AllComs[i] as GameObject;            if (go == null)            {                LogTool.Error("保存状态数据的目标为空");                continue;            }            StateInfo stateInfo = new StateInfo();            stateInfo.UIStateV4Datas = new List<Vector4>();            stateInfo.UIStateV4Types = new List<UIStateType>();            stateInfo.Target = AllComs[i] as GameObject;            if (AllComsStateTypes[i].HasFlag(UIStateType.Active))            {                Vector4 vector4 = new Vector4();                vector4.x = go.gameObject.activeSelf ? 1 : 0;                stateInfo.UIStateV4Types.Add(UIStateType.Active);                stateInfo.UIStateV4Datas.Add(vector4);            }            if (AllComsStateTypes[i].HasFlag(UIStateType.Position))            {                Vector4 vector4 = go.GetComponent<RectTransform>().anchoredPosition;                stateInfo.UIStateV4Types.Add(UIStateType.Position);                stateInfo.UIStateV4Datas.Add(vector4);            }            if (AllComsStateTypes[i].HasFlag(UIStateType.Scale))            {                Vector4 vector4 = go.GetComponent<RectTransform>().localScale;                stateInfo.UIStateV4Types.Add(UIStateType.Scale);                stateInfo.UIStateV4Datas.Add(vector4);            }            if (AllComsStateTypes[i].HasFlag(UIStateType.Rotation))            {                Vector4 vector4 = go.GetComponent<RectTransform>().localRotation.eulerAngles;                stateInfo.UIStateV4Types.Add(UIStateType.Rotation);                stateInfo.UIStateV4Datas.Add(vector4);            }            if (AllComsStateTypes[i].HasFlag(UIStateType.Sizedata))            {                Vector4 vector4 = go.GetComponent<RectTransform>().sizeDelta;                stateInfo.UIStateV4Types.Add(UIStateType.Sizedata);                stateInfo.UIStateV4Datas.Add(vector4);            }            if (AllComsStateTypes[i].HasFlag(UIStateType.RBSize))            {                Vector4 vector4 = go.GetComponent<RectTransform>().sizeDelta;                stateInfo.UIStateV4Types.Add(UIStateType.RBSize);                stateInfo.UIStateV4Datas.Add(vector4);            }            if (AllComsStateTypes[i].HasFlag(UIStateType.ImageColor))            {                Vector4 vector4 = go.GetComponent<Image>().color;                stateInfo.UIStateV4Types.Add(UIStateType.ImageColor);                stateInfo.UIStateV4Datas.Add(vector4);            }            if (AllComsStateTypes[i].HasFlag(UIStateType.TextColor))            {                Vector4 vector4 = go.GetComponent<Text>().color;                stateInfo.UIStateV4Types.Add(UIStateType.TextColor);                stateInfo.UIStateV4Datas.Add(vector4);            }                        if (AllComsStateTypes[i].HasFlag(UIStateType.TmpColor))            {                Vector4 vector4 = go.GetComponent<TextMeshProUGUI>().color;                stateInfo.UIStateV4Types.Add(UIStateType.TmpColor);                stateInfo.UIStateV4Datas.Add(vector4);            }            if (AllComsStateTypes[i].HasFlag(UIStateType.OutLineColor))            {                Vector4 vector4 = go.GetComponent<Outline>().effectColor;                stateInfo.UIStateV4Types.Add(UIStateType.OutLineColor);                stateInfo.UIStateV4Datas.Add(vector4);            }            if (AllComsStateTypes[i].HasFlag(UIStateType.TextValue))            {                if (stateInfo.UIStateStrDatas == null)                {                    stateInfo.UIStateStrDatas = new List<string>();                    stateInfo.UIStateStrTypes = new List<UIStateType>();                }                string str = String.Empty;                if (go.GetComponent<TextLanguageMono>().id != 0)                {                    str = go.GetComponent<TextLanguageMono>().id.ToString();                }                else                {                    str = go.GetComponent<Text>().text;                }                stateInfo.UIStateStrTypes.Add(UIStateType.TextValue);                stateInfo.UIStateStrDatas.Add(str);            }            if (AllComsStateTypes[i].HasFlag(UIStateType.Icon))            {                if (stateInfo.UIStateStrDatas == null)                {                    stateInfo.UIStateStrDatas = new List<string>();                    stateInfo.UIStateStrTypes = new List<UIStateType>();                }                string str = go.GetComponent<MyImage>().icon_name.ToString();                stateInfo.UIStateStrTypes.Add(UIStateType.Icon);                stateInfo.UIStateStrDatas.Add(str);            }            if (AllComsStateTypes[i].HasFlag(UIStateType.CustomState))            {                Vector4 vector4 = new Vector4();                vector4.x = go.GetComponent<CustomStateController>().CurrIndex;                stateInfo.UIStateV4Types.Add(UIStateType.CustomState);                stateInfo.UIStateV4Datas.Add(vector4);            }            uiStateData.StateInfos.Add(stateInfo);        }        return uiStateData;    }    public void ChangeState(int selectIndex)    {        if (selectIndex < 0)        {            return;        }        CurrIndex = selectIndex;        UIStateData uiStateData = data[selectIndex];        foreach (var keyValuePair in uiStateData.StateInfos)        {            GameObject go = keyValuePair.Target;            if (go == null)            {                LogTool.Error("保存状态数据的目标不存在");                continue;            }            if (keyValuePair.UIStateV4Types != null)            {                for (var i = 0; i < keyValuePair.UIStateV4Types.Count; i++)                {                    switch (keyValuePair.UIStateV4Types[i])                    {                        case UIStateType.Active:                            bool active;                            active = Math.Abs(keyValuePair.UIStateV4Datas[i].x - 1) < 0.00001;                            go.gameObject.SetActive(active);                            break;                        case UIStateType.Position:                            Vector2 pos = keyValuePair.UIStateV4Datas[i];                            go.GetComponent<RectTransform>().anchoredPosition = pos;                            break;                        case UIStateType.Scale:                            Vector3 scale = keyValuePair.UIStateV4Datas[i];                            go.GetComponent<RectTransform>().localScale = scale;                            break;                        case UIStateType.Rotation:                            Quaternion rotation = Quaternion.Euler(keyValuePair.UIStateV4Datas[i]);                            go.GetComponent<RectTransform>().localRotation = rotation;                            break;                        case UIStateType.Sizedata:                            Vector3 sizedata = keyValuePair.UIStateV4Datas[i];                            go.GetComponent<RectTransform>().sizeDelta = sizedata;                            break;                        case UIStateType.RBSize:                            Vector2 sizeDelta = keyValuePair.UIStateV4Datas[i];                            go.GetComponent<RectTransform>().sizeDelta = sizeDelta;                            break;                        case UIStateType.ImageColor:                            Color imageColorData = keyValuePair.UIStateV4Datas[i];                            go.GetComponent<Image>().color = imageColorData;                            break;                        case UIStateType.TextColor:                            Color textColorData = keyValuePair.UIStateV4Datas[i];                            go.GetComponent<Text>().color = textColorData;                            break;                        case UIStateType.TmpColor:                            Color textColorData1 = keyValuePair.UIStateV4Datas[i];                            go.GetComponent<TextMeshProUGUI>().color = textColorData1;                            break;                        case UIStateType.OutLineColor:                            Color outLineColorData = keyValuePair.UIStateV4Datas[i];                            go.GetComponent<Outline>().effectColor = outLineColorData;                            break;                        case UIStateType.CustomState:                            int index = (int)keyValuePair.UIStateV4Datas[i].x;                            go.GetComponent<CustomStateController>().ChangeState(index);                            break;                    }                }            }            if (keyValuePair.UIStateStrTypes != null)            {                for (var i = 0; i < keyValuePair.UIStateStrTypes.Count; i++)                {                    switch (keyValuePair.UIStateStrTypes[i])                    {                        case UIStateType.TextValue:                            string str = keyValuePair.UIStateStrDatas[i];                            int id = 0;                            if (int.TryParse(str, out id))                            {                                // go.GetComponent<TextLanguageMono>().SetLanguage(str.ToInt());                            }                            else                            {                                go.GetComponent<Text>().text = str;                            }                            break;                        case UIStateType.Icon:                            string iconName = keyValuePair.UIStateStrDatas[i];                            go.GetComponent<MyImage>().icon_name = iconName;                            break;                    }                }            }        }    }    public void OnBeforeSerialize()    {    }    public void OnAfterDeserialize()    {    }}
 |