Decompiled source of TTGL Mod v0.5.4

TTGL/TTGL_Survivor.dll

Decompiled 2 weeks ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Configuration;
using BepInEx.Logging;
using EntityStates;
using EntityStates.Commando;
using EntityStates.Commando.CommandoWeapon;
using EntityStates.GoldGat;
using EntityStates.Huntress;
using EntityStates.Huntress.HuntressWeapon;
using EntityStates.Loader;
using EntityStates.Merc;
using EntityStates.VagrantMonster;
using ExtraSkillSlots;
using HG;
using HG.BlendableTypes;
using IL.RoR2;
using JetBrains.Annotations;
using KinematicCharacterController;
using Mono.Cecil.Cil;
using MonoMod.Cil;
using MonoMod.RuntimeDetour;
using On.RoR2;
using On.RoR2.UI;
using R2API;
using R2API.Utils;
using RideMeExtended;
using RoR2;
using RoR2.Achievements;
using RoR2.Audio;
using RoR2.ContentManagement;
using RoR2.Hologram;
using RoR2.Navigation;
using RoR2.Orbs;
using RoR2.Projectile;
using RoR2.Skills;
using RoR2.SurvivorMannequins;
using RoR2.UI;
using SkillsPlusPlus;
using SkillsPlusPlus.Modifiers;
using TTGL_Survivor.Modules;
using TTGL_Survivor.Modules.Components;
using TTGL_Survivor.Modules.Survivors;
using TTGL_Survivor.Orbs;
using TTGL_Survivor.RideMeExtendedAddin;
using TTGL_Survivor.SkillStates;
using TTGL_Survivor.UI;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.Animations;
using UnityEngine.Events;
using UnityEngine.Networking;
using UnityEngine.Rendering;
using UnityEngine.SceneManagement;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = "")]
[assembly: AssemblyCompany("TTGL_Survivor")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("TTGL_Survivor")]
[assembly: AssemblyTitle("TTGL_Survivor")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
internal class SkillDefInfo
{
	public string skillName;

	public string skillNameToken;

	public string skillDescriptionToken;

	public Sprite skillIcon;

	public SerializableEntityStateType activationState;

	public string activationStateMachineName;

	public int baseMaxStock;

	public float baseRechargeInterval;

	public bool beginSkillCooldownOnSkillEnd;

	public bool canceledFromSprinting;

	public bool forceSprintDuringState;

	public bool fullRestockOnAssign;

	public InterruptPriority interruptPriority;

	public bool isBullets;

	public bool isCombatSkill;

	public bool mustKeyPress;

	public bool noSprint;

	public int rechargeStock;

	public int requiredStock;

	public float shootDelay;

	public int stockToConsume;

	public string[] keywordTokens;
}
public class CustomRendererInfo
{
	internal string childName;

	internal Material material;

	internal bool ignoreOverlays;
}
namespace RoR2.Projectile
{
	[RequireComponent(typeof(ProjectileController))]
	public class GurrenLagannShadesProjectile : NetworkBehaviour, IProjectileImpactBehavior
	{
		public bool canConstrict;

		public float travelSpeed = 40f;

		public float transitionDuration = 1f;

		private float maxFlyStopwatch = 2f;

		public float maxFlyBackStopwatch = 2f;

		public GameObject impactSpark;

		public GameObject crosshairPrefab;

		public bool canHitWorld;

		private ProjectileController projectileController;

		[SyncVar]
		public int boomerangState;

		private Transform ownerTransform;

		private Transform returnTarget;

		private Rigidbody rigidbody;

		private HitBoxGroup hitBoxGroup;

		private float stopwatch;

		private bool hasHitBoss;

		public int NetworkboomerangState
		{
			get
			{
				return boomerangState;
			}
			[param: In]
			set
			{
				((NetworkBehaviour)this).SetSyncVar<int>(value, ref boomerangState, 1u);
			}
		}

		private void Start()
		{
			rigidbody = ((Component)this).GetComponent<Rigidbody>();
			hitBoxGroup = ((Component)this).GetComponent<HitBoxGroup>();
			projectileController = ((Component)this).GetComponent<ProjectileController>();
			if (!Object.op_Implicit((Object)(object)projectileController) || !Object.op_Implicit((Object)(object)projectileController.owner))
			{
				return;
			}
			ownerTransform = projectileController.owner.transform;
			EntityStateMachine component = ((Component)ownerTransform).GetComponent<EntityStateMachine>();
			if (Object.op_Implicit((Object)(object)component))
			{
				ChildLocator componentInChildren = ((Component)component.commonComponents.modelLocator.modelTransform).GetComponentInChildren<ChildLocator>();
				if (Object.op_Implicit((Object)(object)componentInChildren))
				{
					returnTarget = componentInChildren.FindChild("HurtboxChest");
				}
			}
		}

		public void OnProjectileImpact(ProjectileImpactInfo impactInfo)
		{
			//IL_0030: 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_003c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0041: Unknown result type (might be due to invalid IL or missing references)
			if (canHitWorld)
			{
				if (NetworkboomerangState != 2)
				{
					stopwatch = 0f;
					NetworkboomerangState = 2;
					OnFlyBack();
				}
				EffectManager.SimpleImpactEffect(impactSpark, impactInfo.estimatedPointOfImpact, -((Component)this).transform.forward, true);
			}
		}

		private void OnFlyBack()
		{
			ProjectileOverlapAttack component = ((Component)this).gameObject.GetComponent<ProjectileOverlapAttack>();
			if (Object.op_Implicit((Object)(object)component))
			{
				component.ResetOverlapAttack();
			}
		}

		private bool Reel()
		{
			//IL_0013: Unknown result type (might be due to invalid IL or missing references)
			//IL_001e: Unknown result type (might be due to invalid IL or missing references)
			//IL_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_005d: 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_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0072: Unknown result type (might be due to invalid IL or missing references)
			if (Object.op_Implicit((Object)(object)returnTarget))
			{
				Vector3 val = returnTarget.position - ((Component)this).transform.position;
				return ((Vector3)(ref val)).magnitude <= 2f;
			}
			if (Object.op_Implicit((Object)(object)projectileController.owner))
			{
				Vector3 val2 = projectileController.owner.transform.position - ((Component)this).transform.position;
				return ((Vector3)(ref val2)).magnitude <= 2f;
			}
			return true;
		}

		public void FixedUpdate()
		{
			//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_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_00cf: 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_00df: 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_00e6: Unknown result type (might be due to invalid IL or missing references)
			//IL_0131: Unknown result type (might be due to invalid IL or missing references)
			//IL_0136: Unknown result type (might be due to invalid IL or missing references)
			//IL_0143: Unknown result type (might be due to invalid IL or missing references)
			//IL_0144: Unknown result type (might be due to invalid IL or missing references)
			if (!Object.op_Implicit((Object)(object)projectileController.owner))
			{
				if (NetworkServer.active)
				{
					Object.Destroy((Object)(object)((Component)this).gameObject);
				}
				return;
			}
			switch (boomerangState)
			{
			default:
				return;
			case 0:
				rigidbody.velocity = travelSpeed * ((Component)this).transform.forward;
				stopwatch += Time.deltaTime;
				if (stopwatch >= maxFlyStopwatch)
				{
					stopwatch = 0f;
					NetworkboomerangState = 1;
					return;
				}
				break;
			case 1:
			{
				stopwatch += Time.deltaTime;
				float num2 = stopwatch / transitionDuration;
				Vector3 val2 = CalculatePullDirection();
				rigidbody.velocity = Vector3.Lerp(travelSpeed * ((Component)this).transform.forward, travelSpeed * val2, num2);
				if (num2 >= 1f)
				{
					stopwatch = 0f;
					NetworkboomerangState = 2;
					OnFlyBack();
					return;
				}
				break;
			}
			case 2:
			{
				stopwatch += Time.deltaTime;
				bool num = Reel();
				canHitWorld = false;
				Vector3 val = CalculatePullDirection();
				rigidbody.velocity = travelSpeed * val;
				if ((num || stopwatch >= maxFlyBackStopwatch) && NetworkServer.active)
				{
					Object.Destroy((Object)(object)((Component)this).gameObject);
				}
				break;
			}
			}
			if (NetworkServer.active)
			{
				StunLockBoss();
			}
		}

		private void StunLockBoss()
		{
			//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_0039: 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_0048: Unknown result type (might be due to invalid IL or missing references)
			//IL_0049: Unknown result type (might be due to invalid IL or missing references)
			//IL_004e: 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_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_0059: Unknown result type (might be due to invalid IL or missing references)
			if (!canConstrict || hasHitBoss)
			{
				return;
			}
			HitBox[] hitBoxes = hitBoxGroup.hitBoxes;
			for (int i = 0; i < hitBoxes.Length; i++)
			{
				Transform transform = ((Component)hitBoxes[i]).transform;
				Vector3 position = transform.position;
				Vector3 val = transform.lossyScale * 0.5f;
				Quaternion rotation = transform.rotation;
				Collider[] array = Physics.OverlapBox(position, val, rotation, LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.entityPrecise)).mask));
				for (int j = 0; j < array.Length; j++)
				{
					HurtBox component = ((Component)array[j]).GetComponent<HurtBox>();
					if (Object.op_Implicit((Object)(object)component) && Object.op_Implicit((Object)(object)component.healthComponent) && Object.op_Implicit((Object)(object)component.healthComponent.body) && (Object)(object)component.healthComponent.body.teamComponent != (Object)null && component.healthComponent.body.isBoss)
					{
						hasHitBoss = true;
						ConstrictBoss(component.healthComponent.body);
						Object.Destroy((Object)(object)((Component)this).gameObject);
						break;
					}
				}
				if (hasHitBoss)
				{
					break;
				}
			}
		}

		private Vector3 CalculatePullDirection()
		{
			//IL_0013: Unknown result type (might be due to invalid IL or missing references)
			//IL_001e: Unknown result type (might be due to invalid IL or missing references)
			//IL_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_002b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0077: Unknown result type (might be due to invalid IL or missing references)
			//IL_0053: 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_0063: 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_006b: Unknown result type (might be due to invalid IL or missing references)
			Vector3 val;
			if (Object.op_Implicit((Object)(object)returnTarget))
			{
				val = returnTarget.position - ((Component)this).transform.position;
				return ((Vector3)(ref val)).normalized;
			}
			if (Object.op_Implicit((Object)(object)projectileController.owner))
			{
				val = projectileController.owner.transform.position - ((Component)this).transform.position;
				return ((Vector3)(ref val)).normalized;
			}
			return ((Component)this).transform.forward;
		}

		private void ConstrictBoss(CharacterBody bossBody)
		{
			//IL_001e: 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)
			GurrenLagannShadesConstrictComponent componentInChildren = ((Component)bossBody).GetComponentInChildren<GurrenLagannShadesConstrictComponent>();
			if (!Object.op_Implicit((Object)(object)componentInChildren) || componentInChildren.visualState == 1)
			{
				GameObject obj = Object.Instantiate<GameObject>(TemporaryVisualEffects.gurrenLagannShadesBindingEffect, bossBody.corePosition, Quaternion.identity);
				GurrenLagannShadesConstrictComponent component = obj.GetComponent<GurrenLagannShadesConstrictComponent>();
				component.duration = 8f;
				component.parentTransform = bossBody.transform;
				obj.transform.SetParent(bossBody.transform);
			}
			else
			{
				componentInChildren.durationCounter = 0f;
			}
		}

		private void UNetVersion()
		{
		}

		public override bool OnSerialize(NetworkWriter writer, bool forceAll)
		{
			if (forceAll)
			{
				writer.Write(boomerangState);
				return true;
			}
			bool flag = false;
			if ((((NetworkBehaviour)this).syncVarDirtyBits & (true ? 1u : 0u)) != 0)
			{
				if (!flag)
				{
					writer.WritePackedUInt32(((NetworkBehaviour)this).syncVarDirtyBits);
					flag = true;
				}
				writer.Write(boomerangState);
			}
			if (!flag)
			{
				writer.WritePackedUInt32(((NetworkBehaviour)this).syncVarDirtyBits);
			}
			return flag;
		}

		public override void OnDeserialize(NetworkReader reader, bool initialState)
		{
			if (initialState)
			{
				boomerangState = reader.ReadInt32();
			}
			else if ((reader.ReadPackedUInt32() & (true ? 1u : 0u)) != 0)
			{
				boomerangState = reader.ReadInt32();
			}
		}
	}
}
namespace TTGL_Survivor
{
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[NetworkCompatibility(/*Could not decode attribute arguments.*/)]
	[BepInPlugin("com.Mico27.TTGL_Survivor", "TTGL_Survivor", "0.5.4")]
	[R2APISubmoduleDependency(new string[] { "PrefabAPI", "LanguageAPI", "SoundAPI" })]
	public class TTGL_SurvivorPlugin : BaseUnityPlugin, IContentPackProvider
	{
		public const string MODNAME = "TTGL_Survivor";

