Decompiled source of Dafis Mega Monster Pack Emporium REPO Edition v1.0.20

REPOdll.dll

Decompiled 2 hours ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using Photon.Pun;
using REPOdll;
using UnityEngine;
using UnityEngine.AI;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(/*Could not decode attribute arguments.*/)]
[assembly: TargetFramework(".NETCoreApp,Version=v8.0", FrameworkDisplayName = ".NET 8.0")]
[assembly: AssemblyCompany("REPOdll")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("REPOdll")]
[assembly: AssemblyTitle("REPOdll")]
[assembly: AssemblyVersion("1.0.0.0")]
[module: RefSafetyRules(11)]
public class EnemyHunterAnim : MonoBehaviour
{
	public Enemy enemy;

	public EnemyDoom enemyHunter;

	internal Animator animator;

	public MaterialTrigger material;

	private float moveTimer;

	private bool stunImpulse;

	internal bool spawnImpulse;

	[Space]
	public List<ParticleSystem> teleportEffects;

	[Space]
	public Sound soundFootstepShort;

	public Sound soundFootstepLong;

	public Sound soundReload01;

	public Sound soundAimStart;

	public Sound soundAimStartGlobal;

	public Sound soundReload02;

	public Sound soundMoveShort;

	public Sound soundMoveLong;

	public Sound soundGunLong;

	public Sound soundGunShort;

	public Sound soundSpawn;

	public Sound soundDespawn;

	public Sound soundLeaveStart;

	[Space]
	public AudioClip[] aimStartClips;

	public AudioClip[] aimStartGlobalClips;

	private void Awake()
	{
		animator = ((Component)this).GetComponent<Animator>();
		animator.keepAnimatorStateOnDisable = true;
	}

	private void Update()
	{
		if (enemy.Rigidbody.frozen)
		{
			animator.speed = 0f;
		}
		else
		{
			animator.speed = 1f;
		}
		if ((enemyHunter.currentState == EnemyDoom.State.Roam || enemyHunter.currentState == EnemyDoom.State.InvestigateWalk || enemyHunter.currentState == EnemyDoom.State.Leave) && (((Vector3)(ref enemy.Rigidbody.velocity)).magnitude > 0.2f || ((Vector3)(ref enemy.Rigidbody.physGrabObject.rbAngularVelocity)).magnitude > 0.25f))
		{
			moveTimer = 0.1f;
		}
		if (moveTimer > 0f)
		{
			moveTimer -= Time.deltaTime;
			animator.SetBool("Moving", true);
		}
		else
		{
			animator.SetBool("Moving", false);
		}
		if (enemyHunter.currentState == EnemyDoom.State.LeaveStart)
		{
			animator.SetBool("Leaving", true);
		}
		else
		{
			animator.SetBool("Leaving", false);
		}
		if (enemyHunter.currentState == EnemyDoom.State.Stun)
		{
			if (stunImpulse)
			{
				animator.SetTrigger("Stun");
				stunImpulse = false;
			}
			animator.SetBool("Stunned", true);
		}
		else
		{
			animator.SetBool("Stunned", false);
			stunImpulse = true;
		}
		if (enemyHunter.currentState == EnemyDoom.State.Aim)
		{
			animator.SetBool("Aiming", true);
		}
		else
		{
			animator.SetBool("Aiming", false);
		}
		if (enemyHunter.currentState == EnemyDoom.State.Shoot || enemyHunter.currentState == EnemyDoom.State.ShootEnd)
		{
			animator.SetBool("Shooting", true);
		}
		else
		{
			animator.SetBool("Shooting", false);
		}
		if (enemyHunter.currentState == EnemyDoom.State.Despawn)
		{
			animator.SetBool("Despawning", true);
		}
		else
		{
			animator.SetBool("Despawning", false);
		}
	}

	public void OnSpawn()
	{
		animator.SetBool("Stunned", false);
		animator.Play("Spawn", 0, 0f);
	}

	public void TeleportEffect()
	{
		//IL_001f: Unknown result type (might be due to invalid IL or missing references)
		//IL_004d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0062: 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)
		GameDirector.instance.CameraShake.ShakeDistance(3f, 3f, 10f, ((Component)this).transform.position, 0.5f);
		GameDirector.instance.CameraImpact.ShakeDistance(3f, 3f, 10f, ((Component)this).transform.position, 0.05f);
		Enumerator<ParticleSystem> enumerator = teleportEffects.GetEnumerator();
		try
		{
			while (enumerator.MoveNext())
			{
				ParticleSystem current = enumerator.Current;
				current.Play();
			}
		}
		finally
		{
			((global::System.IDisposable)enumerator).Dispose();
		}
	}

	public void FootstepShort()
	{
		//IL_0011: Unknown result type (might be due to invalid IL or missing references)
		//IL_0045: Unknown result type (might be due to invalid IL or missing references)
		//IL_004a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0054: Unknown result type (might be due to invalid IL or missing references)
		//IL_0059: Unknown result type (might be due to invalid IL or missing references)
		//IL_005e: Unknown result type (might be due to invalid IL or missing references)
		soundFootstepShort.Play(enemy.CenterTransform.position, 1f, 1f, 1f, 1f);
		Materials.Instance.Impulse(enemy.Rigidbody.physGrabObject.centerPoint + Vector3.down * 1f, Vector3.down, (SoundType)1, true, material, (HostType)2);
	}

	public void FootstepLong()
	{
		//IL_0011: Unknown result type (might be due to invalid IL or missing references)
		//IL_0045: Unknown result type (might be due to invalid IL or missing references)
		//IL_004a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0054: Unknown result type (might be due to invalid IL or missing references)
		//IL_0059: Unknown result type (might be due to invalid IL or missing references)
		//IL_005e: Unknown result type (might be due to invalid IL or missing references)
		soundFootstepLong.Play(enemy.CenterTransform.position, 1f, 1f, 1f, 1f);
		Materials.Instance.Impulse(enemy.Rigidbody.physGrabObject.centerPoint + Vector3.down * 1f, Vector3.down, (SoundType)1, true, material, (HostType)2);
	}

	public void AimStart()
	{
		//IL_004a: 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)
		int num = Random.Range(0, aimStartClips.Length);
		soundAimStart.Sounds[0] = aimStartClips[num];
		soundAimStartGlobal.Sounds[0] = aimStartGlobalClips[num];
		soundAimStart.Play(enemy.CenterTransform.position, 1f, 1f, 1f, 1f);
		soundAimStartGlobal.Play(enemy.CenterTransform.position, 1f, 1f, 1f, 1f);
	}

	public void Despawn()
	{
		enemy.EnemyParent.Despawn();
	}

	public void Reload01()
	{
		//IL_0011: Unknown result type (might be due to invalid IL or missing references)
		soundReload01.Play(enemy.CenterTransform.position, 1f, 1f, 1f, 1f);
	}

	public void Reload02()
	{
		//IL_0011: Unknown result type (might be due to invalid IL or missing references)
		soundReload02.Play(enemy.CenterTransform.position, 1f, 1f, 1f, 1f);
	}

