Files
BoneSync/BoneSync/Networking/Messages/PlayerSyncMessage.cs
2025-03-09 01:09:04 +02:00

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);
}
}
}