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); }
private void LateUpdate() { if (!isServer) { return; } timer += Time.unscaledDeltaTime; if (timer >= 1f / SendRate && ShouldSendData()) { timer = 0f; // Send data! RpcSendData(lastSent = GetCurrentData()); } }
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; }
public float AngleTo(SyncPositionData other) { return(other.Rotation - this.Rotation); }
public float SqrDistanceTo(SyncPositionData other) { return((other.Position - this.Position).sqrMagnitude); }
public CastSyncPlayerPosition(GameSession session, SyncPositionData data) { _session = session; _syncPosData = data; }