예제 #1
0
    /// <summary>
    /// Set position of objects in message
    /// </summary>
    /// <param name="message"></param>
    /// <param name="broadcast"></param>
    public void SetPositions(string message, bool broadcast = false)
    {
        BatchedPositionRequest data = JsonUtility.FromJson <BatchedPositionRequest>(message);

        foreach (var entry in data.Requests)
        {
            if (entry.Priority == Servicer.Instance.Netcode.ConnectionID)
            {
                continue;
            }

            if (PlayerPositionTrackedObjects.ContainsKey(entry.Id))
            {
                PlayerPositionTrackedObjects[entry.Id].transform.DOMove(entry.Position, 0.1f);
            }
            else
            {
                Servicer.Instance.Spawn.SpawnDummy(entry.Id, entry.Position);
            }


            //PositionTrackedObjects[entry.Id].transform.position = entry.Position;
        }
        if (broadcast)
        {
            Servicer.Instance.Netcode.SendDataUnreliable(
                (short)NetcodeMsgType.BatchedPositionUpdate,
                message);
        }
        PositionBatch.Clear();
    }
예제 #2
0
    public void SyncAllDynamicPositions(int targetClient)
    {
        var list = PlayerPositionTrackedObjects.Select(entry => new PositionRequest()
        {
            Id       = entry.Key,
            Priority = 0,
            Position = entry.Value.transform.position
        }).ToList();
        var data = new BatchedPositionRequest {
            Requests = list
        };

        Servicer.Instance.Netcode.SendDataUnreliable(
            (short)NetcodeMsgType.BatchedPositionUpdate,
            JsonUtility.ToJson(data), targetConn: targetClient);
    }
예제 #3
0
 void Update()
 {
     // Do we have local position changes to send this frame?
     if (PositionBatch.Count != 0)
     {
         if (Servicer.Instance.Netcode.IsServer)
         {
             var list = PositionBatch.Select(entry => new PositionRequest()
             {
                 Id       = entry.Key,
                 Priority = entry.Value.Priority,
                 Position = entry.Value.Value
             }).ToList();
             var data = new BatchedPositionRequest {
                 Requests = list
             };
             SetPositions(JsonUtility.ToJson(data), true);
         }
         else
         {
             var list = PositionBatch.Select(entry => new PositionRequest
             {
                 Id       = entry.Key,
                 Priority = entry.Value.Priority,
                 Position = entry.Value.Value
             }).ToList();
             var data = new BatchedPositionRequest {
                 Requests = list
             };
             Servicer.Instance.Netcode.SendDataUnreliable(
                 (short)NetcodeMsgType.PositionUpdateRequest,
                 JsonUtility.ToJson(data),
                 targetConn: 0);
             PositionBatch.Clear();
         }
     }
 }