Decompiled source of SPC9 v1.0.2
SPC9.dll
Decompiled 2 weeks ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using System.IO; using System.Reflection; using System.Runtime.CompilerServices; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Logging; using FistVR; using HarmonyLib; using OtherLoader; 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] namespace Lua.SPC9 { [BepInPlugin("Lua.SPC9", "SPC9", "1.0.2")] [BepInProcess("h3vr.exe")] [Description("Built with MeatKit")] [BepInDependency("h3vr.otherloader", "1.3.0")] public class SPC9Plugin : 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(), "Lua.SPC9"); OtherLoader.RegisterDirectLoad(BasePath, "Lua.SPC9", "", "spc9", "", ""); } } } namespace H3VRUtils.Vehicles { public class ButtonIgnition : FVRInteractiveObject { public VehicleControl vehicle; public VehicleAudioSet audioSet; public float ignitionTime; private float m_it; public float failChance; public Random rand; public void Start() { rand = new Random(); } public void BeginInteraction(FVRViveHand hand) { m_it = ignitionTime; if (!vehicle.isOn) { if (vehicle.isForciblyOff) { } } else { vehicle.TurnOffEngine(forcibly: false); } } public void UpdateInteraction(FVRViveHand hand) { m_it -= Time.fixedDeltaTime; if (m_it <= 0f) { float num = (float)rand.Next(0, 10000) / 100f; if (!(num <= failChance)) { vehicle.TurnOnEngine(forcibly: false); } } } } } namespace H3VRUtils.Vehicles.Core { public class DamagingArea : MonoBehaviour { public VehicleControl vehicle; public float damageMult = 15f; public float sharpyness = 50f; } } namespace H3VRUtils.Vehicles { [Serializable] public class DriveShiftNode { public Vector3 localposition; public Vector3 rotation; public int left = -1; public int up = -1; public int right = -1; public int down = -1; public int gear = 0; } public class DriveShift : FVRInteractiveObject { public VehicleControl vehicle; public Text gearText; public int currentNode; public List<DriveShiftNode> driveShiftNodes; public VehicleAudioSet audioSet; public void Update() { if (vehicle.carSetting.automaticGear) { if (vehicle.currentGear > 0 && vehicle.speed > 1f) { gearText.text = vehicle.currentGear.ToString(); } else if (vehicle.speed > 1f) { gearText.text = "R"; } else { gearText.text = "N"; } } else if (vehicle.NeutralGear) { gearText.text = "N"; } else if (vehicle.currentGear != 0) { gearText.text = vehicle.currentGear.ToString(); } else { gearText.text = "R"; } } public void UpdateInteraction(FVRViveHand hand) { //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0090: 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_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_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_025e: Unknown result type (might be due to invalid IL or missing references) //IL_027f: Unknown result type (might be due to invalid IL or missing references) bool flag = false; if (Vector2.Angle(hand.Input.TouchpadAxes, Vector2.left) <= 45f && hand.Input.TouchpadDown && ((Vector2)(ref hand.Input.TouchpadAxes)).magnitude > 0.2f && driveShiftNodes[currentNode].left != -1) { flag = true; currentNode = driveShiftNodes[currentNode].left; } if (Vector2.Angle(hand.Input.TouchpadAxes, Vector2.up) <= 45f && hand.Input.TouchpadDown && ((Vector2)(ref hand.Input.TouchpadAxes)).magnitude > 0.2f && driveShiftNodes[currentNode].up != -1) { flag = true; currentNode = driveShiftNodes[currentNode].up; } if (Vector2.Angle(hand.Input.TouchpadAxes, Vector2.right) <= 45f && hand.Input.TouchpadDown && ((Vector2)(ref hand.Input.TouchpadAxes)).magnitude > 0.2f && driveShiftNodes[currentNode].right != -1) { flag = true; currentNode = driveShiftNodes[currentNode].right; } if (Vector2.Angle(hand.Input.TouchpadAxes, Vector2.down) <= 45f && hand.Input.TouchpadDown && ((Vector2)(ref hand.Input.TouchpadAxes)).magnitude > 0.2f && driveShiftNodes[currentNode].down != -1) { flag = true; currentNode = driveShiftNodes[currentNode].down; } if (flag) { vehicle.ShiftTo(driveShiftNodes[currentNode].gear); ((Component)this).transform.localPosition = driveShiftNodes[currentNode].localposition; ((Component)this).transform.localEulerAngles = driveShiftNodes[currentNode].rotation; } } } internal class EngineDamagable : VehicleDamagable { public GameObject particleSystemCentre; public GameObject explosionCentre; public float SmokeParticleHPThreshold; public float explosionStrength = 200f; public GameObject particleSmokePrefab; public GameObject particleFirePrefab; public GameObject explosionPrefab; public GameObject fixedMesh; public GameObject damagedMesh; public GameObject destroyedMesh; private ParticleSystem particleSmoke; private ParticleSystem particleFire; public void Start() { GameObject val = Object.Instantiate<GameObject>(particleSmokePrefab, particleSystemCentre.transform); particleSmoke = val.GetComponent<ParticleSystem>(); particleSmoke.Stop(); GameObject val2 = Object.Instantiate<GameObject>(particleFirePrefab, particleSystemCentre.transform); particleFire = val2.GetComponent<ParticleSystem>(); particleFire.Stop(); } public override void onHealthChange() { if (HPLessThanPercent(SmokeParticleHPThreshold)) { if (!particleSmoke.IsAlive()) { particleSmoke.Play(); } } else { particleSmoke.Stop(); } if (health < 0f) { fixedMesh.SetActive(false); damagedMesh.SetActive(false); destroyedMesh.SetActive(true); } else if (HPLessThanPercent(SmokeParticleHPThreshold)) { fixedMesh.SetActive(false); damagedMesh.SetActive(true); destroyedMesh.SetActive(false); } else { fixedMesh.SetActive(true); damagedMesh.SetActive(false); destroyedMesh.SetActive(false); } } public override void onDeath() { //IL_002f: 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) particleFire.Play(); if ((Object)(object)explosionPrefab != (Object)null) { Object.Instantiate<GameObject>(explosionPrefab, explosionCentre.transform.position, explosionCentre.transform.rotation); } } public override void whileDead() { } public override void whileUndead() { } public override void Heal(float heal) { base.Heal(heal); } public override void HealPercent(float percentHeal) { base.HealPercent(percentHeal); } public override void onUndeath() { particleFire.Stop(); } public override void Damage() { } } internal class EnterVehicle : FVRInteractiveObject { public VehicleSeat vehicleSeat; } internal class ForkliftLift : FVRInteractiveObject { public Vector3 rotUpwards; public Vector3 rotRegular; public Vector3 rotDownwards; public GameObject lift; public float liftSpeed; public float minLiftY; public float maxLiftY; public void UpdateInteraction(FVRViveHand hand) { //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_0019: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Unknown result type (might be due to invalid IL or missing references) //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_008e: 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_0104: Unknown result type (might be due to invalid IL or missing references) Vector3 position = lift.transform.position; ((Component)this).transform.localEulerAngles = rotRegular; if (Vector2.Angle(hand.Input.TouchpadAxes, Vector2.up) <= 45f && hand.Input.TouchpadPressed && ((Vector2)(ref hand.Input.TouchpadAxes)).magnitude > 0.2f) { position.y += liftSpeed / 50f; ((Component)this).transform.localEulerAngles = rotUpwards; } if (Vector2.Angle(hand.Input.TouchpadAxes, Vector2.down) <= 45f && hand.Input.TouchpadPressed && ((Vector2)(ref hand.Input.TouchpadAxes)).magnitude > 0.2f) { position.y -= liftSpeed / 50f; ((Component)this).transform.localEulerAngles = rotDownwards; } if (position.y > maxLiftY) { position.y = maxLiftY; } else if (position.y < minLiftY) { position.y = minLiftY; } lift.transform.position = position; } } public class FuelNeedle : MonoBehaviour { public FuelTank tank; public GameObject needle; public bool isImperial; public Vector3 needleNoFuel; public Vector3 needleMaxFuel; public void Update() { //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Unknown result type (might be due to invalid IL or missing references) float num = tank.currentFuel; if (isImperial) { num *= 0.6213712f; } float num2 = Mathf.InverseLerp(0f, tank.maxFuel, num); needle.transform.localEulerAngles = Vector3.Lerp(needleNoFuel, needleMaxFuel, num2); } } public class FuelTank : VehicleDamagable { public float currentFuel; public float maxFuel; public float fuelUsagePer1000Rpm = 0.01f; public float leakMult; public GameObject explosionEffect; public bool BlowsOnDeath; public AudioSource leakSound; private new void FixedUpdate() { base.FixedUpdate(); float num = vehicle.motorRPM / 1000f; float num2 = num * (fuelUsagePer1000Rpm / 3000f); currentFuel -= num2; float num3 = Mathf.InverseLerp(maxHealth, 0f, health); currentFuel -= num3 * leakMult / 50f; if ((Object)(object)leakSound != (Object)null) { leakSound.volume = num3; } } public override void onDeath() { //IL_001f: 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) base.onDeath(); if (BlowsOnDeath) { Object.Instantiate<GameObject>(explosionEffect, ((Component)this).transform.position, ((Component)this).transform.rotation); } } public float AddFuel(float fuelAdded) { currentFuel += fuelAdded; float num = maxFuel - currentFuel; if (num <= 0f) { return 0f; } return num; } } } namespace H3VRUtils { internal class LockGun : MonoBehaviour { public FVRPhysicalObject Firearm; public GameObject LockPos; public void Update() { } } } namespace H3VRUtils.Vehicles { public class ParkingBrakeClick : FVRInteractiveObject { public VehicleControl vehicle; public Vector3 positionOff; public Vector3 positionOn; public Vector3 rotationOff; public Vector3 rotationOn; public bool isOn; public VehicleAudioSet audioSet; } public class SpedometerNeedle : MonoBehaviour { public VehicleControl vehicle; public GameObject needle; public bool isImperial; public float maxSpeed; public Vector3 needleNoSpeed; public Vector3 needleMaxSpeed; public void Update() { //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Unknown result type (might be due to invalid IL or missing references) float num = Mathf.Abs(vehicle.speed); if (isImperial) { num *= 0.6213712f; } float num2 = Mathf.InverseLerp(0f, maxSpeed, num); needle.transform.localEulerAngles = Vector3.Lerp(needleNoSpeed, needleMaxSpeed, num2); } } internal class SteeringWheel : FVRInteractiveObject { public VehicleControl vehicle; public float resetLerpSpeed; public float maxRot; public bool isBraking; public bool reverseRot; [Header("Debug Values")] public Text rotText; public float rot; public float rh; public float lr; public float inlerp; public float lerp; public float rotAmt; public VehicleAudioSet audioSet; public void BeginInteraction(FVRViveHand hand) { //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_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_0059: Unknown result type (might be due to invalid IL or missing references) Transform child = ((Component)this).transform.GetChild(0); child.parent = null; Vector3 localEulerAngles = ((Component)this).transform.localEulerAngles; ((Component)this).transform.LookAt(((Component)hand).transform); ((Component)this).transform.localEulerAngles = new Vector3(localEulerAngles.x, ((Component)this).transform.localEulerAngles.y, localEulerAngles.z); child.parent = ((Component)this).transform; } public void EndInteraction(FVRViveHand hand) { //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_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_0046: Unknown result type (might be due to invalid IL or missing references) Transform child = ((Component)this).transform.GetChild(0); child.parent = null; ((Component)this).transform.localEulerAngles = new Vector3(((Component)this).transform.localEulerAngles.x, 0f, ((Component)this).transform.localEulerAngles.z); child.parent = ((Component)this).transform; } public void UpdateInteraction(FVRViveHand hand) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_0088: Unknown result type (might be due to invalid IL or missing references) //IL_00e2: Unknown result type (might be due to invalid IL or missing references) //IL_00ba: Unknown result type (might be due to invalid IL or missing references) //IL_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) Vector3 localEulerAngles = ((Component)this).transform.localEulerAngles; ((Component)this).transform.LookAt(((Component)hand).transform); Vector3 localEulerAngles2 = ((Component)this).transform.localEulerAngles; rot = Mathf.DeltaAngle((float)Math.Round(localEulerAngles2.y), (float)Math.Round(localEulerAngles.y)); rotAmt += rot; if (rotAmt >= maxRot) { rotAmt = maxRot; ((Component)this).transform.localEulerAngles = localEulerAngles; } else if (rotAmt <= 0f - maxRot) { rotAmt = 0f - maxRot; ((Component)this).transform.localEulerAngles = localEulerAngles; } else { ((Component)this).transform.localEulerAngles = new Vector3(localEulerAngles.x, localEulerAngles2.y, localEulerAngles.z); } rh = localEulerAngles2.y; lr = localEulerAngles.y; SetRot(); if (Vector2.Angle(hand.Input.TouchpadAxes, -Vector2.up) <= 45f && hand.Input.TouchpadDown && ((Vector2)(ref hand.Input.TouchpadAxes)).magnitude > 0.3f) { isBraking = !isBraking; } float triggerFloat = hand.Input.TriggerFloat; if (isBraking) { vehicle.accel = 0f - triggerFloat; } else { vehicle.accel = triggerFloat; } } private void FixedUpdate() { //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_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_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_0096: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)base.m_hand != (Object)null) { float num = resetLerpSpeed; if (rotAmt > 0f) { num = 0f - num; } if (rotAmt > num || rotAmt < 0f - num) { rotAmt += num; ((Component)this).transform.localEulerAngles = new Vector3(((Component)this).transform.localEulerAngles.x, ((Component)this).transform.localEulerAngles.y + num, ((Component)this).transform.localEulerAngles.z); vehicle.accel = 0f; SetRot(); } } } private void SetRot() { if (rotAmt > 0f) { inlerp = Mathf.InverseLerp(0f, maxRot, rotAmt); lerp = 0f - Mathf.Lerp(0f, 1f, inlerp); } else { inlerp = Mathf.InverseLerp(0f, 0f - maxRot, rotAmt); lerp = Mathf.Lerp(0f, 1f, inlerp); } if (reverseRot) { lerp = 0f - lerp; } vehicle.steer = lerp; } } [CreateAssetMenu(fileName = "New Vehicle Audio Set", menuName = "Vehicles/AudioSet", order = 0)] public class VehicleAudioSet : ScriptableObject { private static AudioEvent defaultAE; public AudioEvent VehicleStart; public AudioEvent VehicleIdle; public AudioEvent VehicleStop; public AudioEvent HandbrakeUp; public AudioEvent HandbrakeDown; public AudioEvent ShiftDownGear; public AudioEvent RevLoop; public AudioEvent ShiftUpGear; public AudioEvent Brake; public AudioEvent BrakeLong; public AudioEvent PedalSwitchSound; static VehicleAudioSet() { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Expected O, but got Unknown //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_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) AudioEvent val = new AudioEvent(); val.PitchRange = new Vector2(0.98f, 1.04f); val.VolumeRange = new Vector2(0.98f, 1.04f); val.ClipLengthRange = new Vector2(1f, 1f); defaultAE = val; } } } public enum ControlMode { simple = 1, touch } public class VehicleControl : MonoBehaviour { [Serializable] public class CarWheels { public ConnectWheel wheels; } [Serializable] public class ConnectWheel { public bool frontWheelDrive = true; public Transform frontRight; public Transform frontLeft; public WheelSetting frontSetting; public bool backWheelDrive = true; public Transform backRight; public Transform backLeft; public WheelSetting rearSetting; } [Serializable] public class WheelSetting { public float Radius = 0.4f; public float Weight = 1000f; public float Distance = 0.2f; } [Serializable] public class CarLights { public Light[] brakeLights; public Light[] reverseLights; } [Serializable] public class CarSounds { public AudioSource IdleEngine; public AudioSource LowEngine; public AudioSource HighEngine; public float minPitch = 1f; public float maxPitch = 10f; public AudioSource nitro; public AudioSource switchGear; } [Serializable] public class CarParticles { public GameObject brakeParticlePerfab; public ParticleSystem shiftParticle1; public ParticleSystem shiftParticle2; private GameObject[] wheelParticle = (GameObject[])(object)new GameObject[4]; } [Serializable] public class CarSetting { public bool showNormalGizmos = false; public Transform carSteer; public HitGround[] hitGround; public List<Transform> cameraSwitchView; public float springs = 25000f; public float dampers = 1500f; public float carPower = 120f; public float shiftPower = 150f; public float brakePower = 8000f; public Vector3 shiftCentre = new Vector3(0f, -0.8f, 0f); public float maxSteerAngle = 25f; public float shiftDownRPM = 1500f; public float shiftUpRPM = 2500f; public float idleRPM = 500f; public float stiffness = 2f; public bool automaticGear = true; public float[] gears = new float[6] { -10f, 9f, 6f, 4.5f, 3f, 2.5f }; public float LimitBackwardSpeed = 60f; public float LimitForwardSpeed = 220f; } [Serializable] public class HitGround { public string tag = "street"; public bool grounded = false; public AudioClip brakeSound; public AudioClip groundSound; public Color brakeColor; } private class WheelComponent { public Transform wheel; public WheelCollider collider; public Vector3 startPos; public float rotation = 0f; public float rotation2 = 0f; public float maxSteer; public bool drive; public float pos_y = 0f; public WheelSetting settings; } public ControlMode controlMode = ControlMode.simple; public bool activeControl = false; public CarWheels carWheels; public CarLights carLights; public CarSounds carSounds; public CarParticles carParticles; public CarSetting carSetting; [HideInInspector] public float steer = 0f; [HideInInspector] public float accel = 0f; [HideInInspector] public bool brake; private bool shifmotor; [HideInInspector] public float curTorque = 100f; [HideInInspector] public float powerShift = 100f; [HideInInspector] public bool shift; private float torque = 100f; [HideInInspector] public float speed = 0f; private float lastSpeed = -10f; private bool shifting = false; private float[] efficiencyTable = new float[22] { 0.6f, 0.65f, 0.7f, 0.75f, 0.8f, 0.85f, 0.9f, 1f, 1f, 0.95f, 0.8f, 0.7f, 0.6f, 0.5f, 0.45f, 0.4f, 0.36f, 0.33f, 0.3f, 0.2f, 0.1f, 0.05f }; private float efficiencyTableStep = 250f; private float Pitch; private float PitchDelay; private float shiftTime = 0f; private float shiftDelay = 0f; [HideInInspector] public int currentGear = 0; [HideInInspector] public bool NeutralGear = true; [HideInInspector] public float motorRPM = 0f; [HideInInspector] public bool Backward = false; [HideInInspector] public float accelFwd = 0f; [HideInInspector] public float accelBack = 0f; [HideInInspector] public float steerAmount = 0f; private float wantedRPM = 0f; private float w_rotate; private float slip; private float slip2 = 0f; private GameObject[] Particle = (GameObject[])(object)new GameObject[4]; private Vector3 steerCurAngle; private Rigidbody myRigidbody; private WheelComponent[] wheels; public bool isOn = true; public bool isForciblyOff = false; private WheelComponent SetWheelComponent(Transform wheel, float maxSteer, bool drive, float pos_y, WheelSetting setting) { //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Expected O, but got Unknown //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Expected O, but got Unknown //IL_00b0: Unknown result type (might be due to invalid IL or missing references) //IL_00b5: Unknown result type (might be due to invalid IL or missing references) WheelComponent wheelComponent = new WheelComponent(); GameObject val = new GameObject(((Object)wheel).name + "WheelCollider"); val.transform.parent = ((Component)this).transform; val.transform.position = wheel.position; val.transform.eulerAngles = ((Component)this).transform.eulerAngles; pos_y = val.transform.localPosition.y; WheelCollider val2 = (WheelCollider)val.AddComponent(typeof(WheelCollider)); wheelComponent.wheel = wheel; wheelComponent.collider = val.GetComponent<WheelCollider>(); wheelComponent.drive = drive; wheelComponent.pos_y = pos_y; wheelComponent.maxSteer = maxSteer; wheelComponent.startPos = val.transform.localPosition; wheelComponent.settings = setting; return wheelComponent; } private void Awake() { //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_00de: 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_013e: Unknown result type (might be due to invalid IL or missing references) //IL_0143: Unknown result type (might be due to invalid IL or missing references) //IL_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_01e2: Unknown result type (might be due to invalid IL or missing references) //IL_01e7: Unknown result type (might be due to invalid IL or missing references) //IL_0223: Unknown result type (might be due to invalid IL or missing references) //IL_0228: Unknown result type (might be due to invalid IL or missing references) //IL_0250: Unknown result type (might be due to invalid IL or missing references) //IL_027f: Unknown result type (might be due to invalid IL or missing references) //IL_0284: Unknown result type (might be due to invalid IL or missing references) //IL_02be: Unknown result type (might be due to invalid IL or missing references) //IL_02c7: Unknown result type (might be due to invalid IL or missing references) //IL_02cc: Unknown result type (might be due to invalid IL or missing references) //IL_02fa: Unknown result type (might be due to invalid IL or missing references) if (carSetting.automaticGear) { NeutralGear = false; } myRigidbody = ((Component)((Component)this).transform).GetComponent<Rigidbody>(); wheels = new WheelComponent[4]; wheels[0] = SetWheelComponent(carWheels.wheels.frontRight, carSetting.maxSteerAngle, carWheels.wheels.frontWheelDrive, carWheels.wheels.frontRight.position.y, carWheels.wheels.frontSetting); wheels[1] = SetWheelComponent(carWheels.wheels.frontLeft, carSetting.maxSteerAngle, carWheels.wheels.frontWheelDrive, carWheels.wheels.frontLeft.position.y, carWheels.wheels.frontSetting); wheels[2] = SetWheelComponent(carWheels.wheels.backRight, 0f, carWheels.wheels.backWheelDrive, carWheels.wheels.backRight.position.y, carWheels.wheels.rearSetting); wheels[3] = SetWheelComponent(carWheels.wheels.backLeft, 0f, carWheels.wheels.backWheelDrive, carWheels.wheels.backLeft.position.y, carWheels.wheels.rearSetting); if (Object.op_Implicit((Object)(object)carSetting.carSteer)) { steerCurAngle = carSetting.carSteer.localEulerAngles; } WheelComponent[] array = wheels; foreach (WheelComponent wheelComponent in array) { WheelCollider collider = wheelComponent.collider; collider.suspensionDistance = wheelComponent.settings.Distance; JointSpring suspensionSpring = collider.suspensionSpring; suspensionSpring.spring = carSetting.springs; suspensionSpring.damper = carSetting.dampers; collider.suspensionSpring = suspensionSpring; collider.radius = wheelComponent.settings.Radius; collider.mass = wheelComponent.settings.Weight; WheelFrictionCurve val = collider.forwardFriction; ((WheelFrictionCurve)(ref val)).asymptoteValue = 5000f; ((WheelFrictionCurve)(ref val)).extremumSlip = 2f; ((WheelFrictionCurve)(ref val)).asymptoteSlip = 20f; ((WheelFrictionCurve)(ref val)).stiffness = carSetting.stiffness; collider.forwardFriction = val; val = collider.sidewaysFriction; ((WheelFrictionCurve)(ref val)).asymptoteValue = 7500f; ((WheelFrictionCurve)(ref val)).asymptoteSlip = 2f; ((WheelFrictionCurve)(ref val)).stiffness = carSetting.stiffness; collider.sidewaysFriction = val; } } public void TurnOnEngine(bool forcibly) { if (!isForciblyOff) { isOn = true; } else if (forcibly) { isForciblyOff = false; isOn = true; } } public void TurnOffEngine(bool forcibly) { isForciblyOff = forcibly; isOn = false; } public void ShiftTo(int newGear) { ((Component)carSounds.switchGear).GetComponent<AudioSource>().Play(); currentGear = newGear; if (currentGear == 0) { NeutralGear = true; } else { NeutralGear = false; } if (currentGear == -1) { currentGear = 0; } } public void ShiftUp(bool ignoreDelay) { float timeSinceLevelLoad = Time.timeSinceLevelLoad; if ((timeSinceLevelLoad < shiftDelay && !ignoreDelay) || currentGear >= carSetting.gears.Length - 1) { return; } ((Component)carSounds.switchGear).GetComponent<AudioSource>().Play(); if (!carSetting.automaticGear) { if (currentGear == 0) { if (NeutralGear) { currentGear++; NeutralGear = false; } else { NeutralGear = true; } } else { currentGear++; } } else { currentGear++; } shiftDelay = timeSinceLevelLoad + 1f; shiftTime = 1.5f; } public void ShiftDown(bool ignoreDelay) { float timeSinceLevelLoad = Time.timeSinceLevelLoad; if ((timeSinceLevelLoad < shiftDelay && !ignoreDelay) || (currentGear <= 0 && !NeutralGear)) { return; } ((Component)carSounds.switchGear).GetComponent<AudioSource>().Play(); if (!carSetting.automaticGear) { if (currentGear == 1) { if (!NeutralGear) { currentGear--; NeutralGear = true; } } else if (currentGear == 0) { NeutralGear = false; } else { currentGear--; } } else { currentGear--; } shiftDelay = timeSinceLevelLoad + 0.1f; shiftTime = 2f; } private void OnCollisionEnter(Collision collision) { //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_005a: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_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_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_00a1: 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_00cb: Unknown result type (might be due to invalid IL or missing references) //IL_00d0: Unknown result type (might be due to invalid IL or missing references) //IL_00e5: Unknown result type (might be due to invalid IL or missing references) //IL_00ea: 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) if (Object.op_Implicit((Object)(object)((Component)collision.transform.root).GetComponent<VehicleControl>())) { VehicleControl component = ((Component)collision.transform.root).GetComponent<VehicleControl>(); Vector3 relativeVelocity = collision.relativeVelocity; component.slip2 = Mathf.Clamp(((Vector3)(ref relativeVelocity)).magnitude, 0f, 10f); myRigidbody.angularVelocity = new Vector3((0f - myRigidbody.angularVelocity.x) * 0.5f, myRigidbody.angularVelocity.y * 0.5f, (0f - myRigidbody.angularVelocity.z) * 0.5f); myRigidbody.velocity = new Vector3(myRigidbody.velocity.x, myRigidbody.velocity.y * 0.5f, myRigidbody.velocity.z); } } private void OnCollisionStay(Collision collision) { if (Object.op_Implicit((Object)(object)((Component)collision.transform.root).GetComponent<VehicleControl>())) { ((Component)collision.transform.root).GetComponent<VehicleControl>().slip2 = 5f; } } private void Update() { } private void FixedUpdate() { //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_00b6: 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_0704: Unknown result type (might be due to invalid IL or missing references) //IL_0709: Unknown result type (might be due to invalid IL or missing references) //IL_0751: Unknown result type (might be due to invalid IL or missing references) //IL_075a: Unknown result type (might be due to invalid IL or missing references) //IL_075f: Unknown result type (might be due to invalid IL or missing references) //IL_079b: Unknown result type (might be due to invalid IL or missing references) //IL_0acf: Unknown result type (might be due to invalid IL or missing references) //IL_0ae0: Unknown result type (might be due to invalid IL or missing references) //IL_0ae5: Unknown result type (might be due to invalid IL or missing references) //IL_0fca: Unknown result type (might be due to invalid IL or missing references) //IL_0fd4: Unknown result type (might be due to invalid IL or missing references) //IL_0ee6: Unknown result type (might be due to invalid IL or missing references) //IL_0eed: Unknown result type (might be due to invalid IL or missing references) //IL_0ef2: Unknown result type (might be due to invalid IL or missing references) //IL_0f0c: Unknown result type (might be due to invalid IL or missing references) //IL_0f17: Unknown result type (might be due to invalid IL or missing references) //IL_0f1c: Unknown result type (might be due to invalid IL or missing references) //IL_0f25: Unknown result type (might be due to invalid IL or missing references) //IL_0fec: Unknown result type (might be due to invalid IL or missing references) //IL_0b3b: Unknown result type (might be due to invalid IL or missing references) //IL_0b40: Unknown result type (might be due to invalid IL or missing references) //IL_0d23: Unknown result type (might be due to invalid IL or missing references) if (!isOn) { accel = 0f; } Vector3 velocity = myRigidbody.velocity; speed = ((Vector3)(ref velocity)).magnitude * 2.7f; if (speed < lastSpeed - 10f && slip < 10f) { slip = lastSpeed / 15f; } lastSpeed = speed; if (slip2 != 0f) { slip2 = Mathf.MoveTowards(slip2, 0f, 0.1f); } myRigidbody.centerOfMass = carSetting.shiftCentre; if (!carWheels.wheels.frontWheelDrive && !carWheels.wheels.backWheelDrive) { accel = 0f; } if (Object.op_Implicit((Object)(object)carSetting.carSteer)) { carSetting.carSteer.localEulerAngles = new Vector3(steerCurAngle.x, steerCurAngle.y, steerCurAngle.z + steer * -120f); } if (carSetting.automaticGear && currentGear == 1 && accel < 0f) { if (speed < 5f) { ShiftDown(ignoreDelay: false); } } else if (carSetting.automaticGear && currentGear == 0 && accel > 0f) { if (speed < 5f) { ShiftUp(ignoreDelay: false); } } else if (carSetting.automaticGear && motorRPM > carSetting.shiftUpRPM && accel > 0f && speed > 10f && !brake) { ShiftUp(ignoreDelay: false); } else if (carSetting.automaticGear && motorRPM < carSetting.shiftDownRPM && currentGear > 1) { ShiftDown(ignoreDelay: false); } if (speed < 1f) { Backward = true; } if (currentGear != 0 || !Backward) { Backward = false; } Light[] brakeLights = carLights.brakeLights; foreach (Light val in brakeLights) { if (brake || accel < 0f || speed < 1f) { val.intensity = Mathf.MoveTowards(val.intensity, 8f, 0.5f); } else { val.intensity = Mathf.MoveTowards(val.intensity, 0f, 0.5f); } ((Behaviour)val).enabled = val.intensity != 0f; } Light[] reverseLights = carLights.reverseLights; foreach (Light val2 in reverseLights) { if (speed > 2f && currentGear == 0) { val2.intensity = Mathf.MoveTowards(val2.intensity, 8f, 0.5f); } else { val2.intensity = Mathf.MoveTowards(val2.intensity, 0f, 0.5f); } ((Behaviour)val2).enabled = val2.intensity != 0f; } wantedRPM = 5500f * accel * 0.1f + wantedRPM * 0.9f; float num = 0f; int num2 = 0; bool flag = false; int num3 = 0; WheelComponent[] array = wheels; WheelHit val4 = default(WheelHit); foreach (WheelComponent wheelComponent in array) { WheelCollider collider = wheelComponent.collider; if (wheelComponent.drive) { num = ((!NeutralGear && brake && currentGear < 2) ? (num + accel * carSetting.idleRPM) : (NeutralGear ? (num + carSetting.idleRPM * accel) : (num + collider.rpm))); num2++; } if (brake || accel < 0f) { if (accel < 0f || (brake && (wheelComponent == wheels[2] || wheelComponent == wheels[3]))) { if (brake && accel > 0f) { slip = Mathf.Lerp(slip, 5f, accel * 0.01f); } else if (speed > 1f) { slip = Mathf.Lerp(slip, 1f, 0.002f); } else { slip = Mathf.Lerp(slip, 1f, 0.02f); } wantedRPM = 0f; collider.brakeTorque = carSetting.brakePower; wheelComponent.rotation = w_rotate; } } else { float brakeTorque; if (accel == 0f || NeutralGear) { float num5 = (collider.brakeTorque = 1000f); brakeTorque = num5; } else { float num5 = (collider.brakeTorque = 0f); brakeTorque = num5; } collider.brakeTorque = brakeTorque; slip = ((!(speed > 0f)) ? (slip = Mathf.Lerp(slip, 0.01f, 0.02f)) : ((!(speed > 100f)) ? (slip = Mathf.Lerp(slip, 1.5f, 0.02f)) : (slip = Mathf.Lerp(slip, 1f + Mathf.Abs(steer), 0.02f)))); w_rotate = wheelComponent.rotation; } WheelFrictionCurve val3 = collider.forwardFriction; ((WheelFrictionCurve)(ref val3)).asymptoteValue = 5000f; ((WheelFrictionCurve)(ref val3)).extremumSlip = 2f; ((WheelFrictionCurve)(ref val3)).asymptoteSlip = 20f; ((WheelFrictionCurve)(ref val3)).stiffness = carSetting.stiffness / (slip + slip2); collider.forwardFriction = val3; val3 = collider.sidewaysFriction; ((WheelFrictionCurve)(ref val3)).stiffness = carSetting.stiffness / (slip + slip2); ((WheelFrictionCurve)(ref val3)).extremumSlip = 0.2f + Mathf.Abs(steer); collider.sidewaysFriction = val3; if (shift && currentGear > 1 && speed > 50f && shifmotor && Mathf.Abs(steer) < 0.2f) { if (powerShift == 0f) { shifmotor = false; } powerShift = Mathf.MoveTowards(powerShift, 0f, Time.deltaTime * 10f); carSounds.nitro.volume = Mathf.Lerp(carSounds.nitro.volume, 1f, Time.deltaTime * 10f); if (!carSounds.nitro.isPlaying) { ((Component)carSounds.nitro).GetComponent<AudioSource>().Play(); } curTorque = ((!(powerShift > 0f)) ? carSetting.carPower : carSetting.shiftPower); carParticles.shiftParticle1.emissionRate = Mathf.Lerp(carParticles.shiftParticle1.emissionRate, (float)((powerShift > 0f) ? 50 : 0), Time.deltaTime * 10f); carParticles.shiftParticle2.emissionRate = Mathf.Lerp(carParticles.shiftParticle2.emissionRate, (float)((powerShift > 0f) ? 50 : 0), Time.deltaTime * 10f); } else { if (powerShift > 20f) { shifmotor = true; } carSounds.nitro.volume = Mathf.MoveTowards(carSounds.nitro.volume, 0f, Time.deltaTime * 2f); if (carSounds.nitro.volume == 0f) { carSounds.nitro.Stop(); } powerShift = Mathf.MoveTowards(powerShift, 100f, Time.deltaTime * 5f); curTorque = carSetting.carPower; carParticles.shiftParticle1.emissionRate = Mathf.Lerp(carParticles.shiftParticle1.emissionRate, 0f, Time.deltaTime * 10f); carParticles.shiftParticle2.emissionRate = Mathf.Lerp(carParticles.shiftParticle2.emissionRate, 0f, Time.deltaTime * 10f); } wheelComponent.rotation = Mathf.Repeat(wheelComponent.rotation + Time.deltaTime * collider.rpm * 360f / 60f, 360f); wheelComponent.rotation2 = Mathf.Lerp(wheelComponent.rotation2, collider.steerAngle, 0.1f); wheelComponent.wheel.localRotation = Quaternion.Euler(wheelComponent.rotation, wheelComponent.rotation2, 0f); Vector3 localPosition = wheelComponent.wheel.localPosition; if (collider.GetGroundHit(ref val4)) { if (Object.op_Implicit((Object)(object)carParticles.brakeParticlePerfab)) { if ((Object)(object)Particle[num3] == (Object)null) { Particle[num3] = Object.Instantiate<GameObject>(carParticles.brakeParticlePerfab, wheelComponent.wheel.position, Quaternion.identity); ((Object)Particle[num3]).name = "WheelParticle"; Particle[num3].transform.parent = ((Component)this).transform; Particle[num3].AddComponent<AudioSource>(); Particle[num3].GetComponent<AudioSource>().maxDistance = 50f; Particle[num3].GetComponent<AudioSource>().spatialBlend = 1f; Particle[num3].GetComponent<AudioSource>().dopplerLevel = 5f; Particle[num3].GetComponent<AudioSource>().rolloffMode = (AudioRolloffMode)2; } ParticleSystem component = Particle[num3].GetComponent<ParticleSystem>(); bool flag2 = false; for (int l = 0; l < carSetting.hitGround.Length; l++) { if (((Component)((WheelHit)(ref val4)).collider).CompareTag(carSetting.hitGround[l].tag)) { flag2 = carSetting.hitGround[l].grounded; if ((brake || Mathf.Abs(((WheelHit)(ref val4)).sidewaysSlip) > 0.5f) && speed > 1f) { Particle[num3].GetComponent<AudioSource>().clip = carSetting.hitGround[l].brakeSound; } else if ((Object)(object)Particle[num3].GetComponent<AudioSource>().clip != (Object)(object)carSetting.hitGround[l].groundSound && !Particle[num3].GetComponent<AudioSource>().isPlaying) { Particle[num3].GetComponent<AudioSource>().clip = carSetting.hitGround[l].groundSound; } Particle[num3].GetComponent<ParticleSystem>().startColor = carSetting.hitGround[l].brakeColor; } } if (flag2 && speed > 5f && !brake) { component.enableEmission = true; Particle[num3].GetComponent<AudioSource>().volume = 0.5f; if (!Particle[num3].GetComponent<AudioSource>().isPlaying) { Particle[num3].GetComponent<AudioSource>().Play(); } } else if ((brake || Mathf.Abs(((WheelHit)(ref val4)).sidewaysSlip) > 0.6f) && speed > 1f) { if (accel < 0f || ((brake || Mathf.Abs(((WheelHit)(ref val4)).sidewaysSlip) > 0.6f) && (wheelComponent == wheels[2] || wheelComponent == wheels[3]))) { if (!Particle[num3].GetComponent<AudioSource>().isPlaying) { Particle[num3].GetComponent<AudioSource>().Play(); } component.enableEmission = true; Particle[num3].GetComponent<AudioSource>().volume = 10f; } } else { component.enableEmission = false; Particle[num3].GetComponent<AudioSource>().volume = Mathf.Lerp(Particle[num3].GetComponent<AudioSource>().volume, 0f, Time.deltaTime * 10f); } } localPosition.y -= Vector3.Dot(wheelComponent.wheel.position - ((WheelHit)(ref val4)).point, ((Component)this).transform.TransformDirection(0f, 1f, 0f) / ((Component)this).transform.lossyScale.x) - collider.radius; localPosition.y = Mathf.Clamp(localPosition.y, -10f, wheelComponent.pos_y); flag = flag || wheelComponent.drive; } else { if ((Object)(object)Particle[num3] != (Object)null) { ParticleSystem component2 = Particle[num3].GetComponent<ParticleSystem>(); component2.enableEmission = false; } localPosition.y = wheelComponent.startPos.y - wheelComponent.settings.Distance; myRigidbody.AddForce(Vector3.down * 5000f); } num3++; wheelComponent.wheel.localPosition = localPosition; } if (num2 > 1) { num /= (float)num2; } motorRPM = 0.95f * motorRPM + 0.05f * Mathf.Abs(num * carSetting.gears[currentGear]); if (motorRPM > 5500f) { motorRPM = 5200f; } int num7 = (int)(motorRPM / efficiencyTableStep); if (num7 >= efficiencyTable.Length) { num7 = efficiencyTable.Length - 1; } if (num7 < 0) { num7 = 0; } float num8 = curTorque * carSetting.gears[currentGear] * efficiencyTable[num7]; WheelComponent[] array2 = wheels; foreach (WheelComponent wheelComponent2 in array2) { WheelCollider collider2 = wheelComponent2.collider; if (wheelComponent2.drive) { if (Mathf.Abs(collider2.rpm) > Mathf.Abs(wantedRPM)) { collider2.motorTorque = 0f; } else { float motorTorque = collider2.motorTorque; if (!brake && accel != 0f && !NeutralGear) { if ((speed < carSetting.LimitForwardSpeed && currentGear > 0) || (speed < carSetting.LimitBackwardSpeed && currentGear == 0)) { collider2.motorTorque = motorTorque * 0.9f + num8 * 1f; } else { collider2.motorTorque = 0f; collider2.brakeTorque = 2000f; } } else { collider2.motorTorque = 0f; } } } if (brake || slip2 > 2f) { collider2.steerAngle = Mathf.Lerp(collider2.steerAngle, steer * wheelComponent2.maxSteer, 0.02f); continue; } float num9 = Mathf.Clamp(speed / carSetting.maxSteerAngle, 1f, carSetting.maxSteerAngle); collider2.steerAngle = steer * (wheelComponent2.maxSteer / num9); } Pitch = Mathf.Clamp(1.2f + (motorRPM - carSetting.idleRPM) / (carSetting.shiftUpRPM - carSetting.idleRPM), 1f, 10f); shiftTime = Mathf.MoveTowards(shiftTime, 0f, 0.1f); if (Pitch == 1f) { carSounds.IdleEngine.volume = Mathf.Lerp(carSounds.IdleEngine.volume, 1f, 0.1f); carSounds.LowEngine.volume = Mathf.Lerp(carSounds.LowEngine.volume, 0.5f, 0.1f); carSounds.HighEngine.volume = Mathf.Lerp(carSounds.HighEngine.volume, 0f, 0.1f); } else { carSounds.IdleEngine.volume = Mathf.Lerp(carSounds.IdleEngine.volume, 1.8f - Pitch, 0.1f); if ((Pitch > PitchDelay || accel > 0f) && shiftTime == 0f) { carSounds.LowEngine.volume = Mathf.Lerp(carSounds.LowEngine.volume, 0f, 0.2f); carSounds.HighEngine.volume = Mathf.Lerp(carSounds.HighEngine.volume, 1f, 0.1f); } else { carSounds.LowEngine.volume = Mathf.Lerp(carSounds.LowEngine.volume, 0.5f, 0.1f); carSounds.HighEngine.volume = Mathf.Lerp(carSounds.HighEngine.volume, 0f, 0.2f); } carSounds.HighEngine.pitch = Pitch; carSounds.LowEngine.pitch = Pitch; PitchDelay = Pitch; } if (!isOn) { carSounds.IdleEngine.volume = 0f; carSounds.LowEngine.volume = 0f; carSounds.HighEngine.volume = 0f; } } private void OnDrawGizmos() { //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_0046: 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_0061: 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_0075: 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_0099: 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_00b1: Unknown result type (might be due to invalid IL or missing references) if (carSetting.showNormalGizmos && !Application.isPlaying) { Matrix4x4 matrix = Matrix4x4.TRS(((Component)this).transform.position, ((Component)this).transform.rotation, ((Component)this).transform.lossyScale); Gizmos.matrix = matrix; Gizmos.color = new Color(1f, 0f, 0f, 0.5f); Gizmos.DrawCube(Vector3.up / 1.5f, new Vector3(2.5f, 2f, 6f)); Gizmos.DrawSphere(carSetting.shiftCentre / ((Component)this).transform.lossyScale.x, 0.2f); } } } namespace H3VRUtils.Vehicles { [Serializable] public class VehicleDamagableMult { public float projectileMult = 1f; public float meleeMult = 1f; public float explosionMult = 1f; public float piercingMult = 1f; public float cuttingMult = 1f; public float thermalMult = 1f; public float bluntMult = 1f; public float totalKineticMult = 1f; } public class VehicleDamagable : MonoBehaviour { public float health; public float maxHealth; public float minHealth; public VehicleDamagableMult dmgMult; public VehicleControl vehicle; public bool dead; private float prevhealth; public virtual void FixedUpdate() { if (health < 0f) { if (!dead) { onDeath(); dead = true; } whileDead(); } else { if (dead) { onUndeath(); dead = false; } whileUndead(); } if (health < minHealth) { health = minHealth; } if (health != prevhealth) { onHealthChange(); } prevhealth = health; } public virtual void onHealthChange() { } public bool HPLessThan(float num) { if (health < num) { return true; } return false; } public bool HPLessThanPercent(float num) { if (health < num * maxHealth) { return true; } return false; } public virtual void onDeath() { } public virtual void whileDead() { } public virtual void whileUndead() { } public virtual void onUndeath() { } public virtual void HealPercent(float percentHeal) { Heal(percentHeal * maxHealth); Debug.Log((object)("percenthealing for " + percentHeal)); } public virtual void Heal(float heal) { health += heal; Debug.Log((object)("Healed for " + heal)); } public virtual void Damage() { } public float getDamage() { return 0f; } } public class VehicleRepairTool : MonoBehaviour { public float percentHeal; private void OnCollisionEnter(Collision collision) { //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) Vector3 relativeVelocity = collision.relativeVelocity; if (!(((Vector3)(ref relativeVelocity)).magnitude < 2f)) { VehicleDamagable component = collision.gameObject.GetComponent<VehicleDamagable>(); if ((Object)(object)component != (Object)null) { component.HealPercent(percentHeal); } } } } internal class VehicleSeat : MonoBehaviour { public FVRViveHand hand; public GameObject SitPos; public GameObject EjectPos; public void Update() { //IL_002e: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)hand != (Object)null) { ((Component)hand.MovementManager).transform.position = SitPos.transform.position; } } } } namespace H3VRUtils { public class FVRInteractableObjectProxy : MonoBehaviour { } public class HandgunEjectionTrigger : FVRInteractiveObject { public Handgun hgReceiver; } } namespace H3VRUtils.Proxy { public class attachmentYFoldingStockProxy : FVRInteractableObjectProxy { } } namespace H3VRUtils.ProxyLoader { public class attachmentYFoldingStockProxyLoader : MonoBehaviour { } } namespace H3VRUtils { internal class ActivateSeveralFVRInteractiveAtOnce : FVRInteractiveObject { public List<FVRInteractiveObject> InteractiveObjects; } } namespace H3VRUtils.AlternatingMags { internal class AlternatingMagMount { public GameObject MagMountWhenActive; public GameObject MagMountWhenInactive; [HideInInspector] public FVRFireArmMagazine curmag; public FVRFireArm firearm; [HideInInspector] public bool IsActive; } internal class AlternatingMagSingleSwitch : FVRInteractiveObject { public GameObject transformOnInactive; public GameObject transformOnActive; public AlternatingMagsHandler MagHandler; [Tooltip("Use the relevant number in the MagHandler's list of MagMounts.")] public int ConnectedMagMount; public AudioEvent ClickAudio; public void FixedUpdate() { } } internal class AlternatingMagsHandler { public bool AlternateOnEachShot; public List<AlternatingMagMount> MagMounts; public FVRFireArm firearm; [HideInInspector] public int activeMagMount; } } namespace H3VRUtils.FVRInteractiveObjects { public class AttachableChargingHandle : MultipleChargingHandleClosedBolt { public FVRFireArmAttachment attachment; private ClosedBoltWeapon weapon; } internal class AutoRackOnMagLoad : MonoBehaviour { public FVRFireArm weapon; private Handgun hg; private ClosedBoltWeapon cbw; private OpenBoltReceiver obr; private bool WasLoaded; public void Start() { if (weapon is Handgun) { ref Handgun reference = ref hg; FVRFireArm obj = weapon; reference = (Handgun)(object)((obj is Handgun) ? obj : null); } if (weapon is ClosedBoltWeapon) { ref ClosedBoltWeapon reference2 = ref cbw; FVRFireArm obj2 = weapon; reference2 = (ClosedBoltWeapon)(object)((obj2 is ClosedBoltWeapon) ? obj2 : null); } if (weapon is Handgun) { ref OpenBoltReceiver reference3 = ref obr; FVRFireArm obj3 = weapon; reference3 = (OpenBoltReceiver)(object)((obj3 is OpenBoltReceiver) ? obj3 : null); } } public void FixedUpdate() { if ((Object)(object)weapon.Magazine != (Object)null) { if (!WasLoaded) { if ((Object)(object)hg != (Object)null) { } if ((Object)(object)cbw != (Object)null) { } if (!((Object)(object)obr != (Object)null)) { } } WasLoaded = true; } else { WasLoaded = false; } } } } namespace H3VRUtils { internal class BetterMagReleaseLatch : MonoBehaviour { [FormerlySerializedAs("FireArm")] public FVRFireArm fireArm; [FormerlySerializedAs("Joint")] public HingeJoint joint; private float _timeSinceLastCollision = 6f; [Tooltip("Greatly reduce what you think it may be. I recommend 2 for Sensitivity.")] public float jointReleaseSensitivity = 2f; [HideInInspector] public float jointAngle; [FormerlySerializedAs("_jointReleaseSensitivityAbove")] [HideInInspector] public float jointReleaseSensitivityAbove; [FormerlySerializedAs("_jointReleaseSensitivityBelow")] [HideInInspector] public float jointReleaseSensitivityBelow; private bool _isMagazineNotNull; [HideInInspector] public float basex; } public class BreakOpenFlareGun : FVRFireArm { [Header("Flaregun Params")] public Renderer[] GunUndamaged; public Renderer[] GunDamaged; public FVRFireArmChamber Chamber; public Axis HingeAxis; public Transform Hinge; public float RotOut = 35f; public bool CanUnlatch = true; public bool IsHighPressureTolerant; private bool m_isHammerCocked; private bool m_isTriggerReset = true; private bool m_isLatched = true; private bool m_isDestroyed; private float TriggerFloat; public Transform Hammer; public bool HasVisibleHammer = true; public bool CanCockHammer = true; public bool CocksOnOpen; private float m_hammerXRot; public Axis HammerAxis; public InterpStyle HammerInterp = (InterpStyle)1; public float HammerMinRot; public float HammerMaxRot = -70f; public Transform Trigger; public Vector2 TriggerForwardBackRots; public Transform Muzzle; public ParticleSystem SmokePSystem; public ParticleSystem DestroyPSystem; public bool DeletesCartridgeOnFire; } } namespace H3VRUtils.FVRInteractiveObjects { internal class GoToNearestSosig : MonoBehaviour { public float speed; public Rigidbody rigidbody; [Tooltip("Change this if you want the object to throw itself to a different tag")] public string TagOverride; public void Start() { //IL_004b: 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_00c6: Unknown result type (might be due to invalid IL or missing references) if (string.IsNullOrEmpty(TagOverride)) { TagOverride = "AgentBody"; } GameObject[] array = GameObject.FindGameObjectsWithTag(TagOverride); if (array.Length == 0) { return; } GameObject val = null; float num = 999999f; for (int i = 0; i < array.Length; i++) { float num2 = Vector3.Distance(((Component)this).transform.position, array[i].transform.position); if (num2 < num) { val = array[i]; num = num2; } } if ((Object)(object)val == (Object)null) { Debug.LogError((object)"The nearest sosig is over a full 1,000 kms away, what the fuck are you doing?"); return; } ((Component)this).transform.LookAt(val.transform); rigidbody.velocity = new Vector3(0f, 0f, speed); } } public class GrenadeOneHandArm : MonoBehaviour { public PinnedGrenade grenade; [Tooltip("Trigger is a terrible idea for this. Please don't use trigger. I mean, i can't stop you, but i dont recommend it.")] public H3VRUtilsMagRelease.TouchpadDirType dirType; private Vector2 dir; public bool kickOutLever; } } namespace H3VRUtils { public class H3VRUtilsMagRelease : FVRInteractiveObject { public enum TouchpadDirType { Up, Down, Left, Right, Trigger, NoDirection } public ClosedBoltWeapon ClosedBoltReceiver; public OpenBoltReceiver OpenBoltWeapon; public Handgun HandgunReceiver; public BoltActionRifle BoltActionWeapon; [HideInInspector] public int WepType; [HideInInspector] public bool DisallowEjection; private Collider col; public bool PressDownToRelease; public TouchpadDirType TouchpadDir; [HideInInspector] public Vector2 dir; } internal class H3VRUtilsPhysBoltRelease : FVRInteractiveObject { public enum TouchpadDirType { Up, Down, Left, Right, Trigger } public ClosedBoltWeapon ClosedBoltReceiver; [HideInInspector] public OpenBoltReceiver OpenBoltWeapon; [HideInInspector] public Handgun HandgunReceiver; public bool ButtonPressToRelease; public TouchpadDirType TouchpadDir; [HideInInspector] public int WepType = 0; } internal class HandgunSecondarySwitch : FVRInteractiveObject { public Handgun Weapon; public int CurModeIndex; public int ModeIndexToSub = 1; public Transform SelctorSwitch; public Axis Axis; public InterpStyle InterpStyle; public FireSelectorMode[] Modes; } } namespace H3VRUtils.FVRInteractiveObjects { public class MultipleChargingHandleClosedBolt : ClosedBoltHandle { public void BeginInteraction(FVRViveHand hand) { if (!((Object)(object)((FVRInteractiveObject)base.Weapon.Handle).m_hand != (Object)null)) { base.Weapon.Handle = (ClosedBoltHandle)(object)this; } } } } namespace H3VRUtils.Weapons.NadeCup { internal class NadeCupLauncher : MonoBehaviour { public FVRFireArmChamber mainChamber; public FVRFireArmChamber nadeCup; public bool alreadyFired; } } namespace H3VRUtils { internal class OpenBoltBurstFire : MonoBehaviour { public OpenBoltReceiver Receiver; [Tooltip("Selector setting position that will be burst. Remember, selectors go pos: 0, 1 ,2, not 1, 2, 3")] public int SelectorSetting; public int BurstAmt; private int BurstSoFar; private bool wasLoaded; public void Start() { //IL_0014: Unknown result type (might be due to invalid IL or missing references) Receiver.FireSelector_Modes[SelectorSetting].ModeType = (FireSelectorModeType)2; } public void Update() { } public void lockUp() { //IL_0014: Unknown result type (might be due to invalid IL or missing references) Receiver.FireSelector_Modes[SelectorSetting].ModeType = (FireSelectorModeType)0; } public void unLock() { //IL_001b: Unknown result type (might be due to invalid IL or missing references) BurstSoFar = 0; Receiver.FireSelector_Modes[SelectorSetting].ModeType = (FireSelectorModeType)2; } } internal class AttachmentModifyFirearm : MonoBehaviour { public enum actionType { attach, detach } public enum CapType { AddTo, SetTo } private FVRFireArmAttachment attachment; private FVRFireArm weapon; [Header("Recoil Modifier")] public bool ChangesRecoil; private FVRFireArmRecoilProfile originalRecoil; public FVRFireArmRecoilProfile modifiedRecoil; [Header("Magazine Modifer")] public bool ChangesMagCapacity; private int prevCapacity; public CapType CapacityModifierType; [Tooltip("Keep it off unless you're sure it should apply to non-internal mags.")] public bool applyToNonInternalMags; public int setCapacityTo; [Header("Bolt Speed Modifier")] public bool ChangesBoltSpeed; public bool ChangesBoltSpeedForward; public bool ChangesBoltSpeedRearward; public bool ChangesBoltSpeedStiffness; public CapType BoltSpeedModifierType; public float BoltSpeedForward; private float prevBoltSpeedForward; public float BoltSpeedBackwards; private float prevBoltSpeedBackwards; public float BoltSpringStiffness; private float prevBoltSpringStiffness; [HideInInspector] public bool ChangesSpread; [HideInInspector] public float spreadmult; [Header("GrabPos Modifier")] public bool ChangesGrabPos; public Transform NewPoseOverride; private Transform oldPoseOverride; public Transform NewPoseOverrideTouch; private Transform oldPoseOverrideTouch; } internal class DisplayOnAttached : MonoBehaviour { public GameObject displayOnAttach; public FVRFireArmAttachmentMount AttachmentMount; } internal class attachmentXFoldingStock : FVRFoldingStockXAxis { public FVRFireArmAttachment attachment; } public class attachmentYFoldingStock : FVRInteractiveObject { public enum StockPos { Closed, Mid, Open } [FormerlySerializedAs("Root")] public Transform root; [FormerlySerializedAs("Stock")] public Transform stock; public float minRot; public float maxRot; [Tooltip("Default 5; this is the angle diff at which point the stock clamps to closed/open. (AKA: if angle is 4, and minRot is 0, the difference is less than 5, so it just clamps to 0.)")] public float clampStrength = 5f; [FormerlySerializedAs("m_curPos")] public StockPos mCurPos; [FormerlySerializedAs("m_lastPos")] public StockPos mLastPos; public bool isMinClosed = true; [FormerlySerializedAs("FireArm")] [Tooltip("Leave as null if attachment.")] public FVRFireArm fireArm; public FVRFireArmAttachment attachment; [Header("Alternate Use Settings")] [Tooltip("If true, it will not affect the stock point.")] public bool isNotAttachment; public bool forBreakOpenFlareGun; public BreakOpenFlareGun flareGun; public float _rotAngle; [HideInInspector] public Vector3 lhs; public GameObject hand; public void Update() { //IL_000c: 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_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_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) //IL_005f: 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) //IL_006b: 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_01fe: Unknown result type (might be due to invalid IL or missing references) //IL_0178: Unknown result type (might be due to invalid IL or missing references) //IL_0253: Unknown result type (might be due to invalid IL or missing references) //IL_022e: Unknown result type (might be due to invalid IL or missing references) //IL_01cd: 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_0272: Unknown result type (might be due to invalid IL or missing references) //IL_0277: Unknown result type (might be due to invalid IL or missing references) Vector3 val = hand.transform.position - root.position; Vector3 val2 = Vector3.ProjectOnPlane(val, root.up); val = ((Vector3)(ref val2)).normalized; Vector3 val3 = -((Component)root).transform.forward; _rotAngle = Mathf.Atan2(Vector3.Dot(root.up, Vector3.Cross(val3, val)), Vector3.Dot(val3, val)) * 57.29578f; if (Mathf.Abs(_rotAngle - minRot) < 5f && Mathf.Abs(_rotAngle - minRot) < 5f) { _rotAngle = minRot; } if (Mathf.Abs(_rotAngle - maxRot) < 5f) { _rotAngle = maxRot; } if (!(_rotAngle >= minRot) || !(_rotAngle <= maxRot)) { return; } stock.localEulerAngles = new Vector3(0f, _rotAngle, 0f); float num = Mathf.InverseLerp(minRot, maxRot, _rotAngle); if (!((Object)(object)fireArm != (Object)null)) { return; } if (isMinClosed) { if (num < 0.02f) { mCurPos = (StockPos)0; if (isNotAttachment) { fireArm.HasActiveShoulderStock = false; } } else if (num > 0.9f) { mCurPos = (StockPos)2; if (isNotAttachment) { fireArm.HasActiveShoulderStock = true; } } else { mCurPos = (StockPos)1; if (isNotAttachment) { fireArm.HasActiveShoulderStock = false; } } } else if (num < 0.1f) { mCurPos = (StockPos)2; if (isNotAttachment) { fireArm.HasActiveShoulderStock = true; } } else if (num > 0.98f) { mCurPos = (StockPos)0; if (isNotAttachment) { fireArm.HasActiveShoulderStock = false; } } else { mCurPos = (StockPos)1; if (isNotAttachment) { fireArm.HasActiveShoulderStock = false; } } mLastPos = mCurPos; } private void OnDrawGizmosSelected() { //IL_00f4: Unknown result type (might be due to invalid IL or missing references) //IL_0104: Unknown result type (might be due to invalid IL or missing references) //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_0113: 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_012d: Unknown result type (might be due to invalid IL or missing references) //IL_012e: 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_0156: Unknown result type (might be due to invalid IL or missing references) //IL_0160: 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_016b: 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_0194: 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_01aa: Unknown result type (might be due to invalid IL or missing references) //IL_01b5: Unknown result type (might be due to invalid IL or missing references) //IL_01ba: Unknown result type (might be due to invalid IL or missing references) //IL_01ca: Unknown result type (might be due to invalid IL or missing references) //IL_01dc: Unknown result type (might be due to invalid IL or missing references) //IL_01e1: Unknown result type (might be due to invalid IL or missing references) //IL_01ec: Unknown result type (might be due to invalid IL or missing references) //IL_01f1: 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_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_003f: 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_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_0081: 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_00c7: 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_00de: Unknown result type (might be due to invalid IL or missing references) if (Application.isPlaying) { Gizmos.color = new Color(0.1f, 0.3f, 0.9f); Gizmos.DrawWireCube(((Component)stock).transform.position, Vector3.one * 0.025f); Gizmos.color = new Color(0.1f, 0.3f, 0.9f, 0.5f); Gizmos.DrawCube(((Component)stock).transform.position, Vector3.one * 0.025f); float timeSinceLevelLoad = Time.timeSinceLevelLoad; Gizmos.color = new Color(0.1f, 0.7f, 0.9f, Mathf.Clamp01((0.5f - timeSinceLevelLoad) * 2f)); Gizmos.DrawWireCube(((Component)stock).transform.position, Vector3.one * (0.1f * (timeSinceLevelLoad + 0.5f))); } Vector3 val = ((Component)stock).transform.position + -((Component)stock).transform.forward; Gizmos.color = new Color(0.7f, 0.9f, 0.1f); Gizmos.DrawWireCube(val, Vector3.one * 0.02f); Gizmos.color = new Color(0.7f, 0.9f, 0.1f, 0.5f); Gizmos.DrawCube(val, Vector3.one * 0.02f); Gizmos.color = new Color(0.9f, 0.7f, 0.1f); Gizmos.DrawRay(((Component)this).transform.position, Quaternion.AngleAxis(minRot, ((Component)this).transform.right) * ((Component)this).transform.up); Gizmos.DrawRay(((Component)this).transform.position, Quaternion.AngleAxis(0f - maxRot, ((Component)this).transform.right) * ((Component)this).transform.up); } } } namespace H3VRUtils.customItems.shotClock { internal class shotClock : MonoBehaviour { public enum screen { shot, register, delay } public string stopclocktextstring; public Vector2 startingTimeWindow = new Vector2(2f, 5f); public float stopclock; public int shotsfired; public float regmaxdist = 0.5f; public GameObject startbutton; public GameObject stopbutton; public bool isClockOn; public bool isInDelayProcess; public Text stopclocktext; public Text lastshottext; public Text shotsfiredtext; public Text delaymintext; public Text delaymaxtext; private float waittime; public FVRFireArmChamber[] registery; private bool[] registerySpent; public Text[] weptext; public BoxCollider registertrigger; public GameObject[] chambersInScene; private bool alreadyInRegisteryFlag; public float[] distfromshotclock; public screen currentScreen; public void Awake() { registerySpent = new bool[11]; } public void startClockProcess() { waittime = Random.Range(startingTimeWindow.x, startingTimeWindow.y); isInDelayProcess = true; } private void Update() { if (isClockOn) { stopclock += Time.deltaTime; stopclocktext.text = updateStopClockTextString(); } if (isInDelayProcess) { stopclock += Time.deltaTime; if (stopclock > waittime) { isInDelayProcess = false; StartClock(); } } if (isClockOn || isInDelayProcess) { startbutton.SetActive(false); stopbutton.SetActive(true); } else { startbutton.SetActive(true); stopbutton.SetActive(false); } for (int i = 0; i < registery.Length; i++) { if (!((Object)(object)registery[i] != (Object)null)) { continue; } if (registery[i].IsSpent) { if (!registerySpent[i]) { registerySpent[i] = true; ShotDetected(); } } else { registerySpent[i] = false; } } } private void updateRegistery() { //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Unknown result type (might be due to invalid IL or missing references) chambersInScene = GameObject.FindGameObjectsWithTag("FVRFireArmChamber"); distfromshotclock = new float[chambersInScene.Length]; for (int i = 0; i < chambersInScene.Length; i++) { distfromshotclock[i] = Vector3.Distance(((Component)this).transform.position, chambersInScene[i].transform.position); if (!(distfromshotclock[i] < regmaxdist)) { continue; } FVRFireArmChamber component = chambersInScene[i].GetComponent<FVRFireArmChamber>(); FVRFireArmChamber[] array = registery; foreach (FVRFireArmChamber val in array) { if ((Object)(object)val != (Object)null && (Object)(object)val == (Object)(object)component) { alreadyInRegisteryFlag = true; } } if (alreadyInRegisteryFlag) { continue; } Debug.Log((object)("Ready to load " + chambersInScene[i])); for (int k = 0; k < registery.Length; k++) { if ((Object)(object)registery[k] == (Object)null) { registery[k] = chambersInScene[i].GetComponent<FVRFireArmChamber>(); Debug.Log((object)string.Concat(registery[k], " loaded successfully from ", distfromshotclock[i], " units away!")); break; } } updateRegisteryText(); } } public void updateRegisteryText() { for (int i = 0; i < registery.Length; i++) { if ((Object)(object)registery[i] != (Object)null) { weptext[i].text = ((object)((Component)registery[i]).transform.root).ToString(); } else { weptext[i].text = "EMPTY"; } } } public string updateStopClockTextString() { stopclocktextstring = ""; TimeSpan timeSpan = TimeSpan.FromSeconds(stopclock); if (timeSpan.Minutes < 10) { stopclocktextstring += "0"; } stopclocktextstring = stopclocktextstring + timeSpan.Minutes + ":"; if (timeSpan.Seconds < 10) { stopclocktextstring += "0"; } stopclocktextstring = stopclocktextstring + timeSpan.Seconds + ":"; if (timeSpan.Milliseconds < 100) { stopclocktextstring += "0"; if (timeSpan.Milliseconds < 10) { stopclocktextstring += "0"; } } stopclocktextstring += Math.Round((double)timeSpan.Milliseconds, 3); return stopclocktextstring; } public void StartClock() { isClockOn = true; stopclock = 0f; } public void StopClock() { isClockOn = false; stopclock = 0f; } public void ShotDetected() { if (isClockOn) { TimeSpan timeSpan = TimeSpan.FromSeconds(stopclock); lastshottext.text = updateStopClockTextString(); } } } internal class shotClockButton : FVRPhysicalObject { public enum buttonType { start, stop, register, delay } public shotClock shotclock; public bool pressed; public buttonType button; public void Update() { if (pressed) { pressed = false; SimpleInteraction(null); } } public void SimpleInteraction(FVRViveHand hand) { switch (button) { case buttonType.start: shotclock.startClockProcess(); break; case buttonType.stop: shotclock.StopClock(); break; case buttonType.register: break; case buttonType.delay: break; } } } } namespace H3VRUtils { internal class lockToHead : MonoBehaviour { public void Update() { } } } namespace H3VRUtils.MonoScripts.UIModifiers { public class DispBulletAmount : MonoBehaviour { [Header("Only fill out one of these.")] public FVRFireArm firearm; public FVRFireArmMagazine magazine; public FVRFireArmAttachment attachment; [Header("Ammo Counter Settings")] [Tooltip("Text to display ammo left in the gun.")] public Text UItext; [Tooltip("Text to display maximum ammo.")] public Text MaxAmmoText; [Tooltip("Text to display the type of ammo.")] public Text ammoTypeText; [Tooltip("Adds a minimum character count. See tooltip for MinCharLength for more.")] public bool AddMinCharLength; [Tooltip("i.e if MinCharLength is 2 and the amount of rounds left is 5, it will display 05 instead of 5.")] public int MinCharLength; [Tooltip("Will not instantly be the correct amount of rounds, but will tick up/down until it is.")] public bool enableDispLerp; [Tooltip("MaxAmmo will also lerp according to the DispLerpAmt")] public bool enableLerpForMaxAmmo; [Tooltip("EnabledObjects will also lerp according to the DispLerpAmt")] public bool enableLerpForEnabledObjects; [Tooltip("From 0-1. The % amount moved towards its correct amount every 50th of a second.")] [Range(0f, 0.2f)] public float DispLerpAmt; [Header("Alternate Displays")] [Tooltip("Enables enabling/disabling objects based on rounds left in mag.")] public bool EnabledObjects; [Tooltip("Object enabled when there is no magazine.")] public GameObject ObjectWhenEmpty; [Tooltip("Element no. corresponds to rounds left. 0 means no rounds, 1 means one round. Enables the 5th object if there are 5 rounds, and so on.")] public List<GameObject> Objects; [Tooltip("Enables all objects under the round count. Enables the 0th, 1st, 2nd, 3rd objects if there are 3 rounds left, and so on.")] public bool EnableAllUnderAmount; [Tooltip("Overrides Objects. #0 means Objects' #0 displays from 0% to #0%, #1 means Objects' #1 displays from #0% to #1%, etc- written normally, not mathmatically (e.g 57.32)")] public bool EnableBasedOnPercentage; public List<float> ObjectPercentages; private FVRFireArm _fa; private FVRFireArmMagazine _mag; private int lastAmountOfBullets; private int lastAmountOfMaxBullets; private int lastAmountOfBulletsForEnableObjects; } } namespace H3VRUtils.MonoScripts.VisualModifiers { internal class AnimPlayOnGrab : MonoBehaviour { public Animation animation; public FVRPhysicalObject Object; public string AnimNameOnGrab; public string AnimNameOnLetGo; private bool isGrabbed; public void Update() { if (animation.isPlaying) { return; } if ((Object)(object)((FVRInteractiveObject)Object).m_hand != (Object)null) { if (!isGrabbed) { animation.Play(AnimNameOnGrab); isGrabbed = true; } } else if (isGrabbed) { animation.Play(AnimNameOnLetGo); isGrabbed = false; } } } internal class ConstantSpin : MonoBehaviour { public GameObject spinnything; public float spinrate; public cullOnZLoc.dirType directionofspeen; public void FixedUpdate() { //IL_0003: 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) Vector3 val = default(Vector3); ((Vector3)(ref val))[(int)directionofspeen] = spinrate; spinnything.transform.Rotate(val); } } internal class CycleOnBoltRelease : MonoBehaviour { public FVRFireArmChamber chamber; public GameObject muzzle; public List<Transform> Locs; private int pointer; private bool wasFull; public void Update() { //IL_0064: 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) if (wasFull && !chamber.IsFull) { pointer++; if (pointer > Locs.Count) { pointer = 0; } muzzle.transform.position = Locs[pointer].position; muzzle.transform.rotation = Locs[pointer].rotation; } wasFull = chamber.IsFull; } } internal class FeedRamp : MonoBehaviour { public GameObject Carrier; public FVRFireArm firearm; public float CarrierDetectDistance; public Vector2 CarrierRots; public Transform CarrierComparePoint1; public Transform CarrierComparePoint2; private float m_curCarrierRot; private float m_tarCarrierRot; } } namespace H3VRUtils { internal class InvisibleMagOnLoad : MonoBehaviour { public FVRFireArmMagazine magazine; public void Update() { if ((Object)(object)magazine.FireArm != (Object)null) { ((Component)magazine.Viz).gameObject.SetActive(false); } else { ((Component)magazine.Viz).gameObject.SetActive(true); } } } public class MagFollower : MonoBehaviour { [Header("Only fill out one of the ones below.")] public FVRFireArmMagazine magazine; public FVRFireArmClip clip; public GameObject follower; [Header("Translation Mag Follower")] public bool UsesOneRoundPos; [Tooltip("The round count where the follower starts moving (e.g 20)")] public int StartAtRoundCount; [Tooltip("The round count where the follower stops moving (e.g 0)")] public int StopAtRoundCount; [Tooltip("The position where the follower should be when the magazine is full.")] public GameObject StartPos; [Tooltip("The position where the follower should be when the magazine has one round left.")] public GameObject OneRoundPos; [Tooltip("The position where the follower should be when the magazine is empty.")] public GameObject StopPos; [Header("Individual Point Mag Follower")] public bool UsesIndivdualPointMagFollower; [Tooltip("Top-to-bottom order, where the 0th position is when the magazine is empty. ")] public List<GameObject> Positions; [Header("Individual Mesh Replacement")] public bool UsesIndividualMeshReplacement; [Tooltip("Top-to-bottom order, where the 0th position is when the magazine is empty. ")] public List<Mesh> Meshes; private int magrounds; private MeshFilter followerFilter; public void Update() { if (magazine.m_numRounds != magrounds) { magrounds = magazine.m_numRounds; UpdateDisp(); } } public void Start() { followerFilter = follower.GetComponent<MeshFilter>(); } public void UpdateDisp() { //IL_0053: 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_0078: 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_012f: Unknown result type (might be due to invalid IL or missing references) //IL_015f: Unknown result type (might be due to invalid IL or missing references) //IL_01e4: Unknown result type (might be due to invalid IL or missing references) //IL_0214: Unknown result type (might be due to invalid IL or missing references) if (UsesOneRoundPos) { Transform transform = StopPos.transform; int num = StopAtRoundCount; if (UsesOneRoundPos) { transform = OneRoundPos.transform; num++; } follower.transform.position = Vector3.Lerp(StartPos.transform.position, transform.position, Mathf.InverseLerp((float)StartAtRoundCount, (float)num, (float)magazine.m_numRounds)); if (magazine.m_numRounds == 0) { follower.transform.position = StopPos.transform.position; } } if (UsesIndivdualPointMagFollower) { if (Positions.Count < magazine.m_numRounds || (Object)(object)Positions[magazine.m_numRounds] == (Object)null) { return; } follower.transform.position = Positions[magazine.m_numRounds].transform.position; follower.transform.rotation = Positions[magazine.m_numRounds].transform.rotation; } if (UsesIndivdualPointMagFollower) { if (Positions.Count < magazine.m_numRounds || (Object)(object)Positions[magazine.m_numRounds] == (Object)null) { return; } follower.transform.position = Positions[magazine.m_numRounds].transform.position; follower.transform.rotation = Positions[magazine.m_numRounds].transform.rotation; } if (UsesIndividualMeshReplacement && Meshes.Count >= magazine.m_numRounds && !((Object)(object)Meshes[magazine.m_numRounds] == (Object)null)) { followerFilter.mesh = Meshes[magazine.m_numRounds]; followerFilter.mesh = Meshes[magazine.m_numRounds]; } } } } namespace H3VRUtils.MonoScripts.VisualModifiers { public class ManipulateObject : MonoBehaviour { public enum dirtype { x, y, z, w } public enum transformtype { position, rotation, scale, quaternion, quaternionPresentedEuler } public enum dir { both, towardsStop, towardsStart } public enum StreamlinedDirType { AX_Button, BY_Button, Trigger } [Header("Object Being Observed")] public GameObject ObservedObject; public dirtype DirectionOfObservation; public transformtype TransformationTypeOfObservedObject; public float StartOfObservation; public float StopOfObservation; public dir ObservationDirection; [Header("Object Being Affected")] public GameObject AffectedObject; public dirtype DirectionOfAffection; public transformtype TransformationTypeOfAffectedObject; public float StartOfAffected; public float StopOfAffected; [Header("General Modifiers")] [Tooltip("Affected object will move itself over time to the expected position, instead of immediately. Recommended from 5-40. Defaults to 100 for effectively instant movement.")] public float LerpAmount = 100f; public bool usesCurve; [Tooltip("X/Y axis must be 0 to 1.")] public AnimationCurve Curve; [Header("Debug Values")] public float observationpoint; public float observationDistancePc; public float finalPoint; public float previousObservationDistancePc; public float previousFinalPoint; public float finalLerpAmt; private float rememberLerpPoint = -999f; [Header("Special Observations")] [Tooltip("When the observed object reaches or exceeds the stopofobservation, the affected object will snap back to the startofaffected, and will only reset when the observed object reaches the startofobserved.")] [Header("Snap Forwards")] public bool SnapForwardsOnMax; public bool SnappedForwards; public float SnapBackAt; [Tooltip("If off, it will 'unsnap' when under the bounds of Start Of Observation, Stop Of Observation, and Snap Back At. When on, it will unsnap when above all of those.")] public bool ResetIfOverBounds; [Tooltip("When on, it will lock when at its max, rather than snapping forward.")] public bool LockForward; [Header("Move On Touch Pad")] public bool ReadHandTouchpadMovement; public FVRInteractiveObject ItemToReadFrom; public H3VRUtilsMagRelease.TouchpadDirType DirToRead; public StreamlinedDirType DirToReadStreamlined; [Header("Move On Mag Loaded")] public bool ReadIfGunIsLoaded; public FVRFireArm FirearmToReadFrom; [Header("Move If Bolt Locked - Closed Bolt Only")] public bool ReadIfBoltIsLocked; public ClosedBolt BoltToReadFrom; [Header("Move If Specific Attachment Attached")] public bool MoveIfSpecificAttachmentAttached; public List<string> AttachmentIDs; public FVRFireArmAttachmentMount AttachmentMount; private int rememberAttached; private float lastDecision; [Header("Move If Object Held")] public bool MoveIfObjectHeld; public FVRInteractiveObject HeldObject; private bool _isObservedObjectNotNull; [Header("Move If Grenade Armed")] public bool MoveIfGrenadeArmed; public PinnedGrenade grenade; [Header("Move If Disabled")] public bool MoveIfDisabled; [Header("Move If Chamber Full")] public bool MoveIfChamberFull; public FVRFireArmChamber Chamber; public bool considerFullEvenIfRoundFired; [Header("Special Affected Things")] [Header("Move Attached Items")] public bool MoveAttachedItems; [Tooltip("NOTE: THIS ONLY APPLIES TO THE FIRST ATTACHMENT IN THE MOUNT.")] public FVRFireArmAttachmentMount MAImount; [Header("Disable If Observed Object Moved")] public bool DisableIfMoved; [Tooltip("The percentage (from 0-1, not 0-100) at which point it disables. NOTE: IF SCRIPT IS ON DISABLED OBJECT, WILL NOT REENABLE")] [Range(0f, 1f)] public float percentageCutoff; private void Start() { _isObservedObjectNotNull = (Object)(object)ObservedObject != (Object)null; } public void Update() { //IL_0056: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_007f: Unknown result type (might be due to invalid IL or missing references) //IL_0084: Unknown result type (might be due to invalid IL or missing references) //IL_00a8: Unknown result type (might be due to invalid IL or missing references) //IL_00ad: Unknown result type (might be due to invalid IL or missing references) //IL_00d1: Unknown result type (might be due to invalid IL or missing references) //IL_00d6: Unknown result type (might be due to invalid IL or missing references) //IL_00fb: 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_0227: Unknown result type (might be due to invalid IL or missing references) //IL_022c: Unknown result type (might be due to invalid IL or missing references) //IL_023c: Unknown result type (might be due to invalid IL or missing references) //IL_0241: Unknown result type (might be due to invalid IL or missing references) //IL_037b: Unknown result type (might be due to invalid IL or missing references) //IL_0381: Invalid comparison between Unknown and I4 //IL_024f: Unknown result type (might be due to invalid IL or missing references) //IL_0254: Unknown result type (might be due to invalid IL or missing references) //IL_038c: Unknown result type (might be due to invalid IL or missing references) //IL_0392: Invalid comparison between Unknown and I4 //IL_0262: Unknown result type (might be due to invalid IL or missing references) //IL_0267: Unknown result type (might be due to invalid IL or missing references) //IL_0275: Unknown result type (might be due to invalid IL or missing references) //IL_027a: Unknown result type (might be due to invalid IL or missing references) //IL_0748: Unknown result type (might be due to invalid IL or missing references) //IL_074d: Unknown result type (might be due to invalid IL or missing references) //IL_076d: Unknown result type (might be due to invalid IL or missing references) //IL_0784: Unknown result type (might be due to invalid IL or missing references) //IL_0789: Unknown result type (might be due to invalid IL or missing references) //IL_07a9: Unknown result type (might be due to invalid IL or missing references) //IL_07c0: Unknown result type (might be due to invalid IL or missing references) //IL_07c5: Unknown result type (might be due to invalid IL or missing references) //IL_07e5: Unknown result type (might be due to invalid IL or missing references) //IL_07fc: Unknown result type (might be due to invalid IL or missing references) //IL_0801: Unknown result type (might be due to invalid IL or missing references) //IL_0821: Unknown result type (might be due to invalid IL or missing references) //IL_0838: Unknown result type (might be due to invalid IL or missing references) //IL_083d: Unknown result type (might be due to invalid IL or missing references) //IL_085d: Unknown result type (might be due to invalid IL or missing references) previousObservationDistancePc = observationDistancePc; observationDistancePc = 0f; if (_isObservedObjectNotNull) { switch (TransformationTypeOfObservedObject) { case transformtype.position: { Vector3 localPosition = ObservedObject.transform.localPosition; observationpoint = ((Vector3)(ref localPosition))[(int)DirectionOfObservation]; break; } case transformtype.rotation: { Vector3 localEulerAngles = ObservedObject.transform.localEulerAngles; observationpoint = ((Vector3)(ref localEulerAngles))[(int)DirectionOfObservation]; break; } case transformtype.scale: { Vector3 localScale = ObservedObject.transform.localScale; observationpoint = ((Vector3)(ref localScale))[(int)DirectionOfObservation]; break; } case transformtype.quaternion: { Quaternion localRotation2 = ObservedObject.transform.localRotation; observationpoint = ((Quaternion)(ref localRotation2))[(int)DirectionOfObservation]; break; } case transformtype.quaternionPresentedEuler: { Quaternion localRotation = ObservedObject.transform.localRotation; observationpoint = ((Quaternion)(ref localRotation))[(int)DirectionOfObservation] * 180f; break; } } observationDistancePc = Mathf.InverseLerp(StartOfObservation, StopOfObservation, observationpoint); } if (SnapForwardsOnMax) { bool flag = observationpoint <= Math.Min(StopOfObservation, Math.Min(StartOfObservation, SnapBackAt)); bool flag2 = observationpoint >= Math.Max(StopOfObservation, Math.Max(StartOfObservation, SnapBackAt)); if (flag || flag2) { SnappedForwards = true; } if (SnappedForwards) { observationDistancePc = 0f; } if ((!flag && !ResetIfOverBounds) || (!flag2 && ResetIfOverBounds)) { SnappedForwards = false; } if (SnappedForwards && LockForward) { observationDistancePc = 1f; } } if (ReadHandTouchpadMovement) { Vector2 up = Vector2.up; bool flag3 = false; if (DirToRead == H3VRUtilsMagRelease.TouchpadDirType.Up) { up = Vector2.up; } if (DirToRead == H3VRUtilsMagRelease.TouchpadDirType.Down) { up = Vector2.down; } if (DirToRead == H3VRUtilsMagRelease.TouchpadDirType.Left) { up = Vector2.left; } if (DirToRead == H3VRUtilsMagRelease.TouchpadDirType.Right) { up = Vector2.right; } if (DirToRead == H3VRUtilsMagRelease.TouchpadDirType.Trigger) { flag3 = true; } if ((Object)(object)ItemToReadFrom.m_hand != (Object)null) { switch (DirToReadStreamlined) { case StreamlinedDirType.AX_Button: if (ItemToReadFrom.m_hand.Input.AXButtonPressed) { observationDistancePc = 1f; } break; case StreamlinedDirType.Trigger: if (ItemToReadFrom.m_hand.Input.TriggerDown) { observationDistancePc = 1f; } break; } } } if (ReadIfGunIsLoaded) { if ((Object)(object)FirearmToReadFrom.Magazine != (Object)null) { observationDistancePc = 1f; } else { observationDistancePc = 0f; } } if (ReadIfBoltIsLocked) { if ((int)BoltToReadFrom.CurPos == 2 && (int)BoltToReadFrom.LastPos == 2) { observationDistancePc = 1f; } else { observationDistancePc = 0f; } } if (MoveIfSpecificAttachmentAttached) { foreach (FVRFireArmAttachment attachments in AttachmentMount.AttachmentsList) { foreach (string attachmentID in AttachmentIDs) { if (((FVRPhysicalObject)attachments).ObjectWrapper.ItemID == attachmentID) { observationDistancePc = 1f; break; } } } } if (MoveIfObjectHeld) { if ((Object)(object)HeldObject.m_hand != (Object)null) { observationDistancePc = 1f; } else { observationDistancePc = 0f; } } if (MoveIfGrenadeArmed) { } if (MoveIfDisabled) { if (!ObservedObject.activeSelf) { observationDistancePc = 1f; } else { observationDistancePc = 0f; } } if (MoveIfChamberFull) { if (considerFullEvenIfRoundFired) { if (Chamber.IsFull) { observationDistancePc = 1f; } } else if (Chamber.IsFull && !Chamber.IsSpent) { observationDistancePc = 1f; } else { observationDistancePc = 0f; } } finalLerpAmt = Mathf.Lerp(previousObservationDistancePc, observationDistancePc, LerpAmount * Time.deltaTime); if (usesCurve) { finalLerpAmt = Curve.Evaluate(finalLerpAmt); } previousFinalPoint = finalPoint; finalPoint = Mathf.Lerp(StartOfAffected, StopOfAffected, finalLerpAmt); finalPoint = Mathf.Lerp(previousFinalPoint, finalPoint, LerpAmount * Time.deltaTime); bool flag4 = false; if (Math.Abs(rememberLerpPoint - finalPoint) < float.Epsilon) { flag4 = true; } if (!SnappedForwards) { if (finalPoint - rememberLerpPoint < 0f && ObservationDirection == dir.towardsStop) { flag4 = true; } if (finalPoint - rememberLerpPoint > 0f && ObservationDirection == dir.towardsStart) { flag4 = true; } } rememberLerpPoint = finalPoint; if (flag4) { return; } if (MoveAttachedItems) { } if (DisableIfMoved) { Debug.Log((object)(observationDistancePc + ", " + percentageCutoff)); if (observationDistancePc >= percentageCutoff) { Debug.Log((object)"Hi!"); AffectedObject.SetActive(false); } else { AffectedObject.SetActive(true); } } if ((Object)(object)AffectedObject != (Object)null) { Vector3 val; switch (TransformationTypeOfAffectedObject) { case transformtype.position: val = AffectedObject.transform.localPosition; ((Vector3)(ref val))[(int)DirectionOfAffection] = finalPoint; AffectedObject.transform.localPosition = val; break; case transformtype.rotation: val = AffectedObject.transform.localEulerAngles; ((Vector3)(ref val))[(int)DirectionOfAffection] = finalPoint; AffectedObject.transform.localEulerAngles = val; break; case transformtype.scale: val = AffectedObject.transform.localScale; ((Vector3)(ref val))[(int)DirectionOfAffection] = finalPoint; AffectedObject.transform.localScale = val; break; case transformtype.quaternion: { Quaternion rotation = AffectedObject.transform.rotation; ((Quaternion)(ref rotation))[(int)DirectionOfAffection] = finalPoint; AffectedObject.transform.localRotation = rotation; break; } case transformtype.quaternionPresentedEuler: val = AffectedObject.transform.localEulerAngles; ((Vector3)(ref val))[(int)DirectionOfAffection] = finalPoint; AffectedObject.transform.localEulerAngles = val; break; } } } } } namespace H3VRUtils.FVRInteractiveObjects { internal class YFoldingStockEndPiece : MonoBehaviour { public cullOnZLoc.dirType MainPieceDir; public GameObject MainPiece; public float MainPieceMinRot; public float MainPieceMaxRot; public cullOnZLoc.dirType EndPieceDir; public GameObject EndPiec