少年修仙传客户端代码仓库
lcy
3 天以前 6d8908e1fcfb62e174d1fa60eb6aa31f65dff3e1
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
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
using UnityEngine;
using System;
 
 
public class MathUtility
{
 
    public static Vector3 Rotate90_XZ_CW(Vector3 vector)
    {
        Vector3 _vec = new Vector3(vector.z, vector.y, -vector.x);
        return _vec;
    }
 
    public static Vector3 Rotate90_XZ_CCW(Vector3 vector)
    {
        Vector3 _vec = new Vector3(-vector.z, vector.y, vector.x);
        return _vec;
    }
 
    public static Vector3 Rotate180_XZ(Vector3 vector)
    {
        Vector3 _vec = new Vector3(-vector.x, vector.y, -vector.z);
        return _vec;
    }
 
    /// <summary>
    /// 返回手势方向
    /// </summary>
    /// <param name="_start"></param>
    /// <param name="_end"></param>
    /// <returns></returns>
    static public GestureType GetGestureDirection(Vector2 _start, Vector2 _end)
    {
        GestureType gesture;
 
        var direction = _end - _start;
        var x = direction.x;
        var y = direction.y;
 
        if (y < x && y > -x)
        {
            gesture = GestureType.Right;
        }
        else if (y > x && y < -x)
        {
            gesture = GestureType.Left;
        }
        else if (y > x && y > -x)
        {
            gesture = GestureType.Up;
        }
        else
        {
            gesture = GestureType.Down;
        }
 
        return gesture;
    }
 
    public static float FreeFall(float _startY, float _time)
    {
 
        float deltaY = 0.5f * Constants.GRAVITY_RATE * Mathf.Pow(_time, 2f);
 
        return _startY - deltaY;
    }
 
    public static float CalculateRefrenceScale(Vector2 _designWH)
    {
        var width = _designWH.x;
        var height = _designWH.y;
        var refrenceHeight = 0f;
 
        if (Screen.height / (float)Screen.width > height / (float)width)
        {
            refrenceHeight = (float)width / Screen.width * Screen.height;
        }
        else
        {
            refrenceHeight = height;
        }
 
        var scale = refrenceHeight / height;
 
        return scale;
    }
 
    public static float CalDistance(Vector3 srcPos, Vector3 desPos)
    {
        return (srcPos.x - desPos.x) * (srcPos.x - desPos.x) + (srcPos.z - desPos.z) * (srcPos.z - desPos.z);
    }
 
    /// <summary>
    /// 返回Int数据中某一位是否为1
    /// </summary>
    /// <param name="value"></param>
    /// <param name="index">32位数据的从右向左的偏移位索引(0~31)</param>
    /// <returns>true表示该位为1,false表示该位为0</returns>
    public static bool GetBitValue(uint value, ushort index)
    {
        if (index > 31)
        {
            throw new ArgumentOutOfRangeException("index"); //索引出错
        }
 
        var val = 1 << index;
        return (value & val) == val;
    }
 
    /// <summary>
    /// 设定Int数据中某一位的值
    /// </summary>
    /// <param name="value">位设定前的值</param>
    /// <param name="index">32位数据的从右向左的偏移位索引(0~31)</param>
    /// <param name="bitValue">true设该位为1,false设为0</param>
    /// <returns>返回位设定后的值</returns>
    public static int SetBitValue(int value, ushort index, bool bitValue)
    {
        if (index > 31)
        {
            throw new ArgumentOutOfRangeException("index"); //索引出错
        }
 
        var val = 1 << index;
        return bitValue ? (value | val) : (value & ~val);
    }
 
    public static bool IsPointInsideRectangel(Vector3 point, Vector3 rectStart, Vector3 rectEnd)
    {
        return point.x > rectStart.x && point.x < rectEnd.x && point.z > rectStart.z && point.z < rectEnd.z;
    }
 
    /// <summary>
    /// 返回角度代表的四元素
    /// </summary>
    /// <param name="angle"></param>
    /// <returns></returns>
    public static Quaternion GetClientRotationFromAngle(int angle)
    {
        float _angle = Mathf.Clamp(1.40625f * angle, 0f, 359f);
        return Quaternion.Euler(0, _angle, 0);
    }
 
    public static float DistanceSqrtXZ(Vector3 p1, Vector3 p2)
    {
        p1.y = 0;
        p2.y = 0;
        return Vector3.SqrMagnitude(p2 - p1);
    }
 
    public static Vector3 ForwardXZ(Vector3 target, Vector3 self)
    {
        target.y = 0;
        self.y = 0;
        return (target - self).normalized;
    }
 
    public static bool IsSameDir(Vector3 vec1, Vector3 vec2)
    {
        vec1.y = 0;
        vec2.y = 0;
 
        return Vector3.Dot(vec1, vec2) > 0;
    }
 
    public static bool OppositeDir(Vector3 vec1, Vector3 vec2)
    {
        vec1.y = 0;
        vec2.y = 0;
 
        return Vector3.Dot(vec1, vec2) < 0;
    }
    public static int Power(int a, int e)
    {
        int value = 1;
        for (int i = 0; i < e; i++)
        {
            value *= a;
        }
 
        return value;
    }
 
    public static bool CheckAdult(string _IDNumber)
    {
        if (string.IsNullOrEmpty(_IDNumber))
        {
            return false;
        }
 
        if (_IDNumber.Length == 15)
        {
            return true;
        }
        else if (_IDNumber.Length == 18)
        {
            var year = int.Parse(_IDNumber.Substring(6, 4));
            var month = int.Parse(_IDNumber.Substring(10, 2));
            var day = int.Parse(_IDNumber.Substring(12, 2));
            var borth = new DateTime(year, month, day);
 
            return (DateTime.Now - borth).TotalDays >= (365 * 18 + 4);
        }
        else
        {
            return true;
        }
    }
 
    public static float GetFloatFromLitJson(LitJson.JsonData j)
    {
        if (j.IsDouble)
        {
            return (float)(double)j;
        }
        else if (j.IsInt)
        {
            return (float)(int)j;
        }
        return 0f;
    }
}