public static IEnumerable <(Rumble userMessage, int tick)> GetPortalsFiredByPlayer(SourceDemo demo) { return(demo.FilterForUserMessage <Rumble>().Where(t => t.userMessage.RumbleType == RumbleLookup.PortalgunLeft || t.userMessage.RumbleType == RumbleLookup.PortalgunRight || t.userMessage.RumbleType == RumbleLookup.PortalPlacementFailure)); }
public static IEnumerable <(EntityPortalled userMessage, int tick)> FindTeleports(SourceDemo demo, FilterFlags flags) { var messages = demo.FilterForUserMessage <EntityPortalled>(); if ((flags & FilterFlags.PlayerOnly) != 0) { messages = messages.Where(t => t.userMessage.Portalled.EntIndex == 1); } return(messages); }
public void RemoveCaptions(string fileName) { var before = GetDemo(fileName); MemoryStream outStream = new MemoryStream(); OptRemoveCaptions.RemoveCaptions(before, outStream); SourceDemo after = new SourceDemo(outStream.ToArray()); after.Parse(); // check that the new demo doesn't have captions CollectionAssert.IsEmpty(after.FilterForUserMessage <CloseCaption>()); // check that all the packets are unchanged CollectionAssert.AreEqual( before.Frames.Select(frame => frame.Type), after.Frames.Select(frame => frame.Type)); // check that all the non-caption and non-nop messages are unchanged CollectionAssert.AreEqual( before.FilterForMessages().Where(tuple => tuple.messageType != MessageType.NetNop) .Where(tuple => (tuple.message as SvcUserMessage)?.MessageType != UserMessageType.CloseCaption) .Select(tuple => tuple.messageType), after.FilterForMessages().Where(tuple => tuple.messageType != MessageType.NetNop) .Select(tuple => tuple.messageType) ); }