Decompiled source of Terminator AMT Hardballer v1.0.0

Terminator_AMT_Hardballer.dll

Decompiled 12 hours ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using FistVR;
using OtherLoader;
using ProBuilder2.Common;
using ProBuilder2.MeshOperations;
using UnityEngine;

[assembly: Debuggable(DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("0.0.0.0")]
[module: UnverifiableCode]
[Serializable]
[CreateAssetMenu(fileName = "New SlaughtomaticMaterialProfile", menuName = "Okkim/Slaughtomatic Material Profile", order = 1)]
public class SlaughtomaticMaterialProfile : ScriptableObject
{
	private int materialWeightSum = 0;

	public List<MaterialProfileEntry> materialProfileEntries;

	[ContextMenu("ListPercentages")]
	public void ListPercentages()
	{
		Debug.Log((object)("Material weight sum = " + materialWeightSum));
		int num = 0;
		foreach (MaterialProfileEntry materialProfileEntry in materialProfileEntries)
		{
			float num2 = (float)materialProfileEntry.weight / (float)materialWeightSum;
			Debug.Log((object)("Material " + num + " = " + ((Object)materialProfileEntry.material).name + ", weight = " + materialProfileEntry.weight + ", chance to drop = " + (num2 * 100f).ToString("F4") + "%"));
			num++;
		}
	}

	private void OnValidate()
	{
		materialWeightSum = 0;
		foreach (MaterialProfileEntry materialProfileEntry in materialProfileEntries)
		{
			if (materialProfileEntry != null)
			{
				materialWeightSum += materialProfileEntry.weight;
			}
		}
	}
}
[Serializable]
public class MaterialProfileEntry
{
	public Material material;

	[Tooltip("The higher the value, the more often it shows up in-game")]
	public int weight = 1;

	public bool isRare;
}
public class Ripper : FVRPhysicalObject
{
	[Header("Ripper")]
	public AudioSource SawAudio;

	public AudioSource StartingAudio;

	public AudioClip AudClip_Start;

	public AudioClip AudClip_Idle;

	public AudioClip AudClip_Buzzing;

	public AudioClip AudClip_Hitting;

	private bool m_isRunning;

	private float m_currentCableLength;

	private float m_lastCableLength;

	private float m_motorSpeed;

	private float triggerAmount;

	private float m_sawingIntesity;

	public bool UsesBladeSolidBits = true;

	public Renderer BladeSolid;

	public Renderer BladeBits;

	[Tooltip("Alternative to BladeSolidBits, repeatedly toggles between set of blade objects to emulate movement. When saw is off, defaults to index 0 object.")]
	public bool CycleBladeObjects;

	public GameObject[] BladeObjects;

	[Tooltip("Time each object is enabled, lower to cycle faster.")]
	public float BladeObjectSwitchInterval;

	private Material m_matBladeSolid;

	private Material m_matBladeBits;

	public Collider[] BladeCols;

	private HashSet<Collider> m_bladeCols = new HashSet<Collider>();

	public ParticleSystem Sparks;

	private EmitParams emitParams;

	public Transform BladePoint1;

	public Transform BladePoint2;

	private List<IFVRDamageable> DamageablesToDo;

	private HashSet<IFVRDamageable> DamageablesToDoHS;

	private List<Vector3> DamageableHitPoints;

	private List<Vector3> DamageableHitNormals;

	private float TimeSinceDamageDealing = 0.2f;

	public ParticleSystem EngineSmoke;

	public bool UsesEngineRot = true;

	public Transform EngineRot;

	public float PerceptibleEventVolume = 50f;

	public float PerceptibleEventRange = 30f;

	private float m_timeTilPerceptibleEventTick = 0.2f;

	private float timeSinceCollision = 1f;

	private int framesTilFlash;

	private float bladeObjectCycleTime;

	private int bladeIndex = 0;

	private float timeSinceTryTurnOff;

	public override void Awake()
	{
		//IL_000a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0010: 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)
		((FVRPhysicalObject)this).Awake();
		emitParams = default(EmitParams);
		if (UsesBladeSolidBits)
		{
			m_matBladeSolid = BladeSolid.materials[0];
			m_matBladeBits = BladeBits.material;
		}
		for (int i = 0; i < BladeCols.Length; i++)
		{
			m_bladeCols.Add(BladeCols[i]);
		}
		DamageablesToDo = new List<IFVRDamageable>();
		DamageablesToDoHS = new HashSet<IFVRDamageable>();
		DamageableHitPoints = new List<Vector3>();
		DamageableHitNormals = new List<Vector3>();
	}

	public override void Start()
	{
		((FVRInteractiveObject)this).Start();
	}

	public override void UpdateInteraction(FVRViveHand hand)
	{
		((FVRPhysicalObject)this).UpdateInteraction(hand);
		if (((FVRInteractiveObject)this).m_hasTriggeredUpSinceBegin && !base.IsAltHeld)
		{
			triggerAmount = hand.Input.TriggerFloat;
			if (((hand.IsInStreamlinedMode && hand.Input.BYButtonDown && m_isRunning) || (!hand.IsInStreamlinedMode && hand.Input.TouchpadDown && m_isRunning)) && timeSinceTryTurnOff <= 0f)
			{
				timeSinceTryTurnOff = 0.2f;
				Debug.Log((object)"attempting to shut off ripper");
				m_motorSpeed = 0f;
				m_isRunning = false;
			}
			if (((hand.IsInStreamlinedMode && hand.Input.BYButtonDown && !m_isRunning) || (!hand.IsInStreamlinedMode && hand.Input.TouchpadDown && !m_isRunning)) && timeSinceTryTurnOff <= 0f)
			{
				timeSinceTryTurnOff = 0.2f;
				Debug.Log((object)"turning on ripper");
				m_isRunning = true;
				m_currentCableLength = 0f;
				SetCableLength(8f);
			}
		}
	}

	public void OnCollisionStay(Collision col)
	{
		//IL_00aa: 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_0190: 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_01ac: Unknown result type (might be due to invalid IL or missing references)
		//IL_01b1: Unknown result type (might be due to invalid IL or missing references)
		//IL_01b6: 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_01c8: 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_01ce: Unknown result type (might be due to invalid IL or missing references)
		//IL_01d0: Unknown result type (might be due to invalid IL or missing references)
		//IL_01d7: Unknown result type (might be due to invalid IL or missing references)
		//IL_01dc: Unknown result type (might be due to invalid IL or missing references)
		//IL_01de: 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_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_01ee: Unknown result type (might be due to invalid IL or missing references)
		//IL_01f7: Unknown result type (might be due to invalid IL or missing references)
		//IL_0202: Unknown result type (might be due to invalid IL or missing references)
		//IL_0207: 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_0222: 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_022e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0233: 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_023a: Unknown result type (might be due to invalid IL or missing references)
		//IL_023c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0243: Unknown result type (might be due to invalid IL or missing references)
		//IL_0248: Unknown result type (might be due to invalid IL or missing references)
		//IL_024d: 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_0263: Unknown result type (might be due to invalid IL or missing references)
		//IL_0288: Unknown result type (might be due to invalid IL or missing references)
		//IL_0296: Unknown result type (might be due to invalid IL or missing references)
		//IL_02aa: Unknown result type (might be due to invalid IL or missing references)
		//IL_014a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0166: Unknown result type (might be due to invalid IL or missing references)
		if (!m_isRunning || !(m_sawingIntesity > 0.1f))
		{
			return;
		}
		int num = 0;
		for (int i = 0; i < col.contacts.Length; i++)
		{
			if (!m_bladeCols.Contains(((ContactPoint)(ref col.contacts[i])).thisCollider))
			{
				continue;
			}
			IFVRDamageable component = ((Component)((Component)((ContactPoint)(ref col.contacts[i])).otherCollider).transform).gameObject.GetComponent<IFVRDamageable>();
			if (component != null && DamageablesToDoHS.Add(component))
			{
				DamageablesToDo.Add(component);
				DamageableHitPoints.Add(((ContactPoint)(ref col.contacts[i])).point);
				DamageableHitNormals.Add(((ContactPoint)(ref col.contacts[i])).normal);
			}
			if (component == null && (Object)(object)((ContactPoint)(ref col.contacts[i])).otherCollider.attachedRigidbody != (Object)null)
			{
				component = ((Component)((ContactPoint)(ref col.contacts[i])).otherCollider.attachedRigidbody).gameObject.GetComponent<IFVRDamageable>();
				if (DamageablesToDoHS.Add(component))
				{
					DamageablesToDo.Add(component);
					DamageableHitPoints.Add(((ContactPoint)(ref col.contacts[i])).point);
					DamageableHitNormals.Add(((ContactPoint)(ref col.contacts[i])).normal);
				}
			}
			if (num < 2)
			{
				timeSinceCollision = 0f;
				num++;
				Vector3 closestValidPoint = ((FVRInteractiveObject)this).GetClosestValidPoint(BladePoint1.position, BladePoint2.position, ((ContactPoint)(ref col.contacts[i])).point);
				Vector3 val = ((ContactPoint)(ref col.contacts[i])).point - closestValidPoint;
				val = Vector3.ClampMagnitude(val, 0.04f);
				Vector3 val2 = closestValidPoint + val;
				((EmitParams)(ref emitParams)).position = val2;
				Vector3 val3 = Vector3.Cross(((Vector3)(ref val)).normalized, ((Component)this).transform.right) * Random.Range(1f, 10f);
				val3 += Random.onUnitSphere * 3f;
				val3 += val * 2f;
				((EmitParams)(ref emitParams)).velocity = val3;
				Sparks.Emit(emitParams, 1);
				if (framesTilFlash <= 0)
				{
					framesTilFlash = Random.Range(3, 7);
					FXM.InitiateMuzzleFlash(val2, ((ContactPoint)(ref col.contacts[i])).normal, Random.Range(0.25f, 2f), Color.white, Random.Range(0.5f, 1f));
				}
			}
		}
	}

	public override void FVRUpdate()
	{
		//IL_0083: Unknown result type (might be due to invalid IL or missing references)
		//IL_0089: Expected O, but got Unknown
		//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_00c3: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c8: Unknown result type (might be due to invalid IL or missing references)
		//IL_00fa: Unknown result type (might be due to invalid IL or missing references)
		//IL_0113: Unknown result type (might be due to invalid IL or missing references)
		//IL_011e: Expected O, but got Unknown
		//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_013e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0143: Unknown result type (might be due to invalid IL or missing references)
		//IL_014a: 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_023c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0241: Unknown result type (might be due to invalid IL or missing references)
		//IL_0260: Unknown result type (might be due to invalid IL or missing references)
		//IL_0265: Unknown result type (might be due to invalid IL or missing references)
		//IL_02c4: Unknown result type (might be due to invalid IL or missing references)
		//IL_02c9: Unknown result type (might be due to invalid IL or missing references)
		//IL_02cd: Unknown result type (might be due to invalid IL or missing references)
		//IL_02d2: Unknown result type (might be due to invalid IL or missing references)
		//IL_02f6: Unknown result type (might be due to invalid IL or missing references)
		//IL_069c: Unknown result type (might be due to invalid IL or missing references)
		//IL_06a1: Unknown result type (might be due to invalid IL or missing references)
		//IL_057b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0580: Unknown result type (might be due to invalid IL or missing references)
		//IL_059f: Unknown result type (might be due to invalid IL or missing references)
		//IL_05a4: Unknown result type (might be due to invalid IL or missing references)
		//IL_04b1: Unknown result type (might be due to invalid IL or missing references)
		//IL_04b6: Unknown result type (might be due to invalid IL or missing references)
		//IL_04d6: Unknown result type (might be due to invalid IL or missing references)
		//IL_04db: Unknown result type (might be due to invalid IL or missing references)
		//IL_0713: Unknown result type (might be due to invalid IL or missing references)
		//IL_05d5: Unknown result type (might be due to invalid IL or missing references)
		//IL_05da: Unknown result type (might be due to invalid IL or missing references)
		//IL_05de: Unknown result type (might be due to invalid IL or missing references)
		//IL_05e3: Unknown result type (might be due to invalid IL or missing references)
		//IL_062f: Unknown result type (might be due to invalid IL or missing references)
		((FVRPhysicalObject)this).FVRUpdate();
		if (framesTilFlash > 0)
		{
			framesTilFlash--;
		}
		if (timeSinceCollision < 1f)
		{
			timeSinceCollision += Time.deltaTime;
		}
		timeSinceTryTurnOff -= Time.deltaTime;
		if (TimeSinceDamageDealing > 0f)
		{
			TimeSinceDamageDealing -= Time.deltaTime;
		}
		else
		{
			Damage val = new Damage();
			Vector3 velocity = ((FVRPhysicalObject)this).RootRigidbody.velocity;
			val.Dam_Blunt = 100f * Mathf.Clamp(((Vector3)(ref velocity)).magnitude, 1f, 3f);
			Vector3 velocity2 = ((FVRPhysicalObject)this).RootRigidbody.velocity;
			val.Dam_Cutting = 250f * Mathf.Clamp(((Vector3)(ref velocity2)).magnitude, 1f, 2f);
			val.Dam_TotalKinetic = val.Dam_Cutting + val.Dam_Blunt;
			val.Class = (DamageClass)3;
			for (int i = 0; i < DamageablesToDo.Count; i++)
			{
				if ((Object)(MonoBehaviour)DamageablesToDo[i] != (Object)null)
				{
					val.hitNormal = DamageableHitNormals[i];
					val.point = DamageableHitPoints[i];
					val.strikeDir = -val.hitNormal;
					DamageablesToDo[i].Damage(val);
				}
			}
			DamageablesToDo.Clear();
			DamageablesToDoHS.Clear();
			DamageableHitPoints.Clear();
			DamageableHitNormals.Clear();
			TimeSinceDamageDealing = 0.1f;
		}
		if (!m_isRunning)
		{
			SawAudio.volume = m_motorSpeed * 0.7f;
			StartingAudio.volume = m_motorSpeed;
			if (m_motorSpeed <= 0f && StartingAudio.isPlaying)
			{
				StartingAudio.Stop();
			}
			if (UsesBladeSolidBits)
			{
				m_matBladeSolid.SetVector("_MainTexVelocity", Vector4.op_Implicit(new Vector2(0f, 0f)));
				m_matBladeBits.SetVector("_MainTexVelocity", Vector4.op_Implicit(new Vector2(0f, 0f)));
			}
			if (CycleBladeObjects)
			{
				GameObject[] bladeObjects = BladeObjects;
				foreach (GameObject val2 in bladeObjects)
				{
					val2.SetActive(false);
				}
				BladeObjects[0].SetActive(true);
			}
			EmissionModule emission = EngineSmoke.emission;
			MinMaxCurve rate = ((EmissionModule)(ref emission)).rate;
			((MinMaxCurve)(ref rate)).mode = (ParticleSystemCurveMode)0;
			((MinMaxCurve)(ref rate)).constantMax = 0f;
			((MinMaxCurve)(ref rate)).constantMin = 0f;
			((EmissionModule)(ref emission)).rate = rate;
		}
		else
		{
			if (bladeObjectCycleTime < BladeObjectSwitchInterval)
			{
				bladeObjectCycleTime += Time.deltaTime;
			}
			else
			{
				CycleBladeObjectArray();
			}
			if (!SawAudio.isPlaying)
			{
				SawAudio.Play();
			}
			triggerAmount += Random.Range(-0.05f, 0.05f);
			if (((FVRInteractiveObject)this).IsHeld)
			{
				m_sawingIntesity = Mathf.Lerp(m_sawingIntesity, triggerAmount, Time.deltaTime * 5f);
			}
			else
			{
				m_sawingIntesity = Mathf.Lerp(m_sawingIntesity, 0f, Time.deltaTime * 2f);
			}
			if (m_sawingIntesity > 0.1f)
			{
				SawAudio.volume = (0.8f + m_sawingIntesity * 0.5f) * 0.3f;
				SawAudio.pitch = 0.6f + m_sawingIntesity * 0.7f;
				if ((double)timeSinceCollision < 0.2)
				{
					if ((Object)(object)SawAudio.clip != (Object)(object)AudClip_Hitting)
					{
						SawAudio.clip = AudClip_Hitting;
					}
				}
				else if ((Object)(object)SawAudio.clip != (Object)(object)AudClip_Buzzing)
				{
					SawAudio.clip = AudClip_Buzzing;
				}
				if (UsesBladeSolidBits)
				{
					m_matBladeSolid.SetVector("_MainTexVelocity", Vector4.op_Implicit(new Vector2(m_sawingIntesity, 0f)));
					m_matBladeBits.SetVector("_MainTexVelocity", Vector4.op_Implicit(new Vector2(m_sawingIntesity, 0f)));
				}
				if (CycleBladeObjects)
				{
					bladeObjectCycleTime /= 3f;
				}
			}
			else
			{
				SawAudio.volume = 0.25f;
				SawAudio.pitch = 1f;
				if ((Object)(object)SawAudio.clip != (Object)(object)AudClip_Idle)
				{
					SawAudio.clip = AudClip_Idle;
				}
				if (UsesBladeSolidBits)
				{
					m_matBladeSolid.SetVector("_MainTexVelocity", Vector4.op_Implicit(new Vector2(0.01f, 0f)));
					m_matBladeBits.SetVector("_MainTexVelocity", Vector4.op_Implicit(new Vector2(0.01f, 0f)));
				}
				if (CycleBladeObjects)
				{
					bladeObjectCycleTime *= 3f;
				}
			}
			EmissionModule emission2 = EngineSmoke.emission;
			MinMaxCurve rate2 = ((EmissionModule)(ref emission2)).rate;
			((MinMaxCurve)(ref rate2)).mode = (ParticleSystemCurveMode)0;
			((MinMaxCurve)(ref rate2)).constantMax = m_motorSpeed * 2f + m_sawingIntesity * 20f;
			((MinMaxCurve)(ref rate2)).constantMin = m_motorSpeed * 2f + m_sawingIntesity * 20f;
			((EmissionModule)(ref emission2)).rate = rate2;
		}
		if (m_motorSpeed >= 1f)
		{
			m_isRunning = true;
		}
		else
		{
			m_motorSpeed -= Time.deltaTime * 3f;
			m_motorSpeed = Mathf.Clamp(m_motorSpeed, 0f, 1f);
		}
		if (UsesEngineRot)
		{
			float x = EngineRot.localEulerAngles.x;
			x = ((m_sawingIntesity > 0f) ? (x + Time.deltaTime * (360f + m_sawingIntesity * 1200f)) : (x + Time.deltaTime * (360f * m_motorSpeed)));
			x = Mathf.Repeat(x, 360f);
			EngineRot.localEulerAngles = new Vector3(x, 0f, 0f);
		}
		if (m_isRunning)
		{
			m_timeTilPerceptibleEventTick -= Time.deltaTime;
			if (m_timeTilPerceptibleEventTick <= 0f)
			{
				m_timeTilPerceptibleEventTick = Random.Range(0.2f, 0.3f);
			}
		}
	}

	public override void FVRFixedUpdate()
	{
		//IL_002f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0034: Unknown result type (might be due to invalid IL or missing references)
		//IL_003a: Unknown result type (might be due to invalid IL or missing references)
		//IL_003f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0050: Unknown result type (might be due to invalid IL or missing references)
		//IL_0055: Unknown result type (might be due to invalid IL or missing references)
		//IL_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)
		((FVRPhysicalObject)this).FVRFixedUpdate();
		if (m_isRunning)
		{
			float num = 0.1f;
			num += m_sawingIntesity * 0.3f;
			Rigidbody rootRigidbody = ((FVRPhysicalObject)this).RootRigidbody;
			rootRigidbody.velocity += Random.onUnitSphere * num;
			Rigidbody rootRigidbody2 = ((FVRPhysicalObject)this).RootRigidbody;
			rootRigidbody2.angularVelocity += Random.onUnitSphere * num;
		}
	}

	public void SetCableLength(float f)
	{
		Debug.Log((object)"SetCableLength called");
		if (!m_isRunning && f > m_currentCableLength)
		{
			if (!StartingAudio.isPlaying)
			{
				StartingAudio.Play();
			}
			m_motorSpeed += (f - m_currentCableLength) * 1.5f;
		}
		m_currentCableLength = f;
	}

	public void CycleBladeObjectArray()
	{
		bladeObjectCycleTime = 0f;
		if ((Object)(object)BladeObjects[bladeIndex] != (Object)null)
		{
			BladeObjects[bladeIndex].SetActive(false);
		}
		bladeIndex++;
		if (bladeIndex >= BladeObjects.Length)
		{
			bladeIndex = 0;
		}
		if ((Object)(object)BladeObjects[bladeIndex] != (Object)null)
		{
			BladeObjects[bladeIndex].SetActive(true);
		}
	}
}
[RequireComponent(typeof(ParticleSystem))]
public class CFX_AutoDestructShuriken : MonoBehaviour
{
	public bool OnlyDeactivate;

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

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

	public float delay = 0f;

	public float finalIntensity = 0f;

	private float baseIntensity;

	public bool autodestruct;

	private float p_lifetime = 0f;

	private float p_delay;

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

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

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

	public float lifetime = 10f;

	public float fadeoutpercent = 80f;

	public Vector2 frames;

	public bool randomRotation = false;

	public bool deactivate = false;

	private float life;

	private float fadeout;

	private Color color;

	private float orgAlpha;

	private void Awake()
	{
		//IL_0012: Unknown result type (might be due to invalid IL or missing references)
		//IL_0017: Unknown result type (might be due to invalid IL or missing references)
		color = ((Component)this).GetComponent<Renderer>().material.GetColor("_TintColor");
		orgAlpha = color.a;
	}

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

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

	private float timer;

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

	private IEnumerator Flicker()
	{
		while (true)
		{
			((Behaviour)((Component)this).GetComponent<Light>()).enabled = !((Behaviour)((Component)this).GetComponent<Light>()).enabled;
			do
			{
				timer -= Time.deltaTime;
				yield return null;
			}
			while (timer > 0f);
			timer = time;
		}
	}
}
[BepInPlugin("Okkim.Terminator_AMT_Hardballer", "Terminator_AMT_Hardballer", "1.0.0")]
[BepInProcess("h3vr.exe")]
[BepInDependency("h3vr.otherloader", "1.3.0")]
public class Terminator_AMT_HardballerPlugin : BaseUnityPlugin
{
	private static readonly string BasePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);

	private void Awake()
	{
		LoadAssets();
	}

	private void LoadAssets()
	{
		OtherLoader.RegisterDirectLoad(BasePath, "Okkim.Terminator_AMT_Hardballer", "", "", "", "amt_hardballer");
	}
}
public class FollowTargetDebug : MonoBehaviour
{
	public bool check;

