Decompiled source of DBZUtils v6.9.2

DBZUtilities.dll

Decompiled 5 days ago
using System;
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 System.Text;
using BepInEx;
using BepInEx.Configuration;
using EntityStates;
using EntityStates.Commando;
using EntityStates.JellyfishMonster;
using EntityStates.Merc;
using IL.RoR2;
using JetBrains.Annotations;
using KinematicCharacterController;
using Mono.Cecil.Cil;
using MonoMod.Cil;
using On.RoR2;
using On.RoR2.UI;
using R2API;
using R2API.Utils;
using Rewired;
using RoR2;
using RoR2.Achievements;
using RoR2.Orbs;
using RoR2.Projectile;
using RoR2.Skills;
using RoR2.UI;
using TMPro;
using ThreeEyedGames;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.Events;
using UnityEngine.Networking;
using UnityEngine.Rendering;
using UnityEngine.Rendering.PostProcessing;
using UnityEngine.SceneManagement;
using UnityEngine.UI;

[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("DBZUtilities")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyCompany("DBZUtilities")]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = "")]
[assembly: CompilationRelaxations(8)]
[assembly: AssemblyConfiguration("Debug")]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: AssemblyTitle("DBZUtilities")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[ExecuteInEditMode]
public class ChildTubeRenderer : MonoBehaviour
{
	[SerializeField]
	private Vector3[] _positions;

	[SerializeField]
	private int _sides;

	[SerializeField]
	private float _radiusOne;

	[SerializeField]
	private float _radiusTwo;

	[SerializeField]
	private bool _useWorldSpace = true;

	[SerializeField]
	private bool _useTwoRadii = false;

	private Vector3[] _vertices;

	private Mesh _mesh;

	private MeshFilter _meshFilter;

	private MeshRenderer _meshRenderer;

	public Transform start;

	public Transform end;

	public LineRenderer lineRenderer;

	[SerializeField]
	public Vector2 lineRendererScale;

	public Material material
	{
		get
		{
			return ((Renderer)_meshRenderer).material;
		}
		set
		{
			((Renderer)_meshRenderer).material = value;
		}
	}

	private void Awake()
	{
		//IL_0060: Unknown result type (might be due to invalid IL or missing references)
		//IL_006a: Expected O, but got Unknown
		//IL_00c1: 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_00d3: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d8: Unknown result type (might be due to invalid IL or missing references)
		_meshFilter = ((Component)this).GetComponent<MeshFilter>();
		if ((Object)(object)_meshFilter == (Object)null)
		{
			_meshFilter = ((Component)this).gameObject.AddComponent<MeshFilter>();
		}
		_meshRenderer = ((Component)this).GetComponent<MeshRenderer>();
		if ((Object)(object)_meshRenderer == (Object)null)
		{
			_meshRenderer = ((Component)this).gameObject.AddComponent<MeshRenderer>();
		}
		_mesh = new Mesh();
		_meshFilter.mesh = _mesh;
		start = ((Component)((Component)this).transform.parent).GetComponent<TubeRenderer>().start;
		end = ((Component)((Component)this).transform.parent).GetComponent<TubeRenderer>().end;
		_positions = (Vector3[])(object)new Vector3[2] { start.position, end.position };
		if (Object.op_Implicit((Object)(object)lineRenderer))
		{
			lineRenderer.positionCount = 2;
		}
	}

	private void OnEnable()
	{
		((Renderer)_meshRenderer).enabled = true;
	}

	private void OnDisable()
	{
		((Renderer)_meshRenderer).enabled = false;
	}

	private void Update()
	{
		//IL_0015: Unknown result type (might be due to invalid IL or missing references)
		//IL_001a: Unknown result type (might be due to invalid IL or missing references)
		//IL_002c: 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_0053: 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)
		GenerateMesh();
		_positions[0] = start.position;
		_positions[1] = end.position;
		if (Object.op_Implicit((Object)(object)lineRenderer))
		{
			lineRenderer.SetPosition(0, start.position);
			lineRenderer.SetPosition(1, end.position);
			lineRenderer.startWidth = lineRendererScale.x;
			lineRenderer.endWidth = lineRendererScale.y;
		}
	}

	private void OnValidate()
	{
		_sides = Mathf.Max(3, _sides);
	}

	public void SetPositions(Vector3[] positions)
	{
		_positions = positions;
		GenerateMesh();
	}

	private void GenerateMesh()
	{
		//IL_002e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0038: Expected O, but got Unknown
		//IL_0121: 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_0146: 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_013c: Unknown result type (might be due to invalid IL or missing references)
		//IL_014d: Unknown result type (might be due to invalid IL or missing references)
		if ((Object)(object)_mesh == (Object)null || _positions == null || _positions.Length <= 1)
		{
			_mesh = new Mesh();
			return;
		}
		int num = _sides * _positions.Length;
		if (_vertices == null || _vertices.Length != num)
		{
			_vertices = (Vector3[])(object)new Vector3[num];
			int[] triangles = GenerateIndices();
			Vector2[] uv = GenerateUVs();
			if (num > _mesh.vertexCount)
			{
				_mesh.vertices = _vertices;
				_mesh.triangles = triangles;
				_mesh.uv = uv;
			}
			else
			{
				_mesh.triangles = triangles;
				_mesh.vertices = _vertices;
				_mesh.uv = uv;
			}
		}
		int num2 = 0;
		for (int i = 0; i < _positions.Length; i++)
		{
			Vector3[] array = CalculateCircle(i);
			Vector3[] array2 = array;
			foreach (Vector3 val in array2)
			{
				_vertices[num2++] = (_useWorldSpace ? ((Component)this).transform.InverseTransformPoint(val) : val);
			}
		}
		_mesh.vertices = _vertices;
		_mesh.RecalculateNormals();
		_mesh.RecalculateBounds();
		_meshFilter.mesh = _mesh;
	}

	private Vector2[] GenerateUVs()
	{
		//IL_0057: Unknown result type (might be due to invalid IL or missing references)
		//IL_005c: Unknown result type (might be due to invalid IL or missing references)
		Vector2[] array = (Vector2[])(object)new Vector2[_positions.Length * _sides];
		for (int i = 0; i < _positions.Length; i++)
		{
			for (int j = 0; j < _sides; j++)
			{
				int num = i * _sides + j;
				float num2 = (float)j / ((float)_sides - 1f);
				float num3 = (float)i / ((float)_positions.Length - 1f);
				array[num] = new Vector2(num2, num3);
			}
		}
		return array;
	}

	private int[] GenerateIndices()
	{
		int[] array = new int[_positions.Length * _sides * 2 * 3];
		int num = 0;
		for (int i = 1; i < _positions.Length; i++)
		{
			for (int j = 0; j < _sides; j++)
			{
				int num2 = i * _sides + j;
				int num3 = num2 - _sides;
				array[num++] = num3;
				array[num++] = ((j == _sides - 1) ? (num2 - (_sides - 1)) : (num2 + 1));
				array[num++] = num2;
				array[num++] = ((j == _sides - 1) ? (num3 - (_sides - 1)) : (num3 + 1));
				array[num++] = ((j == _sides - 1) ? (num2 - (_sides - 1)) : (num2 + 1));
				array[num++] = num3;
			}
		}
		return array;
	}

	private Vector3[] CalculateCircle(int index)
	{
		//IL_0003: Unknown result type (might be due to invalid IL or missing references)
		//IL_0008: Unknown result type (might be due to invalid IL or missing references)
		//IL_0014: Unknown result type (might be due to invalid IL or missing references)
		//IL_001c: Unknown result type (might be due to invalid IL or missing references)
		//IL_002a: Unknown result type (might be due to invalid IL or missing references)
		//IL_002f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0034: Unknown result type (might be due to invalid IL or missing references)
		//IL_0038: Unknown result type (might be due to invalid IL or missing references)
		//IL_003d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0042: Unknown result type (might be due to invalid IL or missing references)
		//IL_0090: 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_0098: 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_00a1: 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_00b3: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b8: 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)
		//IL_00c6: Unknown result type (might be due to invalid IL or missing references)
		//IL_00cb: Unknown result type (might be due to invalid IL or missing references)
		//IL_00cc: 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_00ce: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d3: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d7: Unknown result type (might be due to invalid IL or missing references)
		//IL_00dc: Unknown result type (might be due to invalid IL or missing references)
		//IL_005c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0066: Unknown result type (might be due to invalid IL or missing references)
		//IL_0072: Unknown result type (might be due to invalid IL or missing references)
		//IL_0077: Unknown result type (might be due to invalid IL or missing references)
		//IL_007c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0080: Unknown result type (might be due to invalid IL or missing references)
		//IL_0085: Unknown result type (might be due to invalid IL or missing references)
		//IL_008a: Unknown result type (might be due to invalid IL or missing references)
		//IL_015c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0161: 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_016b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0170: Unknown result type (might be due to invalid IL or missing references)
		//IL_0175: Unknown result type (might be due to invalid IL or missing references)
		//IL_0178: Unknown result type (might be due to invalid IL or missing references)
		//IL_017f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0184: Unknown result type (might be due to invalid IL or missing references)
		//IL_0189: Unknown result type (might be due to invalid IL or missing references)
		int num = 0;
		Vector3 val = Vector3.zero;
		Vector3 val3;
		if (index > 0)
		{
			Vector3 val2 = val;
			val3 = _positions[index] - _positions[index - 1];
			val = val2 + ((Vector3)(ref val3)).normalized;
			num++;
		}
		if (index < _positions.Length - 1)
		{
			Vector3 val4 = val;
			val3 = _positions[index + 1] - _positions[index];
			val = val4 + ((Vector3)(ref val3)).normalized;
			num++;
		}
		val3 = val / (float)num;
		val = ((Vector3)(ref val3)).normalized;
		val3 = Vector3.Cross(val, val + new Vector3(0.123564f, 0.34675f, 0.756892f));
		Vector3 normalized = ((Vector3)(ref val3)).normalized;
		val3 = Vector3.Cross(val, normalized);
		Vector3 normalized2 = ((Vector3)(ref val3)).normalized;
		Vector3[] array = (Vector3[])(object)new Vector3[_sides];
		float num2 = 0f;
		float num3 = MathF.PI * 2f / (float)_sides;
		float num4 = (float)index / ((float)_positions.Length - 1f);
		float num5 = (_useTwoRadii ? Mathf.Lerp(_radiusOne, _radiusTwo, num4) : _radiusOne);
		for (int i = 0; i < _sides; i++)
		{
			float num6 = Mathf.Cos(num2);
			float num7 = Mathf.Sin(num2);
			array[i] = _positions[index] + normalized * num6 * num5 + normalized2 * num7 * num5;
			num2 += num3;
		}
		return array;
	}
}
public class SpiralLineRenderer : MonoBehaviour
{
	public Transform object1;

	public Transform object2;

	private LineRenderer lineRenderer;

	private int NUMBER_OF_POINTS = 200;

	private int NUMBER_OF_REVOLUTIONS = 12;

	public float SPIRAL_WIDTH = 2f;

	private void Awake()
	{
		lineRenderer = ((Component)this).GetComponent<LineRenderer>();
	}

	private void Start()
	{
		CreateCurveShape();
	}

