Survivalcraft API 1.8.2.3 v1.8.2.3
Survivalcraft 2.4
载入中...
搜索中...
未找到
Ray2.cs
浏览该文件的文档.
1namespace Engine {
2 public struct Ray2 : IEquatable<Ray2> {
4
6
7 public Ray2(Vector2 position, Vector2 direction) {
8 Position = position;
9 Direction = direction;
10 }
11
12 public override bool Equals(object obj) => obj is Ray2 && Equals((Ray2)obj);
13
14 public override int GetHashCode() => Position.GetHashCode() + Direction.GetHashCode();
15
16 public override string ToString() => $"{Position.ToString()},{Direction.ToString()}";
17
18 public bool Equals(Ray2 other) => Position == other.Position && Direction == other.Direction;
19
20 public float? Intersection(BoundingRectangle rectangle) {
21 float num = 0f;
22 if (Direction.X == 0f) {
23 if (Position.X < rectangle.Min.X
24 || Position.X > rectangle.Max.X) {
25 return null;
26 }
27 }
28 else {
29 float num2 = 1f / Direction.X;
30 float num3 = (rectangle.Min.X - Position.X) * num2;
31 float num4 = (rectangle.Max.X - Position.X) * num2;
32 if (num3 > num4) {
33 float num5 = num3;
34 num3 = num4;
35 num4 = num5;
36 }
37 num = MathUtils.Max(num3, num);
38 if (num > num4) {
39 return null;
40 }
41 }
42 if (Direction.Y == 0f) {
43 if (Position.Y < rectangle.Min.Y
44 || Position.Y > rectangle.Max.Y) {
45 return null;
46 }
47 }
48 else {
49 float num6 = 1f / Direction.Y;
50 float num7 = (rectangle.Min.Y - Position.Y) * num6;
51 float num8 = (rectangle.Max.Y - Position.Y) * num6;
52 if (num7 > num8) {
53 float num9 = num7;
54 num7 = num8;
55 num8 = num9;
56 }
57 num = MathUtils.Max(num7, num);
58 if (num > num8) {
59 return null;
60 }
61 }
62 return num;
63 }
64
65 public float? Intersection(BoundingCircle circle) {
66 Vector2 v = circle.Center - Position;
67 float num = v.LengthSquared();
68 float num2 = circle.Radius * circle.Radius;
69 if (num < num2) {
70 return 0f;
71 }
72 float num3 = Vector2.Dot(Direction, v);
73 if (num3 < 0f) {
74 return null;
75 }
76 float num4 = num2 + num3 * num3 - num;
77 if (!(num4 < 0f)) {
78 return num3 - MathF.Sqrt(num4);
79 }
80 return null;
81 }
82
83 public Vector2 Sample(float distance) => Position + Direction * distance;
84
85 public static Ray2 Transform(Ray2 r, Matrix m) {
86 Transform(ref r, ref m, out Ray2 result);
87 return result;
88 }
89
90 public static void Transform(ref Ray2 r, ref Matrix m, out Ray2 result) {
91 Vector2.Transform(ref r.Position, ref m, out result.Position);
92 Vector2.TransformNormal(ref r.Direction, ref m, out result.Direction);
93 }
94
95 public static bool operator ==(Ray2 a, Ray2 b) => a.Equals(b);
96
97 public static bool operator !=(Ray2 a, Ray2 b) => !a.Equals(b);
98 }
99}
static int Max(int x1, int x2)
static void Transform(ref Ray2 r, ref Matrix m, out Ray2 result)
定义 Ray2.cs:90
float? Intersection(BoundingRectangle rectangle)
定义 Ray2.cs:20
override bool Equals(object obj)
定义 Ray2.cs:12
bool Equals(Ray2 other)
定义 Ray2.cs:18
Vector2 Direction
定义 Ray2.cs:5
Ray2(Vector2 position, Vector2 direction)
定义 Ray2.cs:7
override int GetHashCode()
定义 Ray2.cs:14
static bool operator==(Ray2 a, Ray2 b)
定义 Ray2.cs:95
static bool operator!=(Ray2 a, Ray2 b)
定义 Ray2.cs:97
Vector2 Position
定义 Ray2.cs:3
Vector2 Sample(float distance)
定义 Ray2.cs:83
static Ray2 Transform(Ray2 r, Matrix m)
定义 Ray2.cs:85
float? Intersection(BoundingCircle circle)
定义 Ray2.cs:65
override string ToString()
定义 Ray2.cs:16
static float Dot(Vector2 v1, Vector2 v2)
static Vector2 TransformNormal(Vector2 v, Matrix m)
static Vector2 Transform(Vector2 v, Matrix m)
float LengthSquared()