88 lines
3.2 KiB
C#
88 lines
3.2 KiB
C#
|
|
|
|
using BoneSync.Data;
|
|
using BoneSync.Player;
|
|
using BoneSync.Sync;
|
|
using StressLevelZero.Player;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using UnityEngine;
|
|
|
|
namespace BoneSync.Networking.Messages
|
|
{
|
|
public struct SimpleFingerCurl
|
|
{
|
|
public float thumb;
|
|
public float index;
|
|
public float middle;
|
|
public float ring;
|
|
public float pinky;
|
|
public SimpleFingerCurl(FingerCurl fingerCurl)
|
|
{
|
|
thumb = fingerCurl.thumb;
|
|
index = fingerCurl.index;
|
|
middle = fingerCurl.middle;
|
|
ring = fingerCurl.ring;
|
|
pinky = fingerCurl.pinky;
|
|
}
|
|
}
|
|
public struct PlayerSyncInfo
|
|
{
|
|
public Vector3 rootPos;
|
|
public SimpleSyncTransform headPos;
|
|
public SimpleSyncTransform leftHandPos;
|
|
public SimpleSyncTransform rightHandPos;
|
|
public SimpleFingerCurl leftHandFingerCurl;
|
|
public SimpleFingerCurl rightHandFingerCurl;
|
|
public byte poseIndexRight;
|
|
public byte poseIndexLeft;
|
|
public float poseRadiusRight;
|
|
public float poseRadiusLeft;
|
|
}
|
|
|
|
[PacketType(PacketType.PlayerSync), PacketReliability(PacketReliability.Unreliable)]
|
|
internal class PlayerSyncMessage : NetworkMessage
|
|
{
|
|
private PlayerSyncInfo _playerSyncInfo;
|
|
public PlayerSyncInfo playerSyncInfo => _playerSyncInfo;
|
|
|
|
public PlayerSyncMessage(PlayerSyncInfo playerSyncInfo)
|
|
{
|
|
_playerSyncInfo = playerSyncInfo;
|
|
byteEncoder.WriteVector3(_playerSyncInfo.rootPos);
|
|
byteEncoder.WriteSimpleTransform(_playerSyncInfo.headPos);
|
|
byteEncoder.WriteSimpleTransform(_playerSyncInfo.leftHandPos);
|
|
byteEncoder.WriteSimpleTransform(_playerSyncInfo.rightHandPos);
|
|
byteEncoder.WriteFingerCurl(_playerSyncInfo.leftHandFingerCurl);
|
|
byteEncoder.WriteFingerCurl(_playerSyncInfo.rightHandFingerCurl);
|
|
byteEncoder.WriteByte(_playerSyncInfo.poseIndexRight);
|
|
byteEncoder.WriteByte(_playerSyncInfo.poseIndexLeft);
|
|
byteEncoder.WriteFloat(_playerSyncInfo.poseRadiusRight);
|
|
byteEncoder.WriteFloat(_playerSyncInfo.poseRadiusLeft);
|
|
}
|
|
|
|
public PlayerSyncMessage(Packet packet)
|
|
{
|
|
byteEncoder.WriteBytes(packet.Data);
|
|
_playerSyncInfo.rootPos = byteEncoder.ReadVector3();
|
|
_playerSyncInfo.headPos = byteEncoder.ReadSimpleTransform();
|
|
_playerSyncInfo.leftHandPos = byteEncoder.ReadSimpleTransform();
|
|
_playerSyncInfo.rightHandPos = byteEncoder.ReadSimpleTransform();
|
|
_playerSyncInfo.leftHandFingerCurl = byteEncoder.ReadFingerCurl();
|
|
_playerSyncInfo.rightHandFingerCurl = byteEncoder.ReadFingerCurl();
|
|
_playerSyncInfo.poseIndexRight = byteEncoder.ReadByte();
|
|
_playerSyncInfo.poseIndexLeft = byteEncoder.ReadByte();
|
|
_playerSyncInfo.poseRadiusRight = byteEncoder.ReadFloat();
|
|
_playerSyncInfo.poseRadiusLeft = byteEncoder.ReadFloat();
|
|
}
|
|
|
|
public override void Execute()
|
|
{
|
|
PlayerRig.OnPlayerSync(this);
|
|
}
|
|
}
|
|
}
|