using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using System.Threading;
using AnnounceMoonAndWeatherChange.LobbyCompatibility;
using AnnounceMoonAndWeatherChange.WeatherWarningAnimations;
using AnnounceMoonAndWeatherChange.WeatherWarningAnimations.Impl;
using BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Configuration;
using BepInEx.Logging;
using HarmonyLib;
using LobbyCompatibility.Enums;
using LobbyCompatibility.Features;
using Microsoft.CodeAnalysis;
using TMPro;
using UnityEngine;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("TestAccount666.AnnounceMoonAndWeatherChange")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyDescription("A mod that shows weather warnings and moon route info")]
[assembly: AssemblyFileVersion("2.0.5.0")]
[assembly: AssemblyInformationalVersion("2.0.5+39ac3d3b8d8c6e5045a2f72615a026b442f7f876")]
[assembly: AssemblyProduct("AnnounceMoonAndWeatherChange")]
[assembly: AssemblyTitle("TestAccount666.AnnounceMoonAndWeatherChange")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("2.0.5.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
internal sealed class EmbeddedAttribute : Attribute
{
}
}
namespace System.Runtime.CompilerServices
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)]
internal sealed class NullableAttribute : Attribute
{
public readonly byte[] NullableFlags;
public NullableAttribute(byte P_0)
{
NullableFlags = new byte[1] { P_0 };
}
public NullableAttribute(byte[] P_0)
{
NullableFlags = P_0;
}
}
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)]
internal sealed class NullableContextAttribute : Attribute
{
public readonly byte Flag;
public NullableContextAttribute(byte P_0)
{
Flag = P_0;
}
}
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
internal sealed class RefSafetyRulesAttribute : Attribute
{
public readonly int Version;
public RefSafetyRulesAttribute(int P_0)
{
Version = P_0;
}
}
}
namespace AnnounceMoonAndWeatherChange
{
[BepInPlugin("TestAccount666.AnnounceMoonAndWeatherChange", "AnnounceMoonAndWeatherChange", "2.0.5")]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
public class AnnounceMoonAndWeatherChange : BaseUnityPlugin
{
internal static ConfigManager? configManager;
public static EventHandler registerNowEvent;
public static AnnounceMoonAndWeatherChange Instance { get; private set; }
internal static ManualLogSource Logger { get; private set; }
private static Harmony? Harmony { get; set; }
private void Awake()
{
Logger = ((BaseUnityPlugin)this).Logger;
Instance = this;
if (DependencyChecker.IsLobbyCompatibilityInstalled())
{
Logger.LogInfo((object)"Found LobbyCompatibility Mod, initializing support :)");
LobbyCompatibilitySupport.Initialize();
}
InitializeDefaultAnimations();
registerNowEvent?.Invoke(this, null);
Patch();
if (DependencyChecker.IsWeatherTweaksInstalled())
{
WeatherTweaksSupport.enabled = true;
Logger.LogInfo((object)"WeatherTweaks found! Enabling support for it :)");
}
configManager = new ConfigManager(((BaseUnityPlugin)this).Config);
configManager.HandleConfig();
Logger.LogInfo((object)"TestAccount666.AnnounceMoonAndWeatherChange v2.0.5 has loaded!");
}
internal static void Patch()
{
//IL_000d: Unknown result type (might be due to invalid IL or missing references)
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
//IL_0018: Expected O, but got Unknown
if (Harmony == null)
{
Harmony = new Harmony("TestAccount666.AnnounceMoonAndWeatherChange");
}
Logger.LogDebug((object)"Patching...");
Harmony.PatchAll();
Logger.LogDebug((object)"Finished patching!");
}
internal static void Unpatch()
{
Logger.LogDebug((object)"Unpatching...");
Harmony? harmony = Harmony;
if (harmony != null)
{
harmony.UnpatchSelf();
}
Logger.LogDebug((object)"Finished unpatching!");
}
private static void InitializeDefaultAnimations()
{
SlidingAnimation.Initialize();
FadeAnimation.Initialize();
BlinkingAnimation.Initialize();
}
}
public class ConfigManager
{
private readonly ConfigFile _configFile;
internal ConfigEntry<string> animationType = null;
internal ConfigEntry<string> announceMoonChangeText = null;
internal ConfigEntry<int> scrollSpeed = null;
internal ConfigEntry<bool> showMoonChangeAnnouncement = null;
internal ConfigEntry<bool> showWeatherWarning = null;
internal ConfigEntry<float> textColorBlue = null;
internal ConfigEntry<float> textColorGreen = null;
internal ConfigEntry<float> textColorRed = null;
internal ConfigEntry<int> textFontSize = null;
internal ConfigEntry<string> weatherWarningLowerText = null;
internal ConfigEntry<string> weatherWarningUpperText = null;
internal ConfigManager(ConfigFile configFile)
{
_configFile = configFile;
}
internal void HandleConfig()
{
BindConfigValues();
DeleteOrphanedEntries();
}
private void BindConfigValues()
{
//IL_0103: Unknown result type (might be due to invalid IL or missing references)
//IL_010d: Expected O, but got Unknown
//IL_013a: Unknown result type (might be due to invalid IL or missing references)
//IL_0144: Expected O, but got Unknown
//IL_0178: Unknown result type (might be due to invalid IL or missing references)
//IL_0182: Expected O, but got Unknown
//IL_01b6: Unknown result type (might be due to invalid IL or missing references)
//IL_01c0: Expected O, but got Unknown
//IL_01f4: Unknown result type (might be due to invalid IL or missing references)
//IL_01fe: Expected O, but got Unknown
announceMoonChangeText = _configFile.Bind<string>("Messages", "1. Announce Moon Change Text", "Ship routed to: <MOON>", "The message displayed when moon is changed. <MOON> is replaced with the moon's name");
weatherWarningUpperText = _configFile.Bind<string>("Messages", "2. Weather Warning Upper Text", "!!! WARNING !!!", "The Header Text for the weather warning");
weatherWarningLowerText = _configFile.Bind<string>("Messages", "3. Weather Warning Lower Text", "<MOON> is currently <WEATHER>!", "The body message displayed, if the moon has a weather. <MOON> is replaced with the moon's name. <WEATHER> is replaced with the moon's weather");
showMoonChangeAnnouncement = _configFile.Bind<bool>("Toggles", "1. Show Moon Change Announcement", true, "Whether or not to show the moon change announcement");
showWeatherWarning = _configFile.Bind<bool>("Toggles", "2. Show Weather Warning", true, "Whether or not to show the weather warning");
textFontSize = _configFile.Bind<int>("HUD", "1. Text Font Size", 30, "The font size of the weather warning text");
animationType = _configFile.Bind<string>("HUD", "2. Animation Type", "Sliding", new ConfigDescription("What animation do you want for the weather warning?", (AcceptableValueBase)(object)new AcceptableValueList<string>(AnimationManager.GetAnimationNames().ToArray()), Array.Empty<object>()));
scrollSpeed = _configFile.Bind<int>("HUD", "3. Animation Speed", 100, new ConfigDescription("The speed for the weather warning animation", (AcceptableValueBase)(object)new AcceptableValueRange<int>(1, 200), Array.Empty<object>()));
textColorRed = _configFile.Bind<float>("HUD", "4. Text Color Red", 1f, new ConfigDescription("How much red do you want to have inside your text?", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), Array.Empty<object>()));
textColorGreen = _configFile.Bind<float>("HUD", "5. Text Color Green", 1f, new ConfigDescription("How much green do you want to have inside your text?", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), Array.Empty<object>()));
textColorBlue = _configFile.Bind<float>("HUD", "6. Text Color Blue", 1f, new ConfigDescription("How much blue do you want to have inside your text?", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), Array.Empty<object>()));
AnnounceMoonAndWeatherChange.Logger.LogInfo((object)("Animation set to: " + animationType.Value));
}
private void DeleteOrphanedEntries()
{
PropertyInfo property = ((object)_configFile).GetType().GetProperty("OrphanedEntries", BindingFlags.Instance | BindingFlags.NonPublic);
if (property == null)
{
AnnounceMoonAndWeatherChange.Logger.LogError((object)"Couldn't find orphanedEntriesProp!");
return;
}
Dictionary<ConfigDefinition, string> dictionary = (Dictionary<ConfigDefinition, string>)property.GetValue(_configFile, null);
if (dictionary != null && dictionary.Count > 0)
{
dictionary.Clear();
AnnounceMoonAndWeatherChange.Logger.LogWarning((object)"Unused config entries were deleted. Make sure to check your config!");
_configFile.Save();
}
}
}
internal static class DependencyChecker
{
internal static bool IsWeatherTweaksInstalled()
{
return Chainloader.PluginInfos.Values.Any((PluginInfo metadata) => metadata.Metadata.GUID.Contains("WeatherTweaks"));
}
internal static bool IsLobbyCompatibilityInstalled()
{
return Chainloader.PluginInfos.Values.Any((PluginInfo metadata) => metadata.Metadata.GUID.Contains("LobbyCompatibility"));
}
}
internal static class MessageSender
{
private const string MOON_PLACEHOLDER = "<MOON>";
private const string WEATHER_PLACEHOLDER = "<WEATHER>";
private static readonly int _Display = Animator.StringToHash("display");
private static MethodInfo? _playRandomClipMethod;
private static Action? _playRandomClipExpression;
internal static void SendWeatherWarning()
{
if (IsWeatherWarningEnabled())
{
((Component)HUDManager.Instance).gameObject.GetComponent<WarningAnimation>()?.SpeedUp();
SelectableLevel currentLevel = StartOfRound.Instance.currentLevel;
if (!((Object)(object)currentLevel == (Object)null) && !IsWeatherOnMoonNone(currentLevel))
{
string currentWeather = GetCurrentWeather(currentLevel);
DisplayWeatherWarning(currentLevel, currentWeather);
}
}
}
internal static void SendMoonChangeAnnouncement()
{
if (!IsMoonChangeAnnouncementEnabled())
{
return;
}
SelectableLevel currentLevel = StartOfRound.Instance.currentLevel;
if (!((Object)(object)currentLevel == (Object)null))
{
string text = AnnounceMoonAndWeatherChange.configManager?.announceMoonChangeText.Value;
if (text != null)
{
DisplayMoonChangeAnnouncement(currentLevel, text);
}
}
}
private static bool IsWeatherWarningEnabled()
{
return AnnounceMoonAndWeatherChange.configManager?.showWeatherWarning.Value ?? false;
}
private static bool IsMoonChangeAnnouncementEnabled()
{
return AnnounceMoonAndWeatherChange.configManager?.showMoonChangeAnnouncement.Value ?? false;
}
private static string GetCurrentWeather(SelectableLevel currentLevel)
{
string text = ((object)(LevelWeatherType)(ref currentLevel.currentWeather)).ToString();
if (!WeatherTweaksSupport.enabled)
{
return text;
}
return WeatherTweaksSupport.GetCurrentWeather(currentLevel) ?? text;
}
private static bool IsWeatherOnMoonNone(SelectableLevel selectableLevel)
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Invalid comparison between Unknown and I4
bool flag = (int)selectableLevel.currentWeather == -1;
if (!WeatherTweaksSupport.enabled)
{
return flag;
}
string currentWeather = WeatherTweaksSupport.GetCurrentWeather(selectableLevel);
if (currentWeather != null)
{
return currentWeather.ToLower().Equals("none") && flag;
}
AnnounceMoonAndWeatherChange.Logger.LogInfo((object)"Current Weather is null???");
return flag;
}
private static void DisplayWeatherWarning(SelectableLevel currentLevel, string weather)
{
//IL_017d: Unknown result type (might be due to invalid IL or missing references)
//IL_0182: Unknown result type (might be due to invalid IL or missing references)
string text = AnnounceMoonAndWeatherChange.configManager?.weatherWarningUpperText.Value;
string text2 = AnnounceMoonAndWeatherChange.configManager?.weatherWarningLowerText.Value.Replace("<MOON>", currentLevel.PlanetName).Replace("<WEATHER>", weather);
Type currentAnimation = AnimationManager.GetCurrentAnimation();
WarningAnimation warningAnimation = (WarningAnimation)(object)((Component)HUDManager.Instance).gameObject.AddComponent(currentAnimation);
float? num = AnnounceMoonAndWeatherChange.configManager?.textColorRed.Value;
float? num2 = AnnounceMoonAndWeatherChange.configManager?.textColorGreen.Value;
float? num3 = AnnounceMoonAndWeatherChange.configManager?.textColorBlue.Value;
if (!num.HasValue || !num2.HasValue || !num3.HasValue)
{
AnnounceMoonAndWeatherChange.Logger.LogError((object)"Couldn't set text color!");
AnnounceMoonAndWeatherChange.Logger.LogError((object)$"Red: {num}");
AnnounceMoonAndWeatherChange.Logger.LogError((object)$"Green: {num2}");
AnnounceMoonAndWeatherChange.Logger.LogError((object)$"Blue: {num3}");
return;
}
warningAnimation.textColor = new Color(num.Value, num2.Value, num3.Value);
warningAnimation.fontSize = (AnnounceMoonAndWeatherChange.configManager?.textFontSize.Value).Value;
warningAnimation.animationSpeed = AnnounceMoonAndWeatherChange.configManager.scrollSpeed.Value;
warningAnimation.text = (text + "\n" + text2).Trim();
if (_playRandomClipExpression != null)
{
_playRandomClipExpression();
}
else
{
FetchAndExecutePlayRandomClipMethod();
}
}
private static void DisplayMoonChangeAnnouncement(SelectableLevel currentLevel, string announceMoonChangeText)
{
HUDManager instance = HUDManager.Instance;
((TMP_Text)instance.deviceChangeText).text = announceMoonChangeText.Replace("<MOON>", currentLevel.PlanetName);
instance.deviceChangeAnimator.SetTrigger(_Display);
}
private static void FetchAndExecutePlayRandomClipMethod()
{
if ((object)_playRandomClipMethod == null)
{
_playRandomClipMethod = typeof(RoundManager).GetMethod("PlayRandomClip", BindingFlags.Static | BindingFlags.Public);
}
if ((object)_playRandomClipMethod != null)
{
Expression[] requiredParameters = GetRequiredParameters();
MethodCallExpression body = Expression.Call(_playRandomClipMethod, requiredParameters);
Expression<Action> expression = Expression.Lambda<Action>(body, Array.Empty<ParameterExpression>());
_playRandomClipExpression = expression.Compile();
_playRandomClipExpression();
}
}
private static Expression[] GetRequiredParameters()
{
AnnounceMoonAndWeatherChange.Logger.LogInfo((object)_playRandomClipMethod?.GetParameters().Length);
MethodInfo method = AccessTools.Method(typeof(MessageSender), "GetUIAudio", (Type[])null, (Type[])null);
MethodInfo method2 = AccessTools.Method(typeof(MessageSender), "GetWarningSfx", (Type[])null, (Type[])null);
int? num = _playRandomClipMethod?.GetParameters().Length;
if (1 == 0)
{
}
Expression[] result = num switch
{
5 => new Expression[5]
{
Expression.Call(method),
Expression.Call(method2),
Expression.Constant(true),
Expression.Constant(1f),
Expression.Constant(0)
},
6 => new Expression[6]
{
Expression.Call(method),
Expression.Call(method2),
Expression.Constant(true),
Expression.Constant(1f),
Expression.Constant(0),
Expression.Constant(1000)
},
_ => throw new NotImplementedException("You're using an unsupported version of Lethal Company. Please report this.")
{
HelpLink = "https://github.com/Test-Account666/LethalCompany-AnnounceMoonAndWeatherChange/issues/",
Source = "https://github.com/Test-Account666/LethalCompany-AnnounceMoonAndWeatherChange"
},
};
if (1 == 0)
{
}
return result;
}
private static AudioSource GetUIAudio()
{
return HUDManager.Instance.UIAudio;
}
private static AudioClip[] GetWarningSfx()
{
return HUDManager.Instance.warningSFX;
}
}
public static class WeatherTweaksSupport
{
internal static bool enabled;
private static Type? _variablesType;
private static MethodInfo? _getPlanetCurrentWeatherMethod;
public static string? GetCurrentWeather(SelectableLevel selectableLevel)
{
string result = ((object)(LevelWeatherType)(ref selectableLevel.currentWeather)).ToString();
if (_variablesType == null && !FetchVariablesType())
{
return result;
}
if (_getPlanetCurrentWeatherMethod == null && !FetchGetPlanetCurrentWeatherMethod())
{
return result;
}
if (_getPlanetCurrentWeatherMethod == null)
{
return result;
}
object[] parameters;
switch (_getPlanetCurrentWeatherMethod.GetParameters().Length)
{
case 2:
parameters = new object[2] { selectableLevel, true };
break;
case 1:
parameters = new object[1] { selectableLevel };
break;
default:
AnnounceMoonAndWeatherChange.Logger.LogError((object)"You're using an unsupported version of WeatherTweaks!");
enabled = false;
return null;
}
return _getPlanetCurrentWeatherMethod?.Invoke(null, parameters) as string;
}
private static bool FetchVariablesType()
{
Type type = AccessTools.TypeByName("WeatherTweaks.Variables");
if (type == null)
{
AnnounceMoonAndWeatherChange.Logger.LogError((object)"[WT Support] Couldn't find Variables type!");
return false;
}
_variablesType = type;
return true;
}
private static bool FetchGetPlanetCurrentWeatherMethod()
{
MethodInfo methodInfo = AccessTools.DeclaredMethod(_variablesType, "GetPlanetCurrentWeather", new Type[1] { typeof(SelectableLevel) }, (Type[])null);
if ((object)methodInfo == null)
{
methodInfo = AccessTools.DeclaredMethod(_variablesType, "GetPlanetCurrentWeather", new Type[2]
{
typeof(SelectableLevel),
typeof(bool)
}, (Type[])null);
}
if (methodInfo == null)
{
AnnounceMoonAndWeatherChange.Logger.LogError((object)"[WT Support] Couldn't find GetPlanetCurrentWeather method!");
return false;
}
_getPlanetCurrentWeatherMethod = methodInfo;
return true;
}
}
public static class MyPluginInfo
{
public const string PLUGIN_GUID = "TestAccount666.AnnounceMoonAndWeatherChange";
public const string PLUGIN_NAME = "AnnounceMoonAndWeatherChange";
public const string PLUGIN_VERSION = "2.0.5";
}
}
namespace AnnounceMoonAndWeatherChange.WeatherWarningAnimations
{
public class AnimationDictionary : Dictionary<string, Type>
{
public new void Add(string key, Type value)
{
if (string.IsNullOrEmpty(key) || string.IsNullOrWhiteSpace(key))
{
throw new ArgumentException("Animation name can't be null or empty!");
}
if (!value.IsSubclassOf(typeof(WarningAnimation)))
{
throw new ArgumentException("Animation class has to be of type WarningAnimation!");
}
base.Add(key, value);
}
}
public static class AnimationManager
{
private const string DEFAULT_ANIMATION = "Sliding";
private static readonly AnimationDictionary _Animations = new AnimationDictionary();
public static Type? GetAnimation(string? animation)
{
if (string.IsNullOrEmpty(animation))
{
return null;
}
Type valueOrDefault = _Animations.GetValueOrDefault(animation.ToLower());
return valueOrDefault ?? _Animations.GetValueOrDefault("Sliding".ToLower());
}
public static Type? GetCurrentAnimation()
{
return GetAnimation(AnnounceMoonAndWeatherChange.configManager?.animationType.Value.ToLower());
}
public static void AddAnimation(string name, Type animationType)
{
name = name.ToLower();
_Animations.Add(name, animationType);
}
public static List<string> GetAnimationNames()
{
return _Animations.Keys.ToList();
}
}
public abstract class WarningAnimation : MonoBehaviour
{
public string text = "";
public Color textColor = Color.white;
public int fontSize = 30;
public float animationSpeed = 100f;
protected float internalSpeedMultiplier = 1f;
protected Vector2 position = new Vector2(10f, 10f);
protected bool stopRendering;
protected Vector2 textSize = Vector2.zero;
protected GUIStyle? textStyle;
protected Texture2D texture2D = null;
public abstract string AnimationName { get; }
private void Start()
{
//IL_004b: Unknown result type (might be due to invalid IL or missing references)
//IL_0055: Expected O, but got Unknown
AnnounceMoonAndWeatherChange.Logger.LogDebug((object)"Starting animation!");
string directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
if (!string.IsNullOrEmpty(directoryName))
{
string path = Path.Combine(directoryName, "background.png");
byte[] array = File.ReadAllBytes(path);
texture2D = new Texture2D(256, 256);
ImageConversion.LoadImage(texture2D, array);
}
}
private void OnDestroy()
{
AnnounceMoonAndWeatherChange.Logger.LogDebug((object)"Stopping animation this instant!");
}
private void OnGUI()
{
//IL_007d: Unknown result type (might be due to invalid IL or missing references)
//IL_0087: Expected O, but got Unknown
//IL_0082: Unknown result type (might be due to invalid IL or missing references)
//IL_0087: Unknown result type (might be due to invalid IL or missing references)
//IL_0028: Unknown result type (might be due to invalid IL or missing references)
//IL_002d: Unknown result type (might be due to invalid IL or missing references)
//IL_003a: Unknown result type (might be due to invalid IL or missing references)
//IL_003f: Unknown result type (might be due to invalid IL or missing references)
//IL_0049: Expected O, but got Unknown
//IL_004a: Unknown result type (might be due to invalid IL or missing references)
//IL_0052: Unknown result type (might be due to invalid IL or missing references)
//IL_0053: Unknown result type (might be due to invalid IL or missing references)
//IL_0058: Unknown result type (might be due to invalid IL or missing references)
//IL_005a: Unknown result type (might be due to invalid IL or missing references)
//IL_006a: Expected O, but got Unknown
//IL_0070: Expected O, but got Unknown
if (stopRendering)
{
Object.Destroy((Object)(object)this);
return;
}
if (textStyle == null)
{
textStyle = new GUIStyle(GUI.skin.label)
{
fontSize = fontSize,
padding = new RectOffset(5, 5, 5, 5),
alignment = (TextAnchor)4,
normal = new GUIStyleState
{
textColor = textColor
}
};
}
textSize = textStyle.CalcSize(new GUIContent(text));
OnGuiUpdate();
}
public virtual void SpeedUp()
{
internalSpeedMultiplier = 4.5f;
}
protected abstract void OnGuiUpdate();
}
}
namespace AnnounceMoonAndWeatherChange.WeatherWarningAnimations.Impl
{
public class BlinkingAnimation : WarningAnimation
{
private const int MAX_PULSE_TIMES = 4;
private const float ALPHA_CHANGE_VALUE = 0.01f;
private float _alpha;
private int _pulseTimes;
private bool _started;
public override string AnimationName => "Blinking";
internal static void Initialize()
{
AnimationManager.AddAnimation("Blinking", typeof(BlinkingAnimation));
}
protected override void OnGuiUpdate()
{
//IL_003d: Unknown result type (might be due to invalid IL or missing references)
//IL_0042: Unknown result type (might be due to invalid IL or missing references)
//IL_0091: Unknown result type (might be due to invalid IL or missing references)
//IL_00cb: Unknown result type (might be due to invalid IL or missing references)
//IL_00d8: Unknown result type (might be due to invalid IL or missing references)
//IL_00df: Unknown result type (might be due to invalid IL or missing references)
if (!_started)
{
_started = true;
StartFadeIn();
}
position = new Vector2((float)Screen.width - textSize.x, (float)Screen.height / 2f);
Color color = default(Color);
((Color)(ref color))..ctor(1f, 0f, 0f, _alpha);
Color color2 = default(Color);
((Color)(ref color2))..ctor(textColor.r, textColor.g, textColor.b, _alpha);
GUI.color = color;
Rect val = default(Rect);
((Rect)(ref val))..ctor(position.x, position.y, textSize.x, textSize.y);
GUI.DrawTexture(val, (Texture)(object)texture2D);
GUI.color = color2;
GUI.Label(val, text, textStyle);
}
public override void SpeedUp()
{
stopRendering = true;
}
public void StartFadeOut()
{
((MonoBehaviour)this).StartCoroutine(FadeOut());
}
public void StartFadeIn()
{
((MonoBehaviour)this).StartCoroutine(FadeIn());
}
private IEnumerator FadeOut()
{
while (_alpha > 0f)
{
_alpha -= 0.01f * Math.Max(animationSpeed * internalSpeedMultiplier * Time.deltaTime, 0f);
yield return null;
}
_alpha = 0f;
StartFadeIn();
}
private IEnumerator FadeIn()
{
if (_pulseTimes >= 4)
{
stopRendering = true;
yield break;
}
while (_alpha < 1f)
{
_alpha += Math.Min(0.01f * (animationSpeed * internalSpeedMultiplier * Time.deltaTime), 1f);
yield return null;
}
_pulseTimes++;
_alpha = 1f;
StartFadeOut();
}
}
public class FadeAnimation : WarningAnimation
{
private const float ALPHA_CHANGE_VALUE = 0.01f;
private float _alpha;
private int _pulseTimes;
private bool _started;
public override string AnimationName => "Fading";
internal static void Initialize()
{
AnimationManager.AddAnimation("Fading", typeof(FadeAnimation));
}
protected override void OnGuiUpdate()
{
//IL_003d: Unknown result type (might be due to invalid IL or missing references)
//IL_0042: Unknown result type (might be due to invalid IL or missing references)
//IL_0091: Unknown result type (might be due to invalid IL or missing references)
//IL_00cb: Unknown result type (might be due to invalid IL or missing references)
//IL_00d8: Unknown result type (might be due to invalid IL or missing references)
//IL_00df: Unknown result type (might be due to invalid IL or missing references)
if (!_started)
{
_started = true;
StartFadeIn();
}
position = new Vector2((float)Screen.width - textSize.x, (float)Screen.height / 2f);
Color color = default(Color);
((Color)(ref color))..ctor(1f, 0f, 0f, _alpha);
Color color2 = default(Color);
((Color)(ref color2))..ctor(textColor.r, textColor.g, textColor.b, _alpha);
GUI.color = color;
Rect val = default(Rect);
((Rect)(ref val))..ctor(position.x, position.y, textSize.x, textSize.y);
GUI.DrawTexture(val, (Texture)(object)texture2D);
GUI.color = color2;
GUI.Label(val, text, textStyle);
}
public override void SpeedUp()
{
stopRendering = true;
}
public void StartFadeOut()
{
((MonoBehaviour)this).StartCoroutine(FadeOut());
}
public void StartFadeIn()
{
((MonoBehaviour)this).StartCoroutine(FadeIn());
}
private IEnumerator FadeOut()
{
while (_alpha > 0f)
{
_alpha -= 0.01f * Math.Max(animationSpeed * internalSpeedMultiplier * Time.deltaTime, 0f);
yield return null;
}
_alpha = 0f;
StartFadeIn();
}
private IEnumerator FadeIn()
{
if (_pulseTimes >= 1)
{
stopRendering = true;
yield break;
}
while (_alpha < 1f)
{
_alpha += Math.Min(0.01f * (animationSpeed * internalSpeedMultiplier * Time.deltaTime), 1f);
yield return null;
}
_pulseTimes++;
_alpha = 1f;
yield return (object)new WaitForSeconds(3f);
StartFadeOut();
}
}
public class SlidingAnimation : WarningAnimation
{
private readonly Vector2 _slideDirection = new Vector2(1f, 0f);
private bool _started;
public override string AnimationName => "Sliding";
internal static void Initialize()
{
AnimationManager.AddAnimation("Sliding", typeof(SlidingAnimation));
}
protected override void OnGuiUpdate()
{
//IL_0035: Unknown result type (might be due to invalid IL or missing references)
//IL_003b: Unknown result type (might be due to invalid IL or missing references)
//IL_0053: Unknown result type (might be due to invalid IL or missing references)
//IL_0058: Unknown result type (might be due to invalid IL or missing references)
//IL_005d: Unknown result type (might be due to invalid IL or missing references)
//IL_0095: Unknown result type (might be due to invalid IL or missing references)
//IL_00a2: Unknown result type (might be due to invalid IL or missing references)
//IL_0028: Unknown result type (might be due to invalid IL or missing references)
//IL_002d: Unknown result type (might be due to invalid IL or missing references)
if (!_started)
{
_started = true;
position = new Vector2(0f - textSize.x, 10f);
}
position += _slideDirection * (animationSpeed * internalSpeedMultiplier * Time.deltaTime);
Rect val = default(Rect);
((Rect)(ref val))..ctor(position.x, position.y, textSize.x, textSize.y);
GUI.DrawTexture(val, (Texture)(object)texture2D);
GUI.Label(val, text, textStyle);
if (position.x > textSize.x + (float)Screen.width)
{
stopRendering = true;
}
}
}
}
namespace AnnounceMoonAndWeatherChange.Patches
{
[HarmonyPatch(typeof(StartOfRound))]
public static class StartOfRoundPatch
{
private static bool _gameFinishedLoading;
[HarmonyPatch("Awake")]
[HarmonyPrefix]
public static void BeforeAwake()
{
_gameFinishedLoading = false;
}
[HarmonyPatch("SetShipReadyToLand")]
[HarmonyPostfix]
public static void AfterSetShipReadyToLand()
{
MessageSender.SendWeatherWarning();
}
[HarmonyPatch("ChangeLevel")]
[HarmonyPostfix]
public static void AfterChangeLevel()
{
if (!_gameFinishedLoading)
{
Timer timer = null;
timer = new Timer(delegate
{
_gameFinishedLoading = true;
HandleChangeLevel();
timer?.Dispose();
}, null, 3500L, -1L);
}
else
{
HandleChangeLevel();
}
}
private static void HandleChangeLevel()
{
MessageSender.SendWeatherWarning();
MessageSender.SendMoonChangeAnnouncement();
}
}
}
namespace AnnounceMoonAndWeatherChange.LobbyCompatibility
{
internal static class LobbyCompatibilitySupport
{
internal static void Initialize()
{
PluginHelper.RegisterPlugin("TestAccount666.AnnounceMoonAndWeatherChange", new Version("2.0.5"), (CompatibilityLevel)0, (VersionStrictness)2);
}
}
}