Пример #1
0
 private void Start()
 {
     lastSyncMessage = AvatarSyncMessage.ToSyncMessage(avatarNPC);
     if (!NetworkCommander.IsServer && avatarNPC.animationVariator != null)
     {
         avatarNPC.StopCoroutine(avatarNPC.animationVariator);
     }
 }
Пример #2
0
 public void DoSync()
 {
     syncMessage = AvatarSyncMessage.ToSyncMessage(avatarNPC);
     if (!syncMessage.IsEqual(lastSyncMessage))
     {
         lastSyncMessage = syncMessage;
         NetworkCommander.CollectSyncMessage(lastSyncMessage);
     }
 }
Пример #3
0
        public bool IsEqual(object obj)
        {
            AvatarSyncMessage o = (AvatarSyncMessage)obj;

            return(f == o.f &&
                   r == o.r &&
                   Mathf.Abs(v -= o.v) < 1000 &&
                   n == o.n &&
                   s == o.s &&
                   Mathf.Abs(y - o.y) < 1000 &&
                   (p - o.p).magnitude < 100);
        }
Пример #4
0
 public AvatarSyncMessage Pull()
 {
     if (avatarNPCSync.Count > 0)
     {
         AvatarSyncMessage msg = avatarNPCSync[0];
         avatarNPCSync.RemoveAt(0);
         return(msg);
     }
     else
     {
         return(null);
     }
 }
Пример #5
0
        public string Serialize()
        {
            string ser = (avatarNPCSync.Count).ToString();

            AvatarSyncMessage asm = Pull();

            while (asm != null)
            {
                ser += Del + asm.Serialize();
                asm  = Pull();
            }

            return(ser);
        }
Пример #6
0
        public static AvatarSyncMessage ToSyncMessage(AvatarNPCCommander av)
        {
            AvatarSyncMessage msg = new AvatarSyncMessage()
            {
                n = av.name,
                p = Vector3Int.RoundToInt(av.transform.position * 1000),
                y = Mathf.RoundToInt(av.transform.eulerAngles.y * 1000),
                s = av.AnimatorSit,
                f = Mathf.RoundToInt(av.animator.GetFloat("Forward") * 1000),
                r = Mathf.RoundToInt(av.animator.GetFloat("Turn") * 1000),
                v = Mathf.RoundToInt(av.animator.GetFloat("Variant") * 1000)
            };

            return(msg);
        }
Пример #7
0
        public static AvatarSyncMessage FromString(string serialized)
        {
            string[]          b   = serialized.Split(Del);
            AvatarSyncMessage msg = new AvatarSyncMessage()
            {
                n = b[0],
                p = new Vector3Int(int.Parse(b[1]), int.Parse(b[2]), int.Parse(b[3])),
                s = b[4] == "1" ? true : false,
                y = int.Parse(b[5]),
                f = int.Parse(b[6]),
                r = int.Parse(b[7]),
                v = int.Parse(b[8])
            };

            return(msg);
        }
Пример #8
0
        public static NetworkSyncData Deserialize(string serialized)
        {
            string[] b = serialized.Split(Del);


            NetworkSyncData l = new NetworkSyncData();

            l.avatarNPCSync = new List <AvatarSyncMessage>();

            int avatarSyncs = int.Parse(b[0]);

            int i = 1;

            for (; i < avatarSyncs + 1; i++)
            {
                l.avatarNPCSync.Add(AvatarSyncMessage.FromString(b[i]));
            }
            return(l);
            //return JsonUtility.FromJson<ListOfAvatarNPCCommanderSyncMessage>(json);
        }
Пример #9
0
        public static void Deserialize(string serialized)
        {
            AvatarSyncMessage msg = FromString(serialized); //  JsonUtility.FromJson<AvatarNPCCommanderSyncMessage>(serialized);

            msg.Apply();
        }