alap
This commit is contained in:
73
Assets/Mirror/Core/LagCompensation/MinMaxBounds.cs
Normal file
73
Assets/Mirror/Core/LagCompensation/MinMaxBounds.cs
Normal file
@ -0,0 +1,73 @@
|
||||
// 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})";
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user