idle-starship/scripts/Helpers.cs
2025-09-12 08:34:06 -04:00

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);
}
}