LSReplayUpdaterSystem.cs 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. using System;
  2. namespace ET.Client
  3. {
  4. [FriendOf(typeof(LSReplayUpdater))]
  5. public static partial class LSReplayUpdaterSystem
  6. {
  7. [EntitySystem]
  8. private static void Update(this LSReplayUpdater self)
  9. {
  10. Room room = self.GetParent<Room>();
  11. Fiber fiber = self.Fiber();
  12. long timeNow = fiber.TimeInfo.ServerNow();
  13. int i = 0;
  14. while (true)
  15. {
  16. if (room.AuthorityFrame + 1 >= room.Replay.FrameInputs.Count)
  17. {
  18. break;
  19. }
  20. if (timeNow < room.FixedTimeCounter.FrameTime(room.AuthorityFrame + 1))
  21. {
  22. break;
  23. }
  24. ++room.AuthorityFrame;
  25. OneFrameInputs oneFrameInputs = room.Replay.FrameInputs[room.AuthorityFrame];
  26. room.Update(oneFrameInputs);
  27. room.SpeedMultiply = ++i;
  28. long timeNow2 = fiber.TimeInfo.ServerNow();
  29. if (timeNow2 - timeNow > 5)
  30. {
  31. break;
  32. }
  33. }
  34. }
  35. public static void ChangeReplaySpeed(this LSReplayUpdater self)
  36. {
  37. Room room = self.Room();
  38. LSReplayUpdater lsReplayUpdater = room.GetComponent<LSReplayUpdater>();
  39. if (lsReplayUpdater.ReplaySpeed == 8)
  40. {
  41. lsReplayUpdater.ReplaySpeed = 1;
  42. }
  43. else
  44. {
  45. lsReplayUpdater.ReplaySpeed *= 2;
  46. }
  47. int updateInterval = LSConstValue.UpdateInterval / lsReplayUpdater.ReplaySpeed;
  48. room.FixedTimeCounter.ChangeInterval(updateInterval, room.AuthorityFrame);
  49. }
  50. }
  51. }