Decompiled source of Modern Warfighter Rails v1.0.2

Modern_Warfighter_Rails.dll

Decompiled 8 months ago
using System;
using System.Collections;
using System.ComponentModel;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Logging;
using FistVR;
using HarmonyLib;
using OtherLoader;
using Sodalite.Api;
using UnityEditor;
using UnityEngine;
using UnityEngine.UI;

[assembly: Debuggable(DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("0.0.0.0")]
[module: UnverifiableCode]
namespace Cityrobo
{
	public class ScopeMaterialCreator : MonoBehaviour
	{
		[Header("Amplifier")]
		public Amplifier amplifier;

		[Header("H3VR/HolograpicSight")]
		public Texture H3vrHolograpicSightTexture;

		[ColorUsage(true, true, 0f, float.MaxValue, 0f, float.MaxValue)]
		public Color H3vrHolograpicSightColor;

		public Vector4 H3vrHolograpicSightOffset = default(Vector4);

		public float H3vrHolograpicSightSizeCompensation = 1f;

		public float H3vrHolograpicSightBlendIn = 0f;

		public float H3vrHolograpicSightBlendOut = 0f;

		private Shader _h3vrHolograpicSightShader;

		private Material _h3vrHolograpicSightMaterial;

		private const string c_h3vrHolograpicSightShader = "H3VR/HolograpicSight";

		private const string c_h3vrHolograpicSightMainTex = "_MainTex";

		private const string c_h3vrHolograpicSightMainColor = "_Color";

		private const string c_h3vrHolograpicSightOffset = "_Offset";

		private const string c_h3vrHolograpicSightSizeCompensation = "_SizeCompensation";

		private const string c_h3vrHolograpicSightBlendIn = "_BlendIn";

		private const string c_h3vrHolograpicSightBlendOut = "_BlendOut";

		private const int c_h3vrHolograpicSightRenderQueue = 3001;

		[Header("Unlit/ScopeShader")]
		public Texture UnlitScopeShaderTexture;

		private Shader _unlitScopeShader;

		private static Material _unlitScopeShaderMaterial;

		private const string c_unlitScopeShader = "Unlit/ScopeShader";

		private const string c_unlitScopeShaderMainTex = "_MainTex";

		[Header("Hidden/ScopeBlur")]
		public Texture HiddenScopeBlurTexture;

		private Shader _hiddenScopeBlurShader;

		private static Material _hiddenScopeBlurMaterial;

		private const string c_hiddenScopeBlurShader = "Hidden/ScopeBlur";

		private const string c_hiddenScopeBlurMainTex = "_MainTex";

		private void Awake()
		{
			//IL_0018: Unknown result type (might be due to invalid IL or missing references)
			//IL_0022: Expected O, but got Unknown
			//IL_0055: 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_00ee: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f8: Expected O, but got Unknown
			//IL_0146: Unknown result type (might be due to invalid IL or missing references)
			//IL_0150: Expected O, but got Unknown
			_h3vrHolograpicSightShader = Shader.Find("H3VR/HolograpicSight");
			_h3vrHolograpicSightMaterial = new Material(_h3vrHolograpicSightShader);
			if ((Object)(object)H3vrHolograpicSightTexture != (Object)null)
			{
				_h3vrHolograpicSightMaterial.SetTexture("_MainTex", H3vrHolograpicSightTexture);
			}
			_h3vrHolograpicSightMaterial.SetColor("_Color", H3vrHolograpicSightColor);
			_h3vrHolograpicSightMaterial.SetVector("_Offset", H3vrHolograpicSightOffset);
			_h3vrHolograpicSightMaterial.SetFloat("_SizeCompensation", H3vrHolograpicSightSizeCompensation);
			_h3vrHolograpicSightMaterial.SetFloat("_BlendIn", H3vrHolograpicSightBlendIn);
			_h3vrHolograpicSightMaterial.SetFloat("_BlendOut", H3vrHolograpicSightBlendOut);
			_h3vrHolograpicSightMaterial.renderQueue = 3001;
			if ((Object)(object)_unlitScopeShaderMaterial == (Object)null)
			{
				_unlitScopeShader = Shader.Find("Unlit/ScopeShader");
				_unlitScopeShaderMaterial = new Material(_unlitScopeShader);
				if ((Object)(object)UnlitScopeShaderTexture != (Object)null)
				{
					_unlitScopeShaderMaterial.SetTexture("_MainTex", UnlitScopeShaderTexture);
				}
			}
			if ((Object)(object)_hiddenScopeBlurMaterial == (Object)null)
			{
				_hiddenScopeBlurShader = Shader.Find("Hidden/ScopeBlur");
				_hiddenScopeBlurMaterial = new Material(_hiddenScopeBlurShader);
				if ((Object)(object)HiddenScopeBlurTexture != (Object)null)
				{
					_hiddenScopeBlurMaterial.SetTexture("_MainTex", HiddenScopeBlurTexture);
				}
			}
			ScopeCam scopeCam = amplifier.ScopeCam;
			((Renderer)((Component)scopeCam).GetComponent<MeshRenderer>()).sharedMaterial = _unlitScopeShaderMaterial;
			scopeCam.PostMaterial = _hiddenScopeBlurMaterial;
			((Renderer)scopeCam.Reticule.GetComponent<MeshRenderer>()).material = _h3vrHolograpicSightMaterial;
		}
	}
	public class RealtimeClock : MonoBehaviour
	{
		public Text screen;

		public string timeFormat = "hh:mm:sstt";

		public void FixedUpdate()
		{
			screen.text = DateTime.Now.ToString(timeFormat);
		}
	}
}
[ExecuteInEditMode]
public class NightVisionPostEffect : MonoBehaviour
{
	public Material nightVisionMat;

	public Material bloom;

	public bool renderNightVision = true;

	public bool renderBloom = true;

	[Range(1f, 16f)]
	public int iterations = 1;

	private const int BoxDownPrefilterPass = 0;

	private const int BoxDownPass = 1;

	private const int BoxUpPass = 2;

	private const int ApplyBloomPass = 3;

	private RenderTexture[] textures = (RenderTexture[])(object)new RenderTexture[16];

	public void Awake()
	{
		((Component)this).GetComponent<Camera>().depthTextureMode = (DepthTextureMode)1;
	}

	private void OnRenderImage(RenderTexture src, RenderTexture dest)
	{
		//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_001d: 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_00b9: Unknown result type (might be due to invalid IL or missing references)
		int num = ((Texture)src).width / 2;
		int num2 = ((Texture)src).height / 2;
		RenderTextureFormat format = src.format;
		RenderTexture val = RenderTexture.GetTemporary(num, num2, 0, format);
		if (renderNightVision)
		{
			Graphics.Blit((Texture)(object)src, val, nightVisionMat);
		}
		else
		{
			val = src;
		}
		if (!renderBloom)
		{
			Graphics.Blit((Texture)(object)val, dest);
			RenderTexture.ReleaseTemporary(val);
			return;
		}
		RenderTexture val2 = (textures[0] = RenderTexture.GetTemporary(num, num2, 0, format));
		Graphics.Blit((Texture)(object)val, val2, bloom, 0);
		RenderTexture val3 = val2;
		for (int i = 1; i < iterations; i++)
		{
			num /= 2;
			num2 /= 2;
			if (num2 < 2)
			{
				break;
			}
			val2 = (textures[i] = RenderTexture.GetTemporary(num, num2, 0, format));
			Graphics.Blit((Texture)(object)val3, val2, bloom, 1);
			val3 = val2;
		}
		for (int num3 = iterations - 2; num3 >= 0; num3--)
		{
			val2 = textures[num3];
			textures[num3] = null;
			Graphics.Blit((Texture)(object)val3, val2, bloom, 2);
			RenderTexture.ReleaseTemporary(val3);
			val3 = val2;
		}
		bloom.SetTexture("_SourceTex", (Texture)(object)val);
		Graphics.Blit((Texture)(object)val3, dest, bloom, 3);
		RenderTexture.ReleaseTemporary(val3);
		RenderTexture.ReleaseTemporary(val);
	}
}
[ExecuteInEditMode]
public class PostEffectScript : MonoBehaviour
{
	public Material mat;

	private void OnRenderImage(RenderTexture src, RenderTexture dest)
	{
		Graphics.Blit((Texture)(object)src, dest, mat);
	}
}
[RequireComponent(typeof(ParticleSystem))]
public class CFX_AutoDestructShuriken : MonoBehaviour
{
	public bool OnlyDeactivate;

	private void OnEnable()
	{
		((MonoBehaviour)this).StartCoroutine("CheckIfAlive");
	}

	private IEnumerator CheckIfAlive()
	{
		do
		{
			yield return (object)new WaitForSeconds(0.5f);
		}
		while (((Component)this).GetComponent<ParticleSystem>().IsAlive(true));
		if (OnlyDeactivate)
		{
			((Component)this).gameObject.SetActive(false);
		}
		else
		{
			Object.Destroy((Object)(object)((Component)this).gameObject);
		}
	}
}
[RequireComponent(typeof(Light))]
public class CFX_LightIntensityFade : MonoBehaviour
{
	public float duration = 1f;

	public float delay = 0f;

	public float finalIntensity = 0f;

	private float baseIntensity;

	public bool autodestruct;

	private float p_lifetime = 0f;

	private float p_delay;

	private void Start()
	{
		baseIntensity = ((Component)this).GetComponent<Light>().intensity;
	}

	private void OnEnable()
	{
		p_lifetime = 0f;
		p_delay = delay;
		if (delay > 0f)
		{
			((Behaviour)((Component)this).GetComponent<Light>()).enabled = false;
		}
	}

	private void Update()
	{
		if (p_delay > 0f)
		{
			p_delay -= Time.deltaTime;
			if (p_delay <= 0f)
			{
				((Behaviour)((Component)this).GetComponent<Light>()).enabled = true;
			}
		}
		else if (p_lifetime / duration < 1f)
		{
			((Component)this).GetComponent<Light>().intensity = Mathf.Lerp(baseIntensity, finalIntensity, p_lifetime / duration);
			p_lifetime += Time.deltaTime;
		}
		else if (autodestruct)
		{
			Object.Destroy((Object)(object)((Component)this).gameObject);
		}
	}
}
[RequireComponent(typeof(MeshFilter))]
public class WFX_BulletHoleDecal : MonoBehaviour
{
	private static Vector2[] quadUVs = (Vector2[])(object)new Vector2[4]
	{
		new Vector2(0f, 0f),
		new Vector2(0f, 1f),
		new Vector2(1f, 0f),
		new Vector2(1f, 1f)
	};

	public float lifetime = 10f;

	public float fadeoutpercent = 80f;

	public Vector2 frames;

	public bool randomRotation = false;

	public bool deactivate = false;

	private float life;

	private float fadeout;

	private Color color;

	private float orgAlpha;

	private void Awake()
	{
		//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)
		color = ((Component)this).GetComponent<Renderer>().material.GetColor("_TintColor");
		orgAlpha = color.a;
	}

	private void OnEnable()
	{
		//IL_014d: Unknown result type (might be due to invalid IL or missing references)
		int num = Random.Range(0, (int)(frames.x * frames.y));
		int num2 = (int)((float)num % frames.x);
		int num3 = (int)((float)num / frames.y);
		Vector2[] array = (Vector2[])(object)new Vector2[4];
		for (int i = 0; i < 4; i++)
		{
			array[i].x = (quadUVs[i].x + (float)num2) * (1f / frames.x);
			array[i].y = (quadUVs[i].y + (float)num3) * (1f / frames.y);
		}
		((Component)this).GetComponent<MeshFilter>().mesh.uv = array;
		if (randomRotation)
		{
			((Component)this).transform.Rotate(0f, 0f, Random.Range(0f, 360f), (Space)1);
		}
		life = lifetime;
		fadeout = life * (fadeoutpercent / 100f);
		color.a = orgAlpha;
		((Component)this).GetComponent<Renderer>().material.SetColor("_TintColor", color);
		((MonoBehaviour)this).StopAllCoroutines();
		((MonoBehaviour)this).StartCoroutine("holeUpdate");
	}

	private IEnumerator holeUpdate()
	{
		while (life > 0f)
		{
			life -= Time.deltaTime;
			if (life <= fadeout)
			{
				color.a = Mathf.Lerp(0f, orgAlpha, life / fadeout);
				((Component)this).GetComponent<Renderer>().material.SetColor("_TintColor", color);
			}
			yield return null;
		}
	}
}
[RequireComponent(typeof(Light))]
public class WFX_LightFlicker : MonoBehaviour
{
	public float time = 0.05f;

	private float timer;

	private void Start()
	{
		timer = time;
		((MonoBehaviour)this).StartCoroutine("Flicker");
	}

	private IEnumerator Flicker()
	{
		while (true)
		{
			((Behaviour)((Component)this).GetComponent<Light>()).enabled = !((Behaviour)((Component)this).GetComponent<Light>()).enabled;
			do
			{
				timer -= Time.deltaTime;
				yield return null;
			}
			while (timer > 0f);
			timer = time;
		}
	}
}
namespace Andr3a.Modern_Warfighter_Rails
{
	[BepInPlugin("Andr3a.Modern_Warfighter_Rails", "Modern_Warfighter_Rails", "1.0.2")]
	[BepInProcess("h3vr.exe")]
	[Description("Built with MeatKit")]
	[BepInDependency("h3vr.otherloader", "1.3.0")]
	[BepInDependency("h3vr.cityrobo.ModularWorkshopManager", "1.0.0")]
	[BepInDependency("nrgill28.Sodalite", "1.4.1")]
	public class Modern_Warfighter_RailsPlugin : BaseUnityPlugin
	{
		private static readonly string BasePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);

		internal static ManualLogSource Logger;

		private void Awake()
		{
			Logger = ((BaseUnityPlugin)this).Logger;
			LoadAssets();
		}

		private void LoadAssets()
		{
			Harmony.CreateAndPatchAll(Assembly.GetExecutingAssembly(), "Andr3a.Modern_Warfighter_Rails");
			OtherLoader.RegisterDirectLoad(BasePath, "Andr3a.Modern_Warfighter_Rails", "", "", "", "mw_rails");
			OtherLoader.RegisterDirectLoad(BasePath, "Andr3a.Modern_Warfighter_Rails", "", "", "", "kacrails");
			GameAPI.PreloadAllAssets(Path.Combine(BasePath, "mw_modern_warfighter_rails"));
		}
	}
}
public class MagazineGizmos : MonoBehaviour
{
	public float gizmoSize;