	private void CreateCurveShape()
	{
		//IL_0007: 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_006d: 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)
		//IL_007d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0082: 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_00a0: 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_00c1: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ce: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d3: 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_0105: Unknown result type (might be due to invalid IL or missing references)
		//IL_010a: Unknown result type (might be due to invalid IL or missing references)
		//IL_012a: Unknown result type (might be due to invalid IL or missing references)
		//IL_012f: 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_013d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0142: Unknown result type (might be due to invalid IL or missing references)
		//IL_0147: Unknown result type (might be due to invalid IL or missing references)
		//IL_014b: Unknown result type (might be due to invalid IL or missing references)
		//IL_014d: Unknown result type (might be due to invalid IL or missing references)
		float num = Vector3.Distance(object1.position, object2.position);
		NUMBER_OF_REVOLUTIONS = Mathf.CeilToInt(num * 0.3f);
		NUMBER_OF_POINTS = Mathf.CeilToInt(num * 5.6f);
		lineRenderer.positionCount = NUMBER_OF_POINTS;
		Vector3[] array = (Vector3[])(object)new Vector3[NUMBER_OF_POINTS];
		for (int i = 0; i < NUMBER_OF_POINTS; i++)
		{
			Vector3 val = object2.position - object1.position;
			Vector3 val2 = Quaternion.Euler(90f, 0f, 0f) * val;
			Vector3 val3 = Vector3.Cross(val, val2);
			float num2 = (float)i / (float)NUMBER_OF_POINTS;
			float num3 = num2 * num;
			Vector3 val4 = object1.position + SPIRAL_WIDTH * ((Vector3)(ref val3)).normalized * Mathf.Sin((float)NUMBER_OF_REVOLUTIONS * num2 * 2f * MathF.PI) + SPIRAL_WIDTH * ((Vector3)(ref val2)).normalized * Mathf.Cos((float)NUMBER_OF_REVOLUTIONS * num2 * 2f * MathF.PI) + ((Vector3)(ref val)).normalized * num3;
			array[i] = val4;
		}
		lineRenderer.SetPositions(array);
	}
}
[ExecuteInEditMode]
public class TubeRenderer : MonoBehaviour
{
	[SerializeField]
	private Vector3[] _positions;

	[SerializeField]
	private int _sides;

	[SerializeField]
	private float _radiusOne;

	[SerializeField]
	private float _radiusTwo;

	[SerializeField]
	private bool _useWorldSpace = true;

	[SerializeField]
	private bool _useTwoRadii = false;

	private Vector3[] _vertices;

	private Mesh _mesh;

	private MeshFilter _meshFilter;

	private MeshRenderer _meshRenderer;

	public Transform start;

	public Transform end;

	public LineRenderer lineRenderer;

	[SerializeField]
	public Vector2 lineRendererScale;

	public Material material
	{
		get
		{
			return ((Renderer)_meshRenderer).material;
		}
		set
		{
			((Renderer)_meshRenderer).material = value;
		}
	}

	private void Awake()
	{
		//IL_0060: Unknown result type (might be due to invalid IL or missing references)
		//IL_006a: Expected O, but got Unknown
		//IL_008b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0090: 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_00a2: Unknown result type (might be due to invalid IL or missing references)
		_meshFilter = ((Component)this).GetComponent<MeshFilter>();
		if ((Object)(object)_meshFilter == (Object)null)
		{
			_meshFilter = ((Component)this).gameObject.AddComponent<MeshFilter>();
		}
		_meshRenderer = ((Component)this).GetComponent<MeshRenderer>();
		if ((Object)(object)_meshRenderer == (Object)null)
		{
			_meshRenderer = ((Component)this).gameObject.AddComponent<MeshRenderer>();
		}
		_mesh = new Mesh();
		_meshFilter.mesh = _mesh;
		_positions = (Vector3[])(object)new Vector3[2] { start.position, end.position };
		if (Object.op_Implicit((Object)(object)lineRenderer))
		{
			lineRenderer.positionCount = 2;
		}
	}

	private void OnEnable()
	{
		((Renderer)_meshRenderer).enabled = true;
	}

	private void OnDisable()
	{
		((Renderer)_meshRenderer).enabled = false;
	}

	private void Update()
	{
		//IL_0015: Unknown result type (might be due to invalid IL or missing references)
		//IL_001a: Unknown result type (might be due to invalid IL or missing references)
		//IL_002c: 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_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_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)
		//IL_0067: 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_0081: Unknown result type (might be due to invalid IL or missing references)
		//IL_0086: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a4: 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)
		GenerateMesh();
		_positions[0] = start.position;
		_positions[1] = end.position;
		Vector3 val = Vector3.RotateTowards(start.forward, -end.position, 10f, 0f);
		Vector3 val2 = Vector3.RotateTowards(end.forward, start.position, 10f, 0f);
		if (Object.op_Implicit((Object)(object)lineRenderer))
		{
			lineRenderer.SetPosition(0, start.position);
			lineRenderer.SetPosition(1, end.position);
			lineRenderer.startWidth = lineRendererScale.x;
			lineRenderer.endWidth = lineRendererScale.y;
		}
	}

	private void OnValidate()
	{
		_sides = Mathf.Max(3, _sides);
	}

	public void SetPositions(Vector3[] positions)
	{
		_positions = positions;
		GenerateMesh();
	}

	private void GenerateMesh()
	{
		//IL_002e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0038: Expected O, but got Unknown
		//IL_0121: 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_0146: 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_013c: Unknown result type (might be due to invalid IL or missing references)
		//IL_014d: Unknown result type (might be due to invalid IL or missing references)
		if ((Object)(object)_mesh == (Object)null || _positions == null || _positions.Length <= 1)
		{
			_mesh = new Mesh();
			return;
		}
		int num = _sides * _positions.Length;
		if (_vertices == null || _vertices.Length != num)
		{
			_vertices = (Vector3[])(object)new Vector3[num];
			int[] triangles = GenerateIndices();
			Vector2[] uv = GenerateUVs();
			if (num > _mesh.vertexCount)
			{
				_mesh.vertices = _vertices;
				_mesh.triangles = triangles;
				_mesh.uv = uv;
			}
			else
			{
				_mesh.triangles = triangles;
				_mesh.vertices = _vertices;
				_mesh.uv = uv;
			}
		}
		int num2 = 0;
		for (int i = 0; i < _positions.Length; i++)
		{
			Vector3[] array = CalculateCircle(i);
			Vector3[] array2 = array;
			foreach (Vector3 val in array2)
			{
				_vertices[num2++] = (_useWorldSpace ? ((Component)this).transform.InverseTransformPoint(val) : val);
			}
		}
		_mesh.vertices = _vertices;
		_mesh.RecalculateNormals();
		_mesh.RecalculateBounds();
		_meshFilter.mesh = _mesh;
	}

	private Vector2[] GenerateUVs()
	{
		//IL_0057: Unknown result type (might be due to invalid IL or missing references)
		//IL_005c: Unknown result type (might be due to invalid IL or missing references)
		Vector2[] array = (Vector2[])(object)new Vector2[_positions.Length * _sides];
		for (int i = 0; i < _positions.Length; i++)
		{
			for (int j = 0; j < _sides; j++)
			{
				int num = i * _sides + j;
				float num2 = (float)j / ((float)_sides - 1f);
				float num3 = (float)i / ((float)_positions.Length - 1f);
				array[num] = new Vector2(num2, num3);
			}
		}
		return array;
	}

	private int[] GenerateIndices()
	{
		int[] array = new int[_positions.Length * _sides * 2 * 3];
		int num = 0;
		for (int i = 1; i < _positions.Length; i++)
		{
			for (int j = 0; j < _sides; j++)
			{
				int num2 = i * _sides + j;
				int num3 = num2 - _sides;
				array[num++] = num3;
				array[num++] = ((j == _sides - 1) ? (num2 - (_sides - 1)) : (num2 + 1));
				array[num++] = num2;
				array[num++] = ((j == _sides - 1) ? (num3 - (_sides - 1)) : (num3 + 1));
				array[num++] = ((j == _sides - 1) ? (num2 - (_sides - 1)) : (num2 + 1));
				array[num++] = num3;
			}
		}
		return array;
	}

	private Vector3[] CalculateCircle(int index)
	{
		//IL_0003: Unknown result type (might be due to invalid IL or missing references)
		//IL_0008: Unknown result type (might be due to invalid IL or missing references)
		//IL_0014: Unknown result type (might be due to invalid IL or missing references)
		//IL_001c: Unknown result type (might be due to invalid IL or missing references)
		//IL_002a: Unknown result type (might be due to invalid IL or missing references)
		//IL_002f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0034: Unknown result type (might be due to invalid IL or missing references)
		//IL_0038: Unknown result type (might be due to invalid IL or missing references)
		//IL_003d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0042: Unknown result type (might be due to invalid IL or missing references)
		//IL_0090: 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_0098: 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_00a1: 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_00b3: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b8: 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)
		//IL_00c6: Unknown result type (might be due to invalid IL or missing references)
		//IL_00cb: Unknown result type (might be due to invalid IL or missing references)
		//IL_00cc: 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_00ce: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d3: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d7: Unknown result type (might be due to invalid IL or missing references)
		//IL_00dc: Unknown result type (might be due to invalid IL or missing references)
		//IL_005c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0066: Unknown result type (might be due to invalid IL or missing references)
		//IL_0072: Unknown result type (might be due to invalid IL or missing references)
		//IL_0077: Unknown result type (might be due to invalid IL or missing references)
		//IL_007c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0080: Unknown result type (might be due to invalid IL or missing references)
		//IL_0085: Unknown result type (might be due to invalid IL or missing references)
		//IL_008a: Unknown result type (might be due to invalid IL or missing references)
		//IL_015c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0161: 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_016b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0170: Unknown result type (might be due to invalid IL or missing references)
		//IL_0175: Unknown result type (might be due to invalid IL or missing references)
		//IL_0178: Unknown result type (might be due to invalid IL or missing references)
		//IL_017f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0184: Unknown result type (might be due to invalid IL or missing references)
		//IL_0189: Unknown result type (might be due to invalid IL or missing references)
		int num = 0;
		Vector3 val = Vector3.zero;
		Vector3 val3;
		if (index > 0)
		{
			Vector3 val2 = val;
			val3 = _positions[index] - _positions[index - 1];
			val = val2 + ((Vector3)(ref val3)).normalized;
			num++;
		}
		if (index < _positions.Length - 1)
		{
			Vector3 val4 = val;
			val3 = _positions[index + 1] - _positions[index];
			val = val4 + ((Vector3)(ref val3)).normalized;
			num++;
		}
		val3 = val / (float)num;
		val = ((Vector3)(ref val3)).normalized;
		val3 = Vector3.Cross(val, val + new Vector3(0.123564f, 0.34675f, 0.756892f));
		Vector3 normalized = ((Vector3)(ref val3)).normalized;
		val3 = Vector3.Cross(val, normalized);
		Vector3 normalized2 = ((Vector3)(ref val3)).normalized;
		Vector3[] array = (Vector3[])(object)new Vector3[_sides];
		float num2 = 0f;
		float num3 = MathF.PI * 2f / (float)_sides;
		float num4 = (float)index / ((float)_positions.Length - 1f);
		float num5 = (_useTwoRadii ? Mathf.Lerp(_radiusOne, _radiusTwo, num4) : _radiusOne);
		for (int i = 0; i < _sides; i++)
		{
			float num6 = Mathf.Cos(num2);
			float num7 = Mathf.Sin(num2);
			array[i] = _positions[index] + normalized * num6 * num5 + normalized2 * num7 * num5;
			num2 += num3;
		}
		return array;
	}
}
[RequireComponent(typeof(MeshFilter))]
[RequireComponent(typeof(MeshRenderer))]
[ExecuteInEditMode]
public class VolumetricLineStripBehavior : MonoBehaviour
{
	private static readonly Vector3 Average = new Vector3(1f / 3f, 1f / 3f, 1f / 3f);

	[SerializeField]
	public Material m_templateMaterial;

	[SerializeField]
	private bool m_doNotOverwriteTemplateMaterialProperties;

	[SerializeField]
	private Color m_lineColor;

	[SerializeField]
	private float m_lineWidth;

	[SerializeField]
	[Range(0f, 1f)]
	private float m_lightSaberFactor;

	private Material m_material;

	private MeshFilter m_meshFilter;

	private MeshRenderer m_meshRenderer;

	[SerializeField]
	private Vector3[] m_lineVertices = (Vector3[])(object)new Vector3[3]
	{
		Vector3.zero,
		Vector3.zero,
		Vector3.zero
	};

	public Vector3 maxLengthVector = new Vector3(0f, 0.0108f, 0f);

	private Vector3 targetLength;

	private float targetTrailLength;

	public float speed = 5f;

	public float maxTrailLength = 1.1f;

