LSReplayUpdaterSystem.cs 2.0 KB

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