|
|
@@ -1,4 +1,5 @@
|
|
|
using System;
|
|
|
+using System.Collections.Generic;
|
|
|
using System.IO;
|
|
|
|
|
|
namespace ET
|
|
|
@@ -6,17 +7,17 @@ namespace ET
|
|
|
[FriendOf(typeof(Room))]
|
|
|
public static class RoomSystem
|
|
|
{
|
|
|
- public static void Init(this Room self, Room2C_Start room2CStart)
|
|
|
+ public static void Init(this Room self, List<LockStepUnitInfo> unitInfos, long startTime)
|
|
|
{
|
|
|
- self.StartTime = room2CStart.StartTime;
|
|
|
+ self.StartTime = startTime;
|
|
|
|
|
|
self.FixedTimeCounter = new FixedTimeCounter(self.StartTime, 0, LSConstValue.UpdateInterval);
|
|
|
|
|
|
- LSWorld lsWorld = self.GetComponent<LSWorld>();
|
|
|
+ LSWorld lsWorld = self.LSWorld;
|
|
|
lsWorld.AddComponent<LSUnitComponent>();
|
|
|
- for (int i = 0; i < room2CStart.UnitInfo.Count; ++i)
|
|
|
+ for (int i = 0; i < unitInfos.Count; ++i)
|
|
|
{
|
|
|
- LockStepUnitInfo unitInfo = room2CStart.UnitInfo[i];
|
|
|
+ LockStepUnitInfo unitInfo = unitInfos[i];
|
|
|
LSUnitFactory.Init(lsWorld, unitInfo);
|
|
|
self.PlayerIds.Add(unitInfo.PlayerId);
|
|
|
}
|
|
|
@@ -25,13 +26,17 @@ namespace ET
|
|
|
|
|
|
public static void Update(this Room self, OneFrameInputs oneFrameInputs, int frame)
|
|
|
{
|
|
|
- LSWorld lsWorld = self.GetComponent<LSWorld>();
|
|
|
- // 保存当前帧场景数据
|
|
|
- self.FrameBuffer.SaveLSWorld(frame, lsWorld);
|
|
|
+ LSWorld lsWorld = self.LSWorld;
|
|
|
|
|
|
- if (frame <= self.RealFrame) // 只有Real帧才保存录像数据
|
|
|
+ if (!self.IsReplay)
|
|
|
{
|
|
|
- self.SaveData(frame);
|
|
|
+ // 保存当前帧场景数据
|
|
|
+ self.SaveLSWorld(frame);
|
|
|
+
|
|
|
+ if (frame <= self.AuthorityFrame) // 只有AuthorityFrame帧才保存录像数据
|
|
|
+ {
|
|
|
+ self.Record(frame);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
// 设置输入到每个LSUnit身上
|
|
|
@@ -45,17 +50,33 @@ namespace ET
|
|
|
|
|
|
lsWorld.Update();
|
|
|
}
|
|
|
+
|
|
|
+ public static LSWorld GetLSWorld(this Room self, int frame)
|
|
|
+ {
|
|
|
+ MemoryBuffer memoryBuffer = self.FrameBuffer.Snapshot(frame);
|
|
|
+ return MongoHelper.Deserialize(typeof (LSWorld), memoryBuffer) as LSWorld;
|
|
|
+ }
|
|
|
+
|
|
|
+ public static void SaveLSWorld(this Room self, int frame)
|
|
|
+ {
|
|
|
+ MemoryBuffer memoryBuffer = self.FrameBuffer.Snapshot(frame);
|
|
|
+ memoryBuffer.Seek(0, SeekOrigin.Begin);
|
|
|
+ memoryBuffer.SetLength(0);
|
|
|
+
|
|
|
+ MongoHelper.Serialize(self.LSWorld, memoryBuffer);
|
|
|
+ memoryBuffer.Seek(0, SeekOrigin.Begin);
|
|
|
+ }
|
|
|
|
|
|
- public static void SaveData(this Room self, int frame)
|
|
|
+ public static void Record(this Room self, int frame)
|
|
|
{
|
|
|
- OneFrameInputs oneFrameInputs = self.FrameBuffer[frame];
|
|
|
+ OneFrameInputs oneFrameInputs = self.FrameBuffer.FrameInputs(frame);
|
|
|
OneFrameInputs saveInput = new();
|
|
|
oneFrameInputs.CopyTo(saveInput);
|
|
|
- self.SaveData.MessagesList.Add(saveInput);
|
|
|
+ self.Record.FrameInputs.Add(saveInput);
|
|
|
if (frame % LSConstValue.SaveLSWorldFrameCount == 0)
|
|
|
{
|
|
|
- MemoryBuffer memoryBuffer = self.FrameBuffer.GetMemoryBuffer(frame);
|
|
|
- self.SaveData.LSWorlds.Add(memoryBuffer.ToArray());
|
|
|
+ MemoryBuffer memoryBuffer = self.FrameBuffer.Snapshot(frame);
|
|
|
+ self.Record.Snapshots.Add(memoryBuffer.ToArray());
|
|
|
}
|
|
|
}
|
|
|
}
|