Exemple #1
0
        public static void SyncPosition(GameSession session, SyncPositionData data)
        {
            SyncPositionData pData;

            if (_syncPosDic.TryGetValue(session, out pData))
            {
                //pData = data;
                _syncPosDic[session] = data;
            }
            else
            {
                _syncPosDic.Add(session, data);
            }

            var syncPosDataSet = GetSyncPositionDataSet(session);
            var buffer         = PackCastPackage(CastID.SyncPlayerPosition, syncPosDataSet);

            foreach (var sync in _syncPosDic)
            {
                if (sync.Key == session)
                {
                    continue;
                }
                SendCast(sync.Key, buffer);
            }
        }
        public override bool TakeAction()
        {
            var syncData = new SyncPositionData()
            {
                UserId = Current.UserId, PosX = _PosData.PosX, PosY = _PosData.PosY, PosZ = _PosData.PosZ
            };

            DispatchCast.Send(new CastSyncPlayerPosition(Current, syncData));
            return(true);
        }
Exemple #3
0
    private void LateUpdate()
    {
        if (!isServer)
        {
            return;
        }

        timer += Time.unscaledDeltaTime;
        if (timer >= 1f / SendRate && ShouldSendData())
        {
            timer = 0f;
            // Send data!
            RpcSendData(lastSent = GetCurrentData());
        }
    }
Exemple #4
0
    private void RpcSendData(SyncPositionData data)
    {
        if (isServer)
        {
            return;
        }

        float currentTime = (float)NetworkTime.time;
        float sentTime    = data.Time;
        float diff        = currentTime - sentTime;

        // 'Simulate' the body in the time that the message took to arrive.
        latest = data.AdvanceTime(diff);
        //latest = data;

        Body.MovePosition(data.Position);
        Body.MoveRotation(data.Rotation);
        Body.velocity        = data.Velocity;
        Body.angularVelocity = data.AngularVelocity * Mathf.Deg2Rad;
    }
Exemple #5
0
 public float AngleTo(SyncPositionData other)
 {
     return(other.Rotation - this.Rotation);
 }
Exemple #6
0
 public float SqrDistanceTo(SyncPositionData other)
 {
     return((other.Position - this.Position).sqrMagnitude);
 }
 public CastSyncPlayerPosition(GameSession session, SyncPositionData data)
 {
     _session     = session;
     _syncPosData = data;
 }