	public void MoveShort()
	{
		//IL_0011: Unknown result type (might be due to invalid IL or missing references)
		soundMoveShort.Play(enemy.CenterTransform.position, 1f, 1f, 1f, 1f);
	}

	public void MoveLong()
	{
		//IL_0011: Unknown result type (might be due to invalid IL or missing references)
		soundMoveLong.Play(enemy.CenterTransform.position, 1f, 1f, 1f, 1f);
	}

	public void GunLong()
	{
		//IL_0011: Unknown result type (might be due to invalid IL or missing references)
		soundGunLong.Play(enemy.CenterTransform.position, 1f, 1f, 1f, 1f);
	}

	public void GunShort()
	{
		//IL_0011: Unknown result type (might be due to invalid IL or missing references)
		soundGunShort.Play(enemy.CenterTransform.position, 1f, 1f, 1f, 1f);
	}

	public void Spawn()
	{
		//IL_0011: Unknown result type (might be due to invalid IL or missing references)
		soundSpawn.Play(enemy.CenterTransform.position, 1f, 1f, 1f, 1f);
	}

	public void DespawnSound()
	{
		//IL_0011: Unknown result type (might be due to invalid IL or missing references)
		soundDespawn.Play(enemy.CenterTransform.position, 1f, 1f, 1f, 1f);
	}

	public void LeaveStartSound()
	{
		//IL_0011: Unknown result type (might be due to invalid IL or missing references)
		soundLeaveStart.Play(enemy.CenterTransform.position, 1f, 1f, 1f, 1f);
	}

	public void LeaveStartDone()
	{
		if (SemiFunc.IsMasterClientOrSingleplayer() && enemyHunter.currentState == EnemyDoom.State.LeaveStart)
		{
			enemyHunter.stateTimer = 0f;
		}
	}
}
namespace REPOdll;

public class EnemyDoom : MonoBehaviour
{
	public enum State
	{
		Spawn,
		Idle,
		Roam,
		Investigate,
		InvestigateWalk,
		Aim,
		Shoot,
		ShootEnd,
		LeaveStart,
		Leave,
		Despawn,
		Stun
	}

	public bool debugSpawn;

	[Space]
	public State currentState;

	private bool stateImpulse;

	internal float stateTimer;

	[Space]
	public Enemy enemy;

	public EnemyHunterAnim enemyHunterAnim;

	public EnemyHunterAlwaysActive enemyHunterAlwaysActive;

	private PhotonView photonView;

	public Transform investigateRayTransform;

	public Transform verticalAimTransform;

	public Transform gunAimTransform;

	public Transform gunTipTransform;

	public HurtCollider hurtCollider;

	private float hurtColliderTimer;

	private bool shootFast;

	[Space]
	public LineRenderer lineRenderer;

	public AnimationCurve lineRendererWidthCurve;

	private float lineRendererLerp;

	private bool lineRendererActive;

	[Space]
	public SpringQuaternion horizontalAimSpring;

	private Quaternion horizontalAimTarget = Quaternion.identity;

	public SpringQuaternion verticalAimSpring;

	private float pitCheckTimer;

	private int shotsFired;

	private int shotsFiredMax = 4;

	private Vector3 leavePosition;

	private Vector3 investigatePoint;

	private Quaternion investigateAimHorizontal = Quaternion.identity;

	private Quaternion investigateAimVertical = Quaternion.identity;

	private Quaternion investigateAimVerticalPrevious = Quaternion.identity;

	private float investigateAimVerticalRPCTimer;

	private bool investigatePointHasTransform;

	private Transform investigatePointTransform;

	private Vector3 investigatePointTransformPrevious;

	private Vector3 investigatePointSpread;

	private Vector3 investigatePointSpreadTarget;

	private float investigatePointSpreadTimer;

	private int leaveInterruptCounter;

	private float leaveInterruptTimer;

	[Space]
	public Transform shootEffectTransform;

	public List<ParticleSystem> shootEffects;

	[Space]
	public Transform hitEffectTransform;

	public List<ParticleSystem> hitEffects;

	[Space]
	public List<ParticleSystem> deathEffects;

	[Space]
	public Sound soundHurt;

	public Sound soundDeath;

	public Sound soundShoot;

	public Sound soundShootGlobal;

	public Sound soundHit;

	private float enemyDetectionRange = 12f;

	private float enemyCheckTimer;

	private float enemyCheckInterval = 1.5f;

	private void Awake()
	{
		photonView = ((Component)this).GetComponent<PhotonView>();
		if (!Application.isEditor || (SemiFunc.IsMultiplayer() && !GameManager.instance.localTest))
		{
			debugSpawn = false;
		}
	}

	private void Update()
	{
		//IL_0035: Unknown result type (might be due to invalid IL or missing references)
		//IL_003c: Invalid comparison between Unknown and I4
		VerticalRotationLogic();
		HurtColliderTimer();
		LineRendererLogic();
		if (SemiFunc.IsMasterClientOrSingleplayer())
		{
			if (enemy.IsStunned())
			{
				UpdateState(State.Stun);
			}
			if ((int)enemy.CurrentState == 11 && !enemy.IsStunned())
			{
				UpdateState(State.Despawn);
			}
			ShotsFiredLogic();
			HorizontalRotationLogic();
			LeaveInterruptLogic();
			CheckForNearbyEnemies();
			switch (currentState)
			{
			case State.Spawn:
				StateSpawn();
				break;
			case State.Idle:
				StateIdle();
				break;
			case State.Roam:
				StateRoam();
				break;
			case State.Investigate:
				StateInvestigate();
				break;
			case State.InvestigateWalk:
				StateInvestigateWalk();
				break;
			case State.Aim:
				AimLogic();
				StateAim();
				break;
			case State.Shoot:
				StateShoot();
				break;
			case State.ShootEnd:
				StateShootEnd();
				break;
			case State.LeaveStart:
				StateLeaveStart();
				break;
			case State.Leave:
				StateLeave();
				break;
			case State.Despawn:
				StateDespawn();
				break;
			case State.Stun:
				StateStun();
				break;
			}
		}
	}

	private void CheckForNearbyEnemies()
	{
		//IL_0049: 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_00ab: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b0: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b5: 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_00c4: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d0: Unknown result type (might be due to invalid IL or missing references)
		//IL_012c: 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_0152: Unknown result type (might be due to invalid IL or missing references)
		enemyCheckTimer -= Time.deltaTime;
		if (!(enemyCheckTimer <= 0f) || (currentState != State.Idle && currentState != State.Roam))
		{
			return;
		}
		enemyCheckTimer = enemyCheckInterval;
		Collider[] array = Physics.OverlapSphere(((Component)this).transform.position, enemyDetectionRange, LayerMask.GetMask(new string[1] { "Enemy" }));
		Collider[] array2 = array;
		foreach (Collider val in array2)
		{
			if ((Object)(object)((Component)val).transform.root == (Object)(object)((Component)this).transform.root)
			{
				continue;
			}
			Vector3 val2 = ((Component)val).transform.position - investigateRayTransform.position;
			RaycastHit[] array3 = Physics.RaycastAll(investigateRayTransform.position, ((Vector3)(ref val2)).normalized, ((Vector3)(ref val2)).magnitude, LayerMask.op_Implicit(SemiFunc.LayerMaskGetVisionObstruct()));
			bool flag = true;
			for (int j = 0; j < array3.Length; j++)
			{
				if (!((Object)(object)((RaycastHit)(ref array3[j])).transform.root == (Object)(object)((Component)val).transform.root))
				{
					flag = false;
					break;
				}
			}
			if (flag)
			{
				investigatePoint = ((Component)val).transform.position;
				if (SemiFunc.IsMultiplayer())
				{
					photonView.RPC("UpdateInvestigationPoint", (RpcTarget)1, new object[1] { investigatePoint });
				}
				UpdateState(State.Aim);
				break;
			}
		}
	}