		public const string MODAUTHOR = "Mico27";

		public const string MODUID = "com.Mico27.TTGL_Survivor";

		public const string MODVERSION = "0.5.4";

		public const string developerPrefix = "MICO27";

		public static bool scepterInstalled = false;

		public static bool skillPlusInstalled = false;

		public static bool rideMeExtendedInstalled = false;

		public static TTGL_SurvivorPlugin instance;

		private SpiralPowerGauge m_SpiralPowerGauge;

		public ContentPack contentPack = new ContentPack();

		internal static List<BuffDef> buffDefs = new List<BuffDef>();

		internal static List<SurvivorDef> survivorDefinitions = new List<SurvivorDef>();

		internal static List<GameObject> bodyPrefabs = new List<GameObject>();

		internal static List<GameObject> masterPrefabs = new List<GameObject>();

		internal static List<GameObject> networkPrefabs = new List<GameObject>();

		internal static List<GameObject> projectilePrefabs = new List<GameObject>();

		internal static List<EffectDef> effectDefs = new List<EffectDef>();

		internal static List<NetworkSoundEventDef> networkSoundEventDefs = new List<NetworkSoundEventDef>();

		internal static List<SkillFamily> skillFamilies = new List<SkillFamily>();

		internal static List<SkillDef> skillDefs = new List<SkillDef>();

		internal static List<Type> entityStates = new List<Type>();

		internal static List<UnlockableDef> unlockableDefs = new List<UnlockableDef>();

		internal static List<SceneDef> sceneDefs = new List<SceneDef>();

		public string identifier => "com.Mico27.TTGL_Survivor";

		public ManualLogSource Logger => ((BaseUnityPlugin)this).Logger;

		public void Awake()
		{
			instance = this;
			try
			{
				if (Chainloader.PluginInfos.ContainsKey("com.DestroyedClone.AncientScepter"))
				{
					scepterInstalled = true;
				}
				if (Chainloader.PluginInfos.ContainsKey("com.cwmlolzlz.skills"))
				{
					skillPlusInstalled = true;
				}
				if (Chainloader.PluginInfos.ContainsKey("com.Mico27.RideMeExtended"))
				{
					rideMeExtendedInstalled = true;
				}
				TTGLAssets.PopulateAssets();
				Config.ReadConfig();
				ItemDisplays.PopulateDisplays();
				States.RegisterStates();
				Buffs.RegisterBuffs();
				Projectiles.RegisterProjectiles();
				TemporaryVisualEffects.RegisterTemporaryVisualEffects();
				Unlockables.AddUnlockables();
				new Lagann().CreateCharacter();
				new Gurren().CreateCharacter();
				new GurrenLagann().CreateCharacter();
				CostTypeDefs.RegisterCostTypeDefs();
				Interactables.RegisterInteractables();
				Tokens.AddTokens();
				Hooks();
				if (skillPlusInstalled)
				{
					AddSkillPlus();
				}
				if (rideMeExtendedInstalled)
				{
					AddRideMeExtended();
				}
			}
			catch (Exception ex)
			{
				Logger.LogError((object)(ex.Message + " - " + ex.StackTrace));
			}
		}

		private void LateSetup(ReadOnlyArray<ReadOnlyContentPack> obj)
		{
			Lagann.SetItemDisplays();
			Gurren.SetItemDisplays();
			GurrenLagann.SetItemDisplays();
		}

		public void OnDestroy()
		{
			try
			{
				UnHooks();
			}
			catch (Exception ex)
			{
				Logger.LogError((object)(ex.Message + " - " + ex.StackTrace));
			}
		}

		private void Hooks()
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: Expected O, but got Unknown
			//IL_0029: Unknown result type (might be due to invalid IL or missing references)
			//IL_0033: Expected O, but got Unknown
			//IL_004b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0055: Expected O, but got Unknown
			//IL_005c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0066: Expected O, but got Unknown
			ContentManager.collectContentPackProviders += new CollectContentPackProvidersDelegate(ContentManager_collectContentPackProviders);
			ContentManager.onContentPacksAssigned += LateSetup;
			HUD.Awake += new hook_Awake(HUD_Awake);
			HUD.onHudTargetChangedGlobal += HUD_onHudTargetChangedGlobal;
			PickupPickerController.FixedUpdateServer += new hook_FixedUpdateServer(PickupPickerController_FixedUpdateServer);
			GenericSkill.Start += new hook_Start(GenericSkill_Start);
			Run.onRunStartGlobal += Run_onRunStartGlobal;
		}

		private void GenericSkill_Start(orig_Start orig, GenericSkill self)
		{
			orig.Invoke(self);
			if (Object.op_Implicit((Object)(object)self.skillDef) && !self.skillDef.fullRestockOnAssign)
			{
				self.RemoveAllStocks();
			}
		}

		private void UnHooks()
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: Expected O, but got Unknown
			//IL_0018: Unknown result type (might be due to invalid IL or missing references)
			//IL_0022: Expected O, but got Unknown
			//IL_003a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0044: Expected O, but got Unknown
			ContentManager.collectContentPackProviders -= new CollectContentPackProvidersDelegate(ContentManager_collectContentPackProviders);
			HUD.Awake -= new hook_Awake(HUD_Awake);
			HUD.onHudTargetChangedGlobal -= HUD_onHudTargetChangedGlobal;
			PickupPickerController.FixedUpdateServer -= new hook_FixedUpdateServer(PickupPickerController_FixedUpdateServer);
		}

		private void HUD_Awake(orig_Awake orig, HUD self)
		{
			CreateSpiralPowerGauge(self);
			orig.Invoke(self);
		}

		private void HUD_onHudTargetChangedGlobal(HUD obj)
		{
			if (Object.op_Implicit((Object)(object)obj) && Object.op_Implicit((Object)(object)obj.targetBodyObject) && Object.op_Implicit((Object)(object)m_SpiralPowerGauge))
			{
				SpiralEnergyComponent component = obj.targetBodyObject.GetComponent<SpiralEnergyComponent>();
				if ((Object)(object)component != (Object)null)
				{
					((Component)m_SpiralPowerGauge).gameObject.SetActive(true);
					m_SpiralPowerGauge.source = component;
				}
				else
				{
					((Component)m_SpiralPowerGauge).gameObject.SetActive(false);
					m_SpiralPowerGauge.source = null;
				}
			}
		}

		private void CreateSpiralPowerGauge(HUD hud)
		{
			//IL_0091: 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)
			//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c7: Unknown result type (might be due to invalid IL or missing references)
			if (!Object.op_Implicit((Object)(object)m_SpiralPowerGauge) && Config.spiralGaugeEnabled && (Object)(object)hud != (Object)null && (Object)(object)hud.mainUIPanel != (Object)null)
			{
				m_SpiralPowerGauge = hud.mainUIPanel.GetComponentInChildren<SpiralPowerGauge>();
				if (!Object.op_Implicit((Object)(object)m_SpiralPowerGauge))
				{
					GameObject val = Object.Instantiate<GameObject>(TTGLAssets.LoadAsset<GameObject>("SpiralPowerPanel"));
					m_SpiralPowerGauge = val.AddComponent<SpiralPowerGauge>();
					val.transform.SetParent(hud.mainUIPanel.transform);
					RectTransform component = val.GetComponent<RectTransform>();
					component.anchorMin = Config.spiralGaugeAnchorMin;
					component.anchorMax = Config.spiralGaugeAnchorMax;
					component.pivot = Config.spiralGaugePivot;
					component.sizeDelta = Config.spiralGaugeSizeDelta;
					component.anchoredPosition = Config.spiralGaugeAnchoredPosition;
					((Transform)component).localScale = Config.spiralGaugeLocalScale;
					val.SetActive(false);
				}
			}
		}

		private void PickupPickerController_FixedUpdateServer(orig_FixedUpdateServer orig, PickupPickerController self)
		{
			//IL_003e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0049: Unknown result type (might be due to invalid IL or missing references)
			//IL_004e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0053: Unknown result type (might be due to invalid IL or missing references)
			CharacterMaster currentParticipantMaster = self.networkUIPromptController.currentParticipantMaster;
			if (!Object.op_Implicit((Object)(object)currentParticipantMaster))
			{
				return;
			}
			CharacterBody body = currentParticipantMaster.GetBody();
			Interactor val = (Object.op_Implicit((Object)(object)body) ? ((Component)body).GetComponent<Interactor>() : null);
			if (Object.op_Implicit((Object)(object)body))
			{
				Vector3 val2 = body.inputBank.aimOrigin - ((Component)self).transform.position;
				if (!((double)((Vector3)(ref val2)).sqrMagnitude > (Object.op_Implicit((Object)(object)val) ? Math.Pow(val.maxInteractionDistance + self.cutoffDistance, 2.0) : ((double)(self.cutoffDistance * self.cutoffDistance)))))
				{
					return;
				}
			}
			self.networkUIPromptController.SetParticipantMaster((CharacterMaster)null);
		}

		private static void Run_onRunStartGlobal(Run obj)
		{
			LagannCombine.playedCutSceneOnce = false;
		}

		[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]
		private void AddSkillPlus()
		{
			SkillModifierManager.LoadSkillModifiers();
		}

		[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]
		private void AddRideMeExtended()
		{
			TTGL_Survivor.RideMeExtendedAddin.RideMeExtendedAddin.AddRideMeExtended();
		}

		[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]
		public static void ExpulseAnyRider(GameObject gameObject)
		{
			TTGL_Survivor.RideMeExtendedAddin.RideMeExtendedAddin.ExpulseAnyRider(gameObject);
		}

		[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]
		public static void ExitSeat(GameObject gameObject)
		{
			TTGL_Survivor.RideMeExtendedAddin.RideMeExtendedAddin.ExitSeat(gameObject);
		}

		private static string GetSpiralPowerRate(CharacterBody body)
		{
			string result = null;
			SpiralEnergyComponent component = ((Component)body).GetComponent<SpiralEnergyComponent>();
			if ((Object)(object)component != (Object)null)
			{
				return (component.charge_rate * 300f).ToString("0.##");
			}
			return result;
		}

		private static string GetSpiralPowerAmount(CharacterBody body)
		{
			string result = null;
			SpiralEnergyComponent component = ((Component)body).GetComponent<SpiralEnergyComponent>();
			if ((Object)(object)component != (Object)null)
			{
				return component.energy.ToString("0.##");
			}
			return result;
		}

		private void ContentManager_collectContentPackProviders(AddContentPackProviderDelegate addContentPackProvider)
		{
			addContentPackProvider.Invoke((IContentPackProvider)(object)this);
		}

		public IEnumerator LoadStaticContentAsync(LoadStaticContentAsyncArgs args)
		{
			contentPack.identifier = identifier;
			contentPack.bodyPrefabs.Add(bodyPrefabs.ToArray());
			contentPack.buffDefs.Add(buffDefs.ToArray());
			contentPack.effectDefs.Add(effectDefs.ToArray());
			contentPack.entityStateTypes.Add(entityStates.ToArray());
			contentPack.masterPrefabs.Add(masterPrefabs.ToArray());
			contentPack.networkedObjectPrefabs.Add(networkPrefabs.ToArray());
			contentPack.networkSoundEventDefs.Add(networkSoundEventDefs.ToArray());
			contentPack.projectilePrefabs.Add(projectilePrefabs.ToArray());
			contentPack.skillDefs.Add(skillDefs.ToArray());
			contentPack.skillFamilies.Add(skillFamilies.ToArray());
			contentPack.survivorDefs.Add(survivorDefinitions.ToArray());
			contentPack.unlockableDefs.Add(unlockableDefs.ToArray());
			contentPack.sceneDefs.Add(sceneDefs.ToArray());
			args.ReportProgress(1f);
			yield break;
		}

		public IEnumerator GenerateContentPackAsync(GetContentPackAsyncArgs args)
		{
			ContentPack.Copy(contentPack, args.output);
			args.ReportProgress(1f);
			yield break;
		}

		public IEnumerator FinalizeAsync(FinalizeAsyncArgs args)
		{
			args.ReportProgress(1f);
			yield break;
		}
	}
}
namespace TTGL_Survivor.SkillStates
{
	public class BaseSpiralConversion : BaseSkillState
	{
		public static float conversionSpeed = 0.05f;

