102 lines
2.6 KiB
C#
102 lines
2.6 KiB
C#
using Network.Defines;
|
|
using Network.NetworkApplication;
|
|
using UnityEngine;
|
|
using Vector3 = UnityEngine.Vector3;
|
|
|
|
public static class ClientGameplayInputFlow
|
|
{
|
|
public static bool HasPlanarInput(Vector3 input)
|
|
{
|
|
return new Vector2(input.x, input.z).sqrMagnitude > 0f;
|
|
}
|
|
|
|
public static bool TryCreateMoveInput(string playerId, long tick, Vector3 input, bool stopMessagePending,
|
|
out MoveInput message)
|
|
{
|
|
if (!HasPlanarInput(input) && !stopMessagePending)
|
|
{
|
|
message = null;
|
|
return false;
|
|
}
|
|
|
|
message = new MoveInput
|
|
{
|
|
PlayerId = playerId,
|
|
Tick = tick,
|
|
TurnInput = input.x,
|
|
ThrottleInput = input.z
|
|
};
|
|
return true;
|
|
}
|
|
|
|
public static bool TryCreateShootInput(
|
|
string playerId,
|
|
long tick,
|
|
bool fireTriggered,
|
|
Vector3 aimDirection,
|
|
out ShootInput message,
|
|
string targetId = "")
|
|
{
|
|
if (!fireTriggered)
|
|
{
|
|
message = null;
|
|
return false;
|
|
}
|
|
|
|
message = CreateShootInput(playerId, tick, aimDirection, targetId);
|
|
return true;
|
|
}
|
|
|
|
public static ShootInput CreateShootInput(string playerId, long tick, Vector3 aimDirection, string targetId = "")
|
|
{
|
|
var planarDirection = new Vector3(aimDirection.x, 0f, aimDirection.z);
|
|
if (planarDirection.sqrMagnitude <= 0f)
|
|
{
|
|
planarDirection = Vector3.forward;
|
|
}
|
|
else
|
|
{
|
|
planarDirection.Normalize();
|
|
}
|
|
|
|
return new ShootInput
|
|
{
|
|
PlayerId = playerId,
|
|
Tick = tick,
|
|
DirX = planarDirection.x,
|
|
DirY = planarDirection.z,
|
|
TargetId = targetId ?? string.Empty
|
|
};
|
|
}
|
|
|
|
public static void SendShootInput(
|
|
MessageManager messageManager,
|
|
string playerId,
|
|
long tick,
|
|
Vector3 aimDirection,
|
|
string targetId = "")
|
|
{
|
|
if (messageManager == null)
|
|
{
|
|
throw new System.ArgumentNullException(nameof(messageManager));
|
|
}
|
|
|
|
SendShootInput(messageManager, CreateShootInput(playerId, tick, aimDirection, targetId));
|
|
}
|
|
|
|
public static void SendShootInput(MessageManager messageManager, ShootInput message)
|
|
{
|
|
if (messageManager == null)
|
|
{
|
|
throw new System.ArgumentNullException(nameof(messageManager));
|
|
}
|
|
|
|
if (message == null)
|
|
{
|
|
throw new System.ArgumentNullException(nameof(message));
|
|
}
|
|
|
|
messageManager.SendMessage(message, MessageType.ShootInput);
|
|
}
|
|
}
|