	public bool start = false;

	public int form = 0;

	private bool play = true;

	public VolumetricLineStripBehavior behaviour;

	private float stopwatch;

	public LightsaberTrail[] lightsaberTrails;

	public float lengthDelay = 0.15f;

	public bool hasStartDelay = true;

	public Material TemplateMaterial
	{
		get
		{
			return m_templateMaterial;
		}
		set
		{
			m_templateMaterial = value;
		}
	}

	public bool DoNotOverwriteTemplateMaterialProperties
	{
		get
		{
			return m_doNotOverwriteTemplateMaterialProperties;
		}
		set
		{
			m_doNotOverwriteTemplateMaterialProperties = value;
		}
	}

	public Color LineColor
	{
		get
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_000a: Unknown result type (might be due to invalid IL or missing references)
			return m_lineColor;
		}
		set
		{
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_001b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0027: Unknown result type (might be due to invalid IL or missing references)
			CreateMaterial();
			if ((Object)null != (Object)(object)m_material)
			{
				m_lineColor = value;
				m_material.color = m_lineColor;
			}
		}
	}

	public float LineWidth
	{
		get
		{
			return m_lineWidth;
		}
		set
		{
			CreateMaterial();
			if ((Object)null != (Object)(object)m_material)
			{
				m_lineWidth = value;
				m_material.SetFloat("_LineWidth", m_lineWidth);
			}
			UpdateBounds();
		}
	}

	public float LightSaberFactor
	{
		get
		{
			return m_lightSaberFactor;
		}
		set
		{
			CreateMaterial();
			if ((Object)null != (Object)(object)m_material)
			{
				m_lightSaberFactor = value;
				m_material.SetFloat("_LightSaberFactor", m_lightSaberFactor);
			}
		}
	}

	public Vector3[] LineVertices => m_lineVertices;

	private void CreateMaterial()
	{
		if ((Object)null == (Object)(object)m_material || (Object)null == (Object)(object)((Renderer)((Component)this).GetComponent<MeshRenderer>()).sharedMaterial)
		{
			if ((Object)null != (Object)(object)m_templateMaterial)
			{
				m_material = Object.Instantiate<Material>(m_templateMaterial);
				((Renderer)((Component)this).GetComponent<MeshRenderer>()).sharedMaterial = m_material;
				SetAllMaterialProperties();
			}
			else
			{
				m_material = ((Renderer)((Component)this).GetComponent<MeshRenderer>()).sharedMaterial;
			}
		}
	}

	private void DestroyMaterial()
	{
		if ((Object)null != (Object)(object)m_material)
		{
			Object.DestroyImmediate((Object)(object)m_material);
			m_material = null;
		}
	}

	private float CalculateLineScale()
	{
		//IL_0007: Unknown result type (might be due to invalid IL or missing references)
		//IL_000c: Unknown result type (might be due to invalid IL or missing references)
		return Vector3.Dot(((Component)this).transform.lossyScale, Average);
	}

	public void UpdateLineScale()
	{
		if ((Object)null != (Object)(object)m_material)
		{
			m_material.SetFloat("_LineScale", CalculateLineScale());
		}
	}

	private void SetAllMaterialProperties()
	{
		//IL_0034: Unknown result type (might be due to invalid IL or missing references)
		UpdateLineVertices(m_lineVertices);
		if ((Object)null != (Object)(object)m_material)
		{
			if (!m_doNotOverwriteTemplateMaterialProperties)
			{
				m_material.color = m_lineColor;
				m_material.SetFloat("_LineWidth", m_lineWidth);
				m_material.SetFloat("_LightSaberFactor", m_lightSaberFactor);
			}
			UpdateLineScale();
		}
	}

	private Bounds CalculateBounds()
	{
		//IL_000f: 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_0035: Unknown result type (might be due to invalid IL or missing references)
		//IL_0088: Unknown result type (might be due to invalid IL or missing references)
		//IL_008d: Unknown result type (might be due to invalid IL or missing references)
		//IL_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_0072: 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)
		//IL_007a: Unknown result type (might be due to invalid IL or missing references)
		//IL_01ad: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c4: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e1: Unknown result type (might be due to invalid IL or missing references)
		//IL_0105: 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_0141: Unknown result type (might be due to invalid IL or missing references)
		//IL_0182: Unknown result type (might be due to invalid IL or missing references)
		//IL_018a: 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_018c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0199: Unknown result type (might be due to invalid IL or missing references)
		//IL_019b: Unknown result type (might be due to invalid IL or missing references)
		//IL_019c: Unknown result type (might be due to invalid IL or missing references)
		//IL_01a7: Unknown result type (might be due to invalid IL or missing references)
		//IL_01a9: Unknown result type (might be due to invalid IL or missing references)
		float num = Mathf.Max(new float[3]
		{
			((Component)this).transform.lossyScale.x,
			((Component)this).transform.lossyScale.y,
			((Component)this).transform.lossyScale.z
		});
		float num2 = num * LineWidth * 0.5f;
		Vector3 val = default(Vector3);
		((Vector3)(ref val))..ctor(num2, num2, num2);
		Bounds result;
		if (m_lineVertices.Length == 0)
		{
			result = default(Bounds);
			return result;
		}
		Vector3 val2 = m_lineVertices[0];
		Vector3 val3 = m_lineVertices[0];
		for (int i = 1; i < m_lineVertices.Length; i++)
		{
			((Vector3)(ref val2))..ctor(Mathf.Min(val2.x, m_lineVertices[i].x), Mathf.Min(val2.y, m_lineVertices[i].y), Mathf.Min(val2.z, m_lineVertices[i].z));
			((Vector3)(ref val3))..ctor(Mathf.Max(val3.x, m_lineVertices[i].x), Mathf.Max(val3.y, m_lineVertices[i].y), Mathf.Max(val3.z, m_lineVertices[i].z));
		}
		result = default(Bounds);
		((Bounds)(ref result)).min = val2 - val;
		((Bounds)(ref result)).max = val3 + val;
		return result;
	}

	public void UpdateBounds()
	{
		//IL_002c: Unknown result type (might be due to invalid IL or missing references)
		if ((Object)null != (Object)(object)m_meshFilter)
		{
			Mesh sharedMesh = m_meshFilter.sharedMesh;
			if ((Object)null != (Object)(object)sharedMesh)
			{
				sharedMesh.bounds = CalculateBounds();
			}
		}
	}

	public void UpdateLineVertices(Vector3[] newSetOfVertices)
	{
		//IL_006c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0071: Unknown result type (might be due to invalid IL or missing references)
		//IL_0083: Unknown result type (might be due to invalid IL or missing references)
		//IL_0088: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a1: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b9: Unknown result type (might be due to invalid IL or missing references)
		//IL_00be: 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_0151: Unknown result type (might be due to invalid IL or missing references)
		//IL_0156: 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_01c9: Unknown result type (might be due to invalid IL or missing references)
		//IL_01e1: Unknown result type (might be due to invalid IL or missing references)
		//IL_01e6: Unknown result type (might be due to invalid IL or missing references)
		//IL_01fe: Unknown result type (might be due to invalid IL or missing references)
		//IL_0203: Unknown result type (might be due to invalid IL or missing references)
		//IL_021b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0220: Unknown result type (might be due to invalid IL or missing references)
		//IL_0238: Unknown result type (might be due to invalid IL or missing references)
		//IL_023d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0255: Unknown result type (might be due to invalid IL or missing references)
		//IL_025a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0272: Unknown result type (might be due to invalid IL or missing references)
		//IL_0277: Unknown result type (might be due to invalid IL or missing references)
		//IL_028f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0294: Unknown result type (might be due to invalid IL or missing references)
		//IL_0394: Unknown result type (might be due to invalid IL or missing references)
		//IL_0399: Unknown result type (might be due to invalid IL or missing references)
		//IL_03b1: Unknown result type (might be due to invalid IL or missing references)
		//IL_03b6: Unknown result type (might be due to invalid IL or missing references)
		//IL_03ce: Unknown result type (might be due to invalid IL or missing references)
		//IL_03d3: Unknown result type (might be due to invalid IL or missing references)
		//IL_03eb: Unknown result type (might be due to invalid IL or missing references)
		//IL_03f0: Unknown result type (might be due to invalid IL or missing references)
		//IL_0408: Unknown result type (might be due to invalid IL or missing references)
		//IL_040d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0425: Unknown result type (might be due to invalid IL or missing references)
		//IL_042a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0442: Unknown result type (might be due to invalid IL or missing references)
		//IL_0447: Unknown result type (might be due to invalid IL or missing references)
		//IL_045f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0464: Unknown result type (might be due to invalid IL or missing references)
		//IL_0493: Unknown result type (might be due to invalid IL or missing references)
		//IL_0498: Unknown result type (might be due to invalid IL or missing references)
		//IL_04ad: Unknown result type (might be due to invalid IL or missing references)
		//IL_04b2: Unknown result type (might be due to invalid IL or missing references)
		//IL_04c7: Unknown result type (might be due to invalid IL or missing references)
		//IL_04cc: Unknown result type (might be due to invalid IL or missing references)
		//IL_04e1: Unknown result type (might be due to invalid IL or missing references)
		//IL_04e6: Unknown result type (might be due to invalid IL or missing references)
		//IL_04fb: Unknown result type (might be due to invalid IL or missing references)
		//IL_0500: Unknown result type (might be due to invalid IL or missing references)
		//IL_0505: Unknown result type (might be due to invalid IL or missing references)
		//IL_051a: Unknown result type (might be due to invalid IL or missing references)
		//IL_051f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0524: Unknown result type (might be due to invalid IL or missing references)
		//IL_0539: Unknown result type (might be due to invalid IL or missing references)
		//IL_053e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0543: Unknown result type (might be due to invalid IL or missing references)
		//IL_0558: Unknown result type (might be due to invalid IL or missing references)
		//IL_055d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0562: Unknown result type (might be due to invalid IL or missing references)
		//IL_0301: Unknown result type (might be due to invalid IL or missing references)
		//IL_0306: Unknown result type (might be due to invalid IL or missing references)
		//IL_031e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0323: Unknown result type (might be due to invalid IL or missing references)
		//IL_02c3: Unknown result type (might be due to invalid IL or missing references)
		//IL_02c8: Unknown result type (might be due to invalid IL or missing references)
		//IL_02e0: Unknown result type (might be due to invalid IL or missing references)
		//IL_02e5: Unknown result type (might be due to invalid IL or missing references)
		//IL_033c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0341: Unknown result type (might be due to invalid IL or missing references)
		//IL_0359: Unknown result type (might be due to invalid IL or missing references)
		//IL_035e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0583: Unknown result type (might be due to invalid IL or missing references)
		//IL_0588: Unknown result type (might be due to invalid IL or missing references)
		//IL_05a0: Unknown result type (might be due to invalid IL or missing references)
		//IL_05a5: Unknown result type (might be due to invalid IL or missing references)
		//IL_05bd: Unknown result type (might be due to invalid IL or missing references)
		//IL_05c2: Unknown result type (might be due to invalid IL or missing references)
		//IL_05c7: Unknown result type (might be due to invalid IL or missing references)
		//IL_05df: Unknown result type (might be due to invalid IL or missing references)
		//IL_05e4: Unknown result type (might be due to invalid IL or missing references)
		//IL_05e9: Unknown result type (might be due to invalid IL or missing references)
		//IL_0625: Unknown result type (might be due to invalid IL or missing references)
		//IL_062a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0648: Unknown result type (might be due to invalid IL or missing references)
		//IL_064d: Unknown result type (might be due to invalid IL or missing references)
		//IL_066b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0670: Unknown result type (might be due to invalid IL or missing references)
		//IL_068e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0693: Unknown result type (might be due to invalid IL or missing references)
		//IL_06b1: Unknown result type (might be due to invalid IL or missing references)
		//IL_06b6: Unknown result type (might be due to invalid IL or missing references)
		//IL_06bb: Unknown result type (might be due to invalid IL or missing references)
		//IL_06d9: Unknown result type (might be due to invalid IL or missing references)
		//IL_06de: Unknown result type (might be due to invalid IL or missing references)
		//IL_06e3: Unknown result type (might be due to invalid IL or missing references)
		//IL_0701: Unknown result type (might be due to invalid IL or missing references)
		//IL_0706: Unknown result type (might be due to invalid IL or missing references)
		//IL_070b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0729: Unknown result type (might be due to invalid IL or missing references)
		//IL_072e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0733: Unknown result type (might be due to invalid IL or missing references)
		if (newSetOfVertices == null)
		{
			return;
		}
		if (newSetOfVertices.Length < 3)
		{
			Debug.LogError((object)"Add at least 3 vertices to the VolumetricLineStrip");
			return;
		}
		m_lineVertices = newSetOfVertices;
		Vector3[] array = (Vector3[])(object)new Vector3[m_lineVertices.Length * 2 + 4];
		int[] array2 = new int[(m_lineVertices.Length * 2 + 2) * 3];
		int num = 0;
		int num2 = 0;
		array[num++] = m_lineVertices[0];
		array[num++] = m_lineVertices[0];
		for (int i = 0; i < m_lineVertices.Length; i++)
		{
			array[num++] = m_lineVertices[i];
			array[num++] = m_lineVertices[i];
			array2[num2++] = num - 2;
			array2[num2++] = num - 3;
			array2[num2++] = num - 4;
			array2[num2++] = num - 1;
			array2[num2++] = num - 2;
			array2[num2++] = num - 3;
		}
		array[num++] = m_lineVertices[m_lineVertices.Length - 1];
		array[num++] = m_lineVertices[m_lineVertices.Length - 1];
		array2[num2++] = num - 2;
		array2[num2++] = num - 3;
		array2[num2++] = num - 4;
		array2[num2++] = num - 1;
		array2[num2++] = num - 2;
		array2[num2++] = num - 3;
		Vector2[] array3 = (Vector2[])(object)new Vector2[array.Length];
		Vector2[] array4 = (Vector2[])(object)new Vector2[array.Length];
		int num3 = 0;
		int num4 = 0;
		array3[num3++] = new Vector2(1f, 0f);
		array3[num3++] = new Vector2(1f, 1f);
		array3[num3++] = new Vector2(0.5f, 0f);
		array3[num3++] = new Vector2(0.5f, 1f);
		array4[num4++] = new Vector2(1f, -1f);
		array4[num4++] = new Vector2(1f, 1f);
		array4[num4++] = new Vector2(0f, -1f);
		array4[num4++] = new Vector2(0f, 1f);
		for (int j = 1; j < m_lineVertices.Length - 1; j++)
		{
			if ((j & 1) == 1)
			{
				array3[num3++] = new Vector2(0.5f, 0f);
				array3[num3++] = new Vector2(0.5f, 1f);
			}
			else
			{
				array3[num3++] = new Vector2(0.5f, 0f);
				array3[num3++] = new Vector2(0.5f, 1f);
			}
			array4[num4++] = new Vector2(0f, 1f);
			array4[num4++] = new Vector2(0f, -1f);
		}
		array3[num3++] = new Vector2(0.5f, 0f);
		array3[num3++] = new Vector2(0.5f, 1f);
		array3[num3++] = new Vector2(0f, 0f);
		array3[num3++] = new Vector2(0f, 1f);
		array4[num4++] = new Vector2(0f, 1f);
		array4[num4++] = new Vector2(0f, -1f);
		array4[num4++] = new Vector2(1f, 1f);
		array4[num4++] = new Vector2(1f, -1f);
		Vector3[] array5 = (Vector3[])(object)new Vector3[array.Length];
		Vector4[] array6 = (Vector4[])(object)new Vector4[array.Length];
		int num5 = 0;
		int num6 = 0;
		array5[num5++] = m_lineVertices[1];
		array5[num5++] = m_lineVertices[1];
		array5[num5++] = m_lineVertices[1];
		array5[num5++] = m_lineVertices[1];
		array6[num6++] = Vector4.op_Implicit(m_lineVertices[1]);
		array6[num6++] = Vector4.op_Implicit(m_lineVertices[1]);
		array6[num6++] = Vector4.op_Implicit(m_lineVertices[1]);
		array6[num6++] = Vector4.op_Implicit(m_lineVertices[1]);
		for (int k = 1; k < m_lineVertices.Length - 1; k++)
		{
			array5[num5++] = m_lineVertices[k - 1];
			array5[num5++] = m_lineVertices[k - 1];
			array6[num6++] = Vector4.op_Implicit(m_lineVertices[k + 1]);
			array6[num6++] = Vector4.op_Implicit(m_lineVertices[k + 1]);
		}
		array5[num5++] = m_lineVertices[m_lineVertices.Length - 2];
		array5[num5++] = m_lineVertices[m_lineVertices.Length - 2];
		array5[num5++] = m_lineVertices[m_lineVertices.Length - 2];
		array5[num5++] = m_lineVertices[m_lineVertices.Length - 2];
		array6[num6++] = Vector4.op_Implicit(m_lineVertices[m_lineVertices.Length - 2]);
		array6[num6++] = Vector4.op_Implicit(m_lineVertices[m_lineVertices.Length - 2]);
		array6[num6++] = Vector4.op_Implicit(m_lineVertices[m_lineVertices.Length - 2]);
		array6[num6++] = Vector4.op_Implicit(m_lineVertices[m_lineVertices.Length - 2]);
		if ((Object)null != (Object)(object)m_meshFilter)
		{
			Mesh sharedMesh = m_meshFilter.sharedMesh;
			if ((Object)null != (Object)(object)sharedMesh)
			{
				sharedMesh.SetIndices((int[])null, (MeshTopology)0, 0);
				sharedMesh.vertices = array;
				sharedMesh.normals = array5;
				sharedMesh.tangents = array6;
				sharedMesh.uv = array3;
				sharedMesh.uv2 = array4;
				sharedMesh.SetIndices(array2, (MeshTopology)0, 0);
				UpdateBounds();
			}
		}
	}

	private void Start()
	{
		//IL_000d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0013: Expected O, but got Unknown
		//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)
		m_meshRenderer = ((Component)this).GetComponent<MeshRenderer>();
		Mesh mesh = new Mesh();
		m_meshFilter = ((Component)this).GetComponent<MeshFilter>();
		m_meshFilter.mesh = mesh;
		UpdateLineVertices(m_lineVertices);
		CreateMaterial();
		m_lineVertices[0] = Vector3.zero;
		lightsaberTrails = ((Component)this).GetComponentsInChildren<LightsaberTrail>();
	}

	private void OnDestroy()
	{
		if ((Object)null != (Object)(object)m_meshFilter)
		{
			if (Application.isPlaying)
			{
				Object.Destroy((Object)(object)m_meshFilter.sharedMesh);
			}
			else
			{
				Object.DestroyImmediate((Object)(object)m_meshFilter.sharedMesh);
			}
			m_meshFilter.sharedMesh = null;
		}
		DestroyMaterial();
	}

	private void Update()
	{
		//IL_0012: Unknown result type (might be due to invalid IL or missing references)
		//IL_000a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0017: Unknown result type (might be due to invalid IL or missing references)
		//IL_003e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0044: Unknown result type (might be due to invalid IL or missing references)
		//IL_005d: 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_0074: 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_0081: Unknown result type (might be due to invalid IL or missing references)
		//IL_0082: 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_00eb: Unknown result type (might be due to invalid IL or missing references)
		targetLength = (start ? maxLengthVector : Vector3.zero);
		targetTrailLength = (start ? maxTrailLength : 0f);
		if (LineVertices[0] != targetLength)
		{
			Vector3 val = Vector3.Lerp(LineVertices[0], targetLength, speed * Time.deltaTime);
			LineVertices[0] = val;
			UpdateLineVertices(m_lineVertices);
			LightsaberTrail[] array = lightsaberTrails;
			foreach (LightsaberTrail val2 in array)
			{
				val2.height = Mathf.Lerp(val2.height, targetTrailLength, speed * Time.deltaTime);
			}
		}
		if (!start && LineVertices[0] == Vector3.zero)
		{
			((Renderer)m_meshRenderer).enabled = false;
		}
		else
		{
			((Renderer)m_meshRenderer).enabled = true;
		}
		if (Object.op_Implicit((Object)(object)behaviour))
		{
			if (behaviour.start)
			{
				if (!hasStartDelay)
				{
					stopwatch = lengthDelay;
				}
				if (stopwatch < lengthDelay)
				{
					stopwatch += Time.deltaTime;
				}
			}
			else if (stopwatch > 0f)
			{
				stopwatch -= Time.deltaTime;
			}
			if (stopwatch >= lengthDelay)
			{
				if (play)
				{
					play = false;
				}
				start = true;
			}
			else if (stopwatch <= 0f)
			{
				if (!play)
				{
					play = true;
				}
				start = false;
			}
		}
		else if (start)
		{
			if (play)
			{
				play = false;
			}
		}
		else if (!play)
		{
			play = true;
		}
		if (((Component)this).transform.hasChanged)
		{
			UpdateLineScale();
			UpdateBounds();
		}
	}

	private void OnValidate()
	{
		//IL_0007: Unknown result type (might be due to invalid IL or missing references)
		//IL_000c: Unknown result type (might be due to invalid IL or missing references)
		//IL_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)
		Scene scene = ((Component)this).gameObject.scene;
		if (!string.IsNullOrEmpty(((Scene)(ref scene)).name))
		{
			scene = ((Component)this).gameObject.scene;
			if (!string.IsNullOrEmpty(((Scene)(ref scene)).path))
			{
				CreateMaterial();
				SetAllMaterialProperties();
				UpdateBounds();
			}
		}
	}

	private void OnDrawGizmos()
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0033: Unknown result type (might be due to invalid IL or missing references)
		//IL_0038: Unknown result type (might be due to invalid IL or missing references)
		//IL_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)
		Gizmos.color = Color.green;
		if (m_lineVertices != null)
		{
			for (int i = 0; i < m_lineVertices.Length - 1; i++)
			{
				Gizmos.DrawLine(((Component)this).gameObject.transform.TransformPoint(m_lineVertices[i]), ((Component)this).gameObject.transform.TransformPoint(m_lineVertices[i + 1]));
			}
		}
	}
}
namespace DBZUtils;