	public void OnDrawGizmos()
	{
		//IL_0001: 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)
		Gizmos.color = Color.yellow;
		Gizmos.DrawSphere(((Component)this).transform.position, gizmoSize);
	}
}
public class MagazineHelper : EditorWindow
{
	public FVRFireArmMagazine Magazine;

	public bool isCurved;

	public Transform magazineRadiusCenter;

	public GameObject firstCartridge;

	public int numberOfCartridges = 1;

	public bool mirrorX;

	public float cartridgeOffsetY = 0f;

	public float cartridgeOffsetZ = 0f;

	public float cartridgeAngleOffsetX;

	public bool generateFollowerPoints;

	public bool useFollowerOffsets = false;

	public bool invertFollowerOffsets = false;

	public GameObject follower;

	public float followerOffsetY = 0f;

	public float followerOffsetZ = 0f;

	public bool showGizmo = false;

	public float gizmoSize = 0.01f;

	private GameObject cartridge_root;

	private GameObject[] CartridgeObjectList;

	private MeshFilter[] CartridgeMeshFilterList;

	private MeshRenderer[] CartridgeMeshRendererList;

	private float cartridge_currentX;

	private float cartridge_currentY;

	private float cartridge_currentZ;

	private bool ready1 = true;

	private bool ready2 = true;

