Algorithms.txt
Algorithms.txt
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SharpDX;
using ShpVector3 = SharpDX.Vector3;
using ShpVector2 = SharpDX.Vector2;
namespace PUBGMESP
{
internal class Algorithms
{
/// <summary>
/// Check if enemy is inside fov circle
/// </summary>
/// <param name="xc"></param>
/// <param name="yc"></param>
/// <param name="r"></param>
/// <param name="x"></param>
/// <param name="y"></param>
/// <returns></returns>
public static bool isInside(float circle_x, float circle_y,
float rad, float x, float y)
{
// Compare radius of circle with distance
// of its center from given point
if ((x - circle_x) * (x - circle_x) +
(y - circle_y) * (y - circle_y) <= rad * rad)
return true;
else
return false;
}
/// <summary>
/// Get Distance Between Enemy And Player
/// </summary>
/// <param name="x1"></param>
/// <param name="y1"></param>
/// <param name="x2"></param>
/// <param name="y2"></param>
/// <returns></returns>
public static double GetDistance(double x1, double y1, double x2, double
y2)
{
return Math.Sqrt(Math.Pow((x2 - x1), 2) + Math.Pow((y2 - y1), 2));
}
/// <summary>
/// Read View Matrix
/// </summary>
/// <param name="vAddv"></param>
/// <returns></returns>
public static D3DMatrix ReadViewMatrix(long vAddv) =>
Mem.ReadMemory<D3DMatrix>(vAddv);
/// <summary>
/// Read FTTransform
/// </summary>
/// <param name="vAddv"></param>
/// <returns></returns>
public static FTTransform ReadFTTransform(long vAddv) =>
Mem.ReadMemory<FTTransform>(vAddv);
/// <summary>
/// Get Bone's world position
/// </summary>
/// <param name="actorAddv"></param>
/// <param name="boneAddv"></param>
/// <returns></returns>
public static ShpVector3 GetBoneWorldPosition(long actorAddv, long
boneAddv)
{
/// <summary>
/// To Matrix With Scale
/// </summary>
/// <param name="translation"></param>
/// <param name="scale"></param>
/// <param name="rot"></param>
/// <returns></returns>
private static D3DMatrix ToMatrixWithScale(Vector3 translation, Vector3
scale, Vector4 rot)
{
D3DMatrix m = new D3DMatrix
{
_41 = translation.X,
_42 = translation.Y,
_43 = translation.Z
};
m._14 = 0.0f;
m._24 = 0.0f;
m._34 = 0.0f;
m._44 = 1.0f;
return m;
}
/// <summary>
/// D3DMatrix Mutiplication
/// </summary>
/// <param name="pM1"></param>
/// <param name="pM2"></param>
/// <returns></returns>
public static D3DMatrix MatrixMultiplication(D3DMatrix pM1, D3DMatrix pM2)
{
D3DMatrix pOut = new D3DMatrix
{
_11 = pM1._11 * pM2._11 + pM1._12 * pM2._21 + pM1._13 * pM2._31 +
pM1._14 * pM2._41,
_12 = pM1._11 * pM2._12 + pM1._12 * pM2._22 + pM1._13 * pM2._32 +
pM1._14 * pM2._42,
_13 = pM1._11 * pM2._13 + pM1._12 * pM2._23 + pM1._13 * pM2._33 +
pM1._14 * pM2._43,
_14 = pM1._11 * pM2._14 + pM1._12 * pM2._24 + pM1._13 * pM2._34 +
pM1._14 * pM2._44,
_21 = pM1._21 * pM2._11 + pM1._22 * pM2._21 + pM1._23 * pM2._31 +
pM1._24 * pM2._41,
_22 = pM1._21 * pM2._12 + pM1._22 * pM2._22 + pM1._23 * pM2._32 +
pM1._24 * pM2._42,
_23 = pM1._21 * pM2._13 + pM1._22 * pM2._23 + pM1._23 * pM2._33 +
pM1._24 * pM2._43,
_24 = pM1._21 * pM2._14 + pM1._22 * pM2._24 + pM1._23 * pM2._34 +
pM1._24 * pM2._44,
_31 = pM1._31 * pM2._11 + pM1._32 * pM2._21 + pM1._33 * pM2._31 +
pM1._34 * pM2._41,
_32 = pM1._31 * pM2._12 + pM1._32 * pM2._22 + pM1._33 * pM2._32 +
pM1._34 * pM2._42,
_33 = pM1._31 * pM2._13 + pM1._32 * pM2._23 + pM1._33 * pM2._33 +
pM1._34 * pM2._43,
_34 = pM1._31 * pM2._14 + pM1._32 * pM2._24 + pM1._33 * pM2._34 +
pM1._34 * pM2._44,
_41 = pM1._41 * pM2._11 + pM1._42 * pM2._21 + pM1._43 * pM2._31 +
pM1._44 * pM2._41,
_42 = pM1._41 * pM2._12 + pM1._42 * pM2._22 + pM1._43 * pM2._32 +
pM1._44 * pM2._42,
_43 = pM1._41 * pM2._13 + pM1._42 * pM2._23 + pM1._43 * pM2._33 +
pM1._44 * pM2._43,
_44 = pM1._41 * pM2._14 + pM1._42 * pM2._24 + pM1._43 * pM2._34 +
pM1._44 * pM2._44
};
return pOut;
}
/// <summary>
/// Player's World To Screen Function
/// </summary>
/// <param name="vAddr"></param>
/// <param name="pos"></param>
/// <param name="screen"></param>
/// <param name="windowWidth"></param>
/// <param name="windowHeight"></param>
/// <returns></returns>
public static bool WorldToScreenPlayer(D3DMatrix viewMatrix, ShpVector3
pos, out ShpVector3 screen, out int distance, int windowWidth, int windowHeight)
{
screen = new ShpVector3();
//ScreenW = (GameViewMatrix._14 * _Enemy_Point.x) +
(GameViewMatrix._24* _Enemy_Point.y) + (GameViewMatrix._34 * _Enemy_Point.z +
GameViewMatrix._44);
float screenW = (viewMatrix._14 * pos.X) + (viewMatrix._24 * pos.Y) +
(viewMatrix._34 * pos.Z + viewMatrix._44);
distance = (int)(screenW / 100);
if (screenW < 0.0001f) return false;
/// <summary>
/// Bone's World to Screen Function
/// </summary>
/// <param name="viewMatrix"></param>
/// <param name="pos"></param>
/// <param name="screen"></param>
/// <param name="windowWidth"></param>
/// <param name="windowHeight"></param>
/// <returns></returns>
public static bool WorldToScreenBone(D3DMatrix viewMatrix, ShpVector3 pos,
out ShpVector2 screen, out int distance, int windowWidth, int windowHeight)
=> WorldToScreenItem(viewMatrix, pos, out screen, out distance,
windowWidth, windowHeight);