using System.Collections.Generic; using UnityEngine; public class MapManager : MonoBehaviour { private static MapManager _instance; public static MapManager Instance => _instance; [SerializeField] private List _navPoints; public List NavPoints { get => _navPoints; private set => _navPoints = value; } public Dictionary IDToNavPoint {get; private set; } private void Awake() { if (_instance is null) _instance = this; else { Destroy(gameObject); Debug.LogError("Only 1 Instance"); } NavPoints = new List(); var navPointSet = GameObject.Find("NavPoint Set"); var count = navPointSet.transform.childCount; for (var i=0; i < count; i++) NavPoints.Add(navPointSet.transform.GetChild(i) .gameObject.GetComponent()); NavPointSetToID(); } private void NavPointSetToID() { IDToNavPoint = new Dictionary(); int i = 0; foreach (var navPoint in NavPoints) { IDToNavPoint.Add(i, navPoint); navPoint.PointId = i; i++; } } public static void AddDeathAttributeToPoints(int startPoint, int endPoint, float allDistance, float remainingDistance) { var startNavPoint = _instance.IDToNavPoint[startPoint]; var endNavPoint = _instance.IDToNavPoint[endPoint]; float coef; if (Mathf.Abs(allDistance) > float.Epsilon) { coef = remainingDistance / allDistance; startNavPoint.DeathAttr += 1 - coef; endNavPoint.DeathAttr += coef; } else { startNavPoint.DeathAttr += 1; } } }