	private GameObject follower_root;

	private GameObject[] FollowerObjectList;

	private float follower_currentX;

	private float follower_currentY;

	private float follower_currentZ;

	private float cartridge_angleX;

	private float cartridge_angleY;

	private MagazineGizmos gizmo;

	[MenuItem("Window/Magazine Helper")]
	public static void ShowWindow()
	{
		EditorWindow.GetWindow(typeof(MagazineHelper));
	}

	private void OnGUI()
	{
		//IL_0042: Unknown result type (might be due to invalid IL or missing references)
		//IL_004c: Expected O, but got Unknown
		//IL_00bb: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c5: Expected O, but got Unknown
		//IL_01a6: Unknown result type (might be due to invalid IL or missing references)
		//IL_01b0: Expected O, but got Unknown
		//IL_02b2: Unknown result type (might be due to invalid IL or missing references)
		//IL_02bc: Expected O, but got Unknown
		GUILayout.Label("Cartridge Settings", EditorStyles.boldLabel, (GUILayoutOption[])(object)new GUILayoutOption[0]);
		EditorGUIUtility.labelWidth = 300f;
		Magazine = (FVRFireArmMagazine)EditorGUILayout.ObjectField("Magazine", (Object)(object)Magazine, typeof(FVRFireArmMagazine), true, (GUILayoutOption[])(object)new GUILayoutOption[0]);
		if ((Object)(object)Magazine == (Object)null)
		{
			EditorGUILayout.HelpBox("Please add Magazine!", (MessageType)3);
			ready1 = false;
		}
		isCurved = EditorGUILayout.Toggle("is curved", isCurved, (GUILayoutOption[])(object)new GUILayoutOption[0]);
		if (isCurved)
		{
			magazineRadiusCenter = (Transform)EditorGUILayout.ObjectField("Magazine Radius Center", (Object)(object)magazineRadiusCenter, typeof(Transform), true, (GUILayoutOption[])(object)new GUILayoutOption[0]);
			if ((Object)(object)magazineRadiusCenter == (Object)null)
			{
				EditorGUILayout.HelpBox("Please add Magazine Radius Center!", (MessageType)3);
				ready1 = false;
			}
			else
			{
				cartridgeAngleOffsetX = EditorGUILayout.Slider("Cartridge Angle Offset X", cartridgeAngleOffsetX, -10f, 10f, (GUILayoutOption[])(object)new GUILayoutOption[0]);
				showGizmo = EditorGUILayout.Toggle("Show Curved Mag Gizmo", showGizmo, (GUILayoutOption[])(object)new GUILayoutOption[0]);
				gizmoSize = EditorGUILayout.FloatField("Gizmo Size", gizmoSize, (GUILayoutOption[])(object)new GUILayoutOption[0]);
			}
		}
		else
		{
			showGizmo = false;
		}
		ShowGizmo(showGizmo);
		if (showGizmo)
		{
			gizmo.gizmoSize = gizmoSize;
		}
		firstCartridge = (GameObject)EditorGUILayout.ObjectField("First Cartridge", (Object)(object)firstCartridge, typeof(GameObject), true, (GUILayoutOption[])(object)new GUILayoutOption[0]);
		if ((Object)(object)firstCartridge == (Object)null)
		{
			EditorGUILayout.HelpBox("Please add Reference Cartridge!", (MessageType)3);
			ready1 = false;
		}
		numberOfCartridges = EditorGUILayout.IntField("Number of Cartridges", numberOfCartridges, (GUILayoutOption[])(object)new GUILayoutOption[0]);
		if (numberOfCartridges <= 0)
		{
			numberOfCartridges = 1;
		}
		mirrorX = EditorGUILayout.Toggle("Is double stacked Magazine (mirror X axis)", mirrorX, (GUILayoutOption[])(object)new GUILayoutOption[0]);
		if (!isCurved)
		{
			cartridgeOffsetY = EditorGUILayout.Slider("Cartridge Offset Y", cartridgeOffsetY, -0.1f, 0.1f, (GUILayoutOption[])(object)new GUILayoutOption[0]);
			cartridgeOffsetZ = EditorGUILayout.Slider("Cartridge Offset Z", cartridgeOffsetZ, -0.1f, 0.1f, (GUILayoutOption[])(object)new GUILayoutOption[0]);
		}
		generateFollowerPoints = EditorGUILayout.BeginToggleGroup("Generate Follower Points", generateFollowerPoints);
		follower = (GameObject)EditorGUILayout.ObjectField("Last Round Follower", (Object)(object)follower, typeof(GameObject), true, (GUILayoutOption[])(object)new GUILayoutOption[0]);
		if ((Object)(object)follower == (Object)null && generateFollowerPoints)
		{
			EditorGUILayout.HelpBox("Please add Follower!", (MessageType)3);
			ready2 = false;
		}
		followerOffsetY = cartridgeOffsetY;
		followerOffsetZ = cartridgeOffsetZ;
		EditorGUILayout.EndToggleGroup();
		if (ready1 && !generateFollowerPoints)
		{
			if (GUILayout.Button("Add Cartridges", (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.ExpandWidth(true) }))
			{
				AddCartridges();
			}
			if (GUILayout.Button("Clear Cartridges", (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.ExpandWidth(true) }))
			{
				ClearCartridges(all: true);
			}
		}
		else if (ready1 && ready2)
		{
			if (GUILayout.Button("Add Cartridges and FollowerPoints", (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.ExpandWidth(true) }))
			{
				AddCartridges();
				AddFollowerPoints();
			}
			if (GUILayout.Button("Clear Cartridges and FollowerPoints", (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.ExpandWidth(true) }))
			{
				ClearCartridges(all: true);
				ClearFollowerPoints(all: true);
			}
			if (GUILayout.Button("Remove FollowerPoint Visuals", (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.ExpandWidth(true) }))
			{
				RemoveFollowerPointVisuals();
			}
		}
		ready1 = true;
		ready2 = true;
	}