public static class Achievements
{
	public static UnlockableDef NewUnlockable<T>(string AchievementIdentifier, Sprite Icon, string Title, string Description) where T : BaseAchievement
	{
		string text = "ACHIEVEMENT_SURVIVOR_";
		UnlockableDef val = ScriptableObject.CreateInstance<UnlockableDef>();
		string langName = text + AchievementIdentifier + "_NAME";
		string langDesc = text + AchievementIdentifier + "_DESCRIPTION";
		LanguageAPI.Add(langName, Title);
		LanguageAPI.Add(langDesc, Description);
		Func<string> func = () => Language.GetStringFormatted("UNLOCKED_FORMAT", new object[2]
		{
			Language.GetString(langName),
			Language.GetString(langDesc)
		});
		Type typeFromHandle = typeof(T);
		val.cachedName = text + AchievementIdentifier + "_UNLOCKABLE_ID";
		val.getHowToUnlockString = func;
		val.getUnlockedString = func;
		val.achievementIcon = Icon;
		val.sortScore = 200;
		val.hidden = false;
		ContentAddition.AddUnlockableDef(val);
		return val;
	}
}
public class DBZAimIndicator : HuntressTracker
{
	public float maxTrackDistance = 60f;

	public float maxTrackAngle = 15f;

	public TextMeshProUGUI name;

	public TextMeshProUGUI power;

	private ChildLocator childLocator;

	private CharacterBody body;

	public SkillLocator skillLocator;

	public DBZSkillBehaviour skillBehaviour;

	public bool forceScan = false;