		public static float conversionRatio = 0.6f;

		protected SpiralEnergyComponent spiralEnergyComponent;

		protected GameObject chargeEffect;

		protected uint chargeLoopSFX;

		protected float initialEnergy;

		protected float previousEnergy;

		public override void OnEnter()
		{
			((BaseState)this).OnEnter();
			spiralEnergyComponent = ((EntityState)this).GetComponent<SpiralEnergyComponent>();
			Util.PlaySound(BaseChargeFist.enterSFXString, ((EntityState)this).gameObject);
			chargeLoopSFX = Util.PlaySound(BaseChargeFist.startChargeLoopSFXString, ((EntityState)this).gameObject);
			PlayEnterAnimation();
			CreateChargeEffect();
			HealthComponent healthComponent = ((EntityState)this).healthComponent;
			initialEnergy = healthComponent.barrier + healthComponent.shield;
			previousEnergy = initialEnergy;
			if (NetworkServer.active)
			{
				((EntityState)this).characterBody.AddBuff(Buffs.HiddenInvincibility);
			}
		}

		public override void FixedUpdate()
		{
			//IL_0056: Unknown result type (might be due to invalid IL or missing references)
			((EntityState)this).FixedUpdate();
			HealthComponent healthComponent = ((EntityState)this).healthComponent;
			float num = healthComponent.barrier + healthComponent.shield;
			float num2 = ((initialEnergy > 0f) ? Mathf.Clamp01((initialEnergy - num) / initialEnergy) : 0f);
			AkSoundEngine.SetRTPCValueByPlayingID("loaderShift_chargeAmount", num2 * 100f, chargeLoopSFX);
			if (NetworkServer.active && Object.op_Implicit((Object)(object)spiralEnergyComponent) && ((EntityState)this).healthComponent.fullCombinedHealth > 0f)
			{
				if (num < previousEnergy)
				{
					CorrectSpiralEnergy(previousEnergy - num);
				}
				if (num > 0f)
				{
					ConvertSpiralEnergy();
				}
			}
			if (((EntityState)this).isAuthority && (num <= 0f || !((BaseSkillState)this).IsKeyDownAuthority()))
			{
				((EntityState)this).outer.SetNextStateToMain();
			}
		}

		public override void OnExit()
		{
			if (NetworkServer.active)
			{
				((EntityState)this).characterBody.RemoveBuff(Buffs.HiddenInvincibility);
			}
			Util.PlaySound(BaseChargeFist.endChargeLoopSFXString, ((EntityState)this).gameObject);
			DestroyChargeEffect();
			PlayExitAnimation();
			((EntityState)this).OnExit();
		}

		protected virtual void PlayEnterAnimation()
		{
			((EntityState)this).PlayAnimation("FullBody, Override", "GurrenLagannSpiralConversion");
		}

		protected virtual void PlayExitAnimation()
		{
			((EntityState)this).PlayAnimation("FullBody, Override", "BufferEmpty");
		}

		protected virtual void CreateChargeEffect()
		{
			chargeEffect = Object.Instantiate<GameObject>(TTGLAssets.LoadAsset<GameObject>("SpiralSlowCharge"), ((EntityState)this).characterBody.coreTransform);
		}

		protected virtual void DestroyChargeEffect()
		{
			EntityState.Destroy((Object)(object)chargeEffect);
		}

		private void CorrectSpiralEnergy(float missingEnergy)
		{
			float num = missingEnergy / ((EntityState)this).healthComponent.fullCombinedHealth;
			spiralEnergyComponent.AddSpiralEnergy(num * conversionRatio);
		}

		private void ConvertSpiralEnergy()
		{
			//IL_00d2: 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_00de: 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)
			//IL_00f5: Expected O, but got Unknown
			HealthComponent healthComponent = ((EntityState)this).healthComponent;
			float num = healthComponent.fullCombinedHealth * conversionSpeed * Time.deltaTime;
			float num2 = num;
			if (num > 0f && healthComponent.barrier > 0f)
			{
				if (num <= healthComponent.barrier)
				{
					healthComponent.Networkbarrier = healthComponent.barrier - num;
					num = 0f;
				}
				else
				{
					num -= healthComponent.barrier;
					healthComponent.Networkbarrier = 0f;
				}
			}
			if (num > 0f && healthComponent.shield > 0f)
			{
				if (num <= healthComponent.shield)
				{
					healthComponent.Networkshield = healthComponent.shield - num;
					num = 0f;
				}
				else
				{
					num -= healthComponent.shield;
					healthComponent.Networkshield = 0f;
					float scale = 1f;
					if (Object.op_Implicit((Object)(object)((EntityState)this).characterBody))
					{
						scale = ((EntityState)this).characterBody.radius;
					}
					EffectManager.SpawnEffect(AssetReferences.shieldBreakEffectPrefab, new EffectData
					{
						origin = ((EntityState)this).transform.position,
						scale = scale
					}, true);
				}
			}
			previousEnergy = healthComponent.barrier + healthComponent.shield;
			float num3 = (num2 - Mathf.Max(num, 0f)) / ((EntityState)this).healthComponent.fullCombinedHealth;
			spiralEnergyComponent.AddSpiralEnergy(num3 * 300f * conversionRatio);
			spiralEnergyComponent.energyUptimeStopwatch = 5f;
			((EntityState)this).characterBody.outOfDangerStopwatch = 0f;
		}
	}
	public class GurrenDrillBlaster : BaseSkillState
	{
		public const float damageCoefficient = 0.5f;

		public const float procCoefficient = 0.5f;

		public const float maxDuration = 3f;

		private Animator animator;

		private ChildLocator childLocator;

		private List<Tuple<string, Transform>> muzzles;

		public float totalStopwatch;

		private float stopwatch;

		private float fireFrequency;

		private uint loopSoundID;

		public override void OnEnter()
		{
			((BaseState)this).OnEnter();
			animator = ((EntityState)this).GetModelAnimator();
			animator.SetBool("isFiring", true);
			childLocator = ((EntityState)this).GetModelChildLocator();
			if (Object.op_Implicit((Object)(object)childLocator))
			{
				muzzles = new List<Tuple<string, Transform>>();
				muzzles.Add(new Tuple<string, Transform>("DrillMuzzle1", childLocator.FindChild("DrillMuzzle1")));
				muzzles.Add(new Tuple<string, Transform>("DrillMuzzle2", childLocator.FindChild("DrillMuzzle2")));
				muzzles.Add(new Tuple<string, Transform>("DrillMuzzle3", childLocator.FindChild("DrillMuzzle3")));
				muzzles.Add(new Tuple<string, Transform>("DrillMuzzle4", childLocator.FindChild("DrillMuzzle4")));
			}
			loopSoundID = Util.PlaySound(GoldGatFire.windUpSoundString, ((EntityState)this).gameObject);
			FireBullet();
		}