	private void StateSpawn()
	{
		if (stateImpulse)
		{
			stateImpulse = false;
			stateTimer = 1f;
		}
		stateTimer -= Time.deltaTime;
		if (stateTimer <= 0f)
		{
			UpdateState(State.Idle);
		}
	}

	private void StateIdle()
	{
		//IL_003f: Unknown result type (might be due to invalid IL or missing references)
		if (stateImpulse)
		{
			stateImpulse = false;
			stateTimer = Random.Range(2f, 8f);
			enemy.NavMeshAgent.Warp(((Component)enemy.Rigidbody).transform.position);
			enemy.NavMeshAgent.ResetPath();
		}
		if (!SemiFunc.EnemySpawnIdlePause())
		{
			stateTimer -= Time.deltaTime;
			if (stateTimer <= 0f)
			{
				UpdateState(State.Roam);
			}
			if (SemiFunc.EnemyForceLeave(enemy))
			{
				UpdateState(State.LeaveStart);
			}
		}
	}

	private void StateRoam()
	{
		//IL_0025: Unknown result type (might be due to invalid IL or missing references)
		//IL_0048: Unknown result type (might be due to invalid IL or missing references)
		//IL_006b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0070: Unknown result type (might be due to invalid IL or missing references)
		//IL_007a: Unknown result type (might be due to invalid IL or missing references)
		//IL_007f: Unknown result type (might be due to invalid IL or missing references)
		//IL_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_00cb: Unknown result type (might be due to invalid IL or missing references)
		if (stateImpulse)
		{
			stateImpulse = false;
			stateTimer = 1f;
			bool flag = false;
			LevelPoint val = SemiFunc.LevelPointGet(((Component)this).transform.position, 10f, 25f);
			if (!Object.op_Implicit((Object)(object)val))
			{
				val = SemiFunc.LevelPointGet(((Component)this).transform.position, 0f, 999f);
			}
			NavMeshHit val2 = default(NavMeshHit);
			if (Object.op_Implicit((Object)(object)val) && NavMesh.SamplePosition(((Component)val).transform.position + Random.insideUnitSphere * 3f, ref val2, 5f, -1) && Physics.Raycast(((NavMeshHit)(ref val2)).position, Vector3.down, 5f, LayerMask.GetMask(new string[1] { "Default" })))
			{
				enemy.NavMeshAgent.SetDestination(((NavMeshHit)(ref val2)).position);
				flag = true;
			}
			if (!flag)
			{
				return;
			}
			pitCheckTimer = 0.1f;
			enemy.Rigidbody.notMovingTimer = 0f;
			stateImpulse = false;
		}
		else
		{
			if (enemy.Rigidbody.notMovingTimer > 1f)
			{
				stateTimer -= Time.deltaTime;
			}
			if (PitCheckLogic())
			{
				enemy.NavMeshAgent.ResetPath();
			}
			if (stateTimer <= 0f || !enemy.NavMeshAgent.HasPath())
			{
				UpdateState(State.Idle);
			}
		}
		if (SemiFunc.EnemyForceLeave(enemy))
		{
			UpdateState(State.LeaveStart);
		}
	}

	private void StateDespawn()
	{
		//IL_002a: Unknown result type (might be due to invalid IL or missing references)
		if (stateImpulse)
		{
			stateImpulse = false;
			enemy.NavMeshAgent.Warp(((Component)enemy.Rigidbody).transform.position);
			enemy.NavMeshAgent.ResetPath();
		}
	}

	private void StateStun()
	{
		if (!enemy.IsStunned())
		{
			UpdateState(State.Idle);
		}
	}

	private void StateInvestigate()
	{
		//IL_0017: Unknown result type (might be due to invalid IL or missing references)
		//IL_0022: Unknown result type (might be due to invalid IL or missing references)
		//IL_0027: Unknown result type (might be due to invalid IL or missing references)
		//IL_002c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0044: Unknown result type (might be due to invalid IL or missing references)
		//IL_0049: Unknown result type (might be due to invalid IL or missing references)
		//IL_0051: Unknown result type (might be due to invalid IL or missing references)
		//IL_00de: Unknown result type (might be due to invalid IL or missing references)
		//IL_0069: Unknown result type (might be due to invalid IL or missing references)
		//IL_006e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0071: 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)
		if (!stateImpulse)
		{
			return;
		}
		stateImpulse = false;
		float num = 12f;
		Vector3 val = investigatePoint - investigateRayTransform.position;
		bool flag = false;
		if (((Vector3)(ref val)).magnitude < num)
		{
			flag = true;
			RaycastHit[] array = Physics.RaycastAll(investigateRayTransform.position, val, ((Vector3)(ref val)).magnitude, LayerMask.op_Implicit(SemiFunc.LayerMaskGetVisionObstruct()));
			for (int i = 0; i < array.Length; i++)
			{
				RaycastHit val2 = array[i];
				if (!(Vector3.Distance(investigatePoint, ((RaycastHit)(ref val2)).point) < 1f) && !((Component)((RaycastHit)(ref val2)).transform).CompareTag("Player") && !Object.op_Implicit((Object)(object)((Component)((RaycastHit)(ref val2)).transform).GetComponent<EnemyRigidbody>()))
				{
					flag = false;
					break;
				}
			}
		}
		if (flag)
		{
			enemy.NavMeshAgent.Warp(((Component)enemy.Rigidbody).transform.position);
			enemy.NavMeshAgent.ResetPath();
			UpdateState(State.Aim);
		}
		else
		{
			UpdateState(State.InvestigateWalk);
		}
	}

	private void StateInvestigateWalk()
	{
		//IL_0014: Unknown result type (might be due to invalid IL or missing references)
		if (stateImpulse)
		{
			enemy.NavMeshAgent.SetDestination(investigatePoint);
			pitCheckTimer = 0f;
			enemy.Rigidbody.notMovingTimer = 0f;
			stateTimer = 1f;
			stateImpulse = false;
		}
		else
		{
			if (enemy.Rigidbody.notMovingTimer > 1f)
			{
				stateTimer -= Time.deltaTime;
			}
			if (PitCheckLogic())
			{
				enemy.NavMeshAgent.ResetPath();
			}
			if (stateTimer <= 0f || !enemy.NavMeshAgent.HasPath())
			{
				UpdateState(State.Idle);
			}
		}
		if (SemiFunc.EnemyForceLeave(enemy))
		{
			UpdateState(State.LeaveStart);
		}
	}

