EFTCheatPVE/EscapeFromTarkovCheat/Utils/Render.cs

158 lines
6.4 KiB
C#

/**
* Render class Credit to ZAT from Unknowncheats
* https://www.unknowncheats.me/forum/members/562321.html
*/
using System.Collections.Generic;
using UnityEngine;
namespace EscapeFromTarkovCheat.Utils
{
public static class Render
{
public static Material DrawMaterial = new Material(Shader.Find("Hidden/Internal-Colored"));
public static GUIStyle StringStyle { get; set; } = new GUIStyle(GUI.skin.label);
private class RingArray
{
public Vector2[] Positions { get; private set; }
public RingArray(int numSegments)
{
Positions = new Vector2[numSegments];
var stepSize = 360f / numSegments;
for (int i = 0; i < numSegments; i++)
{
var rad = Mathf.Deg2Rad * stepSize * i;
Positions[i] = new Vector2(Mathf.Sin(rad), Mathf.Cos(rad));
}
}
}
private static Dictionary<int, RingArray> ringDict = new Dictionary<int, RingArray>();
public static Color Color
{
get { return GUI.color; }
set { GUI.color = value; }
}
public static void DrawLine(Vector2 from, Vector2 to, float thickness, Color color)
{
Color = color;
DrawLine(from, to, thickness);
}
public static void DrawLine(Vector2 from, Vector2 to, float thickness)
{
var delta = (to - from).normalized;
var angle = Mathf.Atan2(delta.y, delta.x) * Mathf.Rad2Deg;
GUIUtility.RotateAroundPivot(angle, from);
DrawBox(from, Vector2.right * (from - to).magnitude, thickness, false);
GUIUtility.RotateAroundPivot(-angle, from);
}
public static void DrawBox(float x, float y, float w, float h, Color color)
{
DrawLine(new Vector2(x, y), new Vector2(x + w, y), 1f, color);
DrawLine(new Vector2(x, y), new Vector2(x, y + h), 1f,color);
DrawLine(new Vector2(x + w, y), new Vector2(x + w, y + h), 1f, color);
DrawLine(new Vector2(x, y + h), new Vector2(x + w, y + h), 1f, color);
}
public static void DrawBox(Vector2 position, Vector2 size, float thickness, Color color, bool centered = true)
{
Color = color;
DrawBox(position, size, thickness, centered);
}
public static void DrawBox(Vector2 position, Vector2 size, float thickness, bool centered = true)
{
var upperLeft = centered ? position - size / 2f : position;
GUI.DrawTexture(new Rect(position.x, position.y, size.x, thickness), Texture2D.whiteTexture);
GUI.DrawTexture(new Rect(position.x, position.y, thickness, size.y), Texture2D.whiteTexture);
GUI.DrawTexture(new Rect(position.x + size.x, position.y, thickness, size.y), Texture2D.whiteTexture);
GUI.DrawTexture(new Rect(position.x, position.y + size.y, size.x + thickness, thickness), Texture2D.whiteTexture);
}
public static void DrawCross(Vector2 position, Vector2 size, float thickness, Color color)
{
Color = color;
DrawCross(position, size, thickness);
}
public static void DrawCross(Vector2 position, Vector2 size, float thickness)
{
GUI.DrawTexture(new Rect(position.x - size.x / 2f, position.y, size.x, thickness), Texture2D.whiteTexture);
GUI.DrawTexture(new Rect(position.x, position.y - size.y / 2f, thickness, size.y), Texture2D.whiteTexture);
}
public static void DrawDot(Vector2 position, Color color)
{
Color = color;
DrawDot(position);
}
public static void DrawDot(Vector2 position)
{
DrawBox(position - Vector2.one, Vector2.one * 2f, 1f);
}
public static void DrawString(Vector2 position, string label, Color color, bool centered = true)
{
Color = color;
DrawString(position, label, centered);
}
public static void DrawString(Vector2 position, string label, bool centered = true)
{
var content = new GUIContent(label);
var size = StringStyle.CalcSize(content);
var upperLeft = centered ? position - size / 2f : position;
GUI.Label(new Rect(upperLeft, size), content);
}
public static void DrawCircle(Vector2 position, float radius, int numSides, bool centered = true, float thickness = 1f)
{
DrawCircle(position, radius, numSides, Color.white, centered, thickness);
}
public static void DrawCircle(Vector2 position, float radius, int numSides, Color color, bool centered = true, float thickness = 1f)
{
RingArray arr;
if (ringDict.ContainsKey(numSides))
arr = ringDict[numSides];
else
arr = ringDict[numSides] = new RingArray(numSides);
var center = centered ? position : position + Vector2.one * radius;
for (int i = 0; i < numSides - 1; i++)
DrawLine(center + arr.Positions[i] * radius, center + arr.Positions[i + 1] * radius, thickness, color);
DrawLine(center + arr.Positions[0] * radius, center + arr.Positions[arr.Positions.Length - 1] * radius, thickness, color);
}
public static void DrawSnapline(Vector3 worldpos, Color color)
{
Vector3 pos = Main.MainCamera.WorldToScreenPoint(worldpos);
pos.y = Screen.height - pos.y;
GL.PushMatrix();
GL.Begin(1);
DrawMaterial.SetPass(0);
GL.Color(color);
GL.Vertex3(Screen.width / 2, Screen.height, 0f);
GL.Vertex3(pos.x, pos.y, 0f);
GL.End();
GL.PopMatrix();
}
public static void DrawBoneLine(Vector2 from, Vector2 to, float thickness, Color color)
{
Color = color;
DrawBoneLine(from, to, thickness);
}
public static void DrawBoneLine(Vector2 from, Vector2 to, float thickness)
{
var delta = (to - from).normalized;
var angle = Mathf.Atan2(delta.y, delta.x) * Mathf.Rad2Deg;
GUIUtility.RotateAroundPivot(angle, from);
DrawBox(from, Vector2.right * (from - to).magnitude, thickness, false);
GUIUtility.RotateAroundPivot(-angle, from);
}
}
}