		private void FireBullet()
		{
			//IL_00a4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b5: 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_00c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d2: 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_00d9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00de: 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_00fb: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fd: Unknown result type (might be due to invalid IL or missing references)
			//IL_0102: Unknown result type (might be due to invalid IL or missing references)
			//IL_0109: Unknown result type (might be due to invalid IL or missing references)
			//IL_0114: Unknown result type (might be due to invalid IL or missing references)
			//IL_011b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0126: Unknown result type (might be due to invalid IL or missing references)
			//IL_0131: Unknown result type (might be due to invalid IL or missing references)
			//IL_013c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0148: Unknown result type (might be due to invalid IL or missing references)
			//IL_0153: Unknown result type (might be due to invalid IL or missing references)
			//IL_015f: Unknown result type (might be due to invalid IL or missing references)
			((BaseState)this).StartAimMode(2f, false);
			float num = Mathf.Clamp01(totalStopwatch / GoldGatFire.windUpDuration);
			fireFrequency = Mathf.Lerp(GoldGatFire.minFireFrequency, GoldGatFire.maxFireFrequency, num) * ((BaseState)this).attackSpeedStat;
			float maxSpread = Mathf.Lerp(GoldGatFire.minSpread, GoldGatFire.maxSpread, num);
			Util.PlaySound(FirePistol2.firePistolSoundString, ((EntityState)this).gameObject);
			if (Object.op_Implicit((Object)(object)animator))
			{
				animator.SetFloat("skill2.playbackRate", fireFrequency);
			}
			foreach (Tuple<string, Transform> muzzle in muzzles)
			{
				if (((EntityState)this).isAuthority)
				{
					new BulletAttack
					{
						owner = ((EntityState)this).gameObject,
						aimVector = ((EntityState)this).inputBank.aimDirection,
						origin = muzzle.Item2.position,
						falloffModel = (FalloffModel)1,
						force = FirePistol2.force,
						damage = ((BaseState)this).damageStat * 0.5f,
						damageColorIndex = (DamageColorIndex)3,
						bulletCount = 1u,
						minSpread = 0f,
						maxSpread = maxSpread,
						radius = 2f,
						tracerEffectPrefab = FirePistol2.tracerEffectPrefab,
						hitEffectPrefab = FirePistol2.hitEffectPrefab,
						isCrit = ((BaseState)this).RollCrit(),
						procCoefficient = 0.5f,
						muzzleName = muzzle.Item1,
						weapon = ((EntityState)this).gameObject
					}.Fire();
				}
				EffectManager.SimpleMuzzleFlash(FirePistol2.muzzleEffectPrefab, ((EntityState)this).gameObject, muzzle.Item1, false);
			}
		}

		public override void FixedUpdate()
		{
			//IL_0050: Unknown result type (might be due to invalid IL or missing references)
			((EntityState)this).FixedUpdate();
			totalStopwatch += Time.deltaTime;
			stopwatch += Time.deltaTime;
			AkSoundEngine.SetRTPCValueByPlayingID(GoldGatFire.windUpRTPC, Mathf.InverseLerp(GoldGatFire.minFireFrequency, GoldGatFire.maxFireFrequency, fireFrequency) * 100f, loopSoundID);
			if (stopwatch > 1f / fireFrequency)
			{
				stopwatch = 0f;
				FireBullet();
			}
			if (((EntityState)this).isAuthority && ((EntityState)this).fixedAge >= 3f)
			{
				((EntityState)this).outer.SetNextStateToMain();
			}
		}

		public override void OnExit()
		{
			animator.SetBool("isFiring", false);
			AkSoundEngine.StopPlayingID(loopSoundID);
			((EntityState)this).OnExit();
		}

		public override InterruptPriority GetMinimumInterruptPriority()
		{
			return (InterruptPriority)2;
		}
	}
	public class GurrenEntering : BaseState
	{
		public const float duration = 6.1f;

		public override void OnEnter()
		{
			((BaseState)this).OnEnter();
			((EntityState)this).PlayAnimation("Body", "GURREN_Interact_Activate");
		}

		public override void FixedUpdate()
		{
			((EntityState)this).FixedUpdate();
			if (((EntityState)this).isAuthority && ((EntityState)this).fixedAge >= 6.1f)
			{
				((EntityState)this).outer.SetNextStateToMain();
			}
		}
	}
	public class GurrenLagannGigaDrillBreak : BaseSkillState
	{
		public static float damageCoefficient = 1000000f;

		public static float radius = 1000000f;

		public static int explosionCount = 2;

		public static float explosionInterval = 2f;

		public static string soundString = "TTGLGigaDrillBreak";

		public static float procCoefficient = 1000000f;

		protected Animator animator;

		protected CharacterBody gigaDrillBreakTarget;

		private float duration;

		private float durationBeforeExplosion;

		private int explosionIndex;

		private Vector3 previousPosition;

		private Vector3 previousTargetPosition;

		private Vector3 specialMovePosition;

		private Transform specialMoveTargetPosition;

		private Transform specialMoveCameraSource;

		private SkippableCamera forcedCamera;

		private bool fired;

		private uint currentSound;

		public override void OnEnter()
		{
			//IL_00ee: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fa: Unknown result type (might be due to invalid IL or missing references)
			//IL_010e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0113: Unknown result type (might be due to invalid IL or missing references)
			//IL_0118: Unknown result type (might be due to invalid IL or missing references)
			//IL_0125: Unknown result type (might be due to invalid IL or missing references)
			//IL_014a: Unknown result type (might be due to invalid IL or missing references)
			//IL_015a: Unknown result type (might be due to invalid IL or missing references)
			//IL_015f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0164: Unknown result type (might be due to invalid IL or missing references)
			//IL_0167: Unknown result type (might be due to invalid IL or missing references)
			//IL_016c: 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_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_01b3: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c7: Unknown result type (might be due to invalid IL or missing references)
			//IL_01cc: Unknown result type (might be due to invalid IL or missing references)
			((BaseState)this).OnEnter();
			if (TTGL_SurvivorPlugin.rideMeExtendedInstalled)
			{
				TTGL_SurvivorPlugin.ExpulseAnyRider(((EntityState)this).gameObject);
			}
			fired = false;
			animator = ((EntityState)this).GetModelAnimator();
			explosionIndex = 0;
			duration = 22.5f;
			durationBeforeExplosion = 16f;
			GurrenLagannController component = ((Component)((EntityState)this).characterBody).GetComponent<GurrenLagannController>();
			if (Object.op_Implicit((Object)(object)component) && Object.op_Implicit((Object)(object)component.gigaDrillBreakTarget))
			{
				gigaDrillBreakTarget = ((Component)component.gigaDrillBreakTarget).GetComponent<CharacterBody>();
				ConstrictBoss(gigaDrillBreakTarget);
			}
			((EntityState)this).PlayAnimation("FullBody, Override", "GurrenLagannGigaDrillBreak", "skill4.playbackRate", duration, 0f);
			if (CameraRigController.IsObjectSpectatedByAnyCamera(((EntityState)this).gameObject))
			{
				currentSound = Util.PlaySound(soundString, ((EntityState)this).gameObject);
			}
			AllowOutOfBound(enabled: true);
			SetAntiGravity(((EntityState)this).characterBody, enabled: true);
			previousPosition = ((Component)((BaseCharacterController)((EntityState)this).characterMotor).Motor).transform.position;
			specialMovePosition = previousPosition + new Vector3(50000f, 0f, 0f);
			SetPosition(((EntityState)this).gameObject, specialMovePosition);
			if (Object.op_Implicit((Object)(object)gigaDrillBreakTarget))
			{
				Vector3 val = gigaDrillBreakTarget.transform.position - ((EntityState)this).characterDirection.targetTransform.position;
				Vector3 normalized = ((Vector3)(ref val)).normalized;
				((EntityState)this).characterDirection.forward = normalized;
				SetAntiGravity(gigaDrillBreakTarget, enabled: true);
				previousTargetPosition = gigaDrillBreakTarget.transform.position;
				SetPosition(((Component)gigaDrillBreakTarget).gameObject, gigaDrillBreakTarget.transform.position + new Vector3(50000f, 0f, 0f));
			}
			ChildLocator modelChildLocator = ((EntityState)this).GetModelChildLocator();
			if (Object.op_Implicit((Object)(object)modelChildLocator))
			{
				specialMoveTargetPosition = modelChildLocator.FindChild("SpecialMoveTargetPosition");
				specialMoveCameraSource = modelChildLocator.FindChild("SpecialMoveCameraSource");
				forcedCamera = ((Component)specialMoveCameraSource).GetComponent<SkippableCamera>();
			}
			UpdateCameraOverride();
			if (NetworkServer.active)
			{
				((EntityState)this).characterBody.AddBuff(Buffs.HiddenInvincibility);
			}
		}

		public override void FixedUpdate()
		{
			//IL_000e: 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)
			//IL_005f: 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)
			((EntityState)this).FixedUpdate();
			SetPosition(((EntityState)this).gameObject, specialMovePosition);
			UpdateCameraOverride();
			if (explosionIndex < explosionCount && ((EntityState)this).fixedAge >= durationBeforeExplosion)
			{
				Explode(Object.op_Implicit((Object)(object)gigaDrillBreakTarget) ? gigaDrillBreakTarget.transform.position : ((EntityState)this).transform.position);
				durationBeforeExplosion += explosionInterval;
				explosionIndex++;
			}
			if (Object.op_Implicit((Object)(object)specialMoveTargetPosition) && Object.op_Implicit((Object)(object)gigaDrillBreakTarget))
			{
				SetPosition(((Component)gigaDrillBreakTarget).gameObject, specialMoveTargetPosition.position);
			}
			if (((EntityState)this).isAuthority && (((EntityState)this).fixedAge >= duration || (Object.op_Implicit((Object)(object)((EntityState)this).inputBank) && ((EntityState)this).inputBank.interact.down)))
			{
				((EntityState)this).outer.SetNextStateToMain();
			}
		}

		public override void OnExit()
		{
			//IL_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_0046: Unknown result type (might be due to invalid IL or missing references)
			//IL_007e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0085: Unknown result type (might be due to invalid IL or missing references)
			//IL_0098: 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_00d5: Unknown result type (might be due to invalid IL or missing references)
			AllowOutOfBound(enabled: false);
			DisableCameraOverride();
			SetPosition(((EntityState)this).gameObject, previousPosition);
			SetAntiGravity(((EntityState)this).characterBody, enabled: false);
			if (Object.op_Implicit((Object)(object)gigaDrillBreakTarget))
			{
				SetPosition(((Component)gigaDrillBreakTarget).gameObject, previousTargetPosition);
				SetAntiGravity(gigaDrillBreakTarget, enabled: false);
			}
			((EntityState)this).PlayAnimation("FullBody, Override", "BufferEmpty");
			if (!fired)
			{
				explosionIndex = 0;
				_ = previousTargetPosition;
				Explode(previousTargetPosition);
				explosionIndex = 1;
				_ = previousTargetPosition;
				Explode(previousTargetPosition);
			}
			if (NetworkServer.active)
			{
				((EntityState)this).characterBody.RemoveBuff(Buffs.HiddenInvincibility);
			}
			if (currentSound != 0)
			{
				AkSoundEngine.StopPlayingID(currentSound);
			}
			TransformToLagann(previousPosition);
			((EntityState)this).OnExit();
		}

