LSReplayUpdaterSystem.cs 1.7 KB

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