using System.Collections.Generic; using System.Linq; using UnityEngine; using UnityEngine.AI; [RequireComponent(typeof(NavMeshAgent))] public class MovementController : MonoBehaviour { <<<<<<< HEAD public int PointStartID { get; set; } public int PointEndID { get; private set; } public float FlagDistance { get; private set; } private const float updateFlagPositionDelay = 5; private const float updateReachedDestinationDelay = 5; ======= public NavPoint currentPosition { get; set; } private Dictionary navPoints = new Dictionary(); [SerializeField] private NavMeshAgent navMeshAgent; >>>>>>> 351fa8ee12c499a0374be71a192a5f288611f467 [SerializeField] private NavMeshAgent navMeshAgent; [SerializeField] private GameObject flag; public float DistanceToGo { get; private set; } public float RemainingDistance => navMeshAgent.remainingDistance; private Dictionary idNavPointDict; private void Awake() { <<<<<<< HEAD navMeshAgent.speed = SettingsReader.Instance.GetSettings.MovementSpeed; idNavPointDict = MapManager.IDToNavPoint; InvokeRepeating(nameof(UpdateFlagPosition), 0, updateFlagPositionDelay); InvokeRepeating(nameof(ReachedDestination), 0, updateReachedDestinationDelay); } private void OnDestroy() { CancelInvoke(nameof(UpdateFlagPosition)); } private void UpdateFlagPosition() { FlagDistance = (flag.transform.position - gameObject.transform.position).magnitude; ======= navMeshAgent.speed = SettingsReader.Instance.GetSettings.movementSpeed; foreach (var np in MapManager.navPoints) { navPoints[np.PointId] = np; } >>>>>>> 351fa8ee12c499a0374be71a192a5f288611f467 } public void MoveToPointById(int id) { if (!navPoints.ContainsKey(id)) { Debug.LogWarning("PIDOR"); return; } goToNextNavPoint(navPoints[id]); } public void MoveToRandomPoint() <<<<<<< HEAD { Debug.Log(MapManager.NavPoints == null); GoToNextNavPoint(MapManager.NavPoints[Random.Range(0, MapManager.NavPoints.Count)]); ======= { // Debug.Log(MapManager.navPoints == null); goToNextNavPoint(MapManager.navPoints[Random.Range(0, MapManager.navPoints.Count)]); >>>>>>> 351fa8ee12c499a0374be71a192a5f288611f467 } public List GetPointsCandidate() { <<<<<<< HEAD return MapManager.NavPoints .Where(point => (idNavPointDict[PointStartID].Position - point.Position).magnitude < SettingsReader.Instance.GetSettings.MovementDistance) ======= return MapManager.navPoints .Where(point => (currentPosition.position - point.position).magnitude < SettingsReader.Instance.GetSettings.movementDistance) >>>>>>> 351fa8ee12c499a0374be71a192a5f288611f467 .ToList(); } public void GoToNextNavPoint(NavPoint destination) { if (navMeshAgent.isStopped == true) navMeshAgent.isStopped = false; PointStartID = PointEndID; PointEndID = destination.PointId; navMeshAgent.SetDestination(destination.Position); DistanceToGo = navMeshAgent.remainingDistance; } public void ReturnToStartPoint() { if (navMeshAgent.isStopped == true) navMeshAgent.isStopped = false; navMeshAgent.SetDestination(idNavPointDict[PointStartID].Position); PointEndID = PointStartID; PointStartID = -1; } public void StopOnPath() { navMeshAgent.isStopped = true; PointStartID = -1; PointEndID = -1; } public void ReachedDestination() { if ((navMeshAgent.isStopped == false) && (navMeshAgent.velocity.magnitude < 0.1)) PointStartID = PointEndID; } }