Decompiled source of PlatformApi v1.1.7

PlatformApi.dll

Decompiled 3 weeks ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using System.Text.RegularExpressions;
using BepInEx;
using BoplFixedMath;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using UnityEngine;
using UnityEngine.SceneManagement;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: IgnoresAccessChecksTo("Assembly-CSharp")]
[assembly: IgnoresAccessChecksTo("UnityEngine")]
[assembly: TargetFramework(".NETFramework,Version=v4.7.1", FrameworkDisplayName = ".NET Framework 4.7.1")]
[assembly: AssemblyCompany("PlatformApi")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyDescription("My first plugin")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("PlatformApi")]
[assembly: AssemblyTitle("PlatformApi")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.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.Module, AllowMultiple = false, Inherited = false)]
	internal sealed class RefSafetyRulesAttribute : Attribute
	{
		public readonly int Version;

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
}
namespace PlatformApi
{
	[BepInPlugin("com.David_Loves_JellyCar_Worlds.PlatformApi", "PlatformApi", "1.1.0")]
	public class PlatformApi : BaseUnityPlugin
	{
		public enum PathType
		{
			None,
			AntiLockPlatform,
			VectorFieldPlatform
		}

		[HarmonyPatch(typeof(ResizablePlatform))]
		public class Patches
		{
			[HarmonyPatch("Awake")]
			[HarmonyPostfix]
			public static void Patch(ResizablePlatform __instance)
			{
				Debug.Log((object)"platform awake");
				PlatformList.Add(((Component)__instance).gameObject);
			}
		}

		private static StickyRoundedRectangle platformPrefab;

		private static Object SlimeCamObject;

		public static Material PlatformMat;

		public static Logger logger = new Logger();

		public static AssetBundle MyAssetBundle;

		public static List<GameObject> PlatformList = new List<GameObject>();

		public static ScaleChanger scaleChanger;

		public static bool gameInProgress;

		private static GameSessionHandler GameSessionHandler2;

		public static MachoThrow2 throw2;

		public void Awake()
		{
			//IL_0023: Unknown result type (might be due to invalid IL or missing references)
			//IL_0029: Expected O, but got Unknown
			//IL_01d2: Unknown result type (might be due to invalid IL or missing references)
			//IL_01dc: Expected O, but got Unknown
			SceneManager.sceneLoaded += OnSceneLoaded;
			Debug.Log((object)"Awake");
			Harmony val = new Harmony("com.David_Loves_JellyCar_Worlds.PlatformApi");
			((BaseUnityPlugin)this).Logger.LogInfo((object)"harmany created");
			val.PatchAll();
			((BaseUnityPlugin)this).Logger.LogInfo((object)"PlatformApi Patch Compleate!");
			GameObject[] array = Resources.FindObjectsOfTypeAll(typeof(GameObject)) as GameObject[];
			Debug.Log((object)"getting platform object");
			GameObject val2 = null;
			int num = 0;
			int num2 = 2;
			GameObject[] array2 = array;
			foreach (GameObject val3 in array2)
			{
				if (((Object)val3).name == "Platform")
				{
					val2 = val3;
					Debug.Log((object)"Found the Platform object");
					num++;
					if (num == num2)
					{
						break;
					}
				}
				if (((Object)val3).name == "Throw")
				{
					throw2 = val3.GetComponent<MachoThrow2>();
					Debug.Log((object)"Found the MachoThrow2");
					num++;
					if (num == num2)
					{
						break;
					}
				}
			}
			if (Object.op_Implicit((Object)(object)val2))
			{
				Component component = val2.GetComponent(typeof(PlatformTransform));
				PlatformTransform val4 = (PlatformTransform)(object)((component is PlatformTransform) ? component : null);
				platformPrefab = val4.platformPrefab;
			}
			if (!Object.op_Implicit((Object)(object)MyAssetBundle))
			{
				MyAssetBundle = AssetBundle.LoadFromFile(Path.GetDirectoryName(((BaseUnityPlugin)this).Info.Location) + "/assetbundle2");
			}
			string[] allAssetNames = MyAssetBundle.GetAllAssetNames();
			string[] array3 = allAssetNames;
			foreach (string text in array3)
			{
				Debug.Log((object)("asset name is: " + text));
			}
			SlimeCamObject = (Object)(GameObject)MyAssetBundle.LoadAsset("assets/assetbundleswanted/slimetrailcam.prefab");
			MyAssetBundle.Unload(false);
		}

