Build 0.21.6.0 (1.0 pre-patch)
This commit is contained in:
@@ -160,7 +160,8 @@ namespace Barotrauma
|
||||
{ typeof(Identifier), new ReadWriteBehavior<Identifier>(ReadIdentifier, WriteIdentifier) },
|
||||
{ typeof(AccountId), new ReadWriteBehavior<AccountId>(ReadAccountId, WriteAccountId) },
|
||||
{ typeof(Color), new ReadWriteBehavior<Color>(ReadColor, WriteColor) },
|
||||
{ typeof(Vector2), new ReadWriteBehavior<Vector2>(ReadVector2, WriteVector2) }
|
||||
{ typeof(Vector2), new ReadWriteBehavior<Vector2>(ReadVector2, WriteVector2) },
|
||||
{ typeof(SerializableDateTime), new ReadWriteBehavior<SerializableDateTime>(ReadSerializableDateTime, WriteSerializableDateTime) }
|
||||
};
|
||||
|
||||
private static readonly ImmutableDictionary<Predicate<Type>, Func<Type, IReadWriteBehavior>> BehaviorFactories = new Dictionary<Predicate<Type>, Func<Type, IReadWriteBehavior>>
|
||||
@@ -512,6 +513,41 @@ namespace Barotrauma
|
||||
WriteSingle(y, attribute, msg, bitField);
|
||||
}
|
||||
|
||||
private static readonly Range<Int64> ValidTickRange
|
||||
= new Range<Int64>(
|
||||
start: DateTime.MinValue.Ticks,
|
||||
end: DateTime.MaxValue.Ticks);
|
||||
private static readonly Range<Int16> ValidTimeZoneMinuteRange
|
||||
= new Range<Int16>(
|
||||
start: (Int16)TimeSpan.FromHours(-12).TotalMinutes,
|
||||
end: (Int16)TimeSpan.FromHours(14).TotalMinutes);
|
||||
|
||||
private static SerializableDateTime ReadSerializableDateTime(
|
||||
IReadMessage inc, NetworkSerialize attribute, ReadOnlyBitField bitField)
|
||||
{
|
||||
var ticks = inc.ReadInt64();
|
||||
var timezone = inc.ReadInt16();
|
||||
|
||||
if (!ValidTickRange.Contains(ticks))
|
||||
{
|
||||
throw new Exception($"Incoming SerializableDateTime ticks out of range (ticks: {ticks}, timezone: {timezone})");
|
||||
}
|
||||
if (!ValidTimeZoneMinuteRange.Contains(timezone))
|
||||
{
|
||||
throw new Exception($"Incoming SerializableDateTime timezone out of range (ticks: {ticks}, timezone: {timezone})");
|
||||
}
|
||||
|
||||
return new SerializableDateTime(new DateTime(ticks),
|
||||
new SerializableTimeZone(TimeSpan.FromMinutes(timezone)));
|
||||
}
|
||||
|
||||
private static void WriteSerializableDateTime(
|
||||
SerializableDateTime dateTime, NetworkSerialize attribute, IWriteMessage msg, WriteOnlyBitField bitField)
|
||||
{
|
||||
msg.WriteInt64(dateTime.Ticks);
|
||||
msg.WriteInt16((Int16)(dateTime.TimeZone.Value.Ticks / TimeSpan.TicksPerMinute));
|
||||
}
|
||||
|
||||
private static bool IsRanged(float minValue, float maxValue) => minValue > float.MinValue || maxValue < float.MaxValue;
|
||||
private static bool IsRanged(int minValue, int maxValue) => minValue > int.MinValue || maxValue < int.MaxValue;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user