		private void Explode(Vector3 target)
		{
			//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_0013: Unknown result type (might be due to invalid IL or missing references)
			//IL_0019: Unknown result type (might be due to invalid IL or missing references)
			//IL_002a: Expected O, but got Unknown
			//IL_003c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0041: Unknown result type (might be due to invalid IL or missing references)
			//IL_0047: Unknown result type (might be due to invalid IL or missing references)
			//IL_004c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0051: Unknown result type (might be due to invalid IL or missing references)
			//IL_005d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0069: 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_007a: 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_0097: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bb: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c2: Unknown result type (might be due to invalid IL or missing references)
			if (explosionIndex == 0)
			{
				EffectManager.SpawnEffect(TTGLAssets.specialExplosion, new EffectData
				{
					origin = target,
					scale = 1f
				}, false);
				return;
			}
			fired = true;
			if (NetworkServer.active)
			{
				new BlastAttack
				{
					damageType = DamageTypeCombo.op_Implicit((DamageType)262162),
					attacker = ((EntityState)this).gameObject,
					inflictor = ((EntityState)this).gameObject,
					teamIndex = TeamComponent.GetObjectTeam(((EntityState)this).gameObject),
					baseDamage = ((BaseState)this).damageStat * damageCoefficient,
					procCoefficient = procCoefficient,
					baseForce = ExplosionAttack.force,
					position = target,
					radius = radius,
					falloffModel = (FalloffModel)0,
					attackerFiltering = (AttackerFiltering)2
				}.Fire();
			}
		}

		private void ConstrictBoss(CharacterBody bossBody)
		{
			//IL_0026: 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)
			if (Object.op_Implicit((Object)(object)bossBody))
			{
				GurrenLagannShadesConstrictComponent componentInChildren = ((Component)bossBody).GetComponentInChildren<GurrenLagannShadesConstrictComponent>();
				if (!Object.op_Implicit((Object)(object)componentInChildren) || componentInChildren.visualState == 1)
				{
					GameObject obj = Object.Instantiate<GameObject>(TemporaryVisualEffects.gurrenLagannShadesBindingEffect, bossBody.corePosition, Quaternion.identity);
					GurrenLagannShadesConstrictComponent component = obj.GetComponent<GurrenLagannShadesConstrictComponent>();
					component.duration = duration;
					component.parentTransform = bossBody.transform;
					obj.transform.SetParent(bossBody.transform);
				}
				else
				{
					componentInChildren.durationCounter = 0f;
					componentInChildren.duration = duration;
				}
			}
		}

		private void UnConstrictBoss(CharacterBody bossBody)
		{
			if (Object.op_Implicit((Object)(object)bossBody))
			{
				GurrenLagannShadesConstrictComponent componentInChildren = ((Component)bossBody).GetComponentInChildren<GurrenLagannShadesConstrictComponent>();
				if (Object.op_Implicit((Object)(object)componentInChildren) && componentInChildren.visualState == 0)
				{
					componentInChildren.durationCounter = 0f;
					componentInChildren.duration = 0f;
				}
			}
		}

		private void SetAntiGravity(CharacterBody character, bool enabled)
		{
			//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_0039: Unknown result type (might be due to invalid IL or missing references)
			if (Object.op_Implicit((Object)(object)character) && Object.op_Implicit((Object)(object)character.characterMotor))
			{
				CharacterGravityParameters gravityParameters = character.characterMotor.gravityParameters;
				gravityParameters.channeledAntiGravityGranterCount += (enabled ? 1 : (-1));
				character.characterMotor.gravityParameters = gravityParameters;
			}
		}

		private void AllowOutOfBound(bool enabled)
		{
			//IL_001c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0026: Expected O, but got Unknown
			//IL_000a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0014: Expected O, but got Unknown
			if (enabled)
			{
				MapZone.TryZoneStart += new hook_TryZoneStart(MapZone_TryZoneStart);
				return;
			}
			MapZone.TryZoneStart -= new hook_TryZoneStart(MapZone_TryZoneStart);
			Collider component = ((Component)((EntityState)this).characterBody).GetComponent<Collider>();
			if (Object.op_Implicit((Object)(object)component))
			{
				MapZone.collidersToCheckInFixedUpdate.Enqueue(component);
			}
			if (Object.op_Implicit((Object)(object)gigaDrillBreakTarget))
			{
				Collider component2 = ((Component)gigaDrillBreakTarget).GetComponent<Collider>();
				if (Object.op_Implicit((Object)(object)component2))
				{
					MapZone.collidersToCheckInFixedUpdate.Enqueue(component2);
				}
			}
		}

		private void MapZone_TryZoneStart(orig_TryZoneStart orig, MapZone self, Collider other)
		{
			//IL_0033: Unknown result type (might be due to invalid IL or missing references)
			CharacterBody component = ((Component)other).GetComponent<CharacterBody>();
			if (Object.op_Implicit((Object)(object)component) && ((Object)(object)component == (Object)(object)gigaDrillBreakTarget || (Object)(object)component == (Object)(object)((EntityState)this).characterBody))
			{
				self.queuedCollisions.Add(new CollisionInfo(self, other));
			}
			else
			{
				orig.Invoke(self, other);
			}
		}

		private void SetPosition(GameObject character, Vector3 newPosition)
		{
			//IL_008f: 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_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0034: Unknown result type (might be due to invalid IL or missing references)
			//IL_003a: Unknown result type (might be due to invalid IL or missing references)
			//IL_003f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0045: 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_0072: 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_007e: Unknown result type (might be due to invalid IL or missing references)
			CharacterMotor component = character.GetComponent<CharacterMotor>();
			if (Object.op_Implicit((Object)(object)component) && Object.op_Implicit((Object)(object)((BaseCharacterController)component).Motor))
			{
				((BaseCharacterController)component).Motor.SetPosition(newPosition, true);
				((BaseCharacterController)component).Motor.BaseVelocity = Vector3.zero;
				component.velocity = Vector3.zero;
				component.rootMotion = Vector3.zero;
				return;
			}
			RigidbodyMotor component2 = character.GetComponent<RigidbodyMotor>();
			if (Object.op_Implicit((Object)(object)component2) && Object.op_Implicit((Object)(object)component2.rigid))
			{
				component2.rigid.MovePosition(newPosition);
				component2.rootMotion = Vector3.zero;
			}
			else
			{
				((EntityState)this).gameObject.transform.position = newPosition;
			}
		}

		private void UpdateCameraOverride()
		{
			if (Object.op_Implicit((Object)(object)specialMoveCameraSource) && Object.op_Implicit((Object)(object)forcedCamera))
			{
				if (CameraRigController.IsObjectSpectatedByAnyCamera(((EntityState)this).gameObject))
				{
					((Component)specialMoveCameraSource).gameObject.SetActive(true);
					forcedCamera.allowUserControl = ((EntityState)this).isAuthority;
				}
				else
				{
					((Component)specialMoveCameraSource).gameObject.SetActive(false);
				}
			}
		}

		private void DisableCameraOverride()
		{
			if (Object.op_Implicit((Object)(object)specialMoveCameraSource))
			{
				((Component)specialMoveCameraSource).gameObject.SetActive(false);
			}
		}

		private void TransformToLagann(Vector3 newPosition)
		{
			//IL_003f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0040: Unknown result type (might be due to invalid IL or missing references)
			//IL_004a: Unknown result type (might be due to invalid IL or missing references)
			//IL_004f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			Util.PlaySound(BaseBeginArrowBarrage.blinkSoundString, ((EntityState)this).gameObject);
			CharacterMaster master = ((EntityState)this).characterBody.master;
			if (NetworkServer.active)
			{
				master.TransformBody("LagannBody");
				SpawnGurren(newPosition);
			}
			GameObject bodyObject = master.GetBodyObject();
			Popup(bodyObject, newPosition + Vector3.up * 5f);
		}

		private void SpawnGurren(Vector3 newPosition)
		{
			//IL_0006: 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_0016: 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_0018: Unknown result type (might be due to invalid IL or missing references)
			//IL_001e: Unknown result type (might be due to invalid IL or missing references)
			//IL_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_002d: 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_003e: 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_0065: 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_0078: Unknown result type (might be due to invalid IL or missing references)
			float num = 0f;
			new MasterSummon
			{
				masterPrefab = Gurren.allyPrefab,
				position = newPosition + Vector3.up * num,
				rotation = ((EntityState)this).characterBody.transform.rotation,
				summonerBodyObject = (((Object)(object)((EntityState)this).characterBody != (Object)null) ? ((Component)((EntityState)this).characterBody).gameObject : null),
				ignoreTeamMemberLimit = true,
				useAmbientLevel = true,
				inventoryToCopy = ((EntityState)this).characterBody.inventory
			}.Perform();
		}

		private void Popup(GameObject character, Vector3 newPosition)
		{
			//IL_0008: 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_0060: 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_0047: 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_004e: Unknown result type (might be due to invalid IL or missing references)
			//IL_004f: Unknown result type (might be due to invalid IL or missing references)
			if (Object.op_Implicit((Object)(object)character))
			{
				Vector3 val = Vector3.up * 20f;
				CharacterMotor component = character.GetComponent<CharacterMotor>();
				if (Object.op_Implicit((Object)(object)component) && Object.op_Implicit((Object)(object)((BaseCharacterController)component).Motor))
				{
					((BaseCharacterController)component).Motor.SetPosition(newPosition, true);
					((BaseCharacterController)component).Motor.BaseVelocity = val;
					component.velocity = val;
				}
				else
				{
					((EntityState)this).gameObject.transform.position = newPosition;
				}
			}
		}
	}
	public class GurrenLagannGigaDrillMaximum : BaseSkillState
	{
		public static float energyCost = 50f;

		public static float c_DamageCoefficient = 7.5f;

		public static bool canBypassArmor = false;

		public static float procCoefficient = 1.5f;

		public int comboCounter;

		protected string hitboxName = "DammageHitbox";

		protected float baseDuration;

		protected float attackStartTime;

		protected float attackEndTime;

		protected float baseEarlyExitTime;

		protected float hitStopDuration;

		protected string playbackRateString = "skill4.playbackRate";

		protected GameObject hitEffectPrefab;

		protected NetworkSoundEventIndex impactSound;

		private float earlyExitTime;

		public float duration;

		private bool hasFired;

		private float hitPauseTimer;

		private OverlapAttack attack;

		private bool inHitPause;

		private float stopwatch;

		private Animator animator;

		private HitStopCachedState hitStopCachedState;

		private Vector3 storedVelocity;