		public void Update()
		{
			//IL_0035: 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)
			if (Object.op_Implicit((Object)(object)GameSessionHandler2))
			{
				gameInProgress = (bool)AccessTools.Field(typeof(GameSessionHandler), "gameInProgress").GetValue(GameSessionHandler2) && Updater.SimTimeSinceLevelLoaded > (Fix)2.5;
			}
			else
			{
				gameInProgress = false;
			}
		}

		public void OnSceneLoaded(Scene scene, LoadSceneMode mode)
		{
			//IL_0075: Unknown result type (might be due to invalid IL or missing references)
			//IL_007c: Expected O, but got Unknown
			if (!IsLevelName(((Scene)(ref scene)).name))
			{
				return;
			}
			Debug.Log((object)"OnSceneLoaded");
			PlatformList = new List<GameObject>();
			GameObject val = GameObject.Find("Level");
			if (!Object.op_Implicit((Object)(object)val))
			{
				return;
			}
			Object[] array = Object.FindObjectsOfType(typeof(ShakablePlatform));
			Object[] array2 = array;
			foreach (Object val2 in array2)
			{
				if (val2 != (Object)null)
				{
					ShakablePlatform val3 = (ShakablePlatform)val2;
					PlatformList.Add(((Component)val3).gameObject);
				}
			}
			Transform child = val.transform.GetChild(0);
			if (Object.op_Implicit((Object)(object)child))
			{
				PlatformMat = ((Renderer)((Component)child).gameObject.GetComponent<SpriteRenderer>()).material;
			}
			else
			{
				((BaseUnityPlugin)this).Logger.LogWarning((object)"Couldnt Find Platfrom to steal Platform Mat from. this can happen if you remove all platforms on scene load. pls manualy steal a platfrom mat and set PlatformApi.PlatformMat to it.");
				Debug.LogWarning((object)"Couldnt Find Platfrom to steal Platform Mat from. this can happen if you remove all platforms on scene load. pls manualy steal a platfrom mat and set PlatformApi.PlatformMat to it.");
			}
			ShootScaleChange[] array3 = Resources.FindObjectsOfTypeAll(typeof(ShootScaleChange)) as ShootScaleChange[];
			Debug.Log((object)"getting platform object");
			ShootScaleChange[] array4 = array3;
			foreach (ShootScaleChange val4 in array4)
			{
				scaleChanger = val4.ScaleChangerPrefab;
			}
			GameObject[] array5 = Resources.FindObjectsOfTypeAll(typeof(GameObject)) as GameObject[];
			((BaseUnityPlugin)this).Logger.LogInfo((object)"getting GameSessionHandler");
			GameObject[] array6 = array5;
			foreach (GameObject val5 in array6)
			{
				if (((Object)val5).name == "PlayerList")
				{
					GameSessionHandler2 = val5.GetComponent<GameSessionHandler>();
					break;
				}
			}
		}

		public static bool IsLevelName(string input)
		{
			Regex regex = new Regex("Level[0-9]+", RegexOptions.IgnoreCase);
			return regex.IsMatch(input);
		}

