using System; using System.Collections.Generic; using UnityEngine; public class MapTaskOverlay : MonoBehaviour { public ObjectPoolBehavior icons; private Dictionary data = new Dictionary(); public void Show() { base.gameObject.SetActive(true); if (PlayerTask.PlayerHasHudTask(PlayerControl.LocalPlayer)) { return; } for (int i = 0; i < PlayerControl.LocalPlayer.myTasks.Count; i++) { PlayerTask playerTask = PlayerControl.LocalPlayer.myTasks[i]; if (playerTask.HasLocation && !playerTask.IsComplete) { PooledMapIcon pooledMapIcon = this.icons.Get(); pooledMapIcon.transform.localScale = new Vector3(pooledMapIcon.NormalSize, pooledMapIcon.NormalSize, pooledMapIcon.NormalSize); if (PlayerTask.TaskIsEmergency(playerTask)) { pooledMapIcon.rend.color = Color.red; pooledMapIcon.alphaPulse.enabled = true; pooledMapIcon.rend.material.SetFloat("_Outline", 1f); } else { pooledMapIcon.rend.color = Color.yellow; } MapTaskOverlay.SetIconLocation(playerTask, pooledMapIcon); this.data.Add(playerTask, pooledMapIcon); } } } public void Update() { if (PlayerTask.PlayerHasHudTask(PlayerControl.LocalPlayer)) { return; } for (int i = 0; i < PlayerControl.LocalPlayer.myTasks.Count; i++) { PlayerTask playerTask = PlayerControl.LocalPlayer.myTasks[i]; if (playerTask.HasLocation && !playerTask.IsComplete && playerTask.LocationDirty) { PooledMapIcon pooledMapIcon; if (!this.data.TryGetValue(playerTask, out pooledMapIcon)) { pooledMapIcon = this.icons.Get(); pooledMapIcon.transform.localScale = new Vector3(0.4f, 0.4f, 0.4f); if (PlayerTask.TaskIsEmergency(playerTask)) { pooledMapIcon.rend.color = Color.red; pooledMapIcon.alphaPulse.enabled = true; pooledMapIcon.rend.material.SetFloat("_Outline", 1f); } else { pooledMapIcon.rend.color = Color.yellow; } this.data.Add(playerTask, pooledMapIcon); } MapTaskOverlay.SetIconLocation(playerTask, pooledMapIcon); } } } private static void SetIconLocation(PlayerTask task, PooledMapIcon mapIcon) { if (mapIcon.lastMapTaskStep != task.TaskStep) { mapIcon.lastMapTaskStep = task.TaskStep; Vector3 vector = task.Location; vector /= ShipStatus.Instance.MapScale; vector.z = -1f; mapIcon.name = task.name; mapIcon.transform.localPosition = vector; if (task.TaskStep > 0) { mapIcon.alphaPulse.enabled = true; mapIcon.rend.material.SetFloat("_Outline", 1f); } } } public void Hide() { foreach (KeyValuePair keyValuePair in this.data) { keyValuePair.Value.OwnerPool.Reclaim(keyValuePair.Value); } this.data.Clear(); base.gameObject.SetActive(false); } }