	private bool scanEnemies
	{
		get
		{
			if (forceScan)
			{
				return true;
			}
			if (Object.op_Implicit((Object)(object)skillLocator) && Object.op_Implicit((Object)(object)skillLocator.primary) && Object.op_Implicit((Object)(object)skillLocator.secondary) && Object.op_Implicit((Object)(object)skillLocator.utility) && Object.op_Implicit((Object)(object)skillLocator.special))
			{
				if (skillLocator.utility.HasSkillOverrideOfPriority((SkillOverridePriority)4))
				{
					return false;
				}
				SkillDef skillDef = skillLocator.primary.skillDef;
				SkillDef skillDef2 = skillLocator.secondary.skillDef;
				SkillDef skillDef3 = skillLocator.utility.skillDef;
				SkillDef skillDef4 = skillLocator.special.skillDef;
				if (((skillDef as DBZSkillDef).isAimBased && skillLocator.primary.IsReady()) || ((skillDef2 as DBZSkillDef).isAimBased && skillLocator.secondary.IsReady()) || ((skillDef3 as DBZSkillDef).isAimBased && skillLocator.utility.IsReady()) || ((skillDef4 as DBZSkillDef).isAimBased && skillLocator.special.IsReady()))
				{
					return true;
				}
			}
			return false;
		}
	}

	private void Awake()
	{
		//IL_000d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0017: Expected O, but got Unknown
		base.indicator = new Indicator(((Component)this).gameObject, Prefabs.scouterIndicator);
		base.maxTrackingDistance = maxTrackDistance;
		base.maxTrackingAngle = maxTrackAngle;
	}

	private void OnEnable()
	{
		((HuntressTracker)this).OnEnable();
		skillBehaviour = ((Component)this).GetComponent<DBZSkillBehaviour>();
		skillLocator = ((Component)this).GetComponent<SkillLocator>();
	}

	private void FixedUpdate()
	{
		((HuntressTracker)this).FixedUpdate();
		base.indicator.active = scanEnemies;
		if (Object.op_Implicit((Object)(object)name) && Object.op_Implicit((Object)(object)power))
		{
			((Behaviour)name).enabled = base.indicator.visible;
			((Behaviour)power).enabled = base.indicator.visible;
			if (Object.op_Implicit((Object)(object)base.trackingTarget) && Object.op_Implicit((Object)(object)base.trackingTarget.healthComponent) && Object.op_Implicit((Object)(object)base.trackingTarget.healthComponent.body) && (!Object.op_Implicit((Object)(object)body) || (Object.op_Implicit((Object)(object)body) && (Object)(object)body != (Object)(object)base.trackingTarget.healthComponent.body) || ((TMP_Text)name).text == "NoName"))
			{
				if (Object.op_Implicit((Object)(object)skillBehaviour))
				{
					skillBehaviour.target = base.trackingTarget;
				}
				UpdateInfo();
			}
		}
		else if (base.indicator != null && base.indicator.hasVisualizer)
		{
			childLocator = base.indicator.visualizerInstance.GetComponentInChildren<ChildLocator>();
			if (Object.op_Implicit((Object)(object)childLocator))
			{
				name = ((Component)childLocator.FindChild("name")).GetComponent<TextMeshProUGUI>();
				power = ((Component)childLocator.FindChild("power")).GetComponent<TextMeshProUGUI>();
			}
		}
	}

	private void UpdateInfo()
	{
		body = base.trackingTarget.healthComponent.body;
		string text = Mathf.CeilToInt(body.level * body.damage + body.maxHealth * 10f).ToString();
		string text2 = "";
		if (text.Length <= 8)
		{
			List<string> list = new List<string>();
			for (int i = 0; i < text.Length; i++)
			{
				list.Add("<sprite=" + text[i] + ">");
			}
			text2 = string.Join("", list);
		}
		else
		{
			text2 = "<sprite=10><sprite=10><sprite=10><sprite=10><sprite=10><sprite=10><sprite=10><sprite=10>";
		}
		((TMP_Text)power).SetText(text2, true);
		((TMP_Text)name).SetText(Language.GetString(base.trackingTarget.healthComponent.body.baseNameToken), true);
	}
}
public class DBZEventProjectileBehaviour : MonoBehaviour
{
	[SerializeField]
	public ProjectileSimple simple;

	[SerializeField]
	public Rigidbody rigidBody;

	[SerializeField]
	public SphereCollider collider;

	[SerializeField]
	public ObjectScaleCurve scale;

	[SerializeField]
	public GameObject ghost;

	[SerializeField]
	public ProjectileController controller;

	[SerializeField]
	public GameObject owner;

	[SerializeField]
	public CharacterBody body;

	[SerializeField]
	public ModelLocator modelLocator;

	[SerializeField]
	public DBZSkillEventHandler skillEvent;

	[SerializeField]
	public Transform parent;

	[SerializeField]
	public float damage;

	public bool addCollider = false;

	public string parentName = "sphereMuzzle";

	private bool playScaleSound;

	private bool playLaunchSound;

	public float radius = 5.8f;

	public uint scaleSound = 639080239u;

	public uint launchSound = 356987030u;

	public string loopSound = "Play_Beerus_Sphere_Projectile_Loop";

	private uint loopID;

	private uint launchID;

	public float xDirection = 0f;

	public float yDirection = 0f;

	public float zDirection = 0f;

	private void OnEnable()
	{
		loopID = Util.PlaySound(loopSound, ((Component)this).gameObject);
	}

	private void OnDisable()
	{
		AkSoundEngine.StopPlayingID(loopID);
		AkSoundEngine.StopPlayingID(launchID);
	}

	private void Update()
	{
		//IL_02f1: Unknown result type (might be due to invalid IL or missing references)
		//IL_033f: Unknown result type (might be due to invalid IL or missing references)
		//IL_036a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0380: Unknown result type (might be due to invalid IL or missing references)
		//IL_038a: Unknown result type (might be due to invalid IL or missing references)
		if (!Object.op_Implicit((Object)(object)collider))
		{
			collider = ((Component)this).GetComponent<SphereCollider>();
		}
		if (!Object.op_Implicit((Object)(object)simple))
		{
			simple = ((Component)this).GetComponent<ProjectileSimple>();
			((Behaviour)simple).enabled = false;
		}
		if (!Object.op_Implicit((Object)(object)rigidBody))
		{
			rigidBody = ((Component)this).GetComponent<Rigidbody>();
		}
		if (!Object.op_Implicit((Object)(object)owner))
		{
			controller = ((Component)this).GetComponent<ProjectileController>();
			if (Object.op_Implicit((Object)(object)controller) && Object.op_Implicit((Object)(object)controller.Networkowner))
			{
				if (Object.op_Implicit((Object)(object)controller.ghost))
				{
					ghost = ((Component)controller.ghost).gameObject;
					scale = ghost.GetComponent<ObjectScaleCurve>();
				}
				owner = controller.owner;
				body = owner.GetComponent<CharacterBody>();
				if (Object.op_Implicit((Object)(object)body))
				{
					damage = body.damage;
					modelLocator = body.modelLocator;
					if (Object.op_Implicit((Object)(object)modelLocator) && Object.op_Implicit((Object)(object)modelLocator.modelTransform))
					{
						skillEvent = ((Component)modelLocator.modelTransform).GetComponent<DBZSkillEventHandler>();
						if (Object.op_Implicit((Object)(object)skillEvent))
						{
							skillEvent.fireSphere = false;
							skillEvent.fire = false;
							skillEvent.sphereScale = false;
							skillEvent.charge = false;
							skillEvent.hellzoneCharge = false;
							skillEvent.stopDash = false;
							skillEvent.nextState = false;
							skillEvent.dashCount = 0;
							skillEvent.fireCount = 0;
						}
						ChildLocator component = ((Component)modelLocator.modelTransform).GetComponent<ChildLocator>();
						if (Object.op_Implicit((Object)(object)component))
						{
							parent = component.FindChild(parentName);
						}
					}
				}
			}
		}
		if (Object.op_Implicit((Object)(object)skillEvent))
		{
			OnSkillEvent();
			SphereScale();
			FireSphere();
			if (Object.op_Implicit((Object)(object)collider) && !skillEvent.fireSphere)
			{
				((Collider)collider).enabled = false;
				if (!playLaunchSound)
				{
					playLaunchSound = true;
					launchID = AkSoundEngine.PostEvent(launchSound, ((Component)this).gameObject);
				}
			}
		}
		if (Object.op_Implicit((Object)(object)parent))
		{
			((Component)this).transform.position = parent.position;
		}
		if (Object.op_Implicit((Object)(object)rigidBody) && Object.op_Implicit((Object)(object)simple) && ((Behaviour)simple).enabled && yDirection != 0f && rigidBody.velocity.y != yDirection)
		{
			rigidBody.velocity = new Vector3(rigidBody.velocity.x, yDirection, rigidBody.velocity.z);
		}
	}

	protected virtual void SphereScale()
	{
		if (skillEvent.sphereScale && Object.op_Implicit((Object)(object)scale))
		{
			((Behaviour)scale).enabled = true;
			if (!playScaleSound)
			{
				playScaleSound = true;
				AkSoundEngine.PostEvent(scaleSound, ((Component)this).gameObject);
			}
		}
	}

	protected virtual void FireSphere()
	{
		if (skillEvent.fireSphere && Object.op_Implicit((Object)(object)simple))
		{
			parent = null;
			((Behaviour)simple).enabled = true;
			if (Object.op_Implicit((Object)(object)collider))
			{
				((Collider)collider).enabled = true;
				collider.radius = radius;
			}
			else if (addCollider)
			{
				((Component)this).gameObject.AddComponent<SphereCollider>().radius = radius;
			}
		}
	}

	protected virtual void OnSkillEvent()
	{
	}
}
internal class DBZPodBehaviour : MonoBehaviour
{
	private void Awake()
	{
		//IL_0020: Unknown result type (might be due to invalid IL or missing references)
		//IL_0026: Expected O, but got Unknown
		//IL_0032: Unknown result type (might be due to invalid IL or missing references)
		//IL_003d: Unknown result type (might be due to invalid IL or missing references)
		//IL_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)
		VehicleSeat component = ((Component)this).GetComponent<VehicleSeat>();
		component.onPassengerExit += Exit;
		GameObject val = new GameObject("exitPosition");
		val.transform.position = ((Component)this).transform.position + ((Component)this).transform.forward * 5f;
		component.exitPosition = val.transform;
	}

	private void Exit(GameObject obj)
	{
		Animator componentInChildren = ((Component)this).GetComponentInChildren<Animator>();
		componentInChildren.Play("Open");
	}
}
public class DBZSkillBehaviour : NetworkBehaviour
{
	public bool canExecute = true;

	public bool canExecuteSkill1 = true;

	public bool canExecuteSkill2 = true;

	public bool canExecuteSkill3 = true;

	public bool canExecuteSkill4 = true;

	internal SkillLocator skillLocator;

	internal KiBehaviour kiBehaviour;

	public float baseSecondaryCost = 0.2f;

	public float baseSpecialCost = 0.55f;

	public DBZSurvivorDef survivorDef;

	public bool lockMovement = false;

	[SerializeField]
	[SyncVar]
	public bool allowFlight;

	[SerializeField]
	[SyncVar]
	public bool isMoving;

	[SyncVar]
	[SerializeField]
	public bool inFlight;

	[SyncVar]
	[SerializeField]
	public bool isBoosted;

	[SyncVar]
	[SerializeField]
	public bool flightCancel;

	public int integer1;

	public int integer2;

	public int integer3;

	public int integer4;

	public int integer5;

	public float float1;

	public float float2;

	public float float3;

	public float float4;

	public float float5;

	public bool bool1;

	public bool bool2;

	public bool bool3;

	public bool bool4;

	public bool bool5;

	public Ray aimRay;

	public Vector3 vector1;

	public Vector3 vector2;

	public Vector3 vector3;

	public Vector3 vector4;

	public Vector3 vector5;

	public uint sound1;

	public uint sound2;

	public uint sound3;

	public uint sound4;

	public uint sound5;

	public AimRequest aimRequest;

	public GameObject vfx1;

	public GameObject vfx2;

	public GameObject vfx3;

	public GameObject vfx4;

