瀏覽代碼

增加FrameBuffer

tanghai 2 年之前
父節點
當前提交
f52ea24acc
共有 35 個文件被更改,包括 233 次插入221 次删除
  1. 9 0
      Unity/Assets/Config/Proto/LockStepOuter_C_11001.proto
  2. 1 1
      Unity/Assets/Scripts/Codes/Hotfix/Client/LockStep/LSSceneChangeHelper.cs
  3. 15 9
      Unity/Assets/Scripts/Codes/Hotfix/Server/Demo/Session/NetInnerComponentOnReadEvent.cs
  4. 1 1
      Unity/Assets/Scripts/Codes/Hotfix/Server/Demo/Session/NetServerComponentOnReadEvent.cs
  5. 2 2
      Unity/Assets/Scripts/Codes/Hotfix/Server/LockStep/Map/C2Room_ChangeSceneFinishHandler.cs
  6. 11 2
      Unity/Assets/Scripts/Codes/Hotfix/Server/LockStep/Map/FrameMessageHelper.cs
  7. 0 8
      Unity/Assets/Scripts/Codes/Hotfix/Server/LockStep/Map/Room.meta
  8. 11 21
      Unity/Assets/Scripts/Codes/Hotfix/Server/Module/Actor/ActorHandleHelper.cs
  9. 34 2
      Unity/Assets/Scripts/Codes/Hotfix/Share/LockStep/BattleSceneSystem.cs
  10. 6 6
      Unity/Assets/Scripts/Codes/HotfixView/Client/LockStep/LockStepOperaComponentSystem.cs
  11. 0 7
      Unity/Assets/Scripts/Codes/Model/Client/LockStep/Command.cs
  12. 0 11
      Unity/Assets/Scripts/Codes/Model/Client/LockStep/Command.cs.meta
  13. 0 7
      Unity/Assets/Scripts/Codes/Model/Client/LockStep/RoomClientComponent.cs
  14. 0 11
      Unity/Assets/Scripts/Codes/Model/Client/LockStep/RoomClientComponent.cs.meta
  15. 22 0
      Unity/Assets/Scripts/Codes/Model/Generate/Client/Message/LockStepOuter_C_11001.cs
  16. 0 11
      Unity/Assets/Scripts/Codes/Model/Generate/Client/Message/LockStepOuter_C_11001.cs.meta
  17. 0 11
      Unity/Assets/Scripts/Codes/Model/Generate/Client/Message/OuterMessage_C_10001.cs.meta
  18. 0 11
      Unity/Assets/Scripts/Codes/Model/Generate/ClientServer/Message/InnerMessage_S_20001.cs.meta
  19. 0 11
      Unity/Assets/Scripts/Codes/Model/Generate/ClientServer/Message/LockStepInner_S_21001.cs.meta
  20. 22 0
      Unity/Assets/Scripts/Codes/Model/Generate/ClientServer/Message/LockStepOuter_C_11001.cs
  21. 0 11
      Unity/Assets/Scripts/Codes/Model/Generate/ClientServer/Message/LockStepOuter_C_11001.cs.meta
  22. 0 11
      Unity/Assets/Scripts/Codes/Model/Generate/ClientServer/Message/OuterMessage_C_10001.cs.meta
  23. 0 11
      Unity/Assets/Scripts/Codes/Model/Generate/Server/Message/InnerMessage_S_20001.cs.meta
  24. 0 11
      Unity/Assets/Scripts/Codes/Model/Generate/Server/Message/LockStepInner_S_21001.cs.meta
  25. 22 0
      Unity/Assets/Scripts/Codes/Model/Generate/Server/Message/LockStepOuter_C_11001.cs
  26. 0 11
      Unity/Assets/Scripts/Codes/Model/Generate/Server/Message/LockStepOuter_C_11001.cs.meta
  27. 0 11
      Unity/Assets/Scripts/Codes/Model/Generate/Server/Message/OuterMessage_C_10001.cs.meta
  28. 11 4
      Unity/Assets/Scripts/Codes/Model/Share/LockStep/BattleScene.cs
  29. 0 0
      Unity/Assets/Scripts/Codes/Model/Share/LockStep/ConstValue.cs
  30. 0 0
      Unity/Assets/Scripts/Codes/Model/Share/LockStep/ConstValue.cs.meta
  31. 61 0
      Unity/Assets/Scripts/Codes/Model/Share/LockStep/FrameBuffer.cs
  32. 3 0
      Unity/Assets/Scripts/Codes/Model/Share/LockStep/FrameBuffer.cs.meta
  33. 0 8
      Unity/Assets/Scripts/Codes/Model/Share/LockStep/Message/IFrameMessage.cs
  34. 0 11
      Unity/Assets/Scripts/Codes/Model/Share/LockStep/Message/IFrameMessage.cs.meta
  35. 2 0
      Unity/Assets/Scripts/Codes/Model/Share/TimerInvokeType.cs

