| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 | // Unity's Bounds struct is represented as (center, extents).// HistoryBounds make heavy use of .Encapsulate(), which has to convert// Unity's (center, extents) to (min, max) every time, and then convert back.//// It's faster to use a (min, max) representation directly instead.using System;using System.Runtime.CompilerServices;using UnityEngine;namespace Mirror{    public struct MinMaxBounds: IEquatable<Bounds>    {        public Vector3 min;        public Vector3 max;        // encapsulate a single point        [MethodImpl(MethodImplOptions.AggressiveInlining)]        public void Encapsulate(Vector3 point)        {            min = Vector3.Min(this.min, point);            max = Vector3.Max(this.max, point);        }        // encapsulate another bounds        public void Encapsulate(MinMaxBounds bounds)        {            Encapsulate(bounds.min);            Encapsulate(bounds.max);        }        // convenience comparison with Unity's bounds, for unit tests etc.        public static bool operator ==(MinMaxBounds lhs, Bounds rhs) =>            lhs.min == rhs.min &&            lhs.max == rhs.max;        public static bool operator !=(MinMaxBounds lhs, Bounds rhs) =>            !(lhs == rhs);        public override bool Equals(object obj) =>            obj is MinMaxBounds other &&            min == other.min &&            max == other.max;        public bool Equals(MinMaxBounds other) =>            min.Equals(other.min) && max.Equals(other.max);        public bool Equals(Bounds other) =>            min.Equals(other.min) && max.Equals(other.max);#if UNITY_2021_3_OR_NEWER        // Unity 2019/2020 don't have HashCode.Combine yet.        // this is only to avoid reflection. without defining, it works too.        // default generated by rider        public override int GetHashCode() => HashCode.Combine(min, max);#else        public override int GetHashCode()        {            // return HashCode.Combine(min, max); without using .Combine for older Unity versions            unchecked            {                int hash = 17;                hash = hash * 23 + min.GetHashCode();                hash = hash * 23 + max.GetHashCode();                return hash;            }        }#endif        // tostring        public override string ToString() => $"({min}, {max})";    }}
 |