private void OnComponentUpdated(PlayerComponent.Update update) { if (!_playerReader.HasAuthority) { var pos = update.position; if (pos.HasValue) { this.transform.position = pos.Value.ToVector3(); } var head = update.head; if (head.HasValue) { _head.UpdateFromTransformData(head.Value); } var lhand = update.leftHand; if (lhand.HasValue) { _leftHand.UpdateFromTransformData(lhand.Value); } var rhand = update.rightHand; if (rhand.HasValue) { _rightHand.UpdateFromTransformData(rhand.Value); } } }
private void FixedUpdate() { if (!_playerWriter.HasAuthority) { return; } var frameCount = Time.frameCount; if (frameCount < _lastSend) { return; } _lastSend = frameCount + _sendFrameFrequency; var update = new PlayerComponent.Update(); var change = false; var newPos = this.transform.position.ToCoordinates(); if (newPos.HasChangedBy(_playerWriter.Data.position, _positionSendThreshold)) { update = update.SetPosition(newPos); change = true; } var newHead = _head.transform.ToTransformData(); if (newHead.HasChangedBy(_playerWriter.Data.head, _positionSendThreshold, _rotationSendThreshold)) { update = update.SetHead(newHead); change = true; } var newLeftHand = _leftHand.transform.ToTransformData(); if (newLeftHand.HasChangedBy(_playerWriter.Data.leftHand, _positionSendThreshold, _rotationSendThreshold)) { update = update.SetLeftHand(newLeftHand); change = true; } var newRightHand = _rightHand.transform.ToTransformData(); if (newRightHand.HasChangedBy(_playerWriter.Data.rightHand, _positionSendThreshold, _rotationSendThreshold)) { update = update.SetRightHand(newRightHand); change = true; } if (change) { _playerWriter.Send(update); } }