+ 9 - 0
Unity/Assets/Config/Proto/LockStepOuter_C_11001.proto

@@ -38,6 +38,15 @@ message LockStepUnitInfo
 // 房间通知客户端进入战斗
 message Room2C_EnterMap // IActorMessage
 {
+	int64 StartTime = 1;
 	repeated LockStepUnitInfo UnitInfo = 2;
 }
 
+message FrameMessage // IActorMessage
+{
+	int64 PlayerId = 1;
+	int32 Frame = 2;
+	TrueSync.TSVector2 V = 3;
+	int32 Button = 4;
+}
+

+ 1 - 1
Unity/Assets/Scripts/Codes/Hotfix/Client/LockStep/LSSceneChangeHelper.cs

@@ -20,7 +20,7 @@ namespace ET.Client
             WaitType.Wait_Room2C_EnterMap waitRoom2CEnterMap = await clientScene.GetComponent<ObjectWait>().Wait<WaitType.Wait_Room2C_EnterMap>();
 
             battleScene.LSScene = new LSScene(SceneType.LockStepClient);
-            battleScene.InitUnit(waitRoom2CEnterMap.Message.UnitInfo);
+            battleScene.Init(waitRoom2CEnterMap.Message);
 
             // 这个事件中可以订阅取消loading
             EventSystem.Instance.Publish(clientScene, new EventType.LockStepSceneInitFinish());

+ 15 - 9
Unity/Assets/Scripts/Codes/Hotfix/Server/Demo/Session/NetInnerComponentOnReadEvent.cs