	private void StateAim()
	{
		//IL_0026: Unknown result type (might be due to invalid IL or missing references)
		//IL_0048: Unknown result type (might be due to invalid IL or missing references)
		//IL_004d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0053: Unknown result type (might be due to invalid IL or missing references)
		//IL_0058: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ad: Unknown result type (might be due to invalid IL or missing references)
		if (stateImpulse)
		{
			enemy.NavMeshAgent.Warp(((Component)enemy.Rigidbody).transform.position);
			enemy.NavMeshAgent.ResetPath();
			stateImpulse = false;
			investigatePointSpread = Vector3.zero;
			investigatePointSpreadTarget = Vector3.zero;
			investigatePointSpreadTimer = 0f;
			if (shootFast)
			{
				stateTimer = 0.5f;
			}
			else
			{
				stateTimer = Random.Range(0.25f, 1f);
			}
			enemy.NavMeshAgent.Warp(((Component)enemy.Rigidbody).transform.position);
			enemy.NavMeshAgent.ResetPath();
		}
		stateTimer -= Time.deltaTime;
		if (stateTimer <= 0f)
		{
			UpdateState(State.Shoot);
		}
	}

	private void StateShoot()
	{
		//IL_0011: 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_0026: Unknown result type (might be due to invalid IL or missing references)
		//IL_002b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0030: Unknown result type (might be due to invalid IL or missing references)
		//IL_004b: 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_0070: 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_00d2: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d7: Unknown result type (might be due to invalid IL or missing references)
		//IL_02d5: 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_02ec: Unknown result type (might be due to invalid IL or missing references)
		//IL_0343: Unknown result type (might be due to invalid IL or missing references)
		//IL_0334: Unknown result type (might be due to invalid IL or missing references)
		//IL_0313: Unknown result type (might be due to invalid IL or missing references)
		//IL_0318: Unknown result type (might be due to invalid IL or missing references)
		//IL_0376: Unknown result type (might be due to invalid IL or missing references)
		//IL_019e: Unknown result type (might be due to invalid IL or missing references)
		//IL_01a3: Unknown result type (might be due to invalid IL or missing references)
		//IL_01b4: Unknown result type (might be due to invalid IL or missing references)
		//IL_01bf: Unknown result type (might be due to invalid IL or missing references)
		//IL_01c4: Unknown result type (might be due to invalid IL or missing references)
		//IL_01c9: Unknown result type (might be due to invalid IL or missing references)
		//IL_01d1: Unknown result type (might be due to invalid IL or missing references)
		//IL_01d6: Unknown result type (might be due to invalid IL or missing references)
		//IL_01df: Unknown result type (might be due to invalid IL or missing references)
		//IL_0280: Unknown result type (might be due to invalid IL or missing references)
		//IL_0285: Unknown result type (might be due to invalid IL or missing references)
		//IL_0293: Unknown result type (might be due to invalid IL or missing references)
		//IL_0298: Unknown result type (might be due to invalid IL or missing references)
		//IL_01f9: 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_02b2: Unknown result type (might be due to invalid IL or missing references)
		//IL_02b7: Unknown result type (might be due to invalid IL or missing references)
		if (stateImpulse)
		{
			Vector3 val = gunAimTransform.position + gunAimTransform.forward * 50f;
			float num = 1f;
			if (shootFast)
			{
				num = 1.5f;
			}
			if (Vector3.Distance(((Component)this).transform.position, investigatePoint) > 10f)
			{
				num = 0.5f;
			}
			bool flag = false;
			RaycastHit[] array = Physics.SphereCastAll(gunAimTransform.position, num, gunAimTransform.forward, 50f, LayerMask.GetMask(new string[1] { "Player" }) + LayerMask.GetMask(new string[1] { "PhysGrabObject" }) + LayerMask.GetMask(new string[1] { "Enemy" }));
			for (int i = 0; i < array.Length; i++)
			{
				RaycastHit val2 = array[i];
				PlayerAvatar val3 = null;
				bool flag2 = false;
				if (((Component)((RaycastHit)(ref val2)).transform).gameObject.layer == LayerMask.NameToLayer("Player"))
				{
					flag2 = true;
					PlayerController componentInParent = ((Component)((RaycastHit)(ref val2)).transform).GetComponentInParent<PlayerController>();
					val3 = ((!Object.op_Implicit((Object)(object)componentInParent)) ? ((Component)((RaycastHit)(ref val2)).transform).GetComponentInParent<PlayerAvatar>() : componentInParent.playerAvatarScript);
				}
				else if (((Component)((RaycastHit)(ref val2)).transform).gameObject.layer == LayerMask.NameToLayer("Enemy"))
				{
					if ((Object)(object)((RaycastHit)(ref val2)).transform.root != (Object)(object)((Component)this).transform.root)
					{
						flag2 = true;
					}
				}
				else
				{
					PlayerTumble componentInParent2 = ((Component)((RaycastHit)(ref val2)).transform).GetComponentInParent<PlayerTumble>();
					if (Object.op_Implicit((Object)(object)componentInParent2))
					{
						val3 = componentInParent2.playerAvatar;
						flag2 = true;
					}
				}
				if (!flag2)
				{
					continue;
				}
				bool flag3 = true;
				if (((RaycastHit)(ref val2)).point != Vector3.zero)
				{
					Vector3 val4 = ((RaycastHit)(ref val2)).point - gunAimTransform.position;
					RaycastHit[] array2 = Physics.RaycastAll(gunAimTransform.position, val4, ((Vector3)(ref val4)).magnitude, LayerMask.op_Implicit(SemiFunc.LayerMaskGetVisionObstruct()));
					for (int j = 0; j < array2.Length; j++)
					{
						RaycastHit val5 = array2[j];
						if (((Component)((RaycastHit)(ref val5)).transform).gameObject.layer != LayerMask.NameToLayer("Player") && ((Component)((RaycastHit)(ref val5)).transform).gameObject.layer != LayerMask.NameToLayer("Enemy") && (((Component)((RaycastHit)(ref val5)).transform).gameObject.layer != LayerMask.NameToLayer("PhysGrabObject") || !Object.op_Implicit((Object)(object)((Component)this).GetComponentInParent<PlayerTumble>())))
						{
							flag3 = false;
							break;
						}
					}
				}
				if (flag3)
				{
					if (((RaycastHit)(ref val2)).point != Vector3.zero)
					{
						val = ((RaycastHit)(ref val2)).point;
						flag = true;
					}
					else if (Object.op_Implicit((Object)(object)val3))
					{
						val = val3.PlayerVisionTarget.VisionTransform.position;
						flag = true;
					}
					break;
				}
			}
			RaycastHit val6 = default(RaycastHit);
			if (!flag && Physics.Raycast(gunAimTransform.position, gunAimTransform.forward, ref val6, 50f, LayerMask.op_Implicit(SemiFunc.LayerMaskGetVisionObstruct()) + LayerMask.GetMask(new string[1] { "Enemy" })))
			{
				val = ((RaycastHit)(ref val6)).point;
			}
			if (SemiFunc.IsMultiplayer())
			{
				photonView.RPC("ShootRPC", (RpcTarget)0, new object[1] { val });
			}
			else
			{
				ShootRPC(val);
			}
			stateImpulse = false;
			stateTimer = 2f;
			enemy.NavMeshAgent.Warp(((Component)enemy.Rigidbody).transform.position);
			enemy.NavMeshAgent.ResetPath();
		}
		stateTimer -= Time.deltaTime;
		if (stateTimer <= 0f)
		{
			UpdateState(State.ShootEnd);
		}
	}