	public GameObject vfx5;

	public HurtBox target;

	public List<ProjectileController> controlledProjectiles = new List<ProjectileController>();

	private static int kCmdCmdUpdateAllowFlight;

	private static int kCmdCmdUpdateInFlight;

	private static int kCmdCmdUpdateFlightCancel;

	public DBZSurvivorDef.VFXColor vfxColor { get; set; }

	public uint VO
	{
		get
		{
			if (Object.op_Implicit((Object)(object)survivorDef))
			{
				return survivorDef.skillVO;
			}
			return 0u;
		}
	}

	public float currentKi
	{
		get
		{
			if (Object.op_Implicit((Object)(object)kiBehaviour))
			{
				return kiBehaviour.currentKiValue;
			}
			return 0f;
		}
	}

	public bool fullKi
	{
		get
		{
			if (Object.op_Implicit((Object)(object)kiBehaviour))
			{
				return kiBehaviour.maxKi;
			}
			return false;
		}
	}

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

	public bool NetworkisMoving
	{
		get
		{
			return isMoving;
		}
		[param: In]
		set
		{
			((NetworkBehaviour)this).SetSyncVar<bool>(value, ref isMoving, 2u);
		}
	}

	public bool NetworkinFlight
	{
		get
		{
			return inFlight;
		}
		[param: In]
		set
		{
			((NetworkBehaviour)this).SetSyncVar<bool>(value, ref inFlight, 4u);
		}
	}

	public bool NetworkisBoosted
	{
		get
		{
			return isBoosted;
		}
		[param: In]
		set
		{
			((NetworkBehaviour)this).SetSyncVar<bool>(value, ref isBoosted, 8u);
		}
	}

	public bool NetworkflightCancel
	{
		get
		{
			return flightCancel;
		}
		[param: In]
		set
		{
			((NetworkBehaviour)this).SetSyncVar<bool>(value, ref flightCancel, 16u);
		}
	}

	[Command]
	public void CmdUpdateAllowFlight(bool flag)
	{
		NetworkallowFlight = flag;
	}

	[Command]
	public void CmdUpdateInFlight(bool flag)
	{
		NetworkinFlight = flag;
	}

	[Command]
	public void CmdUpdateFlightCancel(bool flag)
	{
		NetworkflightCancel = flag;
	}

	private void Start()
	{
		skillLocator = ((Component)this).GetComponent<SkillLocator>();
		kiBehaviour = ((Component)this).GetComponent<KiBehaviour>();
		CharacterBody component = ((Component)this).GetComponent<CharacterBody>();
		if (Object.op_Implicit((Object)(object)component))
		{
			survivorDef = DBZSurvivorCatalog.FindDBZSurvivorDef(component.baseNameToken);
			vfxColor = survivorDef.vfxColor;
		}
	}

	public void DisableSkill(int skillIndex)
	{
		switch (skillIndex)
		{
		case 0:
			canExecuteSkill1 = false;
			break;
		case 1:
			canExecuteSkill2 = false;
			break;
		case 2:
			canExecuteSkill3 = false;
			break;
		case 3:
			canExecuteSkill4 = false;
			break;
		}
	}

	public void EnableSkill(int skillIndex)
	{
		switch (skillIndex)
		{
		case 0:
			canExecuteSkill1 = true;
			break;
		case 1:
			canExecuteSkill2 = true;
			break;
		case 2:
			canExecuteSkill3 = true;
			break;
		case 3:
			canExecuteSkill4 = true;
			break;
		}
	}

	public void SetExecutableSkills(int skillIndex)
	{
		switch (skillIndex)
		{
		case -2:
			canExecuteSkill1 = false;
			canExecuteSkill2 = false;
			canExecuteSkill3 = false;
			canExecuteSkill4 = false;
			break;
		case -1:
			canExecuteSkill1 = true;
			canExecuteSkill2 = true;
			canExecuteSkill3 = true;
			canExecuteSkill4 = true;
			break;
		case 0:
			canExecuteSkill1 = true;
			canExecuteSkill2 = false;
			canExecuteSkill3 = false;
			canExecuteSkill4 = false;
			break;
		case 1:
			canExecuteSkill1 = false;
			canExecuteSkill2 = true;
			canExecuteSkill3 = false;
			canExecuteSkill4 = false;
			break;
		case 2:
			canExecuteSkill1 = false;
			canExecuteSkill2 = false;
			canExecuteSkill3 = true;
			canExecuteSkill4 = false;
			break;
		case 3:
			canExecuteSkill1 = false;
			canExecuteSkill2 = false;
			canExecuteSkill3 = false;
			canExecuteSkill4 = true;
			break;
		}
	}

	private void UNetVersion()
	{
	}

	protected static void InvokeCmdCmdUpdateAllowFlight(NetworkBehaviour obj, NetworkReader reader)
	{
		if (!NetworkServer.active)
		{
			Debug.LogError((object)"Command CmdUpdateAllowFlight called on client.");
		}
		else
		{
			((DBZSkillBehaviour)(object)obj).CmdUpdateAllowFlight(reader.ReadBoolean());
		}
	}

	protected static void InvokeCmdCmdUpdateInFlight(NetworkBehaviour obj, NetworkReader reader)
	{
		if (!NetworkServer.active)
		{
			Debug.LogError((object)"Command CmdUpdateInFlight called on client.");
		}
		else
		{
			((DBZSkillBehaviour)(object)obj).CmdUpdateInFlight(reader.ReadBoolean());
		}
	}

	protected static void InvokeCmdCmdUpdateFlightCancel(NetworkBehaviour obj, NetworkReader reader)
	{
		if (!NetworkServer.active)
		{
			Debug.LogError((object)"Command CmdUpdateFlightCancel called on client.");
		}
		else
		{
			((DBZSkillBehaviour)(object)obj).CmdUpdateFlightCancel(reader.ReadBoolean());
		}
	}

	public void CallCmdUpdateAllowFlight(bool flag)
	{
		//IL_002d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0033: Expected O, but got Unknown
		//IL_0058: Unknown result type (might be due to invalid IL or missing references)
		if (!NetworkClient.active)
		{
			Debug.LogError((object)"Command function CmdUpdateAllowFlight called on server.");
			return;
		}
		if (((NetworkBehaviour)this).isServer)
		{
			CmdUpdateAllowFlight(flag);
			return;
		}
		NetworkWriter val = new NetworkWriter();
		val.Write((short)0);
		val.Write((short)5);
		val.WritePackedUInt32((uint)kCmdCmdUpdateAllowFlight);
		val.Write(((Component)this).GetComponent<NetworkIdentity>().netId);
		val.Write(flag);
		((NetworkBehaviour)this).SendCommandInternal(val, 0, "CmdUpdateAllowFlight");
	}

	public void CallCmdUpdateInFlight(bool flag)
	{
		//IL_002d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0033: Expected O, but got Unknown
		//IL_0058: Unknown result type (might be due to invalid IL or missing references)
		if (!NetworkClient.active)
		{
			Debug.LogError((object)"Command function CmdUpdateInFlight called on server.");
			return;
		}
		if (((NetworkBehaviour)this).isServer)
		{
			CmdUpdateInFlight(flag);
			return;
		}
		NetworkWriter val = new NetworkWriter();
		val.Write((short)0);
		val.Write((short)5);
		val.WritePackedUInt32((uint)kCmdCmdUpdateInFlight);
		val.Write(((Component)this).GetComponent<NetworkIdentity>().netId);
		val.Write(flag);
		((NetworkBehaviour)this).SendCommandInternal(val, 0, "CmdUpdateInFlight");
	}

	public void CallCmdUpdateFlightCancel(bool flag)
	{
		//IL_002d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0033: Expected O, but got Unknown
		//IL_0058: Unknown result type (might be due to invalid IL or missing references)
		if (!NetworkClient.active)
		{
			Debug.LogError((object)"Command function CmdUpdateFlightCancel called on server.");
			return;
		}
		if (((NetworkBehaviour)this).isServer)
		{
			CmdUpdateFlightCancel(flag);
			return;
		}
		NetworkWriter val = new NetworkWriter();
		val.Write((short)0);
		val.Write((short)5);
		val.WritePackedUInt32((uint)kCmdCmdUpdateFlightCancel);
		val.Write(((Component)this).GetComponent<NetworkIdentity>().netId);
		val.Write(flag);
		((NetworkBehaviour)this).SendCommandInternal(val, 0, "CmdUpdateFlightCancel");
	}

	static DBZSkillBehaviour()
	{
		//IL_0020: Unknown result type (might be due to invalid IL or missing references)
		//IL_002a: Expected O, but got Unknown
		//IL_004a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0054: Expected O, but got Unknown
		//IL_0074: Unknown result type (might be due to invalid IL or missing references)
		//IL_007e: Expected O, but got Unknown
		kCmdCmdUpdateAllowFlight = 876682248;
		NetworkBehaviour.RegisterCommandDelegate(typeof(DBZSkillBehaviour), kCmdCmdUpdateAllowFlight, new CmdDelegate(InvokeCmdCmdUpdateAllowFlight));
		kCmdCmdUpdateInFlight = 1731750246;
		NetworkBehaviour.RegisterCommandDelegate(typeof(DBZSkillBehaviour), kCmdCmdUpdateInFlight, new CmdDelegate(InvokeCmdCmdUpdateInFlight));
		kCmdCmdUpdateFlightCancel = 539198971;
		NetworkBehaviour.RegisterCommandDelegate(typeof(DBZSkillBehaviour), kCmdCmdUpdateFlightCancel, new CmdDelegate(InvokeCmdCmdUpdateFlightCancel));
		NetworkCRC.RegisterBehaviour("DBZSkillBehaviour", 0);
	}

	public override bool OnSerialize(NetworkWriter writer, bool forceAll)
	{
		if (forceAll)
		{
			writer.Write(allowFlight);
			writer.Write(isMoving);
			writer.Write(inFlight);
			writer.Write(isBoosted);
			writer.Write(flightCancel);
			return true;
		}
		bool flag = false;
		if ((((NetworkBehaviour)this).syncVarDirtyBits & (true ? 1u : 0u)) != 0)
		{
			if (!flag)
			{
				writer.WritePackedUInt32(((NetworkBehaviour)this).syncVarDirtyBits);
				flag = true;
			}
			writer.Write(allowFlight);
		}
		if ((((NetworkBehaviour)this).syncVarDirtyBits & 2u) != 0)
		{
			if (!flag)
			{
				writer.WritePackedUInt32(((NetworkBehaviour)this).syncVarDirtyBits);
				flag = true;
			}
			writer.Write(isMoving);
		}
		if ((((NetworkBehaviour)this).syncVarDirtyBits & 4u) != 0)
		{
			if (!flag)
			{
				writer.WritePackedUInt32(((NetworkBehaviour)this).syncVarDirtyBits);
				flag = true;
			}
			writer.Write(inFlight);
		}
		if ((((NetworkBehaviour)this).syncVarDirtyBits & 8u) != 0)
		{
			if (!flag)
			{
				writer.WritePackedUInt32(((NetworkBehaviour)this).syncVarDirtyBits);
				flag = true;
			}
			writer.Write(isBoosted);
		}
		if ((((NetworkBehaviour)this).syncVarDirtyBits & 0x10u) != 0)
		{
			if (!flag)
			{
				writer.WritePackedUInt32(((NetworkBehaviour)this).syncVarDirtyBits);
				flag = true;
			}
			writer.Write(flightCancel);
		}
		if (!flag)
		{
			writer.WritePackedUInt32(((NetworkBehaviour)this).syncVarDirtyBits);
		}
		return flag;
	}