		public static GameObject SpawnPlatform(Fix X, Fix Y, Fix Width, Fix Height, Fix Radius, Fix rotatson, double MassPerArea = 0.05, Vector4[] color = null, PlatformType platformType = 4, bool UseSlimeCam = false, Sprite sprite = null, PathType pathType = PathType.None, double OrbitForce = 1.0, Vec2[] OrbitPath = null, double DelaySeconds = 1.0, bool isBird = false, double orbitSpeed = 100.0, double expandSpeed = 100.0, Vec2[] centerPoint = null, double normalSpeedFriction = 1.0, double DeadZoneDist = 1.0, double OrbitAccelerationMulitplier = 1.0, double targetRadius = 5.0, double ovalness01 = 1.0)
		{
			//IL_0006: 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_0008: 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_0038: 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_0048: 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)
			//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_007c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0082: Expected O, but got Unknown
			//IL_00e3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d6: Unknown result type (might be due to invalid IL or missing references)
			//IL_017b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0180: Unknown result type (might be due to invalid IL or missing references)
			//IL_0192: Unknown result type (might be due to invalid IL or missing references)
			//IL_0197: Unknown result type (might be due to invalid IL or missing references)
			//IL_027a: Unknown result type (might be due to invalid IL or missing references)
			//IL_027b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0295: Unknown result type (might be due to invalid IL or missing references)
			//IL_0296: Unknown result type (might be due to invalid IL or missing references)
			//IL_02b0: Unknown result type (might be due to invalid IL or missing references)
			//IL_02b1: Unknown result type (might be due to invalid IL or missing references)
			//IL_02cb: Unknown result type (might be due to invalid IL or missing references)
			//IL_02cc: Unknown result type (might be due to invalid IL or missing references)
			//IL_02e7: Unknown result type (might be due to invalid IL or missing references)
			//IL_02e9: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b5: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ba: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f1: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f3: Unknown result type (might be due to invalid IL or missing references)
			//IL_01fc: Unknown result type (might be due to invalid IL or missing references)
			//IL_0201: Unknown result type (might be due to invalid IL or missing references)
			//IL_020a: Unknown result type (might be due to invalid IL or missing references)
			//IL_020f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0218: Unknown result type (might be due to invalid IL or missing references)
			//IL_021d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0226: Unknown result type (might be due to invalid IL or missing references)
			//IL_022b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0234: Unknown result type (might be due to invalid IL or missing references)
			//IL_0239: Unknown result type (might be due to invalid IL or missing references)
			//IL_0242: Unknown result type (might be due to invalid IL or missing references)
			//IL_0247: Unknown result type (might be due to invalid IL or missing references)
			//IL_0250: Unknown result type (might be due to invalid IL or missing references)
			//IL_0255: Unknown result type (might be due to invalid IL or missing references)
			//IL_025e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0263: Unknown result type (might be due to invalid IL or missing references)
			//IL_01cb: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d0: Unknown result type (might be due to invalid IL or missing references)
			StickyRoundedRectangle val = FixTransform.InstantiateFixed<StickyRoundedRectangle>(platformPrefab, new Vec2(X, Y));
			val.rr.Scale = Fix.One;
			ResizablePlatform component = ((Component)val).GetComponent<ResizablePlatform>();
			((Component)component).GetComponent<DPhysicsRoundedRect>().ManualInit();
			ResizePlatform(component, Width, Height, Radius);
			val.GetGroundBody().up = new Vec2(rotatson);
			component.MassPerArea = FloorToThousandnths(MassPerArea);
			SpriteRenderer val2 = (SpriteRenderer)AccessTools.Field(typeof(StickyRoundedRectangle), "spriteRen").GetValue(val);
			if ((Object)(object)sprite != (Object)null)
			{
				val2.sprite = sprite;
				((Renderer)val2).material = PlatformMat;
				Transform transform = ((Component)val).transform;
				((Component)transform).gameObject.tag = "ground";
			}
			if (color != null)
			{
				val2.color = Color.op_Implicit(color[0]);
			}
			val.platformType = platformType;
			if (UseSlimeCam)
			{
				((Renderer)val2).material = PlatformMat;
				Transform transform2 = ((Component)val).transform;
				Object.Instantiate(SlimeCamObject, transform2);
				((Component)transform2).gameObject.tag = "ground";
			}
			ShakablePlatform component2 = ((Component)component).GetComponent<ShakablePlatform>();
			AccessTools.Field(typeof(ShakablePlatform), "originalMaterial").SetValue(component2, ((Renderer)val2).material);
			if (pathType == PathType.AntiLockPlatform)
			{
				Component obj = ((Component)component).gameObject.AddComponent(typeof(AntiLockPlatform));
				AntiLockPlatform val3 = (AntiLockPlatform)(object)((obj is AntiLockPlatform) ? obj : null);
				val3.OrbitForce = FloorToThousandnths(OrbitForce);
				val3.OrbitPath = OrbitPath;
				val3.DelaySeconds = FloorToThousandnths(DelaySeconds);
				val3.isBird = isBird;
			}
			if (pathType == PathType.VectorFieldPlatform)
			{
				Vec2 centerPoint2 = Vec2.zero;
				if (centerPoint != null)
				{
					centerPoint2 = centerPoint[0];
				}
				Component obj2 = ((Component)component).gameObject.AddComponent(typeof(VectorFieldPlatform));
				VectorFieldPlatform val4 = (VectorFieldPlatform)(object)((obj2 is VectorFieldPlatform) ? obj2 : null);
				val4.centerPoint = centerPoint2;
				val4.DeadZoneDist = FloorToThousandnths(DeadZoneDist);
				val4.DelaySeconds = FloorToThousandnths(DelaySeconds);
				val4.expandSpeed = FloorToThousandnths(expandSpeed);
				val4.normalSpeedFriction = FloorToThousandnths(normalSpeedFriction);
				val4.OrbitAccelerationMulitplier = FloorToThousandnths(OrbitAccelerationMulitplier);
				val4.orbitSpeed = FloorToThousandnths(orbitSpeed);
				val4.ovalness01 = FloorToThousandnths(ovalness01);
				val4.targetRadius = FloorToThousandnths(targetRadius);
			}
			string[] obj3 = new string[10] { "Spawned platform at position (", null, null, null, null, null, null, null, null, null };
			Fix val5 = X;
			obj3[1] = ((object)(Fix)(ref val5)).ToString();
			obj3[2] = ", ";
			val5 = Y;
			obj3[3] = ((object)(Fix)(ref val5)).ToString();
			obj3[4] = ") with dimensions (";
			val5 = Width;
			obj3[5] = ((object)(Fix)(ref val5)).ToString();
			obj3[6] = ", ";
			val5 = Height;
			obj3[7] = ((object)(Fix)(ref val5)).ToString();
			obj3[8] = ") and radius ";
			val5 = Radius;
			obj3[9] = ((object)(Fix)(ref val5)).ToString();
			Debug.Log((object)string.Concat(obj3));
			return ((Component)((Component)val).transform).gameObject;
		}

