public static void WriteNormalizedVector(this PacketBuilder builder, Vector3 vector) { float x = vector.X; float y = vector.Y; float z = vector.Z; builder.Write(x < 0.0); if (y == 0.0) { builder.Write(true); } else { builder.Write(false); builder.WriteCompressed(y); } if (z == 0.0) { builder.Write(true); } else { builder.Write(false); builder.WriteCompressed(z); } }
public static void WriteCompressedVector3(this PacketBuilder builder, Vector3 vector) { var magnitude = MathF.Sqrt(vector.X * vector.X + vector.Y * vector.Y + vector.Z * vector.Z); builder.Write((float)magnitude); if (magnitude > 0.00001f) { builder.WriteCompressed((float)(vector.X / magnitude)); builder.WriteCompressed((float)(vector.Y / magnitude)); builder.WriteCompressed((float)(vector.Z / magnitude)); } }
private static void WriteLuaString(PacketBuilder builder, LuaValue value) { if (value.StringValue != null) { if (value.StringValue.Length < ushort.MaxValue) { builder.WriteCapped((byte)LuaType.String, 4); builder.WriteCompressed((ushort)value.StringValue.Length); builder.WriteStringWithoutLength(value.StringValue); } else { builder.WriteCapped((byte)LuaType.LongString, 4); builder.WriteCompressed((uint)value.StringValue.Length); builder.AlignToByteBoundary(); builder.WriteStringWithoutLength(value.StringValue); } } }
public static void Write(this PacketBuilder builder, IEnumerable <LuaValue> luaValues, Dictionary <LuaValue, ulong>?knownTables = null) { knownTables ??= new Dictionary <LuaValue, ulong>(); knownTables[new LuaValue()] = 0; builder.WriteCompressed((uint)luaValues.Count()); foreach (var value in luaValues) { builder.Write(value, knownTables); } }
private static void WriteLuaTable(PacketBuilder builder, LuaValue value, Dictionary <LuaValue, ulong> knownTables) { if (value.TableValue != null) { if (knownTables.ContainsKey(value)) { builder.WriteCapped((byte)LuaType.TableRef, 4); builder.WriteCompressed(knownTables[value]); } else { knownTables.Add(value, (ulong)knownTables.Count()); builder.WriteCapped((byte)LuaType.Table, 4); builder.WriteCompressed((uint)value.TableValue.Count() * 2); foreach (var kvPair in value.TableValue) { Write(builder, kvPair.Key, knownTables); Write(builder, kvPair.Value, knownTables); } } } }
private static void WriteLuaNumber(PacketBuilder builder, LuaValue value) { builder.WriteCapped((byte)value.LuaType, 4); if (value.IntegerValue.HasValue) { builder.Write(false); builder.WriteCompressed(value.IntegerValue.Value); } else if (value.FloatValue.HasValue) { builder.Write(true); builder.Write(false); builder.Write(value.FloatValue.Value); } else if (value.DoubleValue.HasValue) { builder.Write(true); builder.Write(true); builder.Write(value.DoubleValue.Value); } }
public static void WriteCompressed(this PacketBuilder builder, ulong integer) => builder.WriteCompressed(BitConverter.GetBytes((uint)integer), true);
public static void WriteCompressed(this PacketBuilder builder, int integer) => builder.WriteCompressed(BitConverter.GetBytes(integer), false);
public static void WriteCompressed(this PacketBuilder builder, byte @byte) => builder.WriteCompressed(new byte[] { @byte }, true);