using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Reflection.Emit; using System.Runtime.CompilerServices; using BepInEx; using BepInEx.Logging; using HarmonyLib; using Microsoft.CodeAnalysis; using REPOLib.Modules; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: AssemblyVersion("0.0.0.0")] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [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 FeatherguardDrone { public sealed class ConceptDroneVisuals : MonoBehaviour { private sealed class MovingWing { internal Transform Hinge; internal Quaternion ClosedRotation; internal Quaternion OpenRotation; internal Vector3 ClosedPosition; internal Vector3 OpenPosition; } private static readonly FieldInfo AnimationOpenField = AccessTools.Field(typeof(ItemDrone), "animationOpen"); private readonly List _movingWings = new List(); private Material _black; private Material _darkMetal; private Material _white; private Material _red; private Material _redGlow; private Transform _shieldRing; private Transform _lensGlow; private Transform _modelRoot; private ItemDrone _itemDrone; private ItemToggle _itemToggle; private Quaternion _worldModelRotation; private Quaternion _inventoryModelRotation; private float _openAmount; internal static void ConfigurePrefabPhysics(GameObject prefab) { //IL_00a7: Unknown result type (might be due to invalid IL or missing references) //IL_00ac: Unknown result type (might be due to invalid IL or missing references) //IL_00ae: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00e1: Unknown result type (might be due to invalid IL or missing references) //IL_00e8: Unknown result type (might be due to invalid IL or missing references) //IL_00f3: Unknown result type (might be due to invalid IL or missing references) //IL_00fe: Unknown result type (might be due to invalid IL or missing references) //IL_012a: Unknown result type (might be due to invalid IL or missing references) //IL_0131: Expected O, but got Unknown //IL_0146: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)prefab == (Object)null) && !prefab.GetComponentsInChildren(true).Any((Transform child) => ((Object)child).name == "Featherguard Compound Physics")) { BoxCollider? obj = (from collider in prefab.GetComponentsInChildren(true) where (Object)(object)collider != (Object)null && !((Collider)collider).isTrigger orderby ColliderVolume(collider.size, ((Component)collider).transform.lossyScale) descending select collider).FirstOrDefault(); if ((Object)(object)obj == (Object)null) { throw new InvalidOperationException("The source drone has no physical BoxCollider to replace."); } Transform transform = ((Component)obj).transform; Vector3 center = obj.center; Vector3 size = obj.size; PhysicMaterial sharedMaterial = ((Collider)obj).sharedMaterial; if ((Object)(object)((Component)transform).GetComponent() == (Object)null) { ((Component)transform).gameObject.AddComponent(); } SphereCollider obj2 = ((Component)transform).gameObject.AddComponent(); obj2.center = center; obj2.radius = Mathf.Min(Mathf.Abs(size.x), Mathf.Min(Mathf.Abs(size.y), Mathf.Abs(size.z))) * 0.485f; ((Collider)obj2).sharedMaterial = sharedMaterial; GameObject val = new GameObject("Featherguard Compound Physics"); val.transform.SetParent(transform, false); val.transform.localPosition = center; val.layer = ((Component)transform).gameObject.layer; TryCopyTag(((Component)transform).gameObject, val); float radius = obj2.radius; CreateWingStopCollider(val.transform, "Left Wing Stop", -1f, radius, sharedMaterial); CreateWingStopCollider(val.transform, "Right Wing Stop", 1f, radius, sharedMaterial); CreateCentralKeelCollider(val.transform, radius, sharedMaterial); Object.DestroyImmediate((Object)(object)obj); FeatherguardDronePlugin.Log.LogInfo((object)"Replaced the cubic collider with a registered sphere, two wing stabilisers and a central anti-roll keel."); } } private static void CreateWingStopCollider(Transform parent, string name, float side, float radius, PhysicMaterial material) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Expected O, but got Unknown //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_0095: Unknown result type (might be due to invalid IL or missing references) GameObject val = new GameObject(name); val.transform.SetParent(parent, false); val.transform.localPosition = new Vector3(side * radius * 1.03f, radius * 0.06f, radius * 0.1f); val.transform.localRotation = Quaternion.Euler(0f, 0f, side * -14f); val.layer = ((Component)parent).gameObject.layer; TryCopyTag(((Component)parent).gameObject, val); BoxCollider obj = val.AddComponent(); obj.size = new Vector3(radius * 0.34f, radius * 1.22f, radius * 0.54f); ((Collider)obj).sharedMaterial = material; val.AddComponent(); } private static void CreateCentralKeelCollider(Transform parent, float radius, PhysicMaterial material) { //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Expected O, but got Unknown //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_0085: Unknown result type (might be due to invalid IL or missing references) GameObject val = new GameObject("Central Invisible Anti-Roll Keel"); val.transform.SetParent(parent, false); val.transform.localPosition = new Vector3(0f, (0f - radius) * 0.94f, radius * 0.04f); val.transform.localRotation = Quaternion.identity; val.layer = ((Component)parent).gameObject.layer; TryCopyTag(((Component)parent).gameObject, val); BoxCollider obj = val.AddComponent(); obj.size = new Vector3(radius * 0.42f, radius * 0.3f, radius * 1.08f); ((Collider)obj).sharedMaterial = material; val.AddComponent(); } private static float ColliderVolume(Vector3 size, Vector3 scale) { //IL_0000: 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_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0014: 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_0022: Unknown result type (might be due to invalid IL or missing references) return Mathf.Abs(size.x * scale.x * size.y * scale.y * size.z * scale.z); } private static void TryCopyTag(GameObject source, GameObject destination) { try { destination.tag = source.tag; } catch (UnityException) { } } private void Start() { //IL_007e: 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_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_0130: Unknown result type (might be due to invalid IL or missing references) //IL_013c: Unknown result type (might be due to invalid IL or missing references) //IL_0148: Unknown result type (might be due to invalid IL or missing references) //IL_0163: Unknown result type (might be due to invalid IL or missing references) //IL_016a: Expected O, but got Unknown //IL_018c: Unknown result type (might be due to invalid IL or missing references) //IL_0191: Unknown result type (might be due to invalid IL or missing references) //IL_01a9: 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_01af: Unknown result type (might be due to invalid IL or missing references) //IL_01b4: Unknown result type (might be due to invalid IL or missing references) //IL_01b9: Unknown result type (might be due to invalid IL or missing references) //IL_01c5: Unknown result type (might be due to invalid IL or missing references) //IL_01de: Unknown result type (might be due to invalid IL or missing references) //IL_01e3: 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_01ec: Unknown result type (might be due to invalid IL or missing references) //IL_01ef: 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_01f6: Unknown result type (might be due to invalid IL or missing references) //IL_01fb: Unknown result type (might be due to invalid IL or missing references) //IL_0200: Unknown result type (might be due to invalid IL or missing references) //IL_020c: Unknown result type (might be due to invalid IL or missing references) //IL_0229: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)((Component)this).transform.Find("Featherguard Concept 1.3") != (Object)null)) { MeshRenderer[] array = (from renderer in ((Component)this).GetComponentsInChildren(true) where !IsEffectRenderer((Renderer)(object)renderer) select renderer).ToArray(); SkinnedMeshRenderer[] array2 = (from renderer in ((Component)this).GetComponentsInChildren(true) where !IsEffectRenderer((Renderer)(object)renderer) select renderer).ToArray(); Bounds bodyBounds = FindBodyBounds(array, array2); _itemDrone = ((Component)this).GetComponentInChildren(true); Vector3 val = FindOriginalBeamDirection(bodyBounds); Material fallback = array.Select((MeshRenderer renderer) => ((Renderer)renderer).sharedMaterial).FirstOrDefault((Func)((Material material) => (Object)(object)material != (Object)null)); CreateMaterials(fallback); MeshRenderer[] array3 = array; for (int num = 0; num < array3.Length; num++) { ((Renderer)array3[num]).enabled = false; } SkinnedMeshRenderer[] array4 = array2; for (int num = 0; num < array4.Length; num++) { ((Renderer)array4[num]).enabled = false; } float num2 = Mathf.Max(((Bounds)(ref bodyBounds)).size.x, Mathf.Max(((Bounds)(ref bodyBounds)).size.y, ((Bounds)(ref bodyBounds)).size.z)); GameObject val2 = new GameObject("Featherguard Concept 1.3"); val2.transform.SetParent(((Component)this).transform, false); val2.transform.localPosition = ((Component)this).transform.InverseTransformPoint(((Bounds)(ref bodyBounds)).center); _modelRoot = val2.transform; _worldModelRotation = Quaternion.LookRotation(-val, Vector3.up); _modelRoot.localRotation = _worldModelRotation; Vector3 val3 = new Vector3(-0.5f, -0.5f, -0.7071068f); Vector3 normalized = ((Vector3)(ref val3)).normalized; _inventoryModelRotation = Quaternion.LookRotation(-normalized, Vector3.up); val2.transform.localScale = Vector3.one * Mathf.Max(0.04f, num2 * 0.535f * FeatherguardDronePlugin.ModelScaleMultiplier); BuildArmouredBody(val2.transform); Transform lineStartPoint = BuildFrontLens(val2.transform); BuildSideHubs(val2.transform); BuildWingFan(val2.transform, -1f, "Left"); BuildWingFan(val2.transform, 1f, "Right"); BuildInternalWiring(val2.transform); BuildShieldRing(val2.transform); if ((Object)(object)_itemDrone != (Object)null) { _itemDrone.lineStartPoint = lineStartPoint; } _itemToggle = ((Component)this).GetComponentInChildren(true); int num3 = ((Component)this).GetComponentsInChildren(true).Length; FeatherguardDronePlugin.Log.LogInfo((object)("Built Featherguard Concept 1.3.1: armoured sphere, correctly oriented front beam lens, two three-blade wings, visible wiring and compound physics. Registered grab collider markers: " + num3 + ".")); } } private Vector3 FindOriginalBeamDirection(Bounds bodyBounds) { //IL_006f: 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_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_0052: 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_0069: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)_itemDrone != (Object)null && (Object)(object)_itemDrone.lineStartPoint != (Object)null) { Vector3 val = _itemDrone.lineStartPoint.position - ((Bounds)(ref bodyBounds)).center; if (((Vector3)(ref val)).sqrMagnitude > 0.0001f) { Vector3 val2 = ((Component)this).transform.InverseTransformDirection(val); if (((Vector3)(ref val2)).sqrMagnitude > 0.0001f) { return ((Vector3)(ref val2)).normalized; } } } return Vector3.forward; } private void Update() { //IL_007e: 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_008a: 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_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00a7: Unknown result type (might be due to invalid IL or missing references) //IL_0121: Unknown result type (might be due to invalid IL or missing references) //IL_0157: 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_01a5: Unknown result type (might be due to invalid IL or missing references) bool flag = ReadAnimationOpen(); _openAmount = Mathf.MoveTowards(_openAmount, flag ? 1f : 0f, Time.deltaTime * 3.3f); float num = _openAmount * _openAmount * (3f - 2f * _openAmount); foreach (MovingWing movingWing in _movingWings) { if (!((Object)(object)movingWing.Hinge == (Object)null)) { movingWing.Hinge.localPosition = Vector3.Lerp(movingWing.ClosedPosition, movingWing.OpenPosition, num); movingWing.Hinge.localRotation = Quaternion.Slerp(movingWing.ClosedRotation, movingWing.OpenRotation, num); } } if ((Object)(object)_lensGlow != (Object)null) { float num2 = 1f + (0.055f + 0.045f * num) * Mathf.Sin(Time.time * (4.5f + num * 2f)); _lensGlow.localScale = new Vector3(0.29f * num2, 0.018f, 0.29f * num2); } if ((Object)(object)_shieldRing != (Object)null) { ((Component)_shieldRing).gameObject.SetActive(num > 0.015f); _shieldRing.Rotate(Vector3.forward, Time.deltaTime * Mathf.Lerp(18f, 42f, num), (Space)1); float num3 = 1f + Mathf.Sin(Time.time * 4.2f) * 0.018f * num; _shieldRing.localScale = Vector3.one * num3; } } internal Quaternion GetExtractionRotation(Quaternion playerViewRotation) { //IL_0010: 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_001d: 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_0027: 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) if ((Object)(object)_modelRoot == (Object)null) { return playerViewRotation; } return playerViewRotation * _inventoryModelRotation * Quaternion.Inverse(_worldModelRotation); } private bool ReadAnimationOpen() { if ((Object)(object)_itemDrone != (Object)null && AnimationOpenField != null) { try { return (bool)AnimationOpenField.GetValue(_itemDrone); } catch (Exception) { } } if ((Object)(object)_itemToggle != (Object)null) { return _itemToggle.toggleState; } return false; } private void CreateMaterials(Material fallback) { //IL_0067: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_00c7: 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_0127: Unknown result type (might be due to invalid IL or missing references) Shader val = Shader.Find("Standard"); if ((Object)(object)val == (Object)null) { val = Shader.Find("Universal Render Pipeline/Lit"); } if ((Object)(object)val == (Object)null && (Object)(object)fallback != (Object)null) { val = fallback.shader; } if ((Object)(object)val == (Object)null) { throw new InvalidOperationException("No compatible shader was found for Featherguard Concept 1.3."); } _black = CreateCleanMaterial(val, "Black Chassis", new Color(0.025f, 0.029f, 0.036f, 1f), 0.5f, emissive: false); _darkMetal = CreateCleanMaterial(val, "Gunmetal", new Color(0.24f, 0.27f, 0.31f, 1f), 0.9f, emissive: false); _white = CreateCleanMaterial(val, "White Armour", new Color(0.91f, 0.93f, 0.95f, 1f), 0.15f, emissive: false); _red = CreateCleanMaterial(val, "Red Armour", new Color(0.72f, 0.018f, 0.028f, 1f), 0.3f, emissive: false); _redGlow = CreateCleanMaterial(val, "Red Energy", new Color(1f, 0.008f, 0.012f, 1f), 0.32f, emissive: true); } private static Material CreateCleanMaterial(Shader shader, string name, Color color, float metallic, bool emissive) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Expected O, but got Unknown //IL_001e: 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_009c: 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) Material val = new Material(shader); ((Object)val).name = "Featherguard " + name; SetColor(val, "_Color", color); SetColor(val, "_BaseColor", color); SetFloat(val, "_Metallic", metallic); SetFloat(val, "_Glossiness", emissive ? 0.82f : 0.72f); SetFloat(val, "_Smoothness", emissive ? 0.82f : 0.72f); SetFloat(val, "_SpecularHighlights", 1f); SetFloat(val, "_GlossyReflections", 1f); if (emissive) { SetColor(val, "_EmissionColor", color * 2.8f); val.EnableKeyword("_EMISSION"); } return val; } private void BuildArmouredBody(Transform parent) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0168: Unknown result type (might be due to invalid IL or missing references) //IL_016d: Unknown result type (might be due to invalid IL or missing references) //IL_0191: 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_01d6: Unknown result type (might be due to invalid IL or missing references) //IL_01ea: 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_0228: 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_0250: Unknown result type (might be due to invalid IL or missing references) CreatePrimitive("Spherical Internal Chassis", (PrimitiveType)0, parent, Vector3.zero, new Vector3(1.68f, 1.66f, 1.68f), Vector3.zero, _black); CreateSpherePatch("Upper Left White Armour", parent, 0.865f, 5f, 69f, -82f, -18f, 14, 9, _white); CreateSpherePatch("Upper Right White Armour", parent, 0.865f, 5f, 69f, 18f, 82f, 14, 9, _white); CreateSpherePatch("Lower Left White Armour", parent, 0.865f, -68f, -5f, -82f, -18f, 14, 9, _white); CreateSpherePatch("Lower Right White Armour", parent, 0.865f, -68f, -5f, 18f, 82f, 14, 9, _white); CreateSpherePatch("Dorsal Red Armour", parent, 0.872f, -70f, 72f, -13f, 13f, 9, 15, _red); CreateSpherePatch("Rear Red Armour", parent, 0.868f, -54f, 58f, 130f, 230f, 16, 12, _red); CreateTorus("Front Recess Ring", parent, 0.57f, 0.052f, 56, 9, new Vector3(0f, 0f, -0.705f), Vector3.zero, _darkMetal); CreateTorus("Outer Chassis Seam", parent, 0.858f, 0.022f, 64, 7, Vector3.zero, new Vector3(90f, 0f, 0f), _darkMetal); for (int i = -1; i <= 1; i += 2) { CreatePrimitive("Upper Armour Fastener", (PrimitiveType)2, parent, new Vector3(0.48f * (float)i, 0.57f, -0.58f), new Vector3(0.055f, 0.018f, 0.055f), new Vector3(90f, 0f, 0f), _redGlow); CreatePrimitive("Lower Armour Fastener", (PrimitiveType)2, parent, new Vector3(0.48f * (float)i, -0.57f, -0.58f), new Vector3(0.045f, 0.018f, 0.045f), new Vector3(90f, 0f, 0f), _darkMetal); } } private Transform BuildFrontLens(Transform parent) { //IL_0016: 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_003e: 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_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_00c1: Unknown result type (might be due to invalid IL or missing references) //IL_00c6: Unknown result type (might be due to invalid IL or missing references) //IL_00ed: Unknown result type (might be due to invalid IL or missing references) //IL_0101: Unknown result type (might be due to invalid IL or missing references) //IL_0115: Unknown result type (might be due to invalid IL or missing references) //IL_013c: Unknown result type (might be due to invalid IL or missing references) //IL_0150: 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) CreatePrimitive("Lens Black Housing", (PrimitiveType)2, parent, new Vector3(0f, 0f, -0.805f), new Vector3(0.63f, 0.115f, 0.63f), new Vector3(90f, 0f, 0f), _black); CreatePrimitive("Lens Segmented Metal Ring", (PrimitiveType)2, parent, new Vector3(0f, 0f, -0.93f), new Vector3(0.51f, 0.036f, 0.51f), new Vector3(90f, 0f, 0f), _darkMetal); CreateTorus("Lens White Trim", parent, 0.405f, 0.055f, 48, 9, new Vector3(0f, 0f, -0.985f), Vector3.zero, _white); CreatePrimitive("Lens Red Aperture", (PrimitiveType)2, parent, new Vector3(0f, 0f, -1.01f), new Vector3(0.36f, 0.024f, 0.36f), new Vector3(90f, 0f, 0f), _red); GameObject val = CreatePrimitive("Front Beam Lens", (PrimitiveType)2, parent, new Vector3(0f, 0f, -1.048f), new Vector3(0.29f, 0.018f, 0.29f), new Vector3(90f, 0f, 0f), _redGlow); _lensGlow = val.transform; return val.transform; } private void BuildSideHubs(Transform parent) { //IL_0036: 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_005e: 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_00a2: 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_00e6: Unknown result type (might be due to invalid IL or missing references) //IL_00fa: Unknown result type (might be due to invalid IL or missing references) //IL_010e: Unknown result type (might be due to invalid IL or missing references) //IL_014a: Unknown result type (might be due to invalid IL or missing references) //IL_015e: Unknown result type (might be due to invalid IL or missing references) //IL_0199: Unknown result type (might be due to invalid IL or missing references) //IL_01ad: Unknown result type (might be due to invalid IL or missing references) for (int i = -1; i <= 1; i += 2) { string obj = ((i < 0) ? "Left" : "Right"); CreatePrimitive(obj + " Wing Hinge Housing", (PrimitiveType)2, parent, new Vector3((float)i * 0.79f, 0.02f, 0.1f), new Vector3(0.43f, 0.1f, 0.43f), new Vector3(0f, 0f, 90f), _black); CreatePrimitive(obj + " Wing Hinge Metal", (PrimitiveType)2, parent, new Vector3((float)i * 0.9f, 0.02f, 0.1f), new Vector3(0.31f, 0.035f, 0.31f), new Vector3(0f, 0f, 90f), _darkMetal); CreatePrimitive(obj + " Wing Hinge Light", (PrimitiveType)2, parent, new Vector3((float)i * 1.025f, 0.02f, 0.1f), new Vector3(0.22f, 0.018f, 0.22f), new Vector3(0f, 0f, 90f), _redGlow); CreateTorus(obj + " Wing Lamp Metal Bezel", parent, 0.15f, 0.025f, 40, 8, new Vector3((float)i * 1.01f, 0.02f, 0.1f), new Vector3(0f, 90f, 0f), _darkMetal); CreateTorus(obj + " Wing Lamp Red Ring", parent, 0.115f, 0.012f, 40, 8, new Vector3((float)i * 1.05f, 0.02f, 0.1f), new Vector3(0f, 90f, 0f), _redGlow); } } private void BuildWingFan(Transform parent, float side, string label) { //IL_001a: 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_0082: Unknown result type (might be due to invalid IL or missing references) Vector3 root = default(Vector3); ((Vector3)(ref root))..ctor(side * 0.89f, 0.03f, 0.13f); CreateWingBlade(parent, root, side, label + " Upper Main Wing", 0, 1.12f, 0.46f, _red, -4f, -48f, 0.035f); CreateWingBlade(parent, root, side, label + " Middle Wing", 1, 0.84f, 0.41f, _white, 5f, 7f, 0.012f); CreateWingBlade(parent, root, side, label + " Lower Wing", 2, 0.66f, 0.36f, _white, 14f, 58f, -0.018f); } private void CreateWingBlade(Transform parent, Vector3 root, float side, string name, int order, float length, float width, Material material, float closedAngle, float openAngle, float forwardOffset) { //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_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_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0072: 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_009a: Unknown result type (might be due to invalid IL or missing references) //IL_009f: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00b8: Unknown result type (might be due to invalid IL or missing references) //IL_00bd: Unknown result type (might be due to invalid IL or missing references) //IL_00cc: Unknown result type (might be due to invalid IL or missing references) //IL_00d1: Unknown result type (might be due to invalid IL or missing references) //IL_00d6: 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_00ea: Unknown result type (might be due to invalid IL or missing references) //IL_0108: Unknown result type (might be due to invalid IL or missing references) //IL_0116: Unknown result type (might be due to invalid IL or missing references) //IL_0135: Unknown result type (might be due to invalid IL or missing references) //IL_0149: Unknown result type (might be due to invalid IL or missing references) //IL_014e: Unknown result type (might be due to invalid IL or missing references) //IL_0177: 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_017e: Unknown result type (might be due to invalid IL or missing references) //IL_0180: Unknown result type (might be due to invalid IL or missing references) //IL_0186: Unknown result type (might be due to invalid IL or missing references) //IL_0187: Unknown result type (might be due to invalid IL or missing references) //IL_018d: Unknown result type (might be due to invalid IL or missing references) //IL_018e: Unknown result type (might be due to invalid IL or missing references) GameObject val = new GameObject(name + " Hinge"); val.transform.SetParent(parent, false); Vector3 val2 = root + new Vector3(side * (float)order * 0.014f, (float)(-order) * 0.012f, (float)order * 0.016f); Vector3 openPosition = root + new Vector3(side * (float)order * 0.03f, (float)(-order) * 0.03f, (float)order * 0.035f); Quaternion val3 = Quaternion.Euler(18f, 0f, side * -16f) * Quaternion.Euler(0f, side * 70f, 0f); Quaternion val4 = val3 * Quaternion.Euler(0f, 0f, side * closedAngle); Quaternion openRotation = val3 * Quaternion.Euler(0f, 0f, side * openAngle); val.transform.localPosition = val2; val.transform.localRotation = val4; CreateFeatherMesh(name, val.transform, new Vector3(0f, length * 0.5f, forwardOffset), new Vector3(width, length, 0.4f), material); CreatePrimitive(name + " Root Joint", (PrimitiveType)0, val.transform, Vector3.zero, new Vector3(0.22f, 0.18f, 0.15f), Vector3.zero, _darkMetal); _movingWings.Add(new MovingWing { Hinge = val.transform, ClosedRotation = val4, OpenRotation = openRotation, ClosedPosition = val2, OpenPosition = openPosition }); } private void BuildInternalWiring(Transform parent) { //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_0067: 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_0085: Unknown result type (might be due to invalid IL or missing references) //IL_008a: Unknown result type (might be due to invalid IL or missing references) //IL_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_00e3: Unknown result type (might be due to invalid IL or missing references) //IL_00e8: Unknown result type (might be due to invalid IL or missing references) //IL_0101: Unknown result type (might be due to invalid IL or missing references) //IL_0106: Unknown result type (might be due to invalid IL or missing references) //IL_011f: Unknown result type (might be due to invalid IL or missing references) //IL_0124: Unknown result type (might be due to invalid IL or missing references) //IL_013d: Unknown result type (might be due to invalid IL or missing references) //IL_0142: Unknown result type (might be due to invalid IL or missing references) //IL_017d: Unknown result type (might be due to invalid IL or missing references) //IL_0182: Unknown result type (might be due to invalid IL or missing references) //IL_019b: Unknown result type (might be due to invalid IL or missing references) //IL_01a0: Unknown result type (might be due to invalid IL or missing references) //IL_01b9: Unknown result type (might be due to invalid IL or missing references) //IL_01be: Unknown result type (might be due to invalid IL or missing references) //IL_01d7: Unknown result type (might be due to invalid IL or missing references) //IL_01dc: Unknown result type (might be due to invalid IL or missing references) for (int i = -1; i <= 1; i += 2) { string text = ((i < 0) ? "Left" : "Right"); CreateWire(text + " Red Power Cable", parent, _redGlow, 0.034f, (Vector3[])(object)new Vector3[4] { new Vector3((float)i * 0.23f, 0.47f, -0.72f), new Vector3((float)i * 0.47f, 0.35f, -0.69f), new Vector3((float)i * 0.7f, 0.19f, -0.48f), new Vector3((float)i * 0.86f, 0.07f, -0.12f) }); CreateWire(text + " White Data Cable", parent, _white, 0.024f, (Vector3[])(object)new Vector3[4] { new Vector3((float)i * 0.18f, -0.46f, -0.74f), new Vector3((float)i * 0.43f, -0.39f, -0.7f), new Vector3((float)i * 0.67f, -0.19f, -0.5f), new Vector3((float)i * 0.84f, -0.04f, -0.16f) }); CreateWire(text + " Black Control Cable", parent, _darkMetal, 0.03f, (Vector3[])(object)new Vector3[4] { new Vector3((float)i * 0.33f, 0.02f, -0.82f), new Vector3((float)i * 0.56f, 0.06f, -0.65f), new Vector3((float)i * 0.75f, 0.08f, -0.39f), new Vector3((float)i * 0.86f, 0.04f, -0.12f) }); } } private void BuildShieldRing(Transform parent) { //IL_0013: 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) GameObject val = CreateTorus("Active Featherguard Shield", parent, 1.23f, 0.025f, 72, 8, Vector3.zero, new Vector3(7f, 0f, 0f), _redGlow); _shieldRing = val.transform; val.SetActive(false); } private Bounds FindBodyBounds(MeshRenderer[] meshes, SkinnedMeshRenderer[] skinned) { //IL_005f: 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_010b: Unknown result type (might be due to invalid IL or missing references) //IL_0110: Unknown result type (might be due to invalid IL or missing references) //IL_00f0: Unknown result type (might be due to invalid IL or missing references) //IL_00f5: Unknown result type (might be due to invalid IL or missing references) //IL_00ff: Unknown result type (might be due to invalid IL or missing references) //IL_0104: Unknown result type (might be due to invalid IL or missing references) //IL_0138: Unknown result type (might be due to invalid IL or missing references) //IL_0159: Unknown result type (might be due to invalid IL or missing references) SphereCollider val = (from collider in ((Component)this).GetComponentsInChildren(true) where ((Collider)collider).enabled && !((Collider)collider).isTrigger select collider).OrderByDescending(delegate(SphereCollider collider) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0009: Unknown result type (might be due to invalid IL or missing references) Bounds bounds2 = ((Collider)collider).bounds; return ((Bounds)(ref bounds2)).size.x; }).FirstOrDefault(); if ((Object)(object)val != (Object)null) { return ((Collider)val).bounds; } Collider val2 = (from collider in ((Component)this).GetComponentsInChildren(true) where collider.enabled && !collider.isTrigger select collider).OrderByDescending(delegate(Collider collider) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_0014: 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_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_002d: 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) Bounds bounds2 = collider.bounds; float x = ((Bounds)(ref bounds2)).size.x; bounds2 = collider.bounds; float num = x * ((Bounds)(ref bounds2)).size.y; bounds2 = collider.bounds; return num * ((Bounds)(ref bounds2)).size.z; }).FirstOrDefault(); if ((Object)(object)val2 != (Object)null) { return val2.bounds; } Renderer val3 = meshes.Cast().Concat(skinned.Cast()).FirstOrDefault(); if ((Object)(object)val3 == (Object)null) { return new Bounds(((Component)this).transform.position, Vector3.one * 0.5f); } Bounds bounds = val3.bounds; foreach (Renderer item in meshes.Cast().Concat(skinned.Cast())) { ((Bounds)(ref bounds)).Encapsulate(item.bounds); } return bounds; } private static bool IsEffectRenderer(Renderer renderer) { if (!((Object)(object)renderer == (Object)null) && !(renderer is ParticleSystemRenderer) && !((Object)(object)((Component)renderer).GetComponentInParent() != (Object)null) && !((Object)(object)((Component)renderer).GetComponent() != (Object)null)) { return (Object)(object)((Component)renderer).GetComponentInParent() != (Object)null; } return true; } private static GameObject CreatePrimitive(string name, PrimitiveType type, Transform parent, Vector3 position, Vector3 scale, Vector3 rotation, Material material) { //IL_0000: 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_002c: 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) GameObject obj = GameObject.CreatePrimitive(type); ((Object)obj).name = name; obj.transform.SetParent(parent, false); obj.transform.localPosition = position; obj.transform.localScale = scale; obj.transform.localEulerAngles = rotation; Collider component = obj.GetComponent(); if ((Object)(object)component != (Object)null) { Object.Destroy((Object)(object)component); } obj.GetComponent().sharedMaterial = material; return obj; } private static GameObject CreateTorus(string name, Transform parent, float majorRadius, float tubeRadius, int majorSegments, int tubeSegments, Vector3 position, Vector3 rotation, Material material) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0013: 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_0020: 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_002d: 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_005e: Expected O, but got Unknown GameObject val = new GameObject(name); val.transform.SetParent(parent, false); val.transform.localPosition = position; val.transform.localEulerAngles = rotation; MeshFilter val2 = val.AddComponent(); MeshRenderer obj = val.AddComponent(); val2.sharedMesh = CreateTorusMesh(name + " Mesh", majorRadius, tubeRadius, majorSegments, tubeSegments); ((Renderer)obj).sharedMaterial = material; return val; } private static Mesh CreateTorusMesh(string name, float majorRadius, float tubeRadius, int majorSegments, int tubeSegments) { //IL_0160: Unknown result type (might be due to invalid IL or missing references) //IL_0165: Unknown result type (might be due to invalid IL or missing references) //IL_016c: Unknown result type (might be due to invalid IL or missing references) //IL_0173: Unknown result type (might be due to invalid IL or missing references) //IL_017a: Unknown result type (might be due to invalid IL or missing references) //IL_0181: Unknown result type (might be due to invalid IL or missing references) //IL_0188: Unknown result type (might be due to invalid IL or missing references) //IL_018f: Expected O, but got Unknown //IL_0085: 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_0093: Unknown result type (might be due to invalid IL or missing references) //IL_009f: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Unknown result type (might be due to invalid IL or missing references) //IL_00a9: Unknown result type (might be due to invalid IL or missing references) //IL_00ae: 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_00b9: Unknown result type (might be due to invalid IL or missing references) //IL_00be: Unknown result type (might be due to invalid IL or missing references) //IL_00c3: 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_00cd: 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) Vector3[] array = (Vector3[])(object)new Vector3[majorSegments * tubeSegments]; Vector3[] array2 = (Vector3[])(object)new Vector3[array.Length]; Vector2[] array3 = (Vector2[])(object)new Vector2[array.Length]; int[] array4 = new int[majorSegments * tubeSegments * 6]; Vector3 val = default(Vector3); for (int i = 0; i < majorSegments; i++) { float num = (float)i * (float)Math.PI * 2f / (float)majorSegments; ((Vector3)(ref val))..ctor(Mathf.Cos(num), Mathf.Sin(num), 0f); for (int j = 0; j < tubeSegments; j++) { float num2 = (float)j * (float)Math.PI * 2f / (float)tubeSegments; int num3 = i * tubeSegments + j; Vector3 val2 = val * Mathf.Cos(num2) + Vector3.forward * Mathf.Sin(num2); array[num3] = val * majorRadius + val2 * tubeRadius; array2[num3] = val2; array3[num3] = new Vector2((float)i / (float)majorSegments, (float)j / (float)tubeSegments); int num4 = (i + 1) % majorSegments * tubeSegments; int num5 = (j + 1) % tubeSegments; int num6 = num3 * 6; array4[num6] = num3; array4[num6 + 1] = num4 + j; array4[num6 + 2] = num4 + num5; array4[num6 + 3] = num3; array4[num6 + 4] = num4 + num5; array4[num6 + 5] = i * tubeSegments + num5; } } Mesh val3 = new Mesh { name = name, vertices = array, normals = array2, uv = array3, triangles = array4 }; val3.RecalculateBounds(); return val3; } private static void CreateSpherePatch(string name, Transform parent, float radius, float latitudeMin, float latitudeMax, float longitudeMin, float longitudeMax, int longitudeSegments, int latitudeSegments, Material material) { //IL_00b4: 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_00c4: Unknown result type (might be due to invalid IL or missing references) //IL_00c6: Unknown result type (might be due to invalid IL or missing references) //IL_00d3: Unknown result type (might be due to invalid IL or missing references) //IL_00d8: Unknown result type (might be due to invalid IL or missing references) //IL_017c: Unknown result type (might be due to invalid IL or missing references) //IL_0181: Unknown result type (might be due to invalid IL or missing references) //IL_018e: Unknown result type (might be due to invalid IL or missing references) //IL_0193: Unknown result type (might be due to invalid IL or missing references) //IL_01a4: 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_01b2: 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_01c4: Expected O, but got Unknown //IL_01cb: Unknown result type (might be due to invalid IL or missing references) int num = longitudeSegments + 1; int num2 = latitudeSegments + 1; Vector3[] array = (Vector3[])(object)new Vector3[num * num2]; Vector3[] array2 = (Vector3[])(object)new Vector3[array.Length]; Vector2[] array3 = (Vector2[])(object)new Vector2[array.Length]; int[] array4 = new int[longitudeSegments * latitudeSegments * 6]; Vector3 val = default(Vector3); for (int i = 0; i < num2; i++) { float num3 = (float)i / (float)latitudeSegments; float num4 = Mathf.Lerp(latitudeMin, latitudeMax, num3) * ((float)Math.PI / 180f); for (int j = 0; j < num; j++) { float num5 = (float)j / (float)longitudeSegments; float num6 = Mathf.Lerp(longitudeMin, longitudeMax, num5) * ((float)Math.PI / 180f); ((Vector3)(ref val))..ctor(Mathf.Cos(num4) * Mathf.Sin(num6), Mathf.Sin(num4), (0f - Mathf.Cos(num4)) * Mathf.Cos(num6)); int num7 = i * num + j; array[num7] = val * radius; array2[num7] = val; array3[num7] = new Vector2(num5, num3); } } int num8 = 0; for (int k = 0; k < latitudeSegments; k++) { for (int l = 0; l < longitudeSegments; l++) { int num9 = k * num + l; int num10 = num9 + num; array4[num8++] = num9; array4[num8++] = num10; array4[num8++] = num10 + 1; array4[num8++] = num9; array4[num8++] = num10 + 1; array4[num8++] = num9 + 1; } } GameObject val2 = new GameObject(name); val2.transform.SetParent(parent, false); Mesh val3 = new Mesh { name = name + " Mesh", vertices = array, normals = array2, uv = array3, triangles = array4 }; val3.RecalculateBounds(); val2.AddComponent().sharedMesh = val3; ((Renderer)val2.AddComponent()).sharedMaterial = material; } private void CreateFeatherMesh(string name, Transform parent, Vector3 position, Vector3 scale, Material material) { //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_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_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_0055: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_006b: 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_0081: Unknown result type (might be due to invalid IL or missing references) //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_0097: 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_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_00c3: Unknown result type (might be due to invalid IL or missing references) //IL_00c8: Unknown result type (might be due to invalid IL or missing references) //IL_00da: Unknown result type (might be due to invalid IL or missing references) //IL_00df: Unknown result type (might be due to invalid IL or missing references) //IL_00f1: Unknown result type (might be due to invalid IL or missing references) //IL_00f2: Unknown result type (might be due to invalid IL or missing references) //IL_0117: Unknown result type (might be due to invalid IL or missing references) //IL_0118: Unknown result type (might be due to invalid IL or missing references) //IL_0148: Unknown result type (might be due to invalid IL or missing references) //IL_0149: Unknown result type (might be due to invalid IL or missing references) Vector2[] polygon = (Vector2[])(object)new Vector2[10] { new Vector2(0f, -0.49f), new Vector2(0.3588f, -0.3f), new Vector2(0.46f, 0.06f), new Vector2(0.4048f, 0.45f), new Vector2(0.24840002f, 0.79f), new Vector2(0f, 1.02f), new Vector2(-0.24840002f, 0.79f), new Vector2(-0.4048f, 0.45f), new Vector2(-0.46f, 0.06f), new Vector2(-0.3588f, -0.3f) }; CreateFeatherPanel(name + " Black Root", parent, position, scale, ClipFeather(polygon, -0.045f, above: false), _black); CreateFeatherPanel(name + " White Panel", parent, position, scale, ClipFeather(ClipFeather(polygon, -0.035f, above: true), 0.495f, above: false), _white); CreateFeatherPanel(name + " Tip", parent, position, scale, ClipFeather(polygon, 0.505f, above: true), material); } private static Vector2[] ClipFeather(Vector2[] polygon, float height, bool above) { //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_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_003f: 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_0044: 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_006c: Unknown result type (might be due to invalid IL or missing references) //IL_0073: 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_0084: Unknown result type (might be due to invalid IL or missing references) //IL_008b: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_00ac: Unknown result type (might be due to invalid IL or missing references) //IL_00ae: Unknown result type (might be due to invalid IL or missing references) //IL_00a5: Unknown result type (might be due to invalid IL or missing references) List list = new List(); Vector2 val = polygon[^1]; bool flag = (above ? (val.y >= height) : (val.y <= height)); foreach (Vector2 val2 in polygon) { bool num = (above ? (val2.y >= height) : (val2.y <= height)); if (num != flag) { float num2 = (height - val.y) / (val2.y - val.y); list.Add(new Vector2(val.x + (val2.x - val.x) * num2, height)); } if (num) { list.Add(val2); } val = val2; flag = num; } return list.ToArray(); } private static void CreateFeatherPanel(string name, Transform parent, Vector3 position, Vector3 scale, Vector2[] outline, Material material) { //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0067: 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_012f: Unknown result type (might be due to invalid IL or missing references) //IL_0134: Unknown result type (might be due to invalid IL or missing references) //IL_0145: 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_0155: Expected O, but got Unknown //IL_0164: Unknown result type (might be due to invalid IL or missing references) //IL_0169: Unknown result type (might be due to invalid IL or missing references) //IL_0176: Unknown result type (might be due to invalid IL or missing references) //IL_017c: Unknown result type (might be due to invalid IL or missing references) //IL_0182: Unknown result type (might be due to invalid IL or missing references) //IL_0188: Unknown result type (might be due to invalid IL or missing references) //IL_018e: Unknown result type (might be due to invalid IL or missing references) int num = outline.Length; Vector3[] array = (Vector3[])(object)new Vector3[num * 2]; for (int i = 0; i < num; i++) { array[i] = new Vector3(outline[i].x, outline[i].y, -0.055f); array[i + num] = new Vector3(outline[i].x, outline[i].y, 0.055f); } int[] array2 = new int[(num - 2) * 6 + num * 6]; int num2 = 0; for (int j = 1; j < num - 1; j++) { array2[num2++] = 0; array2[num2++] = j + 1; array2[num2++] = j; array2[num2++] = num; array2[num2++] = num + j; array2[num2++] = num + j + 1; } for (int k = 0; k < num; k++) { int num3 = (k + 1) % num; array2[num2++] = k; array2[num2++] = num3; array2[num2++] = num + num3; array2[num2++] = k; array2[num2++] = num + num3; array2[num2++] = num + k; } Mesh val = new Mesh { name = name + " Mesh", vertices = array, triangles = array2 }; val.RecalculateNormals(); val.RecalculateBounds(); GameObject val2 = new GameObject(name); val2.transform.SetParent(parent, false); val2.transform.localPosition = position; val2.transform.localScale = scale; val2.AddComponent().sharedMesh = val; ((Renderer)val2.AddComponent()).sharedMaterial = material; } private static void CreateWire(string name, Transform parent, Material material, float width, Vector3[] points) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) GameObject val = new GameObject(name); val.transform.SetParent(parent, false); LineRenderer obj = val.AddComponent(); obj.useWorldSpace = false; obj.positionCount = points.Length; obj.SetPositions(points); obj.startWidth = width; obj.endWidth = width * 0.72f; obj.numCapVertices = 5; obj.numCornerVertices = 4; ((Renderer)obj).sharedMaterial = material; } private static void SetColor(Material material, string property, Color value) { //IL_000b: Unknown result type (might be due to invalid IL or missing references) if (material.HasProperty(property)) { material.SetColor(property, value); } } private static void SetFloat(Material material, string property, float value) { if (material.HasProperty(property)) { material.SetFloat(property, value); } } } [HarmonyPatch(typeof(ItemDrone), "Awake")] internal static class ItemDroneWallRecoveryPatch { [HarmonyPostfix] private static void Postfix(ItemDrone __instance) { if (DroneWallRecovery.IsSupportedDrone(__instance) && (Object)(object)((Component)__instance).GetComponent() == (Object)null) { ((Component)__instance).gameObject.AddComponent(); } } } public sealed class DroneWallRecovery : MonoBehaviour { private const float CastRadius = 0.08f; private const float MinimumCheckDistance = 0.2f; private const float RequiredBlockedTime = 0.08f; private const float RecoveryCooldown = 0.25f; private static readonly FieldInfo MagnetTargetField = AccessTools.Field(typeof(ItemDrone), "magnetTarget"); private static readonly FieldInfo AttachPointField = AccessTools.Field(typeof(ItemDrone), "attachPoint"); private static readonly FieldInfo RayHitPositionField = AccessTools.Field(typeof(ItemDrone), "rayHitPosition"); private static readonly FieldInfo MagnetActiveField = AccessTools.Field(typeof(ItemDrone), "magnetActive"); private static readonly MethodInfo FindTeleportSpotMethod = AccessTools.Method(typeof(ItemDrone), "FindTeleportSpot", (Type[])null, (Type[])null); private readonly RaycastHit[] _hits = (RaycastHit[])(object)new RaycastHit[16]; private ItemDrone _drone; private Rigidbody _droneRigidbody; private float _blockedTime; private float _nextRecoveryTime; internal static bool IsSupportedDrone(ItemDrone drone) { if ((Object)(object)drone == (Object)null) { return false; } if ((Object)(object)((Component)drone).GetComponent() != (Object)null) { return true; } ItemAttributes component = ((Component)drone).GetComponent(); string text = (((Object)(object)component != (Object)null && (Object)(object)component.item != (Object)null) ? ((Object)component.item).name : ((Object)((Component)drone).gameObject).name); if (text.EndsWith("(Clone)", StringComparison.Ordinal)) { text = text.Substring(0, text.Length - "(Clone)".Length).TrimEnd(); } if (!string.Equals(text, "Item Drone Feather", StringComparison.Ordinal) || !((Object)(object)((Component)drone).GetComponent() != (Object)null)) { if (string.Equals(text, "Item Drone Indestructible", StringComparison.Ordinal)) { return (Object)(object)((Component)drone).GetComponent() != (Object)null; } return false; } return true; } private void Awake() { _drone = ((Component)this).GetComponent(); _droneRigidbody = ((Component)this).GetComponent(); if ((Object)(object)_droneRigidbody == (Object)null) { _droneRigidbody = ((Component)this).GetComponentInChildren(true); } } private void FixedUpdate() { //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Invalid comparison between Unknown and I4 //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Invalid comparison between Unknown and I4 //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Invalid comparison between Unknown and I4 //IL_0077: 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_007c: 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_00a5: 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_00aa: Unknown result type (might be due to invalid IL or missing references) //IL_00ab: Unknown result type (might be due to invalid IL or missing references) //IL_00ac: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Unknown result type (might be due to invalid IL or missing references) //IL_00d0: Unknown result type (might be due to invalid IL or missing references) //IL_00d3: Unknown result type (might be due to invalid IL or missing references) //IL_00d8: Unknown result type (might be due to invalid IL or missing references) //IL_0116: 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_011b: Unknown result type (might be due to invalid IL or missing references) //IL_0120: Unknown result type (might be due to invalid IL or missing references) //IL_0125: Unknown result type (might be due to invalid IL or missing references) if (!IsSupportedDrone(_drone) || ((int)_drone.currentState != 3 && (int)_drone.currentState != 2) || !SemiFunc.IsMasterClientOrSingleplayer() || !ReadMagnetActive()) { _blockedTime = 0f; return; } Transform val = ReadTarget(); if ((Object)(object)val == (Object)null) { _blockedTime = 0f; return; } Vector3 val2 = (((int)_drone.currentState == 3) ? ReadAttachPoint() : ReadRayHitPosition()); Vector3 val3 = val.TransformPoint(val2); Vector3 val4 = (((Object)(object)_droneRigidbody != (Object)null) ? _droneRigidbody.worldCenterOfMass : ((Component)this).transform.position); Vector3 val5 = val3 - val4; float magnitude = ((Vector3)(ref val5)).magnitude; if (magnitude <= 0.2f) { _blockedTime = 0f; return; } Vector3 val6 = val5 / magnitude; float num = Mathf.Min(0.015f, magnitude * 0.04f); float num2 = Mathf.Min(0.08f, magnitude * 0.12f); float num3 = magnitude - num - num2; if (num3 <= 0f || !HasRealObstacle(val4 + val6 * num, val6, num3, val)) { _blockedTime = 0f; return; } _blockedTime += Time.fixedDeltaTime; if (!(_blockedTime < 0.08f) && !(Time.fixedTime < _nextRecoveryTime)) { _blockedTime = 0f; _nextRecoveryTime = Time.fixedTime + 0.25f; if (FindTeleportSpotMethod == null) { ((Behaviour)this).enabled = false; FeatherguardDronePlugin.Log.LogWarning((object)"Wall recovery was disabled because ItemDrone.FindTeleportSpot is unavailable in this game build."); } else { FindTeleportSpotMethod.Invoke(_drone, null); FeatherguardDronePlugin.Log.LogDebug((object)"A wall interrupted the Featherguard attachment line; requested vanilla safe teleport recovery."); } } } private bool HasRealObstacle(Vector3 origin, Vector3 direction, float distance, Transform target) { //IL_0000: 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_000e: Unknown result type (might be due to invalid IL or missing references) int num = Physics.SphereCastNonAlloc(origin, 0.08f, direction, _hits, distance, LayerMask.op_Implicit(SemiFunc.LayerMaskGetVisionObstruct()), (QueryTriggerInteraction)1); Rigidbody componentInParent = ((Component)target).GetComponentInParent(); for (int i = 0; i < num; i++) { Collider collider = ((RaycastHit)(ref _hits[i])).collider; if (!((Object)(object)collider == (Object)null)) { Transform transform = ((Component)collider).transform; if (!IsSameHierarchy(transform, ((Component)this).transform) && !IsSameHierarchy(transform, target) && (!((Object)(object)_droneRigidbody != (Object)null) || !((Object)(object)collider.attachedRigidbody == (Object)(object)_droneRigidbody)) && (!((Object)(object)componentInParent != (Object)null) || !((Object)(object)collider.attachedRigidbody == (Object)(object)componentInParent))) { return true; } } } return false; } private static bool IsSameHierarchy(Transform candidate, Transform reference) { if (!((Object)(object)candidate == (Object)(object)reference) && !candidate.IsChildOf(reference)) { return reference.IsChildOf(candidate); } return true; } private Transform ReadTarget() { if (!(MagnetTargetField == null)) { object? value = MagnetTargetField.GetValue(_drone); return (Transform)((value is Transform) ? value : null); } return null; } private Vector3 ReadAttachPoint() { //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Unknown result type (might be due to invalid IL or missing references) if (!(AttachPointField == null)) { return (Vector3)AttachPointField.GetValue(_drone); } return Vector3.zero; } private Vector3 ReadRayHitPosition() { //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Unknown result type (might be due to invalid IL or missing references) if (!(RayHitPositionField == null)) { return (Vector3)RayHitPositionField.GetValue(_drone); } return Vector3.zero; } private bool ReadMagnetActive() { if (MagnetActiveField != null) { return (bool)MagnetActiveField.GetValue(_drone); } return false; } } [BepInPlugin("uz.cherdak.repo.featherguarddrone", "Featherguard Drone", "1.6.2")] [BepInDependency(/*Could not decode attribute arguments.*/)] public sealed class FeatherguardDronePlugin : BaseUnityPlugin { public const string PluginGuid = "uz.cherdak.repo.featherguarddrone"; public const string PluginName = "Featherguard Drone"; public const string PluginVersion = "1.6.2"; internal static ManualLogSource Log; internal static bool EnableCustomModel; internal static bool UseOriginalChassis; internal static bool AnimateShield; internal static float ModelScaleMultiplier; private bool _registered; private float _nextAttempt; private void Awake() { //IL_00b7: Unknown result type (might be due to invalid IL or missing references) Log = ((BaseUnityPlugin)this).Logger; EnableCustomModel = ((BaseUnityPlugin)this).Config.Bind("Visuals", "Enable custom model", true, "Use the Featherguard prototype body instead of the vanilla drone body.").Value; UseOriginalChassis = ((BaseUnityPlugin)this).Config.Bind("Visuals", "Use original chassis", true, "Use the recognisable vanilla drone body as the base of the hybrid model.").Value; AnimateShield = ((BaseUnityPlugin)this).Config.Bind("Visuals", "Animate shield rings", true, "Rotate and pulse the red shield rings.").Value; ModelScaleMultiplier = Mathf.Clamp(((BaseUnityPlugin)this).Config.Bind("Visuals", "Model scale", 1f, "Scale multiplier for the custom body. Useful while testing the prototype.").Value, 0.5f, 1.8f); new Harmony("uz.cherdak.repo.featherguarddrone").PatchAll(); ((BaseUnityPlugin)this).Logger.LogInfo((object)"Featherguard Drone 1.6.2 loaded."); } private void Update() { if (_registered || Time.unscaledTime < _nextAttempt) { return; } _nextAttempt = Time.unscaledTime + 1f; if ((Object)(object)StatsManager.instance == (Object)null || StatsManager.instance.itemDictionary.Count == 0) { return; } try { _registered = HybridItemFactory.TryRegister(); } catch (Exception ex) { ((BaseUnityPlugin)this).Logger.LogError((object)("Could not create the Featherguard Drone: " + ex)); _nextAttempt = Time.unscaledTime + 5f; } } } internal static class HybridItemFactory { internal const string HybridItemName = "Item Drone Featherguard"; internal const string HybridPrefabName = "Item Drone Featherguard"; private const string InventoryIconResource = "FeatherguardDrone.InventoryIcon.png"; private static readonly FieldInfo TargetValuablesField = AccessTools.Field(typeof(ItemDrone), "targetValuables"); private static readonly FieldInfo TargetNonValuablesField = AccessTools.Field(typeof(ItemDrone), "targetNonValuables"); private static readonly FieldInfo CustomTargetingConditionField = AccessTools.Field(typeof(ItemDrone), "customTargetingCondition"); private static readonly FieldInfo ItemIconField = AccessTools.Field(typeof(ItemEquippable), "ItemIcon"); private static bool _registered; private static string _lastFailure; private static Sprite _inventoryIcon; internal static void ApplyRuntimeInventoryIcon(ItemAttributes attributes) { if ((Object)(object)_inventoryIcon == (Object)null) { _inventoryIcon = LoadInventoryIcon(); } if (!((Object)(object)_inventoryIcon == (Object)null)) { Sprite val = Object.Instantiate(_inventoryIcon); ((Object)val).name = "Featherguard Inventory Icon 1.6.1"; AccessTools.Field(typeof(ItemAttributes), "icon").SetValue(attributes, val); AccessTools.Field(typeof(ItemAttributes), "hasIcon").SetValue(attributes, true); FeatherguardDronePlugin.Log.LogInfo((object)"Assigned per-instance Featherguard icon to ItemAttributes; vanilla icon cache bypassed."); } } internal static bool TryRegister() { if (_registered) { return true; } Item[] second = Resources.LoadAll("ScriptableObjects"); IEnumerable enumerable = Items.AllItems.Concat(second).Distinct(); if ((Object)(object)enumerable.FirstOrDefault((Func)((Item item) => (Object)(object)item != (Object)null && item.itemName == "Item Drone Featherguard")) != (Object)null) { _registered = true; return true; } Item val = FindVanillaItem("Item Drone Feather", enumerable); Item val2 = FindVanillaItem("Item Drone Indestructible", enumerable); if ((Object)(object)val == (Object)null || (Object)(object)val2 == (Object)null) { return RegistrationPending("built-in Feather or Indestructible item data is not ready"); } GameObject prefab = ((PrefabRef)(object)val.prefab).Prefab; GameObject prefab2 = ((PrefabRef)(object)val2.prefab).Prefab; if ((Object)(object)prefab == (Object)null || (Object)(object)prefab2 == (Object)null) { return RegistrationPending("built-in drone prefabs are not ready"); } GameObject val3 = Object.Instantiate(prefab2); ((Object)val3).name = "Item Drone Featherguard"; val3.SetActive(false); Object.DontDestroyOnLoad((Object)(object)val3); Item val4 = ScriptableObject.CreateInstance(); CopyItem(val2, val4); ((Object)val4).name = "Item Drone Featherguard"; val4.itemName = "Item Drone Featherguard"; val4.description = "Feather and Indestructible hybrid drone with an armoured spherical chassis, folding wings and shield ring."; Value val5 = ScriptableObject.CreateInstance(); ((Object)val5).name = "Value - Featherguard Drone"; val5.valueMin = val.value.valueMin + val2.value.valueMin; val5.valueMax = val.value.valueMax + val2.value.valueMax; val4.value = val5; ItemAttributes component = val3.GetComponent(); if ((Object)(object)component == (Object)null) { throw new InvalidOperationException("The Indestructible Drone prefab has no ItemAttributes component."); } component.item = val4; if ((Object)(object)val3.GetComponent() == (Object)null) { val3.AddComponent(); } ItemDrone component2 = val3.GetComponent(); if ((Object)(object)component2 == (Object)null) { throw new InvalidOperationException("The Indestructible Drone prefab has no ItemDrone component."); } SetTargetingOptions(component2, val3); SetInventoryIcon(val3); if ((Object)(object)val3.GetComponent() == (Object)null) { val3.AddComponent(); } if ((Object)(object)val3.GetComponent() == (Object)null) { val3.AddComponent(); } if ((Object)(object)val3.GetComponent() == (Object)null) { val3.AddComponent(); } ConceptDroneVisuals.ConfigurePrefabPhysics(val3); if ((Object)(object)val3.GetComponent() == (Object)null) { val3.AddComponent(); } if (Items.RegisterItem(component) == null) { throw new InvalidOperationException("REPOLib rejected the hybrid item prefab."); } FeatherguardDronePlugin.Log.LogInfo((object)string.Format("Registered {0}. Price range: {1:0}-{2:0} = Feather ({3:0}-{4:0}) + Indestructible ({5:0}-{6:0}); drain preset copied from Indestructible Drone.", "Item Drone Featherguard", val5.valueMin, val5.valueMax, val.value.valueMin, val.value.valueMax, val2.value.valueMin, val2.value.valueMax)); _registered = true; _lastFailure = null; return true; } private static void SetTargetingOptions(ItemDrone drone, GameObject prefab) { if (TargetValuablesField == null || TargetNonValuablesField == null || CustomTargetingConditionField == null) { throw new MissingFieldException("The current game build does not expose the expected ItemDrone targeting fields."); } TargetValuablesField.SetValue(drone, true); TargetNonValuablesField.SetValue(drone, true); HybridItemTargetingCondition hybridItemTargetingCondition = prefab.GetComponent(); if ((Object)(object)hybridItemTargetingCondition == (Object)null) { hybridItemTargetingCondition = prefab.AddComponent(); } CustomTargetingConditionField.SetValue(drone, hybridItemTargetingCondition); } private static void SetInventoryIcon(GameObject prefab) { ItemEquippable componentInChildren = prefab.GetComponentInChildren(true); if (componentInChildren == null || ItemIconField == null) { FeatherguardDronePlugin.Log.LogWarning((object)"Could not assign the Featherguard inventory icon."); return; } if ((Object)(object)_inventoryIcon == (Object)null) { _inventoryIcon = LoadInventoryIcon(); } if ((Object)(object)_inventoryIcon != (Object)null) { ItemIconField.SetValue(componentInChildren, _inventoryIcon); } } private static Sprite LoadInventoryIcon() { //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Expected O, but got Unknown //IL_00c4: Unknown result type (might be due to invalid IL or missing references) //IL_00d3: Unknown result type (might be due to invalid IL or missing references) using Stream stream = typeof(FeatherguardDronePlugin).Assembly.GetManifestResourceStream("FeatherguardDrone.InventoryIcon.png"); if (stream == null) { FeatherguardDronePlugin.Log.LogWarning((object)"Embedded Featherguard inventory icon was not found."); return null; } byte[] array = new byte[stream.Length]; int num; for (int i = 0; i < array.Length; i += num) { num = stream.Read(array, i, array.Length - i); if (num <= 0) { break; } } Texture2D val = new Texture2D(2, 2, (TextureFormat)5, false); ((Object)val).name = "Featherguard Inventory Icon Texture"; ((Texture)val).filterMode = (FilterMode)1; ((Texture)val).wrapMode = (TextureWrapMode)1; if (!ImageConversion.LoadImage(val, array, false)) { Object.Destroy((Object)(object)val); FeatherguardDronePlugin.Log.LogWarning((object)"Embedded Featherguard inventory icon could not be decoded."); return null; } Sprite obj = Sprite.Create(val, new Rect(0f, 0f, (float)((Texture)val).width, (float)((Texture)val).height), new Vector2(0.5f, 0.5f), 100f); ((Object)obj).name = "Featherguard Inventory Icon"; return obj; } private static bool RegistrationPending(string reason) { if (!string.Equals(_lastFailure, reason, StringComparison.Ordinal)) { _lastFailure = reason; FeatherguardDronePlugin.Log.LogWarning((object)("Featherguard registration pending: " + reason + ".")); } return false; } private static Item FindVanillaItem(string itemName, IEnumerable loadedItems) where T : Component { Item value = Resources.Load("Items/" + itemName); if (IsMatchingBuiltIn(value, itemName)) { return value; } if ((Object)(object)StatsManager.instance != (Object)null && StatsManager.instance.itemDictionary.TryGetValue(itemName, out value) && IsMatchingBuiltIn(value, itemName)) { return value; } Item[] source = loadedItems.Where((Item candidate) => HasComponent(candidate) && (Object)(object)candidate.value != (Object)null).ToArray(); value = ((IEnumerable)source).FirstOrDefault((Func)((Item candidate) => string.Equals(((Object)((PrefabRef)(object)candidate.prefab).Prefab).name, itemName, StringComparison.Ordinal))); if ((Object)(object)value != (Object)null) { return value; } value = ((IEnumerable)source).FirstOrDefault((Func)((Item candidate) => string.Equals(candidate.itemName, itemName, StringComparison.Ordinal))); if ((Object)(object)value != (Object)null) { return value; } return null; } private static bool IsMatchingBuiltIn(Item item, string itemName) where T : Component { if (!HasComponent(item) || (Object)(object)item.value == (Object)null) { return false; } if (!string.Equals(item.itemName, itemName, StringComparison.Ordinal)) { return string.Equals(((Object)((PrefabRef)(object)item.prefab).Prefab).name, itemName, StringComparison.Ordinal); } return true; } private static bool HasComponent(Item item) where T : Component { if ((Object)(object)item != (Object)null && item.prefab != null && (Object)(object)((PrefabRef)(object)item.prefab).Prefab != (Object)null) { return (Object)(object)((PrefabRef)(object)item.prefab).Prefab.GetComponentInChildren(true) != (Object)null; } return false; } private static void CopyItem(Item source, Item destination) { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_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_0028: 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_0034: 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_0088: 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) destination.disabled = false; destination.itemNameLocalized = null; destination.itemType = source.itemType; destination.emojiIcon = source.emojiIcon; destination.itemVolume = source.itemVolume; destination.itemSecretShopType = source.itemSecretShopType; destination.colorPreset = source.colorPreset; destination.maxAmount = source.maxAmount; destination.maxAmountInShop = source.maxAmountInShop; destination.minPlayerCount = source.minPlayerCount; destination.maxPurchase = source.maxPurchase; destination.maxPurchaseAmount = source.maxPurchaseAmount; destination.spawnRotationOffset = source.spawnRotationOffset; destination.physicalItem = source.physicalItem; } private static void AddFeatherModelParts(GameObject featherPrefab, GameObject hybridPrefab) { //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Expected O, but got Unknown //IL_00df: Unknown result type (might be due to invalid IL or missing references) //IL_00e4: Unknown result type (might be due to invalid IL or missing references) //IL_00f6: Unknown result type (might be due to invalid IL or missing references) //IL_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_0118: Unknown result type (might be due to invalid IL or missing references) //IL_0124: Unknown result type (might be due to invalid IL or missing references) //IL_0129: Unknown result type (might be due to invalid IL or missing references) //IL_0135: Unknown result type (might be due to invalid IL or missing references) //IL_013a: Unknown result type (might be due to invalid IL or missing references) //IL_0144: Unknown result type (might be due to invalid IL or missing references) //IL_0151: Unknown result type (might be due to invalid IL or missing references) //IL_015c: Unknown result type (might be due to invalid IL or missing references) //IL_0161: Unknown result type (might be due to invalid IL or missing references) //IL_016b: Unknown result type (might be due to invalid IL or missing references) HashSet hashSet = new HashSet(from filter in hybridPrefab.GetComponentsInChildren(true) where (Object)(object)filter.sharedMesh != (Object)null select ((Object)filter.sharedMesh).name); GameObject val = new GameObject("Feather Model Layer"); val.transform.SetParent(hybridPrefab.transform, false); int num = 0; MeshFilter[] componentsInChildren = featherPrefab.GetComponentsInChildren(true); foreach (MeshFilter val2 in componentsInChildren) { if (!((Object)(object)val2.sharedMesh == (Object)null) && !hashSet.Contains(((Object)val2.sharedMesh).name)) { MeshRenderer component = ((Component)val2).GetComponent(); if (!((Object)(object)component == (Object)null)) { GameObject val3 = new GameObject("Feather Part - " + ((Object)val2.sharedMesh).name); val3.transform.SetParent(val.transform, false); val3.transform.localPosition = featherPrefab.transform.InverseTransformPoint(((Component)val2).transform.position); val3.transform.localRotation = Quaternion.Inverse(featherPrefab.transform.rotation) * ((Component)val2).transform.rotation; val3.transform.localScale = DivideScale(((Component)val2).transform.lossyScale, featherPrefab.transform.lossyScale); val3.AddComponent().sharedMesh = val2.sharedMesh; ((Renderer)val3.AddComponent()).sharedMaterials = ((Renderer)component).sharedMaterials; num++; } } } if (num == 0) { Object.Destroy((Object)(object)val); FeatherguardDronePlugin.Log.LogInfo((object)"The two vanilla drones share the same mesh set; the hybrid uses their common chassis with a new striped material."); } else { FeatherguardDronePlugin.Log.LogInfo((object)("Added " + num + " Feather Drone mesh part(s) to the Indestructible Drone chassis.")); } } private static Vector3 DivideScale(Vector3 value, Vector3 divisor) { //IL_0000: 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_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0022: 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_002f: 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_0044: 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_0051: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_0066: Unknown result type (might be due to invalid IL or missing references) return new Vector3((divisor.x == 0f) ? value.x : (value.x / divisor.x), (divisor.y == 0f) ? value.y : (value.y / divisor.y), (divisor.z == 0f) ? value.z : (value.z / divisor.z)); } } [HarmonyPatch(typeof(StatsManager), "RunStartStats")] internal static class RunStartRegistrationPatch { [HarmonyPostfix] [HarmonyPriority(0)] private static void Postfix() { try { HybridItemFactory.TryRegister(); } catch (Exception ex) { FeatherguardDronePlugin.Log.LogError((object)("Could not register the Featherguard Drone at run start: " + ex)); } } } public sealed class HybridDroneMarker : MonoBehaviour { } [HarmonyPatch(typeof(ItemAttributes), "Start")] internal static class HybridInventoryIconPatch { private static void Prefix(ItemAttributes __instance) { if ((Object)(object)((Component)__instance).GetComponent() != (Object)null) { HybridItemFactory.ApplyRuntimeInventoryIcon(__instance); } } } [HarmonyPatch(typeof(ItemEquippable), "RPC_CompleteUnequip")] internal static class HybridInventoryExtractionPosePatch { private static IEnumerable Transpiler(IEnumerable instructions) { List list = instructions.ToList(); MethodInfo original = AccessTools.Method(typeof(Quaternion), "LookRotation", new Type[2] { typeof(Vector3), typeof(Vector3) }, (Type[])null); MethodInfo replacement = AccessTools.Method(typeof(HybridInventoryExtractionPosePatch), "ExtractionRotation", (Type[])null, (Type[])null); if (list.Count((CodeInstruction instruction) => CodeInstructionExtensions.Calls(instruction, original)) != 1) { throw new InvalidOperationException("Inventory extraction rotation layout changed; refusing to patch it."); } foreach (CodeInstruction item in list) { if (!CodeInstructionExtensions.Calls(item, original)) { yield return item; continue; } CodeInstruction val = new CodeInstruction(OpCodes.Ldarg_0, (object)null); val.labels.AddRange(item.labels); val.blocks.AddRange(item.blocks); yield return val; yield return new CodeInstruction(OpCodes.Call, (object)replacement); } } private static Quaternion ExtractionRotation(Vector3 forward, Vector3 up, Component item) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0007: 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_002b: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) Quaternion val = Quaternion.LookRotation(forward, up); if ((Object)(object)item.GetComponent() == (Object)null) { return val; } ConceptDroneVisuals component = item.GetComponent(); if (!((Object)(object)component != (Object)null)) { return val; } return component.GetExtractionRotation(val); } } public sealed class HybridItemTargetingCondition : MonoBehaviour, ITargetingCondition { public bool CustomTargetingCondition(GameObject candidate) { if ((Object)(object)candidate == (Object)null || (Object)(object)candidate.GetComponent() == (Object)null) { return false; } if ((Object)(object)candidate.GetComponentInChildren(true) != (Object)null || (Object)(object)candidate.GetComponentInChildren(true) != (Object)null) { return false; } PhysGrabObjectImpactDetector componentInChildren = candidate.GetComponentInChildren(true); if (!((Object)(object)componentInChildren == (Object)null)) { return !componentInChildren.isEnemy; } return true; } } public sealed class HybridBatteryVisualRepair : MonoBehaviour { private static readonly FieldInfo VisualLogicField = AccessTools.Field(typeof(ItemBattery), "batteryVisualLogic"); private static readonly FieldInfo BatteryTransformField = AccessTools.Field(typeof(ItemBattery), "batteryTransform"); private static readonly FieldInfo HasBatteryVisualsField = AccessTools.Field(typeof(ItemBattery), "hasBatteryVisuals"); private ItemBattery _battery; private BatteryVisualLogic _visual; private IEnumerator Start() { yield return null; RepairReferences(); } private void Update() { if ((Object)(object)_battery == (Object)null || (Object)(object)_visual == (Object)null) { RepairReferences(); } if ((Object)(object)_battery != (Object)null && (Object)(object)_visual != (Object)null && SemiFunc.RunIsLobby()) { _battery.OverrideBatteryShow(0.25f); } } private void RepairReferences() { if ((Object)(object)_battery == (Object)null) { _battery = ((Component)this).GetComponent(); } if ((Object)(object)_battery == (Object)null) { return; } if ((Object)(object)_visual == (Object)null) { _visual = ((Component)this).GetComponentsInChildren(true).FirstOrDefault(); } if (!((Object)(object)_visual == (Object)null)) { if (VisualLogicField != null) { VisualLogicField.SetValue(_battery, _visual); } if (BatteryTransformField != null && BatteryTransformField.GetValue(_battery) == null) { BatteryTransformField.SetValue(_battery, ((Component)_visual).transform); } if (HasBatteryVisualsField != null) { HasBatteryVisualsField.SetValue(_battery, true); } } } } public sealed class HybridDroneVisuals : MonoBehaviour { public GameObject SourceVisualPrefab; private static Texture2D _stripeTexture; private Material _black; private Material _white; private Material _red; private Material _redGlow; private Transform _primaryShield; private Transform _secondaryShield; private Vector3 _primaryShieldScale; private Vector3 _secondaryShieldScale; private void Start() { //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_008b: Unknown result type (might be due to invalid IL or missing references) //IL_00df: Unknown result type (might be due to invalid IL or missing references) //IL_0105: Unknown result type (might be due to invalid IL or missing references) //IL_012b: Unknown result type (might be due to invalid IL or missing references) //IL_0151: Unknown result type (might be due to invalid IL or missing references) //IL_0166: Unknown result type (might be due to invalid IL or missing references) //IL_016d: Expected O, but got Unknown //IL_018f: Unknown result type (might be due to invalid IL or missing references) //IL_0194: Unknown result type (might be due to invalid IL or missing references) //IL_01ab: Unknown result type (might be due to invalid IL or missing references) //IL_0216: Unknown result type (might be due to invalid IL or missing references) //IL_021d: Expected O, but got Unknown //IL_023f: Unknown result type (might be due to invalid IL or missing references) //IL_0244: 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_025c: Unknown result type (might be due to invalid IL or missing references) //IL_0268: Unknown result type (might be due to invalid IL or missing references) //IL_0285: Unknown result type (might be due to invalid IL or missing references) //IL_02a2: 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_02c5: Expected O, but got Unknown //IL_02e7: Unknown result type (might be due to invalid IL or missing references) //IL_02ec: Unknown result type (might be due to invalid IL or missing references) //IL_02fd: Unknown result type (might be due to invalid IL or missing references) //IL_031a: Unknown result type (might be due to invalid IL or missing references) if (!FeatherguardDronePlugin.EnableCustomModel || (Object)(object)((Component)this).transform.Find("Featherguard Concept Model") != (Object)null) { return; } MeshRenderer[] array = (from renderer in ((Component)this).GetComponentsInChildren(true) where !IsEffectRenderer((Renderer)(object)renderer) select renderer).ToArray(); SkinnedMeshRenderer[] array2 = (from renderer in ((Component)this).GetComponentsInChildren(true) where !IsEffectRenderer((Renderer)(object)renderer) select renderer).ToArray(); Bounds targetBounds = CalculatePhysicalBounds(array, array2); Material val = FindTemplateMaterial(array, array2); if ((Object)(object)_stripeTexture == (Object)null) { _stripeTexture = CreateStripeTexture(); } if ((Object)(object)SourceVisualPrefab == (Object)null) { FeatherguardDronePlugin.Log.LogError((object)"The Zero Gravity Orb visual prefab was not assigned."); return; } _black = CreateMaterial(val, new Color(0.012f, 0.014f, 0.018f, 1f), emissive: false); _white = CreateMaterial(val, new Color(0.88f, 0.9f, 0.92f, 1f), emissive: false); _red = CreateMaterial(val, new Color(0.68f, 0.018f, 0.028f, 1f), emissive: false); _redGlow = CreateMaterial(val, new Color(0.7f, 0.015f, 0.022f, 1f), emissive: true); GameObject val2 = new GameObject("Featherguard Concept Model"); val2.transform.SetParent(((Component)this).transform, false); val2.transform.localPosition = ((Component)this).transform.InverseTransformPoint(((Bounds)(ref targetBounds)).center); int num = CopyZeroGravityOrbVisual(SourceVisualPrefab, val2.transform, targetBounds, val); if (num == 0) { Object.Destroy((Object)(object)val2); FeatherguardDronePlugin.Log.LogError((object)"The Zero Gravity Orb prefab did not contain a compatible mesh."); return; } MeshRenderer[] array3 = array; for (int num2 = 0; num2 < array3.Length; num2++) { ((Renderer)array3[num2]).enabled = false; } SkinnedMeshRenderer[] array4 = array2; for (int num2 = 0; num2 < array4.Length; num2++) { ((Renderer)array4[num2]).enabled = false; } GameObject val3 = new GameObject("Featherguard Wings"); val3.transform.SetParent(((Component)this).transform, false); val3.transform.localPosition = ((Component)this).transform.InverseTransformPoint(((Bounds)(ref targetBounds)).center); float num3 = Mathf.Max(((Bounds)(ref targetBounds)).size.x, Mathf.Max(((Bounds)(ref targetBounds)).size.y, ((Bounds)(ref targetBounds)).size.z)); val3.transform.localScale = Vector3.one * Mathf.Max(0.04f, num3 * 0.46f * FeatherguardDronePlugin.ModelScaleMultiplier); BuildFeatherWing(val3.transform); GameObject val4 = new GameObject("Featherguard Lens"); val4.transform.SetParent(((Component)this).transform, false); val4.transform.localPosition = ((Component)this).transform.InverseTransformPoint(((Bounds)(ref targetBounds)).center); val4.transform.localScale = Vector3.one * Mathf.Max(0.04f, num3 * 0.48f * FeatherguardDronePlugin.ModelScaleMultiplier); BuildLens(val4.transform); int num4 = ((Component)this).GetComponentsInChildren(true).Length; FeatherguardDronePlugin.Log.LogInfo((object)("Built the Featherguard model from " + num + " Zero Gravity Orb mesh(es); left " + num4 + " particle renderer(s) untouched and kept the vanilla box physics.")); FeatherguardDronePlugin.Log.LogInfo((object)("Featherguard body material shader: " + ((Object)val.shader).name)); } private void Update() { //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Unknown result type (might be due to invalid IL or missing references) //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_0097: 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) if (FeatherguardDronePlugin.AnimateShield && !((Object)(object)_primaryShield == (Object)null) && !((Object)(object)_secondaryShield == (Object)null)) { float num = 1f + Mathf.Sin(Time.time * 3.4f) * 0.035f; _primaryShield.Rotate(Vector3.forward, 22f * Time.deltaTime, (Space)1); _secondaryShield.Rotate(Vector3.forward, -31f * Time.deltaTime, (Space)1); _primaryShield.localScale = _primaryShieldScale * num; _secondaryShield.localScale = _secondaryShieldScale * (2f - num); } } private static bool IsEffectRenderer(Renderer renderer) { if ((Object)(object)renderer == (Object)null) { return true; } if (!(renderer is ParticleSystemRenderer) && !((Object)(object)((Component)renderer).GetComponent() != (Object)null)) { return (Object)(object)((Component)renderer).GetComponentInParent() != (Object)null; } return true; } private Bounds CalculatePhysicalBounds(MeshRenderer[] meshes, SkinnedMeshRenderer[] skinned) { //IL_0067: 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) BoxCollider val = (from box in ((Component)this).GetComponentsInChildren(true) where ((Collider)box).enabled && !((Collider)box).isTrigger select box).OrderByDescending(delegate(BoxCollider box) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_0014: 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_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_002d: 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) Bounds bounds = ((Collider)box).bounds; float x = ((Bounds)(ref bounds)).size.x; bounds = ((Collider)box).bounds; float num = x * ((Bounds)(ref bounds)).size.y; bounds = ((Collider)box).bounds; return num * ((Bounds)(ref bounds)).size.z; }).FirstOrDefault(); if (!((Object)(object)val != (Object)null)) { return CalculateBounds(meshes, skinned); } return ((Collider)val).bounds; } private static int CopyZeroGravityOrbVisual(GameObject sourcePrefab, Transform destination, Bounds targetBounds, Material bodyMaterialTemplate) { //IL_008a: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Unknown result type (might be due to invalid IL or missing references) //IL_0092: Unknown result type (might be due to invalid IL or missing references) //IL_009e: Unknown result type (might be due to invalid IL or missing references) //IL_00aa: Unknown result type (might be due to invalid IL or missing references) //IL_00c1: Unknown result type (might be due to invalid IL or missing references) //IL_00cd: Unknown result type (might be due to invalid IL or missing references) //IL_00d9: Unknown result type (might be due to invalid IL or missing references) //IL_00f0: Unknown result type (might be due to invalid IL or missing references) //IL_0119: Unknown result type (might be due to invalid IL or missing references) //IL_0128: Unknown result type (might be due to invalid IL or missing references) //IL_012f: Expected O, but got Unknown //IL_014c: Unknown result type (might be due to invalid IL or missing references) //IL_0151: Unknown result type (might be due to invalid IL or missing references) //IL_0156: Unknown result type (might be due to invalid IL or missing references) //IL_01b3: Unknown result type (might be due to invalid IL or missing references) //IL_01b8: Unknown result type (might be due to invalid IL or missing references) //IL_01cb: Unknown result type (might be due to invalid IL or missing references) //IL_01de: Unknown result type (might be due to invalid IL or missing references) //IL_01e3: Unknown result type (might be due to invalid IL or missing references) //IL_01ed: Unknown result type (might be due to invalid IL or missing references) //IL_01f9: 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_020a: Unknown result type (might be due to invalid IL or missing references) //IL_020f: Unknown result type (might be due to invalid IL or missing references) //IL_0219: Unknown result type (might be due to invalid IL or missing references) //IL_0226: Unknown result type (might be due to invalid IL or missing references) //IL_0231: Unknown result type (might be due to invalid IL or missing references) //IL_0236: Unknown result type (might be due to invalid IL or missing references) //IL_0240: Unknown result type (might be due to invalid IL or missing references) MeshRenderer[] array = (from renderer in sourcePrefab.GetComponentsInChildren(true) where !IsEffectRenderer((Renderer)(object)renderer) && (Object)(object)((Component)renderer).GetComponent() != (Object)null select renderer).ToArray(); if (array.Length == 0) { return 0; } MeshRenderer val = array.OrderByDescending(RendererUsesTransparency).ThenByDescending(RendererDiameter).First(); array = (MeshRenderer[])(object)new MeshRenderer[1] { val }; Bounds bounds = ((Renderer)val).bounds; float num = Mathf.Max(((Bounds)(ref bounds)).size.x, Mathf.Max(((Bounds)(ref bounds)).size.y, ((Bounds)(ref bounds)).size.z)); float num2 = Mathf.Max(((Bounds)(ref targetBounds)).size.x, Mathf.Max(((Bounds)(ref targetBounds)).size.y, ((Bounds)(ref targetBounds)).size.z)); destination.localScale = Vector3.one * Mathf.Max(0.01f, num2 / Mathf.Max(0.01f, num) * 0.92f * FeatherguardDronePlugin.ModelScaleMultiplier); GameObject val2 = new GameObject("Zero Gravity Orb Visual"); val2.transform.SetParent(destination, false); val2.transform.localPosition = -sourcePrefab.transform.InverseTransformPoint(((Bounds)(ref bounds)).center); int num3 = 0; MeshRenderer[] array2 = array; foreach (MeshRenderer val3 in array2) { MeshFilter component = ((Component)val3).GetComponent(); if ((Object)(object)component == (Object)null || (Object)(object)component.sharedMesh == (Object)null) { continue; } GameObject val4 = new GameObject("Orb Part - " + ((Object)component.sharedMesh).name); val4.transform.SetParent(val2.transform, false); val4.transform.localPosition = sourcePrefab.transform.InverseTransformPoint(((Component)component).transform.position); val4.transform.localRotation = Quaternion.Inverse(sourcePrefab.transform.rotation) * ((Component)component).transform.rotation; val4.transform.localScale = DivideVisualScale(((Component)component).transform.lossyScale, sourcePrefab.transform.lossyScale); val4.AddComponent().sharedMesh = component.sharedMesh; MeshRenderer val5 = val4.AddComponent(); Material[] sharedMaterials = ((Renderer)val3).sharedMaterials; Material[] array3 = (Material[])(object)new Material[sharedMaterials.Length]; for (int num5 = 0; num5 < sharedMaterials.Length; num5++) { if (!((Object)(object)sharedMaterials[num5] == (Object)null)) { array3[num5] = CreateStripedMaterial(bodyMaterialTemplate); } } ((Renderer)val5).sharedMaterials = array3; num3++; } FeatherguardDronePlugin.Log.LogInfo((object)("Selected Zero Gravity Orb shell mesh '" + ((Object)((Component)val).GetComponent().sharedMesh).name + "' from object '" + ((Object)((Component)val).gameObject).name + "'.")); return num3; } private static bool RendererUsesTransparency(MeshRenderer renderer) { return ((Renderer)renderer).sharedMaterials.Any((Material material) => (Object)(object)material != (Object)null && (material.renderQueue >= 3000 || (material.HasProperty("_Surface") && material.GetFloat("_Surface") > 0.5f))); } private static float RendererDiameter(MeshRenderer renderer) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Unknown result type (might be due to invalid IL or missing references) Bounds bounds = ((Renderer)renderer).bounds; return Mathf.Max(((Bounds)(ref bounds)).size.x, Mathf.Max(((Bounds)(ref bounds)).size.y, ((Bounds)(ref bounds)).size.z)); } private static Vector3 DivideVisualScale(Vector3 value, Vector3 divisor) { //IL_0000: 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_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_0027: 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_0039: 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_004e: 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_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_0075: Unknown result type (might be due to invalid IL or missing references) return new Vector3((Mathf.Abs(divisor.x) < 0.0001f) ? value.x : (value.x / divisor.x), (Mathf.Abs(divisor.y) < 0.0001f) ? value.y : (value.y / divisor.y), (Mathf.Abs(divisor.z) < 0.0001f) ? value.z : (value.z / divisor.z)); } private static Material CreateStripedMaterial(Material source) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Expected O, but got Unknown //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Expected O, but got Unknown //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Expected O, but got Unknown //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Expected O, but got Unknown //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Expected O, but got Unknown //IL_006c: 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_007c: Expected O, but got Unknown //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_008c: Expected O, but got Unknown //IL_008c: 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_009c: Expected O, but got Unknown //IL_009c: 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_00c0: Expected O, but got Unknown //IL_00c1: Expected O, but got Unknown Material val = new Material(source) { name = ((Object)source).name + " - Featherguard Stripes" }; SetTextureIfPresent(val, "_MainTex", (Texture)(object)_stripeTexture); SetTextureIfPresent(val, "_BaseMap", (Texture)(object)_stripeTexture); SetTextureIfPresent(val, "_BaseColorMap", (Texture)(object)_stripeTexture); SetTextureIfPresent(val, "_AlbedoMap", (Texture)(object)_stripeTexture); SetTextureIfPresent(val, "_DiffuseMap", (Texture)(object)_stripeTexture); SetColorIfPresent(val, "_Color", Color.white); SetColorIfPresent(val, "_BaseColor", Color.white); SetColorIfPresent(val, "_AlbedoColor", Color.white); SetColorIfPresent(val, "_EmissionColor", new Color(0.08f, 0.005f, 0.008f, 1f)); return val; } private static void SetTextureIfPresent(Material material, string property, Texture texture) { //IL_001e: 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) if (material.HasProperty(property)) { material.SetTexture(property, texture); material.SetTextureScale(property, new Vector2(1.35f, 1.35f)); material.SetTextureOffset(property, Vector2.zero); } } private static Material CreateOrbShellMaterial(Material source) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0037: 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_0043: Expected O, but got Unknown //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: Expected O, but got Unknown //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Expected O, but got Unknown //IL_005b: 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_007f: Expected O, but got Unknown //IL_0080: Expected O, but got Unknown Material val = new Material(source) { name = ((Object)source).name + " - Featherguard Shield Shell" }; Color color = default(Color); ((Color)(ref color))..ctor(0.62f, 0.055f, 0.075f, 0.27f); SetColorIfPresent(val, "_Color", color); SetColorIfPresent(val, "_BaseColor", color); SetColorIfPresent(val, "_AlbedoColor", color); SetColorIfPresent(val, "_EmissionColor", new Color(0.055f, 0.002f, 0.004f, 1f)); return val; } private static void PaintOriginalChassis(MeshRenderer[] meshes, SkinnedMeshRenderer[] skinned) { foreach (Renderer item in meshes.Cast().Concat(skinned.Cast())) { Material[] sharedMaterials = item.sharedMaterials; Material[] array = (Material[])(object)new Material[sharedMaterials.Length]; for (int i = 0; i < sharedMaterials.Length; i++) { array[i] = (((Object)(object)sharedMaterials[i] == (Object)null) ? null : CreateStripedMaterial(sharedMaterials[i])); } item.sharedMaterials = array; } } private int ReplaceSolidBoxColliders() { //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) //IL_0069: 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_0077: Unknown result type (might be due to invalid IL or missing references) //IL_00ab: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: Unknown result type (might be due to invalid IL or missing references) BoxCollider[] array = (from box in ((Component)this).GetComponentsInChildren(true) where ((Collider)box).enabled && !((Collider)box).isTrigger select box).ToArray(); if (array.Length == 0) { return 0; } BoxCollider[] array2 = array; foreach (BoxCollider val in array2) { Vector3 size = val.size; SphereCollider obj = ((Component)val).gameObject.AddComponent(); obj.center = val.center; obj.radius = Mathf.Max(0.02f, Mathf.Max(size.x, Mathf.Max(size.y, size.z)) * 0.48f); ((Collider)obj).sharedMaterial = ((Collider)val).sharedMaterial; ((Collider)obj).isTrigger = false; val.size = size * 0.42f; } return array.Length; } private static Texture2D CreateStripeTexture() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Expected O, but got Unknown //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00b4: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: 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) Texture2D val = new Texture2D(96, 96, (TextureFormat)4, false); ((Object)val).name = "Featherguard Chassis Stripes"; ((Texture)val).wrapMode = (TextureWrapMode)0; ((Texture)val).filterMode = (FilterMode)0; Color val2 = default(Color); ((Color)(ref val2))..ctor(0.012f, 0.014f, 0.018f, 1f); Color val3 = default(Color); ((Color)(ref val3))..ctor(0.88f, 0.9f, 0.92f, 1f); Color val4 = default(Color); ((Color)(ref val4))..ctor(0.68f, 0.018f, 0.028f, 1f); Color[] array = (Color[])(object)new Color[9216]; for (int i = 0; i < 96; i++) { for (int j = 0; j < 96; j++) { array[i * 96 + j] = (Color)(((j + i / 3) / 16 % 3) switch { 1 => val3, 0 => val2, _ => val4, }); } } val.SetPixels(array); val.Apply(false, true); return val; } private static Bounds CalculateBounds(MeshRenderer[] meshes, SkinnedMeshRenderer[] skinned) { //IL_0004: Unknown result type (might be due to invalid IL or missing references) //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Unknown result type (might be due to invalid IL or missing references) //IL_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) bool flag = false; Bounds bounds = default(Bounds); ((Bounds)(ref bounds))..ctor(Vector3.zero, Vector3.one * 0.25f); foreach (Renderer item in meshes.Cast().Concat(skinned.Cast())) { if (item.enabled) { if (!flag) { bounds = item.bounds; flag = true; } else { ((Bounds)(ref bounds)).Encapsulate(item.bounds); } } } return bounds; } private static Material FindTemplateMaterial(MeshRenderer[] meshes, SkinnedMeshRenderer[] skinned) { //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Expected O, but got Unknown foreach (Renderer item in meshes.Cast().Concat(skinned.Cast())) { if ((Object)(object)item.sharedMaterial != (Object)null) { return item.sharedMaterial; } } Shader obj = Shader.Find("Standard"); if ((Object)(object)obj == (Object)null) { throw new InvalidOperationException("Could not find a compatible shader for the custom drone model."); } return new Material(obj); } private static Material CreateMaterial(Material template, Color color, bool emissive) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Expected O, but got Unknown //IL_007c: 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_0094: 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) Material val = new Material(template); ((Object)val).name = "Featherguard " + (emissive ? "Glow" : "Paint"); SetTextureIfPresent(val, "_MainTex", (Texture)(object)Texture2D.whiteTexture); SetTextureIfPresent(val, "_BaseMap", (Texture)(object)Texture2D.whiteTexture); SetTextureIfPresent(val, "_BaseColorMap", (Texture)(object)Texture2D.whiteTexture); SetTextureIfPresent(val, "_AlbedoMap", (Texture)(object)Texture2D.whiteTexture); SetTextureIfPresent(val, "_DiffuseMap", (Texture)(object)Texture2D.whiteTexture); SetColorIfPresent(val, "_Color", color); SetColorIfPresent(val, "_BaseColor", color); SetColorIfPresent(val, "_AlbedoColor", color); if (emissive) { SetColorIfPresent(val, "_EmissionColor", color * 1.35f); val.EnableKeyword("_EMISSION"); } return val; } private void BuildBody(Transform parent) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_0092: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_00d0: Unknown result type (might be due to invalid IL or missing references) //IL_00d5: Unknown result type (might be due to invalid IL or missing references) CreatePrimitive("White Armored Core", (PrimitiveType)0, parent, Vector3.zero, new Vector3(1.32f, 1.04f, 1.04f), Vector3.zero, _white); CreateTorus("Black Chassis Band", parent, 0.83f, 0.115f, 40, 10, new Vector3(0f, 0f, -0.3f), Vector3.zero, _black); CreateTorus("Red Chassis Band", parent, 0.86f, 0.13f, 40, 10, new Vector3(0f, 0f, 0.05f), Vector3.zero, _red); CreateTorus("Black Rear Band", parent, 0.78f, 0.1f, 40, 10, new Vector3(0f, 0f, 0.4f), Vector3.zero, _black); } private void BuildLens(Transform parent) { //IL_0016: 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_003e: 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_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_00b4: Unknown result type (might be due to invalid IL or missing references) //IL_00c8: Unknown result type (might be due to invalid IL or missing references) //IL_00dc: Unknown result type (might be due to invalid IL or missing references) CreatePrimitive("Front Lens Housing", (PrimitiveType)2, parent, new Vector3(0f, 0f, -0.91f), new Vector3(0.48f, 0.09f, 0.48f), new Vector3(90f, 0f, 0f), _black); CreatePrimitive("Front Lens Red Ring", (PrimitiveType)2, parent, new Vector3(0f, 0f, -1.01f), new Vector3(0.34f, 0.035f, 0.34f), new Vector3(90f, 0f, 0f), _red); CreatePrimitive("Front Lens Glow", (PrimitiveType)2, parent, new Vector3(0f, 0f, -1.055f), new Vector3(0.19f, 0.025f, 0.19f), new Vector3(90f, 0f, 0f), _redGlow); } private void BuildFeatherWing(Transform parent) { BuildWingSide(parent, 1f, "Right"); BuildWingSide(parent, -1f, "Left"); } private void BuildWingSide(Transform parent, float side, string label) { //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_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_00c1: 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_00ee: Unknown result type (might be due to invalid IL or missing references) GameObject val = CreatePrimitive(label + " Wing Hinge", (PrimitiveType)0, parent, new Vector3(0.88f * side, 0.04f, 0.1f), Vector3.one * 0.24f, Vector3.zero, _black); for (int i = 0; i < 4; i++) { float num = 0.42f - (float)i * 0.25f; float num2 = side * (-28f + (float)i * 12f); Material material = ((i % 3 == 0) ? _red : ((i % 3 == 1) ? _white : _black)); CreatePrimitive(label + " Feather " + (i + 1), (PrimitiveType)1, val.transform, new Vector3(side * (0.48f + (float)i * 0.07f), num, 0f), new Vector3(0.12f, 0.47f - (float)i * 0.035f, 0.09f), new Vector3(0f, 0f, num2), material); } } private void BuildShield(Transform parent) { //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_005b: 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_0095: Unknown result type (might be due to invalid IL or missing references) //IL_009a: Unknown result type (might be due to invalid IL or missing references) //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00ab: Unknown result type (might be due to invalid IL or missing references) _primaryShield = CreateTorus("Primary Shield Brace", parent, 1.43f, 0.045f, 48, 8, Vector3.zero, new Vector3(8f, 0f, 38f), _redGlow, 215f).transform; _secondaryShield = CreateTorus("Secondary Shield Brace", parent, 1.28f, 0.028f, 40, 7, Vector3.zero, new Vector3(-10f, 180f, -32f), _red, 165f).transform; _primaryShieldScale = _primaryShield.localScale; _secondaryShieldScale = _secondaryShield.localScale; } private void BuildThruster(Transform parent) { //IL_0016: 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_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Unknown result type (might be due to invalid IL or missing references) //IL_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) CreatePrimitive("Bottom Thruster", (PrimitiveType)2, parent, new Vector3(0f, -0.94f, 0.18f), new Vector3(0.42f, 0.16f, 0.42f), Vector3.zero, _black); CreatePrimitive("Bottom Thruster Glow", (PrimitiveType)2, parent, new Vector3(0f, -1.12f, 0.18f), new Vector3(0.26f, 0.035f, 0.26f), Vector3.zero, _redGlow); } private static GameObject CreatePrimitive(string name, PrimitiveType type, Transform parent, Vector3 position, Vector3 scale, Vector3 rotation, Material material) { //IL_0000: 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_002c: 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) GameObject obj = GameObject.CreatePrimitive(type); ((Object)obj).name = name; obj.transform.SetParent(parent, false); obj.transform.localPosition = position; obj.transform.localScale = scale; obj.transform.localEulerAngles = rotation; Collider component = obj.GetComponent(); if ((Object)(object)component != (Object)null) { Object.Destroy((Object)(object)component); } obj.GetComponent().sharedMaterial = material; return obj; } private static GameObject CreateTorus(string name, Transform parent, float majorRadius, float tubeRadius, int majorSegments, int tubeSegments, Vector3 position, Vector3 rotation, Material material, float arcDegrees = 360f) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0013: 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_0020: 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_002d: 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_0060: Expected O, but got Unknown GameObject val = new GameObject(name); val.transform.SetParent(parent, false); val.transform.localPosition = position; val.transform.localEulerAngles = rotation; MeshFilter val2 = val.AddComponent(); MeshRenderer obj = val.AddComponent(); val2.sharedMesh = CreateTorusMesh(name + " Mesh", majorRadius, tubeRadius, majorSegments, tubeSegments, arcDegrees); ((Renderer)obj).sharedMaterial = material; return val; } private static Mesh CreateTorusMesh(string name, float majorRadius, float tubeRadius, int majorSegments, int tubeSegments, float arcDegrees) { //IL_0174: Unknown result type (might be due to invalid IL or missing references) //IL_0179: Unknown result type (might be due to invalid IL or missing references) //IL_0180: Unknown result type (might be due to invalid IL or missing references) //IL_0187: Unknown result type (might be due to invalid IL or missing references) //IL_018e: Unknown result type (might be due to invalid IL or missing references) //IL_0195: Unknown result type (might be due to invalid IL or missing references) //IL_019c: Unknown result type (might be due to invalid IL or missing references) //IL_01a3: Expected O, but got Unknown //IL_0094: 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_00ae: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00b8: Unknown result type (might be due to invalid IL or missing references) //IL_00bd: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: Unknown result type (might be due to invalid IL or missing references) //IL_00c5: Unknown result type (might be due to invalid IL or missing references) //IL_00c8: Unknown result type (might be due to invalid IL or missing references) //IL_00cd: Unknown result type (might be due to invalid IL or missing references) //IL_00d2: 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_00dc: Unknown result type (might be due to invalid IL or missing references) //IL_00f1: Unknown result type (might be due to invalid IL or missing references) //IL_00f6: Unknown result type (might be due to invalid IL or missing references) Vector3[] array = (Vector3[])(object)new Vector3[majorSegments * tubeSegments]; Vector3[] array2 = (Vector3[])(object)new Vector3[array.Length]; Vector2[] array3 = (Vector2[])(object)new Vector2[array.Length]; int[] array4 = new int[(majorSegments - 1) * tubeSegments * 6]; Vector3 val = default(Vector3); for (int i = 0; i < majorSegments; i++) { float num = arcDegrees * ((float)Math.PI / 180f); float num2 = (0f - num) * 0.5f + (float)i * num / (float)(majorSegments - 1); ((Vector3)(ref val))..ctor(Mathf.Cos(num2), Mathf.Sin(num2), 0f); for (int j = 0; j < tubeSegments; j++) { float num3 = (float)j * (float)Math.PI * 2f / (float)tubeSegments; int num4 = i * tubeSegments + j; Vector3 val2 = val * Mathf.Cos(num3) + Vector3.forward * Mathf.Sin(num3); array[num4] = val * majorRadius + val2 * tubeRadius; array2[num4] = val2; array3[num4] = new Vector2((float)i / (float)majorSegments, (float)j / (float)tubeSegments); if (i != majorSegments - 1) { int num5 = (i + 1) * tubeSegments; int num6 = (j + 1) % tubeSegments; int num7 = num4 * 6; array4[num7] = num4; array4[num7 + 1] = num5 + j; array4[num7 + 2] = num5 + num6; array4[num7 + 3] = num4; array4[num7 + 4] = num5 + num6; array4[num7 + 5] = i * tubeSegments + num6; } } } Mesh val3 = new Mesh { name = name, vertices = array, normals = array2, uv = array3, triangles = array4 }; val3.RecalculateBounds(); return val3; } private static void SetColorIfPresent(Material material, string property, Color color) { //IL_000b: Unknown result type (might be due to invalid IL or missing references) if (material.HasProperty(property)) { material.SetColor(property, color); } } } [HarmonyPatch(typeof(ItemDroneFeather), "BatteryDrain")] internal static class FeatherDrainPatch { private static bool Prefix(ItemDroneFeather __instance) { return (Object)(object)((Component)__instance).GetComponent() == (Object)null; } } [HarmonyPatch(typeof(ChargingStation), "ChargeAreaCheck")] internal static class DoubleChargingCostPatch { private static void Prefix(List ___itemsCharging, out List __state) { __state = new List(); if (___itemsCharging == null || ___itemsCharging.Count == 0) { return; } ItemBattery[] array = ___itemsCharging.ToArray(); foreach (ItemBattery val in array) { if (!((Object)(object)val == (Object)null) && !(val.batteryLife >= 99f) && !((Object)(object)((Component)val).GetComponent() == (Object)null)) { ___itemsCharging.Add(val); __state.Add(val); } } } private static void Postfix(List ___itemsCharging, List __state) { if (___itemsCharging == null || __state == null) { return; } foreach (ItemBattery item in __state) { ___itemsCharging.Remove(item); } } } }