public static void CancelNotification() { try { if (NotificationTask != null) { NotificationTask.Dispose(); Text.SetActive(false); NotificationTask = null; } } catch { } }
public static void ShowNotification(string text, long time) { if (Text == null) { Text = new CustomText(TextX, TextY, text); Text.TextRenderer.Centered = true; Text.TextRenderer.scale = TextScale; } Text.Text = text; if (IsNotifying) { return; } IsNotifying = true; Task.Run(async() => { Text.SetActive(true); Text.Color = new UnityEngine.Color(1, 1, 1, 0); CustomStopwatch stopwatch = new CustomStopwatch(true); while (stopwatch.ElapsedMilliseconds < time) { float a = stopwatch.ElapsedMilliseconds / (time / 2f); if (stopwatch.ElapsedMilliseconds > (time / 2)) { a = (time - stopwatch.ElapsedMilliseconds) / (time / 2f); } Text.Color = new UnityEngine.Color(1, 1, 1, a); await Task.Delay(1); if (CancelNotification) { CancelNotification = false; Text.SetActive(false); return; } } IsNotifying = false; }); }
public override void Loop() { base.Loop(); GameModeSettingsAddition = $"\nAbility Active Period: {Functions.ColorPurple}{OnTime}s[]\n" + $"Ability Cooldown: {Functions.ColorPurple}{UseCooldown}s[]"; if (!IsInGame) { return; } if (!PlayerController.LocalPlayer.PlayerData.IsImpostor) { return; } if (EnableDisableCollision == null) { EnableDisableCollision = new CustomButton(ButtonOffsetX, ButtonOffsetY, Functions.LoadSpriteFromAssemblyResource(Assembly.GetExecutingAssembly(), "QuantumTunnelingGameMode.Assets.collision.png")); } if (CollisionTextRenderer == null) { CollisionTextRenderer = new CustomText(TextOffsetX, TextOffsetY, $"{UseCooldown}"); CollisionTextRenderer.TextRenderer.scale = 2; CollisionTextRenderer.TextRenderer.Centered = true; CollisionTextRenderer.SetActive(false); } if (PlayerController.LocalPlayer.PlayerData.IsDead) { if (CollisionTextRenderer.Active) { CollisionTextRenderer.SetActive(false); } if (EnableDisableCollision.Active) { EnableDisableCollision.SetActive(false); } return; } string toDisplay = "--- [7a31f7ff]Quantum Tunneling[]---\n"; if (IsEnabled) { toDisplay += $"Collision in [11c5edff]{ OnTime - (Functions.GetUnixTime() - LastEnabled) }s[]"; CollisionTextRenderer.SetActive(true); CollisionTextRenderer.Text = $"{ OnTime - (Functions.GetUnixTime() - LastEnabled) }"; CollisionTextRenderer.Color = new Color(0, 1, 0); if (OnTime - (Functions.GetUnixTime() - LastEnabled) <= 0) { PlayerController ctrl = PlayerController.LocalPlayer; IsEnabled = false; RpcManager.SendRpc(QuantumTunneling.QuantumTunnelingRpc, new byte[] { 2, ctrl.PlayerId, Convert.ToByte(IsEnabled) }); PlayerHudManager.HudManager.ShadowQuad.gameObject.SetActive(!IsEnabled); ctrl.HasCollision = !IsEnabled; } } else { bool CanEnable = LastEnabled + OnTime + UseCooldown <= Functions.GetUnixTime(); if (CanEnable) { // ----- Can enable demat ----- if (((EnableDisableCollision.InBounds && Functions.GetKey(KeyCode.Mouse0)) || Functions.GetKey(UseKey)) && PlayerController.LocalPlayer.Moveable) { // ----- User pressed key ----- LastEnabled = Functions.GetUnixTime(); PlayerController ctrl = PlayerController.LocalPlayer; IsEnabled = true; EnableDisableCollision.SpriteRenderer.color = new Color(0.75f, 0.75f, 0.75f, 0.75f); RpcManager.SendRpc(QuantumTunneling.QuantumTunnelingRpc, new byte[] { 2, ctrl.PlayerId, Convert.ToByte(IsEnabled) }); PlayerHudManager.HudManager.ShadowQuad.gameObject.SetActive(!IsEnabled); ctrl.HasCollision = !IsEnabled; } else { // ----- Display can press key ----- toDisplay += $"Use [11c5edff]The Button[] to activate."; EnableDisableCollision.SpriteRenderer.color = new Color(1, 1, 1); CollisionTextRenderer.gameObject.SetActive(false); } } else { // ----- Cannot enable demat ----- toDisplay += $"Cooldown: [11c5edff]{ (UseCooldown + OnTime) - (Functions.GetUnixTime() - LastEnabled) }s[]"; CollisionTextRenderer.Text = $"{ (UseCooldown + OnTime) - (Functions.GetUnixTime() - LastEnabled) }"; CollisionTextRenderer.Color = new Color(1, 1, 1); } } string curText = PlayerHudManager.TaskText; if (!curText.Contains(Delimiter)) { PlayerHudManager.TaskText = toDisplay + Delimiter + PlayerHudManager.TaskText; } else if (!curText.Contains(toDisplay)) { string toReplace = curText.Split(new string[] { Delimiter }, StringSplitOptions.None)[0]; PlayerHudManager.TaskText = curText.Replace(toReplace, toDisplay); } }
public override void Loop() { base.Loop(); GameModeSettingsAddition = $"\nAbility Active Period: {Functions.ColorPurple}{OnTime}s[]\n" + $"Ability Cooldown: {Functions.ColorPurple}{UseCooldown}s[]"; if (!IsInGame) { return; } foreach (var playerId in InvisiblePlayers) { PlayerController player = PlayerController.FromPlayerId(playerId); if (PlayerController.LocalPlayer.PlayerData.IsImpostor || PlayerController.LocalPlayer.PlayerData.IsDead) { player.SetOpacity(0.5f); } else { player.IsVisible = false; } } if (!PlayerController.LocalPlayer.PlayerData.IsImpostor) { return; } if (EnableDisableInvisibility == null) { EnableDisableInvisibility = new CustomButton(ButtonOffsetX, ButtonOffsetY, Functions.LoadSpriteFromAssemblyResource(Assembly.GetExecutingAssembly(), "ImpostorInvisibility.Assets.invisibility.png")); } if (InvisibilityTextRenderer == null) { InvisibilityTextRenderer = new CustomText(TextOffsetX, TextOffsetY, $"{UseCooldown}"); InvisibilityTextRenderer.TextRenderer.scale = 2; InvisibilityTextRenderer.TextRenderer.Centered = true; InvisibilityTextRenderer.SetActive(false); } if (PlayerController.LocalPlayer.PlayerData.IsDead) { if (InvisibilityTextRenderer.Active) { InvisibilityTextRenderer.SetActive(false); } if (EnableDisableInvisibility.Active) { EnableDisableInvisibility.SetActive(false); } return; } string toDisplay = "--- [7a31f7ff]Impostor Invisibility[]---\n"; if (IsEnabled) { toDisplay += $"Visible in [11c5edff]{ OnTime - (Functions.GetUnixTime() - LastEnabled) }s[]"; InvisibilityTextRenderer.SetActive(true); InvisibilityTextRenderer.Text = $"{ OnTime - (Functions.GetUnixTime() - LastEnabled) }"; InvisibilityTextRenderer.Color = new Color(0, 1, 0); if (OnTime - (Functions.GetUnixTime() - LastEnabled) <= 0) { PlayerController ctrl = PlayerController.LocalPlayer; IsEnabled = false; RpcManager.SendRpc(ImpostorInvisibility.ImpostorInvisibilityRpc, new byte[] { 2, ctrl.PlayerId, Convert.ToByte(IsEnabled) }); if (IsEnabled) { InvisiblePlayers.Add(ctrl.PlayerId); } else if (InvisiblePlayers.Contains(ctrl.PlayerId)) { InvisiblePlayers.Remove(ctrl.PlayerId); var player = PlayerController.FromPlayerId(ctrl.PlayerId); player.SetOpacity(1); if (!player.PlayerControl.inVent) { player.IsVisible = true; } } } } else { bool CanEnable = LastEnabled + OnTime + UseCooldown <= Functions.GetUnixTime(); if (CanEnable) { // ----- Can enable demat ----- if (((EnableDisableInvisibility.InBounds && Functions.GetKey(KeyCode.Mouse0)) || Functions.GetKey(UseKey)) && PlayerController.LocalPlayer.Moveable) { // ----- User pressed key ----- LastEnabled = Functions.GetUnixTime(); PlayerController ctrl = PlayerController.LocalPlayer; IsEnabled = true; EnableDisableInvisibility.SpriteRenderer.color = new Color(0.75f, 0.75f, 0.75f, 0.75f); RpcManager.SendRpc(ImpostorInvisibility.ImpostorInvisibilityRpc, new byte[] { 2, ctrl.PlayerId, Convert.ToByte(IsEnabled) }); if (IsEnabled) { InvisiblePlayers.Add(ctrl.PlayerId); } else if (InvisiblePlayers.Contains(ctrl.PlayerId)) { InvisiblePlayers.Remove(ctrl.PlayerId); var player = PlayerController.FromPlayerId(ctrl.PlayerId); player.SetOpacity(1); if (!player.PlayerControl.inVent) { player.IsVisible = true; } } } else { // ----- Display can press key ----- toDisplay += $"Use [11c5edff]{ UseKey }[] to activate."; EnableDisableInvisibility.SpriteRenderer.color = new Color(1, 1, 1); InvisibilityTextRenderer.gameObject.SetActive(false); } } else { // ----- Cannot enable demat ----- toDisplay += $"Cooldown: [11c5edff]{ (UseCooldown + OnTime) - (Functions.GetUnixTime() - LastEnabled) }s[]"; InvisibilityTextRenderer.Text = $"{ (UseCooldown + OnTime) - (Functions.GetUnixTime() - LastEnabled) }"; InvisibilityTextRenderer.Color = new Color(1, 1, 1); } } string curText = PlayerHudManager.TaskText; if (!curText.Contains(Delimiter)) { PlayerHudManager.TaskText = toDisplay + Delimiter + PlayerHudManager.TaskText; } else if (!curText.Contains(toDisplay)) { string toReplace = curText.Split(new string[] { Delimiter }, StringSplitOptions.None)[0]; PlayerHudManager.TaskText = curText.Replace(toReplace, toDisplay); } }