	public override void OnDeserialize(NetworkReader reader, bool initialState)
	{
		if (initialState)
		{
			allowFlight = reader.ReadBoolean();
			isMoving = reader.ReadBoolean();
			inFlight = reader.ReadBoolean();
			isBoosted = reader.ReadBoolean();
			flightCancel = reader.ReadBoolean();
			return;
		}
		int num = (int)reader.ReadPackedUInt32();
		if (((uint)num & (true ? 1u : 0u)) != 0)
		{
			allowFlight = reader.ReadBoolean();
		}
		if (((uint)num & 2u) != 0)
		{
			isMoving = reader.ReadBoolean();
		}
		if (((uint)num & 4u) != 0)
		{
			inFlight = reader.ReadBoolean();
		}
		if (((uint)num & 8u) != 0)
		{
			isBoosted = reader.ReadBoolean();
		}
		if (((uint)num & 0x10u) != 0)
		{
			flightCancel = reader.ReadBoolean();
		}
	}
}
internal class DelayedMissile : MonoBehaviour, IProjectileImpactBehavior
{
	private Rigidbody rigidBody;

	private Vector3 point;

	private ProjectileTargetComponent targetComponent;

	private bool collision;

	public void OnProjectileImpact(ProjectileImpactInfo impactInfo)
	{
		//IL_0008: Unknown result type (might be due to invalid IL or missing references)
		//IL_0038: Unknown result type (might be due to invalid IL or missing references)
		//IL_0039: Unknown result type (might be due to invalid IL or missing references)
		collision = true;
		if (!Object.op_Implicit((Object)(object)((Component)impactInfo.collider).GetComponent<HurtBox>()) && Object.op_Implicit((Object)(object)rigidBody))
		{
			rigidBody.AddExplosionForce(2500f, impactInfo.estimatedPointOfImpact, 5f);
		}
	}

	private void OnEnable()
	{
		//IL_004d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0057: Expected O, but got Unknown
		//IL_005f: 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_0074: 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)
		rigidBody = ((Component)this).GetComponent<Rigidbody>();
		rigidBody.angularDrag = 0f;
		rigidBody.drag = 15f;
		targetComponent = ((Component)this).GetComponent<ProjectileTargetComponent>();
		((Component)this).GetComponent<ProjectileSphereTargetFinder>().onNewTargetFound.AddListener(new UnityAction(OnTargetFound));
		point = ((Component)this).transform.position + ((Component)this).transform.forward * 20f;
	}

	private void OnTargetFound()
	{
		((Component)this).gameObject.AddComponent<MissileController>().maxVelocity = 70f;
	}

	private void FixedUpdate()
	{
		//IL_003d: 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_0053: Unknown result type (might be due to invalid IL or missing references)
		if (Object.op_Implicit((Object)(object)targetComponent) && !Object.op_Implicit((Object)(object)targetComponent.target) && !collision)
		{
			((Component)this).transform.position = Vector3.Lerp(((Component)this).transform.position, point, 5f * Time.fixedDeltaTime);
		}
	}
}
internal class DelayedScreenShake : MonoBehaviour
{
	private ShakeEmitter shake;

	private float stopwatch;

	private float stopwatchD;

	private int count;

	private void OnEnable()
	{
		shake = ((Component)this).GetComponent<ShakeEmitter>();
	}

	private void FixedUpdate()
	{
		if (!Object.op_Implicit((Object)(object)shake))
		{
			return;
		}
		stopwatch += Time.fixedDeltaTime;
		if (!(stopwatch >= 1f))
		{
			return;
		}
		stopwatchD += Time.fixedDeltaTime;
		shake.radius = 15f;
		if (stopwatchD >= 0.2f)
		{
			count++;
			if (count >= 3)
			{
				Object.Destroy((Object)(object)this);
			}
			stopwatchD = 0f;
			stopwatch = 0f;
			shake.radius = 0f;
		}
	}
}
public class DoubleCrushProjectileBehaviour : MonoBehaviour
{
	public GameObject owner;

	public ProjectileSimple simple;

	public ProjectileTargetComponent target;

	public ProjectileController controller;

	public DBZSkillBehaviour behaviour;

	public float floatDuration = 0.45f;

	public float floatDistance = 2.5f;

	public Vector3 targetPosition;

	public Vector3 currentPosition;

	public float stopwatch;

	private bool playedSound;

	public uint readySound = Sounds.Play_DBZ_Common_DoubleCrush_Ready;

	public bool changedDirection;

	private void Awake()
	{
		controller = ((Component)this).GetComponent<ProjectileController>();
		simple = ((Component)this).GetComponent<ProjectileSimple>();
		target = ((Component)this).GetComponent<ProjectileTargetComponent>();
	}

	private void Start()
	{
		//IL_0008: Unknown result type (might be due to invalid IL or missing references)
		//IL_000d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0014: Unknown result type (might be due to invalid IL or missing references)
		//IL_0019: Unknown result type (might be due to invalid IL or missing references)
		//IL_0024: 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_002e: Unknown result type (might be due to invalid IL or missing references)
		currentPosition = ((Component)this).transform.position;
		targetPosition = currentPosition + Vector3.up * floatDistance;
	}

	private void FixedUpdate()
	{
		//IL_00ef: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f5: Unknown result type (might be due to invalid IL or missing references)
		//IL_011f: 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_0137: Unknown result type (might be due to invalid IL or missing references)
		//IL_00bf: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ca: 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_00d8: Unknown result type (might be due to invalid IL or missing references)
		if (!Object.op_Implicit((Object)(object)owner))
		{
			owner = controller.owner;
			if (Object.op_Implicit((Object)(object)owner))
			{
				behaviour = owner.GetComponent<DBZSkillBehaviour>();
				if (Object.op_Implicit((Object)(object)behaviour))
				{
					behaviour.controlledProjectiles.Add(controller);
				}
			}
		}
		if (((Behaviour)simple).enabled)
		{
			if (!changedDirection && Object.op_Implicit((Object)(object)target.target))
			{
				changedDirection = true;
				Transform transform = ((Component)this).transform;
				Vector3 val = ((Component)target.target).transform.position - ((Component)this).transform.position;
				transform.forward = ((Vector3)(ref val)).normalized;
			}
		}
		else if (((Component)this).transform.position != targetPosition)
		{
			stopwatch += Time.fixedDeltaTime;
			((Component)this).transform.position = Vector3.Lerp(currentPosition, targetPosition, stopwatch / floatDuration);
		}
		else if (!playedSound)
		{
			playedSound = true;
			AkSoundEngine.PostEvent(readySound, ((Component)this).gameObject);
		}
	}

	private void OnDisable()
	{
		if (behaviour.controlledProjectiles.Contains(controller))
		{
			behaviour.controlledProjectiles.Remove(controller);
		}
	}
}
internal class EnemyMarked : MonoBehaviour
{
}
internal class EnemyMarkerBehaviour : MonoBehaviour
{
	private EnemyMarked mark;

	public CharacterBody body;

	public ModelLocator modelLocator;

	public Transform modelTransform;

	public RigidbodyMotor motor;

	private void Start()
	{
		body = ((Component)this).GetComponentInParent<CharacterBody>();
		modelLocator = ((Component)this).GetComponentInParent<ModelLocator>();
		motor = ((Component)this).GetComponentInParent<RigidbodyMotor>();
		mark = ((Component)body).gameObject.AddComponent<EnemyMarked>();
	}

	private void Update()
	{
		//IL_00b8: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f8: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e1: Unknown result type (might be due to invalid IL or missing references)
		//IL_0107: Unknown result type (might be due to invalid IL or missing references)
		if (!Object.op_Implicit((Object)(object)body))
		{
			Object.Destroy((Object)(object)mark);
			Object.Destroy((Object)(object)((Component)this).gameObject);
			return;
		}
		if (!Object.op_Implicit((Object)(object)modelTransform))
		{
			modelTransform = (Object.op_Implicit((Object)(object)modelLocator) ? modelLocator.modelTransform : null);
			return;
		}
		if (Object.op_Implicit((Object)(object)((Component)this).transform.parent))
		{
			((Component)this).transform.parent = null;
		}
		((Component)this).transform.position = (Object.op_Implicit((Object)(object)motor) ? body.transform.position : modelTransform.position);
		((Component)this).transform.rotation = Quaternion.Euler(0f, Object.op_Implicit((Object)(object)motor) ? body.transform.rotation.y : modelTransform.rotation.y, 0f);
	}
}
internal class DisableFades : MonoBehaviour
{
	private void OnEnable()
	{
		InstanceTracker.Add<DisableFades>(this);
	}

	private void OnDisable()
	{
		InstanceTracker.Remove<DisableFades>(this);
	}
}
internal class FadeDisabler : MonoBehaviour
{
	private void Start()
	{
		List<DisableFades> instancesList = InstanceTracker.GetInstancesList<DisableFades>();
		if (instancesList != null && instancesList.Count > 0)
		{
			((Component)this).gameObject.SetActive(false);
		}
	}
}
internal class GenkidamaSuccBehaviour : MonoBehaviour
{
	private SphereSearch sphereSearch = new SphereSearch();

	public TeamFilter teamComponent;

	public float stopwatch;

	public ProjectileDamage projectileDamage;

	public DBZEventProjectileBehaviour behaviour;

	public ProjectileImpactExplosion explosion;

	public float searchDelay = 0.25f;

	public float radius = 999f;

	public int stacks = 0;

	public CharacterBody body => Object.op_Implicit((Object)(object)behaviour) ? behaviour.body : null;

	private GameObject owner => Object.op_Implicit((Object)(object)behaviour) ? behaviour.owner : null;

	private TeamIndex teamIndex => (TeamIndex)((!Object.op_Implicit((Object)(object)teamComponent)) ? 1 : ((int)teamComponent.teamIndex));

	private void OnEnable()
	{
		//IL_003d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0042: Unknown result type (might be due to invalid IL or missing references)
		//IL_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)
		explosion = ((Component)this).GetComponent<ProjectileImpactExplosion>();
		projectileDamage = ((Component)this).GetComponent<ProjectileDamage>();
		teamComponent = ((Component)this).GetComponent<TeamFilter>();
		behaviour = ((Component)this).GetComponent<DBZEventProjectileBehaviour>();
		sphereSearch.origin = ((Component)this).transform.position;
		sphereSearch.radius = radius;
		sphereSearch.mask = ((LayerIndex)(ref LayerIndex.entityPrecise)).mask;
	}

	private void OnDisable()
	{
		//IL_0016: Unknown result type (might be due to invalid IL or missing references)
		//IL_001b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0022: 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_0044: Expected O, but got Unknown
		if (Object.op_Implicit((Object)(object)explosion))
		{
			EffectManager.SpawnEffect(Prefabs.beastGenkidamaRedExplosionEffect, new EffectData
			{
				origin = ((Component)this).transform.position,
				scale = ((ProjectileExplosion)explosion).blastRadius
			}, false);
		}
	}

