EFTCheatPVE/stoopid.raw/stupid.solutions.Utils/Render.cs

375 lines
13 KiB
C#

using System;
using System.Collections.Generic;
using EFT.UI;
using UnityEngine;
namespace stupid.solutions.Utils;
public static class Render
{
private class RingArray
{
public Vector2[] Positions { get; private set; }
public RingArray(int numSegments)
{
Positions = new Vector2[numSegments];
float num = 360f / (float)numSegments;
for (int i = 0; i < numSegments; i++)
{
float f = (float)Math.PI / 180f * num * (float)i;
Positions[i] = new Vector2(Mathf.Sin(f), Mathf.Cos(f));
}
}
}
private static Color _texturesColor;
private static Texture2D _currentTexture;
private static Color _currentTextureColor = Color.black;
private static readonly Texture2D _texture = new Texture2D(2, 2, TextureFormat.ARGB32, mipChain: false)
{
filterMode = FilterMode.Bilinear
};
private static readonly Texture2D Texture2D = new Texture2D(2, 2, TextureFormat.ARGB32, mipChain: false)
{
filterMode = FilterMode.Bilinear
};
public static Material material;
private static Dictionary<int, RingArray> ringDict = new Dictionary<int, RingArray>();
public static Vector4[] taaJitter = new Vector4[4]
{
new Vector4(0.5f, 0.5f, 0f, 0f),
new Vector4(-0.5f, 0.5f, 0f, 0f),
new Vector4(-0.5f, -0.5f, 0f, 0f),
new Vector4(0.5f, -0.5f, 0f, 0f)
};
public static int frameIndex = 0;
public static GUIStyle StringStyle { get; set; } = new GUIStyle(GUI.skin.label);
public static GUIStyle StringStyleOutline { get; set; } = new GUIStyle(GUI.skin.label);
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)
{
Main.AAMaterial.SetPass(0);
Vector2 normalized = (to - from).normalized;
float num = Mathf.Atan2(normalized.y, normalized.x) * 57.29578f;
GUIUtility.RotateAroundPivot(num, from);
DrawBox(from, Vector2.right * (from - to).magnitude, thickness, centered: false);
GUIUtility.RotateAroundPivot(0f - num, from);
}
public static void DrawLineGL(Vector2 from, Vector2 to, Color color)
{
GL.PushMatrix();
GameUtils.DrawMaterial.SetPass(0);
GL.LoadOrtho();
GL.Begin(1);
GL.Color(color);
GL.Vertex(new Vector3(from.x / (float)Screen.width, from.y / (float)Screen.height, 0f));
GL.Vertex(new Vector3(to.x / (float)Screen.width, to.y / (float)Screen.height, 0f));
GL.End();
GL.PopMatrix();
}
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)
{
if (centered)
{
_ = position - size / 2f;
}
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 DrawCornerBox(Vector2 position, Vector2 size, float thickness, Color color, float cornerLength = 10f, bool centered = true)
{
Vector2 vector = (centered ? (position - size / 2f) : position);
GUI.color = color;
GUI.DrawTexture(new Rect(vector.x, vector.y, cornerLength, thickness), Texture2D.whiteTexture);
GUI.DrawTexture(new Rect(vector.x, vector.y, thickness, cornerLength), Texture2D.whiteTexture);
GUI.DrawTexture(new Rect(vector.x + size.x - cornerLength, vector.y, cornerLength, thickness), Texture2D.whiteTexture);
GUI.DrawTexture(new Rect(vector.x + size.x - thickness, vector.y, thickness, cornerLength), Texture2D.whiteTexture);
GUI.DrawTexture(new Rect(vector.x, vector.y + size.y - cornerLength, thickness, cornerLength), Texture2D.whiteTexture);
GUI.DrawTexture(new Rect(vector.x, vector.y + size.y - thickness, cornerLength, thickness), Texture2D.whiteTexture);
GUI.DrawTexture(new Rect(vector.x + size.x - cornerLength, vector.y + size.y - thickness, cornerLength, thickness), Texture2D.whiteTexture);
GUI.DrawTexture(new Rect(vector.x + size.x - thickness, vector.y + size.y - cornerLength, thickness, cornerLength), Texture2D.whiteTexture);
GUI.color = Color.white;
}
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)
{
DrawBox(position - Vector2.one, Vector2.one * 2f, 1f);
}
public static void DrawString(Vector2 position, string label, Color color, bool centered = true, Color outlineColor = default(Color), bool outline = true)
{
if (outlineColor == default(Color))
{
outlineColor = Color.black;
}
DrawText(position, label, color, outlineColor, centered, outline);
}
public static void DrawRichTextString(Vector2 position, string label, Color color, bool centered = true)
{
DrawTextRich(position, label, color, centered);
}
private static void DrawTextRich(Vector2 position, string label, Color color, bool centered = true, bool outline = true)
{
if (Main.TXTFONT == null)
{
ConsoleScreen.Log("TEXT FONT NOT LOADED !");
return;
}
GUIContent content = new GUIContent(label);
StringStyle.fontSize = Settings.fontsize;
if (StringStyle.font != Main.TXTFONT)
{
StringStyle.font = Main.TXTFONT;
}
StringStyle.normal.textColor = color;
StringStyle.alignment = TextAnchor.MiddleCenter;
Vector2 vector = StringStyle.CalcSize(content);
Vector2 position2 = (centered ? (position - vector / 2f) : position);
Color = color;
StringStyle.normal.textColor = color;
GUI.Label(new Rect(position2, vector), content, StringStyle);
}
public static void DrawTextRadar(Vector2 position, string label, Color color, bool centered = true)
{
if (Main.TXTFONT == null)
{
ConsoleScreen.Log("TEXT FONT NOT LOADED !");
}
GUIContent content = new GUIContent(label);
StringStyle.fontSize = 12;
if (StringStyle.font != Main.TXTFONT)
{
StringStyle.font = Main.TXTFONT;
}
StringStyle.alignment = TextAnchor.MiddleCenter;
Vector2 vector = StringStyle.CalcSize(content);
Vector2 position2 = (centered ? (position - vector / 2f) : position);
StringStyle.normal.textColor = color;
Color = color;
GUI.Label(new Rect(position2, vector), content, StringStyle);
}
public static void DrawText1(Vector2 position, string label, Color color, bool centered = true)
{
if (Main.TXTFONT == null)
{
ConsoleScreen.Log("TEXT FONT NOT LOADED !");
}
GUIContent content = new GUIContent(label);
StringStyle.fontSize = Settings.fontsize;
if (StringStyle.font != Main.TXTFONT)
{
StringStyle.font = Main.TXTFONT;
}
StringStyle.alignment = TextAnchor.MiddleCenter;
Vector2 vector = StringStyle.CalcSize(content);
Vector2 position2 = (centered ? (position - vector / 2f) : position);
StringStyle.normal.textColor = color;
Color = color;
GUI.Label(new Rect(position2, vector), content, StringStyle);
}
private static void DrawText(Vector2 position, string label, Color color, Color outlinecolor, bool centered = true, bool outline = true)
{
if (Main.TXTFONT == null)
{
ConsoleScreen.Log("TEXT FONT NOT LOADED !");
return;
}
GUIContent content = new GUIContent(label);
StringStyle.fontSize = Settings.fontsize;
if (StringStyle.font != Main.TXTFONT)
{
StringStyle.font = Main.TXTFONT;
}
StringStyle.normal.textColor = color;
StringStyle.alignment = TextAnchor.MiddleCenter;
Vector2 vector = StringStyle.CalcSize(content);
Vector2 vector2 = (centered ? (position - vector / 2f) : position);
if (Settings.DrawOutline && outline)
{
StringStyleOutline.fontSize = Settings.fontsize;
if (StringStyleOutline.font != Main.TXTFONT)
{
StringStyleOutline.font = Main.TXTFONT;
}
StringStyleOutline.alignment = TextAnchor.MiddleCenter;
StringStyleOutline.normal.textColor = outlinecolor;
Vector2[] array = new Vector2[8]
{
new Vector2(-1f, 0f),
new Vector2(1f, 0f),
new Vector2(0f, -1f),
new Vector2(0f, 1f),
new Vector2(-1f, -1f),
new Vector2(1f, -1f),
new Vector2(-1f, 1f),
new Vector2(1f, 1f)
};
foreach (Vector2 vector3 in array)
{
GUI.Label(new Rect(vector2 + vector3, vector), content, StringStyleOutline);
}
}
Color = color;
StringStyle.normal.textColor = color;
GUI.Label(new Rect(vector2, vector), content, StringStyle);
}
public static void DrawCircle(Vector2 position, float radius, int numSides, Color color, bool centered = true)
{
GL.PushMatrix();
GameUtils.DrawMaterial.SetPass(0);
GL.LoadOrtho();
GL.Begin(1);
GL.Color(color);
float num = 360f / (float)numSides;
Vector2 vector = (centered ? position : (position + Vector2.one * radius));
for (int i = 0; i < numSides; i++)
{
float f = (float)Math.PI / 180f * ((float)i * num);
float f2 = (float)Math.PI / 180f * ((float)(i + 1) * num);
Vector2 vector2 = vector + new Vector2(Mathf.Cos(f), Mathf.Sin(f)) * radius;
Vector2 vector3 = vector + new Vector2(Mathf.Cos(f2), Mathf.Sin(f2)) * radius;
GL.Vertex(new Vector3(vector2.x / (float)Screen.width, vector2.y / (float)Screen.height, 0f));
GL.Vertex(new Vector3(vector3.x / (float)Screen.width, vector3.y / (float)Screen.height, 0f));
}
GL.End();
GL.PopMatrix();
}
public static void DrawCornerBox(Vector2 headPosition, float width, float height, Color color, bool outline)
{
int num = (int)(width / 4f);
int num2 = num;
if (outline)
{
RectFilled(headPosition.x - width / 2f - 1f, headPosition.y - 1f, num + 2, 3f, Color.black);
RectFilled(headPosition.x - width / 2f - 1f, headPosition.y - 1f, 3f, num2 + 2, Color.black);
RectFilled(headPosition.x + width / 2f - (float)num - 1f, headPosition.y - 1f, num + 2, 3f, Color.black);
RectFilled(headPosition.x + width / 2f - 1f, headPosition.y - 1f, 3f, num2 + 2, Color.black);
RectFilled(headPosition.x - width / 2f - 1f, headPosition.y + height - 4f, num + 2, 3f, Color.black);
RectFilled(headPosition.x - width / 2f - 1f, headPosition.y + height - (float)num2 - 4f, 3f, num2 + 2, Color.black);
RectFilled(headPosition.x + width / 2f - (float)num - 1f, headPosition.y + height - 4f, num + 2, 3f, Color.black);
RectFilled(headPosition.x + width / 2f - 1f, headPosition.y + height - (float)num2 - 4f, 3f, num2 + 3, Color.black);
}
RectFilled(headPosition.x - width / 2f, headPosition.y, num, 1f, color);
RectFilled(headPosition.x - width / 2f, headPosition.y, 1f, num2, color);
RectFilled(headPosition.x + width / 2f - (float)num, headPosition.y, num, 1f, color);
RectFilled(headPosition.x + width / 2f, headPosition.y, 1f, num2, color);
RectFilled(headPosition.x - width / 2f, headPosition.y + height - 3f, num, 1f, color);
RectFilled(headPosition.x - width / 2f, headPosition.y + height - (float)num2 - 3f, 1f, num2, color);
RectFilled(headPosition.x + width / 2f - (float)num, headPosition.y + height - 3f, num, 1f, color);
RectFilled(headPosition.x + width / 2f, headPosition.y + height - (float)num2 - 3f, 1f, num2 + 1, color);
}
public static void RectFilled(float x, float y, float width, float height, Color color)
{
if (color != _texturesColor)
{
_texturesColor = color;
_texture.SetPixel(0, 0, color);
_texture.Apply();
}
GUI.DrawTexture(new Rect(x, y, width, height), _texture);
}
public static void BoxRect(Rect rect, Color color)
{
if (_currentTexture == null)
{
_currentTexture = new Texture2D(1, 1);
_currentTexture.SetPixel(0, 0, color);
_currentTexture.Apply();
_currentTextureColor = color;
}
else if (color != _currentTextureColor)
{
_currentTexture.SetPixel(0, 0, color);
_currentTexture.Apply();
_currentTextureColor = color;
}
GUI.DrawTexture(rect, _currentTexture);
}
public static void DrawRadarBackground(Rect rect)
{
Color color = new Color(0f, 0f, 0f, 0.5f);
Texture2D.SetPixel(0, 0, color);
Texture2D.Apply();
GUI.color = color;
GUI.DrawTexture(rect, Texture2D);
}
public static void ApplyTAA()
{
if (Main.AAMaterial != null)
{
frameIndex = (frameIndex + 1) % taaJitter.Length;
Main.AAMaterial.SetVector("_Jitter", taaJitter[frameIndex]);
}
}
}