Decompiled source of GunAbility v1.0.1

GunAbility.dll

Decompiled 2 days ago
using System;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using AbilityApi;
using BepInEx;
using BoplFixedMath;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyTitle("Ghost Ability")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("Ghost Ability")]
[assembly: AssemblyCopyright("Copyright ©  2024")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("9e5d4943-526f-4757-941c-a54b3a9e0064")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[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 GunAbility
{
	[BepInPlugin("org.000diggity000.LongAbility", "LongAbility", "1.0.1")]
	public class Plugin : BaseUnityPlugin
	{
		private GameObject BowObject;

		public static BoplBody Arrow;

		public static Stream GetResourceStream(string namespaceName, string path)
		{
			return Assembly.GetExecutingAssembly().GetManifestResourceStream(namespaceName + "." + path);
		}

		private void Awake()
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_000c: Expected O, but got Unknown
			//IL_003b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0049: Expected O, but got Unknown
			//IL_007a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0081: Expected O, but got Unknown
			//IL_00b9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c8: 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_0174: Unknown result type (might be due to invalid IL or missing references)
			//IL_017b: Expected O, but got Unknown
			//IL_0196: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a0: Expected O, but got Unknown
			Harmony val = new Harmony("org.000diggity000.LongAbility");
			MethodBase methodBase = AccessTools.Method(typeof(Arrow), "OnCollide", (Type[])null, (Type[])null);
			val.Patch(methodBase, new HarmonyMethod(AccessTools.Method(typeof(Patches), "OnCollide", (Type[])null, (Type[])null)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null);
			val.PatchAll();
			string directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
			GunAbility gunAbility = ConstructAbility<GunAbility>("Gun");
			((Component)gunAbility).gameObject.AddComponent<PlayerPhysics>();
			Texture2D val2 = new Texture2D(1, 1);
			ImageConversion.LoadImage(val2, ReadFully(GetResourceStream("GunAbility", "AbilityIcon.png")));
			Sprite val3 = Sprite.Create(val2, new Rect(0f, 0f, (float)((Texture)val2).width, (float)((Texture)val2).height), new Vector2(0.5f, 0.5f));
			NamedSprite val4 = default(NamedSprite);
			((NamedSprite)(ref val4))..ctor("Gun", val3, ((Component)gunAbility).gameObject, true);
			Api.RegisterNamedSprites(val4, true);
			GameObject[] array = Resources.FindObjectsOfTypeAll(typeof(GameObject)) as GameObject[];
			GameObject[] array2 = array;
			GameObject[] array3 = array2;
			foreach (GameObject val5 in array3)
			{
				if (((Object)val5).name == "Bow")
				{
					BowObject = val5;
					break;
				}
			}
			Component component = BowObject.GetComponent(typeof(BowTransform));
			BowTransform obj = (BowTransform)((component is BowTransform) ? component : null);
			Arrow = (BoplBody)AccessTools.Field(typeof(BowTransform), "Arrow").GetValue(obj);
		}

		public static byte[] ReadFully(Stream input)
		{
			byte[] array = new byte[16384];
			using MemoryStream memoryStream = new MemoryStream();
			int count;
			while ((count = input.Read(array, 0, array.Length)) > 0)
			{
				memoryStream.Write(array, 0, count);
			}
			return memoryStream.ToArray();
		}

		public static T ConstructAbility<T>(string name) where T : MonoUpdatable
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Expected O, but got Unknown
			//IL_0026: Unknown result type (might be due to invalid IL or missing references)
			//IL_002c: Expected O, but got Unknown
			//IL_0060: Unknown result type (might be due to invalid IL or missing references)
			//IL_006f: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ad: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e7: Unknown result type (might be due to invalid IL or missing references)
			GameObject val = new GameObject(name);
			Object.DontDestroyOnLoad((Object)(object)val);
			Ability val2 = val.AddComponent<Ability>();
			val.AddComponent<FixTransform>();
			val.AddComponent<SpriteRenderer>();
			Texture2D val3 = new Texture2D(2, 2);
			ImageConversion.LoadImage(val3, ReadFully(GetResourceStream("GunAbility", "gun.png")));
			Sprite sprite = Sprite.Create(val3, new Rect(0f, 0f, (float)((Texture)val3).width, (float)((Texture)val3).height), new Vector2(0.5f, 0.5f));
			val.GetComponent<SpriteRenderer>().sprite = sprite;
			((Renderer)val.GetComponent<SpriteRenderer>()).enabled = false;
			val.AddComponent<PlayerBody>();
			val.AddComponent<DPhysicsBox>();
			val.GetComponent<DPhysicsBox>().Scale = (Fix)1.5f;
			val.AddComponent<PlayerCollision>();
			MonoUpdatable val4 = (MonoUpdatable)(object)val.AddComponent<T>();
			if ((Object)(object)val4 == (Object)null)
			{
				Object.Destroy((Object)(object)val);
				throw new MissingReferenceException("Invalid type was fed to ConstructAbility");
			}
			return (T)(object)val4;
		}
	}
	public class GunAbility : MonoUpdatable, IAbilityComponent
	{
		public Ability ab;

		private Player player;

		private FixTransform playerTransform;

		private PlayerBody body;

		private PlayerPhysics playerPhysics;

		private SpriteRenderer spriteRenderer;

		private bool hasFired = true;

		private bool releasedButton;

		private Vec2 inputVector;

		private Vec2 actualInputVector;

		private Fix FirePointOffsetX = (Fix)3f;

		private Fix FirePointOffSetY = -(Fix)3f;

		private RingBuffer<BoplBody> Bullets;

		private BoplBody Bullet;

		public void Awake()
		{
			//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_0056: 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)
			//IL_0072: Expected O, but got Unknown
			//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b5: Unknown result type (might be due to invalid IL or missing references)
			Updater.RegisterUpdatable((MonoUpdatable)(object)this);
			ab = ((Component)this).GetComponent<Ability>();
			ab.Cooldown = (Fix)4L;
			spriteRenderer = ((Component)this).GetComponent<SpriteRenderer>();
			playerPhysics = ((Component)this).GetComponent<PlayerPhysics>();
			body = ((Component)this).GetComponent<PlayerBody>();
			player = PlayerHandler.Get().GetPlayer(ab.GetPlayerInfo().playerId);
			Texture2D val = new Texture2D(2, 2);
			ImageConversion.LoadImage(val, Plugin.ReadFully(Plugin.GetResourceStream("GunAbility", "gun.png")));
			Sprite val2 = Sprite.Create(val, new Rect(0f, 0f, (float)((Texture)val).width, (float)((Texture)val).height), new Vector2(0.5f, 0.5f));
			Bullets = new RingBuffer<BoplBody>(10, true);
		}

		public void Update()
		{
		}

		public override void Init()
		{
		}

		private void OldUpdate(Fix simDeltaTime)
		{
			//IL_001b: 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_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)
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			//IL_0099: Unknown result type (might be due to invalid IL or missing references)
			//IL_009e: Unknown result type (might be due to invalid IL or missing references)
			//IL_009f: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ae: 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)
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0064: 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_0070: 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_0076: 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_0086: 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_008d: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ef: 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_00d7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00dc: Unknown result type (might be due to invalid IL or missing references)
			if (player != null)
			{
				Vec2 val = player.AimVector();
				if (Vec2.Magnitude(val) > (Fix)0.4 && !releasedButton && !hasFired)
				{
					Vec2 val2 = default(Vec2);
					((Vec2)(ref val2))..ctor((Fix)1L / val.x, -(Fix)1L / val.y);
					inputVector = Vec2.Normalized(val2);
				}
				Vec2 val3 = player.AimVector();
				if (Vec2.Magnitude(val) > (Fix)0.4 && !releasedButton && !hasFired)
				{
					actualInputVector = Vec2.Normalized(val3);
				}
				if (!player.AbilityButtonIsDown(ab.GetPlayerInfo().AbilityButtonUsedIndex012) && !hasFired)
				{
					Fire();
					releasedButton = true;
				}
			}
		}

		public override void UpdateSim(Fix SimDeltaTime)
		{
			//IL_0002: 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_0027: 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_005d: Unknown result type (might be due to invalid IL or missing references)
			//IL_015d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0168: Unknown result type (might be due to invalid IL or missing references)
			//IL_016d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0177: Unknown result type (might be due to invalid IL or missing references)
			//IL_017c: Unknown result type (might be due to invalid IL or missing references)
			//IL_018f: Unknown result type (might be due to invalid IL or missing references)
			//IL_019d: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a2: 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_01b4: 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_01d6: Unknown result type (might be due to invalid IL or missing references)
			//IL_01db: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e5: Unknown result type (might be due to invalid IL or missing references)
			//IL_022f: 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_0273: Unknown result type (might be due to invalid IL or missing references)
			//IL_03f7: Unknown result type (might be due to invalid IL or missing references)
			//IL_03fc: Unknown result type (might be due to invalid IL or missing references)
			//IL_0404: Unknown result type (might be due to invalid IL or missing references)
			//IL_0409: Unknown result type (might be due to invalid IL or missing references)
			//IL_0411: Unknown result type (might be due to invalid IL or missing references)
			//IL_0413: Unknown result type (might be due to invalid IL or missing references)
			//IL_0420: Unknown result type (might be due to invalid IL or missing references)
			//IL_0425: Unknown result type (might be due to invalid IL or missing references)
			//IL_042d: Unknown result type (might be due to invalid IL or missing references)
			//IL_042f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0436: Unknown result type (might be due to invalid IL or missing references)
			//IL_043b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0440: Unknown result type (might be due to invalid IL or missing references)
			//IL_0391: Unknown result type (might be due to invalid IL or missing references)
			//IL_03a2: Unknown result type (might be due to invalid IL or missing references)
			//IL_03a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_03b1: Unknown result type (might be due to invalid IL or missing references)
			//IL_044c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0451: Unknown result type (might be due to invalid IL or missing references)
			//IL_045c: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ce: Unknown result type (might be due to invalid IL or missing references)
			//IL_03d3: Unknown result type (might be due to invalid IL or missing references)
			//IL_03dd: Unknown result type (might be due to invalid IL or missing references)
			//IL_03e2: Unknown result type (might be due to invalid IL or missing references)
			//IL_03e7: Unknown result type (might be due to invalid IL or missing references)
			//IL_0479: Unknown result type (might be due to invalid IL or missing references)
			//IL_047e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0489: Unknown result type (might be due to invalid IL or missing references)
			//IL_048e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0493: Unknown result type (might be due to invalid IL or missing references)
			//IL_0290: Unknown result type (might be due to invalid IL or missing references)
			//IL_029c: Unknown result type (might be due to invalid IL or missing references)
			//IL_02b7: Unknown result type (might be due to invalid IL or missing references)
			//IL_02bc: Unknown result type (might be due to invalid IL or missing references)
			//IL_02db: Unknown result type (might be due to invalid IL or missing references)
			//IL_02f4: Unknown result type (might be due to invalid IL or missing references)
			//IL_02f9: Unknown result type (might be due to invalid IL or missing references)
			//IL_0306: Unknown result type (might be due to invalid IL or missing references)
			//IL_030b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0318: Unknown result type (might be due to invalid IL or missing references)
			//IL_031d: Unknown result type (might be due to invalid IL or missing references)
			//IL_034e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0353: Unknown result type (might be due to invalid IL or missing references)
			//IL_0360: Unknown result type (might be due to invalid IL or missing references)
			//IL_0365: Unknown result type (might be due to invalid IL or missing references)
			//IL_0370: Unknown result type (might be due to invalid IL or missing references)
			//IL_04b1: Unknown result type (might be due to invalid IL or missing references)
			//IL_04b6: Unknown result type (might be due to invalid IL or missing references)
			OldUpdate(SimDeltaTime);
			_ = inputVector;
			if (!hasFired)
			{
				float num = (float)(Math.Atan2((float)inputVector.y, (float)inputVector.x) / (Math.PI * 2.0));
				body.rotation = (Fix)num;
				float num2 = num;
				num2 *= 360f;
				if (num2 > 0f && num2 < 90f)
				{
					spriteRenderer.flipX = false;
					spriteRenderer.flipY = false;
				}
				if (num2 > 90f && num2 < 180f)
				{
					spriteRenderer.flipX = true;
					spriteRenderer.flipY = false;
				}
				if (num2 > -180f && num2 < -90f)
				{
					spriteRenderer.flipX = false;
					spriteRenderer.flipY = true;
				}
				if (num2 > -90f && num2 < 0f)
				{
					spriteRenderer.flipX = true;
					spriteRenderer.flipY = true;
				}
			}
			if ((Object)(object)playerPhysics == (Object)null)
			{
				return;
			}
			if (SceneBounds.WaterHeight > body.position.y - (Fix)0.2f)
			{
				AbilityExitInfo info = default(AbilityExitInfo);
				info.position = body.position;
				info.selfImposedVelocity = body.selfImposedVelocity;
				ExitAbility(info);
			}
			if (playerPhysics.IsGrounded() && (Vec2.SqrMagnitude(body.selfImposedVelocity) > (Fix)1E-06f || (Object)(object)playerPhysics.getAttachedGround() == (Object)null || !((Behaviour)playerPhysics.getAttachedGround()).isActiveAndEnabled))
			{
				playerPhysics.gravity_modifier = (Fix)0f;
				playerPhysics.UnGround(false, true);
			}
			if (!playerPhysics.IsGrounded())
			{
				playerPhysics.AddGravityFactor();
				if (playerPhysics.VelocityBasedRaycasts(true, SimDeltaTime) && hasFired)
				{
					AbilityExitInfo val = default(AbilityExitInfo);
					body.rotation = Fix.Zero;
					val.justlanded = true;
					val.groundedSpeed = playerPhysics.groundedSpeed;
					val.isGrounded = playerPhysics.IsGrounded();
					val.isFacingRight = inputVector.x >= 0L;
					val.position = body.position;
					val.selfImposedVelocity = body.selfImposedVelocity;
					val.externalVelocity = body.externalVelocity;
					val.currentlyAttachedGround = playerPhysics.getAttachedGround();
					val.lastSprite = spriteRenderer.sprite;
					val.groundedLocalPosition = playerPhysics.LocalPlatformPos;
					val.radius = playerPhysics.radius;
					((AbilityMonoBehaviour)ab).ExitAbility(val);
				}
			}
			if (!hasFired)
			{
				body.up = inputVector;
				if (Vec2.Magnitude(body.selfImposedVelocity) > (Fix)9f)
				{
					body.selfImposedVelocity = Vec2.Normalized(body.selfImposedVelocity) * (Fix)9f;
				}
			}
			else
			{
				Vec2 selfImposedVelocity = body.selfImposedVelocity;
				Fix val2 = player.HorizontalAxis();
				playerPhysics.AirealMovement(val2, SimDeltaTime);
				Vec2 selfImposedVelocity2 = body.selfImposedVelocity;
				body.selfImposedVelocity = Vec2.Lerp(selfImposedVelocity, selfImposedVelocity2, (Fix)0.5f);
			}
			if (Vec2.Magnitude(body.selfImposedVelocity) > playerPhysics.Speed)
			{
				body.selfImposedVelocity = Vec2.Normalized(body.selfImposedVelocity) * playerPhysics.Speed;
			}
			if (playerPhysics.IsGrounded())
			{
				playerPhysics.gravity_modifier = Fix.Zero;
				playerPhysics.UnGround(false, false);
				playerPhysics.DropPlatformTest();
			}
		}

		public void OnEnterAbility()
		{
			//IL_000d: 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_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_007f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0096: 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)
			//IL_00c4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d4: 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_00ea: Unknown result type (might be due to invalid IL or missing references)
			((Renderer)spriteRenderer).material = ab.GetPlayerInfo().playerMaterial;
			((Renderer)spriteRenderer).enabled = true;
			spriteRenderer.flipX = false;
			spriteRenderer.flipY = false;
			body.position = ab.GetPlayerInfo().position;
			body.rotation = (Fix)0L;
			playerPhysics.SyncPhysicsTo(ab.GetPlayerInfo());
			player = PlayerHandler.Get().GetPlayer(ab.GetPlayerInfo().playerId);
			releasedButton = false;
			hasFired = false;
			inputVector = ab.GetPlayerInfo().upVector;
			body.rotation = Fix.Zero;
			playerPhysics.gravity_modifier = Fix.One;
			playerPhysics.UnGround(false, true);
		}

		public void Fire()
		{
			//IL_0013: 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_0026: 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_0038: 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_0055: Unknown result type (might be due to invalid IL or missing references)
			//IL_0079: 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_0094: 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)
			//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d0: 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_00ed: Expected O, but got Unknown
			//IL_0125: Unknown result type (might be due to invalid IL or missing references)
			//IL_0134: Unknown result type (might be due to invalid IL or missing references)
			//IL_015c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0173: Unknown result type (might be due to invalid IL or missing references)
			//IL_0183: Unknown result type (might be due to invalid IL or missing references)
			//IL_0188: Unknown result type (might be due to invalid IL or missing references)
			//IL_0193: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a3: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a8: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ad: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b4: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b9: Unknown result type (might be due to invalid IL or missing references)
			//IL_01be: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c3: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d2: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e4: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e9: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ee: Unknown result type (might be due to invalid IL or missing references)
			//IL_0200: Unknown result type (might be due to invalid IL or missing references)
			//IL_0213: Unknown result type (might be due to invalid IL or missing references)
			//IL_021b: 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_022a: Unknown result type (might be due to invalid IL or missing references)
			//IL_022f: 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)
			//IL_0236: 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_0256: Unknown result type (might be due to invalid IL or missing references)
			//IL_025b: Unknown result type (might be due to invalid IL or missing references)
			//IL_026f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0282: 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_02a6: Unknown result type (might be due to invalid IL or missing references)
			AudioManager.Get().Play("explosion");
			AbilityExitInfo val = default(AbilityExitInfo);
			val.position = body.position;
			val.selfImposedVelocity = body.selfImposedVelocity;
			float num = (float)(Math.Atan2((float)inputVector.y, (float)inputVector.x) / (Math.PI * 2.0));
			body.rotation = (Fix)num;
			float num2 = num;
			num2 *= 360f;
			Vec2 val2 = CurrentFirePoint();
			BoplBody val3 = FixTransform.InstantiateFixed<BoplBody>(Plugin.Arrow, CurrentFirePoint(), body.rotation);
			((Object)((Component)val3).gameObject).name = "bullet-diggity";
			((Component)val3).GetComponent<Arrow>().StickTo = default(LayerMask);
			Bullets.Add(val3);
			Texture2D val4 = new Texture2D(2, 2);
			ImageConversion.LoadImage(val4, Plugin.ReadFully(Plugin.GetResourceStream("GunAbility", "bullet.png")));
			Sprite sprite = Sprite.Create(val4, new Rect(0f, 0f, (float)((Texture)val4).width, (float)((Texture)val4).height), new Vector2(0.5f, 0.5f));
			((Component)val3).GetComponent<SpriteRenderer>().sprite = sprite;
			((Renderer)((Component)val3).GetComponent<SpriteRenderer>()).material = ab.GetPlayerInfo().playerMaterial;
			val3.Scale = (Fix)0.3f * body.fixtrans.Scale;
			Fix val5 = Fix.One + (body.fixtrans.Scale - Fix.One) / (Fix)2L;
			((Component)val3).GetComponent<IPlayerIdHolder>().SetPlayerId(ab.GetPlayerInfo().playerId);
			inputVector = Vec2.Normalized(inputVector);
			((Renderer)((Component)val3).GetComponent<SpriteRenderer>()).material = ab.GetPlayerInfo().playerMaterial;
			val3.StartVelocity = actualInputVector * (Fix)55L * Fix.One * val5;
			((Component)val3).GetComponent<Projectile>().DelayedEnableHurtOwner((Fix)0.3f);
			val3.gravityScale = (Fix)0L;
			hasFired = true;
			val3.rotation = body.rotation;
			val3.up = body.up;
			val3.right = body.right;
			((AbilityMonoBehaviour)ab).ExitAbility(val);
		}

		public void ExitAbility(AbilityExitInfo info)
		{
			//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)
			//IL_0039: Unknown result type (might be due to invalid IL or missing references)
			((Behaviour)this).enabled = false;
			playerPhysics.gravity_modifier = Fix.One;
			spriteRenderer.flipX = false;
			spriteRenderer.flipY = false;
			((AbilityMonoBehaviour)ab).ExitAbility(info);
		}

		public Vec2 CurrentFirePoint()
		{
			//IL_0007: 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_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_0022: 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_0037: Unknown result type (might be due to invalid IL or missing references)
			//IL_003c: 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_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_0057: 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_006c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0076: 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_0080: 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_0088: Unknown result type (might be due to invalid IL or missing references)
			return body.position + FirePointOffSetY * Vec2.Normalized(player.AimVector()) * body.fixtrans.Scale + FirePointOffsetX * Vec2.Normalized(player.AimVector()) * body.fixtrans.Scale * (Fix)1.5f;
		}

		public void OnScaleChanged(Fix scaleMultiplier)
		{
			throw new NotImplementedException();
		}
	}
	public class Patches
	{
		public static bool OnCollide(Arrow __instance)
		{
			if (((Object)((Component)__instance).gameObject).name == "bullet-diggity")
			{
				Updater.DestroyFix(((Component)__instance).gameObject);
				return false;
			}
			return true;
		}
	}
}