@@ -11,28 +11,34 @@ namespace ET.Server
             {
                 long actorId = args.ActorId;
                 object message = args.Message;
+
+                if (message is IActorResponse iActorResponse)
+                {
+                    ActorHandleHelper.HandleIActorResponse(iActorResponse);
+                    return;
+                }
+                
+                InstanceIdStruct instanceIdStruct = new(actorId);
+                int fromProcess = instanceIdStruct.Process;
+                instanceIdStruct.Process = Options.Instance.Process;
+                long realActorId = instanceIdStruct.ToLong();
                 
                 // 收到actor消息,放入actor队列
                 switch (message)
                 {
-                    case IFrameMessage iFrameMessage:
-                    {
-                        FrameMessageHelper.HandleIFrameMessage(iFrameMessage);
-                        break;
-                    }
-                    case IActorResponse iActorResponse:
+                    case FrameMessage frameMessage:
                     {
-                        ActorHandleHelper.HandleIActorResponse(iActorResponse);
+                        FrameMessageHelper.HandleFrameMessage(fromProcess, realActorId, frameMessage);
                         break;
                     }
                     case IActorRequest iActorRequest:
                     {
-                        await ActorHandleHelper.HandleIActorRequest(actorId, iActorRequest);
+                        await ActorHandleHelper.HandleIActorRequest(fromProcess, realActorId, iActorRequest);
                         break;
                     }
                     case IActorMessage iActorMessage:
                     {
-                        await ActorHandleHelper.HandleIActorMessage(actorId, iActorMessage);
+                        await ActorHandleHelper.HandleIActorMessage(fromProcess, realActorId, iActorMessage);
                         break;
                     }
                 }

+ 1 - 1
Unity/Assets/Scripts/Codes/Hotfix/Server/Demo/Session/NetServerComponentOnReadEvent.cs

@@ -17,7 +17,7 @@
             // 根据消息接口判断是不是Actor消息,不同的接口做不同的处理,比如需要转发给Chat Scene,可以做一个IChatMessage接口
             switch (message)
             {
-                case IFrameMessage frameMessage:
+                case FrameMessage frameMessage:
                 {
                     Player player = session.GetComponent<SessionPlayerComponent>().Player;
                     long roomInstanceId = player.GetComponent<PlayerRoomComponent>().RoomInstanceId;

+ 2 - 2
Unity/Assets/Scripts/Codes/Hotfix/Server/LockStep/Map/C2Room_ChangeSceneFinishHandler.cs

@@ -23,7 +23,7 @@ namespace ET.Server
             {
                 await TimerComponent.Instance.WaitAsync(1000);
 
-                Room2C_EnterMap room2CEnterMap = new Room2C_EnterMap() {UnitInfo = new List<LockStepUnitInfo>()};
+                Room2C_EnterMap room2CEnterMap = new Room2C_EnterMap() {StartTime = TimeHelper.ServerFrameTime(), UnitInfo = new List<LockStepUnitInfo>()};
                 foreach (var kv in roomServerComponent.Children)
                 {
                     room2CEnterMap.UnitInfo.Add(new LockStepUnitInfo()
@@ -34,7 +34,7 @@ namespace ET.Server
                     });
                 }
                 
-                roomScene.GetComponent<BattleScene>().InitUnit(room2CEnterMap.UnitInfo);
+                roomScene.GetComponent<BattleScene>().Init(room2CEnterMap);
 
                 RoomMessageHelper.BroadCast(roomScene, room2CEnterMap);
             }

+ 11 - 2
Unity/Assets/Scripts/Codes/Hotfix/Server/LockStep/Map/FrameMessageHelper.cs

@@ -2,9 +2,18 @@ namespace ET.Server
 {
     public static class FrameMessageHelper
     {
-        public static void HandleIFrameMessage(IFrameMessage iFrameMessage)
+        public static void HandleFrameMessage(int fromProcess, long actorId, FrameMessage frameMessage)
         {
-             
+            Entity entity = Root.Instance.Get(actorId);
+            if (entity == null)
+            {
+                Log.Error($"actor not found: {actorId} {frameMessage}");
+                return;
+            }
+
+            Scene scene = entity as Scene;
+            BattleScene battleScene = scene.GetComponent<BattleScene>();
+            battleScene.FrameBuffer.AddFrameMessage(frameMessage);
         }
     }
 }

+ 0 - 8
Unity/Assets/Scripts/Codes/Hotfix/Server/LockStep/Map/Room.meta

@@ -1,8 +0,0 @@
-fileFormatVersion: 2
-guid: d9bfa3831ad064782a79f4aaf93bcfa5
-folderAsset: yes
-DefaultImporter:
-  externalObjects: {}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 

+ 11 - 21
Unity/Assets/Scripts/Codes/Hotfix/Server/Module/Actor/ActorHandleHelper.cs

@@ -30,14 +30,9 @@ namespace ET.Server
         /// 分发actor消息
         /// </summary>
         [EnableAccessEntiyChild]
-        public static async ETTask HandleIActorRequest(long actorId, IActorRequest iActorRequest)
+        public static async ETTask HandleIActorRequest(int fromProcess, long actorId, IActorRequest iActorRequest)
         {
-            InstanceIdStruct instanceIdStruct = new(actorId);
-            int fromProcess = instanceIdStruct.Process;
-            instanceIdStruct.Process = Options.Instance.Process;
-            long realActorId = instanceIdStruct.ToLong();
-
-            Entity entity = Root.Instance.Get(realActorId);
+            Entity entity = Root.Instance.Get(actorId);
             if (entity == null)
             {
                 IActorResponse response = ActorHelper.CreateResponse(iActorRequest, ErrorCore.ERR_NotFoundActor);
@@ -50,7 +45,7 @@ namespace ET.Server
             MailBoxComponent mailBoxComponent = entity.GetComponent<MailBoxComponent>();
             if (mailBoxComponent == null)
             {
-                Log.Warning($"actor not found mailbox: {entity.GetType().Name} {realActorId} {iActorRequest}");
+                Log.Warning($"actor not found mailbox: {entity.GetType().Name} {actorId} {iActorRequest}");
                 IActorResponse response = ActorHelper.CreateResponse(iActorRequest, ErrorCore.ERR_NotFoundActor);
                 Reply(fromProcess, response);
                 return;
@@ -60,9 +55,9 @@ namespace ET.Server
             {
                 case MailboxType.MessageDispatcher:
                 {
-                    using (await CoroutineLockComponent.Instance.Wait(CoroutineLockType.Mailbox, realActorId))
+                    using (await CoroutineLockComponent.Instance.Wait(CoroutineLockType.Mailbox, actorId))
                     {
-                        if (entity.InstanceId != realActorId)
+                        if (entity.InstanceId != actorId)
                         {
                             IActorResponse response = ActorHelper.CreateResponse(iActorRequest, ErrorCore.ERR_NotFoundActor);
                             Reply(fromProcess, response);
@@ -86,24 +81,19 @@ namespace ET.Server
         /// 分发actor消息
         /// </summary>
         [EnableAccessEntiyChild]
-        public static async ETTask HandleIActorMessage(long actorId, IActorMessage iActorMessage)
+        public static async ETTask HandleIActorMessage(int fromProcess, long actorId, IActorMessage iActorMessage)
         {
-            InstanceIdStruct instanceIdStruct = new(actorId);
-            int fromProcess = instanceIdStruct.Process;
-            instanceIdStruct.Process = Options.Instance.Process;
-            long realActorId = instanceIdStruct.ToLong();
-            
-            Entity entity = Root.Instance.Get(realActorId);
+            Entity entity = Root.Instance.Get(actorId);
             if (entity == null)
             {
-                Log.Error($"not found actor: {realActorId} {iActorMessage}");
+                Log.Error($"not found actor: {actorId} {iActorMessage}");
                 return;
             }
             
             MailBoxComponent mailBoxComponent = entity.GetComponent<MailBoxComponent>();
             if (mailBoxComponent == null)
             {
-                Log.Error($"actor not found mailbox: {entity.GetType().Name} {realActorId} {iActorMessage}");
+                Log.Error($"actor not found mailbox: {entity.GetType().Name} {actorId} {iActorMessage}");
                 return;
             }
 
@@ -111,9 +101,9 @@ namespace ET.Server
             {
                 case MailboxType.MessageDispatcher:
                 {
-                    using (await CoroutineLockComponent.Instance.Wait(CoroutineLockType.Mailbox, realActorId))
+                    using (await CoroutineLockComponent.Instance.Wait(CoroutineLockType.Mailbox, actorId))
                     {
-                        if (entity.InstanceId != realActorId)
+                        if (entity.InstanceId != actorId)
                         {
                             break;
                         }

+ 34 - 2
Unity/Assets/Scripts/Codes/Hotfix/Share/LockStep/BattleSceneSystem.cs

@@ -3,6 +3,7 @@ using System.Collections.Generic;
 
 namespace ET
 {
+    [FriendOf(typeof(BattleScene))]
     public static class BattleSceneSystem
     {
         [ObjectSystem]
@@ -10,15 +11,46 @@ namespace ET
         {
             protected override void Awake(BattleScene self)
             {
+                
             }
         }
+        
+        [ObjectSystem]
+        public class UpdateSystem : UpdateSystem<BattleScene>
+        {
+            protected override void Update(BattleScene self)
+            {
+                long timeNow = TimeHelper.ServerFrameTime();
+                if (timeNow > self.StartTime + self.Frame * 50)
+                {
+                    OneFrameMessage oneFrameMessage = self.FrameBuffer.GetFrameMessage(self.Frame);
+                    self.Update(oneFrameMessage);
+                    ++self.Frame;
+                }
+            }
+        }
+        
 
-        public static void InitUnit(this BattleScene self, List<LockStepUnitInfo> unitInfos)
+        public static void Init(this BattleScene self, Room2C_EnterMap room2CEnterMap)
         {
-            foreach (LockStepUnitInfo lockStepUnitInfo in unitInfos)
+            self.StartTime = room2CEnterMap.StartTime;
+            
+            foreach (LockStepUnitInfo lockStepUnitInfo in room2CEnterMap.UnitInfo)
             {
                 UnitFFactory.Init(self.LSScene, lockStepUnitInfo);
             }
         }
+
+        public static void Update(this BattleScene self, OneFrameMessage oneFrameMessage)
+        {
+            // 保存当前帧场景数据
+            self.FrameBuffer.SaveDate(self.Frame, MongoHelper.Serialize(self.LSScene));
+            
+            
+            // 处理Message
+            
+            
+            self.LSScene.Updater.Update();
+        }
     }
 }

+ 6 - 6
Unity/Assets/Scripts/Codes/HotfixView/Client/LockStep/LockStepOperaComponentSystem.cs

@@ -1,4 +1,4 @@
-using System;
+using TrueSync;
 using UnityEngine;
 
 namespace ET.Client
@@ -10,25 +10,25 @@ namespace ET.Client
         {
             protected override void Update(LockStepOperaComponent self)
             {
-                int degree = 0;
+                TSVector2 v = new();
                 if (Input.GetKeyDown(KeyCode.W))
                 {
-                    degree = 90;
+                    v.y += 1;
                 }
                 
                 if (Input.GetKeyDown(KeyCode.A))
                 {
-                    degree = 180;
+                    v.x -= 1;
                 }
                 
                 if (Input.GetKeyDown(KeyCode.S))
                 {
-                    degree = 270;
+                    v.y -= 1;
                 }
                 
                 if (Input.GetKeyDown(KeyCode.D))
                 {
-                    degree = 360;
+                    v.x += 1;
                 }
             }
         }

+ 0 - 7
Unity/Assets/Scripts/Codes/Model/Client/LockStep/Command.cs

@@ -1,7 +0,0 @@
-namespace ET
-{
-    public struct Command
-    {
-
-    }
-}

+ 0 - 11
Unity/Assets/Scripts/Codes/Model/Client/LockStep/Command.cs.meta

@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: 0e5817afcdfbc4be298665b889d7c613
-MonoImporter:
-  externalObjects: {}
-  serializedVersion: 2
-  defaultReferences: []
-  executionOrder: 0
-  icon: {instanceID: 0}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 

+ 0 - 7
Unity/Assets/Scripts/Codes/Model/Client/LockStep/RoomClientComponent.cs

@@ -1,7 +0,0 @@
-namespace ET
-{
-    [ComponentOf(typeof(Scene))]
-    public class RoomClientComponent: Entity
-    {
-    }
-}

+ 0 - 11
Unity/Assets/Scripts/Codes/Model/Client/LockStep/RoomClientComponent.cs.meta

@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: 9288867c277cf46d2b8c7f9cb4dadf78
-MonoImporter:
-  externalObjects: {}
-  serializedVersion: 2
-  defaultReferences: []
-  executionOrder: 0
-  icon: {instanceID: 0}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 

+ 22 - 0
Unity/Assets/Scripts/Codes/Model/Generate/Client/Message/LockStepOuter_C_11001.cs

@@ -72,11 +72,32 @@ namespace ET
 	[ProtoContract]
 	public partial class Room2C_EnterMap: ProtoObject, IActorMessage
 	{
+		[ProtoMember(1)]
+		public long StartTime { get; set; }
+
 		[ProtoMember(2)]
 		public List<LockStepUnitInfo> UnitInfo { get; set; }
 
 	}
 
+	[Message(LockStepOuter.FrameMessage)]
+	[ProtoContract]
+	public partial class FrameMessage: ProtoObject, IActorMessage
+	{
+		[ProtoMember(1)]
+		public long PlayerId { get; set; }
+
+		[ProtoMember(2)]
+		public int Frame { get; set; }
+
+		[ProtoMember(3)]
+		public TrueSync.TSVector2 V { get; set; }
+
+		[ProtoMember(4)]
+		public int Button { get; set; }
+
+	}
+
 	public static class LockStepOuter
 	{
 		 public const ushort C2G_Match = 11002;
@@ -85,5 +106,6 @@ namespace ET
 		 public const ushort C2Room_ChangeSceneFinish = 11005;
 		 public const ushort LockStepUnitInfo = 11006;
 		 public const ushort Room2C_EnterMap = 11007;
+		 public const ushort FrameMessage = 11008;
 	}
 }

+ 0 - 11
Unity/Assets/Scripts/Codes/Model/Generate/Client/Message/LockStepOuter_C_11001.cs.meta

@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: f13c8ac43732d4554b0f3ecbf6fb71d5
-MonoImporter:
-  externalObjects: {}
-  serializedVersion: 2
-  defaultReferences: []
-  executionOrder: 0
-  icon: {instanceID: 0}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 

+ 0 - 11
Unity/Assets/Scripts/Codes/Model/Generate/Client/Message/OuterMessage_C_10001.cs.meta

@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: 64806f5ea712581408fecb08728105c0
-MonoImporter:
-  externalObjects: {}
-  serializedVersion: 2
-  defaultReferences: []
-  executionOrder: 0
-  icon: {instanceID: 0}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 

+ 0 - 11
Unity/Assets/Scripts/Codes/Model/Generate/ClientServer/Message/InnerMessage_S_20001.cs.meta

@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: e0b72155012589840a78d9d64f29bdce
-MonoImporter:
-  externalObjects: {}
-  serializedVersion: 2
-  defaultReferences: []
-  executionOrder: 0
-  icon: {instanceID: 0}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 

+ 0 - 11
Unity/Assets/Scripts/Codes/Model/Generate/ClientServer/Message/LockStepInner_S_21001.cs.meta

@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: 9a6810f88918d4d20ae7b353895f1af1
-MonoImporter:
-  externalObjects: {}
-  serializedVersion: 2
-  defaultReferences: []
-  executionOrder: 0
-  icon: {instanceID: 0}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 

+ 22 - 0
Unity/Assets/Scripts/Codes/Model/Generate/ClientServer/Message/LockStepOuter_C_11001.cs

@@ -72,11 +72,32 @@ namespace ET
 	[ProtoContract]
 	public partial class Room2C_EnterMap: ProtoObject, IActorMessage
 	{
+		[ProtoMember(1)]
+		public long StartTime { get; set; }
+
 		[ProtoMember(2)]
 		public List<LockStepUnitInfo> UnitInfo { get; set; }
 
 	}
 
+	[Message(LockStepOuter.FrameMessage)]
+	[ProtoContract]
+	public partial class FrameMessage: ProtoObject, IActorMessage
+	{
+		[ProtoMember(1)]
+		public long PlayerId { get; set; }
+
+		[ProtoMember(2)]
+		public int Frame { get; set; }
+
+		[ProtoMember(3)]
+		public TrueSync.TSVector2 V { get; set; }
+
+		[ProtoMember(4)]
+		public int Button { get; set; }
+
+	}
+
 	public static class LockStepOuter
 	{
 		 public const ushort C2G_Match = 11002;
@@ -85,5 +106,6 @@ namespace ET
 		 public const ushort C2Room_ChangeSceneFinish = 11005;
 		 public const ushort LockStepUnitInfo = 11006;
 		 public const ushort Room2C_EnterMap = 11007;
+		 public const ushort FrameMessage = 11008;
 	}
 }

+ 0 - 11
Unity/Assets/Scripts/Codes/Model/Generate/ClientServer/Message/LockStepOuter_C_11001.cs.meta

@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: f493672bf2fa046739a1f8fbf88a28c3
-MonoImporter:
-  externalObjects: {}
-  serializedVersion: 2
-  defaultReferences: []
-  executionOrder: 0
-  icon: {instanceID: 0}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 

+ 0 - 11
Unity/Assets/Scripts/Codes/Model/Generate/ClientServer/Message/OuterMessage_C_10001.cs.meta

@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: 9a420edf6a4a57a4c8d98e5acdffcfe9
-MonoImporter:
-  externalObjects: {}
-  serializedVersion: 2
-  defaultReferences: []
-  executionOrder: 0
-  icon: {instanceID: 0}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 

+ 0 - 11
Unity/Assets/Scripts/Codes/Model/Generate/Server/Message/InnerMessage_S_20001.cs.meta

@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: 77ca20f99751331479808fb220803c31
-MonoImporter:
-  externalObjects: {}
-  serializedVersion: 2
-  defaultReferences: []
-  executionOrder: 0
-  icon: {instanceID: 0}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 

+ 0 - 11
Unity/Assets/Scripts/Codes/Model/Generate/Server/Message/LockStepInner_S_21001.cs.meta

@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: f5da6702a31064c42833a7f9147016ce
-MonoImporter:
-  externalObjects: {}
-  serializedVersion: 2
-  defaultReferences: []
-  executionOrder: 0
-  icon: {instanceID: 0}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 

+ 22 - 0
Unity/Assets/Scripts/Codes/Model/Generate/Server/Message/LockStepOuter_C_11001.cs

@@ -72,11 +72,32 @@ namespace ET
 	[ProtoContract]
 	public partial class Room2C_EnterMap: ProtoObject, IActorMessage
 	{
+		[ProtoMember(1)]
+		public long StartTime { get; set; }
+
 		[ProtoMember(2)]
 		public List<LockStepUnitInfo> UnitInfo { get; set; }
 
 	}
 
+	[Message(LockStepOuter.FrameMessage)]
+	[ProtoContract]
+	public partial class FrameMessage: ProtoObject, IActorMessage
+	{
+		[ProtoMember(1)]
+		public long PlayerId { get; set; }
+
+		[ProtoMember(2)]
+		public int Frame { get; set; }
+
+		[ProtoMember(3)]
+		public TrueSync.TSVector2 V { get; set; }
+
+		[ProtoMember(4)]
+		public int Button { get; set; }
+
+	}
+
 	public static class LockStepOuter
 	{
 		 public const ushort C2G_Match = 11002;
@@ -85,5 +106,6 @@ namespace ET
 		 public const ushort C2Room_ChangeSceneFinish = 11005;
 		 public const ushort LockStepUnitInfo = 11006;
 		 public const ushort Room2C_EnterMap = 11007;
+		 public const ushort FrameMessage = 11008;
 	}
 }

+ 0 - 11
Unity/Assets/Scripts/Codes/Model/Generate/Server/Message/LockStepOuter_C_11001.cs.meta

@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: 8fdb6d43fedc543daa3824a136bf364f
-MonoImporter:
-  externalObjects: {}
-  serializedVersion: 2
-  defaultReferences: []
-  executionOrder: 0
-  icon: {instanceID: 0}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 

+ 0 - 11
Unity/Assets/Scripts/Codes/Model/Generate/Server/Message/OuterMessage_C_10001.cs.meta

@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: c0d2c0be69c996a4488513ae7ade42f3
-MonoImporter:
-  externalObjects: {}
-  serializedVersion: 2
-  defaultReferences: []
-  executionOrder: 0
-  icon: {instanceID: 0}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 

+ 11 - 4
Unity/Assets/Scripts/Codes/Model/Share/LockStep/BattleScene.cs

@@ -1,8 +1,13 @@
+using System.Collections.Generic;
+
 namespace ET
 {
     [ComponentOf(typeof(Scene))]
-    public class BattleScene: Entity, IScene, IAwake
+    public class BattleScene: Entity, IScene, IAwake, IUpdate
     {
+        public SceneType SceneType { get; set; } = SceneType.Battle;
+        public string Name { get; set; }
+        
         private long lsSceneInstanceId;
         
         public LSScene LSScene
@@ -18,8 +23,10 @@ namespace ET
             }
         }
 
-        public SceneType SceneType { get; set; } = SceneType.Battle;
-        
-        public string Name { get; set; }
+        public int Frame;
+
+        public long StartTime { get; set; }
+
+        public FrameBuffer FrameBuffer { get; } = new();
     }
 }

+ 0 - 0
Unity/Assets/Scripts/Codes/Hotfix/Share/ConstValue.cs → Unity/Assets/Scripts/Codes/Model/Share/LockStep/ConstValue.cs


+ 0 - 0
Unity/Assets/Scripts/Codes/Hotfix/Share/ConstValue.cs.meta → Unity/Assets/Scripts/Codes/Model/Share/LockStep/ConstValue.cs.meta


+ 61 - 0
Unity/Assets/Scripts/Codes/Model/Share/LockStep/FrameBuffer.cs

@@ -0,0 +1,61 @@
+using System;
+using System.Collections.Generic;
+
+namespace ET
+{
+    public class OneFrameMessage
+    {
+        private readonly SortedList<long, FrameMessage> messages = new (ConstValue.MatchCount);
+
+        public SortedList<long, FrameMessage> Messages
+        {
+            get
+            {
+                return this.messages;
+            }
+        }
+    }
+    
+    public class FrameBuffer
+    {
+        private const int TotalFrameCount = 256;
+        private int NowFrameCount;
+        private readonly List<OneFrameMessage> MessageBuffer = new(TotalFrameCount);
+        private readonly List<byte[]> DataBuffer = new(TotalFrameCount);
+        
+        public FrameBuffer()
+        {
+            for (int i = 0; i < TotalFrameCount; i++)
+            {
+                this.MessageBuffer.Add(new OneFrameMessage());
+            }
+        }
+
+        public void AddFrameMessage(FrameMessage message)
+        {
+            this.MessageBuffer[message.Frame % TotalFrameCount].Messages.Add(message.PlayerId, message);
+            if (message.Frame > this.NowFrameCount)
+            {
+                this.NowFrameCount = message.Frame;
+            }
+        }
+        
+        public OneFrameMessage GetFrameMessage(int frame)
+        {
+            if (frame > this.NowFrameCount)
+            {
+                throw new Exception($"frame > max frame: {frame} {this.NowFrameCount}");
+            }
+            if (frame < this.NowFrameCount - TotalFrameCount || frame < 0)
+            {
+                throw new Exception($"frame < min frame: {frame} {this.NowFrameCount - 255}");
+            }
+            return this.MessageBuffer[frame % TotalFrameCount];
+        }
+
+        public void SaveDate(int frame, byte[] data)
+        {
+            this.DataBuffer[frame % TotalFrameCount] = data;
+        }
+    }
+}

+ 3 - 0
Unity/Assets/Scripts/Codes/Model/Share/LockStep/FrameBuffer.cs.meta

@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 248572437c2f47728e0191da78943fe5
+timeCreated: 1681719619

+ 0 - 8
Unity/Assets/Scripts/Codes/Model/Share/LockStep/Message/IFrameMessage.cs

@@ -1,8 +0,0 @@
-namespace ET
-{
-    public interface IFrameMessage: IActorMessage
-    {
-        long PlayerId { get; set; }
-        int Frame { get; set; }
-    }
-}

+ 0 - 11
Unity/Assets/Scripts/Codes/Model/Share/LockStep/Message/IFrameMessage.cs.meta

@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: c2c7dca6cfebf401db8aca46b007123b
-MonoImporter:
-  externalObjects: {}
-  serializedVersion: 2
-  defaultReferences: []
-  executionOrder: 0
-  icon: {instanceID: 0}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 

+ 2 - 0
Unity/Assets/Scripts/Codes/Model/Share/TimerInvokeType.cs

@@ -13,5 +13,7 @@
         public const int MoveTimer = 201;
         public const int AITimer = 202;
         public const int SessionAcceptTimeout = 203;
+        
+        public const int BattleSceneUpdate = 301;
     }
 }