	private void AddCartridges()
	{
		//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_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_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_00dc: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e6: Expected O, but got Unknown
		//IL_0130: Unknown result type (might be due to invalid IL or missing references)
		//IL_0154: Unknown result type (might be due to invalid IL or missing references)
		//IL_0178: 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_01fd: Unknown result type (might be due to invalid IL or missing references)
		//IL_0202: Unknown result type (might be due to invalid IL or missing references)
		//IL_029a: Unknown result type (might be due to invalid IL or missing references)
		//IL_029f: Unknown result type (might be due to invalid IL or missing references)
		//IL_02a3: Unknown result type (might be due to invalid IL or missing references)
		//IL_02a8: 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_02c1: Unknown result type (might be due to invalid IL or missing references)
		//IL_02c5: Unknown result type (might be due to invalid IL or missing references)
		//IL_02ca: Unknown result type (might be due to invalid IL or missing references)
		//IL_02de: Unknown result type (might be due to invalid IL or missing references)
		//IL_02e3: 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_02ec: Unknown result type (might be due to invalid IL or missing references)
		//IL_021c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0221: 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_024a: Unknown result type (might be due to invalid IL or missing references)
		//IL_024f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0253: Unknown result type (might be due to invalid IL or missing references)
		//IL_0258: Unknown result type (might be due to invalid IL or missing references)
		//IL_026c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0271: Unknown result type (might be due to invalid IL or missing references)
		//IL_0275: 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_02fc: Unknown result type (might be due to invalid IL or missing references)
		//IL_0322: Unknown result type (might be due to invalid IL or missing references)
		//IL_0324: Unknown result type (might be due to invalid IL or missing references)
		//IL_0387: Unknown result type (might be due to invalid IL or missing references)
		//IL_038c: Unknown result type (might be due to invalid IL or missing references)
		//IL_039d: 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_03b2: Unknown result type (might be due to invalid IL or missing references)
		//IL_03b7: Unknown result type (might be due to invalid IL or missing references)
		//IL_03c0: Unknown result type (might be due to invalid IL or missing references)
		ClearCartridges();
		CartridgeObjectList = (GameObject[])(object)new GameObject[numberOfCartridges];
		CartridgeMeshFilterList = (MeshFilter[])(object)new MeshFilter[numberOfCartridges];
		CartridgeMeshRendererList = (MeshRenderer[])(object)new MeshRenderer[numberOfCartridges];
		CartridgeObjectList[0] = firstCartridge;
		CartridgeMeshFilterList[0] = firstCartridge.GetComponent<MeshFilter>();
		CartridgeMeshRendererList[0] = firstCartridge.GetComponent<MeshRenderer>();
		cartridge_currentX = firstCartridge.transform.position.x;
		cartridge_currentY = firstCartridge.transform.position.y;
		cartridge_currentZ = firstCartridge.transform.position.z;
		if ((Object)(object)cartridge_root == (Object)null)
		{
			cartridge_root = new GameObject();
			((Object)cartridge_root).name = "Cartridge Root";
			cartridge_root.transform.parent = firstCartridge.transform.parent;
			cartridge_root.transform.localPosition = new Vector3(0f, 0f, 0f);
			cartridge_root.transform.localEulerAngles = new Vector3(0f, 0f, 0f);
			cartridge_root.transform.localScale = new Vector3(1f, 1f, 1f);
		}
		Vector3 eulerAngles = default(Vector3);
		Vector3 val2 = default(Vector3);
		for (int i = 2; i <= numberOfCartridges; i++)
		{
			if (isCurved)
			{
				Vector3 val = CalculateNextCartridgePos(cartridgeAngleOffsetX * (float)(i - 1));
				cartridge_currentY = val.y;
				cartridge_currentZ = val.z;
			}
			else
			{
				cartridge_currentY += cartridgeOffsetY;
				cartridge_currentZ += cartridgeOffsetZ;
			}
			Quaternion localRotation = firstCartridge.transform.localRotation;
			if (isCurved)
			{
				Quaternion localRotation2 = firstCartridge.transform.localRotation;
				float num = ((Quaternion)(ref localRotation2)).eulerAngles.x - cartridgeAngleOffsetX * (float)(i - 1);
				Quaternion localRotation3 = firstCartridge.transform.localRotation;
				float y = ((Quaternion)(ref localRotation3)).eulerAngles.y;
				Quaternion localRotation4 = firstCartridge.transform.localRotation;
				((Vector3)(ref eulerAngles))..ctor(num, y, ((Quaternion)(ref localRotation4)).eulerAngles.z);
			}
			else
			{
				Quaternion localRotation5 = firstCartridge.transform.localRotation;
				float x = ((Quaternion)(ref localRotation5)).eulerAngles.x;
				Quaternion localRotation6 = firstCartridge.transform.localRotation;
				float y2 = ((Quaternion)(ref localRotation6)).eulerAngles.y;
				Quaternion localRotation7 = firstCartridge.transform.localRotation;
				((Vector3)(ref eulerAngles))..ctor(x, y2, ((Quaternion)(ref localRotation7)).eulerAngles.z);
			}
			((Quaternion)(ref localRotation)).eulerAngles = eulerAngles;
			((Vector3)(ref val2))..ctor(cartridge_currentX, cartridge_currentY, cartridge_currentZ);
			GameObject val3 = Object.Instantiate<GameObject>(firstCartridge, val2, localRotation, cartridge_root.transform);
			((Object)val3).name = ((Object)firstCartridge).name + " (" + i + ")";
			if (mirrorX && i % 2 == 0)
			{
				val3.transform.localPosition = new Vector3(0f - val3.transform.localPosition.x, val3.transform.localPosition.y, val3.transform.localPosition.z);
			}
			CartridgeObjectList[i - 1] = val3;
			CartridgeMeshFilterList[i - 1] = val3.GetComponent<MeshFilter>();
			CartridgeMeshRendererList[i - 1] = val3.GetComponent<MeshRenderer>();
		}
		Magazine.DisplayBullets = CartridgeObjectList;
		Magazine.DisplayMeshFilters = CartridgeMeshFilterList;
		Magazine.DisplayRenderers = (Renderer[])(object)CartridgeMeshRendererList;
	}