	private void StateShootEnd()
	{
		//IL_0043: Unknown result type (might be due to invalid IL or missing references)
		if (stateImpulse)
		{
			shotsFired++;
			stateImpulse = false;
			stateTimer = 2f;
			enemy.NavMeshAgent.Warp(((Component)enemy.Rigidbody).transform.position);
			enemy.NavMeshAgent.ResetPath();
		}
		stateTimer -= Time.deltaTime;
		if (stateTimer <= 0f)
		{
			if (shotsFired >= shotsFiredMax)
			{
				UpdateState(State.LeaveStart);
			}
			else
			{
				UpdateState(State.Idle);
			}
		}
	}

	private void StateLeaveStart()
	{
		//IL_0043: Unknown result type (might be due to invalid IL or missing references)
		if (stateImpulse)
		{
			shotsFired++;
			stateImpulse = false;
			stateTimer = 3f;
			enemy.NavMeshAgent.Warp(((Component)enemy.Rigidbody).transform.position);
			enemy.NavMeshAgent.ResetPath();
		}
		stateTimer -= Time.deltaTime;
		if (stateTimer <= 0f)
		{
			UpdateState(State.Leave);
		}
	}

	private void StateLeave()
	{
		//IL_0114: Unknown result type (might be due to invalid IL or missing references)
		//IL_0026: Unknown result type (might be due to invalid IL or missing references)
		//IL_0062: 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_016a: 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_00a4: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ba: 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_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)
		if (stateImpulse)
		{
			enemy.NavMeshAgent.Warp(((Component)enemy.Rigidbody).transform.position);
			enemy.NavMeshAgent.ResetPath();
			if (!enemy.EnemyParent.playerClose)
			{
				UpdateState(State.Idle);
				return;
			}
			bool flag = false;
			LevelPoint val = SemiFunc.LevelPointGetPlayerDistance(((Component)this).transform.position, 25f, 50f, false);
			if (!Object.op_Implicit((Object)(object)val))
			{
				val = SemiFunc.LevelPointGetFurthestFromPlayer(((Component)this).transform.position, 5f);
			}
			NavMeshHit val2 = default(NavMeshHit);
			if (Object.op_Implicit((Object)(object)val) && NavMesh.SamplePosition(((Component)val).transform.position, ref val2, 5f, -1) && Physics.Raycast(((NavMeshHit)(ref val2)).position, Vector3.down, 5f, LayerMask.GetMask(new string[1] { "Default" })))
			{
				leavePosition = ((NavMeshHit)(ref val2)).position;
				flag = true;
			}
			if (!flag)
			{
				return;
			}
			stateImpulse = false;
			stateTimer = 5f;
		}
		enemy.NavMeshAgent.SetDestination(leavePosition);
		if (enemy.Rigidbody.notMovingTimer > 2f)
		{
			stateTimer -= Time.deltaTime;
		}
		if (PitCheckLogic())
		{
			stateImpulse = true;
		}
		else if (stateTimer <= 0f || Vector3.Distance(((Component)this).transform.position, leavePosition) < 1f)
		{
			UpdateState(State.Idle);
		}
	}

	public void OnSpawn()
	{
		if (SemiFunc.IsMasterClientOrSingleplayer() && SemiFunc.EnemySpawn(enemy))
		{
			UpdateState(State.Spawn);
		}
	}

	public void OnHurt()
	{
		//IL_0011: Unknown result type (might be due to invalid IL or missing references)
		soundHurt.Play(enemy.CenterTransform.position, 1f, 1f, 1f, 1f);
		if (SemiFunc.IsMasterClientOrSingleplayer() && currentState == State.Leave)
		{
			UpdateState(State.Idle);
		}
	}

	public void OnDeath()
	{
		//IL_0011: Unknown result type (might be due to invalid IL or missing references)
		//IL_0036: Unknown result type (might be due to invalid IL or missing references)
		//IL_003b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0084: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b2: Unknown result type (might be due to invalid IL or missing references)
		soundDeath.Play(enemy.CenterTransform.position, 1f, 1f, 1f, 1f);
		Enumerator<ParticleSystem> enumerator = deathEffects.GetEnumerator();
		try
		{
			while (enumerator.MoveNext())
			{
				ParticleSystem current = enumerator.Current;
				current.Play();
			}
		}
		finally
		{
			((global::System.IDisposable)enumerator).Dispose();
		}
		GameDirector.instance.CameraShake.ShakeDistance(3f, 3f, 10f, ((Component)this).transform.position, 0.5f);
		GameDirector.instance.CameraImpact.ShakeDistance(3f, 3f, 10f, ((Component)this).transform.position, 0.05f);
		if (SemiFunc.IsMasterClientOrSingleplayer())
		{
			enemy.EnemyParent.Despawn();
		}
	}

	public void OnInvestigate()
	{
		//IL_0073: 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_007e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0089: 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_00f4: Unknown result type (might be due to invalid IL or missing references)
		//IL_0104: Unknown result type (might be due to invalid IL or missing references)
		if (!SemiFunc.IsMasterClientOrSingleplayer() || !(enemy.Rigidbody.timeSinceStun > 1.5f))
		{
			return;
		}
		if (currentState == State.Idle || currentState == State.Roam || currentState == State.InvestigateWalk || (currentState == State.ShootEnd && shotsFired < shotsFiredMax) || (currentState == State.Leave && leaveInterruptCounter >= 3))
		{
			investigatePoint = enemy.StateInvestigate.onInvestigateTriggeredPosition;
			if (Vector3.Distance(investigatePoint, ((Component)this).transform.position) < 4f)
			{
				shootFast = true;
			}
			else
			{
				shootFast = false;
			}
			InvestigateTransformGet();
			if (SemiFunc.IsMultiplayer())
			{
				photonView.RPC("UpdateInvestigationPoint", (RpcTarget)1, new object[1] { investigatePoint });
			}
			UpdateState(State.Investigate);
		}
		else if (currentState == State.Leave && Vector3.Distance(((Component)this).transform.position, enemy.StateInvestigate.onInvestigateTriggeredPosition) < 5f)
		{
			leaveInterruptCounter++;
			leaveInterruptTimer = 3f;
		}
	}

