Files
megakoop/Game/Scripts/Networking/SteamLocalInputSender.cs
Dominik G. ba150ac5d3 Fixed
2025-10-12 14:18:12 +02:00

109 lines
3.1 KiB
C#

using UnityEngine;
using MegaKoop.Game;
namespace MegaKoop.Game.Networking
{
[DisallowMultipleComponent]
public class SteamLocalInputSender : MonoBehaviour
{
[SerializeField] private SteamCharacterNetworkBridge characterNetwork;
[SerializeField] private float sendInterval = 0.05f;
[SerializeField] private Transform cameraTransform;
private float sendTimer;
private void Awake()
{
if (characterNetwork == null)
{
characterNetwork = GetComponent<SteamCharacterNetworkBridge>();
}
if (cameraTransform == null)
{
var thirdPersonCamera = GetComponentInChildren<ThirdPersonCamera>(true);
if (thirdPersonCamera != null)
{
cameraTransform = thirdPersonCamera.transform;
}
else if (characterNetwork != null && characterNetwork.IsLocalPlayer)
{
Camera mainCamera = Camera.main;
if (mainCamera != null && mainCamera.transform.IsChildOf(transform))
{
cameraTransform = mainCamera.transform;
}
}
}
}
private void Update()
{
if (characterNetwork == null)
{
return;
}
if (!characterNetwork.IsLocalPlayer)
{
return;
}
sendTimer -= Time.deltaTime;
Vector2 moveInput = new Vector2(Input.GetAxisRaw("Horizontal"), Input.GetAxisRaw("Vertical"));
moveInput = Vector2.ClampMagnitude(moveInput, 1f);
Vector2 planarMove = ConvertToWorldSpace(moveInput);
bool jumpPressed = Input.GetButtonDown("Jump");
if (sendTimer <= 0f || jumpPressed)
{
characterNetwork.SendLocalInput(planarMove, jumpPressed);
sendTimer = sendInterval;
}
}
public void SetCameraTransform(Transform camera)
{
cameraTransform = camera;
}
private Vector2 ConvertToWorldSpace(Vector2 moveInput)
{
if (cameraTransform == null)
{
return moveInput;
}
Vector3 forward = cameraTransform.forward;
Vector3 right = cameraTransform.right;
forward.y = 0f;
right.y = 0f;
float forwardSqr = forward.sqrMagnitude;
float rightSqr = right.sqrMagnitude;
if (forwardSqr < 0.0001f && rightSqr < 0.0001f)
{
return moveInput;
}
if (forwardSqr > 0.0001f)
{
forward.Normalize();
}
if (rightSqr > 0.0001f)
{
right.Normalize();
}
Vector3 desiredMove = forward * moveInput.y + right * moveInput.x;
if (desiredMove.sqrMagnitude > 1f)
{
desiredMove.Normalize();
}
return new Vector2(desiredMove.x, desiredMove.z);
}
}
}