Advertisement
Guest User

Untitled

a guest
Jan 5th, 2025
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 5.79 KB | Source Code | 0 0
  1. using System;
  2. using System.Globalization;
  3. using System.Numerics;
  4. using GameOffsets.Native;
  5. using SharpDX;
  6.  
  7. public struct Vector2i : IEquatable<Vector2i>
  8. {
  9.     public int X;
  10.  
  11.     public int Y;
  12.  
  13.     public static Vector2i Zero { get; } = new Vector2i(0, 0);
  14.  
  15.     public static Vector2i One { get; } = new Vector2i(1, 1);
  16.  
  17.     public Vector2i(int x, int y)
  18.     {
  19.         X = x;
  20.         Y = y;
  21.     }
  22.  
  23.     public int Length()
  24.     {
  25.         return (int)Math.Sqrt(LengthSqr());
  26.     }
  27.  
  28.     public int LengthSqr()
  29.     {
  30.         return X * X + Y * Y;
  31.     }
  32.  
  33.     public void Normalize()
  34.     {
  35.         int num = Length();
  36.         Divide(ref this, num, out this);
  37.     }
  38.  
  39.     public int Distance(Vector2i v)
  40.     {
  41.         return Distance(ref this, ref v);
  42.     }
  43.  
  44.     public float DistanceF(Vector2i v)
  45.     {
  46.         return DistanceF(ref this, ref v);
  47.     }
  48.  
  49.     public int Distance(ref Vector2i v)
  50.     {
  51.         return Distance(ref this, ref v);
  52.     }
  53.  
  54.     public int DistanceSqr(Vector2i v)
  55.     {
  56.         return DistanceSqr(ref this, ref v);
  57.     }
  58.  
  59.     public int DistanceSqr(ref Vector2i v)
  60.     {
  61.         return DistanceSqr(ref this, ref v);
  62.     }
  63.  
  64.     public SharpDX.Vector3 ToVector3()
  65.     {
  66.         return new SharpDX.Vector3(X, Y, 0f);
  67.     }
  68.  
  69.     public SharpDX.Vector2 ToVector2()
  70.     {
  71.         return new SharpDX.Vector2(X, Y);
  72.     }
  73.  
  74.     public System.Numerics.Vector2 ToVector2Num()
  75.     {
  76.         return new System.Numerics.Vector2(X, Y);
  77.     }
  78.  
  79.     public bool Equals(Vector2i other)
  80.     {
  81.         return Equals(ref this, ref other);
  82.     }
  83.  
  84.     public bool Equals(ref Vector2i other)
  85.     {
  86.         return Equals(ref this, ref other);
  87.     }
  88.  
  89.     public static bool Equals(ref Vector2i v1, ref Vector2i v2)
  90.     {
  91.         if (v1.X == v2.X)
  92.         {
  93.             return v1.Y == v2.Y;
  94.         }
  95.         return false;
  96.     }
  97.  
  98.     public static bool operator ==(Vector2i ls, Vector2i rs)
  99.     {
  100.         return Equals(ref ls, ref rs);
  101.     }
  102.  
  103.     public static bool operator !=(Vector2i ls, Vector2i rs)
  104.     {
  105.         return !Equals(ref ls, ref rs);
  106.     }
  107.  
  108.     public override bool Equals(object obj)
  109.     {
  110.         if (obj == null)
  111.         {
  112.             return false;
  113.         }
  114.         try
  115.         {
  116.             return Equals((Vector2i)obj);
  117.         }
  118.         catch (InvalidCastException)
  119.         {
  120.             return false;
  121.         }
  122.     }
  123.  
  124.     public override int GetHashCode()
  125.     {
  126.         return (X.GetHashCode() * 397) ^ Y.GetHashCode();
  127.     }
  128.  
  129.     public override string ToString()
  130.     {
  131.         return string.Format(CultureInfo.InvariantCulture, "{{{0}, {1}}}", X, Y);
  132.     }
  133.  
  134.     public static Vector2i operator +(Vector2i ls, Vector2i rs)
  135.     {
  136.         Add(ref ls, ref rs, out var result);
  137.         return result;
  138.     }
  139.  
  140.     public static Vector2i operator -(Vector2i ls, Vector2i rs)
  141.     {
  142.         Subtract(ref ls, ref rs, out var result);
  143.         return result;
  144.     }
  145.  
  146.     public static Vector2i operator -(Vector2i v)
  147.     {
  148.         v.X = -v.X;
  149.         v.Y = -v.Y;
  150.         return v;
  151.     }
  152.  
  153.     public static Vector2i operator *(Vector2i ls, Vector2i rs)
  154.     {
  155.         Multiply(ref ls, ref rs, out var result);
  156.         return result;
  157.     }
  158.  
  159.     public static Vector2i operator *(Vector2i ls, int rs)
  160.     {
  161.         Multiply(ref ls, rs, out var result);
  162.         return result;
  163.     }
  164.  
  165.     public static Vector2i operator *(Vector2i ls, float rs)
  166.     {
  167.         return new Vector2i((int)((float)ls.X * rs), (int)((float)ls.Y * rs));
  168.     }
  169.  
  170.     public static Vector2i operator /(Vector2i ls, Vector2i rs)
  171.     {
  172.         Multiply(ref ls, ref rs, out var result);
  173.         return result;
  174.     }
  175.  
  176.     public static Vector2i operator /(Vector2i ls, int rs)
  177.     {
  178.         Divide(ref ls, rs, out var result);
  179.         return result;
  180.     }
  181.  
  182.     public static implicit operator System.Numerics.Vector2(Vector2i vector)
  183.     {
  184.         return vector.ToVector2Num();
  185.     }
  186.  
  187.     public static void Add(ref Vector2i v1, ref Vector2i v2, out Vector2i result)
  188.     {
  189.         result = new Vector2i
  190.         {
  191.             X = v1.X + v2.X,
  192.             Y = v1.Y + v2.Y
  193.         };
  194.     }
  195.  
  196.     public static void Subtract(ref Vector2i v1, ref Vector2i v2, out Vector2i result)
  197.     {
  198.         result = new Vector2i
  199.         {
  200.             X = v1.X - v2.X,
  201.             Y = v1.Y - v2.Y
  202.         };
  203.     }
  204.  
  205.     public static void Multiply(ref Vector2i v1, ref Vector2i v2, out Vector2i result)
  206.     {
  207.         result = new Vector2i
  208.         {
  209.             X = v1.X * v2.X,
  210.             Y = v1.Y * v2.Y
  211.         };
  212.     }
  213.  
  214.     public static Vector2i Multiply(Vector2i v1, Vector2i v2)
  215.     {
  216.         Vector2i result = default(Vector2i);
  217.         result.X = v1.X * v2.X;
  218.         result.Y = v1.Y * v2.Y;
  219.         return result;
  220.     }
  221.  
  222.     public static void Multiply(ref Vector2i v1, float scalar, out Vector2i result)
  223.     {
  224.         result = new Vector2i
  225.         {
  226.             X = (int)((float)v1.X * scalar),
  227.             Y = (int)((float)v1.Y * scalar)
  228.         };
  229.     }
  230.  
  231.     public static void Divide(ref Vector2i v1, ref Vector2i v2, out Vector2i result)
  232.     {
  233.         result = new Vector2i
  234.         {
  235.             X = v1.X / v2.X,
  236.             Y = v1.Y / v2.Y
  237.         };
  238.     }
  239.  
  240.     public static void Divide(ref Vector2i v1, float divisor, out Vector2i result)
  241.     {
  242.         Multiply(ref v1, 1f / divisor, out result);
  243.     }
  244.  
  245.     public static int Distance(ref Vector2i v1, ref Vector2i v2)
  246.     {
  247.         return (int)Math.Sqrt(DistanceSqr(ref v1, ref v2));
  248.     }
  249.  
  250.     public static float DistanceF(ref Vector2i v1, ref Vector2i v2)
  251.     {
  252.         return (float)Math.Sqrt(DistanceSqr(ref v1, ref v2));
  253.     }
  254.  
  255.     public static int DistanceSqr(ref Vector2i v1, ref Vector2i v2)
  256.     {
  257.         int num = v1.X - v2.X;
  258.         int num2 = v1.Y - v2.Y;
  259.         return num * num + num2 * num2;
  260.     }
  261.  
  262.     public static void GetDirection(ref Vector2i from, ref Vector2i to, out Vector2i dir)
  263.     {
  264.         Subtract(ref to, ref from, out dir);
  265.         dir.Normalize();
  266.     }
  267.  
  268.     public static Vector2i Min(Vector2i v1, Vector2i v2)
  269.     {
  270.         Min(ref v1, ref v2, out var result);
  271.         return result;
  272.     }
  273.  
  274.     public static void Min(ref Vector2i v1, ref Vector2i v2, out Vector2i result)
  275.     {
  276.         result = default(Vector2i);
  277.         result.X = Math.Min(v1.X, v2.X);
  278.         result.Y = Math.Min(v1.Y, v2.Y);
  279.     }
  280.  
  281.     public static Vector2i Max(Vector2i v1, Vector2i v2)
  282.     {
  283.         Max(ref v1, ref v2, out var result);
  284.         return result;
  285.     }
  286.  
  287.     public static void Max(ref Vector2i v1, ref Vector2i v2, out Vector2i result)
  288.     {
  289.         result = new Vector2i
  290.         {
  291.             X = Math.Max(v1.X, v2.X),
  292.             Y = Math.Max(v1.Y, v2.Y)
  293.         };
  294.     }
  295.  
  296.     public static int Dot(Vector2i v1, Vector2i v2)
  297.     {
  298.         return v1.X * v2.X + v1.Y * v2.Y;
  299.     }
  300. }
  301.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement