234 lines
7.7 KiB
C#
234 lines
7.7 KiB
C#
using System;
|
|
|
|
public static partial class Helpers
|
|
{
|
|
public static Random RNG = new Random();
|
|
|
|
public static bool GetChance(float percentage)
|
|
{
|
|
return RNG.NextSingle() < percentage / 100;
|
|
}
|
|
|
|
public static long GetRandomNumber(long min, long max)
|
|
{
|
|
return RNG.NextInt64(min, max);
|
|
}
|
|
|
|
public static double GetRandomNumber(double min, double max)
|
|
{
|
|
double diff = max - min;
|
|
|
|
return RNG.NextDouble() * diff + min;
|
|
}
|
|
|
|
public static decimal GetRandomNumber(decimal min, decimal max)
|
|
{
|
|
decimal diff = max - min;
|
|
|
|
return (decimal)RNG.NextDouble() * diff + min;
|
|
}
|
|
|
|
public static int[] GetDeconstructedDecimal(decimal value)
|
|
{
|
|
return decimal.GetBits(value);
|
|
}
|
|
|
|
public static decimal GetConstructedDecimal(int[] bits)
|
|
{
|
|
return new decimal(bits);
|
|
}
|
|
|
|
public static decimal GetCoordinateFromKM(decimal coordinate)
|
|
{
|
|
return coordinate * Constants.KM_M;
|
|
}
|
|
|
|
public static decimal GetCoordinateFromAU(decimal coordinate)
|
|
{
|
|
return coordinate * Constants.AU_M;
|
|
}
|
|
|
|
public static decimal GetCoordinateFromLY(decimal coordinate)
|
|
{
|
|
return coordinate * Constants.LY_M;
|
|
}
|
|
|
|
public static decimal GetCoordinateInKM(decimal coordinate)
|
|
{
|
|
return coordinate / Constants.KM_M;
|
|
}
|
|
|
|
public static decimal GetCoordinateInAU(decimal coordinate)
|
|
{
|
|
return coordinate / Constants.AU_M;
|
|
}
|
|
|
|
public static decimal GetCoordinateInLY(decimal coordinate)
|
|
{
|
|
return coordinate / Constants.LY_M;
|
|
}
|
|
|
|
public static decimal GetRandomCoordinate(decimal min, decimal max, decimal multiplier = 1)
|
|
{
|
|
decimal diff = max - min;
|
|
|
|
return GetRandomNumber(min, max) * multiplier;
|
|
}
|
|
|
|
public static decimal GetRandomCoordinateFromKM(decimal min, decimal max, decimal multiplier = 1)
|
|
{
|
|
return GetRandomCoordinate(min, max, multiplier * Constants.KM_M);
|
|
}
|
|
|
|
public static decimal GetRandomCoordinateFromAU(decimal min, decimal max, decimal multiplier = 1)
|
|
{
|
|
return GetRandomCoordinate(min, max, multiplier * Constants.AU_M);
|
|
}
|
|
|
|
public static decimal GetRandomCoordinateFromLY(decimal min, decimal max, decimal multiplier = 1)
|
|
{
|
|
return GetRandomCoordinate(min, max, multiplier * Constants.LY_M);
|
|
}
|
|
|
|
public static CoordinateVector GetRandomCoordinates(decimal minX, decimal maxX, decimal minY, decimal maxY, decimal multiplier = 1)
|
|
{
|
|
decimal diffX = maxX - minX;
|
|
decimal diffY = maxY - minY;
|
|
|
|
decimal coordinateX = GetRandomCoordinate(minX, maxX, multiplier);
|
|
decimal coordinateY = GetRandomCoordinate(minY, maxY, multiplier);
|
|
|
|
return new CoordinateVector(coordinateX, coordinateY);
|
|
}
|
|
|
|
public static CoordinateVector GetRandomCoordinatesFromKM(decimal minX, decimal maxX, decimal minY, decimal maxY, decimal multiplier = 1)
|
|
{
|
|
return GetRandomCoordinates(minX, maxX, minY, maxY, multiplier * Constants.KM_M);
|
|
}
|
|
|
|
public static CoordinateVector GetRandomCoordinatesFromAU(decimal minX, decimal maxX, decimal minY, decimal maxY, decimal multiplier = 1)
|
|
{
|
|
return GetRandomCoordinates(minX, maxX, minY, maxY, multiplier * Constants.AU_M);
|
|
}
|
|
|
|
public static CoordinateVector GetRandomCoordinatesFromLY(decimal minX, decimal maxX, decimal minY, decimal maxY, decimal multiplier = 1)
|
|
{
|
|
return GetRandomCoordinates(minX, maxX, minY, maxY, multiplier * Constants.LY_M);
|
|
}
|
|
|
|
public static double CalculateDistance(CoordinateVector coordinates1, CoordinateVector coordinates2)
|
|
{
|
|
CoordinateVector delta = CalculateDeltaCoordinates(coordinates1, coordinates2);
|
|
|
|
return Math.Sqrt(
|
|
Math.Pow((double)delta.X, 2) +
|
|
Math.Pow((double)delta.Y, 2)
|
|
);
|
|
}
|
|
|
|
public static double CalculateDistance(Structure structure1, Structure structure2)
|
|
{
|
|
return CalculateDistance(structure1.Position, structure2.Position);
|
|
}
|
|
|
|
public static CoordinateVector AddCoordinates(CoordinateVector coordinates1, CoordinateVector coordinates2)
|
|
{
|
|
return new CoordinateVector(coordinates1.X + coordinates2.X, coordinates1.Y + coordinates2.Y);
|
|
}
|
|
|
|
public static CoordinateVector SubtractCoordinates(CoordinateVector coordinates1, CoordinateVector coordinates2)
|
|
{
|
|
return new CoordinateVector(coordinates1.X - coordinates2.X, coordinates1.Y - coordinates2.Y);
|
|
}
|
|
|
|
public static CoordinateVector MultiplyCoordinates(CoordinateVector coordinates1, CoordinateVector coordinates2)
|
|
{
|
|
return new CoordinateVector(coordinates1.X * coordinates2.X, coordinates1.Y * coordinates2.Y);
|
|
}
|
|
|
|
public static CoordinateVector DivideCoordinates(CoordinateVector coordinates1, CoordinateVector coordinates2)
|
|
{
|
|
return new CoordinateVector(coordinates1.X / coordinates2.X, coordinates1.Y / coordinates2.Y);
|
|
}
|
|
|
|
public static bool CompareCoordinates(CoordinateVector coordinates1, CoordinateVector coordinates2)
|
|
{
|
|
if (coordinates1.X != coordinates2.X)
|
|
{
|
|
return false;
|
|
}
|
|
if (coordinates1.Y != coordinates2.Y)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
public static CoordinateVector CalculateDeltaCoordinates(CoordinateVector coordinates1, CoordinateVector coordinates2)
|
|
{
|
|
decimal diffX = Math.Abs(coordinates1.X - coordinates2.X);
|
|
decimal diffY = Math.Abs(coordinates1.Y - coordinates2.Y);
|
|
|
|
return new CoordinateVector(diffX, diffY);
|
|
}
|
|
|
|
public static CoordinateVector CalculateDeltaCoordinates(Structure structure, CoordinateVector coordinates)
|
|
{
|
|
return CalculateDeltaCoordinates(structure.Position, coordinates);
|
|
}
|
|
|
|
public static CoordinateVector CalculateNewCoordinates(CoordinateVector coordinates1, CoordinateVector coordinates2)
|
|
{
|
|
decimal diffX = coordinates1.X + coordinates2.X;
|
|
decimal diffY = coordinates1.Y + coordinates2.Y;
|
|
|
|
return new CoordinateVector(diffX, diffY);
|
|
}
|
|
|
|
public static CoordinateVector CalculateNewCoordinates(Structure structure, CoordinateVector deltaCoordinates)
|
|
{
|
|
return CalculateNewCoordinates(structure.Position, deltaCoordinates);
|
|
}
|
|
|
|
public static CoordinateVector CalculateMoveCoordinates(CoordinateVector startCoordinates, CoordinateVector endCoordinates, decimal speed)
|
|
{
|
|
decimal distance = (decimal)CalculateDistance(startCoordinates, endCoordinates);
|
|
|
|
if (speed >= distance)
|
|
{
|
|
return SubtractCoordinates(endCoordinates, startCoordinates);
|
|
}
|
|
|
|
CoordinateVector deltaCoordinates = CalculateDeltaCoordinates(startCoordinates, endCoordinates);
|
|
|
|
decimal fractionCrossed = speed / distance;
|
|
|
|
decimal moveCoordinateX = deltaCoordinates.X * fractionCrossed;
|
|
decimal moveCoordinateY = deltaCoordinates.Y * fractionCrossed;
|
|
|
|
return new CoordinateVector(moveCoordinateX, moveCoordinateY);
|
|
}
|
|
|
|
public static CoordinateVector CalculateMovedCoordinates(CoordinateVector startCoordinates, CoordinateVector endCoordinates, decimal speed)
|
|
{
|
|
CoordinateVector moveCoordinates = CalculateMoveCoordinates(startCoordinates, endCoordinates, speed);
|
|
|
|
return AddCoordinates(startCoordinates, moveCoordinates);
|
|
}
|
|
|
|
public static decimal GetLocalCoordinatesX(GameObject target)
|
|
{
|
|
return target.Position.X - target.Parent.Position.X;
|
|
}
|
|
|
|
public static decimal GetLocalCoordinatesY(GameObject target)
|
|
{
|
|
return target.Position.Y - target.Parent.Position.Y;
|
|
}
|
|
|
|
public static CoordinateVector GetLocalCoordinates(GameObject target)
|
|
{
|
|
return SubtractCoordinates(target.Position, target.Parent.Position);
|
|
}
|
|
}
|