using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using BepInEx;
using FMODUnity;
using Microsoft.CodeAnalysis;
using Mirror;
using UnityEngine;
using UnityEngine.SceneManagement;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("EmpressMeteors")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("EmpressMeteors")]
[assembly: AssemblyTitle("EmpressMeteors")]
[assembly: AssemblyVersion("1.0.0.0")]
[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.Module, AllowMultiple = false, Inherited = false)]
internal sealed class RefSafetyRulesAttribute : Attribute
{
public readonly int Version;
public RefSafetyRulesAttribute(int P_0)
{
Version = P_0;
}
}
}
namespace Empress.SuperBattleGolf.Meteors
{
[BepInPlugin("empress.superbattlegolf.meteors", "Empress Meteors", "1.0.0")]
public sealed class EmpressMeteorsPlugin : BaseUnityPlugin
{
private readonly struct ImpactSample
{
public readonly Vector3 ClosestPoint;
public readonly float DistanceSquared;
public ImpactSample(Vector3 closestPoint, float distanceSquared)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
ClosestPoint = closestPoint;
DistanceSquared = distanceSquared;
}
}
private struct MeteorSpawnMessage : NetworkMessage
{
public ulong Id;
public string SceneName;
public double SpawnTime;
public double ImpactTime;
public Vector3 StartPoint;
public Vector3 ImpactPoint;
public Vector3 ImpactNormal;
public float Scale;
public float ImpactRadius;
public uint Seed;
}
private sealed class MeteorVisual
{
private readonly MeteorSpawnMessage message;
private readonly GameObject meteorRoot;
private readonly GameObject warningRoot;
private readonly Transform meteorTransform;
private readonly Transform warningTransform;
private readonly TrailRenderer trail;
private readonly LineRenderer warningRing;
private readonly float swayStrength;
private readonly float swaySpeed;
private readonly float rotationSpeed;
private readonly float phase;
private readonly Renderer meteorRenderer;
private bool meteorActivated;
private bool impacted;
private bool disposed;
public MeteorVisual(MeteorSpawnMessage message, Material meteorMaterial, Material warningMaterial)
{
//IL_00cf: 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)
//IL_00ea: Unknown result type (might be due to invalid IL or missing references)
//IL_00f4: Unknown result type (might be due to invalid IL or missing references)
//IL_01e1: Unknown result type (might be due to invalid IL or missing references)
//IL_01eb: Expected O, but got Unknown
//IL_0210: Unknown result type (might be due to invalid IL or missing references)
//IL_0216: Unknown result type (might be due to invalid IL or missing references)
//IL_0220: Unknown result type (might be due to invalid IL or missing references)
//IL_0225: Unknown result type (might be due to invalid IL or missing references)
//IL_0235: Unknown result type (might be due to invalid IL or missing references)
//IL_023b: Unknown result type (might be due to invalid IL or missing references)
//IL_0240: Unknown result type (might be due to invalid IL or missing references)
//IL_02d9: Unknown result type (might be due to invalid IL or missing references)
this.message = message;
swayStrength = Mathf.Lerp(0.35f, 1f, NormalizeSeed(11u));
swaySpeed = Mathf.Lerp(5f, 8f, NormalizeSeed(17u));
rotationSpeed = Mathf.Lerp(250f, 420f, NormalizeSeed(23u));
phase = NormalizeSeed(31u) * MathF.PI * 2f;
meteorRoot = GameObject.CreatePrimitive((PrimitiveType)0);
((Object)meteorRoot).name = $"EmpressMeteor_{message.Id}";
((Object)meteorRoot).hideFlags = (HideFlags)61;
meteorTransform = meteorRoot.transform;
meteorTransform.position = message.StartPoint;
meteorTransform.localScale = Vector3.one * message.Scale * 0.9f;
Collider component = meteorRoot.GetComponent<Collider>();
if ((Object)(object)component != (Object)null)
{
Object.Destroy((Object)(object)component);
}
meteorRenderer = meteorRoot.GetComponent<Renderer>();
if ((Object)(object)meteorRenderer != (Object)null)
{
meteorRenderer.sharedMaterial = meteorMaterial;
}
trail = meteorRoot.AddComponent<TrailRenderer>();
((Renderer)trail).sharedMaterial = warningMaterial;
trail.time = 0.25f;
trail.minVertexDistance = 0.05f;
trail.widthCurve = CreateTrailWidthCurve(message.Scale);
trail.colorGradient = CreateTrailGradient();
trail.alignment = (LineAlignment)0;
trail.emitting = false;
meteorRoot.SetActive(false);
warningRoot = new GameObject($"EmpressMeteorWarning_{message.Id}");
((Object)warningRoot).hideFlags = (HideFlags)61;
warningTransform = warningRoot.transform;
warningTransform.position = message.ImpactPoint + message.ImpactNormal * 0.08f;
warningTransform.rotation = Quaternion.FromToRotation(Vector3.up, message.ImpactNormal);
warningRing = warningRoot.AddComponent<LineRenderer>();
warningRing.loop = true;
warningRing.useWorldSpace = false;
((Renderer)warningRing).sharedMaterial = warningMaterial;
warningRing.widthMultiplier = 0.22f;
warningRing.alignment = (LineAlignment)0;
warningRing.positionCount = 40;
for (int i = 0; i < 40; i++)
{
float num = (float)i / 40f * MathF.PI * 2f;
warningRing.SetPosition(i, new Vector3(Mathf.Cos(num), 0f, Mathf.Sin(num)));
}
UpdateWarning(0f, 0f);
}
public bool Tick(double now)
{
//IL_00db: Unknown result type (might be due to invalid IL or missing references)
//IL_00e6: Unknown result type (might be due to invalid IL or missing references)
//IL_00ec: Unknown result type (might be due to invalid IL or missing references)
//IL_00f1: Unknown result type (might be due to invalid IL or missing references)
//IL_00f2: Unknown result type (might be due to invalid IL or missing references)
//IL_0132: Unknown result type (might be due to invalid IL or missing references)
//IL_013d: Unknown result type (might be due to invalid IL or missing references)
//IL_0149: Unknown result type (might be due to invalid IL or missing references)
//IL_014e: Unknown result type (might be due to invalid IL or missing references)
//IL_0153: Unknown result type (might be due to invalid IL or missing references)
//IL_015a: Unknown result type (might be due to invalid IL or missing references)
//IL_0184: Unknown result type (might be due to invalid IL or missing references)
//IL_018e: Unknown result type (might be due to invalid IL or missing references)
//IL_019f: Unknown result type (might be due to invalid IL or missing references)
//IL_01af: Unknown result type (might be due to invalid IL or missing references)
//IL_01c4: Unknown result type (might be due to invalid IL or missing references)
//IL_0231: Unknown result type (might be due to invalid IL or missing references)
if (disposed)
{
return false;
}
if (impacted)
{
return false;
}
float warmupProgress = Mathf.Clamp01((float)((now - (message.SpawnTime - 1.100000023841858)) / 1.100000023841858));
float num = Mathf.Clamp01((float)((now - message.SpawnTime) / (message.ImpactTime - message.SpawnTime)));
UpdateWarning(warmupProgress, num);
if (now >= message.ImpactTime)
{
TriggerImpact();
return false;
}
if (now < message.SpawnTime)
{
return true;
}
if (!meteorActivated)
{
meteorActivated = true;
meteorRoot.SetActive(true);
trail.emitting = true;
}
float num2 = 1f - Mathf.Pow(1f - num, 3f);
Vector3 val = Vector3.Lerp(message.StartPoint, message.ImpactPoint, num2);
val += new Vector3(Mathf.Sin(phase + num * swaySpeed * 3.1f), 0f, Mathf.Cos(phase * 0.8f + num * swaySpeed * 2.4f)) * swayStrength * (1f - num);
meteorTransform.position = val;
meteorTransform.Rotate(new Vector3(rotationSpeed, rotationSpeed * 0.72f, rotationSpeed * 0.54f) * Time.deltaTime, (Space)1);
meteorTransform.localScale = Vector3.one * message.Scale * Mathf.Lerp(0.7f, 1.15f, num);
if ((Object)(object)meteorRenderer != (Object)null)
{
float num3 = Mathf.Lerp(0.8f, 1.25f, Mathf.PingPong(Time.time * 5.5f + phase, 1f));
meteorRenderer.material.color = new Color(1f, 0.32f + num3 * 0.12f, 0.08f, 0.95f);
}
return true;
}
public void Dispose()
{
if (!disposed)
{
disposed = true;
if ((Object)(object)meteorRoot != (Object)null)
{
Object.Destroy((Object)(object)meteorRoot);
}
if ((Object)(object)warningRoot != (Object)null)
{
Object.Destroy((Object)(object)warningRoot);
}
}
}
private void TriggerImpact()
{
//IL_001f: Unknown result type (might be due to invalid IL or missing references)
//IL_0024: Unknown result type (might be due to invalid IL or missing references)
//IL_002b: Unknown result type (might be due to invalid IL or missing references)
//IL_0031: Unknown result type (might be due to invalid IL or missing references)
//IL_004d: Unknown result type (might be due to invalid IL or missing references)
//IL_008e: Unknown result type (might be due to invalid IL or missing references)
//IL_009d: Unknown result type (might be due to invalid IL or missing references)
//IL_00a8: Unknown result type (might be due to invalid IL or missing references)
//IL_0074: Unknown result type (might be due to invalid IL or missing references)
if (impacted)
{
return;
}
impacted = true;
if (SingletonNetworkBehaviour<VfxManager>.HasInstance)
{
VfxManager.PlayPooledVfxLocalOnly((VfxType)25, message.ImpactPoint, Quaternion.identity, default(Vector3), 0u, false, 0f, (Action<PoolableParticleSystem>)null);
}
if (SingletonBehaviour<GameManager>.HasInstance)
{
if (GameplayCameraManager.ShouldPlayImpactFrameForExplosion(message.ImpactPoint, message.ImpactRadius, GameManager.CameraGameplaySettings.LandmineImpactFrameDistanceSquared))
{
CameraModuleController.PlayImpactFrame(message.ImpactPoint);
}
CameraModuleController.Shake(GameManager.CameraGameplaySettings.LandmineExplosionScreenshakeSettings, message.ImpactPoint);
RuntimeManager.PlayOneShot(GameManager.AudioSettings.LandmineExplosionEvent, message.ImpactPoint);
}
Dispose();
}
private void UpdateWarning(float warmupProgress, float flightProgress)
{
//IL_0060: Unknown result type (might be due to invalid IL or missing references)
//IL_00e9: Unknown result type (might be due to invalid IL or missing references)
//IL_00f5: Unknown result type (might be due to invalid IL or missing references)
if (!((Object)(object)warningTransform == (Object)null) && !((Object)(object)warningRing == (Object)null))
{
float num = Mathf.Lerp(1.45f, 1f, Mathf.Clamp01(flightProgress + warmupProgress * 0.4f));
warningTransform.localScale = new Vector3(message.ImpactRadius * num, 1f, message.ImpactRadius * num);
warningRing.widthMultiplier = Mathf.Lerp(0.08f, 0.22f, warmupProgress);
float num2 = Mathf.Lerp(0.2f, 0.95f, warmupProgress);
float num3 = 0.65f + Mathf.PingPong(Time.time * Mathf.Lerp(1.8f, 6f, warmupProgress) + phase, 0.35f);
Color val = default(Color);
((Color)(ref val))..ctor(1f, 0.45f + num3 * 0.2f, 0.08f, num2);
warningRing.startColor = val;
warningRing.endColor = val;
}
}
private float NormalizeSeed(uint salt)
{
return (float)((message.Seed ^ (salt * 1103515245)) % 1000) / 999f;
}
private static AnimationCurve CreateTrailWidthCurve(float scale)
{
//IL_0014: Unknown result type (might be due to invalid IL or missing references)
//IL_0019: Unknown result type (might be due to invalid IL or missing references)
//IL_002a: Unknown result type (might be due to invalid IL or missing references)
//IL_002f: Unknown result type (might be due to invalid IL or missing references)
//IL_0034: Unknown result type (might be due to invalid IL or missing references)
//IL_003a: Expected O, but got Unknown
return new AnimationCurve((Keyframe[])(object)new Keyframe[2]
{
new Keyframe(0f, 0.65f * scale),
new Keyframe(1f, 0f)
});
}
private static Gradient CreateTrailGradient()
{
//IL_0000: Unknown result type (might be due to invalid IL or missing references)
//IL_0006: Expected O, but got Unknown
//IL_001e: 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_0043: Unknown result type (might be due to invalid IL or missing references)
//IL_004d: 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_0068: Unknown result type (might be due to invalid IL or missing references)
//IL_0072: Unknown result type (might be due to invalid IL or missing references)
//IL_0077: Unknown result type (might be due to invalid IL or missing references)
//IL_008e: Unknown result type (might be due to invalid IL or missing references)
//IL_0093: Unknown result type (might be due to invalid IL or missing references)
//IL_00a4: Unknown result type (might be due to invalid IL or missing references)
//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
//IL_00ba: Unknown result type (might be due to invalid IL or missing references)
//IL_00bf: Unknown result type (might be due to invalid IL or missing references)
Gradient val = new Gradient();
val.SetKeys((GradientColorKey[])(object)new GradientColorKey[3]
{
new GradientColorKey(new Color(1f, 0.8f, 0.45f), 0f),
new GradientColorKey(new Color(1f, 0.32f, 0.05f), 0.4f),
new GradientColorKey(new Color(0.25f, 0.05f, 0.02f), 1f)
}, (GradientAlphaKey[])(object)new GradientAlphaKey[3]
{
new GradientAlphaKey(0.95f, 0f),
new GradientAlphaKey(0.7f, 0.5f),
new GradientAlphaKey(0f, 1f)
});
return val;
}
}
private const string PluginGuid = "empress.superbattlegolf.meteors";
private const string PluginName = "Empress Meteors";
private const string PluginVersion = "1.0.0";
private const float SpawnLeadTime = 1.1f;
private const float FallDuration = 1.25f;
private const float BurstSpacing = 0.28f;
private const float FirstMeteorDelay = 2.5f;
private const float MinMeteorInterval = 6f;
private const float MaxMeteorInterval = 9f;
private const float HandlerRefreshInterval = 0.5f;
private const int WarningSegments = 40;
private static bool mirrorTypesRegistered;
private readonly Collider[] impactBuffer = (Collider[])(object)new Collider[256];
private readonly List<PlayerInfo> targetBuffer = new List<PlayerInfo>(16);
private readonly List<MeteorSpawnMessage> pendingImpacts = new List<MeteorSpawnMessage>(16);
private readonly List<ulong> completedMeteorIds = new List<ulong>(16);
private readonly Dictionary<ulong, MeteorVisual> meteorVisuals = new Dictionary<ulong, MeteorVisual>();
private readonly Dictionary<Hittable, ImpactSample> impactSamples = new Dictionary<Hittable, ImpactSample>();
private Material meteorMaterial;
private Material warningMaterial;
private double nextMeteorTime = double.NaN;
private double nextHandlerRefreshTime;
private ulong nextMeteorId = 1uL;
private bool landmineTransfersToGolfCartPassengers = true;
private bool lastClientActive;
private bool lastServerActive;
private MatchState lastMatchState = (MatchState)(-1);
private void Awake()
{
//IL_0015: Unknown result type (might be due to invalid IL or missing references)
//IL_0039: Unknown result type (might be due to invalid IL or missing references)
meteorMaterial = CreateMaterial(new Color(1f, 0.4f, 0.1f, 0.95f));
warningMaterial = CreateMaterial(new Color(1f, 0.65f, 0.2f, 0.85f));
RegisterMirrorTypes();
EnsureNetworkHooks(force: true);
TryRefreshLandmineTransferSetting();
SceneManager.sceneLoaded += OnSceneLoaded;
}
private void OnDestroy()
{
SceneManager.sceneLoaded -= OnSceneLoaded;
NetworkClient.UnregisterHandler<MeteorSpawnMessage>();
NetworkServer.UnregisterHandler<MeteorSpawnMessage>();
ClearMeteors();
pendingImpacts.Clear();
impactSamples.Clear();
if ((Object)(object)meteorMaterial != (Object)null)
{
Object.Destroy((Object)(object)meteorMaterial);
}
if ((Object)(object)warningMaterial != (Object)null)
{
Object.Destroy((Object)(object)warningMaterial);
}
}
private void Update()
{
double now = GetNow();
EnsureNetworkHooks(force: false);
TrackMatchState(now);
TickLocalMeteors(now);
if (NetworkServer.active)
{
TickHost(now);
}
}
private void TickHost(double now)
{
ResolvePendingImpacts(now);
if (!CanSpawnMeteors())
{
nextMeteorTime = double.NaN;
return;
}
if (double.IsNaN(nextMeteorTime))
{
ScheduleNextMeteor(now);
}
if (!(now < nextMeteorTime))
{
SpawnMeteorBurst(now);
ScheduleNextMeteor(now);
}
}
private void ResolvePendingImpacts(double now)
{
for (int num = pendingImpacts.Count - 1; num >= 0; num--)
{
MeteorSpawnMessage message = pendingImpacts[num];
if (!(now < message.ImpactTime))
{
pendingImpacts.RemoveAt(num);
ResolveImpact(message);
}
}
}
private void ResolveImpact(MeteorSpawnMessage message)
{
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
//IL_000d: Unknown result type (might be due to invalid IL or missing references)
//IL_0036: Unknown result type (might be due to invalid IL or missing references)
//IL_004c: Unknown result type (might be due to invalid IL or missing references)
//IL_007e: Unknown result type (might be due to invalid IL or missing references)
//IL_0083: Unknown result type (might be due to invalid IL or missing references)
//IL_0088: Unknown result type (might be due to invalid IL or missing references)
//IL_008a: Unknown result type (might be due to invalid IL or missing references)
//IL_008d: Unknown result type (might be due to invalid IL or missing references)
//IL_0092: Unknown result type (might be due to invalid IL or missing references)
//IL_0097: Unknown result type (might be due to invalid IL or missing references)
//IL_00a4: Unknown result type (might be due to invalid IL or missing references)
if (BNetworkManager.IsChangingSceneOrShuttingDown)
{
return;
}
Scene activeScene = SceneManager.GetActiveScene();
if (!string.Equals(((Scene)(ref activeScene)).name, message.SceneName, StringComparison.Ordinal))
{
return;
}
TryRefreshLandmineTransferSetting();
impactSamples.Clear();
int num = Physics.OverlapSphereNonAlloc(message.ImpactPoint, message.ImpactRadius, impactBuffer, LayerMask.op_Implicit(GameManager.LayerSettings.LandmineHittablesMask), (QueryTriggerInteraction)1);
for (int i = 0; i < num; i++)
{
Collider val = impactBuffer[i];
impactBuffer[i] = null;
if (!((Object)(object)val == (Object)null))
{
Vector3 val2 = val.ClosestPoint(message.ImpactPoint);
Vector3 val3 = val2 - message.ImpactPoint;
float sqrMagnitude = ((Vector3)(ref val3)).sqrMagnitude;
QueueColliderImpact(val, val2, sqrMagnitude);
}
}
foreach (KeyValuePair<Hittable, ImpactSample> impactSample in impactSamples)
{
ApplyLandmineHit(impactSample.Key, impactSample.Value, message);
}
impactSamples.Clear();
}
private void QueueColliderImpact(Collider collider, Vector3 closestPoint, float distanceSquared)
{
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
//IL_002c: Unknown result type (might be due to invalid IL or missing references)
PlayerInfo componentInParent = ((Component)collider).GetComponentInParent<PlayerInfo>();
if ((Object)(object)componentInParent != (Object)null)
{
QueuePlayerImpact(componentInParent, closestPoint, distanceSquared);
return;
}
GolfCartInfo componentInParent2 = ((Component)collider).GetComponentInParent<GolfCartInfo>();
if ((Object)(object)componentInParent2 != (Object)null)
{
QueueGolfCartImpact(componentInParent2, closestPoint, distanceSquared);
}
}
private void QueuePlayerImpact(PlayerInfo player, Vector3 closestPoint, float distanceSquared)
{
//IL_000a: Unknown result type (might be due to invalid IL or missing references)
//IL_000f: Unknown result type (might be due to invalid IL or missing references)
//IL_0047: Unknown result type (might be due to invalid IL or missing references)
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
//IL_002e: Unknown result type (might be due to invalid IL or missing references)
//IL_0038: Unknown result type (might be due to invalid IL or missing references)
if (CanTargetPlayer(player))
{
GolfCartSeat activeGolfCartSeat = player.ActiveGolfCartSeat;
if (((GolfCartSeat)(ref activeGolfCartSeat)).IsValid() && (Object)(object)player.ActiveGolfCartSeat.golfCart != (Object)null)
{
QueueGolfCartImpact(player.ActiveGolfCartSeat.golfCart, closestPoint, distanceSquared);
}
else
{
RegisterImpact(player.AsHittable, closestPoint, distanceSquared);
}
}
}
private void QueueGolfCartImpact(GolfCartInfo golfCart, Vector3 closestPoint, float distanceSquared)
{
//IL_0039: Unknown result type (might be due to invalid IL or missing references)
//IL_0061: Unknown result type (might be due to invalid IL or missing references)
if ((Object)(object)golfCart == (Object)null || (Object)(object)golfCart.AsEntity == (Object)null || golfCart.AsEntity.IsDestroyed)
{
return;
}
if (landmineTransfersToGolfCartPassengers)
{
RegisterImpact(golfCart.AsEntity.AsHittable, closestPoint, distanceSquared);
return;
}
for (int i = 0; i < golfCart.passengers.Count; i++)
{
PlayerInfo val = golfCart.passengers[i];
if (CanTargetPlayer(val))
{
RegisterImpact(val.AsHittable, closestPoint, distanceSquared);
}
}
}
private void RegisterImpact(Hittable hittable, Vector3 closestPoint, float distanceSquared)
{
//IL_0046: Unknown result type (might be due to invalid IL or missing references)
if (!((Object)(object)hittable == (Object)null) && !((Object)(object)hittable.AsEntity == (Object)null) && !hittable.AsEntity.IsDestroyed && (!impactSamples.TryGetValue(hittable, out var value) || !(value.DistanceSquared <= distanceSquared)))
{
impactSamples[hittable] = new ImpactSample(closestPoint, distanceSquared);
}
}
private static void ApplyLandmineHit(Hittable hittable, ImpactSample sample, MeteorSpawnMessage message)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Unknown result type (might be due to invalid IL or missing references)
//IL_000c: Unknown result type (might be due to invalid IL or missing references)
//IL_0011: Unknown result type (might be due to invalid IL or missing references)
//IL_0020: Unknown result type (might be due to invalid IL or missing references)
//IL_0025: Unknown result type (might be due to invalid IL or missing references)
//IL_0031: Unknown result type (might be due to invalid IL or missing references)
//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_0047: Unknown result type (might be due to invalid IL or missing references)
//IL_004f: Unknown result type (might be due to invalid IL or missing references)
//IL_0054: Unknown result type (might be due to invalid IL or missing references)
Vector3 val = sample.ClosestPoint - message.ImpactPoint;
if (((Vector3)(ref val)).sqrMagnitude <= 0.0001f)
{
val = Vector3.up;
}
else
{
((Vector3)(ref val)).Normalize();
}
hittable.HitWithItem((ItemType)8, ItemUseId.Invalid, ((Component)hittable).transform.InverseTransformPoint(sample.ClosestPoint), val, ((Component)hittable).transform.InverseTransformPoint(message.ImpactPoint), Mathf.Sqrt(sample.DistanceSquared), (PlayerInventory)null, false, false, true);
}
private void SpawnMeteorBurst(double now)
{
int num = ((!(Random.value < 0.3f)) ? 1 : 2);
for (int i = 0; i < num; i++)
{
if (TryCreateMeteorMessage(now, (float)i * 0.28f, out var message))
{
pendingImpacts.Add(message);
CreateMeteorVisual(message);
NetworkServer.SendToReady<MeteorSpawnMessage>(message, 0);
}
}
}
private bool TryCreateMeteorMessage(double now, float burstOffset, out MeteorSpawnMessage message)
{
//IL_0014: Unknown result type (might be due to invalid IL or missing references)
//IL_0019: 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_0032: Unknown result type (might be due to invalid IL or missing references)
//IL_0033: Unknown result type (might be due to invalid IL or missing references)
//IL_003e: Unknown result type (might be due to invalid IL or missing references)
//IL_0044: Unknown result type (might be due to invalid IL or missing references)
//IL_0049: Unknown result type (might be due to invalid IL or missing references)
//IL_0050: Unknown result type (might be due to invalid IL or missing references)
//IL_0055: Unknown result type (might be due to invalid IL or missing references)
//IL_0056: Unknown result type (might be due to invalid IL or missing references)
//IL_0084: Unknown result type (might be due to invalid IL or missing references)
//IL_0089: Unknown result type (might be due to invalid IL or missing references)
//IL_008e: Unknown result type (might be due to invalid IL or missing references)
//IL_00b7: Unknown result type (might be due to invalid IL or missing references)
//IL_00bc: Unknown result type (might be due to invalid IL or missing references)
//IL_0100: Unknown result type (might be due to invalid IL or missing references)
//IL_0102: Unknown result type (might be due to invalid IL or missing references)
//IL_0109: Unknown result type (might be due to invalid IL or missing references)
//IL_010a: Unknown result type (might be due to invalid IL or missing references)
//IL_0111: Unknown result type (might be due to invalid IL or missing references)
//IL_0112: Unknown result type (might be due to invalid IL or missing references)
message = default(MeteorSpawnMessage);
if (!TryPickTarget(out var player))
{
return false;
}
Vector3 playerTargetPosition = GetPlayerTargetPosition(player);
Vector2 val = Random.insideUnitCircle * Random.Range(0.25f, 3.6f);
Vector3 impactNormal;
Vector3 val2 = ResolveImpactPoint(playerTargetPosition + new Vector3(val.x, 0f, val.y), out impactNormal);
Vector3 startPoint = val2 + new Vector3(Random.Range(-9f, 9f), Random.Range(30f, 38f), Random.Range(-9f, 9f));
MeteorSpawnMessage meteorSpawnMessage = new MeteorSpawnMessage
{
Id = nextMeteorId++
};
Scene activeScene = SceneManager.GetActiveScene();
meteorSpawnMessage.SceneName = ((Scene)(ref activeScene)).name;
meteorSpawnMessage.SpawnTime = now + 1.100000023841858 + (double)burstOffset;
meteorSpawnMessage.ImpactTime = now + 1.100000023841858 + (double)burstOffset + 1.25;
meteorSpawnMessage.StartPoint = startPoint;
meteorSpawnMessage.ImpactPoint = val2;
meteorSpawnMessage.ImpactNormal = impactNormal;
meteorSpawnMessage.Scale = Random.Range(0.9f, 1.3f);
meteorSpawnMessage.ImpactRadius = GameManager.ItemSettings.LandmineExplosionRange;
meteorSpawnMessage.Seed = (uint)Random.Range(1, int.MaxValue);
message = meteorSpawnMessage;
return true;
}
private bool TryPickTarget(out PlayerInfo player)
{
player = null;
targetBuffer.Clear();
foreach (KeyValuePair<ulong, PlayerInfo> item in PlayerInfo.playerInfoPerPlayerGuid)
{
if (CanTargetPlayer(item.Value))
{
targetBuffer.Add(item.Value);
}
}
if (targetBuffer.Count <= 0)
{
return false;
}
player = targetBuffer[Random.Range(0, targetBuffer.Count)];
return (Object)(object)player != (Object)null;
}
private static bool CanTargetPlayer(PlayerInfo player)
{
if ((Object)(object)player != (Object)null && (Object)(object)player.AsHittable != (Object)null)
{
return OrbitalLaserManager.CanTarget(player.AsHittable);
}
return false;
}
private static Vector3 GetPlayerTargetPosition(PlayerInfo player)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0006: 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_0011: Unknown result type (might be due to invalid IL or missing references)
//IL_0024: Unknown result type (might be due to invalid IL or missing references)
//IL_0033: Unknown result type (might be due to invalid IL or missing references)
GolfCartSeat activeGolfCartSeat = player.ActiveGolfCartSeat;
if (((GolfCartSeat)(ref activeGolfCartSeat)).IsValid() && (Object)(object)player.ActiveGolfCartSeat.golfCart != (Object)null)
{
return ((Component)player.ActiveGolfCartSeat.golfCart).transform.position;
}
return ((Component)player).transform.position;
}
private static Vector3 ResolveImpactPoint(Vector3 desiredImpactPoint, out Vector3 impactNormal)
{
//IL_0000: Unknown result type (might be due to invalid IL or missing references)
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_000b: Unknown result type (might be due to invalid IL or missing references)
//IL_0010: Unknown result type (might be due to invalid IL or missing references)
//IL_0015: Unknown result type (might be due to invalid IL or missing references)
//IL_00ac: Unknown result type (might be due to invalid IL or missing references)
//IL_00b1: Unknown result type (might be due to invalid IL or missing references)
//IL_00b6: Unknown result type (might be due to invalid IL or missing references)
//IL_008a: Unknown result type (might be due to invalid IL or missing references)
//IL_008f: Unknown result type (might be due to invalid IL or missing references)
//IL_009b: Unknown result type (might be due to invalid IL or missing references)
RaycastHit[] array = Physics.RaycastAll(desiredImpactPoint + Vector3.up * 48f, Vector3.down, 96f, -1, (QueryTriggerInteraction)1);
Array.Sort(array, (RaycastHit left, RaycastHit right) => ((RaycastHit)(ref left)).distance.CompareTo(((RaycastHit)(ref right)).distance));
for (int i = 0; i < array.Length; i++)
{
Collider collider = ((RaycastHit)(ref array[i])).collider;
if (!((Object)(object)collider == (Object)null) && !((Object)(object)((Component)collider).GetComponentInParent<PlayerInfo>() != (Object)null) && !((Object)(object)((Component)collider).GetComponentInParent<GolfCartInfo>() != (Object)null))
{
impactNormal = ((RaycastHit)(ref array[i])).normal;
return ((RaycastHit)(ref array[i])).point;
}
}
impactNormal = Vector3.up;
return desiredImpactPoint;
}
private void TickLocalMeteors(double now)
{
if (meteorVisuals.Count <= 0)
{
return;
}
completedMeteorIds.Clear();
foreach (KeyValuePair<ulong, MeteorVisual> meteorVisual in meteorVisuals)
{
if (!meteorVisual.Value.Tick(now))
{
completedMeteorIds.Add(meteorVisual.Key);
}
}
for (int i = 0; i < completedMeteorIds.Count; i++)
{
ulong key = completedMeteorIds[i];
meteorVisuals[key].Dispose();
meteorVisuals.Remove(key);
}
completedMeteorIds.Clear();
}
private bool CanSpawnMeteors()
{
//IL_0018: Unknown result type (might be due to invalid IL or missing references)
//IL_001d: Unknown result type (might be due to invalid IL or missing references)
//IL_001e: Unknown result type (might be due to invalid IL or missing references)
//IL_0020: Invalid comparison between Unknown and I4
//IL_0022: Unknown result type (might be due to invalid IL or missing references)
//IL_0024: Invalid comparison between Unknown and I4
//IL_0026: Unknown result type (might be due to invalid IL or missing references)
//IL_0028: Invalid comparison between Unknown and I4
if (BNetworkManager.IsChangingSceneOrShuttingDown)
{
return false;
}
if ((Object)(object)GolfHoleManager.MainHole == (Object)null)
{
return false;
}
MatchState matchState = CourseManager.MatchState;
if ((int)matchState != 3 && (int)matchState != 4)
{
return (int)matchState == 5;
}
return true;
}
private void ScheduleNextMeteor(double now)
{
nextMeteorTime = now + (double)Random.Range(6f, 9f);
}
private void EnsureNetworkHooks(bool force)
{
bool active = NetworkClient.active;
bool active2 = NetworkServer.active;
double unscaledTimeAsDouble = Time.unscaledTimeAsDouble;
if (force || active != lastClientActive || active2 != lastServerActive || !(unscaledTimeAsDouble < nextHandlerRefreshTime))
{
lastClientActive = active;
lastServerActive = active2;
nextHandlerRefreshTime = unscaledTimeAsDouble + 0.5;
NetworkClient.ReplaceHandler<MeteorSpawnMessage>((Action<MeteorSpawnMessage>)OnMeteorSpawnMessage, false);
NetworkServer.ReplaceHandler<MeteorSpawnMessage>((Action<NetworkConnectionToClient, MeteorSpawnMessage>)OnMeteorSpawnMessageServerSide, false);
}
}
private void OnMeteorSpawnMessage(MeteorSpawnMessage message)
{
CreateMeteorVisual(message);
}
private void OnMeteorSpawnMessageServerSide(NetworkConnectionToClient connection, MeteorSpawnMessage message)
{
((BaseUnityPlugin)this).Logger.LogWarning((object)string.Format("Unexpected server-side meteor message {0} from {1}", message.Id, (connection != null) ? connection.connectionId.ToString() : "null"));
}
private void CreateMeteorVisual(MeteorSpawnMessage message)
{
//IL_0014: Unknown result type (might be due to invalid IL or missing references)
//IL_0019: Unknown result type (might be due to invalid IL or missing references)
if (!meteorVisuals.ContainsKey(message.Id))
{
Scene activeScene = SceneManager.GetActiveScene();
if (string.Equals(((Scene)(ref activeScene)).name, message.SceneName, StringComparison.Ordinal))
{
meteorVisuals.Add(message.Id, new MeteorVisual(message, meteorMaterial, warningMaterial));
}
}
}
private void OnSceneLoaded(Scene scene, LoadSceneMode mode)
{
//IL_002d: Unknown result type (might be due to invalid IL or missing references)
ClearMeteors();
pendingImpacts.Clear();
impactSamples.Clear();
nextMeteorTime = double.NaN;
lastMatchState = (MatchState)(-1);
TryRefreshLandmineTransferSetting();
EnsureNetworkHooks(force: true);
}
private void ClearMeteors()
{
foreach (KeyValuePair<ulong, MeteorVisual> meteorVisual in meteorVisuals)
{
meteorVisual.Value.Dispose();
}
meteorVisuals.Clear();
completedMeteorIds.Clear();
}
private void TryRefreshLandmineTransferSetting()
{
ItemData val = default(ItemData);
if (SingletonBehaviour<GameManager>.HasInstance && (Object)(object)GameManager.AllItems != (Object)null && GameManager.AllItems.TryGetItemData((ItemType)8, ref val))
{
landmineTransfersToGolfCartPassengers = val.HitTransfersToGolfCartPassengers;
}
}
private void TrackMatchState(double now)
{
//IL_0000: Unknown result type (might be due to invalid IL or missing references)
//IL_0005: Unknown result type (might be due to invalid IL or missing references)
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
//IL_0011: 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_001e: Unknown result type (might be due to invalid IL or missing references)
//IL_0020: Invalid comparison between Unknown and I4
MatchState matchState = CourseManager.MatchState;
if (matchState != lastMatchState)
{
lastMatchState = matchState;
if (NetworkServer.active && (int)matchState == 3)
{
nextMeteorTime = now + 2.5;
}
}
}
private static double GetNow()
{
if (NetworkClient.active || NetworkServer.active)
{
return NetworkTime.time;
}
return Time.unscaledTime;
}
private static void RegisterMirrorTypes()
{
if (!mirrorTypesRegistered)
{
Writer<MeteorSpawnMessage>.write = WriteMeteorSpawnMessage;
Reader<MeteorSpawnMessage>.read = ReadMeteorSpawnMessage;
mirrorTypesRegistered = true;
}
}
private static void WriteMeteorSpawnMessage(NetworkWriter writer, MeteorSpawnMessage message)
{
//IL_0032: Unknown result type (might be due to invalid IL or missing references)
//IL_003e: Unknown result type (might be due to invalid IL or missing references)
//IL_004a: Unknown result type (might be due to invalid IL or missing references)
writer.Write<ulong>(message.Id);
writer.Write<string>(message.SceneName);
writer.Write<double>(message.SpawnTime);
writer.Write<double>(message.ImpactTime);
writer.Write<Vector3>(message.StartPoint);
writer.Write<Vector3>(message.ImpactPoint);
writer.Write<Vector3>(message.ImpactNormal);
writer.Write<float>(message.Scale);
writer.Write<float>(message.ImpactRadius);
writer.Write<uint>(message.Seed);
}
private static MeteorSpawnMessage ReadMeteorSpawnMessage(NetworkReader reader)
{
//IL_003f: Unknown result type (might be due to invalid IL or missing references)
//IL_0044: Unknown result type (might be due to invalid IL or missing references)
//IL_004c: Unknown result type (might be due to invalid IL or missing references)
//IL_0051: Unknown result type (might be due to invalid IL or missing references)
//IL_0059: Unknown result type (might be due to invalid IL or missing references)
//IL_005e: Unknown result type (might be due to invalid IL or missing references)
MeteorSpawnMessage result = default(MeteorSpawnMessage);
result.Id = reader.Read<ulong>();
result.SceneName = reader.Read<string>();
result.SpawnTime = reader.Read<double>();
result.ImpactTime = reader.Read<double>();
result.StartPoint = reader.Read<Vector3>();
result.ImpactPoint = reader.Read<Vector3>();
result.ImpactNormal = reader.Read<Vector3>();
result.Scale = reader.Read<float>();
result.ImpactRadius = reader.Read<float>();
result.Seed = reader.Read<uint>();
return result;
}
private static Material CreateMaterial(Color color)
{
//IL_0034: Unknown result type (might be due to invalid IL or missing references)
//IL_0039: 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_0040: Unknown result type (might be due to invalid IL or missing references)
//IL_0049: Expected O, but got Unknown
Shader val = Shader.Find("Sprites/Default");
if ((Object)(object)val == (Object)null)
{
val = Shader.Find("Legacy Shaders/Particles/Additive");
}
if ((Object)(object)val == (Object)null)
{
val = Shader.Find("Unlit/Color");
}
return new Material(val)
{
color = color,
hideFlags = (HideFlags)61
};
}
}
}