using UnityEngine; using CustomExtensions; using System; public struct InputState{ public int Tick; public Vector2 Input; public override string ToString() { return $"tick: {Tick}, input: {Input}"; } public override bool Equals(object obj) { InputState _obj = (InputState) obj; if(_obj.Input == Input){ return true; } return false; } public bool CloseEnough(InputState other, float threshold) => Mathf.Abs((other.Input-Input).magnitude) < threshold; } public struct PlayerState{ public int Tick; public Vector3 Position; public Quaternion Rotation; public override string ToString() { return $"tick: {Tick},pos: {Position}, rot: {Rotation}"; } public override bool Equals(object obj) { PlayerState _obj = (PlayerState) obj; if(_obj.Position == Position && _obj.Rotation == Rotation){ return true; } return false; } public bool CloseEnough(PlayerState other, float threshold) => Mathf.Abs((other.Position-Position).magnitude) < threshold && Rotation.Approximately(other.Rotation, threshold); public float Difference(PlayerState other){ return (Mathf.Abs((other.Position-Position).magnitude) + Rotation.Difference(other.Rotation))/2f; } } public class Helpers{ public static int unixTimestamp = (int)System.DateTime.UtcNow.Subtract(new System.DateTime(1970, 1, 1)).TotalSeconds; } namespace CustomExtensions{ public static class QuaternionExtensions{ public static bool Approximately(this Quaternion quatA, Quaternion value, float acceptableRange) { return 1 - Mathf.Abs(Quaternion.Dot(quatA, value)) < acceptableRange; } public static float Difference(this Quaternion quatA, Quaternion value){ return 1 - Mathf.Abs(Quaternion.Dot(quatA, value)); } public static long ToUnix(this DateTime time){ return (long)time.Subtract(new DateTime(1970, 1, 1)).TotalMilliseconds; } } }