Build 0.21.6.0 (1.0 pre-patch)

This commit is contained in:
Regalis11
2023-01-31 18:08:26 +02:00
parent e1c04bc31d
commit cf9ecd35b3
231 changed files with 4479 additions and 2276 deletions
@@ -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;