-
Notifications
You must be signed in to change notification settings - Fork 0
/
Vector2Extension.cs
100 lines (79 loc) · 2.59 KB
/
Vector2Extension.cs
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
using UnityEngine;
namespace Aya.Extension
{
public static partial class Vector2Extension
{
#region Deconstruct & With
public static void Deconstruct(in this Vector2 vector, out float x, out float y)
{
x = vector.x;
y = vector.y;
}
public static Vector2 With(in this Vector2 vector, float? x = null, float? y = null)
{
var result = new Vector2(x ?? vector.x, y ?? vector.y);
return result;
}
#endregion
#region Distance
public static float Distance2Line(this Vector2 vector, Vector2 linePoint1, Vector2 linePoint2)
{
var vec1 = vector - linePoint1;
var vec2 = linePoint2 - linePoint1;
var project = Vector3.Project(vec1, vec2);
var dis = Mathf.Sqrt(Mathf.Pow(Vector3.Magnitude(vec1), 2) - Mathf.Pow(Vector3.Magnitude(project), 2));
return dis;
}
#endregion
#region Rotate
public static Vector3 Rotate(Vector3 origin, Vector3 point, Vector3 axis, float angle)
{
var quaternion = Quaternion.AngleAxis(angle, axis);
var offset = origin - point;
offset = quaternion * offset;
var result = point + offset;
return result;
}
#endregion
#region Flip
public static Vector2 Flip(this Vector2 vector)
{
vector = -vector;
return vector;
}
public static Vector2 FlipX(this Vector2 vector)
{
vector.x = -vector.x;
return vector;
}
public static Vector2 FlipY(this Vector2 vector)
{
vector.y = -vector.y;
return vector;
}
#endregion
#region Clamp
public static Vector2 Clamp01(this Vector2 vector)
{
vector = vector.Clamp(0f, 1f);
return vector;
}
public static Vector2 Clamp(this Vector2 vector, float min, float max)
{
vector.x = Mathf.Clamp(vector.x, min, max);
vector.y = Mathf.Clamp(vector.y, min, max);
return vector;
}
public static Vector2 Clamp(this Vector2 vector, Vector2 min, Vector2 max)
{
vector.x = Mathf.Clamp(vector.x, min.x, max.x);
vector.y = Mathf.Clamp(vector.y, min.y, max.y);
return vector;
}
#endregion
public static bool IsNaN(this Vector2 vector)
{
return float.IsNaN(vector.x) || float.IsNaN(vector.y);
}
}
}