		protected void PlayAttackAnimation()
		{
			((EntityState)this).PlayAnimation("FullBody, Override", "GurrenLagannStandingTauntBattlecry", playbackRateString, duration, 0f);
		}

		protected OverlapAttack CreateAttack(HitBoxGroup hitBoxGroup)
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			//IL_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_001d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0029: 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_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_0041: Unknown result type (might be due to invalid IL or missing references)
			//IL_0053: Unknown result type (might be due to invalid IL or missing references)
			//IL_005e: Unknown result type (might be due to invalid IL or missing references)
			//IL_006a: 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_0080: Unknown result type (might be due to invalid IL or missing references)
			//IL_0087: Unknown result type (might be due to invalid IL or missing references)
			//IL_0093: Unknown result type (might be due to invalid IL or missing references)
			//IL_0095: Unknown result type (might be due to invalid IL or missing references)
			//IL_009a: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a0: Expected O, but got Unknown
			return new OverlapAttack
			{
				damageType = DamageTypeCombo.op_Implicit((DamageType)(canBypassArmor ? 34 : 32)),
				attacker = ((EntityState)this).gameObject,
				inflictor = ((EntityState)this).gameObject,
				teamIndex = ((BaseState)this).GetTeam(),
				damage = c_DamageCoefficient * ((BaseState)this).damageStat,
				procCoefficient = procCoefficient,
				hitEffectPrefab = hitEffectPrefab,
				forceVector = Vector3.zero,
				pushAwayForce = 0f,
				hitBoxGroup = hitBoxGroup,
				isCrit = ((BaseState)this).RollCrit(),
				impactSound = impactSound
			};
		}

		public override void OnEnter()
		{
			//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)
			((BaseState)this).OnEnter();
			if (NetworkServer.active)
			{
				SpiralEnergyComponent component = ((Component)((EntityState)this).characterBody).GetComponent<SpiralEnergyComponent>();
				if (Object.op_Implicit((Object)(object)component))
				{
					component.NetworkEnergy -= energyCost;
				}
			}
			baseDuration = 3f;
			attackStartTime = 0.33f;
			attackEndTime = 0.75f;
			baseEarlyExitTime = 0.25f;
			hitStopDuration = 0.115f;
			hitEffectPrefab = TTGLAssets.punchImpactEffect;
			impactSound = TTGLAssets.drillRushHitSoundEvent.index;
			duration = baseDuration / ((BaseState)this).attackSpeedStat;
			earlyExitTime = baseEarlyExitTime / ((BaseState)this).attackSpeedStat;
			hasFired = false;
			animator = ((EntityState)this).GetModelAnimator();
			HitBoxGroup hitBoxGroup = null;
			Transform modelTransform = ((EntityState)this).GetModelTransform();
			if (Object.op_Implicit((Object)(object)modelTransform))
			{
				hitBoxGroup = Array.Find(((Component)modelTransform).GetComponents<HitBoxGroup>(), (HitBoxGroup element) => element.groupName == hitboxName);
			}
			PlayAttackAnimation();
			attack = CreateAttack(hitBoxGroup);
		}

		public override void OnExit()
		{
			if (!hasFired)
			{
				FireAttack();
			}
			((EntityState)this).PlayAnimation("FullBody, Override", "BufferEmpty");
			((EntityState)this).OnExit();
		}

		protected virtual void OnHitEnemyAuthority()
		{
			//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_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)
			if (!inHitPause)
			{
				storedVelocity = ((EntityState)this).characterMotor.velocity;
				hitStopCachedState = ((BaseState)this).CreateHitStopCachedState(((EntityState)this).characterMotor, animator, playbackRateString);
				hitPauseTimer = hitStopDuration / ((BaseState)this).attackSpeedStat;
				inHitPause = true;
			}
		}

		private void FireAttack()
		{
			if (!hasFired)
			{
				hasFired = true;
				Util.PlayAttackSpeedSound(ChargeArrow.chargeLoopStartSoundString, ((EntityState)this).gameObject, ((BaseState)this).attackSpeedStat);
			}
			if (((EntityState)this).isAuthority && attack.Fire((List<HurtBox>)null))
			{
				OnHitEnemyAuthority();
			}
		}

