少年修仙传客户端代码仓库
hch
2025-04-03 c154ac0832fe4379a00d3e1cda700e7d2a7383c7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
//--------------------------------------------------------
//    [Author]:           第二世界
//    [  Date ]:           Thursday, September 07, 2017
//--------------------------------------------------------
using DG.Tweening;
using System;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
 
namespace vnxbqy.UI
{
 
    public class EquipOnFloor : MonoBehaviour
    {
 
        [SerializeField] List<Button> equips;
        [SerializeField] List<Image> equipImages;
        [SerializeField] List<UIEffect> equipUIeffects;
 
        CutTreeModel cutTreeModel { get { return ModelCenter.Instance.GetModel<CutTreeModel>(); } }
        PackModel packModel { get { return ModelCenter.Instance.GetModel<PackModel>(); } }
        AutoCutTreeModel autoCutTreeModel { get { return ModelCenter.Instance.GetModel<AutoCutTreeModel>(); } }
 
        int dropState = 0; //0:未掉落 1:掉落中 2:掉落完成(后续处理分解替换/装备)
 
 
        //主界面切换模式触发
        private void OnEnable()
        {
            cutTreeModel.equipOnFloorBtn = equips;
            //主界面打开和显隐都要刷新
            Display();
 
            cutTreeModel.AfterPlayCutTreeAnimEvent -= AfterPlayCutTreeAnimEvent;
            cutTreeModel.AfterPlayCutTreeAnimEvent += AfterPlayCutTreeAnimEvent;
 
            cutTreeModel.OnEquipOPResultAction -= OnEquipResult;
            cutTreeModel.OnEquipOPResultAction += OnEquipResult;
        }
 
 
        private void OnDisable()
        {
            cutTreeModel.AfterPlayCutTreeAnimEvent -= AfterPlayCutTreeAnimEvent;
            cutTreeModel.OnEquipOPResultAction -= OnEquipResult;
 
        }
 
        //在主界面打开的时候触发
        public void Init()
        {
            Display();
            cutTreeModel.AfterPlayCutTreeAnimEvent -= AfterPlayCutTreeAnimEvent;
            cutTreeModel.AfterPlayCutTreeAnimEvent += AfterPlayCutTreeAnimEvent;
            cutTreeModel.OnEquipOPResultAction -= OnEquipResult;
            cutTreeModel.OnEquipOPResultAction += OnEquipResult;
        }
 
        public void UnInit()
        {
            cutTreeModel.AfterPlayCutTreeAnimEvent -= AfterPlayCutTreeAnimEvent;
            cutTreeModel.OnEquipOPResultAction -= OnEquipResult;
        }
 
        private void LateUpdate()
        {
            if (dropState == 2)
            {
                dropState = 0;
                AfterDropShow();
            }
        }
 
        void AfterPlayCutTreeAnimEvent()
        {
            Display(true);
        }
 
        void OnEquipResult()
        {
            Display();
            //分解效果 用equipFloorInfo处理
        }
 
 
 
 
        //界面格子组件顺序和背包格子顺序一致
        public void Display(bool isAnimate = false)
        {
            dropState = 0;
            List<ItemModel> items = packModel.GetItems(PackType.EquipOnFloor);
            float duration = 0.5f / cutTreeModel.cutTreeSpeed; //掉落时间
            for (int i = 0; i < equips.Count; i++)
            {
                var equipModel = packModel.GetItemByIndex(PackType.EquipOnFloor, i);
                if (equipModel == null)
                {
                    equips[i].gameObject.SetActive(false);
                    continue;
                }
 
                var config = equipModel.config;
                var equip = equips[i];
                equipImages[i].SetSprite(config.IconKey);
                equipImages[i].GetComponent<Canvas>().sortingLayerName = "UI";
                equip.SetListener(() => {
                    cutTreeModel.OpenEquipExchangeWin(equipModel);
                });
 
                var uieff = equipUIeffects[i];
                uieff.effect = cutTreeModel.equipUIEffectLights[Math.Min(config.ItemColor, cutTreeModel.equipUIEffectLights.Length) - 1];
                uieff.Play();
 
                if (isAnimate)
                {
                    dropState = 1;
                    float startPosX = UnityEngine.Random.Range(-130, 130);
                    //随机方向返回1或者-1
                    int randDir = UnityEngine.Random.Range(0, 2) == 0 ? 1 : -1;
 
                    equip.transform.localPosition = new Vector3(startPosX, 0, 0);
                    equip.SetActive(true);
                    equip.transform.DOLocalPath(new Vector3[] { new Vector3(startPosX, 0, 0), 
                        new Vector3(startPosX + randDir * 15, 30f, 0), 
                        new Vector3(startPosX + randDir * 35, -140 + UnityEngine.Random.Range(0, 10), 0) }, duration, PathType.CatmullRom).SetEase(Ease.InOutSine).OnComplete(CompleteDrop);
                }
                else
                {
                    equip.transform.localPosition = new Vector3(UnityEngine.Random.Range(-130, 130), -100, 0);
                }
                
            }
        }
 
        void CompleteDrop()
        {
            dropState = 2;
            if (autoCutTreeModel.isAutoCutTree)
            {
                cutTreeModel.isPlayCutTreeAnim = false;
            }
 
        }
        void AfterDropShow()
        {
            if (!autoCutTreeModel.isAutoCutTree)
            {
                //非自动砍树模式下,每次都打开装备操作界面
                var items = packModel.GetItems(PackType.EquipOnFloor);
                if (items != null && items.Count != 0)
                {
                    cutTreeModel.OpenEquipExchangeWin(items[0]);
                }
            }
            else
            {
                //自动模式下,需要判定多件装备是否有选定规则下的更好装备 或者 自动分解
            }
        }
    }
 
 
}