mirror of
https://github.com/MirrorNetworking/Mirror.git
synced 2024-11-18 11:00:32 +00:00
fix: Unity 2020 support
This commit is contained in:
parent
1dada3bb4b
commit
53a9717334
@ -178,14 +178,15 @@ internal virtual void Send(ArraySegment<byte> segment, int channelId = Channels.
|
|||||||
internal virtual void Update()
|
internal virtual void Update()
|
||||||
{
|
{
|
||||||
// go through batches for all channels
|
// go through batches for all channels
|
||||||
foreach ((int key, Batcher batcher) in batches)
|
// foreach ((int key, Batcher batcher) in batches) // Unity 2020 doesn't support deconstruct yet
|
||||||
|
foreach (KeyValuePair<int, Batcher> kvp in batches)
|
||||||
{
|
{
|
||||||
// make and send as many batches as necessary from the stored
|
// make and send as many batches as necessary from the stored
|
||||||
// messages.
|
// messages.
|
||||||
using (NetworkWriterPooled writer = NetworkWriterPool.Get())
|
using (NetworkWriterPooled writer = NetworkWriterPool.Get())
|
||||||
{
|
{
|
||||||
// make a batch with our local time (double precision)
|
// make a batch with our local time (double precision)
|
||||||
while (batcher.GetBatch(writer))
|
while (kvp.Value.GetBatch(writer))
|
||||||
{
|
{
|
||||||
// validate packet before handing the batch to the
|
// validate packet before handing the batch to the
|
||||||
// transport. this guarantees that we always stay
|
// transport. this guarantees that we always stay
|
||||||
@ -193,10 +194,10 @@ internal virtual void Update()
|
|||||||
// => just in case transport forgets to check it
|
// => just in case transport forgets to check it
|
||||||
// => just in case mirror miscalulated it etc.
|
// => just in case mirror miscalulated it etc.
|
||||||
ArraySegment<byte> segment = writer.ToArraySegment();
|
ArraySegment<byte> segment = writer.ToArraySegment();
|
||||||
if (ValidatePacketSize(segment, key))
|
if (ValidatePacketSize(segment, kvp.Key))
|
||||||
{
|
{
|
||||||
// send to transport
|
// send to transport
|
||||||
SendToTransport(segment, key);
|
SendToTransport(segment, kvp.Key);
|
||||||
//UnityEngine.Debug.Log($"sending batch of {writer.Position} bytes for channel={kvp.Key} connId={connectionId}");
|
//UnityEngine.Debug.Log($"sending batch of {writer.Position} bytes for channel={kvp.Key} connId={connectionId}");
|
||||||
|
|
||||||
// reset writer for each new batch
|
// reset writer for each new batch
|
||||||
|
@ -48,6 +48,9 @@ public Vector3Long(long x, long y, long z)
|
|||||||
public static Vector3Long operator *(long n, Vector3Long a) =>
|
public static Vector3Long operator *(long n, Vector3Long a) =>
|
||||||
new Vector3Long(a.x * n, a.y * n, a.z * n);
|
new Vector3Long(a.x * n, a.y * n, a.z * n);
|
||||||
|
|
||||||
|
// Unity 2019/2020 don't have HashCode.Combine yet.
|
||||||
|
// this is only to avoid reflection. without defining, it works too.
|
||||||
|
#if UNITY_2021_3_OR_NEWER
|
||||||
// == returns true if approximately equal (with epsilon).
|
// == returns true if approximately equal (with epsilon).
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
public static bool operator ==(Vector3Long a, Vector3Long b) =>
|
public static bool operator ==(Vector3Long a, Vector3Long b) =>
|
||||||
@ -57,6 +60,7 @@ public Vector3Long(long x, long y, long z)
|
|||||||
|
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
public static bool operator !=(Vector3Long a, Vector3Long b) => !(a == b);
|
public static bool operator !=(Vector3Long a, Vector3Long b) => !(a == b);
|
||||||
|
#endif
|
||||||
|
|
||||||
// NO IMPLICIT System.Numerics.Vector3Long conversion because double<->float
|
// NO IMPLICIT System.Numerics.Vector3Long conversion because double<->float
|
||||||
// would silently lose precision in large worlds.
|
// would silently lose precision in large worlds.
|
||||||
@ -94,6 +98,9 @@ public long this[int index]
|
|||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
public override string ToString() => $"({x} {y} {z})";
|
public override string ToString() => $"({x} {y} {z})";
|
||||||
|
|
||||||
|
// Unity 2019/2020 don't have HashCode.Combine yet.
|
||||||
|
// this is only to avoid reflection. without defining, it works too.
|
||||||
|
#if UNITY_2021_3_OR_NEWER
|
||||||
// equality ////////////////////////////////////////////////////////////
|
// equality ////////////////////////////////////////////////////////////
|
||||||
// implement Equals & HashCode explicitly for performance.
|
// implement Equals & HashCode explicitly for performance.
|
||||||
// calling .Equals (instead of "==") checks for exact equality.
|
// calling .Equals (instead of "==") checks for exact equality.
|
||||||
@ -110,5 +117,6 @@ public override bool Equals(object other) =>
|
|||||||
// default generated by rider
|
// default generated by rider
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
public override int GetHashCode() => HashCode.Combine(x, y, z);
|
public override int GetHashCode() => HashCode.Combine(x, y, z);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -55,6 +55,7 @@ public void OperatorMultiply()
|
|||||||
Assert.That(2 * a, Is.EqualTo(new Vector3Long(2, 4, 6)));
|
Assert.That(2 * a, Is.EqualTo(new Vector3Long(2, 4, 6)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if UNITY_2021_3_OR_NEWER
|
||||||
[Test]
|
[Test]
|
||||||
public void OperatorEquals()
|
public void OperatorEquals()
|
||||||
{
|
{
|
||||||
@ -78,6 +79,7 @@ public void OperatorNotEquals()
|
|||||||
// two vectors which are definitely not the same
|
// two vectors which are definitely not the same
|
||||||
Assert.That(a != Vector3Long.one, Is.True);
|
Assert.That(a != Vector3Long.one, Is.True);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
public void OperatorIndexer()
|
public void OperatorIndexer()
|
||||||
@ -114,6 +116,7 @@ public void ToStringTest()
|
|||||||
Assert.That(v.ToString(), Is.EqualTo("(-10 0 42)"));
|
Assert.That(v.ToString(), Is.EqualTo("(-10 0 42)"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if UNITY_2021_3_OR_NEWER
|
||||||
[Test]
|
[Test]
|
||||||
public void EqualsVector3Long()
|
public void EqualsVector3Long()
|
||||||
{
|
{
|
||||||
@ -142,5 +145,6 @@ public void GetHashCodeTest()
|
|||||||
// should be different for different vectors
|
// should be different for different vectors
|
||||||
Assert.That(Vector3Long.zero.GetHashCode(), !Is.EqualTo(Vector3Long.one.GetHashCode()));
|
Assert.That(Vector3Long.zero.GetHashCode(), !Is.EqualTo(Vector3Long.one.GetHashCode()));
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user