		public override void FixedUpdate()
		{
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0053: Unknown result type (might be due to invalid IL or missing references)
			//IL_0058: Unknown result type (might be due to invalid IL or missing references)
			//IL_008c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0091: Unknown result type (might be due to invalid IL or missing references)
			((EntityState)this).FixedUpdate();
			hitPauseTimer -= Time.deltaTime;
			if (hitPauseTimer <= 0f && inHitPause)
			{
				((BaseState)this).ConsumeHitStopCachedState(hitStopCachedState, ((EntityState)this).characterMotor, animator);
				inHitPause = false;
				((EntityState)this).characterMotor.velocity = storedVelocity;
			}
			if (!inHitPause)
			{
				stopwatch += Time.deltaTime;
			}
			else
			{
				if (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor))
				{
					((EntityState)this).characterMotor.velocity = Vector3.zero;
				}
				if (Object.op_Implicit((Object)(object)animator))
				{
					animator.SetFloat(playbackRateString, 0f);
				}
			}
			if (stopwatch >= duration * attackStartTime && stopwatch <= duration * attackEndTime)
			{
				FireAttack();
			}
			if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority)
			{
				((EntityState)this).outer.SetNextStateToMain();
			}
		}

		public override InterruptPriority GetMinimumInterruptPriority()
		{
			return (InterruptPriority)1;
		}
	}
	public class GurrenLagannInitGigaDrillBreak : BaseSkillState
	{
		public static float energyCost = 50f;

		public static float damageCoefficient = 2.5f;

		public static float procCoefficient = 10f;

		public static float baseDuration = 2.3f;

		public static float throwForce = 200f;

		private float duration;

		private float fireTime;

		private bool hasFired;

		public override void OnEnter()
		{
			((BaseState)this).OnEnter();
			duration = GurrenLagannThrowingShades.baseDuration / ((BaseState)this).attackSpeedStat;
			fireTime = 0.4f * duration;
			((EntityState)this).characterBody.SetAimTimer(2f);
			string text = "GurrenLagannThrowShadesRight";
			if (Object.op_Implicit((Object)(object)((EntityState)this).skillLocator) && Object.op_Implicit((Object)(object)((EntityState)this).skillLocator.secondary) && ((EntityState)this).skillLocator.secondary.stock % 2 == 1)
			{
				text = "GurrenLagannThrowShadesLeft";
			}
			if (((BaseState)this).isGrounded && Object.op_Implicit((Object)(object)((EntityState)this).characterMotor) && ((Vector3)(ref ((EntityState)this).characterMotor.velocity)).magnitude <= 1f)
			{
				((EntityState)this).PlayAnimation("FullBody, Override", text, "skill2.playbackRate", duration, 0f);
			}
			else
			{
				((EntityState)this).PlayAnimation("Gesture, Override", text, "skill2.playbackRate", duration, 0f);
			}
		}

		public override void OnExit()
		{
			((EntityState)this).OnExit();
		}

		private void Fire()
		{
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0034: Unknown result type (might be due to invalid IL or missing references)
			//IL_0041: 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_004d: Unknown result type (might be due to invalid IL or missing references)
			if (!hasFired)
			{
				hasFired = true;
				Util.PlayAttackSpeedSound(ThrowGlaive.attackSoundString, ((EntityState)this).gameObject, ((BaseState)this).attackSpeedStat);
				if (((EntityState)this).isAuthority)
				{
					Ray aimRay = ((BaseState)this).GetAimRay();
					ProjectileManager.instance.FireProjectile(Projectiles.gigaDrillProjectilePrefab, ((Ray)(ref aimRay)).origin, Util.QuaternionSafeLookRotation(((Ray)(ref aimRay)).direction), ((EntityState)this).gameObject, GurrenLagannThrowingShades.damageCoefficient * ((BaseState)this).damageStat, 100f, ((BaseState)this).RollCrit(), (DamageColorIndex)0, (GameObject)null, GurrenLagannThrowingShades.throwForce, (DamageTypeCombo?)null);
				}
			}
		}

		public override void FixedUpdate()
		{
			((EntityState)this).FixedUpdate();
			if (((EntityState)this).fixedAge >= fireTime)
			{
				Fire();
			}
			if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority)
			{
				((EntityState)this).outer.SetNextStateToMain();
			}
		}

		public override InterruptPriority GetMinimumInterruptPriority()
		{
			return (InterruptPriority)2;
		}
	}
	public class GurrenLagannMain : GenericCharacterMain
	{
	}
	public class GurrenLagannShadesConstrictState : BaseState
	{
		public override void OnEnter()
		{
			((BaseState)this).OnEnter();
			FreezeCharacter(isEnabled: true);
		}

		public override void OnExit()
		{
			FreezeCharacter(isEnabled: false);
			((EntityState)this).OnExit();
		}

		private void FreezeCharacter(bool isEnabled)
		{
			//IL_004c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0051: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: 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)
			if (Object.op_Implicit((Object)(object)((EntityState)this).rigidbody) && !((EntityState)this).rigidbody.isKinematic)
			{
				((EntityState)this).rigidbody.velocity = Vector3.zero;
			}
			if (Object.op_Implicit((Object)(object)((EntityState)this).rigidbodyMotor))
			{
				((Behaviour)((EntityState)this).rigidbodyMotor).enabled = !isEnabled;
				((EntityState)this).rigidbodyMotor.moveVector = Vector3.zero;
			}
			((EntityState)this).healthComponent.isInFrozenState = isEnabled;
			if (Object.op_Implicit((Object)(object)((EntityState)this).characterDirection))
			{
				((EntityState)this).characterDirection.moveVector = ((EntityState)this).characterDirection.forward;
				((Behaviour)((EntityState)this).characterDirection).enabled = !isEnabled;
			}
			if (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor))
			{
				((Behaviour)((EntityState)this).characterMotor).enabled = !isEnabled;
			}
			Animator modelAnimator = ((EntityState)this).GetModelAnimator();
			if (Object.op_Implicit((Object)(object)modelAnimator))
			{
				((Behaviour)modelAnimator).enabled = !isEnabled;
			}
		}

		public override InterruptPriority GetMinimumInterruptPriority()
		{
			return (InterruptPriority)5;
		}
	}
	public class GurrenLagannSpiralConversion : BaseSpiralConversion
	{
		protected override void PlayEnterAnimation()
		{
			((EntityState)this).PlayAnimation("FullBody, Override", "GurrenLagannSpiralConversion");
		}

		protected override void PlayExitAnimation()
		{
			((EntityState)this).PlayAnimation("FullBody, Override", "GurrenLagannSpiralConversionExit");
		}
	}
	public class GurrenLagannSplit : BaseSkillState
	{
		public static float baseDuration = 18f;

		public static float carryOverEnergyPercent = 1f;

		private float energy;

		public override void OnEnter()
		{
			((BaseState)this).OnEnter();
			SpiralEnergyComponent component = ((Component)((EntityState)this).characterBody).GetComponent<SpiralEnergyComponent>();
			energy = component.NetworkEnergy;
		}

		public override void OnExit()
		{
			TransformToLagann();
			((EntityState)this).OnExit();
		}

		public override void FixedUpdate()
		{
			((EntityState)this).FixedUpdate();
			if (((EntityState)this).isAuthority)
			{
				((EntityState)this).outer.SetNextStateToMain();
			}
		}

		public override InterruptPriority GetMinimumInterruptPriority()
		{
			return (InterruptPriority)2;
		}

		private void TransformToLagann()
		{
			//IL_0087: 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_0096: 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)
			Util.PlaySound(BaseBeginArrowBarrage.blinkSoundString, ((EntityState)this).gameObject);
			if (NetworkServer.active && Object.op_Implicit((Object)(object)((EntityState)this).characterBody) && Object.op_Implicit((Object)(object)((EntityState)this).characterBody.master))
			{
				CharacterMaster master = ((EntityState)this).characterBody.master;
				master.TransformBody("LagannBody");
				SpawnGurren();
				((Component)master.GetBody()).GetComponent<SpiralEnergyComponent>().NetworkEnergy = energy - energy * carryOverEnergyPercent;
				GameObject bodyObject = master.GetBodyObject();
				Popup(bodyObject, bodyObject.transform.position + Vector3.up * 5f);
			}
		}

		private void SpawnGurren()
		{
			//IL_0006: 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_0016: 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_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_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_0048: 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_0074: 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_0087: Unknown result type (might be due to invalid IL or missing references)
			float num = 0f;
			new MasterSummon
			{
				masterPrefab = Gurren.allyPrefab,
				position = ((EntityState)this).characterBody.transform.position + Vector3.up * num,
				rotation = ((EntityState)this).characterBody.transform.rotation,
				summonerBodyObject = (((Object)(object)((EntityState)this).characterBody != (Object)null) ? ((Component)((EntityState)this).characterBody).gameObject : null),
				ignoreTeamMemberLimit = true,
				useAmbientLevel = true,
				inventoryToCopy = ((EntityState)this).characterBody.inventory
			}.Perform();
		}

		private void Popup(GameObject character, Vector3 newPosition)
		{
			//IL_0008: 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_0060: 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_0047: 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_004e: Unknown result type (might be due to invalid IL or missing references)
			//IL_004f: Unknown result type (might be due to invalid IL or missing references)
			if (Object.op_Implicit((Object)(object)character))
			{
				Vector3 val = Vector3.up * 20f;
				CharacterMotor component = character.GetComponent<CharacterMotor>();
				if (Object.op_Implicit((Object)(object)component) && Object.op_Implicit((Object)(object)((BaseCharacterController)component).Motor))
				{
					((BaseCharacterController)component).Motor.SetPosition(newPosition, true);
					((BaseCharacterController)component).Motor.BaseVelocity = val;
					component.velocity = val;
				}
				else
				{
					((EntityState)this).gameObject.transform.position = newPosition;
				}
			}
		}
	}
	public class GurrenLagannThrowingShades : BaseSkillState
	{
		public static float damageCoefficient = 2.5f;

		public static float procCoefficient = 0.3f;

		public static float baseDuration = 2.3f;

		public static float throwForce = 200f;

		private float duration;

		private float fireTime;

		private bool hasFired;

		public override void OnEnter()
		{
			((BaseState)this).OnEnter();
			duration = baseDuration / ((BaseState)this).attackSpeedStat;
			fireTime = 0.4f * duration;
			((EntityState)this).characterBody.SetAimTimer(2f);
			string text = "GurrenLagannThrowShadesRight";
			if (Object.op_Implicit((Object)(object)((EntityState)this).skillLocator) && Object.op_Implicit((Object)(object)((EntityState)this).skillLocator.secondary) && ((EntityState)this).skillLocator.secondary.stock % 2 == 1)
			{
				text = "GurrenLagannThrowShadesLeft";
			}
			if (((BaseState)this).isGrounded && Object.op_Implicit((Object)(object)((EntityState)this).characterMotor) && ((Vector3)(ref ((EntityState)this).characterMotor.velocity)).magnitude <= 1f)
			{
				((EntityState)this).PlayAnimation("FullBody, Override", text, "skill2.playbackRate", duration, 0f);
			}
			else
			{
				((EntityState)this).PlayAnimation("Gesture, Override", text, "skill2.playbackRate", duration, 0f);
			}
		}

		public override void OnExit()
		{
			((EntityState)this).OnExit();
		}

		private void Fire()
		{
			//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_0054: Unknown result type (might be due to invalid IL or missing references)
			//IL_005b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0060: Unknown result type (might be due to invalid IL or missing references)
			if (!hasFired)
			{
				hasFired = true;
				Util.PlayAttackSpeedSound(ThrowGlaive.attackSoundString, ((EntityState)this).gameObject, ((BaseState)this).attackSpeedStat);
				if (((EntityState)this).isAuthority)
				{
					Ray aimRay = ((BaseState)this).GetAimRay();
					GameObject val = (Config.useLegacyGigaDrillBreak ? Projectiles.gigaDrillProjectilePrefab : Projectiles.shadesWhirlPrefab);
					ProjectileManager.instance.FireProjectile(val, ((Ray)(ref aimRay)).origin, Util.QuaternionSafeLookRotation(((Ray)(ref aimRay)).direction), ((EntityState)this).gameObject, damageCoefficient * ((BaseState)this).damageStat, 100f, ((BaseState)this).RollCrit(), (DamageColorIndex)0, (GameObject)null, throwForce, (DamageTypeCombo?)null);
				}
			}
		}

		public override void FixedUpdate()
		{
			((EntityState)this).FixedUpdate();
			if (((EntityState)this).fixedAge >= fireTime)
			{
				Fire();
			}
			if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority)
			{
				((EntityState)this).outer.SetNextStateToMain();
			}
		}

		public override InterruptPriority GetMinimumInterruptPriority()
		{
			return (InterruptPriority)2;
		}
	}
	public class GurrenLagannTornadoKick : BaseSkillState
	{
		public static float horizontal_duration = 1.5f;

		public static float vertical_duration = 2f;

		public static float initialSpeedCoefficient = 2.5f;

		public static float finalSpeedCoefficient = 2f;

		public static float damageCoefficient = 1.5f;

		public static float jumpVelocity = 7f;

		public static bool canControlDirection = false;

		public static float procCoefficient = 1f;

		public static string hitboxName = "DammageHitbox";

		public static float dodgeFOV = DodgeState.dodgeFOV;

		private float burstSpeed;

		private Vector3 burstDirection;

		private Animator animator;

		private Vector3 previousPosition;

		public int swingIndex;

		protected float duration;

		protected DamageType damageType;

		protected float pushForce = 300f;

		protected Vector3 bonusForce = Vector3.zero;

		protected float attackStartTime;

		protected float attackEndTime = 1f;

		protected float baseEarlyExitTime = 0.4f;

		protected float hitStopDuration = 0.012f;

		protected float attackRecoil = 0.75f;

		protected float hitHopVelocity = 4f;

		protected string swingSoundString = "";

		protected string hitSoundString = "";

		protected string muzzleString = "";

		protected string playbackRateString = "";

		protected GameObject swingEffectPrefab;

		protected GameObject hitEffectPrefab;

		private bool hasFired;

		private float hitPauseTimer;

		private OverlapAttack attack;

		private bool inHitPause;

		private bool hasHopped;

		private float stopwatch;

		private HitStopCachedState hitStopCachedState;

		private Vector3 storedVelocity;

		private float hitIntervalStopwatch;

		private float hitInterval = 0.5f;

		public override void OnEnter()
		{
			//IL_0063: 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_0031: Unknown result type (might be due to invalid IL or missing references)
			//IL_0036: Unknown result type (might be due to invalid IL or missing references)
			//IL_004f: 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_0091: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_0054: Unknown result type (might be due to invalid IL or missing references)
			//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_013d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0147: Expected O, but got Unknown
			//IL_014e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0153: Unknown result type (might be due to invalid IL or missing references)
			//IL_0158: Unknown result type (might be due to invalid IL or missing references)
			//IL_0186: Unknown result type (might be due to invalid IL or missing references)
			//IL_018b: Unknown result type (might be due to invalid IL or missing references)
			//IL_01cf: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d4: Unknown result type (might be due to invalid IL or missing references)
			//IL_0276: Unknown result type (might be due to invalid IL or missing references)
			//IL_0269: 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_0252: Unknown result type (might be due to invalid IL or missing references)
			//IL_0257: 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_0283: Unknown result type (might be due to invalid IL or missing references)
			//IL_0288: Unknown result type (might be due to invalid IL or missing references)
			//IL_0289: Unknown result type (might be due to invalid IL or missing references)
			//IL_028e: Unknown result type (might be due to invalid IL or missing references)
			((BaseState)this).OnEnter();
			animator = ((EntityState)this).GetModelAnimator();
			playbackRateString = "skill3.playbackRate";
			if (Object.op_Implicit((Object)(object)((EntityState)this).inputBank))
			{
				Vector3 val = ((((EntityState)this).inputBank.moveVector == Vector3.zero) ? Vector3.up : ((EntityState)this).inputBank.moveVector);
				burstDirection = ((Vector3)(ref val)).normalized;
			}
			bool flag = burstDirection == Vector3.up;
			duration = (flag ? vertical_duration : horizontal_duration);
			RecalculateBurstSpeed(flag);
			damageType = (DamageType)2;
			pushForce = 500f;
			bonusForce = Vector3.zero;
			attackStartTime = 0.1f;
			attackEndTime = 0.9f;
			baseEarlyExitTime = 0.3f;
			hitStopDuration = 0.115f;
			attackRecoil = 0.75f;
			hitHopVelocity = 6f;
			hitInterval = 0.5f * ((BaseState)this).attackSpeedStat;
			HitBoxGroup hitBoxGroup = null;
			Transform modelTransform = ((EntityState)this).GetModelTransform();
			if (Object.op_Implicit((Object)(object)modelTransform))
			{
				hitBoxGroup = Array.Find(((Component)modelTransform).GetComponents<HitBoxGroup>(), (HitBoxGroup element) => element.groupName == hitboxName);
			}
			attack = new OverlapAttack();
			attack.damageType = DamageTypeCombo.op_Implicit(damageType);
			attack.attacker = ((EntityState)this).gameObject;
			attack.inflictor = ((EntityState)this).gameObject;
			attack.teamIndex = ((BaseState)this).GetTeam();
			attack.damage = damageCoefficient * ((BaseState)this).damageStat;
			attack.procCoefficient = procCoefficient;
			attack.hitEffectPrefab = hitEffectPrefab;
			attack.forceVector = bonusForce;
			attack.pushAwayForce = pushForce;
			attack.hitBoxGroup = hitBoxGroup;
			attack.isCrit = ((BaseState)this).RollCrit();
			if (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor))
			{
				if (flag)
				{
					((BaseState)this).SmallHop(((EntityState)this).characterMotor, burstSpeed);
				}
				else
				{
					((EntityState)this).characterMotor.velocity.y = 0f;
					((EntityState)this).characterMotor.velocity = burstDirection * burstSpeed;
				}
			}
			Vector3 val2 = (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor) ? ((EntityState)this).characterMotor.velocity : Vector3.zero);
			previousPosition = ((EntityState)this).transform.position - val2;
			((EntityState)this).PlayAnimation("FullBody, Override", "GurrenLagannHurricaneKick", playbackRateString, duration, 0f);
			Util.PlaySound(SlideState.soundString, ((EntityState)this).gameObject);
			if (NetworkServer.active)
			{
				((EntityState)this).characterBody.AddBuff(Buffs.HiddenInvincibility);
			}
		}

		private void RecalculateBurstSpeed(bool isVertical)
		{
			burstSpeed = ((!isVertical) ? ((BaseState)this).moveSpeedStat : jumpVelocity) * Mathf.Lerp(initialSpeedCoefficient, finalSpeedCoefficient, ((EntityState)this).fixedAge / duration);
		}

		public override void FixedUpdate()
		{
			//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_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_0092: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bb: Unknown result type (might be due to invalid IL or missing references)
			//IL_003f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0038: Unknown result type (might be due to invalid IL or missing references)
			//IL_0101: Unknown result type (might be due to invalid IL or missing references)
			//IL_0106: 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_0047: Unknown result type (might be due to invalid IL or missing references)
			//IL_004c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0239: Unknown result type (might be due to invalid IL or missing references)
			//IL_023e: 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_01bf: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c4: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c7: Unknown result type (might be due to invalid IL or missing references)
			//IL_01cc: Unknown result type (might be due to invalid IL or missing references)
			//IL_019e: Unknown result type (might be due to invalid IL or missing references)
			//IL_01da: 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_01e7: 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_01f3: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f4: 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_020d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0214: Unknown result type (might be due to invalid IL or missing references)
			//IL_0219: Unknown result type (might be due to invalid IL or missing references)
			//IL_022c: Unknown result type (might be due to invalid IL or missing references)
			//IL_022d: Unknown result type (might be due to invalid IL or missing references)
			((EntityState)this).FixedUpdate();
			Vector3 val;
			if (canControlDirection && Object.op_Implicit((Object)(object)((EntityState)this).inputBank))
			{
				val = ((((EntityState)this).inputBank.moveVector == Vector3.zero) ? Vector3.up : ((EntityState)this).inputBank.moveVector);
				burstDirection = ((Vector3)(ref val)).normalized;
			}
			bool flag = burstDirection == Vector3.up;
			RecalculateBurstSpeed(flag);
			hitPauseTimer -= Time.deltaTime;
			if (hitPauseTimer <= 0f && inHitPause)
			{
				((BaseState)this).ConsumeHitStopCachedState(hitStopCachedState, ((EntityState)this).characterMotor, animator);
				inHitPause = false;
				((EntityState)this).characterMotor.velocity = storedVelocity;
			}
			if (!inHitPause)
			{
				stopwatch += Time.deltaTime;
				hitIntervalStopwatch += Time.deltaTime;
			}
			else
			{
				if (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor))
				{
					((EntityState)this).characterMotor.velocity = Vector3.zero;
				}
				if (Object.op_Implicit((Object)(object)animator))
				{
					animator.SetFloat(playbackRateString, 0f);
				}
			}
			if (stopwatch >= duration * attackStartTime && stopwatch <= duration * attackEndTime)
			{
				if (hitIntervalStopwatch >= hitInterval)
				{
					hitIntervalStopwatch = 0f;
					attack.ignoredHealthComponentList.Clear();
				}
				FireAttack();
			}
			if (!flag && Object.op_Implicit((Object)(object)((EntityState)this).characterDirection))
			{
				((EntityState)this).characterDirection.forward = burstDirection;
			}
			if (!flag)
			{
				val = ((EntityState)this).transform.position - previousPosition;
				Vector3 normalized = ((Vector3)(ref val)).normalized;
				if (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor) && normalized != Vector3.zero)
				{
					Vector3 val2 = normalized * burstSpeed;
					float num = Mathf.Max(Vector3.Dot(val2, burstDirection), 0f);
					val2 = burstDirection * num;
					val2.y = 0f;
					((EntityState)this).characterMotor.velocity = val2;
				}
			}
			previousPosition = ((EntityState)this).transform.position;
			if (((EntityState)this).isAuthority && ((EntityState)this).fixedAge >= duration)
			{
				((EntityState)this).outer.SetNextStateToMain();
			}
		}

		protected virtual void OnHitEnemyAuthority()
		{
			//IL_0020: Unknown result type (might be due to invalid IL or missing references)
			//IL_0025: Unknown result type (might be due to invalid IL or missing references)
			//IL_003e: 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)
			Util.PlaySound("TTGLDrillRushHit", ((EntityState)this).gameObject);
			if (!inHitPause)
			{
				storedVelocity = ((EntityState)this).characterMotor.velocity;
				hitStopCachedState = ((BaseState)this).CreateHitStopCachedState(((EntityState)this).characterMotor, animator, playbackRateString);
				hitPauseTimer = hitStopDuration / ((BaseState)this).attackSpeedStat;
				inHitPause = true;
			}
		}

		private void FireAttack()
		{
			if (!hasFired)
			{
				hasFired = true;
				Util.PlayAttackSpeedSound(swingSoundString, ((EntityState)this).gameObject, ((BaseState)this).attackSpeedStat);
				if (((EntityState)this).isAuthority)
				{
					((BaseState)this).AddRecoil(-1f * attackRecoil, -2f * attackRecoil, -0.5f * attackRecoil, 0.5f * attackRecoil);
				}
			}
			if (((EntityState)this).isAuthority && attack.Fire((List<HurtBox>)null))
			{
				OnHitEnemyAuthority();
			}
		}

		public override void OnExit()
		{
			((EntityState)this).PlayAnimation("FullBody, Override", "BufferEmpty");
			((EntityState)this).OnExit();
			if (NetworkServer.active)
			{
				((EntityState)this).characterBody.RemoveBuff(Buffs.HiddenInvincibility);
			}
		}

		public override void OnSerialize(NetworkWriter writer)
		{
			//IL_0009: Unknown result type (might be due to invalid IL or missing references)
			((BaseSkillState)this).OnSerialize(writer);
			writer.Write(burstDirection);
		}

		public override void OnDeserialize(NetworkReader reader)
		{
			//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)
			((BaseSkillState)this).OnDeserialize(reader);
			burstDirection = reader.ReadVector3();
		}
	}
	public class GurrenMain : GenericCharacterMain
	{
	}
	public class GurrenRoll : BaseSkillState
	{
		public static float duration = 1.5f;

		public static float initialSpeedCoefficient = 2f;

		public static float finalSpeedCoefficient = 1.5f;

		public static float dodgeFOV = DodgeState.dodgeFOV;

		private float rollSpeed;

		private Vector3 forwardDirection;

		private Animator animator;

		private Vector3 previousPosition;

		public override void OnEnter()
		{
			//IL_008c: 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_0091: Unknown result type (might be due to invalid IL or missing references)
			//IL_0092: Unknown result type (might be due to invalid IL or missing references)
			//IL_0097: Unknown result type (might be due to invalid IL or missing references)
			//IL_0098: Unknown result type (might be due to invalid IL or missing references)
			//IL_009d: Unknown result type (might be due to invalid IL or missing references)
			//IL_009f: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ac: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b1: Unknown result type (might be due to invalid IL or missing references)
			//IL_003b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0040: Unknown result type (might be due to invalid IL or missing references)
			//IL_005f: 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_0123: Unknown result type (might be due to invalid IL or missing references)
			//IL_0116: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ff: Unknown result type (might be due to invalid IL or missing references)
			//IL_0104: 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_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_0128: 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_0135: Unknown result type (might be due to invalid IL or missing references)
			//IL_0136: Unknown result type (might be due to invalid IL or missing references)
			//IL_013b: Unknown result type (might be due to invalid IL or missing references)
			((BaseState)this).OnEnter();
			animator = ((EntityState)this).GetModelAnimator();
			if (((EntityState)this).isAuthority && Object.op_Implicit((Object)(object)((EntityState)this).inputBank) && Object.op_Implicit((Object)(object)((EntityState)this).characterDirection))
			{
				Vector3 val = ((((EntityState)this).inputBank.moveVector == Vector3.zero) ? ((EntityState)this).characterDirection.forward : ((EntityState)this).inputBank.moveVector);
				forwardDirection = ((Vector3)(ref val)).normalized;
			}
			Vector3 val2 = (Object.op_Implicit((Object)(object)((EntityState)this).characterDirection) ? ((EntityState)this).characterDirection.forward : forwardDirection);
			Vector3 val3 = Vector3.Cross(Vector3.up, val2);
			Vector3.Dot(forwardDirection, val2);
			Vector3.Dot(forwardDirection, val3);
			RecalculateRollSpeed();
			if (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor) && Object.op_Implicit((Object)(object)((EntityState)this).characterDirection))
			{
				((EntityState)this).characterMotor.velocity.y = 0f;
				((EntityState)this).characterMotor.velocity = forwardDirection * rollSpeed;
			}
			Vector3 val4 = (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor) ? ((EntityState)this).characterMotor.velocity : Vector3.zero);
			previousPosition = ((EntityState)this).transform.position - val4;
			((EntityState)this).PlayAnimation("FullBody, Override", "GURREN_Roll", "skill3.playbackRate", duration, 0f);
			if (NetworkServer.active)
			{
				((EntityState)this).characterBody.AddTimedBuff(Buffs.HiddenInvincibility, duration);
			}
		}

		private void RecalculateRollSpeed()
		{
			rollSpeed = ((BaseState)this).moveSpeedStat * Mathf.Lerp(initialSpeedCoefficient, finalSpeedCoefficient, ((EntityState)this).fixedAge / duration);
		}

		public override void FixedUpdate()
		{
			//IL_0020: Unknown result type (might be due to invalid IL or missing references)
			//IL_0063: Unknown result type (might be due to invalid IL or missing references)
			//IL_0069: 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_0073: 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_00f3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f8: 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_0097: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00aa: Unknown result type (might be due to invalid IL or missing references)
			//IL_00af: 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 refe