		internal static Fix FloorToThousandnths(double value)
		{
			//IL_0002: 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_0012: Unknown result type (might be due to invalid IL or missing references)
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			//IL_0027: 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)
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			return Fix.Floor((Fix)value * (Fix)1000L) / (Fix)1000L;
		}

		internal static void ResizePlatform(ResizablePlatform platform, Fix newWidth, Fix newHeight, Fix newRadius)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0003: Unknown result type (might be due to invalid IL or missing references)
			//IL_0004: Unknown result type (might be due to invalid IL or missing references)
			platform.ResizePlatform(newHeight, newWidth, newRadius, true);
		}

		public static void ResizePlatform(GameObject platform, Fix newWidth, Fix newHeight, Fix newRadius)
		{
			//IL_0009: Unknown result type (might be due to invalid IL or missing references)
			//IL_000a: 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)
			ResizablePlatform component = platform.GetComponent<ResizablePlatform>();
			component.ResizePlatform(newHeight, newWidth, newRadius, true);
		}

		public static void SetRot(GameObject platform, Fix rot)
		{
			//IL_0009: Unknown result type (might be due to invalid IL or missing references)
			//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_0014: Unknown result type (might be due to invalid IL or missing references)
			BoplBody component = platform.GetComponent<BoplBody>();
			component.up = new Vec2(rot % Fix.PiTimes2);
		}

