少年修仙传客户端代码仓库
client_Zxw
2018-10-10 1bd6585136a255f253382030e228cfe73e6e256a
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
//--------------------------------------------------------
//    [Author]:           第二世界
//    [  Date ]:           Friday, September 21, 2018
//--------------------------------------------------------
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using DG.Tweening;
using System;
 
namespace Snxxz.UI {
 
    public class RotatePointer:MonoBehaviour {
        public bool _isRotate = false;//是否旋转      
        public float Speed = 2000;//旋转速度
        public float Angle = 0; // 这个是设置停止的角度
        private float Acceleration = 0;//加速度
        private float _time;
        private bool IsRotateBool = false;//是否进行旋转
        public static event Action<bool> IsButtonShow;
        [Header("总旋转时间")]
        public float ContinuousTime = 4;//旋转时间
        [Header("加速减速时间")]
        public float SpeedTime = 1;
        [Header("最小速度")]
        public float MinSpeed= 400;
        [Header("最大速度")]
        public float MaxSpeed = 800;
        WheelOfFortuneModel wheelOfFortuneModel { get { return ModelCenter.Instance.GetModel<WheelOfFortuneModel>(); } }
        [SerializeField] CheckDisplay m_CheckDisplay;
 
        public void Init()
        {
            IsRotateBool = false;
            _time = 0;
            Angle = wheelOfFortuneModel.AngleSave;
            transform.localRotation = Quaternion.Euler(0, 0, -Angle);
            Acceleration = (MaxSpeed - MinSpeed) / SpeedTime;
            m_CheckDisplay.CloseAll();
        }
        private void OnEnable()
        {
           
        }
 
        
        void Update()
        {
 
            if (!_isRotate)
            {
 
                if (-Angle != transform.eulerAngles.z)
                {
                    transform.localRotation = Quaternion.Euler(0, 0, -Angle);
                    m_CheckDisplay.ShowSelected(wheelOfFortuneModel.Lattice);
                    if (IsButtonShow != null)
                    {
                        IsButtonShow(true);
                    }
                    IsRotateBool = false;
                }          
                return; //不旋转结束
            }
               
 
            if (IsRotateBool)
            {
 
                _time += Time.deltaTime;
 
                if (_time < SpeedTime)//匀加速
                {
                    Speed = MinSpeed + Acceleration * _time;
                    if (Speed >= MaxSpeed)
                    {
                        Speed = MaxSpeed;
                    }
                }
                else if (_time > ContinuousTime - SpeedTime)//匀减速
                {
                    Speed = MaxSpeed - Acceleration * (_time - (ContinuousTime - SpeedTime));
                    if (Speed <= MinSpeed)
                    {
                        Speed = MinSpeed;
                    }
                }
                else//匀速
                {
                    Speed = MaxSpeed;
                }
                if (_time < ContinuousTime) // 没结束
                {
                    transform.Rotate(-Vector3.forward * Speed * Time.deltaTime);
                }
                else
                {
                    //结束,使用DoTween旋转到结束角度,耗时1秒
                    //这里有个360,使用来防止指针回转的,如果不加这个360,你会看到指针倒退
                    Sequence sequence = DOTween.Sequence();
                    sequence.Append(transform.DORotate(new Vector3(0, 0, -(360 + Angle)), 2f, RotateMode.FastBeyond360));
                    sequence.AppendCallback(()=> 
                    {
                        _isRotate = false; // 设置不旋转
                        if (IsButtonShow != null)
                        {
                            IsButtonShow(true);
                        }
                        m_CheckDisplay.ShowSelected(wheelOfFortuneModel.Lattice);
                    });                 
                    IsRotateBool = false;
                }
               // DebugEx.LogError(transform.eulerAngles.z);
            }          
        }
 
        //外部调用,初始化时间和打开旋转
        public void SetTime(bool _bool)
        {
            _time =0;
            Angle = wheelOfFortuneModel.AngleSave;
            if (_bool)
            {
                IsRotateBool = false;
                _isRotate = false;
            }
            else
            {
                IsRotateBool = true;
                _isRotate = true;
            }
            
        }
 
        private void TweenOver()
        {
 
        }
        //外部调用,设置停止角度
    }
 
}