	private void ClearCartridges(bool all = false)
	{
		if ((Object)(object)cartridge_root != (Object)null)
		{
			int childCount = cartridge_root.transform.childCount;
			for (int num = childCount - 1; num >= 0; num--)
			{
				Object.DestroyImmediate((Object)(object)((Component)cartridge_root.transform.GetChild(num)).gameObject);
			}
			if (all)
			{
				Object.DestroyImmediate((Object)(object)cartridge_root);
			}
		}
	}

	private void AddFollowerPoints()
	{
		//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_0051: 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_006f: 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_0094: Unknown result type (might be due to invalid IL or missing references)
		//IL_009e: Expected O, but got Unknown
		//IL_00e8: Unknown result type (might be due to invalid IL or missing references)
		//IL_010c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0130: Unknown result type (might be due to invalid IL or missing references)
		//IL_015b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0160: Unknown result type (might be due to invalid IL or missing references)
		//IL_01ce: Unknown result type (might be due to invalid IL or missing references)
		//IL_01d3: Unknown result type (might be due to invalid IL or missing references)
		//IL_026b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0270: Unknown result type (might be due to invalid IL or missing references)
		//IL_0274: Unknown result type (might be due to invalid IL or missing references)
		//IL_0279: Unknown result type (might be due to invalid IL or missing references)
		//IL_028d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0292: 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_029b: Unknown result type (might be due to invalid IL or missing references)
		//IL_02af: Unknown result type (might be due to invalid IL or missing references)
		//IL_02b4: Unknown result type (might be due to invalid IL or missing references)
		//IL_02b8: Unknown result type (might be due to invalid IL or missing references)
		//IL_02bd: Unknown result type (might be due to invalid IL or missing references)
		//IL_01ed: Unknown result type (might be due to invalid IL or missing references)
		//IL_01f2: Unknown result type (might be due to invalid IL or missing references)
		//IL_01f6: Unknown result type (might be due to invalid IL or missing references)
		//IL_01fb: 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_0224: Unknown result type (might be due to invalid IL or missing references)
		//IL_0229: Unknown result type (might be due to invalid IL or missing references)
		//IL_023d: 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_0246: Unknown result type (might be due to invalid IL or missing references)
		//IL_024b: Unknown result type (might be due to invalid IL or missing references)
		//IL_02cd: Unknown result type (might be due to invalid IL or missing references)
		//IL_02da: Unknown result type (might be due to invalid IL or missing references)
		//IL_02dc: Unknown result type (might be due to invalid IL or missing references)
		ClearFollowerPoints();
		FollowerObjectList = (GameObject[])(object)new GameObject[numberOfCartridges];
		FollowerObjectList[0] = follower;
		follower_currentX = follower.transform.position.x;
		follower_currentY = follower.transform.position.y;
		follower_currentZ = follower.transform.position.z;
		if ((Object)(object)follower_root == (Object)null)
		{
			follower_root = new GameObject();
			((Object)follower_root).name = "Follower Root";
			follower_root.transform.parent = follower.transform.parent;
			follower_root.transform.localPosition = new Vector3(0f, 0f, 0f);
			follower_root.transform.localEulerAngles = new Vector3(0f, 0f, 0f);
			follower_root.transform.localScale = new Vector3(1f, 1f, 1f);
		}
		Vector3 val2 = default(Vector3);
		Vector3 eulerAngles = default(Vector3);
		for (int i = 2; i <= numberOfCartridges; i++)
		{
			if (isCurved)
			{
				Vector3 val = CalculateNextCartridgePos(cartridgeAngleOffsetX * (float)(i - 1));
				follower_currentY = val.y;
				follower_currentZ = val.z;
			}
			else
			{
				follower_currentY += followerOffsetY;
				follower_currentZ += followerOffsetZ;
			}
			((Vector3)(ref val2))..ctor(follower_currentX, follower_currentY, follower_currentZ);
			Quaternion localRotation = follower.transform.localRotation;
			if (isCurved)
			{
				Quaternion localRotation2 = follower.transform.localRotation;
				float num = ((Quaternion)(ref localRotation2)).eulerAngles.x - cartridgeAngleOffsetX * (float)(i - 1);
				Quaternion localRotation3 = follower.transform.localRotation;
				float y = ((Quaternion)(ref localRotation3)).eulerAngles.y;
				Quaternion localRotation4 = follower.transform.localRotation;
				((Vector3)(ref eulerAngles))..ctor(num, y, ((Quaternion)(ref localRotation4)).eulerAngles.z);
			}
			else
			{
				Quaternion localRotation5 = follower.transform.localRotation;
				float x = ((Quaternion)(ref localRotation5)).eulerAngles.x;
				Quaternion localRotation6 = follower.transform.localRotation;
				float y2 = ((Quaternion)(ref localRotation6)).eulerAngles.y;
				Quaternion localRotation7 = follower.transform.localRotation;
				((Vector3)(ref eulerAngles))..ctor(x, y2, ((Quaternion)(ref localRotation7)).eulerAngles.z);
			}
			((Quaternion)(ref localRotation)).eulerAngles = eulerAngles;
			GameObject val3 = Object.Instantiate<GameObject>(follower, val2, localRotation, follower_root.transform);
			((Object)val3).name = ((Object)follower).name + " (" + i + ")";
			FollowerObjectList[i - 1] = val3;
		}
	}

