Files
FORT-BO/Assets/CONTENT/FEATURES/MapRadar/MapImpactMarkerView.cs
T
AsanoRema ffa1064063 Squashed commit of the following:
commit 428243f4a6
Author: AsanoRema <asanorema2036@gmail.com>
Date:   Sat Aug 29 13:43:13 2026 +0300

    Squashed commit of the following:

    commit 68e78fa464
    Author: AsanoRema <asanorema2036@gmail.com>
    Date:   Sat Aug 29 13:41:49 2026 +0300

        Updated .gitignore

commit 9f87122a34
Author: AsanoRema <asanorema2036@gmail.com>
Date:   Sat Aug 29 13:34:57 2026 +0300

    Added Dohya

commit f6a7547e84
Author: AsanoRema <asanorema2036@gmail.com>
Date:   Fri Aug 21 17:59:13 2026 +0300

    Fixed

commit b98901c366
Author: AsanoRema <asanorema2036@gmail.com>
Date:   Tue Aug 18 17:37:22 2026 +0300

    Added new particle Package

commit bb2f4a3b16
Author: AsanoRema <asanorema2036@gmail.com>
Date:   Tue Aug 18 17:17:48 2026 +0300

    Map mehanic ready to multiplayer

commit c01ff800f6
Author: AsanoRema <asanorema2036@gmail.com>
Date:   Tue Aug 18 16:16:19 2026 +0300

    Squashed commit of the following:

    commit 173bbb165c
    Author: henjkey <henjkey@gmail.com>
    Date:   Fri Aug 14 18:51:23 2026 +0500

        Mappp

    commit d559ab338a
    Author: henjkey <henjkey@gmail.com>
    Date:   Thu Aug 13 18:42:41 2026 +0500

        Map

        Controller
        Coordinates
        Target System
        Crosshair System
        Radar System
2026-08-29 13:45:55 +03:00

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