using System;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using UnityEngine;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: IgnoresAccessChecksTo("")]
[assembly: AssemblyCompany("BellaModsGames")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("REPOCompanions")]
[assembly: AssemblyTitle("REPOCompanions")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
internal sealed class EmbeddedAttribute : Attribute
{
}
}
namespace System.Runtime.CompilerServices
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)]
internal sealed class NullableAttribute : Attribute
{
public readonly byte[] NullableFlags;
public NullableAttribute(byte P_0)
{
NullableFlags = new byte[1] { P_0 };
}
public NullableAttribute(byte[] P_0)
{
NullableFlags = P_0;
}
}
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)]
internal sealed class NullableContextAttribute : Attribute
{
public readonly byte Flag;
public NullableContextAttribute(byte P_0)
{
Flag = P_0;
}
}
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
internal sealed class RefSafetyRulesAttribute : Attribute
{
public readonly int Version;
public RefSafetyRulesAttribute(int P_0)
{
Version = P_0;
}
}
}
namespace REPOCompanionsMod
{
[BepInPlugin("com.BellaModsGames.REPOCompanions", "REPO Companions", "1.0.0")]
[BepInProcess("repo.exe")]
public class REPOCompanionsMod : BaseUnityPlugin
{
[HarmonyPatch(typeof(PlayerController))]
private class PlayerControllerPatches
{
[HarmonyPatch("Update")]
[HarmonyPostfix]
private static void Update_Postfix(PlayerController __instance)
{
//IL_001f: Unknown result type (might be due to invalid IL or missing references)
//IL_0024: Unknown result type (might be due to invalid IL or missing references)
//IL_0025: Unknown result type (might be due to invalid IL or missing references)
if (SpawnKey == null || StaticLogger == null)
{
return;
}
KeyCode value = SpawnKey.Value;
if (Input.GetKeyDown(value))
{
if ((Object)(object)__instance != (Object)null)
{
SpawnCompanion(__instance);
}
else
{
StaticLogger.LogError((object)"Calling SpawnCompanion but PlayerController instance (__instance) is NULL!");
}
}
}
}
public static ConfigEntry<KeyCode>? SpawnKey;
public static ConfigEntry<int>? CompanionIndex;
public static ConfigEntry<float>? FollowDistance;
public static ConfigEntry<float>? FollowSpeed;
public static ConfigEntry<float>? TeleportDistance;
public static ConfigEntry<float>? RotationSpeed;
public static ConfigEntry<float>? GroundOffset;
private const int MAX_COMPANION_INDEX = 50;
private const string COMPANION_BASENAME = "companion_";
private const string CompanionPrefabName = "CompanionPrefab";
public static GameObject? currentCompanionInstance;
private const string GUID = "com.BellaModsGames.REPOCompanions";
public static ManualLogSource? StaticLogger { get; private set; }
private void Awake()
{
//IL_0128: Unknown result type (might be due to invalid IL or missing references)
//IL_012e: Expected O, but got Unknown
StaticLogger = Logger.CreateLogSource("REPOCompanions");
SpawnKey = ((BaseUnityPlugin)this).Config.Bind<KeyCode>("Controls", "Spawn Key", (KeyCode)99, "Key to spawn the selected companion.");
CompanionIndex = ((BaseUnityPlugin)this).Config.Bind<int>("Selection", "Companion Index", 1, $"Select the index (1-{50}) for the companion bundle.");
FollowDistance = ((BaseUnityPlugin)this).Config.Bind<float>("Behaviour", "Follow Distance", 3f, "How close the companion will try to stay.");
FollowSpeed = ((BaseUnityPlugin)this).Config.Bind<float>("Behaviour", "Follow Speed", 5f, "Movement speed (units per second).");
TeleportDistance = ((BaseUnityPlugin)this).Config.Bind<float>("Behaviour", "Teleport Distance", 25f, "Distance to trigger teleport.");
RotationSpeed = ((BaseUnityPlugin)this).Config.Bind<float>("Behaviour", "Rotation Speed", 8f, "Turning speed (higher is faster).");
GroundOffset = ((BaseUnityPlugin)this).Config.Bind<float>("Behaviour", "Ground Offset", 0.1f, "How far above detected ground to float.");
StaticLogger.LogInfo((object)"Configuration bound.");
try
{
Harmony val = new Harmony("com.BellaModsGames.REPOCompanions");
val.PatchAll();
StaticLogger.LogInfo((object)"Harmony patches applied using ID: com.BellaModsGames.REPOCompanions");
}
catch (Exception arg)
{
StaticLogger.LogError((object)$"Harmony patching failed: {arg}");
}
StaticLogger.LogInfo((object)$"REPO Companions v{((BaseUnityPlugin)this).Info.Metadata.Version} initialized.");
}
public static void SpawnCompanion(PlayerController player)
{
//IL_0235: Unknown result type (might be due to invalid IL or missing references)
//IL_0240: Unknown result type (might be due to invalid IL or missing references)
//IL_025a: Unknown result type (might be due to invalid IL or missing references)
//IL_025f: Unknown result type (might be due to invalid IL or missing references)
//IL_0264: Unknown result type (might be due to invalid IL or missing references)
//IL_026e: Unknown result type (might be due to invalid IL or missing references)
//IL_0273: 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_027b: Unknown result type (might be due to invalid IL or missing references)
//IL_0283: Unknown result type (might be due to invalid IL or missing references)
if (StaticLogger == null)
{
Logger.CreateLogSource("REPOCompanions_Spawn").LogError((object)"SpawnCompanion ERROR: StaticLogger is NULL!");
return;
}
if ((Object)(object)player == (Object)null)
{
StaticLogger.LogError((object)"PlayerController NULL!");
return;
}
if (CompanionIndex == null)
{
StaticLogger.LogError((object)"CompanionIndex NULL!");
return;
}
int value = CompanionIndex.Value;
if (value <= 0 || value > 50)
{
StaticLogger.LogError((object)$"Index {value} invalid.");
return;
}
string text = string.Format("{0}{1}", "companion_", value);
string text2 = null;
GameObject val = null;
AssetBundle val2 = null;
string text3 = "";
try
{
string location = Assembly.GetExecutingAssembly().Location;
text2 = Path.GetDirectoryName(location);
if (string.IsNullOrEmpty(text2))
{
StaticLogger.LogError((object)"Could not get plugin directory.");
return;
}
text3 = Path.Combine(text2, text);
if (!File.Exists(text3))
{
StaticLogger.LogError((object)("Bundle file not found: '" + text3 + "'"));
return;
}
val2 = AssetBundle.LoadFromFile(text3);
if ((Object)(object)val2 == (Object)null)
{
StaticLogger.LogError((object)("Failed to load bundle: '" + text3 + "'"));
return;
}
val = val2.LoadAsset<GameObject>("CompanionPrefab");
if ((Object)(object)val == (Object)null)
{
StaticLogger.LogError((object)("Prefab 'CompanionPrefab' not found in '" + text + "'."));
val2.Unload(true);
return;
}
if ((Object)(object)val.GetComponentInChildren<Animator>(true) == (Object)null)
{
StaticLogger.LogWarning((object)"Prefab 'CompanionPrefab' missing Animator.");
}
if ((Object)(object)val.GetComponentInChildren<Collider>() == (Object)null)
{
StaticLogger.LogWarning((object)"Prefab 'CompanionPrefab' missing Collider.");
}
if ((Object)(object)currentCompanionInstance != (Object)null)
{
Object.Destroy((Object)(object)currentCompanionInstance);
currentCompanionInstance = null;
}
Vector3 val3 = ((Component)player).transform.position - ((Component)player).transform.forward * (FollowDistance?.Value ?? 3f) + Vector3.up * 0.5f;
currentCompanionInstance = Object.Instantiate<GameObject>(val, val3, ((Component)player).transform.rotation);
if ((Object)(object)currentCompanionInstance == (Object)null)
{
StaticLogger.LogError((object)"Object.Instantiate returned NULL!");
return;
}
((Object)currentCompanionInstance).name = string.Format("{0}{1}_Instance", "companion_", value);
CompanionController companionController = currentCompanionInstance.AddComponent<CompanionController>();
if ((Object)(object)companionController == (Object)null)
{
StaticLogger.LogError((object)"AddComponent<CompanionController> failed!");
Object.Destroy((Object)(object)currentCompanionInstance);
currentCompanionInstance = null;
}
else
{
companionController.Initialize(player);
StaticLogger.LogInfo((object)("Companion '" + ((Object)currentCompanionInstance).name + "' spawned."));
}
}
catch (Exception arg)
{
ManualLogSource? staticLogger = StaticLogger;
if (staticLogger != null)
{
staticLogger.LogError((object)$"CRITICAL ERROR during Spawn Process for bundle '{text}': {arg}");
}
if ((Object)(object)currentCompanionInstance != (Object)null)
{
Object.Destroy((Object)(object)currentCompanionInstance);
currentCompanionInstance = null;
}
}
finally
{
if ((Object)(object)val2 != (Object)null)
{
val2.Unload(false);
}
}
}
}
public class CompanionController : MonoBehaviour
{
private PlayerController? targetPlayer;
private Animator? animator;
private Transform? playerTransform;
private Transform? companionTransform;
private Rigidbody? companionRigidbody;
private float followDistance;
private float followDistanceStopSqr;
private float followSpeed;
private float teleportDistance;
private float teleportDistanceSqr;
private float rotationSpeed;
private float groundOffset;
private float groundCheckDistance = 2f;
private LayerMask groundMask;
private Vector3 lastPosition;
private float actualSpeed;
private bool shouldBeMoving = false;
private int speedParamID = -1;
private const string SpeedParamName = "Speed";
public void Initialize(PlayerController player)
{
//IL_0324: Unknown result type (might be due to invalid IL or missing references)
//IL_0329: Unknown result type (might be due to invalid IL or missing references)
//IL_0070: Unknown result type (might be due to invalid IL or missing references)
//IL_0075: Unknown result type (might be due to invalid IL or missing references)
//IL_01b0: Unknown result type (might be due to invalid IL or missing references)
//IL_0312: Unknown result type (might be due to invalid IL or missing references)
//IL_0317: Unknown result type (might be due to invalid IL or missing references)
ManualLogSource staticLogger = REPOCompanionsMod.StaticLogger;
targetPlayer = player;
playerTransform = ((Component)player).transform;
companionTransform = ((Component)this).transform;
if ((Object)(object)companionTransform == (Object)null)
{
if (staticLogger != null)
{
staticLogger.LogError((object)("CC Initialize [" + ((Object)((Component)this).gameObject).name + "]: Failed cache transform!"));
}
Object.Destroy((Object)(object)this);
return;
}
lastPosition = companionTransform.position;
companionRigidbody = ((Component)this).GetComponent<Rigidbody>();
if ((Object)(object)companionRigidbody == (Object)null)
{
if (staticLogger != null)
{
staticLogger.LogWarning((object)("Companion '" + ((Object)((Component)this).gameObject).name + "' missing Rigidbody. Adding kinematic one."));
}
companionRigidbody = ((Component)this).gameObject.AddComponent<Rigidbody>();
}
if ((Object)(object)companionRigidbody != (Object)null)
{
companionRigidbody.isKinematic = true;
companionRigidbody.useGravity = false;
companionRigidbody.interpolation = (RigidbodyInterpolation)1;
companionRigidbody.collisionDetectionMode = (CollisionDetectionMode)3;
}
else if (staticLogger != null)
{
staticLogger.LogError((object)("Failed to get or add Rigidbody to '" + ((Object)((Component)this).gameObject).name + "'!"));
}
if ((Object)(object)((Component)this).GetComponentInChildren<Collider>() == (Object)null)
{
if (staticLogger != null)
{
staticLogger.LogWarning((object)("Companion '" + ((Object)((Component)this).gameObject).name + "' missing Collider. Adding default CapsuleCollider."));
}
CapsuleCollider val = ((Component)this).gameObject.AddComponent<CapsuleCollider>();
val.radius = 0.5f;
val.height = 1f;
val.center = new Vector3(0f, 0.5f, 0f);
}
animator = ((Component)this).GetComponentInChildren<Animator>(true);
if ((Object)(object)animator == (Object)null)
{
if (staticLogger != null)
{
staticLogger.LogWarning((object)("Companion '" + ((Object)((Component)this).gameObject).name + "' missing Animator."));
}
}
else
{
speedParamID = Animator.StringToHash("Speed");
((Behaviour)animator).enabled = true;
}
followDistance = REPOCompanionsMod.FollowDistance?.Value ?? 3f;
followSpeed = REPOCompanionsMod.FollowSpeed?.Value ?? 5f;
teleportDistance = REPOCompanionsMod.TeleportDistance?.Value ?? 25f;
rotationSpeed = REPOCompanionsMod.RotationSpeed?.Value ?? 8f;
groundOffset = REPOCompanionsMod.GroundOffset?.Value ?? 0.1f;
followDistanceStopSqr = Mathf.Max(0.1f, followDistance * 0.9f);
followDistanceStopSqr *= followDistanceStopSqr;
teleportDistanceSqr = teleportDistance * teleportDistance;
try
{
groundMask = LayerMask.op_Implicit(LayerMask.GetMask(new string[3] { "Default", "Terrain", "Environment" }));
}
catch
{
groundMask = LayerMask.op_Implicit(-5);
}
if (staticLogger != null)
{
staticLogger.LogInfo((object)("CompanionController Initialized targeting " + ((Object)player).name + "."));
}
}
private void Update()
{
//IL_003e: 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_004e: Unknown result type (might be due to invalid IL or missing references)
//IL_007b: Unknown result type (might be due to invalid IL or missing references)
//IL_0080: Unknown result type (might be due to invalid IL or missing references)
//IL_0087: Unknown result type (might be due to invalid IL or missing references)
//IL_008c: Unknown result type (might be due to invalid IL or missing references)
//IL_008d: Unknown result type (might be due to invalid IL or missing references)
//IL_008e: Unknown result type (might be due to invalid IL or missing references)
//IL_008f: Unknown result type (might be due to invalid IL or missing references)
//IL_0094: Unknown result type (might be due to invalid IL or missing references)
if (!((Object)(object)targetPlayer == (Object)null) && !((Object)(object)playerTransform == (Object)null) && !((Object)(object)companionTransform == (Object)null))
{
Vector3 val = companionTransform.position - lastPosition;
actualSpeed = ((Time.deltaTime > float.Epsilon) ? (((Vector3)(ref val)).magnitude / Time.deltaTime) : 0f);
Vector3 position = playerTransform.position;
Vector3 position2 = companionTransform.position;
Vector3 val2 = position - position2;
float sqrMagnitude = ((Vector3)(ref val2)).sqrMagnitude;
shouldBeMoving = sqrMagnitude > followDistanceStopSqr;
UpdateAnimation(actualSpeed, shouldBeMoving);
if (sqrMagnitude > teleportDistanceSqr)
{
TeleportNearPlayer();
return;
}
HandleMovementAndRotation(shouldBeMoving);
StickToGround();
}
}
private void LateUpdate()
{
//IL_0019: Unknown result type (might be due to invalid IL or missing references)
//IL_001e: Unknown result type (might be due to invalid IL or missing references)
if ((Object)(object)companionTransform != (Object)null)
{
lastPosition = companionTransform.position;
}
}
private void HandleMovementAndRotation(bool moveThisFrame)
{
//IL_002f: Unknown result type (might be due to invalid IL or missing references)
//IL_0034: Unknown result type (might be due to invalid IL or missing references)
//IL_003b: Unknown result type (might be due to invalid IL or missing references)
//IL_0040: Unknown result type (might be due to invalid IL or missing references)
//IL_0041: 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_0053: Unknown result type (might be due to invalid IL or missing references)
//IL_0058: Unknown result type (might be due to invalid IL or missing references)
//IL_005d: 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_0066: Unknown result type (might be due to invalid IL or missing references)
//IL_006c: 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_0079: 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_00a1: Unknown result type (might be due to invalid IL or missing references)
//IL_00a3: Unknown result type (might be due to invalid IL or missing references)
//IL_00a8: 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_00bb: Unknown result type (might be due to invalid IL or missing references)
//IL_00c9: Unknown result type (might be due to invalid IL or missing references)
//IL_00e0: Unknown result type (might be due to invalid IL or missing references)
//IL_00e1: Unknown result type (might be due to invalid IL or missing references)
//IL_00e2: Unknown result type (might be due to invalid IL or missing references)
//IL_00e7: Unknown result type (might be due to invalid IL or missing references)
//IL_00f7: Unknown result type (might be due to invalid IL or missing references)
//IL_0102: Unknown result type (might be due to invalid IL or missing references)
//IL_010c: Unknown result type (might be due to invalid IL or missing references)
//IL_0111: Unknown result type (might be due to invalid IL or missing references)
//IL_0147: Unknown result type (might be due to invalid IL or missing references)
//IL_014c: Unknown result type (might be due to invalid IL or missing references)
//IL_0158: 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_0164: Unknown result type (might be due to invalid IL or missing references)
//IL_013b: Unknown result type (might be due to invalid IL or missing references)
//IL_013d: Unknown result type (might be due to invalid IL or missing references)
if ((Object)(object)playerTransform == (Object)null || (Object)(object)companionTransform == (Object)null)
{
return;
}
Vector3 position = playerTransform.position;
Vector3 position2 = companionTransform.position;
Vector3 val = position - playerTransform.forward * followDistance;
Vector3 val2 = default(Vector3);
((Vector3)(ref val2))..ctor(position.x, position2.y, position.z);
Vector3 val3 = val2 - position2;
val3.y = 0f;
if (((Vector3)(ref val3)).sqrMagnitude > 0.01f)
{
Quaternion val4 = Quaternion.LookRotation(val3);
companionTransform.rotation = Quaternion.Slerp(companionTransform.rotation, val4, rotationSpeed * Time.deltaTime);
}
if (moveThisFrame)
{
Vector3 val5 = val - position2;
val5.y = 0f;
Vector3 val6 = ((Vector3)(ref val5)).normalized * followSpeed * Time.deltaTime;
if (((Vector3)(ref val6)).sqrMagnitude > ((Vector3)(ref val5)).sqrMagnitude && ((Vector3)(ref val5)).sqrMagnitude > 0.01f)
{
val6 = val5;
}
Transform? obj = companionTransform;
obj.position += new Vector3(val6.x, 0f, val6.z);
}
}
private void StickToGround()
{
//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_0023: Unknown result type (might be due to invalid IL or missing references)
//IL_002d: Unknown result type (might be due to invalid IL or missing references)
//IL_0032: Unknown result type (might be due to invalid IL or missing references)
//IL_0037: Unknown result type (might be due to invalid IL or missing references)
//IL_0038: Unknown result type (might be due to invalid IL or missing references)
//IL_0039: 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_0060: Unknown result type (might be due to invalid IL or missing references)
//IL_0065: Unknown result type (might be due to invalid IL or missing references)
//IL_0070: Unknown result type (might be due to invalid IL or missing references)
//IL_0075: Unknown result type (might be due to invalid IL or missing references)
//IL_007a: Unknown result type (might be due to invalid IL or missing references)
//IL_007c: Unknown result type (might be due to invalid IL or missing references)
//IL_0082: Unknown result type (might be due to invalid IL or missing references)
//IL_00a3: Unknown result type (might be due to invalid IL or missing references)
//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
//IL_00b0: Unknown result type (might be due to invalid IL or missing references)
//IL_00b6: Unknown result type (might be due to invalid IL or missing references)
if ((Object)(object)companionTransform == (Object)null)
{
return;
}
Vector3 position = companionTransform.position;
Vector3 val = position + Vector3.up * 0.5f;
RaycastHit val2 = default(RaycastHit);
if (Physics.Raycast(val, Vector3.down, ref val2, groundCheckDistance, LayerMask.op_Implicit(groundMask), (QueryTriggerInteraction)1))
{
Vector3 val3 = ((RaycastHit)(ref val2)).point + Vector3.up * groundOffset;
if (Mathf.Abs(position.y - val3.y) > 0.001f)
{
companionTransform.position = new Vector3(position.x, val3.y, position.z);
}
}
}
private void TeleportNearPlayer()
{
//IL_0035: Unknown result type (might be due to invalid IL or missing references)
//IL_0040: Unknown result type (might be due to invalid IL or missing references)
//IL_004b: Unknown result type (might be due to invalid IL or missing references)
//IL_0050: Unknown result type (might be due to invalid IL or missing references)
//IL_0055: Unknown result type (might be due to invalid IL or missing references)
//IL_005f: Unknown result type (might be due to invalid IL or missing references)
//IL_0064: Unknown result type (might be due to invalid IL or missing references)
//IL_0069: Unknown result type (might be due to invalid IL or missing references)
//IL_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_006c: 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_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_0084: Unknown result type (might be due to invalid IL or missing references)
//IL_00bf: Unknown result type (might be due to invalid IL or missing references)
//IL_00d5: Unknown result type (might be due to invalid IL or missing references)
//IL_00da: Unknown result type (might be due to invalid IL or missing references)
//IL_009d: Unknown result type (might be due to invalid IL or missing references)
//IL_00a2: Unknown result type (might be due to invalid IL or missing references)
//IL_00ad: Unknown result type (might be due to invalid IL or missing references)
//IL_00b2: Unknown result type (might be due to invalid IL or missing references)
//IL_00b7: Unknown result type (might be due to invalid IL or missing references)
//IL_0102: Unknown result type (might be due to invalid IL or missing references)
ManualLogSource staticLogger = REPOCompanionsMod.StaticLogger;
if (!((Object)(object)playerTransform == (Object)null) && !((Object)(object)companionTransform == (Object)null))
{
Vector3 val = playerTransform.position - playerTransform.forward * followDistance + Vector3.up * 0.5f;
Vector3 val2 = val;
RaycastHit val3 = default(RaycastHit);
if (Physics.Raycast(val + Vector3.up, Vector3.down, ref val3, 5f, LayerMask.op_Implicit(groundMask), (QueryTriggerInteraction)1))
{
val2 = ((RaycastHit)(ref val3)).point + Vector3.up * groundOffset;
}
companionTransform.position = val2;
RotateTowardsPlayer(immediate: true);
lastPosition = companionTransform.position;
actualSpeed = 0f;
UpdateAnimation(0f, shouldBeMovingFlag: false);
if (staticLogger != null)
{
staticLogger.LogInfo((object)$"Teleported companion to {val2:F2}.");
}
}
}
private void RotateTowardsPlayer(bool immediate = false)
{
//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)
//IL_004f: 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_0065: Unknown result type (might be due to invalid IL or missing references)
//IL_006a: Unknown result type (might be due to invalid IL or missing references)
//IL_006f: Unknown result type (might be due to invalid IL or missing references)
//IL_0083: Unknown result type (might be due to invalid IL or missing references)
//IL_0084: Unknown result type (might be due to invalid IL or missing references)
//IL_0089: Unknown result type (might be due to invalid IL or missing references)
//IL_00b1: Unknown result type (might be due to invalid IL or missing references)
//IL_00b6: Unknown result type (might be due to invalid IL or missing references)
//IL_00c4: 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)
if ((Object)(object)playerTransform == (Object)null || (Object)(object)companionTransform == (Object)null)
{
return;
}
Vector3 val = default(Vector3);
((Vector3)(ref val))..ctor(playerTransform.position.x, companionTransform.position.y, playerTransform.position.z);
Vector3 val2 = val - companionTransform.position;
if (((Vector3)(ref val2)).sqrMagnitude > 0.01f)
{
Quaternion val3 = Quaternion.LookRotation(val2);
if (immediate)
{
companionTransform.rotation = val3;
}
else
{
companionTransform.rotation = Quaternion.Slerp(companionTransform.rotation, val3, rotationSpeed * Time.deltaTime);
}
}
}
private void UpdateAnimation(float currentActualSpeed, bool shouldBeMovingFlag)
{
if (!((Object)(object)animator == (Object)null) && speedParamID != -1)
{
float num = 0f;
if (shouldBeMovingFlag && currentActualSpeed > 0.1f)
{
num = ((followSpeed > 0.01f) ? Mathf.Clamp01(currentActualSpeed / followSpeed) : 0f);
}
animator.SetFloat(speedParamID, num);
}
}
private void OnDestroy()
{
if ((Object)(object)REPOCompanionsMod.currentCompanionInstance == (Object)(object)((Component)this).gameObject)
{
ManualLogSource? staticLogger = REPOCompanionsMod.StaticLogger;
if (staticLogger != null)
{
staticLogger.LogInfo((object)"CompanionController clearing static currentCompanionInstance reference.");
}
REPOCompanionsMod.currentCompanionInstance = null;
}
}
}
}