	private void ClearFollowerPoints(bool all = false)
	{
		if ((Object)(object)follower_root != (Object)null)
		{
			int childCount = follower_root.transform.childCount;
			for (int num = childCount - 1; num >= 0; num--)
			{
				Object.DestroyImmediate((Object)(object)((Component)follower_root.transform.GetChild(num)).gameObject);
			}
			if (all)
			{
				Object.DestroyImmediate((Object)(object)follower_root);
			}
		}
	}

	private void RemoveFollowerPointVisuals()
	{
		if ((Object)(object)follower_root == (Object)null)
		{
			return;
		}
		GameObject[] followerObjectList = FollowerObjectList;
		foreach (GameObject val in followerObjectList)
		{
			if ((Object)(object)val != (Object)(object)follower)
			{
				MeshRenderer val2 = val.GetComponent<MeshRenderer>();
				if ((Object)(object)val2 == (Object)null)
				{
					val2 = val.GetComponentInChildren<MeshRenderer>();
				}
				Object.DestroyImmediate((Object)(object)val2);
				MeshFilter val3 = val.GetComponent<MeshFilter>();
				if ((Object)(object)val3 == (Object)null)
				{
					val3 = val.GetComponentInChildren<MeshFilter>();
				}
				Object.DestroyImmediate((Object)(object)val3);
			}
		}
	}

