public override void Deserialize(NetworkBinaryReader reader, SerializationModeFlags mode, int framesAgo) { base.Deserialize(reader, mode, framesAgo); if ((mode & SerializationModeFlags.VaryingDataFromServer) != 0) { var maybeHoverAroundPos = reader.ReadHalfVector2(); if (float.IsNaN(maybeHoverAroundPos.X)) _hoverAroundPos = null; else _hoverAroundPos = maybeHoverAroundPos; } }
public override void Deserialize(NetworkBinaryReader reader, SerializationModeFlags mode, int framesAgo) { // Note: Gob.{Pos,Rotation,Move,RotationSpeed} are computed from Host // and don't need to be serialized except at birth. var baseSerializationMode = mode.HasFlag(SerializationModeFlags.ConstantDataFromServer) ? mode : mode & ~SerializationModeFlags.VaryingDataFromServer; base.Deserialize(reader, baseSerializationMode, framesAgo); if (mode.HasFlag(SerializationModeFlags.ConstantDataFromServer)) { int hostID = reader.ReadInt16(); _hostProxy = new LazyProxy<int, Gob>(FindGob); _hostProxy.SetData(hostID); HostBoneIndex = reader.ReadByte(); } if (mode.HasFlag(SerializationModeFlags.VaryingDataFromServer)) { int wallPunchCount = reader.ReadByte(); var punchedPoses = new List<Vector2>(wallPunchCount); for (int i = 0; i < wallPunchCount; i++) punchedPoses.Add(reader.ReadHalfVector2()); foreach (var pos in punchedPoses) GobHelper.CreateGobs(_wallPunchEffects, Arena, pos); PlayWallHitSound(punchedPoses); } }