		public static Fix GetRot(GameObject platform)
		{
			//IL_0009: Unknown result type (might be due to invalid IL or missing references)
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0013: Unknown result type (might be due to invalid IL or missing references)
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			BoplBody component = platform.GetComponent<BoplBody>();
			return Vec2.NormalizedVectorAngle(component.up);
		}

		public static void SetHomeRot(GameObject platform, Fix rot)
		{
			//IL_0009: Unknown result type (might be due to invalid IL or missing references)
			//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_0014: Unknown result type (might be due to invalid IL or missing references)
			AnimateVelocity component = platform.GetComponent<AnimateVelocity>();
			component.homeRotation = rot % Fix.PiTimes2;
		}

		public static Fix GetHomeRot(GameObject platform)
		{
			//IL_0009: Unknown result type (might be due to invalid IL or missing references)
			//IL_000e: 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)
			AnimateVelocity component = platform.GetComponent<AnimateVelocity>();
			return component.homeRotation;
		}

		public static bool SetMassPerArea(GameObject platform, Fix MassPerArea)
		{
			//IL_0014: 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)
			ResizablePlatform component = platform.GetComponent<ResizablePlatform>();
			if (Object.op_Implicit((Object)(object)component))
			{
				component.MassPerArea = MassPerArea;
				return true;
			}
			return false;
		}

		public static bool SetMass(GameObject platform, Fix Mass)
		{
			//IL_001c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0021: Unknown result type (might be due to invalid IL or missing references)
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			if (!Object.op_Implicit((Object)(object)platform.GetComponent<ResizablePlatform>()))
			{
				BoplBody component = platform.GetComponent<BoplBody>();
				component.InverseMass = Fix.One / Mass;
				return true;
			}
			return false;
		}