	private void FixedUpdate()
	{
		//IL_0079: 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_00df: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e4: 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_01cf: Unknown result type (might be due to invalid IL or missing references)
		//IL_01fa: Unknown result type (might be due to invalid IL or missing references)
		//IL_0205: Unknown result type (might be due to invalid IL or missing references)
		//IL_0207: Unknown result type (might be due to invalid IL or missing references)
		//IL_020c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0211: Unknown result type (might be due to invalid IL or missing references)
		//IL_0213: Unknown result type (might be due to invalid IL or missing references)
		//IL_0218: Unknown result type (might be due to invalid IL or missing references)
		//IL_0220: Unknown result type (might be due to invalid IL or missing references)
		//IL_0225: Unknown result type (might be due to invalid IL or missing references)
		//IL_022a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0233: Expected O, but got Unknown
		//IL_024f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0254: Unknown result type (might be due to invalid IL or missing references)
		if (!Object.op_Implicit((Object)(object)projectileDamage) || Object.op_Implicit((Object)(object)behaviour))
		{
		}
		if (Object.op_Implicit((Object)(object)explosion))
		{
			((ProjectileExplosion)explosion).blastDamageCoefficient = (float)stacks * 2.5f;
		}
		if (Object.op_Implicit((Object)(object)explosion))
		{
			((ProjectileExplosion)explosion).blastRadius = 15 + stacks * 5;
		}
		((Component)this).transform.localScale = Vector3.one * (1f + (float)stacks * 0.5f);
		stopwatch += Time.fixedDeltaTime;
		if (!(stopwatch >= searchDelay))
		{
			return;
		}
		stopwatch = 0f;
		HurtBox[] hurtBoxes = sphereSearch.RefreshCandidates().FilterCandidatesByHurtBoxTeam(TeamMask.GetEnemyTeams(teamIndex)).OrderCandidatesByDistance()
			.FilterCandidatesByDistinctHurtBoxEntities()
			.GetHurtBoxes();
		foreach (HurtBox val in hurtBoxes)
		{
			if (Object.op_Implicit((Object)(object)val) && Object.op_Implicit((Object)(object)val.healthComponent) && Object.op_Implicit((Object)(object)val.healthComponent.body) && !val.healthComponent.body.HasBuff(Prefabs.genkidamaDebuff) && NetworkServer.active)
			{
				val.healthComponent.body.AddTimedBuff(Prefabs.genkidamaDebuff, 10f);
				DamageInfo val2 = new DamageInfo
				{
					attacker = (Object.op_Implicit((Object)(object)owner) ? owner : null),
					inflictor = (Object.op_Implicit((Object)(object)owner) ? owner : null),
					damage = (Object.op_Implicit((Object)(object)body) ? (body.damage * 2.5f) : 0f),
					procCoefficient = 0f,
					damageType = DamageTypeCombo.op_Implicit((DamageType)0),
					damageColorIndex = (DamageColorIndex)3,
					position = ((Component)val).transform.position,
					rejected = false
				};
				val.healthComponent.TakeDamage(val2);
				GenkidamaOrb genkidamaOrb = new GenkidamaOrb
				{
					origin = ((Component)val).transform.position,
					targetObject = ((Component)this).gameObject
				};
				OrbManager.instance.AddOrb((Orb)(object)genkidamaOrb);
			}
		}
	}
}
public class KiBehaviour : NetworkBehaviour
{
	public GameObject kiBar;

	public TextMeshProUGUI currentKi;

	public TextMeshProUGUI fullKi;

	public Image barImage;

	public float maxKiValue = 1f;

	private float kiValue = 0f;

	private bool barSetupDone;

	private static readonly StringBuilder sharedStringBuilder;

	private static Color baseKiColor;

	public bool passiveRegen = true;

	public float passiveRegenValue = 0.02f;

	private float regenStopwatch;

	public float testFloat = 0.75f;

	internal Image powerupImage;

	public bool hasPowerup;

	private static int kRpcRpcResetKi;

	private static int kRpcRpcAddKi;

	private static int kRpcRpcConsumeKi;

	internal bool canRegen => regenStopwatch >= 2f;

	internal bool maxKi
	{
		get
		{
			if ((float)Mathf.RoundToInt(kiValue * 100f) >= maxKiValue * 100f)
			{
				return true;
			}
			return false;
		}
	}

	internal float currentKiValue => kiValue;

	public event Action<KiBehaviour, float> onConsumeKi;

	public void ResetKi()
	{
		regenStopwatch = 0f;
		kiValue = 0f;
	}

	[Server]
	public void ResetKiServer()
	{
		if (!NetworkServer.active)
		{
			Debug.LogWarning((object)"[Server] function 'System.Void DBZUtils.KiBehaviour::ResetKiServer()' called on client");
		}
		else
		{
			CallRpcResetKi();
		}
	}

	[ClientRpc]
	public void RpcResetKi()
	{
		ResetKi();
	}

	[Server]
	public void AddKiServer(float amount)
	{
		if (!NetworkServer.active)
		{
			Debug.LogWarning((object)"[Server] function 'System.Void DBZUtils.KiBehaviour::AddKiServer(System.Single)' called on client");
		}
		else
		{
			CallRpcAddKi(amount);
		}
	}

	[ClientRpc]
	public void RpcAddKi(float amount)
	{
		AddKi(amount);
	}

	[Server]
	public void ConsumeKiServer(float amount)
	{
		if (!NetworkServer.active)
		{
			Debug.LogWarning((object)"[Server] function 'System.Void DBZUtils.KiBehaviour::ConsumeKiServer(System.Single)' called on client");
		}
		else
		{
			CallRpcConsumeKi(amount);
		}
	}

	[ClientRpc]
	public void RpcConsumeKi(float amount)
	{
		ConsumeKi(amount);
	}

	public void AddKi(float amount)
	{
		kiValue += amount;
	}

	public void ConsumeKi(float amount)
	{
		kiValue -= amount;
		regenStopwatch = 0f;
		this.onConsumeKi?.Invoke(this, amount);
	}

	private void OnEnable()
	{
		//IL_0008: Unknown result type (might be due to invalid IL or missing references)
		//IL_0012: Expected O, but got Unknown
		HUD.Update += new hook_Update(HUD_Update);
	}

	private void HUD_Update(orig_Update orig, HUD self)
	{
		//IL_0090: Unknown result type (might be due to invalid IL or missing references)
		//IL_0227: Unknown result type (might be due to invalid IL or missing references)
		//IL_03f8: Unknown result type (might be due to invalid IL or missing references)
		//IL_047e: Unknown result type (might be due to invalid IL or missing references)
		orig.Invoke(self);
		regenStopwatch += Time.deltaTime;
		if (passiveRegen && canRegen)
		{
			AddKi(passiveRegenValue * Time.deltaTime);
		}
		kiValue = Mathf.Clamp(kiValue, 0f, maxKiValue);
		if (Object.op_Implicit((Object)(object)barImage))
		{
			barImage.fillAmount = kiValue / maxKiValue;
			((Graphic)barImage).color = baseKiColor;
		}
		if (Object.op_Implicit((Object)(object)currentKi) && Object.op_Implicit((Object)(object)fullKi))
		{
			sharedStringBuilder.Clear().Append(Mathf.RoundToInt(kiValue * 100f));
			((TMP_Text)currentKi).SetText(sharedStringBuilder);
			((TMP_Text)fullKi).SetText((maxKiValue * 100f).ToString(), true);
		}
		if (!Object.op_Implicit((Object)(object)self.targetBodyObject) || !((Object)(object)self.targetBodyObject == (Object)(object)((Component)this).gameObject) || !Object.op_Implicit((Object)(object)self.mainUIPanel) || self.mainUIPanel.transform.childCount < 3 || Object.op_Implicit((Object)(object)kiBar) || !Util.HasEffectiveAuthority(self.targetBodyObject.GetComponent<NetworkIdentity>()))
		{
			return;
		}
		HealthBar componentInChildren = self.mainUIPanel.GetComponentInChildren<HealthBar>();
		if (!Object.op_Implicit((Object)(object)componentInChildren))
		{
			return;
		}
		Transform child = ((Component)componentInChildren).transform.GetChild(0);
		if (!barSetupDone && child.childCount >= 3)
		{
			Image[] componentsInChildren = ((Component)componentInChildren).gameObject.GetComponentsInChildren<Image>();
			if (componentsInChildren.Length >= 4)
			{
				barSetupDone = true;
			}
		}
		if (!barSetupDone)
		{
			return;
		}
		((Component)((Component)componentInChildren).transform.parent).GetComponent<RectTransform>().sizeDelta = new Vector2(0f, 108.2f);
		kiBar = Object.Instantiate<GameObject>(((Component)componentInChildren).gameObject, ((Component)componentInChildren).gameObject.transform.parent);
		((Object)kiBar).name = "KiBar";
		Object.Destroy((Object)(object)kiBar.GetComponent<HealthBar>());
		TextMeshProUGUI[] componentsInChildren2 = kiBar.GetComponentsInChildren<TextMeshProUGUI>();
		for (int i = 0; i < componentsInChildren2.Length; i++)
		{
			if (Object.op_Implicit((Object)(object)componentsInChildren2[i]) && Object.op_Implicit((Object)(object)((Component)componentsInChildren2[i]).gameObject))
			{
				if (((Object)((Component)componentsInChildren2[i]).gameObject).name == "CurrentHealthText")
				{
					currentKi = componentsInChildren2[i];
					((TMP_Text)currentKi).text = "0";
				}
				if (((Object)((Component)componentsInChildren2[i]).gameObject).name == "FullHealthText")
				{
					fullKi = componentsInChildren2[i];
					((TMP_Text)fullKi).SetText((maxKiValue * 100f).ToString(), true);
				}
			}
		}
		Image[] componentsInChildren3 = kiBar.GetComponentsInChildren<Image>();
		for (int j = 0; j < componentsInChildren3.Length; j++)
		{
			if (!Object.op_Implicit((Object)(object)componentsInChildren3[j]) || !Object.op_Implicit((Object)(object)((Component)componentsInChildren3[j]).gameObject))
			{
				continue;
			}
			if ((Object)(object)componentsInChildren3[j] != (Object)(object)componentsInChildren3[3] && (Object)(object)componentsInChildren3[j] != (Object)(object)componentsInChildren3[0])
			{
				Object.Destroy((Object)(object)((Component)componentsInChildren3[j]).gameObject);
			}
			if ((Object)(object)componentsInChildren3[j] == (Object)(object)componentsInChildren3[3])
			{
				barImage = componentsInChildren3[j];
				((Graphic)barImage).color = baseKiColor;
				barImage.type = (Type)3;
				barImage.fillMethod = (FillMethod)0;
				barImage.fillCenter = false;
				if (hasPowerup)
				{
					powerupImage = Object.Instantiate<GameObject>(((Component)barImage).gameObject, ((Component)barImage).transform.parent).GetComponent<Image>();
					((Object)((Component)powerupImage).gameObject).name = "PowerupBar";
					((Graphic)powerupImage).color = Color.white;
					powerupImage.sprite = Assets.MainAssetBundle.LoadAsset<Sprite>("powerupBarFill");
				}
			}
		}
	}

	private void OnDisable()
	{
		//IL_0008: Unknown result type (might be due to invalid IL or missing references)
		//IL_0012: Expected O, but got Unknown
		HUD.Update -= new hook_Update(HUD_Update);
		if (Object.op_Implicit((Object)(object)kiBar))
		{
			Object.Destroy((Object)(object)kiBar);
		}
	}

	static KiBehaviour()
	{
		//IL_0019: 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_0043: Unknown result type (might be due to invalid IL or missing references)
		//IL_004d: Expected O, but got Unknown
		//IL_006d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0077: Expected O, but got Unknown
		//IL_0097: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a1: Expected O, but got Unknown
		sharedStringBuilder = new StringBuilder();
		baseKiColor = new Color(0.2549f, 0.82353f, 0.93725f);
		kRpcRpcResetKi = -909243816;
		NetworkBehaviour.RegisterRpcDelegate(typeof(KiBehaviour), kRpcRpcResetKi, new CmdDelegate(InvokeRpcRpcResetKi));
		kRpcRpcAddKi = -499372054;
		NetworkBehaviour.RegisterRpcDelegate(typeof(KiBehaviour), kRpcRpcAddKi, new CmdDelegate(InvokeRpcRpcAddKi));
		kRpcRpcConsumeKi = -54506747;
		NetworkBehaviour.RegisterRpcDelegate(typeof(KiBehaviour), kRpcRpcConsumeKi, new CmdDelegate(InvokeRpcRpcConsumeKi));
		NetworkCRC.RegisterBehaviour("KiBehaviour", 0);
	}

	private void UNetVersion()
	{
	}

	protected static void InvokeRpcRpcResetKi(NetworkBehaviour obj, NetworkReader reader)
	{
		if (!NetworkClient.active)
		{
			Debug.LogError((object)"RPC RpcResetKi called on server.");
		}
		else
		{
			((KiBehaviour)(object)obj).RpcResetKi();
		}
	}

	protected static void InvokeRpcRpcAddKi(NetworkBehaviour obj, NetworkReader reader)
	{
		if (!NetworkClient.active)
		{
			Debug.LogError((object)"RPC RpcAddKi called on server.");
		}
		else
		{
			((KiBehaviour)(object)obj).RpcAddKi(reader.ReadSingle());
		}
	}

	protected static void InvokeRpcRpcConsumeKi(NetworkBehaviour obj, NetworkReader reader)
	{