	public void OnTouchPlayer()
	{
		//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_00cd: Unknown result type (might be due to invalid IL or missing references)
		if (SemiFunc.IsMasterClientOrSingleplayer() && enemy.Rigidbody.timeSinceStun > 1.5f && (currentState == State.Idle || currentState == State.Roam || currentState == State.InvestigateWalk || currentState == State.ShootEnd || currentState == State.LeaveStart || currentState == State.Leave))
		{
			shootFast = true;
			investigatePoint = enemy.Rigidbody.onTouchPlayerAvatar.PlayerVisionTarget.VisionTransform.position;
			investigatePointHasTransform = true;
			investigatePointTransform = enemy.Rigidbody.onTouchPlayerAvatar.PlayerVisionTarget.VisionTransform;
			if (SemiFunc.IsMultiplayer())
			{
				photonView.RPC("UpdateInvestigationPoint", (RpcTarget)1, new object[1] { investigatePoint });
			}
			UpdateState(State.Aim);
		}
	}

	public void OnTouchPlayerGrabbedObject()
	{
		//IL_006e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0073: Unknown result type (might be due to invalid IL or missing references)
		//IL_00bb: Unknown result type (might be due to invalid IL or missing references)
		if (SemiFunc.IsMasterClientOrSingleplayer() && enemy.Rigidbody.timeSinceStun > 1.5f && (currentState == State.Idle || currentState == State.Roam || currentState == State.InvestigateWalk || currentState == State.ShootEnd || currentState == State.LeaveStart || currentState == State.Leave))
		{
			shootFast = true;
			investigatePoint = enemy.Rigidbody.onTouchPlayerGrabbedObjectPosition;
			investigatePointHasTransform = true;
			investigatePointTransform = enemy.Rigidbody.onTouchPlayerGrabbedObjectAvatar.PlayerVisionTarget.VisionTransform;
			if (SemiFunc.IsMultiplayer())
			{
				photonView.RPC("UpdateInvestigationPoint", (RpcTarget)1, new object[1] { investigatePoint });
			}
			UpdateState(State.Aim);
		}
	}

	public void OnGrabbed()
	{
		//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_00cd: Unknown result type (might be due to invalid IL or missing references)
		if (SemiFunc.IsMasterClientOrSingleplayer() && enemy.Rigidbody.timeSinceStun > 1.5f && (currentState == State.Idle || currentState == State.Roam || currentState == State.InvestigateWalk || currentState == State.ShootEnd || currentState == State.LeaveStart || currentState == State.Leave))
		{
			shootFast = true;
			investigatePoint = enemy.Rigidbody.onGrabbedPlayerAvatar.PlayerVisionTarget.VisionTransform.position;
			investigatePointHasTransform = true;
			investigatePointTransform = enemy.Rigidbody.onGrabbedPlayerAvatar.PlayerVisionTarget.VisionTransform;
			if (SemiFunc.IsMultiplayer())
			{
				photonView.RPC("UpdateInvestigationPoint", (RpcTarget)1, new object[1] { investigatePoint });
			}
			UpdateState(State.Aim);
		}
	}

	private void UpdateState(State _state)
	{
		if (currentState != _state)
		{
			currentState = _state;
			stateImpulse = true;
			stateTimer = 0f;
			if (GameManager.Multiplayer())
			{
				photonView.RPC("UpdateStateRPC", (RpcTarget)0, new object[1] { currentState });
			}
			else
			{
				UpdateStateRPC(currentState);
			}
		}
	}