		public static Fix GetMass(GameObject platform)
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0013: Unknown result type (might be due to invalid IL or missing references)
			//IL_0018: Unknown result type (might be due to invalid IL or missing references)
			//IL_001b: Unknown result type (might be due to invalid IL or missing references)
			BoplBody component = platform.GetComponent<BoplBody>();
			return Fix.One / component.InverseMass;
		}

		public static void SetSprite(GameObject platform, Sprite sprite)
		{
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			//IL_0028: Expected O, but got Unknown
			StickyRoundedRectangle component = platform.GetComponent<StickyRoundedRectangle>();
			SpriteRenderer val = (SpriteRenderer)AccessTools.Field(typeof(StickyRoundedRectangle), "spriteRen").GetValue(component);
			val.sprite = sprite;
			((Renderer)val).material = PlatformMat;
			ShakablePlatform component2 = platform.GetComponent<ShakablePlatform>();
			AccessTools.Field(typeof(ShakablePlatform), "originalMaterial").SetValue(component2, ((Renderer)val).material);
		}

		public static void SetColor(GameObject platform, Color color)
		{
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			//IL_0028: Expected O, but got Unknown
			//IL_0029: Unknown result type (might be due to invalid IL or missing references)
			StickyRoundedRectangle component = platform.GetComponent<StickyRoundedRectangle>();
			SpriteRenderer val = (SpriteRenderer)AccessTools.Field(typeof(StickyRoundedRectangle), "spriteRen").GetValue(component);
			val.color = color;
			Transform transform = ((Component)component).transform;
			((Component)transform).gameObject.tag = "ground";
		}

		public static void SetType(GameObject platform, PlatformType platformType)
		{
			//IL_0009: Unknown result type (might be due to invalid IL or missing references)
			//IL_000a: Unknown result type (might be due to invalid IL or missing references)
			StickyRoundedRectangle component = platform.GetComponent<StickyRoundedRectangle>();
			component.platformType = platformType;
		}

		public static void AddAntiLockPlatform(GameObject platform, Fix OrbitForce, Vec2[] OrbitPath, Fix DelaySeconds, bool isBird = false)
		{
			//IL_005d: 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)
			//IL_006b: Unknown result type (might be due to invalid IL or missing references)
			//IL_006c: Unknown result type (might be due to invalid IL or missing references)
			if ((Object)(object)platform.GetComponent<VectorFieldPlatform>() != (Object)null)
			{
				VectorFieldPlatform component = platform.GetComponent<VectorFieldPlatform>();
				((MonoUpdatable)component).IsDestroyed = true;
				Object.Destroy((Object)(object)component);
			}
			AntiLockPlatform val = (AntiLockPlatform)((!((Object)(object)platform.GetComponent<AntiLockPlatform>() != (Object)null)) ? ((object)/*isinst with value type is only supported in some contexts*/) : ((object)platform.GetComponent<AntiLockPlatform>()));
			val.OrbitForce = OrbitForce;
			val.OrbitPath = OrbitPath;
			val.DelaySeconds = DelaySeconds;
			val.isBird = isBird;
		}

		public static AntiLockPlatform GetAntiLockPlatform(GameObject platform)
		{
			return platform.GetComponent<AntiLockPlatform>();
		}

		public static void AddVectorFieldPlatform(GameObject platform, Fix DelaySeconds, Fix orbitSpeed, Fix expandSpeed, Vec2 centerPoint, Fix normalSpeedFriction, Fix DeadZoneDist, Fix OrbitAccelerationMulitplier, Fix targetRadius, Fix ovalness01)
		{
			//IL_005d: Unknown result type (might be due to invalid IL or missing references)
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0065: Unknown result type (might be due to invalid IL or missing references)
			//IL_0067: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_006e: 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)
			//IL_0075: Unknown result type (might be due to invalid IL or missing references)
			//IL_007b: Unknown result type (might be due to invalid IL or missing references)
			//IL_007d: 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_0085: Unknown result type (might be due to invalid IL or missing references)
			//IL_008b: Unknown result type (might be due to invalid IL or missing references)
			//IL_008c: 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_0094: Unknown result type (might be due to invalid IL or missing references)
			//IL_009a: Unknown result type (might be due to invalid IL or missing references)
			//IL_009c: Unknown result type (might be due to invalid IL or missing references)
			if ((Object)(object)platform.GetComponent<AntiLockPlatform>() != (Object)null)
			{
				AntiLockPlatform component = platform.GetComponent<AntiLockPlatform>();
				((MonoUpdatable)component).IsDestroyed = true;
				Object.Destroy((Object)(object)component);
			}
			VectorFieldPlatform val = (VectorFieldPlatform)((!((Object)(object)platform.GetComponent<VectorFieldPlatform>() != (Object)null)) ? ((object)/*isinst with value type is only supported in some contexts*/) : ((object)platform.GetComponent<VectorFieldPlatform>()));
			val.centerPoint = centerPoint;
			val.DeadZoneDist = DeadZoneDist;
			val.DelaySeconds = DelaySeconds;
			val.expandSpeed = expandSpeed;
			val.normalSpeedFriction = normalSpeedFriction;
			val.OrbitAccelerationMulitplier = OrbitAccelerationMulitplier;
			val.orbitSpeed = orbitSpeed;
			val.ovalness01 = ovalness01;
			val.targetRadius = targetRadius;
		}

		public static VectorFieldPlatform GetVectorFieldPlatform(GameObject platform)
		{
			return platform.GetComponent<VectorFieldPlatform>();
		}

		public static void SetMaterial(GameObject platform, Material material)
		{
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			//IL_0028: Expected O, but got Unknown
			StickyRoundedRectangle component = platform.GetComponent<StickyRoundedRectangle>();
			SpriteRenderer val = (SpriteRenderer)AccessTools.Field(typeof(StickyRoundedRectangle), "spriteRen").GetValue(component);
			((Renderer)val).material = material;
			ShakablePlatform component2 = platform.GetComponent<ShakablePlatform>();
			AccessTools.Field(typeof(ShakablePlatform), "originalMaterial").SetValue(component2, ((Renderer)val).material);
		}

		public static void AddForce(GameObject platform, Vec2 f, ForceMode2D forceMode = 0)
		{
			//IL_0009: Unknown result type (might be due to invalid IL or missing references)
			//IL_000a: Unknown result type (might be due to invalid IL or missing references)
			BoplBody component = platform.GetComponent<BoplBody>();
			component.AddForce(f, forceMode);
		}

		public static void AddForceAtPosition(GameObject platform, Vec2 f, Vec2 pos, ForceMode2D forceMode = 0)
		{
			//IL_0009: Unknown result type (might be due to invalid IL or missing references)
			//IL_000a: 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)
			BoplBody component = platform.GetComponent<BoplBody>();
			component.AddForceAtPosition(f, pos, forceMode);
		}

		public static bool RemovePlatformFancy(GameObject platform)
		{
			ResizablePlatform component = platform.GetComponent<ResizablePlatform>();
			if (Object.op_Implicit((Object)(object)component))
			{
				component.RemovePlatform();
				return true;
			}
			return false;
		}

		public static void RemovePlatform(GameObject platform)
		{
			Updater.DestroyFix(platform);
		}

		public static Boulder SpawnBoulder(Vec2 Pos, Fix Scale, PlatformType platformType, Color color, Sprite sprite = null)
		{
			//IL_001f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0025: Expected O, but got Unknown
			//IL_0026: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: 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_0051: 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_008a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0090: Expected I4, but got Unknown
			//IL_008b: 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)
			Boulder val = (Boulder)AccessTools.Field(typeof(MachoThrow2), "boulderPrefab").GetValue(throw2);
			Boulder val2 = FixTransform.InstantiateFixed<Boulder>(val, Pos);
			DPhysicsRoundedRect hitbox = val2.hitbox;
			hitbox.Scale = Scale;
			hitbox.ManualInit();
			hitbox.Scale = Scale;
			((Component)hitbox).GetComponent<StickyRoundedRectangle>().platformType = platformType;
			SpriteRenderer component = ((Component)hitbox).GetComponent<SpriteRenderer>();
			if ((Object)(object)sprite != (Object)null)
			{
				component.sprite = sprite;
			}
			else
			{
				component.sprite = throw2.boulders.sprites[(int)platformType].sprite;
			}
			component.color = color;
			return val2;
		}

		public static Vec2 GetHome(GameObject platform)
		{
			//IL_0009: Unknown result type (might be due to invalid IL or missing references)
			//IL_000e: 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)
			AnimateVelocity component = platform.GetComponent<AnimateVelocity>();
			return component.HomePosition;
		}

		public static void SetHome(GameObject platform, Vec2 NewHome)
		{
			//IL_0009: Unknown result type (might be due to invalid IL or missing references)
			AnimateVelocity component = platform.GetComponent<AnimateVelocity>();
			component.HomePosition = NewHome;
		}

		public static Vec2 GetPos(GameObject platform)
		{
			//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_000f: Unknown result type (might be due to invalid IL or missing references)
			return platform.GetComponent<BoplBody>().position;
		}

		public static void SetPos(GameObject platform, Vec2 NewPos)
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			platform.GetComponent<BoplBody>().position = NewPos;
		}

		public static Fix GetScale(GameObject platform)
		{
			//IL_002b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			//IL_0023: 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_0033: Unknown result type (might be due to invalid IL or missing references)
			if (Object.op_Implicit((Object)(object)platform.GetComponent<DPhysicsRoundedRect>()))
			{
				IPhysicsCollider monobehaviourCollider = platform.GetComponent<DPhysicsRoundedRect>().pp.monobehaviourCollider;
				return monobehaviourCollider.Scale;
			}
			return Fix.Zero;
		}

		public static bool SetScale(GameObject platform, Fix NewScale)
		{
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			//IL_0023: Unknown result type (might be due to invalid IL or missing references)
			if (Object.op_Implicit((Object)(object)platform.GetComponent<DPhysicsRoundedRect>()))
			{
				IPhysicsCollider monobehaviourCollider = platform.GetComponent<DPhysicsRoundedRect>().pp.monobehaviourCollider;
				monobehaviourCollider.Scale = NewScale;
				return true;
			}
			return false;
		}

		public static ScaleChanger ScaleSmooth(GameObject platform, Fix multiplier)
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_0017: 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_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_0032: Unknown result type (might be due to invalid IL or missing references)
			ScaleChanger val = FixTransform.InstantiateFixed<ScaleChanger>(scaleChanger, Vec2.zero);
			IPhysicsCollider monobehaviourCollider = platform.GetComponent<DPhysicsRoundedRect>().pp.monobehaviourCollider;
			val.victim = monobehaviourCollider;
			val.multiplier = multiplier;
			val.smallNonPlayersMultiplier = multiplier;
			return val;
		}

		public static Fix PlatformArea(GameObject platform)
		{
			//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_000f: Unknown result type (might be due to invalid IL or missing references)
			return platform.GetComponent<DPhysicsRoundedRect>().PlatformArea();
		}

		public static Fix PlatformArea(Fix Width, Fix Height, Fix Radius)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Expected O, but got Unknown
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0009: Unknown result type (might be due to invalid IL or missing references)
			//IL_000a: 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_0013: Unknown result type (might be due to invalid IL or missing references)
			DPhysicsRoundedRect val = new DPhysicsRoundedRect();
			return val.PlatformArea(Width, Height, Radius);
		}

		public void AddShake(GameObject platform, Fix duration, Fix shakeAmount, AnimationCurveFixed shakeCurve = null)
		{
			//IL_0009: Unknown result type (might be due to invalid IL or missing references)
			//IL_000a: Unknown result type (might be due to invalid IL or missing references)
			ShakablePlatform component = platform.GetComponent<ShakablePlatform>();
			component.AddShake(duration, shakeAmount, 1, (Material)null, shakeCurve);
		}

		public static DPhysicsRoundedRect GetDPhysicsRoundedRect(GameObject platform)
		{
			return platform.GetComponent<DPhysicsRoundedRect>();
		}

		public static ShakablePlatform GetShakablePlatform(GameObject platform)
		{
			return platform.GetComponent<ShakablePlatform>();
		}

		public static StickyRoundedRectangle GetStickyRoundedRectangle(GameObject platform)
		{
			return platform.GetComponent<StickyRoundedRectangle>();
		}

		public static BoplBody GetBoplBody(GameObject platform)
		{
			return platform.GetComponent<BoplBody>();
		}

		public static AnimateVelocity GetAnimateVelocity(GameObject platform)
		{
			return platform.GetComponent<AnimateVelocity>();
		}

		public static FixTransform GetFixTransform(GameObject platform)
		{
			return platform.GetComponent<FixTransform>();
		}

		public static SpriteRenderer GetSpriteRenderer(GameObject platform)
		{
			return platform.GetComponent<SpriteRenderer>();
		}
	}
	public static class PluginInfo
	{
		public const string PLUGIN_GUID = "PlatformApi";

		public const string PLUGIN_NAME = "PlatformApi";

		public const string PLUGIN_VERSION = "1.0.0";
	}
}
namespace System.Runtime.CompilerServices
{
	[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)]
	internal sealed class IgnoresAccessChecksToAttribute : Attribute
	{
		public IgnoresAccessChecksToAttribute(string assemblyName)
		{
		}
	}
}