	private void OnLevelWasLoaded()
	{
		Debug.Log((object)("OnLevelWasLoaded, player head exists: " + GM.CurrentPlayerBody != null));
	}

	private void Awake()
	{
		Debug.Log((object)"OnAwake, player head exists: ");
	}

	private void Start()
	{
		Debug.Log((object)"Start, player head exists: ");
	}

	private void Update()
	{
		if (!check)
		{
			Debug.Log((object)"Update, player head exists: ");
		}
		check = true;
	}
}
public class ExtrudeRandomEdges : MonoBehaviour
{
	private pb_Object pb;

	private pb_Face lastExtrudedFace = null;

	public float distance = 1f;

	private void Start()
	{
		pb = pb_ShapeGenerator.PlaneGenerator(1f, 1f, 0, 0, (Axis)2, false);
		pb.SetFaceMaterial(pb.faces, pb_Constant.DefaultMaterial);
		lastExtrudedFace = pb.faces[0];
	}

	private void OnGUI()
	{
		if (GUILayout.Button("Extrude Random Edge", (GUILayoutOption[])(object)new GUILayoutOption[0]))
		{
			ExtrudeEdge();
		}
	}

	private void ExtrudeEdge()
	{
		//IL_0096: Unknown result type (might be due to invalid IL or missing references)
		//IL_009b: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b4: 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_00d5: 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_00fc: Unknown result type (might be due to invalid IL or missing references)
		//IL_0101: Unknown result type (might be due to invalid IL or missing references)
		//IL_0106: Unknown result type (might be due to invalid IL or missing references)
		//IL_0122: Unknown result type (might be due to invalid IL or missing references)
		//IL_0124: Unknown result type (might be due to invalid IL or missing references)
		//IL_016c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0174: Unknown result type (might be due to invalid IL or missing references)
		pb_Face sourceFace = lastExtrudedFace;
		List<pb_WingedEdge> wingedEdges = pb_WingedEdge.GetWingedEdges(pb, false);
		IEnumerable<pb_WingedEdge> source = wingedEdges.Where((pb_WingedEdge x) => x.face == sourceFace);
		List<pb_Edge> list = (from x in source
			where x.opposite == null
			select x into y
			select y.edge.local).ToList();
		int index = Random.Range(0, list.Count);
		pb_Edge val = list[index];
		Vector3 val2 = (pb.vertices[val.x] + pb.vertices[val.y]) * 0.5f - pb_Math.Average<int>((IList<int>)sourceFace.distinctIndices, (Func<int, Vector3>)((int x) => pb.vertices[x]), (IList<int>)null);
		((Vector3)(ref val2)).Normalize();
		pb_Edge[] selectedEdges = default(pb_Edge[]);
		pbMeshOps.Extrude(pb, (pb_Edge[])(object)new pb_Edge[1] { val }, 0f, false, true, ref selectedEdges);
		lastExtrudedFace = pb.faces.Last();
		pb.SetSelectedEdges((IEnumerable<pb_Edge>)selectedEdges);
		pb_Object_Utility.TranslateVertices(pb, pb.SelectedTriangles, val2 * distance);
		pb.ToMesh();
		pb.Refresh((RefreshMask)255);
	}
}
public class HighlightNearestFace : MonoBehaviour
{
	public float travel = 50f;