	private void ShowGizmo(bool on)
	{
		switch (on)
		{
		case false:
			if ((Object)(object)gizmo != (Object)null)
			{
				Object.DestroyImmediate((Object)(object)gizmo);
			}
			break;
		case true:
			if ((Object)(object)gizmo == (Object)null)
			{
				gizmo = ((Component)magazineRadiusCenter).gameObject.AddComponent<MagazineGizmos>();
			}
			break;
		}
	}

	private Vector3 CalculateNextCartridgePos(float deltaA)
	{
		//IL_000c: 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_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_0032: 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_008a: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ab: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b0: 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_00ce: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e0: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e1: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e8: Unknown result type (might be due to invalid IL or missing references)
		deltaA *= (float)Math.PI / 180f;
		Vector3 result = default(Vector3);
		Vector3 val = firstCartridge.transform.position - magazineRadiusCenter.position;
		float num = Mathf.Sqrt(Mathf.Pow(val.y, 2f) + Mathf.Pow(val.z, 2f));
		float num2 = Mathf.Atan2(val.y, val.z);
		float num3 = Mathf.Sin(num2 + deltaA) * num + ((Component)magazineRadiusCenter).transform.position.y;
		float num4 = Mathf.Cos(num2 + deltaA) * num + ((Component)magazineRadiusCenter).transform.position.z;
		((Vector3)(ref result))..ctor(firstCartridge.transform.position.x, num3, num4);
		return result;
	}

	private void ClearConsole()
	{
		Assembly assembly = Assembly.GetAssembly(typeof(ActiveEditorTracker));
		Type type = assembly.GetType("UnityEditorInternal.LogEntries");
		MethodInfo method = type.GetMethod("Clear");
		method.Invoke(new object(), null);
	}

	private void OnDestroy()
	{
		Object.DestroyImmediate((Object)(object)gizmo);
	}
}