Map mehanic ready to multiplayer

This commit is contained in:
2026-08-18 17:17:48 +03:00
parent c01ff800f6
commit bb2f4a3b16
20 changed files with 4691 additions and 1648 deletions
@@ -1,11 +1,10 @@
using UnityEngine;
using UnityEngine.InputSystem;
[DisallowMultipleComponent]
public sealed class MapCrosshairController : MonoBehaviour
{
[Header("Nearest Target (Runtime)")]
[SerializeField] private MapTarget nearestTarget = null;
[SerializeField] private MapTarget nearestTarget;
[SerializeField] private float distanceToNearestTarget = -1f;
private MapCoordinateSystem coordinateSystem;
@@ -13,79 +12,42 @@ public sealed class MapCrosshairController : MonoBehaviour
private Transform relayX;
private Transform relayY;
private Transform crosshairVisual;
private float movementSpeed;
private bool useKeyboardInput;
private float horizontalAxis;
private float verticalAxis;
private Vector2 crosshairCoordinates;
private Vector3 relayXOffset;
private Vector3 relayYOffset;
private bool isConfigured;
public MapCoordinateSystem CoordinateSystem => coordinateSystem;
public Vector2 Coordinates => crosshairCoordinates;
public void Configure(
MapCoordinateSystem newCoordinateSystem,
Transform newRelayX,
Transform newRelayY,
Transform newCrosshairVisual,
float newMovementSpeed,
bool enableKeyboardInput,
MapTargetController newTargetController)
{
coordinateSystem = newCoordinateSystem;
relayX = newRelayX;
relayY = newRelayY;
crosshairVisual = newCrosshairVisual;
movementSpeed = Mathf.Max(0f, newMovementSpeed);
useKeyboardInput = enableKeyboardInput;
targetController = newTargetController;
crosshairCoordinates = Vector2.zero;
isConfigured = CalibrateObjects();
if (isConfigured)
ApplyCoordinates();
}
private void Update()
public void SetCoordinates(Vector2 coordinates)
{
if (!isConfigured)
return;
if (useKeyboardInput)
ReadKeyboardInput();
Vector2 movement = new(horizontalAxis, verticalAxis);
crosshairCoordinates += movement * (movementSpeed * Time.deltaTime);
crosshairCoordinates = coordinateSystem.ClampCoordinates(crosshairCoordinates);
crosshairCoordinates = coordinateSystem.ClampCoordinates(coordinates);
ApplyCoordinates();
UpdateNearestTarget();
}
public void SetHorizontalAxis(float value)
{
horizontalAxis = Mathf.Clamp(value, -1f, 1f);
}
public void SetVerticalAxis(float value)
{
verticalAxis = Mathf.Clamp(value, -1f, 1f);
}
public Vector2 GetCrosshairCoordinates()
{
return crosshairCoordinates;
}
public MapTarget GetNearestTarget()
{
return nearestTarget;
}
public float GetDistanceToNearestTarget()
{
return distanceToNearestTarget;
}
public Vector2 GetCrosshairCoordinates() => crosshairCoordinates;
public MapTarget GetNearestTarget() => nearestTarget;
public float GetDistanceToNearestTarget() => distanceToNearestTarget;
public bool TryGetNearestTarget(out MapTarget target, out float distance)
{
@@ -94,62 +56,49 @@ public sealed class MapCrosshairController : MonoBehaviour
return target != null;
}
private void ReadKeyboardInput()
{
Keyboard keyboard = Keyboard.current;
if (keyboard == null)
{
SetHorizontalAxis(0f);
SetVerticalAxis(0f);
return;
}
SetHorizontalAxis(
(keyboard.lKey.isPressed ? 1f : 0f) - (keyboard.jKey.isPressed ? 1f : 0f));
SetVerticalAxis(
(keyboard.iKey.isPressed ? 1f : 0f) - (keyboard.kKey.isPressed ? 1f : 0f));
}
private void ApplyCoordinates()
{
Vector3 targetWorldPosition = coordinateSystem.CoordinatesToWorldPosition(crosshairCoordinates);
crosshairVisual.position = targetWorldPosition;
crosshairVisual.position =
coordinateSystem.CoordinatesToWorldPosition(crosshairCoordinates);
if (relayX != null)
{
relayX.position = coordinateSystem.CoordinatesToWorldPosition(
new Vector2(crosshairCoordinates.x, 0f)) + relayXOffset;
}
if (relayY != null)
{
relayY.position = coordinateSystem.CoordinatesToWorldPosition(
new Vector2(0f, crosshairCoordinates.y)) + relayYOffset;
}
}
private bool CalibrateObjects()
{
if (coordinateSystem == null || crosshairVisual == null || !coordinateSystem.HasValidCorners())
if (coordinateSystem == null || crosshairVisual == null ||
!coordinateSystem.HasValidCorners())
{
return false;
}
Vector3 origin = coordinateSystem.CoordinatesToWorldPosition(Vector2.zero);
Vector3 horizontalDirection =
coordinateSystem.CoordinatesToWorldPosition(new Vector2(MapCoordinateSystem.CoordinateMaximum, 0f)) -
origin;
Vector3 verticalDirection =
coordinateSystem.CoordinatesToWorldPosition(new Vector2(0f, MapCoordinateSystem.CoordinateMaximum)) -
origin;
Vector3 horizontalDirection = coordinateSystem.CoordinatesToWorldPosition(
new Vector2(MapCoordinateSystem.CoordinateMaximum, 0f)) - origin;
Vector3 verticalDirection = coordinateSystem.CoordinatesToWorldPosition(
new Vector2(0f, MapCoordinateSystem.CoordinateMaximum)) - origin;
if (horizontalDirection.sqrMagnitude <= Mathf.Epsilon ||
verticalDirection.sqrMagnitude <= Mathf.Epsilon)
{
return false;
}
horizontalDirection.Normalize();
verticalDirection.Normalize();
if (relayX != null)
relayXOffset = Vector3.ProjectOnPlane(relayX.position - origin, horizontalDirection);
if (relayY != null)
relayYOffset = Vector3.ProjectOnPlane(relayY.position - origin, verticalDirection);
return true;
}
@@ -157,7 +106,6 @@ public sealed class MapCrosshairController : MonoBehaviour
{
nearestTarget = null;
distanceToNearestTarget = -1f;
if (targetController == null)
return;