using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Configuration;
using BepInEx.Logging;
using HG.Reflection;
using KinematicCharacterController;
using On.RoR2;
using RiskOfOptions;
using RiskOfOptions.Options;
using RoR2;
using RoR2.Projectile;
using UnityEngine;
using UnityEngine.Networking;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: OptIn]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("SillyHitboxViewer")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+aa8ef4b1ba8bc68b7f54a8cfede973c12ee1b1ea")]
[assembly: AssemblyProduct("SillyHitboxViewer")]
[assembly: AssemblyTitle("SillyHitboxViewer")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace SillyHitboxViewer;
public class HitboxGroupRevealer : MonoBehaviour
{
private HitboxRevealer _hitboxPrefab;
private HitboxRevealer[] _revealers;
private bool _isMerc;
private int _revealBufferCount;
private bool _revealed;
public HitBoxGroup hitboxGroup { get; set; }
public void init(HitBoxGroup hitboxGroup_, HitboxRevealer hitboxPrefab_, GameObject attacker)
{
//IL_0030: Unknown result type (might be due to invalid IL or missing references)
//IL_003a: Expected I4, but got Unknown
hitboxGroup = hitboxGroup_;
_hitboxPrefab = hitboxPrefab_;
if (Object.op_Implicit((Object)(object)attacker))
{
CharacterBody component = attacker.GetComponent<CharacterBody>();
if (Object.op_Implicit((Object)(object)component))
{
_isMerc = checkMerc((int)component.bodyIndex);
}
}
if (Object.op_Implicit((Object)(object)((Component)hitboxGroup_).GetComponent<ProjectileDotZone>()))
{
_isMerc = true;
}
initVisaulizinators();
}
private bool checkMerc(int index)
{
return Utils.cfg_softenedCharacters.Contains(index);
}
private void initVisaulizinators()
{
_revealers = new HitboxRevealer[hitboxGroup.hitBoxes.Length];
for (int i = 0; i < hitboxGroup.hitBoxes.Length; i++)
{
HitboxRevealer hitboxRevealer = Object.Instantiate<HitboxRevealer>(_hitboxPrefab);
hitboxRevealer.init(boxType.HIT, ((Component)hitboxGroup.hitBoxes[i]).transform, _isMerc);
_revealers[i] = hitboxRevealer;
}
}
public void reveal(bool active)
{
if (active)
{
_revealBufferCount = 3;
}
if (_revealed != active)
{
_revealed = active;
for (int i = 0; i < _revealers.Length; i++)
{
_revealers[i]?.show(active);
}
}
}
private void FixedUpdate()
{
if (_revealBufferCount == 0)
{
reveal(active: false);
}
_revealBufferCount--;
}
private void OnDestroy()
{
reveal(active: false);
for (int i = 0; i < _revealers.Length; i++)
{
Object.Destroy((Object)(object)((Component)_revealers[i]).gameObject);
}
}
}
public enum boxType
{
HIT,
BLAST,
BULLET,
BULLET_THIN,
BULLET_POINT,
HURT
}
public class HitboxRevealer : MonoBehaviour
{
public static bool cfg_MercSoften;
public static float cfg_BoxAlpha = 0.22f;
public static float cfg_BulletAlpha = 0.32f;
public static float cfg_HurtAlpha = 0.22f;
public static float cfg_BlastShowTime = 0.2f;
public static float cfg_BulletShowTime = 0.5f;
public static bool cfg_ColorfulBullets = false;
public static bool cfg_UniformBullets = false;
public static float randomTimer;
public static bool showingAnyBoxes = true;
public static bool showingHitBoxes = true;
public static bool showingHurtBoxes = true;
public static bool showingKinos = true;
public static bool bulletModeEnabled = false;
[SerializeField]
private Renderer rend;
private MaterialPropertyBlock _matProperties;
private Color _matColor;
private Transform _overlapAttackTransform;
private bool spher;
private void Awake()
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_000c: Expected O, but got Unknown
_matProperties = new MaterialPropertyBlock();
rend.GetPropertyBlock(_matProperties);
rend.enabled = false;
}
private float getBoxAlpha(boxType box)
{
return box switch
{
boxType.BLAST => cfg_BoxAlpha,
boxType.BULLET => cfg_BulletAlpha,
boxType.BULLET_THIN => cfg_BulletAlpha * 1.5f,
boxType.BULLET_POINT => cfg_BulletAlpha * 2f,
boxType.HURT => cfg_HurtAlpha,
_ => cfg_BoxAlpha,
};
}
public HitboxRevealer init(boxType box, Transform boxParentTransform, bool isMerc = false)
{
//IL_001b: Unknown result type (might be due to invalid IL or missing references)
//IL_002c: Unknown result type (might be due to invalid IL or missing references)
//IL_003d: Unknown result type (might be due to invalid IL or missing references)
//IL_0115: Unknown result type (might be due to invalid IL or missing references)
//IL_011a: Unknown result type (might be due to invalid IL or missing references)
//IL_0137: Unknown result type (might be due to invalid IL or missing references)
_overlapAttackTransform = boxParentTransform;
((Component)this).transform.parent = boxParentTransform;
((Component)this).transform.localPosition = Vector3.zero;
((Component)this).transform.localRotation = Quaternion.identity;
((Component)this).transform.localScale = Vector3.one;
if (VRCompat.enabled && box == boxType.HIT)
{
((Component)this).transform.parent = null;
}
float a = getBoxAlpha(box);
float num = 0.6f;
float num2 = 0f;
float num3 = 1f;
if (isMerc && cfg_MercSoften)
{
a = 0.12f;
num = 0.4f;
num2 = 0.35f;
num3 = 0.9f;
}
if (box == boxType.BULLET || box == boxType.BULLET_THIN || box == boxType.BULLET_POINT)
{
if (!cfg_ColorfulBullets)
{
num2 = randomTimer * 10000f - (float)(int)(randomTimer * 10000f);
num3 = num2;
}
if (cfg_UniformBullets)
{
num2 = 0.5f;
num3 = num2;
}
}
_matColor = Random.ColorHSV(num2, num3, 0.5f, 0.5f, num, num);
_matColor.a = a;
_matProperties.SetColor("_Color", _matColor);
rend.SetPropertyBlock(_matProperties);
return this;
}
public void show(bool active)
{
active &= showingAnyBoxes && showingHitBoxes;
if (Object.op_Implicit((Object)(object)rend))
{
rend.enabled = active;
}
}
private void FixedUpdate()
{
//IL_0034: 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)
if (VRCompat.enabled && rend.enabled && Object.op_Implicit((Object)(object)_overlapAttackTransform))
{
((Component)this).transform.position = _overlapAttackTransform.position;
((Component)this).transform.rotation = _overlapAttackTransform.rotation;
}
}
public HitboxRevealer initKino(Transform capsuleTransform, CapsuleCollider capsuleCollider)
{
return initHurtbox(capsuleTransform, capsuleCollider, kino: true);
}
public HitboxRevealer initHurtbox(Transform capsuleTransform, CapsuleCollider capsuleCollider, bool kino = false)
{
//IL_0012: 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_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)
init(boxType.HURT, capsuleTransform);
((Component)this).transform.localPosition = capsuleCollider.center;
((Component)this).transform.localScale = new Vector3(capsuleCollider.radius * 2f, capsuleCollider.height / 2f, capsuleCollider.radius * 2f);
switch (capsuleCollider.direction)
{
case 0:
((Component)this).transform.localEulerAngles = new Vector3(0f, 0f, 90f);
break;
case 2:
((Component)this).transform.localEulerAngles = new Vector3(90f, 0f, 0f);
break;
}
if (kino)
{
kinoShow(active: true);
}
else
{
hurtboxShow(active: true);
}
return this;
}
public HitboxRevealer initHurtbox(Transform sphereTransform, SphereCollider sphereCollider)
{
//IL_0019: Unknown result type (might be due to invalid IL or missing references)
//IL_002a: Unknown result type (might be due to invalid IL or missing references)
//IL_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)
init(boxType.HURT, sphereTransform);
spher = true;
((Component)this).transform.localPosition = sphereCollider.center;
((Component)this).transform.localScale = Vector3.one * sphereCollider.radius * 2f;
hurtboxShow(active: true);
return this;
}
public HitboxRevealer initHurtbox(Transform boxTransform, BoxCollider boxCollider)
{
//IL_0012: 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)
init(boxType.HURT, boxTransform);
((Component)this).transform.localPosition = boxCollider.center;
((Component)this).transform.localScale = boxCollider.size;
hurtboxShow(active: true);
return this;
}
public void hurtboxShow(bool active)
{
active &= showingAnyBoxes && showingHurtBoxes;
if (Object.op_Implicit((Object)(object)rend))
{
rend.enabled = active;
}
}
public void kinoShow(bool active)
{
active &= showingAnyBoxes && showingKinos;
if (Object.op_Implicit((Object)(object)rend))
{
rend.enabled = active;
}
}
private void OnDestroy()
{
if (spher)
{
Utils.LogWarning("oy i die (a sphere (just to be clear))");
}
}
public HitboxRevealer initBlastBox(Vector3 blastPosition, float radius)
{
//IL_0011: Unknown result type (might be due to invalid IL or missing references)
//IL_001e: Unknown result type (might be due to invalid IL or missing references)
//IL_0024: 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)
init(boxType.BLAST, null);
((Component)this).transform.position = blastPosition;
((Component)this).transform.localScale = Vector3.one * radius * 2f;
blastboxShow(active: true, cfg_BlastShowTime);
return this;
}
public void blastboxShow(bool active, float showTime)
{
active &= showingAnyBoxes && showingHitBoxes;
if (Object.op_Implicit((Object)(object)rend))
{
rend.enabled = active;
}
((MonoBehaviour)this).StartCoroutine(timedRemoveBlast(showTime));
}
private IEnumerator timedRemoveBlast(float killTime)
{
yield return (object)new WaitForFixedUpdate();
yield return (object)new WaitForFixedUpdate();
_matColor *= 0.69f;
_matColor.a *= 1.449f;
_matProperties.SetColor("_Color", _matColor);
rend.SetPropertyBlock(_matProperties);
yield return (object)new WaitForSeconds(killTime);
if (Object.op_Implicit((Object)(object)((Component)this).gameObject))
{
Object.Destroy((Object)(object)((Component)this).gameObject);
}
}
public HitboxRevealer initBulletBox(Vector3 origin, Vector3 normal, float distance, float radius)
{
//IL_002b: Unknown result type (might be due to invalid IL or missing references)
//IL_003e: Unknown result type (might be due to invalid IL or missing references)
//IL_003f: Unknown result type (might be due to invalid IL or missing references)
//IL_0044: 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)
init((radius == 0f) ? boxType.BULLET_THIN : boxType.BULLET, null);
radius = Mathf.Max(radius, 0.05f);
((Component)this).transform.position = origin;
((Component)this).transform.LookAt(((Component)this).transform.TransformPoint(normal), Vector3.up);
((Component)this).transform.localScale = new Vector3(radius * 2f, radius * 2f, distance);
blastboxShow(active: true, cfg_BulletShowTime);
return this;
}
public HitboxRevealer initBulletPoint(Vector3 position, float radius)
{
//IL_0011: Unknown result type (might be due to invalid IL or missing references)
//IL_001e: Unknown result type (might be due to invalid IL or missing references)
//IL_0024: 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)
init(boxType.BULLET_POINT, null);
((Component)this).transform.position = position;
((Component)this).transform.localScale = Vector3.one * radius * 2f;
bulletPointBoxShow(active: true, bulletModeEnabled ? 100f : (cfg_BulletShowTime * 2.5f), cfg_BulletShowTime * 1.5f);
return this;
}
public void bulletPointBoxShow(bool active, float showTime, float shrinkTime)
{
active &= showingAnyBoxes && showingHitBoxes;
if (Object.op_Implicit((Object)(object)rend))
{
rend.enabled = active;
}
((MonoBehaviour)this).StartCoroutine(timedRemoveBulletPoint(showTime, shrinkTime));
}
private IEnumerator timedRemoveBulletPoint(float killTime, float shrinkTime)
{
yield return (object)new WaitForFixedUpdate();
yield return (object)new WaitForFixedUpdate();
_matColor *= 0.69f;
_matColor.a *= 1.449f;
_matProperties.SetColor("_Color", _matColor);
rend.SetPropertyBlock(_matProperties);
if (!bulletModeEnabled)
{
shrinkTime = killTime;
}
yield return (object)new WaitForSeconds(shrinkTime);
float shrink = ((Component)this).transform.localScale.x * 0.4f;
((Component)this).transform.localScale = Vector3.one * Mathf.Max(shrink, 0.1f);
if (killTime < shrinkTime)
{
Utils.LogError("can't wait for a negative time retard");
}
yield return (object)new WaitForSeconds(killTime - shrinkTime);
if (Object.op_Implicit((Object)(object)((Component)this).gameObject))
{
Object.Destroy((Object)(object)((Component)this).gameObject);
}
}
public void kill()
{
if (Object.op_Implicit((Object)(object)((Component)this).gameObject))
{
((MonoBehaviour)this).StopAllCoroutines();
Object.Destroy((Object)(object)((Component)this).gameObject);
}
}
}
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInPlugin("com.TheTimeSweeper.HitboxViewer", "Silly Hitbox Viewer", "1.5.4")]
public class HitboxViewerMod : BaseUnityPlugin
{
public static HitboxViewerMod instance;
public static ManualLogSource log;
private List<HitboxGroupRevealer> _hitboxGroupRevealers = new List<HitboxGroupRevealer>();
private Queue<HitboxRevealer> _revealerPool = new Queue<HitboxRevealer>();
private static int hitPoolStart = 50;
private static int totalPool = 0;
private Queue<HitboxRevealer> _blastPool = new Queue<HitboxRevealer>();
private static int blastPoolStart = 50;
private List<HitboxRevealer> _hurtboxRevealers = new List<HitboxRevealer>();
private List<HitboxRevealer> _kinoRevealers = new List<HitboxRevealer>();
private List<HitboxRevealer> _bulletHitPointRevealers = new List<HitboxRevealer>();
private HitboxRevealer _hitboxBoxPrefab;
private HitboxRevealer _hitboxNotBoxPrefab;
private HitboxRevealer _hitboxNotBoxPrefabSmol;
private HitboxRevealer _hitboxNotBoxPrefabTall;
private HitboxRevealer _hitboxNotBoxPrefabTallFlat;
private HitboxRevealer _hitboxNotBoxPrefabTallFlatSmol;
private void Awake()
{
//IL_00ef: Unknown result type (might be due to invalid IL or missing references)
//IL_00f9: Expected O, but got Unknown
//IL_0101: Unknown result type (might be due to invalid IL or missing references)
//IL_010b: Expected O, but got Unknown
//IL_0113: Unknown result type (might be due to invalid IL or missing references)
//IL_011d: Expected O, but got Unknown
//IL_0125: Unknown result type (might be due to invalid IL or missing references)
//IL_012f: Expected O, but got Unknown
//IL_0137: Unknown result type (might be due to invalid IL or missing references)
//IL_0141: Expected O, but got Unknown
//IL_0149: Unknown result type (might be due to invalid IL or missing references)
//IL_0153: Expected O, but got Unknown
//IL_015b: Unknown result type (might be due to invalid IL or missing references)
//IL_0165: Expected O, but got Unknown
instance = this;
log = ((BaseUnityPlugin)this).Logger;
log.LogWarning((object)"uh1");
populateAss();
Utils.doConfig();
log.LogWarning((object)"uh2");
Utils.doHitbox.SettingChanged += DoHitbox_SettingChanged;
Utils.doHurtbox.SettingChanged += DoHurtbox_SettingChanged;
Utils.doKinos.SettingChanged += DoKinos_SettingChanged;
log.LogWarning((object)"uh3");
setShowingHitboxes(Utils.cfg_doHitbox);
setShowingHurtboxes(Utils.cfg_doHurtbox, showAll: false);
setShowingKinos(Utils.cfg_doKinos, showAll: false);
log.LogWarning((object)"uh4");
if (RiskOfOptionsCompat.enabled)
{
RiskOfOptionsCompat.doOptions();
}
log.LogWarning((object)"uh5");
BodyCatalog.Init += new hook_Init(BodyCatalog_Init);
OverlapAttack.Fire += new hook_Fire(OverlapAttack_Fire);
BlastAttack.Fire += new hook_Fire(BlastAttack_Fire);
HurtBox.Awake += new hook_Awake(HurtBox_Awake);
BulletAttack.FireSingle += new hook_FireSingle(BulletAttack_FireSingle);
BulletAttack.InitBulletHitFromRaycastHit += new hook_InitBulletHitFromRaycastHit(BulletAttack_InitBulletHitFromRaycastHit);
CharacterMotor.Awake += new hook_Awake(CharacterMotor_Awake);
}
private void DoHitbox_SettingChanged(object sender, EventArgs e)
{
setShowingHitboxes(Utils.cfg_doHitbox);
}
private void DoHurtbox_SettingChanged(object sender, EventArgs e)
{
setShowingHurtboxes(Utils.cfg_doHurtbox, showAll: true);
}
private void DoKinos_SettingChanged(object sender, EventArgs e)
{
setShowingKinos(Utils.cfg_doKinos, showAll: true);
}
private void populateAss()
{
AssetBundle val = null;
using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("SillyHitboxViewer.sillyhitbox"))
{
val = AssetBundle.LoadFromStream(stream);
}
_hitboxBoxPrefab = LoadHitboxAss(val, "hitboxPreviewInator");
_hitboxNotBoxPrefab = LoadHitboxAss(val, "hitboxPreviewInatorSphere");
_hitboxNotBoxPrefabSmol = LoadHitboxAss(val, "hitboxPreviewInatorSphereSmol");
_hitboxNotBoxPrefabTall = LoadHitboxAss(val, "hitboxPreviewInatorCapsule");
_hitboxNotBoxPrefabTallFlat = LoadHitboxAss(val, "hitboxPreviewInatorCylinder");
_hitboxNotBoxPrefabTallFlatSmol = LoadHitboxAss(val, "hitboxPreviewInatorCylinderSmol");
RiskOfOptionsCompat.icon = val.LoadAsset<Sprite>("hitboxIcon");
}
private static HitboxRevealer LoadHitboxAss(AssetBundle MainAss, string assString)
{
GameObject obj = MainAss.LoadAsset<GameObject>(assString);
HitboxRevealer hitboxRevealer = ((obj != null) ? obj.GetComponent<HitboxRevealer>() : null);
if ((Object)(object)hitboxRevealer == (Object)null)
{
log.LogError((object)("unable to load prefab, " + assString + ", from the bundle. Timesweeper did an oops"));
}
return (hitboxRevealer != null) ? ((Component)hitboxRevealer).GetComponent<HitboxRevealer>() : null;
}
[ConCommand(/*Could not decode attribute arguments.*/)]
private static void ShowHitbox(ConCommandArgs args)
{
//IL_0000: Unknown result type (might be due to invalid IL or missing references)
ShowHitboxes(args);
}
[ConCommand(/*Could not decode attribute arguments.*/)]
private static void ShowHitboxes(ConCommandArgs args)
{
int? num = ((ConCommandArgs)(ref args)).TryGetArgInt(0);
Debug.LogWarning((object)((ConCommandArgs)(ref args)).Count);
if (((ConCommandArgs)(ref args)).Count > 0 && !num.HasValue)
{
Debug.LogError((object)"ya dun goofed it. Pass in 1 to enable Hitboxes, 0 to disable, or pass in nothing to toggle");
return;
}
bool hitboxConfig = ((((ConCommandArgs)(ref args)).Count <= 0) ? (!HitboxRevealer.showingHitBoxes) : (num.GetValueOrDefault() == 1));
Utils.setHitboxConfig(hitboxConfig);
Utils.Log($"showing hitboxes option set to {num.GetValueOrDefault() == 1}", chat: true);
}
[ConCommand(/*Could not decode attribute arguments.*/)]
private static void ShowHurtbox(ConCommandArgs args)
{
//IL_0000: Unknown result type (might be due to invalid IL or missing references)
ShowHurtboxes(args);
}
[ConCommand(/*Could not decode attribute arguments.*/)]
private static void ShowHurtboxes(ConCommandArgs args)
{
int? num = ((ConCommandArgs)(ref args)).TryGetArgInt(0);
if (((ConCommandArgs)(ref args)).Count > 0 && !num.HasValue)
{
Debug.LogError((object)"ya dun fucked up. Pass in 1 to enable Hurtboxes, 0 to disable, or pass in nothing to toggle");
return;
}
bool hurtboxConfig = ((((ConCommandArgs)(ref args)).Count <= 0) ? (!HitboxRevealer.showingHurtBoxes) : (num.GetValueOrDefault() == 1));
Utils.setHurtboxConfig(hurtboxConfig);
Utils.Log($"showing hurtboxes option set to {num.GetValueOrDefault() == 1}", chat: true);
}
[ConCommand(/*Could not decode attribute arguments.*/)]
private static void ShowKino(ConCommandArgs args)
{
//IL_0000: Unknown result type (might be due to invalid IL or missing references)
ShowKinos(args);
}
[ConCommand(/*Could not decode attribute arguments.*/)]
private static void ShowKinos(ConCommandArgs args)
{
int? num = ((ConCommandArgs)(ref args)).TryGetArgInt(0);
if (((ConCommandArgs)(ref args)).Count > 0 && !num.HasValue)
{
Debug.LogError((object)"ya dun fucked up. Pass in 1 to enable Hurtboxes, 0 to disable, or pass in nothing to toggle");
return;
}
bool kinoConfig = ((((ConCommandArgs)(ref args)).Count <= 0) ? (!HitboxRevealer.showingKinos) : (num.GetValueOrDefault() == 1));
Utils.setKinoConfig(kinoConfig);
Utils.Log($"showing Character Motors option set to {num.GetValueOrDefault() == 1}", chat: true);
}
public static void setShowingHitboxes(bool set)
{
HitboxRevealer.showingHitBoxes = set;
}
public static void setShowingHurtboxes(bool set, bool showAll)
{
HitboxRevealer.showingHurtBoxes = set;
if (showAll)
{
instance.bindShowAllHurtboxes();
}
}
public static void setShowingKinos(bool set, bool showAll)
{
HitboxRevealer.showingKinos = set;
if (showAll)
{
instance.bindShowAllKinos();
}
}
private IEnumerator BodyCatalog_Init(orig_Init orig)
{
IEnumerator result = orig.Invoke();
Utils.setSoftenedCharacters();
return result;
}
private bool OverlapAttack_Fire(orig_Fire orig, OverlapAttack self, List<HurtBox> hitResults)
{
bool result = orig.Invoke(self, hitResults);
HitboxGroupRevealer hitboxGroupRevealer = _hitboxGroupRevealers.Find((HitboxGroupRevealer revealer) => (Object)(object)revealer != (Object)null && (Object)(object)revealer.hitboxGroup == (Object)(object)self.hitBoxGroup);
if ((Object)(object)hitboxGroupRevealer == (Object)null)
{
if ((Object)(object)self.hitBoxGroup == (Object)null)
{
((BaseUnityPlugin)this).Logger.LogError((object)"could not show hitbox. hitboxgroup is null");
return result;
}
hitboxGroupRevealer = ((Component)self.hitBoxGroup).gameObject.AddComponent<HitboxGroupRevealer>();
_hitboxGroupRevealers.Add(hitboxGroupRevealer);
hitboxGroupRevealer.init(self.hitBoxGroup, _hitboxBoxPrefab, self.attacker);
}
hitboxGroupRevealer.reveal(active: true);
return result;
}
private Result BlastAttack_Fire(orig_Fire orig, BlastAttack self)
{
//IL_0003: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
//IL_006d: Unknown result type (might be due to invalid IL or missing references)
//IL_007e: Unknown result type (might be due to invalid IL or missing references)
//IL_007f: Unknown result type (might be due to invalid IL or missing references)
//IL_0037: Unknown result type (might be due to invalid IL or missing references)
//IL_0048: 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_0082: Unknown result type (might be due to invalid IL or missing references)
Result result = orig.Invoke(self);
if (!Utils.cfg_showLogsVerbose)
{
Object.Instantiate<HitboxRevealer>((self.radius < 0.1f) ? _hitboxNotBoxPrefabSmol : _hitboxNotBoxPrefab).initBlastBox(self.position, self.radius);
return result;
}
HitboxRevealer hitboxRevealer = Object.Instantiate<HitboxRevealer>((self.radius < 0.1f) ? _hitboxNotBoxPrefabSmol : _hitboxNotBoxPrefab).initBlastBox(self.position, self.radius);
return result;
}
private void BulletAttack_FireSingle(orig_FireSingle orig, BulletAttack self, Vector3 normal, int muzzleIndex)
{
//IL_0003: Unknown result type (might be due to invalid IL or missing references)
//IL_002d: Unknown result type (might be due to invalid IL or missing references)
//IL_0032: Unknown result type (might be due to invalid IL or missing references)
orig.Invoke(self, normal, muzzleIndex);
Object.Instantiate<HitboxRevealer>((self.radius < 0.1f) ? _hitboxNotBoxPrefabTallFlatSmol : _hitboxNotBoxPrefabTallFlat).initBulletBox(self.origin, normal, self.maxDistance, self.radius);
}
private void BulletAttack_InitBulletHitFromRaycastHit(orig_InitBulletHitFromRaycastHit orig, BulletAttack self, ref BulletHit bulletHit, Vector3 origin, Vector3 direction, ref RaycastHit raycastHit)
{
//IL_0004: Unknown result type (might be due to invalid IL or missing references)
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_0011: 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_0080: Unknown result type (might be due to invalid IL or missing references)
//IL_005c: Unknown result type (might be due to invalid IL or missing references)
orig.Invoke(self, ref bulletHit, origin, direction, ref raycastHit);
if (!(Vector3.Distance(self.origin, bulletHit.point) < 0.5f))
{
if (!HitboxRevealer.bulletModeEnabled)
{
Object.Instantiate<HitboxRevealer>((self.radius < 0.1f) ? _hitboxNotBoxPrefabSmol : _hitboxNotBoxPrefab).initBulletPoint(bulletHit.point, self.radius);
}
_bulletHitPointRevealers.Add(Object.Instantiate<HitboxRevealer>(_hitboxNotBoxPrefabSmol).initBulletPoint(bulletHit.point, 0.1f));
}
}
private void HurtBox_Awake(orig_Awake orig, HurtBox self)
{
orig.Invoke(self);
if (!Utils.cfg_unDynamicHurtboxes || (HitboxRevealer.showingAnyBoxes && HitboxRevealer.showingHurtBoxes))
{
if (self.collider is CapsuleCollider)
{
List<HitboxRevealer> hurtboxRevealers = _hurtboxRevealers;
HitboxRevealer hitboxRevealer = Object.Instantiate<HitboxRevealer>(_hitboxNotBoxPrefabTall);
Transform transform = ((Component)self.collider).transform;
Collider collider = self.collider;
hurtboxRevealers.Add(hitboxRevealer.initHurtbox(transform, (CapsuleCollider)(object)((collider is CapsuleCollider) ? collider : null)));
}
if (self.collider is SphereCollider)
{
List<HitboxRevealer> hurtboxRevealers2 = _hurtboxRevealers;
HitboxRevealer hitboxRevealer2 = Object.Instantiate<HitboxRevealer>(_hitboxNotBoxPrefab);
Transform transform2 = ((Component)self.collider).transform;
Collider collider2 = self.collider;
hurtboxRevealers2.Add(hitboxRevealer2.initHurtbox(transform2, (SphereCollider)(object)((collider2 is SphereCollider) ? collider2 : null)));
Utils.LogWarning("intititating " + ((Object)((Component)self.hurtBoxGroup).gameObject).name);
}
if (self.collider is BoxCollider)
{
List<HitboxRevealer> hurtboxRevealers3 = _hurtboxRevealers;
HitboxRevealer hitboxRevealer3 = Object.Instantiate<HitboxRevealer>(_hitboxBoxPrefab);
Transform transform3 = ((Component)self.collider).transform;
Collider collider3 = self.collider;
hurtboxRevealers3.Add(hitboxRevealer3.initHurtbox(transform3, (BoxCollider)(object)((collider3 is BoxCollider) ? collider3 : null)));
}
}
}
private void CharacterMotor_Awake(orig_Awake orig, CharacterMotor self)
{
orig.Invoke(self);
if (!Utils.cfg_unDynamicHurtboxes || (HitboxRevealer.showingAnyBoxes && HitboxRevealer.showingKinos))
{
_kinoRevealers.Add(Object.Instantiate<HitboxRevealer>(_hitboxNotBoxPrefabTall).initKino(((Component)((BaseCharacterController)self).Motor.Capsule).transform, ((BaseCharacterController)self).Motor.Capsule));
}
}
private void Update()
{
//IL_0033: 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)
HitboxRevealer.randomTimer += Time.deltaTime;
if (HitboxRevealer.randomTimer > 100f)
{
HitboxRevealer.randomTimer -= 100f;
}
if (Input.GetKeyDown(Utils.cfg_toggleKey))
{
HitboxRevealer.showingAnyBoxes = !HitboxRevealer.showingAnyBoxes;
Utils.Log(HitboxRevealer.showingAnyBoxes ? "hitboxes enabled" : "all hitboxes disabled", chat: true);
bindShowAllHurtboxes();
bindClearBulletPoints();
}
if (Input.GetKeyDown(Utils.cfg_bulletModeKey))
{
HitboxRevealer.bulletModeEnabled = !HitboxRevealer.bulletModeEnabled;
Utils.Log(HitboxRevealer.bulletModeEnabled ? "Lingering Bullet Mode Enabled" : "Lingering Bullets disabaled", chat: true);
bindClearBulletPoints();
}
if (!Utils.cfg_useDebug)
{
return;
}
if (Object.op_Implicit((Object)(object)Console.instance) && ((Behaviour)Console.instance).enabled)
{
for (int i = 0; i < LocalUserManager.readOnlyLocalUsersList.Count; i++)
{
if (LocalUserManager.readOnlyLocalUsersList[i] != null && Object.op_Implicit((Object)(object)LocalUserManager.readOnlyLocalUsersList[i].currentNetworkUser) && ((NetworkBehaviour)LocalUserManager.readOnlyLocalUsersList[i].currentNetworkUser).localPlayerAuthority && LocalUserManager.readOnlyLocalUsersList[i].isUIFocused)
{
return;
}
}
}
if (Input.GetKeyDown((KeyCode)105))
{
if (Time.timeScale == 0f)
{
setTimeScale(Time.timeScale + 0.1f);
}
else
{
setTimeScale(Time.timeScale + 0.5f);
}
}
if (Input.GetKeyDown((KeyCode)107))
{
setTimeScale(Time.timeScale - 0.1f);
}
if (Input.GetKeyDown((KeyCode)111))
{
setTimeScale(1f);
}
if (Input.GetKeyDown((KeyCode)108))
{
setTimeScale(0f);
}
if (Input.GetKeyDown((KeyCode)112))
{
string text = "";
int count = _revealerPool.Count;
for (int j = 1; j <= _revealerPool.Count; j++)
{
HitboxRevealer hitboxRevealer = _revealerPool.Dequeue();
text += $"\nhitbox {(Object)(object)hitboxRevealer != (Object)null}, {j} revealers checked";
_revealerPool.Enqueue(hitboxRevealer);
}
Utils.LogReadout($"hitbox pool count: {count}:{text}");
text = "";
count = _blastPool.Count;
for (int k = 1; k <= _blastPool.Count; k++)
{
HitboxRevealer hitboxRevealer = _blastPool.Dequeue();
text += $"\nblastbox {(Object)(object)hitboxRevealer != (Object)null}, {k} revealers checked";
_blastPool.Enqueue(hitboxRevealer);
}
Utils.LogReadout($"blast pool count: {count}:{text}");
}
}
private void bindClearBulletPoints()
{
if (HitboxRevealer.showingAnyBoxes && HitboxRevealer.bulletModeEnabled)
{
return;
}
for (int i = 0; i < _bulletHitPointRevealers.Count; i++)
{
HitboxRevealer hitboxRevealer = _bulletHitPointRevealers[i];
if ((Object)(object)hitboxRevealer != (Object)null)
{
hitboxRevealer.kill();
}
}
_bulletHitPointRevealers = new List<HitboxRevealer>();
}
public void bindShowAllHurtboxes()
{
bool active = HitboxRevealer.showingAnyBoxes && HitboxRevealer.showingHurtBoxes;
for (int num = _hurtboxRevealers.Count - 1; num >= 0; num--)
{
if ((Object)(object)_hurtboxRevealers[num] == (Object)null)
{
_hurtboxRevealers.RemoveAt(num);
}
else
{
_hurtboxRevealers[num].hurtboxShow(active);
}
}
}
public void bindShowAllKinos()
{
bool active = HitboxRevealer.showingAnyBoxes && HitboxRevealer.showingKinos;
for (int num = _kinoRevealers.Count - 1; num >= 0; num--)
{
if ((Object)(object)_kinoRevealers[num] == (Object)null)
{
_kinoRevealers.RemoveAt(num);
}
else
{
_kinoRevealers[num].kinoShow(active);
}
}
}
private void setTimeScale(float tim)
{
Time.timeScale = tim;
Utils.Log($"set tim: {Time.timeScale}", chat: true);
}
private void createPool(int poolStart, Queue<HitboxRevealer> poolQueue, bool blast)
{
for (int i = 0; i < poolStart; i++)
{
createPooledRevealer(poolQueue, blast);
}
}
private void createPooledRevealer(Queue<HitboxRevealer> poolQueue, bool blast)
{
HitboxRevealer item = Object.Instantiate<HitboxRevealer>(blast ? _hitboxNotBoxPrefab : _hitboxBoxPrefab, ((Component)this).transform);
poolQueue.Enqueue(item);
}
public HitboxRevealer requestPooledHitboxRevealer()
{
return requestPooledRevealer(_revealerPool, blast: false);
}
public HitboxRevealer requestPooledBlastRevealer()
{
return requestPooledRevealer(_blastPool, blast: true);
}
private HitboxRevealer requestPooledRevealer(Queue<HitboxRevealer> poolQueue, bool blast)
{
if (poolQueue.Count <= 0)
{
instance.createPooledRevealer(poolQueue, blast);
Utils.LogWarning("requestPooledRevealer: pool full. adding revealer to total");
}
HitboxRevealer hitboxRevealer = poolQueue.Dequeue();
if ((Object)(object)hitboxRevealer == (Object)null)
{
Utils.LogWarning("requestPooledRevealer: pooled revealer is null. trying again");
return requestPooledRevealer(poolQueue, blast);
}
return hitboxRevealer;
}
public void returnPooledHitboxRevealers(HitboxRevealer[] revs)
{
for (int i = 0; i < revs.Length; i++)
{
returnPooledRevealer(revs[i], _revealerPool);
}
}
public void returnPooledBlastRevealer(HitboxRevealer rev)
{
returnPooledRevealer(rev, _blastPool);
}
private void returnPooledRevealers(HitboxRevealer[] revs, Queue<HitboxRevealer> poolQueue)
{
for (int i = 0; i < revs.Length; i++)
{
returnPooledRevealer(revs[i], poolQueue);
}
}
private void returnPooledRevealer(HitboxRevealer rev, Queue<HitboxRevealer> poolQueue)
{
((Component)rev).transform.parent = ((Component)instance).transform;
poolQueue.Enqueue(rev);
}
public void removeHitBoxGroupRevealer(HitboxGroupRevealer rev)
{
_hitboxGroupRevealers.Remove(rev);
}
}
public static class RiskOfOptionsCompat
{
private static bool? _enabled;
public static Sprite icon;
public static bool enabled
{
get
{
if (!_enabled.HasValue)
{
_enabled = Chainloader.PluginInfos.ContainsKey("com.rune580.riskofoptions");
}
return _enabled.Value;
}
}
public static void doOptions()
{
//IL_0011: Unknown result type (might be due to invalid IL or missing references)
//IL_001b: Expected O, but got Unknown
//IL_0021: Unknown result type (might be due to invalid IL or missing references)
//IL_002b: Expected O, but got Unknown
//IL_0031: Unknown result type (might be due to invalid IL or missing references)
//IL_003b: Expected O, but got Unknown
ModSettingsManager.SetModIcon(icon);
ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(Utils.doHitbox));
ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(Utils.doHurtbox));
ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(Utils.doKinos));
}
public static void hitboxBoolEvent(bool active)
{
HitboxViewerMod.setShowingHitboxes(!active);
}
public static void hurtboxBoolEvent(bool active)
{
HitboxViewerMod.setShowingHurtboxes(!active, showAll: true);
}
}
public class Utils
{
public static bool cfg_useDebug;
public static bool cfg_showLogsVerbose;
public static ConfigEntry<bool> doHitbox;
public static ConfigEntry<bool> doHurtbox;
public static ConfigEntry<bool> doKinos;
public static KeyCode cfg_toggleKey;
public static KeyCode cfg_bulletModeKey;
public static string defaultSoftenedCharacters = "MercBody, MinerBody, MiniMushroomBody, NemesisEnforcerBody, NemesisEnforcerBossBody, UrsaBody, ";
public static string cfg_softenedCharactersString;
public static List<int> cfg_softenedCharacters = new List<int>();
public static bool cfg_unDynamicHurtboxes;
public static bool cfg_doHitbox => doHitbox.Value;
public static bool cfg_doHurtbox => doHurtbox.Value;
public static bool cfg_doKinos => doKinos.Value;
public static void Log(object log, bool chat, bool overrideDebug = true)
{
if (cfg_useDebug || overrideDebug)
{
HitboxViewerMod.log.LogMessage(log);
if (chat)
{
Chat.AddMessage(log.ToString());
}
}
}
public static void LogError(object log)
{
HitboxViewerMod.log.LogError(log);
}
public static void LogReadout(object log)
{
if (cfg_showLogsVerbose)
{
Log(log, chat: false, overrideDebug: false);
}
}
public static void LogWarning(object log)
{
if (cfg_showLogsVerbose)
{
HitboxViewerMod.log.LogWarning(log);
}
}
public static void setHitboxConfig(bool set)
{
doHitbox.Value = set;
}
public static void setHurtboxConfig(bool set)
{
doHurtbox.Value = set;
}
internal static void setKinoConfig(bool set)
{
doKinos.Value = set;
}
public static void doConfig()
{
//IL_01a6: Unknown result type (might be due to invalid IL or missing references)
//IL_01ab: Unknown result type (might be due to invalid IL or missing references)
//IL_0278: Unknown result type (might be due to invalid IL or missing references)
//IL_027d: Unknown result type (might be due to invalid IL or missing references)
doHitbox = ((BaseUnityPlugin)HitboxViewerMod.instance).Config.Bind<bool>("0. General", "Show Hitboxes", true, "Show Hitboxes.\n");
doHurtbox = ((BaseUnityPlugin)HitboxViewerMod.instance).Config.Bind<bool>("0. General", "Show Hurtboxes", false, "Show Hurtboxes.\n");
doKinos = ((BaseUnityPlugin)HitboxViewerMod.instance).Config.Bind<bool>("0. General", "Show Character Motors", false, "Show the capsule your character uses to interact with the environment/other characters.\n");
HitboxRevealer.cfg_BoxAlpha = ((BaseUnityPlugin)HitboxViewerMod.instance).Config.Bind<float>("1. OverlapAttack hitboxes (melee and some projectiles)", "OverlapAttack hitbox alpha", 0.22f, "0-1. Around 0.22 is ok. don't make it higher if you have epilepsy\n").Value;
HitboxRevealer.cfg_MercSoften = ((BaseUnityPlugin)HitboxViewerMod.instance).Config.Bind<bool>("1. OverlapAttack hitboxes (melee and some projectiles)", "Tone down merc", true, "Make merc's hitboxes lighter cause he's a crazy fool (and might actually hurt your eyes)\n - overrides alpha brightness to 0.1 and keeps colors cool blue-ish range\n").Value;
cfg_softenedCharactersString = ((BaseUnityPlugin)HitboxViewerMod.instance).Config.Bind<string>("1. OverlapAttack hitboxes (melee and some projectiles)", "Toned-down characters", "MercBody, MinerBody, MiniMushroomBody", "The wacky characters who need softening, separated by commas.\n - In addition to these, the following characters are always on the list: " + defaultSoftenedCharacters + "\n - Character's internal names are: CommandoBody, HuntressBody, ToolbotBody, EngiBody, MageBody, MercBody, TreebotBody, LoaderBody, CrocoBody, Captainbody\n - Use the DebugToolkit mod's body_list command to see a complete list (including enemies and moddeds)\n").Value;
HitboxRevealer.cfg_BlastShowTime = ((BaseUnityPlugin)HitboxViewerMod.instance).Config.Bind<float>("2. Blastattack hitboxes (hitspheres?)", "BlastAttack visual time", 0.2f, "the amount of time blast hitboxes show up (their actual damage happens in one frame)\n").Value;
HitboxRevealer.cfg_BulletAlpha = ((BaseUnityPlugin)HitboxViewerMod.instance).Config.Bind<float>("3. BulletAttack hitboxes (hitcylinders?)", "BulletAttack hitbox alpha", 0.14f, "0=1. lil brighter than the others, usually\nif a bullet has 0 radius, this gets increased a bit\n point of contact of the bullet is a little brighter\n").Value;
HitboxRevealer.cfg_BulletShowTime = ((BaseUnityPlugin)HitboxViewerMod.instance).Config.Bind<float>("3. BulletAttack hitboxes (hitcylinders?)", "BulletAttack visual time", 0.4f, "the amount of time bullet rays show (their actual damage happens in one frame)\n").Value;
cfg_bulletModeKey = ((BaseUnityPlugin)HitboxViewerMod.instance).Config.Bind<KeyCode>("3. BulletAttack hitboxes (hitcylinders?)", "Bullet point linger mode keybind", (KeyCode)47, "key to toggle bullet point mode\nin this mode, bullet hit points will linger indefinitely\ntoggle it off to clear them\n").Value;
HitboxRevealer.cfg_ColorfulBullets = ((BaseUnityPlugin)HitboxViewerMod.instance).Config.Bind<bool>("3. BulletAttack hitboxes (hitcylinders?)", "Colorful bullets!", false, "if true, each individual bullet cylinder will be a random color.\nWhen false bullets fired on the same frame will be the same color\n").Value;
HitboxRevealer.cfg_UniformBullets = ((BaseUnityPlugin)HitboxViewerMod.instance).Config.Bind<bool>("3. BulletAttack hitboxes (hitcylinders?)", "Not colorful bullets!", false, "Overrides colorful Bullets! config. all bullet attacks will be the same color so they don't look like Dippin Dots everywhere\n").Value;
HitboxRevealer.cfg_HurtAlpha = ((BaseUnityPlugin)HitboxViewerMod.instance).Config.Bind<float>("4. Hurtboxes", "Hurtbox capsule/box alpha", 0.169f, "0-1. Around 0.16 is ok.\n").Value;
cfg_unDynamicHurtboxes = ((BaseUnityPlugin)HitboxViewerMod.instance).Config.Bind<bool>("4. Hurtboxes", "optimized Hurtboxes", false, "tl;dr: Set to false for development, as it's more useful. Set to true for casual play, as it's more optimized.\n - When set to false, when characters spawn, hurtboxes and their objects will always be initialized for them, so they can be revealed and hidden at will.\n - When set to true, when characters spawn, hurtbox objects will only be initialized if hurtboxes are enabled.\n - Avoids creating unnecessary hurtboxes, but can't reveal hurtboxes on previously spawned enemies, if that makes sense.\n").Value;
cfg_toggleKey = ((BaseUnityPlugin)HitboxViewerMod.instance).Config.Bind<KeyCode>("5. be safe", "Hitbox toggle Keybind", (KeyCode)59, "press this key to toggle disabling hitbox viewer on and off in game. Use to override current settings\n").Value;
cfg_useDebug = ((BaseUnityPlugin)HitboxViewerMod.instance).Config.Bind<bool>("5. be safe", "debug", false, "welcom 2m y twisted mind\ntimescale hotkeys on I, K, O, and L. press quote key to disable\n").Value;
cfg_showLogsVerbose = ((BaseUnityPlugin)HitboxViewerMod.instance).Config.Bind<bool>("5. be safe", "extra logs", false, "like a lot of extra logs\n").Value;
}
public static void setSoftenedCharacters()
{
//IL_005f: Unknown result type (might be due to invalid IL or missing references)
//IL_0066: Expected I4, but got Unknown
if (!HitboxRevealer.cfg_MercSoften)
{
return;
}
cfg_softenedCharactersString = defaultSoftenedCharacters + cfg_softenedCharactersString;
cfg_softenedCharactersString = cfg_softenedCharactersString.Replace(" ", "");
string[] array = cfg_softenedCharactersString.Split(',');
string text = "";
foreach (string text2 in array)
{
int num = (int)BodyCatalog.FindBodyIndex(text2);
if (num != -1 && !cfg_softenedCharacters.Contains(num))
{
cfg_softenedCharacters.Add(num);
text += $"\nbodyIndex: {num}: {text2}";
}
}
if (!string.IsNullOrEmpty(text))
{
HitboxViewerMod.log.LogMessage((object)("Toning down hitboxes for" + text));
}
else
{
HitboxViewerMod.log.LogWarning((object)"No characters found to tone down hitboxes, make sure you've typed their names right in the config");
}
}
public static Vector3 retardTransformTest(Transform transform, Vector3 normal, Vector3 transformwhatever)
{
//IL_0011: Unknown result type (might be due to invalid IL or missing references)
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
//IL_0017: Unknown result type (might be due to invalid IL or missing references)
//IL_002a: Unknown result type (might be due to invalid IL or missing references)
//IL_002b: Unknown result type (might be due to invalid IL or missing references)
//IL_0030: Unknown result type (might be due to invalid IL or missing references)
//IL_0043: Unknown result type (might be due to invalid IL or missing references)
//IL_0044: Unknown result type (might be due to invalid IL or missing references)
//IL_0049: Unknown result type (might be due to invalid IL or missing references)
//IL_005c: Unknown result type (might be due to invalid IL or missing references)
//IL_005d: Unknown result type (might be due to invalid IL or missing references)
//IL_0062: Unknown result type (might be due to invalid IL or missing references)
//IL_0077: Unknown result type (might be due to invalid IL or missing references)
//IL_0078: Unknown result type (might be due to invalid IL or missing references)
//IL_007d: Unknown result type (might be due to invalid IL or missing references)
//IL_009b: Unknown result type (might be due to invalid IL or missing references)
//IL_009c: Unknown result type (might be due to invalid IL or missing references)
//IL_0092: Unknown result type (might be due to invalid IL or missing references)
//IL_0093: Unknown result type (might be due to invalid IL or missing references)
//IL_0098: Unknown result type (might be due to invalid IL or missing references)
//IL_00a0: Unknown result type (might be due to invalid IL or missing references)
if (Input.GetKey((KeyCode)263))
{
transformwhatever = transform.TransformDirection(normal);
}
if (Input.GetKey((KeyCode)264))
{
transformwhatever = transform.InverseTransformDirection(normal);
}
if (Input.GetKey((KeyCode)260))
{
transformwhatever = transform.TransformVector(normal);
}
if (Input.GetKey((KeyCode)261))
{
transformwhatever = transform.InverseTransformVector(normal);
}
if (Input.GetKey((KeyCode)257))
{
transformwhatever = transform.TransformPoint(normal);
}
if (Input.GetKey((KeyCode)258))
{
transformwhatever = transform.InverseTransformVector(normal);
}
return transformwhatever;
}
}
public static class VRCompat
{
private static bool? _enabled;
public static bool enabled
{
get
{
if (!_enabled.HasValue)
{
_enabled = Chainloader.PluginInfos.ContainsKey("com.DrBibop.VRAPI");
}
return _enabled.Value;
}
}
public static bool IsLocalVRPlayer(CharacterBody body)
{
return enabled && (Object)(object)body == (Object)(object)LocalUserManager.GetFirstLocalUser().cachedBody;
}
}