using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
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 BepInEx.Logging;
using FistVR;
using H3VRUtils;
using HarmonyLib;
using OpenScripts2;
using OtherLoader;
using Sodalite.Api;
using Steamworks;
using UnityEngine;
using UnityEngine.Serialization;
using UnityEngine.UI;
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("0.0.0.0")]
[module: UnverifiableCode]
[ExecuteInEditMode]
public class HolographicSightCustom : MonoBehaviour
{
public Transform VirtualQuad;
public float Scale = 1f;
public bool SizeCompensation = true;
private MaterialPropertyBlock m_block;
private void OnEnable()
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_000c: Expected O, but got Unknown
m_block = new MaterialPropertyBlock();
((Component)this).GetComponent<Renderer>().SetPropertyBlock(m_block);
}
private void OnWillRenderObject()
{
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
//IL_0017: Unknown result type (might be due to invalid IL or missing references)
//IL_001c: Unknown result type (might be due to invalid IL or missing references)
//IL_0028: Unknown result type (might be due to invalid IL or missing references)
//IL_0029: Unknown result type (might be due to invalid IL or missing references)
Vector3 val = ((Component)this).transform.InverseTransformPoint(((Component)VirtualQuad).transform.position);
m_block.SetVector("_Offset", Vector4.op_Implicit(val));
m_block.SetFloat("_Scale", Scale);
m_block.SetFloat("_SizeCompensation", (!SizeCompensation) ? 0f : 1f);
((Component)this).GetComponent<Renderer>().SetPropertyBlock(m_block);
}
}
namespace Niko666.Modul_AR15_ESTOC
{
[BepInPlugin("Niko666.Modul_AR15_ESTOC", "Modul_AR15_ESTOC", "1.0.0")]
[BepInProcess("h3vr.exe")]
[Description("Built with MeatKit")]
[BepInDependency("h3vr.otherloader", "1.3.0")]
[BepInDependency("h3vr.cityrobo.ModularWorkshopManager", "1.0.0")]
[BepInDependency("nrgill28.Sodalite", "1.4.1")]
public class Modul_AR15_ESTOCPlugin : BaseUnityPlugin
{
private static readonly string BasePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
internal static ManualLogSource Logger;
private void Awake()
{
Logger = ((BaseUnityPlugin)this).Logger;
LoadAssets();
}
private void LoadAssets()
{
Harmony.CreateAndPatchAll(Assembly.GetExecutingAssembly(), "Niko666.Modul_AR15_ESTOC");
OtherLoader.RegisterDirectLoad(BasePath, "Niko666.Modul_AR15_ESTOC", "", "", "ar15estoc", "");
GameAPI.PreloadAllAssets(Path.Combine(BasePath, "mw_modul_ar15_estoc"));
}
}
}
public class DynamicBoneDemo1 : MonoBehaviour
{
public GameObject m_Player;
private float m_weight = 1f;
private void Update()
{
//IL_002c: 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_0056: Unknown result type (might be due to invalid IL or missing references)
//IL_0060: Unknown result type (might be due to invalid IL or missing references)
//IL_006a: Unknown result type (might be due to invalid IL or missing references)
m_Player.transform.Rotate(new Vector3(0f, Input.GetAxis("Horizontal") * Time.deltaTime * 200f, 0f));
m_Player.transform.Translate(((Component)this).transform.forward * Input.GetAxis("Vertical") * Time.deltaTime * 4f);
}
private void OnGUI()
{
//IL_0015: 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_007f: Unknown result type (might be due to invalid IL or missing references)
//IL_00a5: Unknown result type (might be due to invalid IL or missing references)
//IL_00e3: 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_0137: Unknown result type (might be due to invalid IL or missing references)
GUI.Label(new Rect(50f, 50f, 200f, 24f), "Press arrow key to move");
Animation componentInChildren = m_Player.GetComponentInChildren<Animation>();
((Behaviour)componentInChildren).enabled = GUI.Toggle(new Rect(50f, 70f, 200f, 24f), ((Behaviour)componentInChildren).enabled, "Play Animation");
DynamicBone[] components = m_Player.GetComponents<DynamicBone>();
GUI.Label(new Rect(50f, 100f, 200f, 24f), "Choose dynamic bone:");
DynamicBone obj = components[0];
bool enabled = GUI.Toggle(new Rect(50f, 120f, 100f, 24f), ((Behaviour)components[0]).enabled, "Breasts");
((Behaviour)components[1]).enabled = enabled;
((Behaviour)obj).enabled = enabled;
((Behaviour)components[2]).enabled = GUI.Toggle(new Rect(50f, 140f, 100f, 24f), ((Behaviour)components[2]).enabled, "Tail");
GUI.Label(new Rect(50f, 160f, 200f, 24f), "Weight");
m_weight = GUI.HorizontalSlider(new Rect(100f, 160f, 100f, 24f), m_weight, 0f, 1f);
DynamicBone[] array = components;
foreach (DynamicBone dynamicBone in array)
{
dynamicBone.SetWeight(m_weight);
}
}
}
[AddComponentMenu("Dynamic Bone/Dynamic Bone")]
public class DynamicBone : MonoBehaviour
{
public enum UpdateMode
{
Normal,
AnimatePhysics,
UnscaledTime
}
public enum FreezeAxis
{
None,
X,
Y,
Z
}
private class Particle
{
public Transform m_Transform = null;
public int m_ParentIndex = -1;
public float m_Damping = 0f;
public float m_Elasticity = 0f;
public float m_Stiffness = 0f;
public float m_Inert = 0f;
public float m_Friction = 0f;
public float m_Radius = 0f;
public float m_BoneLength = 0f;
public bool m_isCollide = false;
public Vector3 m_Position = Vector3.zero;
public Vector3 m_PrevPosition = Vector3.zero;
public Vector3 m_EndOffset = Vector3.zero;
public Vector3 m_InitLocalPosition = Vector3.zero;
public Quaternion m_InitLocalRotation = Quaternion.identity;
}
[Tooltip("The root of the transform hierarchy to apply physics.")]
public Transform m_Root = null;
[Tooltip("Internal physics simulation rate.")]
public float m_UpdateRate = 60f;
public UpdateMode m_UpdateMode = UpdateMode.Normal;
[Tooltip("How much the bones slowed down.")]
[Range(0f, 1f)]
public float m_Damping = 0.1f;
public AnimationCurve m_DampingDistrib = null;
[Tooltip("How much the force applied to return each bone to original orientation.")]
[Range(0f, 1f)]
public float m_Elasticity = 0.1f;
public AnimationCurve m_ElasticityDistrib = null;
[Tooltip("How much bone's original orientation are preserved.")]
[Range(0f, 1f)]
public float m_Stiffness = 0.1f;
public AnimationCurve m_StiffnessDistrib = null;
[Tooltip("How much character's position change is ignored in physics simulation.")]
[Range(0f, 1f)]
public float m_Inert = 0f;
public AnimationCurve m_InertDistrib = null;
[Tooltip("How much the bones slowed down when collide.")]
public float m_Friction = 0f;
public AnimationCurve m_FrictionDistrib = null;
[Tooltip("Each bone can be a sphere to collide with colliders. Radius describe sphere's size.")]
public float m_Radius = 0f;
public AnimationCurve m_RadiusDistrib = null;
[Tooltip("If End Length is not zero, an extra bone is generated at the end of transform hierarchy.")]
public float m_EndLength = 0f;
[Tooltip("If End Offset is not zero, an extra bone is generated at the end of transform hierarchy.")]
public Vector3 m_EndOffset = Vector3.zero;
[Tooltip("The force apply to bones. Partial force apply to character's initial pose is cancelled out.")]
public Vector3 m_Gravity = Vector3.zero;
[Tooltip("The force apply to bones.")]
public Vector3 m_Force = Vector3.zero;
[Tooltip("Collider objects interact with the bones.")]
public List<DynamicBoneColliderBase> m_Colliders = null;
[Tooltip("Bones exclude from physics simulation.")]
public List<Transform> m_Exclusions = null;
[Tooltip("Constrain bones to move on specified plane.")]
public FreezeAxis m_FreezeAxis = FreezeAxis.None;
[Tooltip("Disable physics simulation automatically if character is far from camera or player.")]
public bool m_DistantDisable = false;
public Transform m_ReferenceObject = null;
public float m_DistanceToObject = 20f;
private Vector3 m_LocalGravity = Vector3.zero;
private Vector3 m_ObjectMove = Vector3.zero;
private Vector3 m_ObjectPrevPosition = Vector3.zero;
private float m_BoneTotalLength = 0f;
private float m_ObjectScale = 1f;
private float m_Time = 0f;
private float m_Weight = 1f;
private bool m_DistantDisabled = false;
private List<Particle> m_Particles = new List<Particle>();
private void Start()
{
SetupParticles();
}
private void FixedUpdate()
{
if (m_UpdateMode == UpdateMode.AnimatePhysics)
{
PreUpdate();
}
}
private void Update()
{
if (m_UpdateMode != UpdateMode.AnimatePhysics)
{
PreUpdate();
}
}
private void LateUpdate()
{
if (m_DistantDisable)
{
CheckDistance();
}
if (m_Weight > 0f && (!m_DistantDisable || !m_DistantDisabled))
{
float t = ((m_UpdateMode != UpdateMode.UnscaledTime) ? Time.deltaTime : Time.unscaledDeltaTime);
UpdateDynamicBones(t);
}
}
private void PreUpdate()
{
if (m_Weight > 0f && (!m_DistantDisable || !m_DistantDisabled))
{
InitTransforms();
}
}
private void CheckDistance()
{
//IL_003d: Unknown result type (might be due to invalid IL or missing references)
//IL_0048: Unknown result type (might be due to invalid IL or missing references)
//IL_004d: Unknown result type (might be due to invalid IL or missing references)
//IL_0052: Unknown result type (might be due to invalid IL or missing references)
Transform val = m_ReferenceObject;
if ((Object)(object)val == (Object)null && (Object)(object)Camera.main != (Object)null)
{
val = ((Component)Camera.main).transform;
}
if (!((Object)(object)val != (Object)null))
{
return;
}
Vector3 val2 = val.position - ((Component)this).transform.position;
float sqrMagnitude = ((Vector3)(ref val2)).sqrMagnitude;
bool flag = sqrMagnitude > m_DistanceToObject * m_DistanceToObject;
if (flag != m_DistantDisabled)
{
if (!flag)
{
ResetParticlesPosition();
}
m_DistantDisabled = flag;
}
}
private void OnEnable()
{
ResetParticlesPosition();
}
private void OnDisable()
{
InitTransforms();
}
private void OnValidate()
{
m_UpdateRate = Mathf.Max(m_UpdateRate, 0f);
m_Damping = Mathf.Clamp01(m_Damping);
m_Elasticity = Mathf.Clamp01(m_Elasticity);
m_Stiffness = Mathf.Clamp01(m_Stiffness);
m_Inert = Mathf.Clamp01(m_Inert);
m_Friction = Mathf.Clamp01(m_Friction);
m_Radius = Mathf.Max(m_Radius, 0f);
if (Application.isEditor && Application.isPlaying)
{
InitTransforms();
SetupParticles();
}
}
private void OnDrawGizmosSelected()
{
//IL_0054: 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_0099: 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)
if (!((Behaviour)this).enabled || (Object)(object)m_Root == (Object)null)
{
return;
}
if (Application.isEditor && !Application.isPlaying && ((Component)this).transform.hasChanged)
{
InitTransforms();
SetupParticles();
}
Gizmos.color = Color.white;
for (int i = 0; i < m_Particles.Count; i++)
{
Particle particle = m_Particles[i];
if (particle.m_ParentIndex >= 0)
{
Particle particle2 = m_Particles[particle.m_ParentIndex];
Gizmos.DrawLine(particle.m_Position, particle2.m_Position);
}
if (particle.m_Radius > 0f)
{
Gizmos.DrawWireSphere(particle.m_Position, particle.m_Radius * m_ObjectScale);
}
}
}
public void SetWeight(float w)
{
if (m_Weight != w)
{
if (w == 0f)
{
InitTransforms();
}
else if (m_Weight == 0f)
{
ResetParticlesPosition();
}
m_Weight = w;
}
}
public float GetWeight()
{
return m_Weight;
}
private void UpdateDynamicBones(float t)
{
//IL_001e: Unknown result type (might be due to invalid IL or missing references)
//IL_0023: Unknown result type (might be due to invalid IL or missing references)
//IL_003c: Unknown result type (might be due to invalid IL or missing references)
//IL_0042: Unknown result type (might be due to invalid IL or missing references)
//IL_0047: Unknown result type (might be due to invalid IL or missing references)
//IL_004c: Unknown result type (might be due to invalid IL or missing references)
//IL_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_00ed: Unknown result type (might be due to invalid IL or missing references)
//IL_00f2: Unknown result type (might be due to invalid IL or missing references)
if ((Object)(object)m_Root == (Object)null)
{
return;
}
m_ObjectScale = Mathf.Abs(((Component)this).transform.lossyScale.x);
m_ObjectMove = ((Component)this).transform.position - m_ObjectPrevPosition;
m_ObjectPrevPosition = ((Component)this).transform.position;
int num = 1;
if (m_UpdateRate > 0f)
{
float num2 = 1f / m_UpdateRate;
m_Time += t;
num = 0;
while (m_Time >= num2)
{
m_Time -= num2;
if (++num >= 3)
{
m_Time = 0f;
break;
}
}
}
if (num > 0)
{
for (int i = 0; i < num; i++)
{
UpdateParticles1();
UpdateParticles2();
m_ObjectMove = Vector3.zero;
}
}
else
{
SkipUpdateParticles();
}
ApplyParticlesToTransforms();
}
private void SetupParticles()
{
//IL_002a: Unknown result type (might be due to invalid IL or missing references)
//IL_002f: Unknown result type (might be due to invalid IL or missing references)
//IL_0034: Unknown result type (might be due to invalid IL or missing references)
//IL_0040: 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_005e: Unknown result type (might be due to invalid IL or missing references)
//IL_0063: Unknown result type (might be due to invalid IL or missing references)
//IL_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)
m_Particles.Clear();
if (!((Object)(object)m_Root == (Object)null))
{
m_LocalGravity = m_Root.InverseTransformDirection(m_Gravity);
m_ObjectScale = Mathf.Abs(((Component)this).transform.lossyScale.x);
m_ObjectPrevPosition = ((Component)this).transform.position;
m_ObjectMove = Vector3.zero;
m_BoneTotalLength = 0f;
AppendParticles(m_Root, -1, 0f);
UpdateParameters();
}
}
private void AppendParticles(Transform b, int parentIndex, float boneLength)
{
//IL_0025: Unknown result type (might be due to invalid IL or missing references)
//IL_002a: Unknown result type (might be due to invalid IL or missing references)
//IL_002b: Unknown result type (might be due to invalid IL or missing references)
//IL_002c: Unknown result type (might be due to invalid IL or missing references)
//IL_0031: Unknown result type (might be due to invalid IL or missing references)
//IL_0032: 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_00ee: Unknown result type (might be due to invalid IL or missing references)
//IL_00f3: Unknown result type (might be due to invalid IL or missing references)
//IL_00f9: Unknown result type (might be due to invalid IL or missing references)
//IL_00fe: Unknown result type (might be due to invalid IL or missing references)
//IL_0103: Unknown result type (might be due to invalid IL or missing references)
//IL_0108: Unknown result type (might be due to invalid IL or missing references)
//IL_0112: Unknown result type (might be due to invalid IL or missing references)
//IL_0117: Unknown result type (might be due to invalid IL or missing references)
//IL_011c: Unknown result type (might be due to invalid IL or missing references)
//IL_011d: Unknown result type (might be due to invalid IL or missing references)
//IL_011e: Unknown result type (might be due to invalid IL or missing references)
//IL_0123: Unknown result type (might be due to invalid IL or missing references)
//IL_0124: 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_00d9: 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_0099: Unknown result type (might be due to invalid IL or missing references)
//IL_009f: Unknown result type (might be due to invalid IL or missing references)
//IL_00a4: Unknown result type (might be due to invalid IL or missing references)
//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
//IL_00b4: Unknown result type (might be due to invalid IL or missing references)
//IL_00b9: 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_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_0282: Unknown result type (might be due to invalid IL or missing references)
//IL_0287: Unknown result type (might be due to invalid IL or missing references)
//IL_0234: Unknown result type (might be due to invalid IL or missing references)
//IL_0239: Unknown result type (might be due to invalid IL or missing references)
Particle particle = new Particle();
particle.m_Transform = b;
particle.m_ParentIndex = parentIndex;
Vector3 val;
if ((Object)(object)b != (Object)null)
{
val = (particle.m_Position = (particle.m_PrevPosition = b.position));
particle.m_InitLocalPosition = b.localPosition;
particle.m_InitLocalRotation = b.localRotation;
}
else
{
Transform transform = m_Particles[parentIndex].m_Transform;
if (m_EndLength > 0f)
{
Transform parent = transform.parent;
if ((Object)(object)parent != (Object)null)
{
particle.m_EndOffset = transform.InverseTransformPoint(transform.position * 2f - parent.position) * m_EndLength;
}
else
{
particle.m_EndOffset = new Vector3(m_EndLength, 0f, 0f);
}
}
else
{
particle.m_EndOffset = transform.InverseTransformPoint(((Component)this).transform.TransformDirection(m_EndOffset) + transform.position);
}
val = (particle.m_Position = (particle.m_PrevPosition = transform.TransformPoint(particle.m_EndOffset)));
}
if (parentIndex >= 0)
{
float num = boneLength;
val = m_Particles[parentIndex].m_Transform.position - particle.m_Position;
boneLength = num + ((Vector3)(ref val)).magnitude;
particle.m_BoneLength = boneLength;
m_BoneTotalLength = Mathf.Max(m_BoneTotalLength, boneLength);
}
int count = m_Particles.Count;
m_Particles.Add(particle);
if (!((Object)(object)b != (Object)null))
{
return;
}
for (int i = 0; i < b.childCount; i++)
{
bool flag = false;
if (m_Exclusions != null)
{
for (int j = 0; j < m_Exclusions.Count; j++)
{
Transform val2 = m_Exclusions[j];
if ((Object)(object)val2 == (Object)(object)b.GetChild(i))
{
flag = true;
break;
}
}
}
if (!flag)
{
AppendParticles(b.GetChild(i), count, boneLength);
}
else if (m_EndLength > 0f || m_EndOffset != Vector3.zero)
{
AppendParticles(null, count, boneLength);
}
}
if (b.childCount == 0 && (m_EndLength > 0f || m_EndOffset != Vector3.zero))
{
AppendParticles(null, count, boneLength);
}
}
public void UpdateParameters()
{
//IL_001f: Unknown result type (might be due to invalid IL or missing references)
//IL_0024: Unknown result type (might be due to invalid IL or missing references)
//IL_0029: Unknown result type (might be due to invalid IL or missing references)
if ((Object)(object)m_Root == (Object)null)
{
return;
}
m_LocalGravity = m_Root.InverseTransformDirection(m_Gravity);
for (int i = 0; i < m_Particles.Count; i++)
{
Particle particle = m_Particles[i];
particle.m_Damping = m_Damping;
particle.m_Elasticity = m_Elasticity;
particle.m_Stiffness = m_Stiffness;
particle.m_Inert = m_Inert;
particle.m_Friction = m_Friction;
particle.m_Radius = m_Radius;
if (m_BoneTotalLength > 0f)
{
float num = particle.m_BoneLength / m_BoneTotalLength;
if (m_DampingDistrib != null && m_DampingDistrib.keys.Length > 0)
{
particle.m_Damping *= m_DampingDistrib.Evaluate(num);
}
if (m_ElasticityDistrib != null && m_ElasticityDistrib.keys.Length > 0)
{
particle.m_Elasticity *= m_ElasticityDistrib.Evaluate(num);
}
if (m_StiffnessDistrib != null && m_StiffnessDistrib.keys.Length > 0)
{
particle.m_Stiffness *= m_StiffnessDistrib.Evaluate(num);
}
if (m_InertDistrib != null && m_InertDistrib.keys.Length > 0)
{
particle.m_Inert *= m_InertDistrib.Evaluate(num);
}
if (m_FrictionDistrib != null && m_FrictionDistrib.keys.Length > 0)
{
particle.m_Friction *= m_FrictionDistrib.Evaluate(num);
}
if (m_RadiusDistrib != null && m_RadiusDistrib.keys.Length > 0)
{
particle.m_Radius *= m_RadiusDistrib.Evaluate(num);
}
}
particle.m_Damping = Mathf.Clamp01(particle.m_Damping);
particle.m_Elasticity = Mathf.Clamp01(particle.m_Elasticity);
particle.m_Stiffness = Mathf.Clamp01(particle.m_Stiffness);
particle.m_Inert = Mathf.Clamp01(particle.m_Inert);
particle.m_Friction = Mathf.Clamp01(particle.m_Friction);
particle.m_Radius = Mathf.Max(particle.m_Radius, 0f);
}
}
private void InitTransforms()
{
//IL_002f: 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)
for (int i = 0; i < m_Particles.Count; i++)
{
Particle particle = m_Particles[i];
if ((Object)(object)particle.m_Transform != (Object)null)
{
particle.m_Transform.localPosition = particle.m_InitLocalPosition;
particle.m_Transform.localRotation = particle.m_InitLocalRotation;
}
}
}
private void ResetParticlesPosition()
{
//IL_00a0: Unknown result type (might be due to invalid IL or missing references)
//IL_00a5: Unknown result type (might be due to invalid IL or missing references)
//IL_0064: Unknown result type (might be due to invalid IL or missing references)
//IL_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_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_0076: 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_0035: 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_0037: Unknown result type (might be due to invalid IL or missing references)
//IL_003c: Unknown result type (might be due to invalid IL or missing references)
//IL_003d: Unknown result type (might be due to invalid IL or missing references)
for (int i = 0; i < m_Particles.Count; i++)
{
Particle particle = m_Particles[i];
if ((Object)(object)particle.m_Transform != (Object)null)
{
particle.m_Position = (particle.m_PrevPosition = particle.m_Transform.position);
}
else
{
Transform transform = m_Particles[particle.m_ParentIndex].m_Transform;
particle.m_Position = (particle.m_PrevPosition = transform.TransformPoint(particle.m_EndOffset));
}
particle.m_isCollide = false;
}
m_ObjectPrevPosition = ((Component)this).transform.position;
}
private void UpdateParticles1()
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Unknown result type (might be due to invalid IL or missing references)
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
//IL_0013: Unknown result type (might be due to invalid IL or missing references)
//IL_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_0026: 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_0028: Unknown result type (might be due to invalid IL or missing references)
//IL_0038: Unknown result type (might be due to invalid IL or missing references)
//IL_003d: Unknown result type (might be due to invalid IL or missing references)
//IL_003e: 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_0040: 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_0046: 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_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_0139: 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_014c: Unknown result type (might be due to invalid IL or missing references)
//IL_0151: Unknown result type (might be due to invalid IL or missing references)
//IL_0086: Unknown result type (might be due to invalid IL or missing references)
//IL_008d: Unknown result type (might be due to invalid IL or missing references)
//IL_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_009a: Unknown result type (might be due to invalid IL or missing references)
//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
//IL_00ab: Unknown result type (might be due to invalid IL or missing references)
//IL_00b1: Unknown result type (might be due to invalid IL or missing references)
//IL_00b6: Unknown result type (might be due to invalid IL or missing references)
//IL_00b8: Unknown result type (might be due to invalid IL or missing references)
//IL_00bd: Unknown result type (might be due to invalid IL or missing references)
//IL_0103: Unknown result type (might be due to invalid IL or missing references)
//IL_0108: Unknown result type (might be due to invalid IL or missing references)
//IL_0112: Unknown result type (might be due to invalid IL or missing references)
//IL_0117: 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_011d: Unknown result type (might be due to invalid IL or missing references)
//IL_011f: Unknown result type (might be due to invalid IL or missing references)
//IL_0124: Unknown result type (might be due to invalid IL or missing references)
//IL_0129: Unknown result type (might be due to invalid IL or missing references)
Vector3 gravity = m_Gravity;
Vector3 normalized = ((Vector3)(ref m_Gravity)).normalized;
Vector3 val = m_Root.TransformDirection(m_LocalGravity);
Vector3 val2 = normalized * Mathf.Max(Vector3.Dot(val, normalized), 0f);
gravity -= val2;
gravity = (gravity + m_Force) * m_ObjectScale;
for (int i = 0; i < m_Particles.Count; i++)
{
Particle particle = m_Particles[i];
if (particle.m_ParentIndex >= 0)
{
Vector3 val3 = particle.m_Position - particle.m_PrevPosition;
Vector3 val4 = m_ObjectMove * particle.m_Inert;
particle.m_PrevPosition = particle.m_Position + val4;
float num = particle.m_Damping;
if (particle.m_isCollide)
{
num += particle.m_Friction;
if (num > 1f)
{
num = 1f;
}
particle.m_isCollide = false;
}
particle.m_Position += val3 * (1f - num) + gravity + val4;
}
else
{
particle.m_PrevPosition = particle.m_Position;
particle.m_Position = particle.m_Transform.position;
}
}
}
private void UpdateParticles2()
{
//IL_0003: Unknown result type (might be due to invalid IL or missing references)
//IL_0072: Unknown result type (might be due to invalid IL or missing references)
//IL_0077: Unknown result type (might be due to invalid IL or missing references)
//IL_007c: Unknown result type (might be due to invalid IL or missing references)
//IL_0081: Unknown result type (might be due to invalid IL or missing references)
//IL_0086: Unknown result type (might be due to invalid IL or missing references)
//IL_0047: 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_005c: 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_00d1: Unknown result type (might be due to invalid IL or missing references)
//IL_00d7: Unknown result type (might be due to invalid IL or missing references)
//IL_00dc: Unknown result type (might be due to invalid IL or missing references)
//IL_0113: Unknown result type (might be due to invalid IL or missing references)
//IL_0118: Unknown result type (might be due to invalid IL or missing references)
//IL_011d: Unknown result type (might be due to invalid IL or missing references)
//IL_00ff: Unknown result type (might be due to invalid IL or missing references)
//IL_0104: Unknown result type (might be due to invalid IL or missing references)
//IL_0109: Unknown result type (might be due to invalid IL or missing references)
//IL_011f: Unknown result type (might be due to invalid IL or missing references)
//IL_0122: Unknown result type (might be due to invalid IL or missing references)
//IL_0127: 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_0130: Unknown result type (might be due to invalid IL or missing references)
//IL_0135: Unknown result type (might be due to invalid IL or missing references)
//IL_013d: Unknown result type (might be due to invalid IL or missing references)
//IL_0142: Unknown result type (might be due to invalid IL or missing references)
//IL_0147: Unknown result type (might be due to invalid IL or missing references)
//IL_0159: Unknown result type (might be due to invalid IL or missing references)
//IL_015c: Unknown result type (might be due to invalid IL or missing references)
//IL_0161: Unknown result type (might be due to invalid IL or missing references)
//IL_0166: 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_02f0: Unknown result type (might be due to invalid IL or missing references)
//IL_02f5: Unknown result type (might be due to invalid IL or missing references)
//IL_018f: Unknown result type (might be due to invalid IL or missing references)
//IL_0194: 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_01a8: Unknown result type (might be due to invalid IL or missing references)
//IL_030e: 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_031d: Unknown result type (might be due to invalid IL or missing references)
//IL_0322: Unknown result type (might be due to invalid IL or missing references)
//IL_0327: Unknown result type (might be due to invalid IL or missing references)
//IL_026a: Unknown result type (might be due to invalid IL or missing references)
//IL_0270: Unknown result type (might be due to invalid IL or missing references)
//IL_02bb: Unknown result type (might be due to invalid IL or missing references)
//IL_02c2: 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_02d4: Unknown result type (might be due to invalid IL or missing references)
//IL_02d9: Unknown result type (might be due to invalid IL or missing references)
//IL_02de: Unknown result type (might be due to invalid IL or missing references)
//IL_0287: Unknown result type (might be due to invalid IL or missing references)
//IL_028d: Unknown result type (might be due to invalid IL or missing references)
//IL_02a4: 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)
Plane val = default(Plane);
for (int i = 1; i < m_Particles.Count; i++)
{
Particle particle = m_Particles[i];
Particle particle2 = m_Particles[particle.m_ParentIndex];
float magnitude;
if ((Object)(object)particle.m_Transform != (Object)null)
{
Vector3 val2 = particle2.m_Transform.position - particle.m_Transform.position;
magnitude = ((Vector3)(ref val2)).magnitude;
}
else
{
Matrix4x4 localToWorldMatrix = particle2.m_Transform.localToWorldMatrix;
Vector3 val3 = ((Matrix4x4)(ref localToWorldMatrix)).MultiplyVector(particle.m_EndOffset);
magnitude = ((Vector3)(ref val3)).magnitude;
}
float num = Mathf.Lerp(1f, particle.m_Stiffness, m_Weight);
if (num > 0f || particle.m_Elasticity > 0f)
{
Matrix4x4 localToWorldMatrix2 = particle2.m_Transform.localToWorldMatrix;
((Matrix4x4)(ref localToWorldMatrix2)).SetColumn(3, Vector4.op_Implicit(particle2.m_Position));
Vector3 val4 = ((!((Object)(object)particle.m_Transform != (Object)null)) ? ((Matrix4x4)(ref localToWorldMatrix2)).MultiplyPoint3x4(particle.m_EndOffset) : ((Matrix4x4)(ref localToWorldMatrix2)).MultiplyPoint3x4(particle.m_Transform.localPosition));
Vector3 val5 = val4 - particle.m_Position;
particle.m_Position += val5 * particle.m_Elasticity;
if (num > 0f)
{
val5 = val4 - particle.m_Position;
float magnitude2 = ((Vector3)(ref val5)).magnitude;
float num2 = magnitude * (1f - num) * 2f;
if (magnitude2 > num2)
{
particle.m_Position += val5 * ((magnitude2 - num2) / magnitude2);
}
}
}
if (m_Colliders != null)
{
float particleRadius = particle.m_Radius * m_ObjectScale;
for (int j = 0; j < m_Colliders.Count; j++)
{
DynamicBoneColliderBase dynamicBoneColliderBase = m_Colliders[j];
if ((Object)(object)dynamicBoneColliderBase != (Object)null && ((Behaviour)dynamicBoneColliderBase).enabled)
{
particle.m_isCollide |= dynamicBoneColliderBase.Collide(ref particle.m_Position, particleRadius);
}
}
}
if (m_FreezeAxis != 0)
{
switch (m_FreezeAxis)
{
case FreezeAxis.X:
((Plane)(ref val)).SetNormalAndPosition(particle2.m_Transform.right, particle2.m_Position);
break;
case FreezeAxis.Y:
((Plane)(ref val)).SetNormalAndPosition(particle2.m_Transform.up, particle2.m_Position);
break;
case FreezeAxis.Z:
((Plane)(ref val)).SetNormalAndPosition(particle2.m_Transform.forward, particle2.m_Position);
break;
}
particle.m_Position -= ((Plane)(ref val)).normal * ((Plane)(ref val)).GetDistanceToPoint(particle.m_Position);
}
Vector3 val6 = particle2.m_Position - particle.m_Position;
float magnitude3 = ((Vector3)(ref val6)).magnitude;
if (magnitude3 > 0f)
{
particle.m_Position += val6 * ((magnitude3 - magnitude) / magnitude3);
}
}
}
private void SkipUpdateParticles()
{
//IL_01e4: Unknown result type (might be due to invalid IL or missing references)
//IL_01e9: 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_01fa: 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_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_0035: Unknown result type (might be due to invalid IL or missing references)
//IL_003c: Unknown result type (might be due to invalid IL or missing references)
//IL_0042: Unknown result type (might be due to invalid IL or missing references)
//IL_0047: Unknown result type (might be due to invalid IL or missing references)
//IL_004c: Unknown result type (might be due to invalid IL or missing references)
//IL_00a4: Unknown result type (might be due to invalid IL or missing references)
//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
//IL_00b3: Unknown result type (might be due to invalid IL or missing references)
//IL_00b8: Unknown result type (might be due to invalid IL or missing references)
//IL_007a: 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_008f: Unknown result type (might be due to invalid IL or missing references)
//IL_0195: 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_01a0: Unknown result type (might be due to invalid IL or missing references)
//IL_01a5: Unknown result type (might be due to invalid IL or missing references)
//IL_00ed: Unknown result type (might be due to invalid IL or missing references)
//IL_00f2: Unknown result type (might be due to invalid IL or missing references)
//IL_00f8: Unknown result type (might be due to invalid IL or missing references)
//IL_00fd: Unknown result type (might be due to invalid IL or missing references)
//IL_01be: 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_01cc: 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_0134: Unknown result type (might be due to invalid IL or missing references)
//IL_0139: 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_0120: Unknown result type (might be due to invalid IL or missing references)
//IL_0125: Unknown result type (might be due to invalid IL or missing references)
//IL_012a: Unknown result type (might be due to invalid IL or missing references)
//IL_0140: 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_0148: Unknown result type (might be due to invalid IL or missing references)
//IL_014d: Unknown result type (might be due to invalid IL or missing references)
//IL_0175: Unknown result type (might be due to invalid IL or missing references)
//IL_017a: Unknown result type (might be due to invalid IL or missing references)
//IL_0184: Unknown result type (might be due to invalid IL or missing references)
//IL_0189: Unknown result type (might be due to invalid IL or missing references)
//IL_018e: Unknown result type (might be due to invalid IL or missing references)
for (int i = 0; i < m_Particles.Count; i++)
{
Particle particle = m_Particles[i];
if (particle.m_ParentIndex >= 0)
{
particle.m_PrevPosition += m_ObjectMove;
particle.m_Position += m_ObjectMove;
Particle particle2 = m_Particles[particle.m_ParentIndex];
float magnitude;
if ((Object)(object)particle.m_Transform != (Object)null)
{
Vector3 val = particle2.m_Transform.position - particle.m_Transform.position;
magnitude = ((Vector3)(ref val)).magnitude;
}
else
{
Matrix4x4 localToWorldMatrix = particle2.m_Transform.localToWorldMatrix;
Vector3 val2 = ((Matrix4x4)(ref localToWorldMatrix)).MultiplyVector(particle.m_EndOffset);
magnitude = ((Vector3)(ref val2)).magnitude;
}
float num = Mathf.Lerp(1f, particle.m_Stiffness, m_Weight);
if (num > 0f)
{
Matrix4x4 localToWorldMatrix2 = particle2.m_Transform.localToWorldMatrix;
((Matrix4x4)(ref localToWorldMatrix2)).SetColumn(3, Vector4.op_Implicit(particle2.m_Position));
Vector3 val3 = ((!((Object)(object)particle.m_Transform != (Object)null)) ? ((Matrix4x4)(ref localToWorldMatrix2)).MultiplyPoint3x4(particle.m_EndOffset) : ((Matrix4x4)(ref localToWorldMatrix2)).MultiplyPoint3x4(particle.m_Transform.localPosition));
Vector3 val4 = val3 - particle.m_Position;
float magnitude2 = ((Vector3)(ref val4)).magnitude;
float num2 = magnitude * (1f - num) * 2f;
if (magnitude2 > num2)
{
particle.m_Position += val4 * ((magnitude2 - num2) / magnitude2);
}
}
Vector3 val5 = particle2.m_Position - particle.m_Position;
float magnitude3 = ((Vector3)(ref val5)).magnitude;
if (magnitude3 > 0f)
{
particle.m_Position += val5 * ((magnitude3 - magnitude) / magnitude3);
}
}
else
{
particle.m_PrevPosition = particle.m_Position;
particle.m_Position = particle.m_Transform.position;
}
}
}
private static Vector3 MirrorVector(Vector3 v, Vector3 axis)
{
//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)
//IL_0003: Unknown result type (might be due to invalid IL or missing references)
//IL_0004: 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_0015: Unknown result type (might be due to invalid IL or missing references)
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
//IL_0020: Unknown result type (might be due to invalid IL or missing references)
return v - axis * (Vector3.Dot(v, axis) * 2f);
}
private void ApplyParticlesToTransforms()
{
//IL_00c1: 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_0062: Unknown result type (might be due to invalid IL or missing references)
//IL_0051: Unknown result type (might be due to invalid IL or missing references)
//IL_0056: Unknown result type (might be due to invalid IL or missing references)
//IL_0064: 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_0074: 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_007d: Unknown result type (might be due to invalid IL or missing references)
//IL_0082: Unknown result type (might be due to invalid IL or missing references)
//IL_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_0091: Unknown result type (might be due to invalid IL or missing references)
//IL_0099: Unknown result type (might be due to invalid IL or missing references)
//IL_009e: Unknown result type (might be due to invalid IL or missing references)
for (int i = 1; i < m_Particles.Count; i++)
{
Particle particle = m_Particles[i];
Particle particle2 = m_Particles[particle.m_ParentIndex];
if (particle2.m_Transform.childCount <= 1)
{
Vector3 val = ((!((Object)(object)particle.m_Transform != (Object)null)) ? particle.m_EndOffset : particle.m_Transform.localPosition);
Vector3 val2 = particle.m_Position - particle2.m_Position;
Quaternion val3 = Quaternion.FromToRotation(particle2.m_Transform.TransformDirection(val), val2);
particle2.m_Transform.rotation = val3 * particle2.m_Transform.rotation;
}
if ((Object)(object)particle.m_Transform != (Object)null)
{
particle.m_Transform.position = particle.m_Position;
}
}
}
}
[AddComponentMenu("Dynamic Bone/Dynamic Bone Collider")]
public class DynamicBoneCollider : DynamicBoneColliderBase
{
[Tooltip("The radius of the sphere or capsule.")]
public float m_Radius = 0.5f;
[Tooltip("The height of the capsule.")]
public float m_Height = 0f;
private void OnValidate()
{
m_Radius = Mathf.Max(m_Radius, 0f);
m_Height = Mathf.Max(m_Height, 0f);
}
public override bool Collide(ref Vector3 particlePosition, float particleRadius)
{
//IL_000d: Unknown result type (might be due to invalid IL or missing references)
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
//IL_008c: Unknown result type (might be due to invalid IL or missing references)
//IL_0091: Unknown result type (might be due to invalid IL or missing references)
//IL_0094: Unknown result type (might be due to invalid IL or missing references)
//IL_0099: Unknown result type (might be due to invalid IL or missing references)
//IL_0074: Unknown result type (might be due to invalid IL or missing references)
//IL_0079: Unknown result type (might be due to invalid IL or missing references)
//IL_0055: Unknown result type (might be due to invalid IL or missing references)
//IL_005a: Unknown result type (might be due to invalid IL or missing references)
//IL_0163: Unknown result type (might be due to invalid IL or missing references)
//IL_0165: 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_0172: Unknown result type (might be due to invalid IL or missing references)
//IL_013b: Unknown result type (might be due to invalid IL or missing references)
//IL_013d: Unknown result type (might be due to invalid IL or missing references)
//IL_0148: Unknown result type (might be due to invalid IL or missing references)
//IL_014a: Unknown result type (might be due to invalid IL or missing references)
float num = m_Radius * Mathf.Abs(((Component)this).transform.lossyScale.x);
float num2 = m_Height * 0.5f - m_Radius;
if (num2 <= 0f)
{
if (m_Bound == Bound.Outside)
{
return OutsideSphere(ref particlePosition, particleRadius, ((Component)this).transform.TransformPoint(m_Center), num);
}
return InsideSphere(ref particlePosition, particleRadius, ((Component)this).transform.TransformPoint(m_Center), num);
}
Vector3 center = m_Center;
Vector3 center2 = m_Center;
switch (m_Direction)
{
case Direction.X:
center.x -= num2;
center2.x += num2;
break;
case Direction.Y:
center.y -= num2;
center2.y += num2;
break;
case Direction.Z:
center.z -= num2;
center2.z += num2;
break;
}
if (m_Bound == Bound.Outside)
{
return OutsideCapsule(ref particlePosition, particleRadius, ((Component)this).transform.TransformPoint(center), ((Component)this).transform.TransformPoint(center2), num);
}
return InsideCapsule(ref particlePosition, particleRadius, ((Component)this).transform.TransformPoint(center), ((Component)this).transform.TransformPoint(center2), num);
}
private static bool OutsideSphere(ref Vector3 particlePosition, float particleRadius, Vector3 sphereCenter, float sphereRadius)
{
//IL_000a: Unknown result type (might be due to invalid IL or missing references)
//IL_000f: 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_0015: 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_003b: Unknown result type (might be due to invalid IL or missing references)
//IL_0040: Unknown result type (might be due to invalid IL or missing references)
//IL_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)
float num = sphereRadius + particleRadius;
float num2 = num * num;
Vector3 val = particlePosition - sphereCenter;
float sqrMagnitude = ((Vector3)(ref val)).sqrMagnitude;
if (sqrMagnitude > 0f && sqrMagnitude < num2)
{
float num3 = Mathf.Sqrt(sqrMagnitude);
particlePosition = sphereCenter + val * (num / num3);
return true;
}
return false;
}
private static bool InsideSphere(ref Vector3 particlePosition, float particleRadius, Vector3 sphereCenter, float sphereRadius)
{
//IL_000a: Unknown result type (might be due to invalid IL or missing references)
//IL_000f: 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_0015: Unknown result type (might be due to invalid IL or missing references)
//IL_002f: Unknown result type (might be due to invalid IL or missing references)
//IL_0030: Unknown result type (might be due to invalid IL or missing references)
//IL_0035: Unknown result type (might be due to invalid IL or missing references)
//IL_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)
float num = sphereRadius - particleRadius;
float num2 = num * num;
Vector3 val = particlePosition - sphereCenter;
float sqrMagnitude = ((Vector3)(ref val)).sqrMagnitude;
if (sqrMagnitude > num2)
{
float num3 = Mathf.Sqrt(sqrMagnitude);
particlePosition = sphereCenter + val * (num / num3);
return true;
}
return false;
}
private static bool OutsideCapsule(ref Vector3 particlePosition, float particleRadius, Vector3 capsuleP0, Vector3 capsuleP1, float capsuleRadius)
{
//IL_000a: Unknown result type (might be due to invalid IL or missing references)
//IL_000b: Unknown result type (might be due to invalid IL or missing references)
//IL_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_0013: Unknown result type (might be due to invalid IL or missing references)
//IL_0018: Unknown result type (might be due to invalid IL or missing references)
//IL_0019: Unknown result type (might be due to invalid IL or missing references)
//IL_001e: Unknown result type (might be due to invalid IL or missing references)
//IL_001f: 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_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_009b: 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_0100: 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_0104: Unknown result type (might be due to invalid IL or missing references)
//IL_0109: Unknown result type (might be due to invalid IL or missing references)
//IL_010e: 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_005e: Unknown result type (might be due to invalid IL or missing references)
//IL_0063: Unknown result type (might be due to invalid IL or missing references)
//IL_0068: Unknown result type (might be due to invalid IL or missing references)
//IL_006d: Unknown result type (might be due to invalid IL or missing references)
//IL_00c9: Unknown result type (might be due to invalid IL or missing references)
//IL_00ca: Unknown result type (might be due to invalid IL or missing references)
//IL_00cf: Unknown result type (might be due to invalid IL or missing references)
//IL_00d4: Unknown result type (might be due to invalid IL or missing references)
//IL_00d9: Unknown result type (might be due to invalid IL or missing references)
//IL_0138: Unknown result type (might be due to invalid IL or missing references)
//IL_013d: Unknown result type (might be due to invalid IL or missing references)
//IL_0145: 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)
float num = capsuleRadius + particleRadius;
float num2 = num * num;
Vector3 val = capsuleP1 - capsuleP0;
Vector3 val2 = particlePosition - capsuleP0;
float num3 = Vector3.Dot(val2, val);
if (num3 <= 0f)
{
float sqrMagnitude = ((Vector3)(ref val2)).sqrMagnitude;
if (sqrMagnitude > 0f && sqrMagnitude < num2)
{
float num4 = Mathf.Sqrt(sqrMagnitude);
particlePosition = capsuleP0 + val2 * (num / num4);
return true;
}
}
else
{
float sqrMagnitude2 = ((Vector3)(ref val)).sqrMagnitude;
if (num3 >= sqrMagnitude2)
{
val2 = particlePosition - capsuleP1;
float sqrMagnitude3 = ((Vector3)(ref val2)).sqrMagnitude;
if (sqrMagnitude3 > 0f && sqrMagnitude3 < num2)
{
float num5 = Mathf.Sqrt(sqrMagnitude3);
particlePosition = capsuleP1 + val2 * (num / num5);
return true;
}
}
else if (sqrMagnitude2 > 0f)
{
num3 /= sqrMagnitude2;
val2 -= val * num3;
float sqrMagnitude4 = ((Vector3)(ref val2)).sqrMagnitude;
if (sqrMagnitude4 > 0f && sqrMagnitude4 < num2)
{
float num6 = Mathf.Sqrt(sqrMagnitude4);
particlePosition += val2 * ((num - num6) / num6);
return true;
}
}
}
return false;
}
private static bool InsideCapsule(ref Vector3 particlePosition, float particleRadius, Vector3 capsuleP0, Vector3 capsuleP1, float capsuleRadius)
{
//IL_000a: Unknown result type (might be due to invalid IL or missing references)
//IL_000b: Unknown result type (might be due to invalid IL or missing references)
//IL_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_0013: Unknown result type (might be due to invalid IL or missing references)
//IL_0018: Unknown result type (might be due to invalid IL or missing references)
//IL_0019: Unknown result type (might be due to invalid IL or missing references)
//IL_001e: Unknown result type (might be due to invalid IL or missing references)
//IL_001f: 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_0089: Unknown result type (might be due to invalid IL or missing references)
//IL_008e: 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_0051: Unknown result type (might be due to invalid IL or missing references)
//IL_0052: Unknown result type (might be due to invalid IL or missing references)
//IL_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_0061: Unknown result type (might be due to invalid IL or missing references)
//IL_00e8: Unknown result type (might be due to invalid IL or missing references)
//IL_00e9: Unknown result type (might be due to invalid IL or missing references)
//IL_00ec: 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)
//IL_00f6: Unknown result type (might be due to invalid IL or missing references)
//IL_00b1: Unknown result type (might be due to invalid IL or missing references)
//IL_00b2: 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_00c1: Unknown result type (might be due to invalid IL or missing references)
//IL_0114: Unknown result type (might be due to invalid IL or missing references)
//IL_0119: Unknown result type (might be due to invalid IL or missing references)
//IL_0121: Unknown result type (might be due to invalid IL or missing references)
//IL_0126: Unknown result type (might be due to invalid IL or missing references)
//IL_012b: Unknown result type (might be due to invalid IL or missing references)
float num = capsuleRadius - particleRadius;
float num2 = num * num;
Vector3 val = capsuleP1 - capsuleP0;
Vector3 val2 = particlePosition - capsuleP0;
float num3 = Vector3.Dot(val2, val);
if (num3 <= 0f)
{
float sqrMagnitude = ((Vector3)(ref val2)).sqrMagnitude;
if (sqrMagnitude > num2)
{
float num4 = Mathf.Sqrt(sqrMagnitude);
particlePosition = capsuleP0 + val2 * (num / num4);
return true;
}
}
else
{
float sqrMagnitude2 = ((Vector3)(ref val)).sqrMagnitude;
if (num3 >= sqrMagnitude2)
{
val2 = particlePosition - capsuleP1;
float sqrMagnitude3 = ((Vector3)(ref val2)).sqrMagnitude;
if (sqrMagnitude3 > num2)
{
float num5 = Mathf.Sqrt(sqrMagnitude3);
particlePosition = capsuleP1 + val2 * (num / num5);
return true;
}
}
else if (sqrMagnitude2 > 0f)
{
num3 /= sqrMagnitude2;
val2 -= val * num3;
float sqrMagnitude4 = ((Vector3)(ref val2)).sqrMagnitude;
if (sqrMagnitude4 > num2)
{
float num6 = Mathf.Sqrt(sqrMagnitude4);
particlePosition += val2 * ((num - num6) / num6);
return true;
}
}
}
return false;
}
private void OnDrawGizmosSelected()
{
//IL_002b: 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_0041: Unknown result type (might be due to invalid IL or missing references)
//IL_0046: Unknown result type (might be due to invalid IL or missing references)
//IL_0094: Unknown result type (might be due to invalid IL or missing references)
//IL_0099: Unknown result type (might be due to invalid IL or missing references)
//IL_009b: 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_007c: Unknown result type (might be due to invalid IL or missing references)
//IL_0081: Unknown result type (might be due to invalid IL or missing references)
//IL_0135: Unknown result type (might be due to invalid IL or missing references)
//IL_0136: Unknown result type (might be due to invalid IL or missing references)
//IL_0147: Unknown result type (might be due to invalid IL or missing references)
//IL_0149: Unknown result type (might be due to invalid IL or missing references)
if (!((Behaviour)this).enabled)
{
return;
}
if (m_Bound == Bound.Outside)
{
Gizmos.color = Color.yellow;
}
else
{
Gizmos.color = Color.magenta;
}
float num = m_Radius * Mathf.Abs(((Component)this).transform.lossyScale.x);
float num2 = m_Height * 0.5f - m_Radius;
if (num2 <= 0f)
{
Gizmos.DrawWireSphere(((Component)this).transform.TransformPoint(m_Center), num);
return;
}
Vector3 center = m_Center;
Vector3 center2 = m_Center;
switch (m_Direction)
{
case Direction.X:
center.x -= num2;
center2.x += num2;
break;
case Direction.Y:
center.y -= num2;
center2.y += num2;
break;
case Direction.Z:
center.z -= num2;
center2.z += num2;
break;
}
Gizmos.DrawWireSphere(((Component)this).transform.TransformPoint(center), num);
Gizmos.DrawWireSphere(((Component)this).transform.TransformPoint(center2), num);
}
}
public class DynamicBoneColliderBase : MonoBehaviour
{
public enum Direction
{
X,
Y,
Z
}
public enum Bound
{
Outside,
Inside
}
[Tooltip("The axis of the capsule's height.")]
public Direction m_Direction = Direction.Y;
[Tooltip("The center of the sphere or capsule, in the object's local space.")]
public Vector3 m_Center = Vector3.zero;
[Tooltip("Constrain bones to outside bound or inside bound.")]
public Bound m_Bound = Bound.Outside;
public virtual bool Collide(ref Vector3 particlePosition, float particleRadius)
{
return false;
}
}
[AddComponentMenu("Dynamic Bone/Dynamic Bone Plane Collider")]
public class DynamicBonePlaneCollider : DynamicBoneColliderBase
{
private void OnValidate()
{
}
public override bool Collide(ref Vector3 particlePosition, float particleRadius)
{
//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_002d: Unknown result type (might be due to invalid IL or missing references)
//IL_0032: Unknown result type (might be due to invalid IL or missing references)
//IL_0061: Unknown result type (might be due to invalid IL or missing references)
//IL_0066: Unknown result type (might be due to invalid IL or missing references)
//IL_006b: 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_006f: 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_003e: Unknown result type (might be due to invalid IL or missing references)
//IL_0043: Unknown result type (might be due to invalid IL or missing references)
//IL_004f: 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_00d4: Unknown result type (might be due to invalid IL or missing references)
//IL_00d9: Unknown result type (might be due to invalid IL or missing references)
//IL_00dc: Unknown result type (might be due to invalid IL or missing references)
//IL_00e1: Unknown result type (might be due to invalid IL or missing references)
//IL_00e6: Unknown result type (might be due to invalid IL or missing references)
//IL_009f: Unknown result type (might be due to invalid IL or missing references)
//IL_00a4: Unknown result type (might be due to invalid IL or missing references)
//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
//IL_00ac: Unknown result type (might be due to invalid IL or missing references)
//IL_00b1: Unknown result type (might be due to invalid IL or missing references)
Vector3 val = Vector3.up;
switch (m_Direction)
{
case Direction.X:
val = ((Component)this).transform.right;
break;
case Direction.Y:
val = ((Component)this).transform.up;
break;
case Direction.Z:
val = ((Component)this).transform.forward;
break;
}
Vector3 val2 = ((Component)this).transform.TransformPoint(m_Center);
Plane val3 = default(Plane);
((Plane)(ref val3))..ctor(val, val2);
float distanceToPoint = ((Plane)(ref val3)).GetDistanceToPoint(particlePosition);
if (m_Bound == Bound.Outside)
{
if (distanceToPoint < 0f)
{
particlePosition -= val * distanceToPoint;
return true;
}
}
else if (distanceToPoint > 0f)
{
particlePosition -= val * distanceToPoint;
return true;
}
return false;
}
private void OnDrawGizmosSelected()
{
//IL_002b: 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_0035: 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_0061: Unknown result type (might be due to invalid IL or missing references)
//IL_0066: Unknown result type (might be due to invalid IL or missing references)
//IL_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_009f: Unknown result type (might be due to invalid IL or missing references)
//IL_00a0: Unknown result type (might be due to invalid IL or missing references)
//IL_00a1: Unknown result type (might be due to invalid IL or missing references)
//IL_00a2: Unknown result type (might be due to invalid IL or missing references)
//IL_00a3: Unknown result type (might be due to invalid IL or missing references)
//IL_0072: Unknown result type (might be due to invalid IL or missing references)
//IL_0077: Unknown result type (might be due to invalid IL or missing references)
//IL_0083: Unknown result type (might be due to invalid IL or missing references)
//IL_0088: Unknown result type (might be due to invalid IL or missing references)
if (((Behaviour)this).enabled)
{
if (m_Bound == Bound.Outside)
{
Gizmos.color = Color.yellow;
}
else
{
Gizmos.color = Color.magenta;
}
Vector3 val = Vector3.up;
switch (m_Direction)
{
case Direction.X:
val = ((Component)this).transform.right;
break;
case Direction.Y:
val = ((Component)this).transform.up;
break;
case Direction.Z:
val = ((Component)this).transform.forward;
break;
}
Vector3 val2 = ((Component)this).transform.TransformPoint(m_Center);
Gizmos.DrawLine(val2, val2 + val);
}
}
}
namespace Niko666
{
public class AK117LavaAnimController : MonoBehaviour
{
public ClosedBoltWeapon Weapon;
public Animator Animator;
public AudioSource AudioSource;
public GameObject Magazine;
public string Fire_Node = "Fire";
public string Reload_P1_Node = "Reload_P1";
public string Reload_P2_Node = "Reload_P2";
public string Reload_Close_Node = "Reload_Close";
public string Reload_Empty_P1_Node = "Reload_Empty_P1";
public string Reload_Empty_P2_Node = "Reload_Empty_P2";
public AudioClip Reload_P1_Clip;
public AudioClip Reload_P2_Clip;
public AudioClip Reload_Close_Clip;
public AudioClip Reload_Empty_P1_Clip;
public AudioClip Reload_Empty_P2_Clip;
private Vector2 dir2 = Vector2.down;
private bool _hasPlayedFire = true;
private bool _hasPlayedReloadP1 = false;
private bool _hasPlayedReloadP2 = true;
private bool _hasPlayedReloadEmptyP1 = false;
private bool _hasPlayedReloadEmptyP2 = false;
public void Awake()
{
Animator.cullingMode = (AnimatorCullingMode)0;
}
public void Update()
{
//IL_0205: Unknown result type (might be due to invalid IL or missing references)
//IL_020b: Unknown result type (might be due to invalid IL or missing references)
if (!((Object)(object)((FVRInteractiveObject)Weapon).m_hand != (Object)null))
{
return;
}
if (Weapon.m_fireSelectorMode == 0)
{
((FVRFireArm)Weapon).UsesClips = false;
return;
}
if (!Weapon.Chamber.IsFull && !_hasPlayedFire && ((FVRFireArm)Weapon).Magazine.HasARound())
{
Animator.Play(Fire_Node);
_hasPlayedFire = true;
}
else if (Weapon.Chamber.IsFull)
{
_hasPlayedFire = false;
}
if (!((FVRFireArm)Weapon).Magazine.HasARound() && !Weapon.Chamber.IsFull && !_hasPlayedReloadEmptyP1)
{
((FVRFireArm)Weapon).UsesClips = true;
Magazine.SetActive(false);
_hasPlayedReloadEmptyP2 = false;
Animator.Play(Reload_Empty_P1_Node);
AudioSource.PlayOneShot(Reload_Empty_P1_Clip, 0.15f);
_hasPlayedReloadEmptyP1 = true;
}
else if (((FVRFireArm)Weapon).Magazine.HasARound() && !_hasPlayedReloadEmptyP2)
{
((FVRFireArm)Weapon).UsesClips = false;
Magazine.SetActive(true);
_hasPlayedReloadEmptyP1 = false;
Animator.Play(Reload_Empty_P2_Node);
AudioSource.PlayOneShot(Reload_Empty_P2_Clip, 0.15f);
Weapon.Bolt.ImpartFiringImpulse();
_hasPlayedReloadEmptyP2 = true;
}
if (((FVRFireArm)Weapon).Magazine.HasARound() && Weapon.Chamber.IsFull && ((!((FVRInteractiveObject)Weapon).m_hand.IsInStreamlinedMode && Vector2.Angle(((FVRInteractiveObject)Weapon).m_hand.Input.TouchpadAxes, dir2) <= 45f && ((Vector2)(ref ((FVRInteractiveObject)Weapon).m_hand.Input.TouchpadAxes)).magnitude > 0.4f && ((FVRInteractiveObject)Weapon).m_hand.Input.TouchpadPressed) || (((FVRInteractiveObject)Weapon).m_hand.IsInStreamlinedMode && ((FVRInteractiveObject)Weapon).m_hand.Input.AXButtonDown)))
{
if (!_hasPlayedReloadP1 && _hasPlayedReloadP2 && !AudioSource.isPlaying && !((FVRFireArm)Weapon).Magazine.IsFull())
{
((FVRFireArm)Weapon).UsesClips = true;
Magazine.SetActive(false);
_hasPlayedReloadP2 = false;
Animator.Play(Reload_P1_Node);
AudioSource.PlayOneShot(Reload_P1_Clip, 0.15f);
_hasPlayedReloadP1 = true;
}
else if (_hasPlayedReloadP1 && !_hasPlayedReloadP2 && !AudioSource.isPlaying)
{
((FVRFireArm)Weapon).UsesClips = false;
Magazine.SetActive(false);
Animator.Play(Reload_Close_Node);
AudioSource.PlayOneShot(Reload_Close_Clip, 0.15f);
_hasPlayedReloadP1 = false;
_hasPlayedReloadP2 = true;
}
}
else if (!_hasPlayedReloadP2 && _hasPlayedReloadP1 && ((FVRFireArm)Weapon).Magazine.IsFull())
{
((FVRFireArm)Weapon).UsesClips = false;
Magazine.SetActive(true);
_hasPlayedReloadP1 = false;
Animator.Play(Reload_P2_Node);
AudioSource.PlayOneShot(Reload_P2_Clip, 0.15f);
_hasPlayedReloadP2 = true;
}
}
}
public class AN94BurstSystem : MonoBehaviour
{
public ClosedBoltWeapon Weapon;
public int BurstAmount = 4;
private int _shotsSoFar = 0;
private bool wasLoaded;
public float DefForwardSpeed;
public float DefRearwardSpeed;
public float DefStiffness;
public float FastForwardSpeed;
public float FastRearwardSpeed;
public float FastStiffness;
public void FixedUpdate()
{
if (!((Object)(object)Weapon != (Object)null) || !((Object)(object)((FVRInteractiveObject)Weapon).m_hand != (Object)null))
{
return;
}
if (wasLoaded && !Weapon.Chamber.IsFull)
{
_shotsSoFar++;
}
wasLoaded = Weapon.Chamber.IsFull;
if (Weapon.m_triggerFloat <= Weapon.TriggerResetThreshold)
{
_shotsSoFar = 0;
Weapon.Bolt.Speed_Forward = FastForwardSpeed;
Weapon.Bolt.Speed_Rearward = FastRearwardSpeed;
Weapon.Bolt.SpringStiffness = FastStiffness;
return;
}
if (_shotsSoFar >= BurstAmount)
{
Weapon.Bolt.Speed_Forward = DefForwardSpeed;
Weapon.Bolt.Speed_Rearward = DefRearwardSpeed;
Weapon.Bolt.SpringStiffness = DefStiffness;
}
if (Weapon.m_triggerFloat <= Weapon.TriggerResetThreshold)
{
_shotsSoFar = 0;
}
}
}
public class ARX51BarrelSystem : MonoBehaviour
{
public ClosedBoltWeapon Weapon;
public GameObject SpinningBarrels;
public AudioSource SpinnySounds;
public float SpinRate;
public cullOnZLoc.dirType DirectionOfSpin;
public float DecelerationRate = 0.5f;
private float currentSpinSpeed = 0f;
private bool TriggerPulled = false;
public int BurstAmount = 4;
private int _shotsSoFar = 0;
private bool wasLoaded;
public float DefForwardSpeed;
public float DefRearwardSpeed;
public float DefStiffness;
public float FastForwardSpeed;
public float FastRearwardSpeed;
public float FastStiffness;
public void FixedUpdate()
{
//IL_0118: Unknown result type (might be due to invalid IL or missing references)
//IL_011d: Unknown result type (might be due to invalid IL or missing references)
//IL_0153: Unknown result type (might be due to invalid IL or missing references)
if (!((Object)(object)Weapon != (Object)null) || !((Object)(object)((FVRInteractiveObject)Weapon).m_hand != (Object)null))
{
return;
}
float triggerFloat = Weapon.m_triggerFloat;
if (triggerFloat >= Weapon.TriggerResetThreshold && Weapon.Chamber.IsFull)
{
if (!TriggerPulled)
{
TriggerPulled = true;
}
currentSpinSpeed = SpinRate;
SpinnySounds.Play();
}
else if (TriggerPulled)
{
TriggerPulled = false;
}
if (!TriggerPulled && currentSpinSpeed > 0f)
{
currentSpinSpeed -= DecelerationRate * Time.deltaTime;
if (currentSpinSpeed < 0f)
{
currentSpinSpeed = 0f;
}
}
if (currentSpinSpeed > 0f && (Object)(object)SpinningBarrels != (Object)null)
{
Vector3 zero = Vector3.zero;
int directionOfSpin = (int)DirectionOfSpin;
if (directionOfSpin >= 0 && directionOfSpin <= 2)
{
((Vector3)(ref zero))[directionOfSpin] = currentSpinSpeed * Time.deltaTime;
SpinningBarrels.transform.Rotate(zero);
}
else
{
Debug.LogWarning((object)"Invalid DirectionOfSpin value!");
}
}
if (wasLoaded && !Weapon.Chamber.IsFull)
{
_shotsSoFar++;
}
wasLoaded = Weapon.Chamber.IsFull;
if (Weapon.m_triggerFloat <= Weapon.TriggerResetThreshold)
{
_shotsSoFar = 0;
if ((Object)(object)((FVRFireArm)Weapon).Magazine != (Object)null && !((FVRFireArm)Weapon).Magazine.HasARound())
{
Weapon.Bolt.Speed_Forward = 0f;
Weapon.Bolt.Speed_Rearward = 0f;
Weapon.Bolt.SpringStiffness = 0f;
}
if (Weapon.Chamber.IsFull)
{
Weapon.Bolt.Speed_Forward = FastForwardSpeed;
Weapon.Bolt.Speed_Rearward = FastRearwardSpeed;
Weapon.Bolt.SpringStiffness = FastStiffness;
}
}
else
{
Weapon.Bolt.Speed_Forward = FastForwardSpeed;
Weapon.Bolt.Speed_Rearward = FastRearwardSpeed;
Weapon.Bolt.SpringStiffness = FastStiffness;
if (_shotsSoFar >= BurstAmount)
{
Weapon.Bolt.Speed_Forward = DefForwardSpeed;
Weapon.Bolt.Speed_Rearward = DefRearwardSpeed;
Weapon.Bolt.SpringStiffness = DefStiffness;
}
if (Weapon.m_triggerFloat <= Weapon.TriggerResetThreshold)
{
_shotsSoFar = 0;
}
}
}
}
public class AdvancedSwitch : FVRInteractiveObject
{
public int CurObjectIndex = 0;
public GameObject[] ObjectsIndexes;
public AudioEvent AudEvent_Toggle;
public override void SimpleInteraction(FVRViveHand hand)
{
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
((FVRInteractiveObject)this).SimpleInteraction(hand);
SM.PlayCoreSound((FVRPooledAudioType)0, AudEvent_Toggle, base.GameObject.transform.position);
for (int i = 0; i < ObjectsIndexes.Length; i++)
{
ObjectsIndexes[i].SetActive(false);
}
CurObjectIndex++;
if (CurObjectIndex >= ObjectsIndexes.Length)
{
CurObjectIndex = 0;
}
ObjectsIndexes[CurObjectIndex].SetActive(true);
}
}
}
namespace ModularWorkshop
{
public class AlyxModulHopper : MonoBehaviour, IPartFireArmRequirement
{
public GameObject ObjectWhenEmpty;
public List<GameObject> Objects;
public float grabcd = 0f;
public float cd = 0.1f;
public Handgun Gun;
public List<FireArmRoundClass> curClasses;
public int HopperCapacity = 10;
public int curNumber = 0;
public FVRFireArmMagazine Mag;
public FireArmRoundClass curClass;
public Animator AnimG;
public Animator AnimS;
public float ScrollValue;
public float ScrollSpeed;
public GameObject bullet1;
public GameObject bullet2;
public AudioEvent clip;
public AudioEvent Completeclip;
public bool isFull = false;
public bool isLoading = false;
public bool chamber = false;
public FVRFireArm FireArm
{
set
{
if ((Object)(object)value != (Object)null)
{
Handgun val = (Handgun)(object)((value is Handgun) ? value : null);
if ((Object)(object)val != (Object)null)
{
Gun = val;
}
}
}
}
private void Start()
{
}
public void FixedUpdate()
{
//IL_002c: Unknown result type (might be due to invalid IL or missing references)
//IL_024f: Unknown result type (might be due to invalid IL or missing references)
//IL_0236: Unknown result type (might be due to invalid IL or missing references)
//IL_01d2: Unknown result type (might be due to invalid IL or missing references)
//IL_0347: Unknown result type (might be due to invalid IL or missing references)
//IL_0370: Unknown result type (might be due to invalid IL or missing references)
//IL_0375: Unknown result type (might be due to invalid IL or missing references)
//IL_03a2: Unknown result type (might be due to invalid IL or missing references)
if (curNumber >= HopperCapacity && !isFull)
{
SM.PlayCoreSound((FVRPooledAudioType)41, Completeclip, ((Component)this).transform.position);
isFull = true;
}
else if (curNumber < HopperCapacity)
{
isFull = false;
}
curNumber = Mathf.Clamp(curNumber, 0, HopperCapacity);
SetEnabledObjects(curNumber);
ScrollValue = (float)curNumber * 0.1f;
ScrollValue = Mathf.Clamp(ScrollValue, 0f, 1f);
AnimS.SetFloat("Blend", ScrollValue);
if ((Object)(object)Gun != (Object)null)
{
if ((Object)(object)((FVRFireArm)Gun).Magazine != (Object)null)
{
Mag = ((FVRFireArm)Gun).Magazine;
}
else if ((Object)(object)((FVRFireArm)Gun).Magazine == (Object)null && (Object)(object)Mag != (Object)null)
{
Mag = null;
}
if ((Object)(object)Mag != (Object)null && Mag.m_numRounds <= 0 && curNumber > 0)
{
Gun.DropSlideRelease();
if (!Gun.Chamber.IsFull && Gun.Slide.m_slideZ_current < Gun.Slide.m_slideZ_lock)
{
curNumber--;
chamber = true;
SM.PlayCoreSound((FVRPooledAudioType)41, clip, ((Component)this).transform.position);
AnimG.SetTrigger("Load");
}
if (chamber || Gun.Slide.m_slideZ_current > Gun.Slide.m_slideZ_lock)
{
Gun.Chamber.Autochamber(curClasses[curNumber]);
}
}
if ((int)Gun.Slide.CurPos == 0 || Gun.Chamber.IsFull)
{
chamber = false;
Gun.DropSlideRelease();
}
}
else if ((Object)(object)Gun == (Object)null)
{
Mag = null;
}
if ((Object)(object)Mag != (Object)null && Gun.IsSlideLockUp && (Object)(object)((FVRInteractiveObject)Gun.Slide).m_hand == (Object)null && Mag.m_numRounds > 0 && curNumber < HopperCapacity && Mag.LoadedRounds[0] != null)
{
grabcd -= Time.deltaTime;
if (grabcd <= 0f)
{
SM.PlayCoreSound((FVRPooledAudioType)41, clip, ((Component)this).transform.position);
AnimG.SetTrigger("Grab");
curClass = Mag.LoadedRounds[0].LR_Class;
Mag.RemoveRound(0);
curNumber++;
curClasses[curNumber] = curClass;
grabcd = cd;
}
}
if (curNumber <= 0)
{
bullet1.SetActive(false);
bullet2.SetActive(false);
}
else if (curNumber > 0)
{
bullet1.SetActive(true);
bullet2.SetActive(true);
}
}
public void SetEnabledObjects(int amt)
{
amt = Mathf.Clamp(amt, 0, Objects.Count);
for (int i = 0; i < Objects.Count; i++)
{
Objects[i].SetActive(false);
ObjectWhenEmpty.SetActive(false);
}
for (int j = 0; j < Objects.Count; j++)
{
if (j < amt)
{
Objects[j].SetActive(true);
}
}
}
}
[RequireComponent(typeof(ModularWeaponPart))]
public class AlyxModulSelector : MonoBehaviour, IPartFireArmRequirement
{
public enum FireSelectorModeType
{
Safe,
Single,
Burst,
FullAuto,
SuperFastBurst
}
[Serializable]
public class FireSelectorMode
{
public float SelectorPosition;
public FireSelectorModeType ModeType;
public int BurstAmount = 3;
[Tooltip("Only works for closed bolt weapons")]
public bool ARStyleBurst;
public float EngagementDelay;
}
public Transform ExternalSelector;
public FireSelectorMode[] FireSelectorModes;
private FVRFireArm _firearm;
private object[] _originalFireModes;
public FVRFireArm FireArm
{
get
{
return _firearm;
}
set
{
FVRFireArm firearm;
if (!((Object)(object)value != (Object)null))
{
if (!((Object)(object)value == (Object)null) || !((Object)(object)_firearm != (Object)null))
{
return;
}
_firearm = value;
firearm = _firearm;
ClosedBoltWeapon val = (ClosedBoltWeapon)(object)((firearm is ClosedBoltWeapon) ? firearm : null);
if ((Object)(object)val != (Object)null)
{
val.FireSelector_Modes = (FireSelectorMode[])_originalFireModes;
return;
}
OpenBoltReceiver val2 = (OpenBoltReceiver)(object)((firearm is OpenBoltReceiver) ? firearm : null);
if ((Object)(object)val2 != (Object)null)
{
val2.FireSelector_Modes = (FireSelectorMode[])_originalFireModes;
return;
}
Handgun val3 = (Handgun)(object)((firearm is Handgun) ? firearm : null);
if (!((Object)(object)val3 == (Object)null))
{
val3.FireSelectorModes = (FireSelectorMode[])_originalFireModes;
}
return;
}
_firearm = value;
firearm = _firearm;
ClosedBoltWeapon val4 = (ClosedBoltWeapon)(object)((firearm is ClosedBoltWeapon) ? firearm : null);
if ((Object)(object)val4 != (Object)null)
{
object[] fireSelector_Modes = val4.FireSelector_Modes;
_originalFireModes = fireSelector_Modes;
ModifyClosedBoltFireModes(val4);
return;
}
OpenBoltReceiver val5 = (OpenBoltReceiver)(object)((firearm is OpenBoltReceiver) ? firearm : null);
if ((Object)(object)val5 != (Object)null)
{
object[] fireSelector_Modes = val5.FireSelector_Modes;
_originalFireModes = fireSelector_Modes;
ModifyOpenBoltFireModes(val5);
return;
}
Handgun val6 = (Handgun)(object)((firearm is Handgun) ? firearm : null);
if (!((Object)(object)val6 == (Object)null))
{
object[] fireSelector_Modes = val6.FireSelectorModes;
_originalFireModes = fireSelector_Modes;
ModifyHandgunFireModes(val6);
}
}
}
private void ModifyClosedBoltFireModes(ClosedBoltWeapon w)
{
//IL_001c: Unknown result type (might be due to invalid IL or missing references)
//IL_0023: Expected O, but got Unknown
//IL_0033: Unknown result type (might be due to invalid IL or missing references)
//IL_0038: Unknown result type (might be due to invalid IL or missing references)
//IL_003d: Unknown result type (might be due to invalid IL or missing references)
List<FireSelectorMode> list = new List<FireSelectorMode>();
FireSelectorMode[] fireSelectorModes = FireSelectorModes;
foreach (FireSelectorMode val in fireSelectorModes)
{
FireSelectorMode val2 = new FireSelectorMode();
val2.SelectorPosition = val.SelectorPosition;
val2.ModeType = FireModeEnumExtensions.ConvertToClosedBolt(val.ModeType);
val2.BurstAmount = val.BurstAmount;
val2.ARStyleBurst = val.ARStyleBurst;
val2.EngagementDelay = val.EngagementDelay;
list.Add(val2);
}
w.FireSelector_Modes = list.ToArray();
w.FireSelector_Modes2 = list.ToArray();
}
private void ModifyOpenBoltFireModes(OpenBoltReceiver w)
{
//IL_001c: Unknown result type (might be due to invalid IL or missing references)
//IL_0023: Expected O, but got Unknown
//IL_0033: Unknown result type (might be due to invalid IL or missing references)
//IL_0038: Unknown result type (might be due to invalid IL or missing references)
//IL_003d: Unknown result type (might be due to invalid IL or missing references)
List<FireSelectorMode> list = new List<FireSelectorMode>();
FireSelectorMode[] fireSelectorModes = FireSelectorModes;
foreach (FireSelectorMode val in fireSelectorModes)
{
FireSelectorMode val2 = new FireSelectorMode();
val2.SelectorPosition = val.SelectorPosition;
val2.ModeType = FireModeEnumExtensions.ConvertToOpenBolt(val.ModeType);
val2.BurstAmount = val.BurstAmount;
val2.EngagementDelay = val.EngagementDelay;
list.Add(val2);
}
w.FireSelector_Modes = list.ToArray();
w.FireSelector_Modes2 = list.ToArray();
}
private void ModifyHandgunFireModes(Handgun w)
{
//IL_003d: Unknown result type (might be due to invalid IL or missing references)
//IL_0044: Expected O, but got Unknown
//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)
if (w.FireSelectorModeIndex != 0 || w.FireSelectorModeIndex != 1)
{
w.SetFireSelectorByIndex(0);
}
List<FireSelectorMode> list = new List<FireSelectorMode>();
FireSelectorMode[] fireSelectorModes = FireSelectorModes;
foreach (FireSelectorMode val in fireSelectorModes)
{
FireSelectorMode val2 = new FireSelectorMode();
val2.SelectorPosition = val.SelectorPosition;
val2.ModeType = FireModeEnumExtensions.ConvertToHandgun(val.ModeType);
val2.BurstAmount = val.BurstAmount;
val2.EngagementDelay = val.EngagementDelay;
list.Add(val2);
}
w.FireSelectorModes = list.ToArray();
w.FireSelector = ExternalSelector;
}
}
}
namespace Niko666
{
public class AnimationSwitch : FVRInteractiveObject
{
public string Insp_P1_Node = "Insp_P1";
public string Insp_P2_Node = "Insp_P2";
public ClosedBoltWeapon Weapon;
public Animator Animator;
public AudioEvent Insp_P1_Clip;
public AudioEvent Insp_P2_Clip;
private bool _hasPlayedInsp = false;
private int CurrentSelector;
public void Start()
{
((FVRInteractiveObject)this).Start();
}
public override void SimpleInteraction(FVRViveHand hand)
{
//IL_0099: 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)
((FVRInteractiveObject)this).SimpleInteraction(hand);
if (!_hasPlayedInsp)
{
CurrentSelector = Weapon.m_fireSelectorMode;
Weapon.m_fireSelectorMode = 0;
Animator.Play(Insp_P1_Node);
SM.PlayCoreSound((FVRPooledAudioType)10, Insp_P1_Clip, ((Component)this).transform.position);
_hasPlayedInsp = true;
}
else
{
Weapon.m_fireSelectorMode = CurrentSelector;
Animator.Play(Insp_P2_Node);
SM.PlayCoreSound((FVRPooledAudioType)10, Insp_P2_Clip, ((Component)this).transform.position);
_hasPlayedInsp = false;
}
}
}
public class AudioPlayOnGrab : MonoBehaviour
{
public AudioEvent Audio;
public FVRPhysicalObject Object;
private bool isGrabbed;
public void Update()
{
//IL_0036: Unknown result type (might be due to invalid IL or missing references)
if ((Object)(object)((FVRInteractiveObject)Object).m_hand != (Object)null)
{
if (!isGrabbed)
{
SM.PlayCoreSound((FVRPooledAudioType)0, Audio, ((Component)Object).transform.position);
isGrabbed = true;
}
}
else if (isGrabbed)
{
isGrabbed = false;
}
}
}
public class AudioRecoilForDiffModes : MonoBehaviour
{
public ClosedBoltWeapon Weapon;
public int FireSelectorPosition1;
public int FireSelectorPosition2;
public FVRFireArmRecoilProfile Recoil1;
public FVRFireArmRecoilProfile Recoil2;
public FVRFirearmAudioSet AudioSet1;
public FVRFirearmAudioSet AudioSet2;
public bool _hasSetStartAudio = false;
public bool _hasSetStopAudio = false;
public void Update()
{
if (!((Object)(object)((FVRInteractiveObject)Weapon).m_hand != (Object)null))
{
return;
}
if (Weapon.m_fireSelectorMode == FireSelectorPosition1)
{
_hasSetStartAudio = false;
if (!_hasSetStopAudio)
{
((FVRFireArm)Weapon).RecoilProfile = Recoil1;
((FVRFireArm)Weapon).AudioClipSet = AudioSet1;
}
_hasSetStopAudio = true;
}
else if (Weapon.m_fireSelectorMode == FireSelectorPosition2)
{
_hasSetStopAudio = false;
if (!_hasSetStartAudio)
{
((FVRFireArm)Weapon).RecoilProfile = Recoil2;
((FVRFireArm)Weapon).AudioClipSet = AudioSet2;
}
_hasSetStartAudio = true;
}
}
}
}
namespace OpenScripts2
{
public class AutomaticDeleteStripperClip : OpenScripts2_BasePlugin
{
public FVRFireArmClip Clip;
public GameObject ClipGeo;
[Tooltip("Delay in Seconds. If equal to 0, all rounds will be loaded at the same time.")]
public float DelayBetweenRounds = 0f;
public bool DoesAutoEject = false;
private bool _loadingRounds = false;
public void Update()
{
if (!_loadingRounds && (Object)(object)Clip.FireArm != (Object)null)
{
ClipGeo.SetActive(false);
if (DelayBetweenRounds != 0f)
{
((MonoBehaviour)this).StartCoroutine(LoadRoundsOneByOne());
}
else
{
LoadAllRounds();
}
}
}
private IEnumerator LoadRoundsOneByOne()
{
_loadingRounds = true;
while (Clip.HasARound() && (Object)(object)Clip.FireArm != (Object)null && (Object)(object)Clip.FireArm.Magazine != (Object)null && !Clip.FireArm.Magazine.IsFull())
{
Clip.LoadOneRoundFromClipToMag();
yield return (object)new WaitForSeconds(DelayBetweenRounds);
}
_loadingRounds = false;
if (DoesAutoEject)
{
Clip.FireArm.EjectClip();
}
}
private void LoadAllRounds()
{
//IL_009e: Unknown result type (might be due to invalid IL or missing references)
//IL_00a3: Unknown result type (might be due to invalid IL or missing references)
//IL_00b4: Unknown result type (might be due to invalid IL or missing references)
if ((Object)(object)Clip.FireArm == (Object)null || (Object)(object)Clip.FireArm.Magazine == (Object)null || Clip.FireArm.Magazine.IsFull() || !Clip.HasARound())
{
return;
}
for (int i = 0; i < Clip.m_numRounds; i++)
{
if (Clip.FireArm.Magazine.IsFull())
{
break;
}
if (!Clip.HasARound())
{
break;
}
FireArmRoundClass val = Clip.RemoveRoundReturnClass();
Clip.FireArm.Magazine.AddRound(val, false, true);
}
if (DoesAutoEject)
{
Clip.FireArm.EjectClip();
}
Object.Destroy((Object)(object)Clip);
}
}
}
namespace Niko666
{
public class BreakActionAlt : OpenScripts2_BasePlugin
{
public FVRPhysicalObject PhysicalObject;
[Header("Break Parts")]
public HingeJoint Hinge;
public float HingeLimit = 45f;
public float HingeEjectThreshhold = 30f;
public Transform CenterOfMassOverride;
public Axis HingeAxis;
[Header("LatchGeo (leave at default if no visible latch)")]
public bool HasLatchObject;
public Transform Latch;
public float MaxLatchRot = 45f;
[Tooltip("If latch is below this angle the fore will latch. Latch rot dependend on how far up you press on touchpad (like break action shotgun)")]
public float LatchLatchingRot = 5f;
[Header("Objects that turn off or on dependend on break state")]
public GameObject[] TurnOffObjectsOnOpen;
public GameObject[] TurnOnObjectsOnOpen;
[Header("Magazine Ejection")]
public bool DoesEjectMag = false;
public float MagEjectSpeed = 5f;
[Header("Audio")]
public AudioEvent BreakOpenAudio;
public AudioEvent BreakCloseAudio;
public float _latchRot;
private Vector3 _foreStartPos;
public bool _isLatched = true;
public bool _latchHeldOpen;
private bool _hasEjectedMag = false;
private static readonly Dictionary<FVRPhysicalObject, BreakActionAlt> _exisitingBreakOpenTriggers = new Dictionary<FVRPhysicalObject, BreakActionAlt>();
public void Awake()
{
//IL_001e: Unknown result type (might be due to invalid IL or missing references)
//IL_0023: Unknown result type (might be due to invalid IL or missing references)
//IL_004d: Unknown result type (might be due to invalid IL or missing references)
_exisitingBreakOpenTriggers.Add(PhysicalObject, this);
_foreStartPos = ((Component)Hinge).transform.localPosition;
if ((Object)(object)CenterOfMassOverride != (Object)null)
{
Rigidbody component = ((Component)Hinge).GetComponent<Rigidbody>();
component.centerOfMass = CenterOfMassOverride.localPosition;
}
SetBreakObjectsState(active: false);
}
public void OnDestroy()
{
_exisitingBreakOpenTriggers.Remove(PhysicalObject);
}
public void FixedUpdate()
{
UpdateBreakFore();
}
public void Update()
{
FVRViveHand hand = ((FVRInteractiveObject)PhysicalObject).m_hand;
if ((Object)(object)hand != (Object)null)
{
UpdateInputAndAnimate(hand);
}
else
{
_latchHeldOpen = false;
}
}
private void UpdateInputAndAnimate(FVRViveHand hand)
{
//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_014a: Unknown result type (might be due to invalid IL or missing references)
_latchHeldOpen = false;
if (hand.IsInStreamlinedMode)
{
if (hand.Input.AXButtonPressed)
{
_latchHeldOpen = true;
_latchRot = 1f * MaxLatchRot;
}
else
{
_latchRot = Mathf.MoveTowards(_latchRot, 0f, Time.deltaTime * MaxLatchRot * 3f);
}
}
else if (hand.Input.TouchpadPressed && Vector2.Angle(((FVRInteractiveObject)PhysicalObject).m_hand.Input.TouchpadAxes, Vector2.down) <= 45f && ((Vector2)(ref ((FVRInteractiveObject)PhysicalObject).m_hand.Input.TouchpadAxes)).magnitude > 0.4f)
{
_latchHeldOpen = true;
_latchRot = hand.Input.TouchpadAxes.x * MaxLatchRot;
}
else
{
_latchRot = Mathf.MoveTowards(_latchRot, 0f, Time.deltaTime * MaxLatchRot * 3f);
}
if (HasLatchObject)
{
Latch.localEulerAngles = new Vector3(0f, _latchRot, 0f);
}
}
private void UpdateBreakFore()
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
//IL_001a: Expected I4, but got Unknown
//IL_002a: Unknown result type (might be due to invalid IL or missing references)
//IL_002f: Unknown result type (might be due to invalid IL or missing references)
//IL_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_0066: 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_00be: Unknown result type (might be due to invalid IL or missing references)
//IL_00ce: Unknown result type (might be due to invalid IL or missing references)
//IL_00d3: Unknown result type (might be due to invalid IL or missing references)
//IL_00e8: Unknown result type (might be due to invalid IL or missing references)
//IL_0148: Unknown result type (might be due to invalid IL or missing references)
//IL_0158: 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_0171: Unknown result type (might be due to invalid IL or missing references)
//IL_018b: Unknown result type (might be due to invalid IL or missing references)
Axis hingeAxis = HingeAxis;
float num = (int)hingeAxis switch
{
0 => ((Component)Hinge).transform.localEulerAngles.x,
1 => ((Component)Hinge).transform.localEulerAngles.y,
2 => ((Component)Hinge).transform.localEulerAngles.z,
_ => 0f,
};
if (_isLatched && Mathf.Abs(_latchRot) > 5f)
{
_isLatched = false;
SM.PlayGenericSound(BreakOpenAudio, ((Component)PhysicalObject).transform.position);
JointLimits limits = Hinge.limits;
((JointLimits)(ref limits)).max = HingeLimit;
Hinge.limits = limits;
SetBreakObjectsState(active: true);
}
if (!_isLatched)
{
if (!_latchHeldOpen && num <= 1f && Mathf.Abs(_latchRot) < LatchLatchingRot)
{
_isLatched = true;
SM.PlayGenericSound(BreakCloseAudio, ((Component)PhysicalObject).transform.position);
JointLimits limits2 = Hinge.limits;
((JointLimits)(ref limits2)).max = 0f;
Hinge.limits = limits2;
SetBreakObjectsState(active: false);
((Component)Hinge).transform.localPosition = _foreStartPos;
_hasEjectedMag = false;
}
if (DoesEjectMag && Mathf.Abs(num) >= HingeEjectThreshhold && Mathf.Abs(num) <= HingeLimit)
{
TryEjectMag();
}
}
}
private void TryEjectMag()
{
if (!_hasEjectedMag)
{
EjectMag();
_hasEjectedMag = true;
}
}
public void EjectMag(bool PhysicalRelease = false)
{
//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_00ca: Unknown result type (might be due to invalid IL or missing references)
FVRPhysicalObject physicalObject = PhysicalObject;
FVRFireArm val = (FVRFireArm)(object)((physicalObject is FVRFireArm) ? physicalObject : null);
if ((Object)(object)val.Magazine != (Object)null)
{
if (val.Magazine.UsesOverrideInOut)
{
val.PlayAudioEventHandling(val.Magazine.ProfileOverride.MagazineOut);
}
else
{
val.PlayAudioEvent((FirearmAudioEventType)21, 1f);
}
val.m_lastEjectedMag = val.Magazine;
val.m_ejectDelay = 0.4f;
FVRViveHand hand = ((FVRInteractiveObject)val).m_hand;
if ((Object)(object)hand != (Object)null)
{
hand.Buzz(((FVRInteractiveObject)val).m_hand.Buzzer.Buzz_BeginInteraction);
}
val.Magazine.Release(PhysicalRelease);
((FVRPhysicalObject)val.Magazine).RootRigidbody.velocity = -val.MagazineEjectPos.up * MagEjectSpeed;
FVRViveHand hand2 = ((FVRInteractiveObject)val.Magazine).m_hand;
if ((Object)(object)hand2 != (Object)null)
{
hand2.Buzz(((FVRInteractiveObject)val).m_hand.Buzzer.Buzz_BeginInteraction);
}
val.Magazine = null;
}
}
private void SetBreakObjectsState(bool active)
{
GameObject[] turnOnObjectsOnOpen = TurnOnObjectsOnOpen;
foreach (GameObject val in turnOnObjectsOnOpen)
{
if ((Object)(object)val != (Object)null)
{
val.SetActive(active);
}
}
GameObject[] turnOffObjectsOnOpen = TurnOffObjectsOnOpen;
foreach (GameObject val2 in turnOffObjectsOnOpen)
{
if ((Object)(object)val2 != (Object)null)
{
val2.SetActive(!active);
}
}
}
}
public class ConsumeMultipleAmmoPerShot : MonoBehaviour
{
public ClosedBoltWeapon Weapon;
public FVRFireArmChamber Chamber;
public int FireSelectorPosition;
public int AmountToConsume;
[HideInInspector]
public bool _hasConsumedAmmo = false;
public void Update()
{
if ((Object)(object)((FVRInteractiveObject)Weapon).m_hand != (Object)null && Weapon.m_fireSelectorMode == FireSelectorPosition && !Chamber.IsFull)
{
if (!_hasConsumedAmmo && (Object)(object)((FVRFireArm)Weapon).Magazine != (Object)null && ((FVRFireArm)Weapon).Magazine.HasARound())
{
for (int i = 1; i < AmountToConsume; i++)
{
((FVRFireArm)Weapon).Magazine.RemoveRound();
}
}
_hasConsumedAmmo = true;
}
if ((Object)(object)((FVRInteractiveObject)Weapon).m_hand != (Object)null && Chamber.IsFull && !Chamber.IsSpent)
{
_hasConsumedAmmo = false;
}
}
}
public class DestinyWeaponSystem : MonoBehaviour
{
public ClosedBoltWeapon Weapon;
public Animator Animator;
public string AnimationN