summaryrefslogtreecommitdiff
path: root/Client/Assembly-CSharp/RoomTracker.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Client/Assembly-CSharp/RoomTracker.cs')
-rw-r--r--Client/Assembly-CSharp/RoomTracker.cs159
1 files changed, 159 insertions, 0 deletions
diff --git a/Client/Assembly-CSharp/RoomTracker.cs b/Client/Assembly-CSharp/RoomTracker.cs
new file mode 100644
index 0000000..3c24ed6
--- /dev/null
+++ b/Client/Assembly-CSharp/RoomTracker.cs
@@ -0,0 +1,159 @@
+using System;
+using System.Collections;
+using UnityEngine;
+
+public class RoomTracker : MonoBehaviour
+{
+ public TextRenderer text;
+
+ public float SourceY = -2.5f;
+
+ public float TargetY = -3.25f;
+
+ private Collider2D playerCollider;
+
+ private ContactFilter2D filter;
+
+ private Collider2D[] buffer = new Collider2D[10];
+
+ public ShipRoom LastRoom;
+
+ private Coroutine slideInRoutine;
+
+ public void Awake()
+ {
+ this.filter = default(ContactFilter2D);
+ this.filter.layerMask = Constants.PlayersOnlyMask;
+ this.filter.useLayerMask = true;
+ this.filter.useTriggers = false;
+ }
+
+ public void OnDisable()
+ {
+ this.LastRoom = null;
+ Vector3 localPosition = this.text.transform.localPosition;
+ localPosition.y = this.TargetY;
+ this.text.transform.localPosition = localPosition;
+ }
+
+ public void FixedUpdate()
+ {
+ ShipRoom[] array = null;
+ if (LobbyBehaviour.Instance)
+ {
+ array = LobbyBehaviour.Instance.AllRooms;
+ }
+ if (ShipStatus.Instance)
+ {
+ array = ShipStatus.Instance.AllRooms;
+ }
+ if (array == null)
+ {
+ return;
+ }
+ ShipRoom shipRoom = null;
+ if (this.LastRoom)
+ {
+ int hitCount = this.LastRoom.roomArea.OverlapCollider(this.filter, this.buffer);
+ if (RoomTracker.CheckHitsForPlayer(this.buffer, hitCount))
+ {
+ shipRoom = this.LastRoom;
+ }
+ }
+ if (!shipRoom)
+ {
+ foreach (ShipRoom shipRoom2 in array)
+ {
+ if (shipRoom2.roomArea)
+ {
+ int hitCount2 = shipRoom2.roomArea.OverlapCollider(this.filter, this.buffer);
+ if (RoomTracker.CheckHitsForPlayer(this.buffer, hitCount2))
+ {
+ shipRoom = shipRoom2;
+ }
+ }
+ }
+ }
+ if (shipRoom)
+ {
+ if (this.LastRoom != shipRoom)
+ {
+ this.LastRoom = shipRoom;
+ if (this.slideInRoutine != null)
+ {
+ base.StopCoroutine(this.slideInRoutine);
+ }
+ if (shipRoom.RoomId != SystemTypes.Hallway)
+ {
+ this.slideInRoutine = base.StartCoroutine(this.CoSlideIn(shipRoom.RoomId));
+ return;
+ }
+ this.slideInRoutine = base.StartCoroutine(this.SlideOut());
+ return;
+ }
+ }
+ else if (this.LastRoom)
+ {
+ this.LastRoom = null;
+ if (this.slideInRoutine != null)
+ {
+ base.StopCoroutine(this.slideInRoutine);
+ }
+ this.slideInRoutine = base.StartCoroutine(this.SlideOut());
+ }
+ }
+
+ private IEnumerator CoSlideIn(SystemTypes newRoom)
+ {
+ yield return this.SlideOut();
+ Vector3 tempPos = this.text.transform.localPosition;
+ Color tempColor = Color.white;
+ this.text.Text = DestroyableSingleton<TranslationController>.Instance.GetString(newRoom);
+ float timer = 0f;
+ while (timer < 0.25f)
+ {
+ timer = Mathf.Min(0.25f, timer + Time.deltaTime);
+ float t = timer / 0.25f;
+ tempPos.y = Mathf.SmoothStep(this.TargetY, this.SourceY, t);
+ tempColor.a = Mathf.Lerp(0f, 1f, t);
+ this.text.transform.localPosition = tempPos;
+ this.text.Color = tempColor;
+ yield return null;
+ }
+ yield break;
+ }
+
+ private IEnumerator SlideOut()
+ {
+ Vector3 tempPos = this.text.transform.localPosition;
+ Color tempColor = Color.white;
+ float timer = FloatRange.ReverseLerp(tempPos.y, this.SourceY, this.TargetY) * 0.1f;
+ while (timer < 0.1f)
+ {
+ timer = Mathf.Min(0.1f, timer + Time.deltaTime);
+ float t = timer / 0.1f;
+ tempPos.y = Mathf.SmoothStep(this.SourceY, this.TargetY, t);
+ tempColor.a = Mathf.Lerp(1f, 0f, t);
+ this.text.transform.localPosition = tempPos;
+ this.text.Color = tempColor;
+ yield return null;
+ }
+ yield break;
+ }
+
+ private static bool CheckHitsForPlayer(Collider2D[] buffer, int hitCount)
+ {
+ if (!PlayerControl.LocalPlayer)
+ {
+ return false;
+ }
+ for (int i = 0; i < hitCount; i++)
+ {
+ if (buffer[i].gameObject == PlayerControl.LocalPlayer.gameObject)
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+}