	private void AimLogic()
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0006: Unknown result type (might be due to invalid IL or missing references)
		//IL_0015: Unknown result type (might be due to invalid IL or missing references)
		//IL_001b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0020: Unknown result type (might be due to invalid IL or missing references)
		//IL_0025: Unknown result type (might be due to invalid IL or missing references)
		//IL_0039: Unknown result type (might be due to invalid IL or missing references)
		//IL_003e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0045: Unknown result type (might be due to invalid IL or missing references)
		//IL_004a: Unknown result type (might be due to invalid IL or missing references)
		//IL_004f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0057: Unknown result type (might be due to invalid IL or missing references)
		//IL_005c: Unknown result type (might be due to invalid IL or missing references)
		//IL_006e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0082: Unknown result type (might be due to invalid IL or missing references)
		//IL_0087: Unknown result type (might be due to invalid IL or missing references)
		//IL_008f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0094: Unknown result type (might be due to invalid IL or missing references)
		//IL_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_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_010f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0111: Unknown result type (might be due to invalid IL or missing references)
		//IL_0116: Unknown result type (might be due to invalid IL or missing references)
		//IL_011b: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d2: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d4: 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_00b5: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ba: Unknown result type (might be due to invalid IL or missing references)
		//IL_0132: 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_013f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0144: Unknown result type (might be due to invalid IL or missing references)
		//IL_014f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0154: Unknown result type (might be due to invalid IL or missing references)
		//IL_015c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0167: Unknown result type (might be due to invalid IL or missing references)
		//IL_0172: Unknown result type (might be due to invalid IL or missing references)
		//IL_0177: Unknown result type (might be due to invalid IL or missing references)
		//IL_017c: Unknown result type (might be due to invalid IL or missing references)
		//IL_018c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0191: 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_01b4: Unknown result type (might be due to invalid IL or missing references)
		//IL_01c3: Unknown result type (might be due to invalid IL or missing references)
		//IL_01d3: Unknown result type (might be due to invalid IL or missing references)
		//IL_01d8: Unknown result type (might be due to invalid IL or missing references)
		//IL_01e0: Unknown result type (might be due to invalid IL or missing references)
		//IL_01ec: Unknown result type (might be due to invalid IL or missing references)
		//IL_01f3: Unknown result type (might be due to invalid IL or missing references)
		//IL_01f5: Unknown result type (might be due to invalid IL or missing references)
		//IL_0200: Unknown result type (might be due to invalid IL or missing references)
		//IL_0205: Unknown result type (might be due to invalid IL or missing references)
		//IL_020e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0219: Unknown result type (might be due to invalid IL or missing references)
		//IL_0224: Unknown result type (might be due to invalid IL or missing references)
		//IL_0229: Unknown result type (might be due to invalid IL or missing references)
		//IL_022e: Unknown result type (might be due to invalid IL or missing references)
		//IL_023f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0256: Unknown result type (might be due to invalid IL or missing references)
		//IL_02a3: Unknown result type (might be due to invalid IL or missing references)
		//IL_02b3: Unknown result type (might be due to invalid IL or missing references)
		//IL_02b8: Unknown result type (might be due to invalid IL or missing references)
		//IL_02c0: 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_02ca: 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_02eb: Unknown result type (might be due to invalid IL or missing references)
		//IL_0317: Unknown result type (might be due to invalid IL or missing references)
		//IL_0329: Unknown result type (might be due to invalid IL or missing references)
		//IL_032e: Unknown result type (might be due to invalid IL or missing references)
		Vector3 val = investigatePoint;
		if (investigatePointHasTransform)
		{
			Vector3 val2 = investigatePointTransform.position - investigatePointTransformPrevious;
			val2.y = 0f;
			val = investigatePointTransform.position + val2 * 25f;
			investigatePointTransformPrevious = investigatePointTransform.position;
		}
		if (investigatePointSpreadTimer <= 0f)
		{
			Vector3 val3 = Random.insideUnitSphere * Random.Range(0f, 0.5f);
			if (Vector3.Distance(((Component)this).transform.position, val) > 10f)
			{
				val3 = Random.insideUnitSphere * Random.Range(0.5f, 1f);
			}
			investigatePointSpreadTimer = Random.Range(0.1f, 0.5f);
			investigatePointSpreadTarget = val3;
		}
		else
		{
			investigatePointSpreadTimer -= Time.deltaTime;
		}
		investigatePointSpread = Vector3.Lerp(investigatePointSpread, investigatePointSpreadTarget, Time.deltaTime * 20f);
		val += investigatePointSpread;
		float num = 5f;
		if (shootFast)
		{
			num = 20f;
		}
		investigatePoint = Vector3.Lerp(investigatePoint, val, num * Time.deltaTime);
		Vector3 position = ((Component)this).transform.position;
		Transform transform = ((Component)this).transform;
		transform.position += gunAimTransform.position - verticalAimTransform.position;
		Quaternion rotation = ((Component)this).transform.rotation;
		((Component)this).transform.LookAt(investigatePoint);
		((Component)this).transform.eulerAngles = new Vector3(0f, ((Component)this).transform.eulerAngles.y, 0f);
		Quaternion rotation2 = ((Component)this).transform.rotation;
		((Component)this).transform.rotation = rotation;
		((Component)this).transform.position = position;
		investigateAimHorizontal = rotation2;
		Vector3 position2 = verticalAimTransform.position;
		Transform obj = verticalAimTransform;
		obj.position += gunAimTransform.position - verticalAimTransform.position;
		verticalAimTransform.LookAt(investigatePoint);
		float num2 = 45f;
		float x = verticalAimTransform.localEulerAngles.x;
		x = ((!(x < 180f)) ? Mathf.Clamp(x, 360f - num2, 360f) : Mathf.Clamp(x, 0f, num2));
		verticalAimTransform.localEulerAngles = new Vector3(x, 0f, 0f);
		Quaternion localRotation = verticalAimTransform.localRotation;
		verticalAimTransform.position = position2;
		investigateAimVertical = localRotation;
		if (!SemiFunc.IsMultiplayer())
		{
			return;
		}
		if (investigateAimVerticalRPCTimer <= 0f)
		{
			if (investigateAimVerticalPrevious != investigateAimVertical)
			{
				investigateAimVerticalRPCTimer = 1f;
				photonView.RPC("UpdateVerticalAimRPC", (RpcTarget)1, new object[1] { investigateAimVertical });
				investigateAimVerticalPrevious = investigateAimVertical;
			}
		}
		else
		{
			investigateAimVerticalRPCTimer -= Time.deltaTime;
		}
	}

	private void HorizontalRotationLogic()
	{
		//IL_0158: Unknown result type (might be due to invalid IL or missing references)
		//IL_0162: Unknown result type (might be due to invalid IL or missing references)
		//IL_0076: Unknown result type (might be due to invalid IL or missing references)
		//IL_007b: Unknown result type (might be due to invalid IL or missing references)
		//IL_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_00b2: 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_00d1: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d6: Unknown result type (might be due to invalid IL or missing references)
		//IL_00dd: 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_00e5: 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_0146: Unknown result type (might be due to invalid IL or missing references)
		if (currentState == State.Idle || currentState == State.Roam || currentState == State.InvestigateWalk || currentState == State.LeaveStart || currentState == State.Leave)
		{
			horizontalAimSpring.damping = 0.7f;
			horizontalAimSpring.speed = 3f;
			if (((Vector3)(ref enemy.NavMeshAgent.AgentVelocity)).magnitude > 0.01f)
			{
				Quaternion rotation = ((Component)this).transform.rotation;
				((Component)this).transform.rotation = Quaternion.LookRotation(((Vector3)(ref enemy.NavMeshAgent.AgentVelocity)).normalized);
				((Component)this).transform.eulerAngles = new Vector3(0f, ((Component)this).transform.eulerAngles.y, 0f);
				Quaternion rotation2 = ((Component)this).transform.rotation;
				((Component)this).transform.rotation = rotation;
				horizontalAimTarget = rotation2;
			}
		}
		else if (currentState == State.Aim)
		{
			if (shootFast)
			{
				horizontalAimSpring.damping = 0.9f;
				horizontalAimSpring.speed = 30f;
			}
			else
			{
				horizontalAimSpring.damping = 0.8f;
				horizontalAimSpring.speed = 20f;
			}
			horizontalAimTarget = investigateAimHorizontal;
		}
		((Component)this).transform.rotation = SemiFunc.SpringQuaternionGet(horizontalAimSpring, horizontalAimTarget, -1f);
	}

	private void VerticalRotationLogic()
	{
		//IL_001f: 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_0040: Unknown result type (might be due to invalid IL or missing references)
		//IL_004a: Unknown result type (might be due to invalid IL or missing references)
		if (currentState == State.Aim || currentState == State.Shoot)
		{
			verticalAimTransform.localRotation = SemiFunc.SpringQuaternionGet(verticalAimSpring, investigateAimVertical, -1f);
		}
		else
		{
			verticalAimTransform.localRotation = SemiFunc.SpringQuaternionGet(verticalAimSpring, Quaternion.identity, -1f);
		}
	}

	private bool PitCheckLogic()
	{
		//IL_0020: Unknown result type (might be due to invalid IL or missing references)
		//IL_0025: Unknown result type (might be due to invalid IL or missing references)
		//IL_0052: Unknown result type (might be due to invalid IL or missing references)
		//IL_0057: Unknown result type (might be due to invalid IL or missing references)
		//IL_006a: Unknown result type (might be due to invalid IL or missing references)
		//IL_006f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0070: Unknown result type (might be due to invalid IL or missing references)
		//IL_0075: Unknown result type (might be due to invalid IL or missing references)
		//IL_007f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0084: Unknown result type (might be due to invalid IL or missing references)
		//IL_0089: 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_00b7: Unknown result type (might be due to invalid IL or missing references)
		//IL_00bc: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c2: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c7: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f1: Unknown result type (might be due to invalid IL or missing references)
		if (pitCheckTimer <= 0f)
		{
			Vector3 normalized = ((Vector3)(ref enemy.NavMeshAgent.AgentVelocity)).normalized;
			if (((Vector3)(ref normalized)).magnitude > 0.1f)
			{
				pitCheckTimer = 0.5f;
				Vector3 normalized2 = ((Vector3)(ref enemy.NavMeshAgent.AgentVelocity)).normalized;
				normalized2.y = 0f;
				bool flag = Physics.Raycast(((Component)this).transform.position + normalized2 + Vector3.up * 1f, Vector3.down, 5f, LayerMask.op_Implicit(SemiFunc.LayerMaskGetVisionObstruct()));
				if (!flag)
				{
					enemy.NavMeshAgent.Warp(((Component)this).transform.position - normalized2 * 0.5f);
					enemy.NavMeshAgent.ResetPath();
					enemy.NavMeshAgent.Agent.velocity = Vector3.zero;
				}
				return !flag;
			}
		}
		pitCheckTimer -= Time.deltaTime;
		return false;
	}

	private void HurtColliderTimer()
	{
		if (hurtColliderTimer > 0f)
		{
			hurtColliderTimer -= Time.deltaTime;
			if (hurtColliderTimer <= 0f)
			{
				((Component)hurtCollider).gameObject.SetActive(false);
			}
		}
	}

	private void LineRendererLogic()
	{
		if (lineRendererActive)
		{
			lineRenderer.widthMultiplier = lineRendererWidthCurve.Evaluate(lineRendererLerp);
			lineRendererLerp += Time.deltaTime * 5f;
			if (lineRendererLerp >= 1f)
			{
				((Component)lineRenderer).gameObject.SetActive(false);
				lineRendererActive = false;
			}
		}
	}

	private void ShotsFiredLogic()
	{
		if (currentState == State.Spawn || currentState == State.Leave)
		{
			shotsFired = 0;
		}
	}

	private void InvestigateTransformGet()
	{
		//IL_0008: Unknown result type (might be due to invalid IL or missing references)
		investigatePointHasTransform = false;
		Collider[] array = Physics.OverlapSphere(investigatePoint, 1.5f, LayerMask.GetMask(new string[1] { "Player" }) + LayerMask.GetMask(new string[1] { "PhysGrabObject" }));
		Collider[] array2 = array;
		foreach (Collider val in array2)
		{
			if (((Component)val).CompareTag("Player"))
			{
				PlayerController componentInParent = ((Component)val).GetComponentInParent<PlayerController>();
				if (Object.op_Implicit((Object)(object)componentInParent))
				{
					investigatePointHasTransform = true;
					investigatePointTransform = componentInParent.playerAvatarScript.PlayerVisionTarget.VisionTransform;
					continue;
				}
				PlayerAvatar componentInParent2 = ((Component)val).GetComponentInParent<PlayerAvatar>();
				if (Object.op_Implicit((Object)(object)componentInParent2))
				{
					investigatePointHasTransform = true;
					investigatePointTransform = componentInParent2.PlayerVisionTarget.VisionTransform;
				}
			}
			else
			{
				PlayerTumble componentInParent3 = ((Component)val).GetComponentInParent<PlayerTumble>();
				if (Object.op_Implicit((Object)(object)componentInParent3))
				{
					investigatePointHasTransform = true;
					investigatePointTransform = componentInParent3.playerAvatar.PlayerVisionTarget.VisionTransform;
				}
			}
		}
	}

	private void LeaveInterruptLogic()
	{
		if (currentState == State.Leave)
		{
			if (leaveInterruptTimer <= 0f)
			{
				leaveInterruptCounter = 0;
			}
			else
			{
				leaveInterruptTimer -= Time.deltaTime;
			}
		}
		else
		{
			leaveInterruptTimer = 0f;
		}
	}

	[PunRPC]
	private void UpdateStateRPC(State _state)
	{
		currentState = _state;
		if (currentState == State.Spawn)
		{
			enemyHunterAnim.OnSpawn();
		}
	}

	[PunRPC]
	private void UpdateVerticalAimRPC(Quaternion _rotation)
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		investigateAimVertical = _rotation;
	}

	[PunRPC]
	private void ShootRPC(Vector3 _hitPosition)
	{
		//IL_0000: 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_000c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0011: Unknown result type (might be due to invalid IL or missing references)
		//IL_0030: 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_004e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0058: Unknown result type (might be due to invalid IL or missing references)
		//IL_005d: Unknown result type (might be due to invalid IL or missing references)
		//IL_006e: 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_007b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0080: Unknown result type (might be due to invalid IL or missing references)
		//IL_0091: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b4: Unknown result type (might be due to invalid IL or missing references)
		//IL_00cb: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d0: Unknown result type (might be due to invalid IL or missing references)
		//IL_0102: Unknown result type (might be due to invalid IL or missing references)
		//IL_0118: Unknown result type (might be due to invalid IL or missing references)
		//IL_0128: Unknown result type (might be due to invalid IL or missing references)
		//IL_012d: Unknown result type (might be due to invalid IL or missing references)
		//IL_015d: Unknown result type (might be due to invalid IL or missing references)
		//IL_016f: 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_01da: Unknown result type (might be due to invalid IL or missing references)
		//IL_0208: Unknown result type (might be due to invalid IL or missing references)
		//IL_0230: 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)
		//IL_026b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0296: Unknown result type (might be due to invalid IL or missing references)
		//IL_02bb: Unknown result type (might be due to invalid IL or missing references)
		Vector3 val = _hitPosition - gunTipTransform.position;
		((Component)lineRenderer).gameObject.SetActive(true);
		lineRenderer.SetPosition(0, gunTipTransform.position);
		lineRenderer.SetPosition(1, gunTipTransform.position + ((Vector3)(ref val)).normalized * 0.5f);
		lineRenderer.SetPosition(2, _hitPosition - ((Vector3)(ref val)).normalized * 0.5f);
		lineRenderer.SetPosition(3, _hitPosition);
		lineRendererActive = true;
		lineRendererLerp = 0f;
		((Component)hurtCollider).transform.position = _hitPosition;
		((Component)hurtCollider).transform.rotation = Quaternion.LookRotation(gunTipTransform.forward);
		((Component)hurtCollider).gameObject.SetActive(true);
		hurtColliderTimer = 0.25f;
		shootEffectTransform.position = gunTipTransform.position;
		shootEffectTransform.rotation = gunTipTransform.rotation;
		Enumerator<ParticleSystem> enumerator = shootEffects.GetEnumerator();
		try
		{
			while (enumerator.MoveNext())
			{
				ParticleSystem current = enumerator.Current;
				current.Play();
			}
		}
		finally
		{
			((global::System.IDisposable)enumerator).Dispose();
		}
		hitEffectTransform.position = _hitPosition;
		hitEffectTransform.rotation = gunTipTransform.rotation;
		Enumerator<ParticleSystem> enumerator2 = hitEffects.GetEnumerator();
		try
		{
			while (enumerator2.MoveNext())
			{
				ParticleSystem current2 = enumerator2.Current;
				current2.Play();
			}
		}
		finally
		{
			((global::System.IDisposable)enumerator2).Dispose();
		}
		enemyHunterAlwaysActive.Trigger();
		GameDirector.instance.CameraShake.ShakeDistance(5f, 3f, 15f, gunTipTransform.position, 0.5f);
		GameDirector.instance.CameraImpact.ShakeDistance(5f, 3f, 15f, gunTipTransform.position, 0.05f);
		GameDirector.instance.CameraShake.ShakeDistance(3f, 3f, 10f, _hitPosition, 0.5f);
		GameDirector.instance.CameraImpact.ShakeDistance(3f, 3f, 10f, _hitPosition, 0.05f);
		soundShoot.Play(gunTipTransform.position, 1f, 1f, 1f, 1f);
		soundShootGlobal.Play(gunTipTransform.position, 1f, 1f, 1f, 1f);
		soundHit.Play(_hitPosition, 1f, 1f, 1f, 1f);
	}

	[PunRPC]
	private void UpdateInvestigationPoint(Vector3 _point)
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		investigatePoint = _point;
	}
}
internal class TestDummy
{
}