	public float speed = 0.2f;

	private pb_Object target;

	private pb_Face nearest = null;

	private void Start()
	{
		//IL_0061: 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_00c0: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c5: Unknown result type (might be due to invalid IL or missing references)
		target = pb_ShapeGenerator.PlaneGenerator(travel, travel, 25, 25, (Axis)2, false);
		target.SetFaceMaterial(target.faces, pb_Constant.DefaultMaterial);
		((Component)target).transform.position = new Vector3(travel * 0.5f, 0f, travel * 0.5f);
		target.ToMesh();
		target.Refresh((RefreshMask)255);
		Camera main = Camera.main;
		((Component)main).transform.position = new Vector3(25f, 40f, 0f);
		((Component)main).transform.localRotation = Quaternion.Euler(new Vector3(65f, 0f, 0f));
	}

	private void Update()
	{
		//IL_0048: 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_00a2: 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_00f3: 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)
		float num = Time.time * speed;
		Vector3 position = default(Vector3);
		((Vector3)(ref position))..ctor(Mathf.PerlinNoise(num, num) * travel, 2f, Mathf.PerlinNoise(num + 1f, num + 1f) * travel);
		((Component)this).transform.position = position;
		if ((Object)(object)target == (Object)null)
		{
			Debug.LogWarning((object)"Missing the ProBuilder Mesh target!");
			return;
		}
		Vector3 val = ((Component)target).transform.InverseTransformPoint(((Component)this).transform.position);
		if (nearest != null)
		{
			target.SetFaceColor(nearest, Color.white);
		}
		int num2 = target.faces.Length;
		float num3 = float.PositiveInfinity;
		nearest = target.faces[0];
		for (int i = 0; i < num2; i++)
		{
			float num4 = Vector3.Distance(val, FaceCenter(target, target.faces[i]));
			if (num4 < num3)
			{
				num3 = num4;
				nearest = target.faces[i];
			}
		}
		target.SetFaceColor(nearest, Color.blue);
		target.RefreshColors();
	}

	private Vector3 FaceCenter(pb_Object pb, pb_Face face)
	{
		//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_00be: 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_00c6: Unknown result type (might be due to invalid IL or missing references)
		Vector3[] vertices = pb.vertices;
		Vector3 zero = Vector3.zero;
		int[] distinctIndices = face.distinctIndices;
		foreach (int num in distinctIndices)
		{
			zero.x += vertices[num].x;
			zero.y += vertices[num].y;
			zero.z += vertices[num].z;
		}
		float num2 = face.distinctIndices.Length;
		zero.x /= num2;
		zero.y /= num2;
		zero.z /= num2;
		return zero;
	}
}