LSReplayUpdaterSystem.cs 1.9 KB

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