commit428243f4a6Author: AsanoRema <asanorema2036@gmail.com> Date: Sat Aug 29 13:43:13 2026 +0300 Squashed commit of the following: commit68e78fa464Author: AsanoRema <asanorema2036@gmail.com> Date: Sat Aug 29 13:41:49 2026 +0300 Updated .gitignore commit9f87122a34Author: AsanoRema <asanorema2036@gmail.com> Date: Sat Aug 29 13:34:57 2026 +0300 Added Dohya commitf6a7547e84Author: AsanoRema <asanorema2036@gmail.com> Date: Fri Aug 21 17:59:13 2026 +0300 Fixed commitb98901c366Author: AsanoRema <asanorema2036@gmail.com> Date: Tue Aug 18 17:37:22 2026 +0300 Added new particle Package commitbb2f4a3b16Author: AsanoRema <asanorema2036@gmail.com> Date: Tue Aug 18 17:17:48 2026 +0300 Map mehanic ready to multiplayer commitc01ff800f6Author: AsanoRema <asanorema2036@gmail.com> Date: Tue Aug 18 16:16:19 2026 +0300 Squashed commit of the following: commit173bbb165cAuthor: henjkey <henjkey@gmail.com> Date: Fri Aug 14 18:51:23 2026 +0500 Mappp commitd559ab338aAuthor: henjkey <henjkey@gmail.com> Date: Thu Aug 13 18:42:41 2026 +0500 Map Controller Coordinates Target System Crosshair System Radar System
77 lines
3.0 KiB
C#
77 lines
3.0 KiB
C#
using System.Collections;
|
|
using UnityEngine;
|
|
using UnityEngine.Events;
|
|
|
|
[DisallowMultipleComponent]
|
|
public sealed class MapImpactMarkerView : MonoBehaviour
|
|
{
|
|
[SerializeField] private MapCoordinateSystem coordinateSystem;
|
|
[SerializeField, Min(0.01f)] private float markerLength = 0.35f;
|
|
[SerializeField, Min(0.005f)] private float markerThickness = 0.035f;
|
|
[SerializeField, Min(0f)] private float surfaceOffset = 0.025f;
|
|
[SerializeField, Min(0.1f)] private float lifetime = 5f;
|
|
[SerializeField] private Color hitColor = new(1f, 0.1f, 0.05f, 1f);
|
|
[SerializeField] private Color missColor = new(1f, 0.75f, 0f, 1f);
|
|
[SerializeField] private bool showMisses = true;
|
|
[SerializeField] private UnityEvent hitMarked;
|
|
[SerializeField] private UnityEvent missMarked;
|
|
|
|
public void Configure(MapCoordinateSystem coordinates) => coordinateSystem = coordinates;
|
|
|
|
public void Show(MapShotResultState result)
|
|
{
|
|
if (coordinateSystem == null || (!result.Hit && !showMisses))
|
|
return;
|
|
|
|
CreateMarker(result.Coordinates, result.Hit ? hitColor : missColor);
|
|
if (result.Hit)
|
|
hitMarked?.Invoke();
|
|
else
|
|
missMarked?.Invoke();
|
|
}
|
|
|
|
private void CreateMarker(Vector2 coordinates, Color color)
|
|
{
|
|
Vector3 horizontal = coordinateSystem.BottomRight.position -
|
|
coordinateSystem.BottomLeft.position;
|
|
Vector3 vertical = coordinateSystem.TopLeft.position -
|
|
coordinateSystem.BottomLeft.position;
|
|
Vector3 normal = Vector3.Cross(horizontal, vertical).normalized;
|
|
if (normal.sqrMagnitude < 0.5f)
|
|
normal = transform.forward;
|
|
|
|
GameObject marker = new($"Impact {coordinates.x:0.0}, {coordinates.y:0.0}");
|
|
marker.transform.SetParent(transform, true);
|
|
marker.transform.SetPositionAndRotation(
|
|
coordinateSystem.CoordinatesToWorldPosition(coordinates) + normal * surfaceOffset,
|
|
Quaternion.LookRotation(normal, vertical.normalized));
|
|
|
|
CreateBar(marker.transform, 45f, color);
|
|
CreateBar(marker.transform, -45f, color);
|
|
StartCoroutine(DestroyAfterLifetime(marker));
|
|
}
|
|
|
|
private void CreateBar(Transform parent, float angle, Color color)
|
|
{
|
|
GameObject bar = GameObject.CreatePrimitive(PrimitiveType.Cube);
|
|
bar.name = "Marker Bar";
|
|
bar.transform.SetParent(parent, false);
|
|
bar.transform.localRotation = Quaternion.Euler(0f, 0f, angle);
|
|
bar.transform.localScale = new Vector3(
|
|
markerLength, markerThickness, markerThickness);
|
|
Collider collider = bar.GetComponent<Collider>();
|
|
if (collider != null)
|
|
Destroy(collider);
|
|
Renderer renderer = bar.GetComponent<Renderer>();
|
|
if (renderer != null)
|
|
renderer.material.color = color;
|
|
}
|
|
|
|
private IEnumerator DestroyAfterLifetime(GameObject marker)
|
|
{
|
|
yield return new WaitForSeconds(lifetime);
|
|
if (marker != null)
|
|
Destroy(marker);
|
|
}
|
|
}
|