diff options
author | chai <chaifix@163.com> | 2020-12-30 20:59:04 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2020-12-30 20:59:04 +0800 |
commit | e9ea621b93fbb58d9edfca8375918791637bbd52 (patch) | |
tree | 19ce3b1c1f2d51eda6878c9d0f2c9edc27f13650 /Client/Assembly-CSharp/MapTaskOverlay.cs |
+init
Diffstat (limited to 'Client/Assembly-CSharp/MapTaskOverlay.cs')
-rw-r--r-- | Client/Assembly-CSharp/MapTaskOverlay.cs | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/Client/Assembly-CSharp/MapTaskOverlay.cs b/Client/Assembly-CSharp/MapTaskOverlay.cs new file mode 100644 index 0000000..cc70292 --- /dev/null +++ b/Client/Assembly-CSharp/MapTaskOverlay.cs @@ -0,0 +1,101 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +public class MapTaskOverlay : MonoBehaviour +{ + public ObjectPoolBehavior icons; + + private Dictionary<PlayerTask, PooledMapIcon> data = new Dictionary<PlayerTask, PooledMapIcon>(); + + 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>(); + 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>(); + 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<PlayerTask, PooledMapIcon> keyValuePair in this.data) + { + keyValuePair.Value.OwnerPool.Reclaim(keyValuePair.Value); + } + this.data.Clear(); + base.gameObject.SetActive(false); + } +} |