

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Logging;
using FistVR;
using HarmonyLib;
using OtherLoader;
using UnityEngine;
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("0.0.0.0")]
[module: UnverifiableCode]
namespace SkyHighPurchase.SkyesSosigRetroSosigWearables;
[BepInPlugin("SkyHighPurchase.SkyesSosigRetroSosigWearables", "SkyesSosigRetroSosigWearables", "1.0.0")]
[BepInProcess("h3vr.exe")]
[Description("Built with MeatKit")]
[BepInDependency("h3vr.otherloader", "1.3.0")]
public class SkyesSosigRetroSosigWearablesPlugin : BaseUnityPlugin
{
private static readonly string BasePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
internal static ManualLogSource Logger;
private void Awake()
{
Logger = ((BaseUnityPlugin)this).Logger;
LoadAssets();
}
private void LoadAssets()
{
Harmony.CreateAndPatchAll(Assembly.GetExecutingAssembly(), "SkyHighPurchase.SkyesSosigRetroSosigWearables");
OtherLoader.RegisterDirectLoad(BasePath, "SkyHighPurchase.SkyesSosigRetroSosigWearables", "", "", "skyessosigretrososigwearables_oli", "");
}
}
public class PatchChanger : MonoBehaviour
{
public int materialIndexToChange = 0;
public Material[] newMaterials;
private void Start()
{
if (newMaterials == null)
{
Debug.LogError((object)"New Material is not assigned!");
}
else
{
ChangeSpecificMaterial();
}
}
private void ChangeSpecificMaterial()
{
Renderer component = ((Component)this).GetComponent<Renderer>();
if ((Object)(object)component == (Object)null)
{
Debug.LogError((object)"Renderer component not found on this GameObject.");
return;
}
Material[] materials = component.materials;
if (materialIndexToChange >= 0 && materialIndexToChange < materials.Length)
{
materials[materialIndexToChange] = newMaterials[Random.Range(0, newMaterials.Length)];
component.materials = materials;
Debug.Log((object)("Material at index " + materialIndexToChange + " changed successfully."));
return;
}
Debug.LogError((object)("Invalid material index: " + materialIndexToChange + ". The mesh has " + materials.Length + " materials."));
}
}
public class DSC_ChangeOnHeld : MonoBehaviour
{
public string[] primaryIDs;
public GameObject[] primaryGameObjects;
public bool checkPrimary;
public string[] secondaryIDs;
public GameObject[] secondaryGameObjects;
public bool checkSecondary;
private Dictionary<string, GameObject> primaryIDToGameObjectMap;
private Dictionary<string, GameObject> secondaryIDToGameObjectMap;
private Sosig mysosig;
private GameObject recentPrimaryObject;
private string recentPrimaryID;
private GameObject recentSecondaryObject;
private string recentSecondaryID;
public void Start()
{
if (checkPrimary)
{
primaryIDToGameObjectMap = new Dictionary<string, GameObject>();
for (int i = 0; i < primaryIDs.Length; i++)
{
if (i < primaryGameObjects.Length)
{
primaryIDToGameObjectMap[primaryIDs[i]] = primaryGameObjects[i];
}
}
}
if (checkSecondary)
{
secondaryIDToGameObjectMap = new Dictionary<string, GameObject>();
for (int j = 0; j < secondaryIDs.Length; j++)
{
if (j < secondaryGameObjects.Length)
{
secondaryIDToGameObjectMap[secondaryIDs[j]] = secondaryGameObjects[j];
}
}
}
mysosig = ((Component)this).GetComponent<SosigWearable>().S;
}
public void Update()
{
if (checkPrimary && (Object)(object)mysosig != (Object)null)
{
SosigHand hand_Primary = mysosig.Hand_Primary;
if (hand_Primary != null && (Object)(object)hand_Primary.HeldObject != (Object)null && (Object)(object)hand_Primary.HeldObject.O != (Object)null && (Object)(object)hand_Primary.HeldObject.O.ObjectWrapper != (Object)null)
{
string itemID = hand_Primary.HeldObject.O.ObjectWrapper.ItemID;
if (itemID != null && itemID != recentPrimaryID)
{
UpdatePrimary(itemID);
}
}
}
if (!checkSecondary || !((Object)(object)mysosig != (Object)null))
{
return;
}
SosigHand hand_Secondary = mysosig.Hand_Secondary;
if (hand_Secondary != null && (Object)(object)hand_Secondary.HeldObject != (Object)null && (Object)(object)hand_Secondary.HeldObject.O != (Object)null && (Object)(object)hand_Secondary.HeldObject.O.ObjectWrapper != (Object)null)
{
string itemID2 = hand_Secondary.HeldObject.O.ObjectWrapper.ItemID;
if (itemID2 != null && itemID2 != recentSecondaryID)
{
UpdateSecondary(itemID2);
}
}
}
public void UpdatePrimary(string input)
{
if (primaryIDToGameObjectMap.TryGetValue(input, out var value))
{
if ((Object)(object)recentPrimaryObject != (Object)null)
{
recentPrimaryObject.SetActive(false);
}
value.SetActive(true);
recentPrimaryObject = value;
recentPrimaryID = input;
}
}
public void UpdateSecondary(string input)
{
if (secondaryIDToGameObjectMap.TryGetValue(input, out var value))
{
if ((Object)(object)recentSecondaryObject != (Object)null)
{
recentSecondaryObject.SetActive(false);
}
value.SetActive(true);
recentSecondaryObject = value;
recentSecondaryID = input;
}
}
}
public class CuttableMesh
{
private MeshRenderer inputMeshRenderer;
private bool hasUvs;
private bool hasUv1s;
private bool hasColours;
private List<CuttableSubMesh> subMeshes;
public CuttableMesh(Mesh inputMesh)
{
Init(inputMesh, ((Object)inputMesh).name);
}
public CuttableMesh(MeshRenderer input)
{
inputMeshRenderer = input;
MeshFilter component = ((Component)input).GetComponent<MeshFilter>();
Mesh sharedMesh = component.sharedMesh;
Init(sharedMesh, ((Object)input).name);
}
public CuttableMesh(CuttableMesh inputMesh, List<CuttableSubMesh> newSubMeshes)
{
inputMeshRenderer = inputMesh.inputMeshRenderer;
hasUvs = inputMesh.hasUvs;
hasUv1s = inputMesh.hasUv1s;
hasColours = inputMesh.hasColours;
subMeshes = new List<CuttableSubMesh>();
subMeshes.AddRange(newSubMeshes);
}
private void Init(Mesh inputMesh, string debugName)
{
subMeshes = new List<CuttableSubMesh>();
if (inputMesh.isReadable)
{
Vector3[] vertices = inputMesh.vertices;
Vector3[] normals = inputMesh.normals;
Vector2[] uv = inputMesh.uv;
Vector2[] uv2 = inputMesh.uv2;
Color32[] colors = inputMesh.colors32;
hasUvs = uv != null && uv.Length > 0;
hasUv1s = uv2 != null && uv2.Length > 0;
hasColours = colors != null && colors.Length > 0;
for (int i = 0; i < inputMesh.subMeshCount; i++)
{
int[] indices = inputMesh.GetIndices(i);
CuttableSubMesh item = new CuttableSubMesh(indices, vertices, normals, colors, uv, uv2);
subMeshes.Add(item);
}
}
else
{
Debug.LogError((object)("CuttableMesh's input mesh is not readable: " + debugName), (Object)(object)inputMesh);
}
}
public void Add(CuttableMesh other)
{
if (subMeshes.Count != other.subMeshes.Count)
{
throw new Exception("Mismatched submesh count");
}
for (int i = 0; i < subMeshes.Count; i++)
{
subMeshes[i].Add(other.subMeshes[i]);
}
}
public int NumSubMeshes()
{
return subMeshes.Count;
}
public bool HasUvs()
{
return hasUvs;
}
public bool HasColours()
{
return hasColours;
}
public List<CuttableSubMesh> GetSubMeshes()
{
return subMeshes;
}
public CuttableSubMesh GetSubMesh(int index)
{
return subMeshes[index];
}
public Transform GetTransform()
{
if ((Object)(object)inputMeshRenderer != (Object)null)
{
return ((Component)inputMeshRenderer).transform;
}
return null;
}
public MeshRenderer ConvertToRenderer(string newObjectName)
{
//IL_001b: Unknown result type (might be due to invalid IL or missing references)
//IL_0021: Expected O, but got Unknown
//IL_003d: Unknown result type (might be due to invalid IL or missing references)
//IL_004d: Unknown result type (might be due to invalid IL or missing references)
//IL_005d: 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_0097: 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)
Mesh val = CreateMesh();
if (val.vertexCount == 0)
{
return null;
}
GameObject val2 = new GameObject(newObjectName);
val2.transform.SetParent(((Component)inputMeshRenderer).transform);
val2.transform.localPosition = Vector3.zero;
val2.transform.localRotation = Quaternion.identity;
val2.transform.localScale = Vector3.one;
MeshFilter val3 = val2.AddComponent<MeshFilter>();
val3.mesh = val;
MeshRenderer val4 = val2.AddComponent<MeshRenderer>();
((Renderer)val4).shadowCastingMode = ((Renderer)inputMeshRenderer).shadowCastingMode;
((Renderer)val4).reflectionProbeUsage = ((Renderer)inputMeshRenderer).reflectionProbeUsage;
((Renderer)val4).lightProbeUsage = ((Renderer)inputMeshRenderer).lightProbeUsage;
((Renderer)val4).sharedMaterials = ((Renderer)inputMeshRenderer).sharedMaterials;
return val4;
}
public Mesh CreateMesh()
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Expected O, but got Unknown
Mesh val = new Mesh();
int num = 0;
for (int i = 0; i < subMeshes.Count; i++)
{
num += subMeshes[i].NumIndices();
}
List<Vector3> list = new List<Vector3>();
List<Vector3> list2 = new List<Vector3>();
List<Color32> list3 = ((!hasColours) ? null : new List<Color32>());
List<Vector2> list4 = ((!hasUvs) ? null : new List<Vector2>());
List<Vector2> list5 = ((!hasUv1s) ? null : new List<Vector2>());
List<int> list6 = new List<int>();
foreach (CuttableSubMesh subMesh in subMeshes)
{
list6.Add(list.Count);
subMesh.AddTo(list, list2, list3, list4, list5);
}
val.vertices = list.ToArray();
val.normals = list2.ToArray();
val.colors32 = ((!hasColours) ? null : list3.ToArray());
val.uv = ((!hasUvs) ? null : list4.ToArray());
val.uv2 = ((!hasUv1s) ? null : list5.ToArray());
val.subMeshCount = subMeshes.Count;
for (int j = 0; j < subMeshes.Count; j++)
{
CuttableSubMesh cuttableSubMesh = subMeshes[j];
int num2 = list6[j];
int[] array = cuttableSubMesh.GenIndices();
for (int k = 0; k < array.Length; k++)
{
array[k] += num2;
}
val.SetTriangles(array, j, true);
}
return val;
}
}
public class CuttableSubMesh
{
private List<Vector3> vertices;
private List<Vector3> normals;
private List<Color32> colours;
private List<Vector2> uvs;
private List<Vector2> uv1s;
public CuttableSubMesh(bool hasNormals, bool hasColours, bool hasUvs, bool hasUv1)
{
vertices = new List<Vector3>();
if (hasNormals)
{
normals = new List<Vector3>();
}
if (hasColours)
{
colours = new List<Color32>();
}
if (hasUvs)
{
uvs = new List<Vector2>();
}
if (hasUv1)
{
uv1s = new List<Vector2>();
}
}
public CuttableSubMesh(int[] indices, Vector3[] inputVertices, Vector3[] inputNormals, Color32[] inputColours, Vector2[] inputUvs, Vector2[] inputUv1)
{
//IL_0099: Unknown result type (might be due to invalid IL or missing references)
//IL_00bb: Unknown result type (might be due to invalid IL or missing references)
//IL_00de: 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_0124: Unknown result type (might be due to invalid IL or missing references)
vertices = new List<Vector3>();
if (inputNormals != null && inputNormals.Length > 0)
{
normals = new List<Vector3>();
}
if (inputColours != null && inputColours.Length > 0)
{
colours = new List<Color32>();
}
if (inputUvs != null && inputUvs.Length > 0)
{
uvs = new List<Vector2>();
}
if (inputUv1 != null && inputUv1.Length > 0)
{
uv1s = new List<Vector2>();
}
foreach (int num in indices)
{
vertices.Add(inputVertices[num]);
if (normals != null)
{
normals.Add(inputNormals[num]);
}
if (colours != null)
{
colours.Add(inputColours[num]);
}
if (uvs != null)
{
uvs.Add(inputUvs[num]);
}
if (uv1s != null)
{
uv1s.Add(inputUv1[num]);
}
}
}
public void Add(CuttableSubMesh other)
{
for (int i = 0; i < other.vertices.Count; i++)
{
CopyVertex(i, other);
}
}
public int NumVertices()
{
return vertices.Count;
}
public Vector3 GetVertex(int index)
{
//IL_0008: 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)
return vertices[index];
}
public bool HasNormals()
{
return normals != null;
}
public bool HasColours()
{
return colours != null;
}
public bool HasUvs()
{
return uvs != null;
}
public bool HasUv1()
{
return uv1s != null;
}
public void CopyVertex(int srcIndex, CuttableSubMesh srcMesh)
{
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
//IL_0030: Unknown result type (might be due to invalid IL or missing references)
//IL_0052: 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_0096: Unknown result type (might be due to invalid IL or missing references)
vertices.Add(srcMesh.vertices[srcIndex]);
if (normals != null)
{
normals.Add(srcMesh.normals[srcIndex]);
}
if (colours != null)
{
colours.Add(srcMesh.colours[srcIndex]);
}
if (uvs != null)
{
uvs.Add(srcMesh.uvs[srcIndex]);
}
if (uv1s != null)
{
uv1s.Add(srcMesh.uv1s[srcIndex]);
}
}
public void AddInterpolatedVertex(int i0, int i1, float weight, CuttableSubMesh srcMesh)
{
//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_000d: Unknown result type (might be due to invalid IL or missing references)
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
//IL_0019: Unknown result type (might be due to invalid IL or missing references)
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
//IL_001c: 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_004c: Unknown result type (might be due to invalid IL or missing references)
//IL_0052: Unknown result type (might be due to invalid IL or missing references)
//IL_0057: Unknown result type (might be due to invalid IL or missing references)
//IL_005a: Unknown result type (might be due to invalid IL or missing references)
//IL_007d: Unknown result type (might be due to invalid IL or missing references)
//IL_008a: Unknown result type (might be due to invalid IL or missing references)
//IL_0090: Unknown result type (might be due to invalid IL or missing references)
//IL_00b3: 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_00c6: Unknown result type (might be due to invalid IL or missing references)
//IL_00e9: Unknown result type (might be due to invalid IL or missing references)
//IL_00f6: Unknown result type (might be due to invalid IL or missing references)
//IL_00fc: Unknown result type (might be due to invalid IL or missing references)
Vector3 vertex = srcMesh.GetVertex(i0);
Vector3 vertex2 = srcMesh.GetVertex(i1);
vertices.Add(Vector3.Lerp(vertex, vertex2, weight));
if (normals != null)
{
List<Vector3> list = normals;
Vector3 val = Vector3.Lerp(srcMesh.normals[i0], srcMesh.normals[i1], weight);
list.Add(((Vector3)(ref val)).normalized);
}
if (colours != null)
{
colours.Add(Color32.Lerp(srcMesh.colours[i0], srcMesh.colours[i1], weight));
}
if (uvs != null)
{
uvs.Add(Vector2.Lerp(srcMesh.uvs[i0], srcMesh.uvs[i1], weight));
}
if (uv1s != null)
{
uv1s.Add(Vector2.Lerp(srcMesh.uv1s[i0], srcMesh.uv1s[i1], weight));
}
}
public void AddTo(List<Vector3> destVertices, List<Vector3> destNormals, List<Color32> destColours, List<Vector2> destUvs, List<Vector2> destUv1s)
{
destVertices.AddRange(vertices);
if (normals != null)
{
destNormals.AddRange(normals);
}
if (colours != null)
{
destColours.AddRange(colours);
}
if (uvs != null)
{
destUvs.AddRange(uvs);
}
if (uv1s != null)
{
destUv1s.AddRange(uv1s);
}
}
public int NumIndices()
{
return vertices.Count;
}
public int[] GenIndices()
{
int[] array = new int[vertices.Count];
for (int i = 0; i < array.Length; i++)
{
array[i] = i;
}
return array;
}
}
public enum VertexClassification
{
Front = 1,
Back = 2,
OnPlane = 4
}
public class MeshCutter
{
private CuttableMesh inputMesh;
private List<CuttableSubMesh> outputFrontSubMeshes;
private List<CuttableSubMesh> outputBackSubMeshes;
public void Cut(CuttableMesh input, Plane worldCutPlane)
{
//IL_0067: 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_0038: Unknown result type (might be due to invalid IL or missing references)
//IL_0039: Unknown result type (might be due to invalid IL or missing references)
//IL_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_004c: Unknown result type (might be due to invalid IL or missing references)
//IL_0051: Unknown result type (might be due to invalid IL or missing references)
//IL_0056: 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_005a: 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)
inputMesh = input;
outputFrontSubMeshes = new List<CuttableSubMesh>();
outputBackSubMeshes = new List<CuttableSubMesh>();
Transform transform = inputMesh.GetTransform();
Plane cutPlane = default(Plane);
if ((Object)(object)transform != (Object)null)
{
Vector3 val = transform.InverseTransformPoint(ClosestPointOnPlane(worldCutPlane, Vector3.zero));
Vector3 val2 = transform.InverseTransformDirection(((Plane)(ref worldCutPlane)).normal);
((Plane)(ref cutPlane))..ctor(val2, val);
}
else
{
cutPlane = worldCutPlane;
}
foreach (CuttableSubMesh subMesh in input.GetSubMeshes())
{
Cut(subMesh, cutPlane);
}
}
private static Vector3 ClosestPointOnPlane(Plane plane, Vector3 point)
{
//IL_0003: Unknown result type (might be due to invalid IL or missing references)
//IL_000c: Unknown result type (might be due to invalid IL or missing references)
//IL_0032: 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_003b: Unknown result type (might be due to invalid IL or missing references)
//IL_0040: Unknown result type (might be due to invalid IL or missing references)
//IL_0045: Unknown result type (might be due to invalid IL or missing references)
//IL_0018: 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_0021: Unknown result type (might be due to invalid IL or missing references)
//IL_0026: Unknown result type (might be due to invalid IL or missing references)
//IL_002b: Unknown result type (might be due to invalid IL or missing references)
//IL_004b: Unknown result type (might be due to invalid IL or missing references)
float distanceToPoint = ((Plane)(ref plane)).GetDistanceToPoint(point);
if (((Plane)(ref plane)).GetSide(point))
{
return point - ((Plane)(ref plane)).normal * distanceToPoint;
}
return point + ((Plane)(ref plane)).normal * distanceToPoint;
}
public CuttableMesh GetFrontOutput()
{
return new CuttableMesh(inputMesh, outputFrontSubMeshes);
}
public CuttableMesh GetBackOutput()
{
return new CuttableMesh(inputMesh, outputBackSubMeshes);
}
private void Cut(CuttableSubMesh inputSubMesh, Plane cutPlane)
{
//IL_004f: Unknown result type (might be due to invalid IL or missing references)
//IL_0054: Unknown result type (might be due to invalid IL or missing references)
//IL_0059: Unknown result type (might be due to invalid IL or missing references)
//IL_005e: Unknown result type (might be due to invalid IL or missing references)
//IL_0063: Unknown result type (might be due to invalid IL or missing references)
//IL_0068: Unknown result type (might be due to invalid IL or missing references)
//IL_006b: 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_0076: Unknown result type (might be due to invalid IL or missing references)
//IL_0078: Unknown result type (might be due to invalid IL or missing references)
//IL_0081: 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_0121: 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_015b: 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_02be: Unknown result type (might be due to invalid IL or missing references)
//IL_02c0: Unknown result type (might be due to invalid IL or missing references)
//IL_02c2: Unknown result type (might be due to invalid IL or missing references)
//IL_02c7: Unknown result type (might be due to invalid IL or missing references)
//IL_02c9: Unknown result type (might be due to invalid IL or missing references)
//IL_02cb: Unknown result type (might be due to invalid IL or missing references)
//IL_02cd: Unknown result type (might be due to invalid IL or missing references)
//IL_02d2: Unknown result type (might be due to invalid IL or missing references)
//IL_02d4: Unknown result type (might be due to invalid IL or missing references)
//IL_02d6: Unknown result type (might be due to invalid IL or missing references)
//IL_02d8: Unknown result type (might be due to invalid IL or missing references)
//IL_02dd: Unknown result type (might be due to invalid IL or missing references)
//IL_02df: Unknown result type (might be due to invalid IL or missing references)
//IL_02e3: Unknown result type (might be due to invalid IL or missing references)
//IL_01c8: 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_021d: Unknown result type (might be due to invalid IL or missing references)
//IL_0204: Unknown result type (might be due to invalid IL or missing references)
//IL_029d: Unknown result type (might be due to invalid IL or missing references)
//IL_0284: Unknown result type (might be due to invalid IL or missing references)
//IL_0261: Unknown result type (might be due to invalid IL or missing references)
//IL_0248: Unknown result type (might be due to invalid IL or missing references)
bool hasNormals = inputSubMesh.HasNormals();
bool hasColours = inputSubMesh.HasColours();
bool hasUvs = inputSubMesh.HasUvs();
bool hasUv = inputSubMesh.HasUv1();
CuttableSubMesh cuttableSubMesh = new CuttableSubMesh(hasNormals, hasColours, hasUvs, hasUv);
CuttableSubMesh cuttableSubMesh2 = new CuttableSubMesh(hasNormals, hasColours, hasUvs, hasUv);
for (int i = 0; i < inputSubMesh.NumVertices(); i += 3)
{
int num = i;
int num2 = i + 1;
int num3 = i + 2;
Vector3 vertex = inputSubMesh.GetVertex(num);
Vector3 vertex2 = inputSubMesh.GetVertex(num2);
Vector3 vertex3 = inputSubMesh.GetVertex(num3);
VertexClassification vertexClassification = Classify(vertex, cutPlane);
VertexClassification vertexClassification2 = Classify(vertex2, cutPlane);
VertexClassification vertexClassification3 = Classify(vertex3, cutPlane);
int numFront = 0;
int numBehind = 0;
CountSides(vertexClassification, ref numFront, ref numBehind);
CountSides(vertexClassification2, ref numFront, ref numBehind);
CountSides(vertexClassification3, ref numFront, ref numBehind);
if (numFront > 0 && numBehind == 0)
{
KeepTriangle(num, num2, num3, inputSubMesh, cuttableSubMesh);
}
else if (numFront == 0 && numBehind > 0)
{
KeepTriangle(num, num2, num3, inputSubMesh, cuttableSubMesh2);
}
else if (numFront == 2 && numBehind == 1)
{
if (vertexClassification == VertexClassification.Back)
{
SplitA(num, num2, num3, inputSubMesh, cutPlane, cuttableSubMesh2, cuttableSubMesh);
}
else if (vertexClassification2 == VertexClassification.Back)
{
SplitA(num2, num3, num, inputSubMesh, cutPlane, cuttableSubMesh2, cuttableSubMesh);
}
else
{
SplitA(num3, num, num2, inputSubMesh, cutPlane, cuttableSubMesh2, cuttableSubMesh);
}
}
else if (numFront == 1 && numBehind == 2)
{
if (vertexClassification == VertexClassification.Front)
{
SplitA(num, num2, num3, inputSubMesh, cutPlane, cuttableSubMesh, cuttableSubMesh2);
}
else if (vertexClassification2 == VertexClassification.Front)
{
SplitA(num2, num3, num, inputSubMesh, cutPlane, cuttableSubMesh, cuttableSubMesh2);
}
else
{
SplitA(num3, num, num2, inputSubMesh, cutPlane, cuttableSubMesh, cuttableSubMesh2);
}
}
else if (numFront == 1 && numBehind == 1)
{
if (vertexClassification == VertexClassification.OnPlane)
{
if (vertexClassification3 == VertexClassification.Front)
{
SplitB(num3, num, num2, inputSubMesh, cutPlane, cuttableSubMesh, cuttableSubMesh2);
}
else
{
SplitBFlipped(num2, num3, num, inputSubMesh, cutPlane, cuttableSubMesh, cuttableSubMesh2);
}
continue;
}
switch (vertexClassification2)
{
case VertexClassification.OnPlane:
if (vertexClassification == VertexClassification.Front)
{
SplitB(num, num2, num3, inputSubMesh, cutPlane, cuttableSubMesh, cuttableSubMesh2);
}
else
{
SplitBFlipped(num3, num, num2, inputSubMesh, cutPlane, cuttableSubMesh, cuttableSubMesh2);
}
break;
case VertexClassification.Front:
SplitB(num2, num3, num, inputSubMesh, cutPlane, cuttableSubMesh, cuttableSubMesh2);
break;
default:
SplitBFlipped(num, num2, num3, inputSubMesh, cutPlane, cuttableSubMesh, cuttableSubMesh2);
break;
}
}
else if (numFront == 0 && numBehind == 0)
{
Vector3 val = vertex2 - vertex;
Vector3 val2 = vertex3 - vertex;
Vector3 val3 = Vector3.Cross(val, val2);
if (Vector3.Dot(val3, ((Plane)(ref cutPlane)).normal) > 0f)
{
KeepTriangle(num, num2, num3, inputSubMesh, cuttableSubMesh2);
}
else
{
KeepTriangle(num, num2, num3, inputSubMesh, cuttableSubMesh);
}
}
}
outputFrontSubMeshes.Add(cuttableSubMesh);
outputBackSubMeshes.Add(cuttableSubMesh2);
}
private VertexClassification Classify(Vector3 vertex, Plane cutPlane)
{
//IL_0022: Unknown result type (might be due to invalid IL or missing references)
Vector3 val = default(Vector3);
((Vector3)(ref val))..ctor(vertex.x, vertex.y, vertex.z);
float distanceToPoint = ((Plane)(ref cutPlane)).GetDistanceToPoint(val);
double num = 9.999999747378752E-06;
if ((double)distanceToPoint > 0.0 - num && (double)distanceToPoint < num)
{
return VertexClassification.OnPlane;
}
if (distanceToPoint > 0f)
{
return VertexClassification.Front;
}
return VertexClassification.Back;
}
private void CountSides(VertexClassification c, ref int numFront, ref int numBehind)
{
switch (c)
{
case VertexClassification.Front:
numFront++;
break;
case VertexClassification.Back:
numBehind++;
break;
}
}
private void KeepTriangle(int i0, int i1, int i2, CuttableSubMesh inputSubMesh, CuttableSubMesh destSubMesh)
{
destSubMesh.CopyVertex(i0, inputSubMesh);
destSubMesh.CopyVertex(i1, inputSubMesh);
destSubMesh.CopyVertex(i2, inputSubMesh);
}
private void SplitA(int i0, int i1, int i2, CuttableSubMesh inputSubMesh, Plane cutPlane, CuttableSubMesh frontSubMesh, CuttableSubMesh backSubMesh)
{
//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_000d: Unknown result type (might be due to invalid IL or missing references)
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
//IL_0016: 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_001d: Unknown result type (might be due to invalid IL or missing references)
//IL_001e: Unknown result type (might be due to invalid IL or missing references)
//IL_001f: Unknown result type (might be due to invalid IL or missing references)
//IL_0023: Unknown result type (might be due to invalid IL or missing references)
//IL_002a: Unknown result type (might be due to invalid IL or missing references)
//IL_002b: Unknown result type (might be due to invalid IL or missing references)
//IL_002c: Unknown result type (might be due to invalid IL or missing references)
//IL_0030: Unknown result type (might be due to invalid IL or missing references)
Vector3 vertex = inputSubMesh.GetVertex(i0);
Vector3 vertex2 = inputSubMesh.GetVertex(i1);
Vector3 vertex3 = inputSubMesh.GetVertex(i2);
CalcIntersection(vertex, vertex2, cutPlane, out var weight);
CalcIntersection(vertex3, vertex, cutPlane, out var weight2);
frontSubMesh.CopyVertex(i0, inputSubMesh);
frontSubMesh.AddInterpolatedVertex(i0, i1, weight, inputSubMesh);
frontSubMesh.AddInterpolatedVertex(i2, i0, weight2, inputSubMesh);
backSubMesh.AddInterpolatedVertex(i0, i1, weight, inputSubMesh);
backSubMesh.CopyVertex(i1, inputSubMesh);
backSubMesh.CopyVertex(i2, inputSubMesh);
backSubMesh.CopyVertex(i2, inputSubMesh);
backSubMesh.AddInterpolatedVertex(i2, i0, weight2, inputSubMesh);
backSubMesh.AddInterpolatedVertex(i0, i1, weight, inputSubMesh);
}
private void SplitB(int i0, int i1, int i2, CuttableSubMesh inputSubMesh, Plane cutPlane, CuttableSubMesh frontSubMesh, CuttableSubMesh backSubMesh)
{
//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_000d: Unknown result type (might be due to invalid IL or missing references)
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
//IL_0014: 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_0016: Unknown result type (might be due to invalid IL or missing references)
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
Vector3 vertex = inputSubMesh.GetVertex(i0);
Vector3 vertex2 = inputSubMesh.GetVertex(i2);
CalcIntersection(vertex2, vertex, cutPlane, out var weight);
frontSubMesh.CopyVertex(i0, inputSubMesh);
frontSubMesh.CopyVertex(i1, inputSubMesh);
frontSubMesh.AddInterpolatedVertex(i2, i0, weight, inputSubMesh);
backSubMesh.CopyVertex(i1, inputSubMesh);
backSubMesh.CopyVertex(i2, inputSubMesh);
backSubMesh.AddInterpolatedVertex(i2, i0, weight, inputSubMesh);
}
private void SplitBFlipped(int i0, int i1, int i2, CuttableSubMesh inputSubMesh, Plane cutPlane, CuttableSubMesh frontSubMesh, CuttableSubMesh backSubMesh)
{
//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_000d: Unknown result type (might be due to invalid IL or missing references)
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
//IL_0014: 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_0016: Unknown result type (might be due to invalid IL or missing references)
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
Vector3 vertex = inputSubMesh.GetVertex(i0);
Vector3 vertex2 = inputSubMesh.GetVertex(i1);
CalcIntersection(vertex, vertex2, cutPlane, out var weight);
frontSubMesh.CopyVertex(i0, inputSubMesh);
frontSubMesh.AddInterpolatedVertex(i0, i1, weight, inputSubMesh);
frontSubMesh.CopyVertex(i2, inputSubMesh);
backSubMesh.CopyVertex(i1, inputSubMesh);
backSubMesh.CopyVertex(i2, inputSubMesh);
backSubMesh.AddInterpolatedVertex(i0, i1, weight, inputSubMesh);
}
private Vector3 CalcIntersection(Vector3 v0, Vector3 v1, Plane plane, out float weight)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0003: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: 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_0014: 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_0022: 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_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_0044: Unknown result type (might be due to invalid IL or missing references)
//IL_004c: Unknown result type (might be due to invalid IL or missing references)
//IL_004e: 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)
Vector3 val = v1 - v0;
float magnitude = ((Vector3)(ref val)).magnitude;
Ray val2 = default(Ray);
((Ray)(ref val2))..ctor(v0, val / magnitude);
float num = default(float);
((Plane)(ref plane)).Raycast(val2, ref num);
Vector3 result = ((Ray)(ref val2)).origin + ((Ray)(ref val2)).direction * num;
weight = num / magnitude;
return result;
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Logging;
using FistVR;
using HarmonyLib;
using OtherLoader;
using UnityEngine;
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("0.0.0.0")]
[module: UnverifiableCode]
namespace SkyHighPurchase.SkyesSosigSkyeSosigWearables;
[BepInPlugin("SkyHighPurchase.SkyesSosigSkyeSosigWearables", "SkyesSosigSkyeSosigWearables", "1.0.0")]
[BepInProcess("h3vr.exe")]
[Description("Built with MeatKit")]
[BepInDependency("h3vr.otherloader", "1.3.0")]
public class SkyesSosigSkyeSosigWearablesPlugin : BaseUnityPlugin
{
private static readonly string BasePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
internal static ManualLogSource Logger;
private void Awake()
{
Logger = ((BaseUnityPlugin)this).Logger;
LoadAssets();
}
private void LoadAssets()
{
Harmony.CreateAndPatchAll(Assembly.GetExecutingAssembly(), "SkyHighPurchase.SkyesSosigSkyeSosigWearables");
OtherLoader.RegisterDirectLoad(BasePath, "SkyHighPurchase.SkyesSosigSkyeSosigWearables", "", "", "skyessosigskyesosigwearables", "");
}
}
public class PatchChanger : MonoBehaviour
{
public int materialIndexToChange = 0;
public Material[] newMaterials;
private void Start()
{
if (newMaterials == null)
{
Debug.LogError((object)"New Material is not assigned!");
}
else
{
ChangeSpecificMaterial();
}
}
private void ChangeSpecificMaterial()
{
Renderer component = ((Component)this).GetComponent<Renderer>();
if ((Object)(object)component == (Object)null)
{
Debug.LogError((object)"Renderer component not found on this GameObject.");
return;
}
Material[] materials = component.materials;
if (materialIndexToChange >= 0 && materialIndexToChange < materials.Length)
{
materials[materialIndexToChange] = newMaterials[Random.Range(0, newMaterials.Length)];
component.materials = materials;
Debug.Log((object)("Material at index " + materialIndexToChange + " changed successfully."));
return;
}
Debug.LogError((object)("Invalid material index: " + materialIndexToChange + ". The mesh has " + materials.Length + " materials."));
}
}
public class DSC_ChangeOnHeld : MonoBehaviour
{
public string[] primaryIDs;
public GameObject[] primaryGameObjects;
public bool checkPrimary;
public string[] secondaryIDs;
public GameObject[] secondaryGameObjects;
public bool checkSecondary;
private Dictionary<string, GameObject> primaryIDToGameObjectMap;
private Dictionary<string, GameObject> secondaryIDToGameObjectMap;
private Sosig mysosig;
private GameObject recentPrimaryObject;
private string recentPrimaryID;
private GameObject recentSecondaryObject;
private string recentSecondaryID;
public void Start()
{
if (checkPrimary)
{
primaryIDToGameObjectMap = new Dictionary<string, GameObject>();
for (int i = 0; i < primaryIDs.Length; i++)
{
if (i < primaryGameObjects.Length)
{
primaryIDToGameObjectMap[primaryIDs[i]] = primaryGameObjects[i];
}
}
}
if (checkSecondary)
{
secondaryIDToGameObjectMap = new Dictionary<string, GameObject>();
for (int j = 0; j < secondaryIDs.Length; j++)
{
if (j < secondaryGameObjects.Length)
{
secondaryIDToGameObjectMap[secondaryIDs[j]] = secondaryGameObjects[j];
}
}
}
mysosig = ((Component)this).GetComponent<SosigWearable>().S;
}
public void Update()
{
if (checkPrimary && (Object)(object)mysosig != (Object)null)
{
SosigHand hand_Primary = mysosig.Hand_Primary;
if (hand_Primary != null && (Object)(object)hand_Primary.HeldObject != (Object)null && (Object)(object)hand_Primary.HeldObject.O != (Object)null && (Object)(object)hand_Primary.HeldObject.O.ObjectWrapper != (Object)null)
{
string itemID = hand_Primary.HeldObject.O.ObjectWrapper.ItemID;
if (itemID != null && itemID != recentPrimaryID)
{
UpdatePrimary(itemID);
}
}
}
if (!checkSecondary || !((Object)(object)mysosig != (Object)null))
{
return;
}
SosigHand hand_Secondary = mysosig.Hand_Secondary;
if (hand_Secondary != null && (Object)(object)hand_Secondary.HeldObject != (Object)null && (Object)(object)hand_Secondary.HeldObject.O != (Object)null && (Object)(object)hand_Secondary.HeldObject.O.ObjectWrapper != (Object)null)
{
string itemID2 = hand_Secondary.HeldObject.O.ObjectWrapper.ItemID;
if (itemID2 != null && itemID2 != recentSecondaryID)
{
UpdateSecondary(itemID2);
}
}
}
public void UpdatePrimary(string input)
{
if (primaryIDToGameObjectMap.TryGetValue(input, out var value))
{
if ((Object)(object)recentPrimaryObject != (Object)null)
{
recentPrimaryObject.SetActive(false);
}
value.SetActive(true);
recentPrimaryObject = value;
recentPrimaryID = input;
}
}
public void UpdateSecondary(string input)
{
if (secondaryIDToGameObjectMap.TryGetValue(input, out var value))
{
if ((Object)(object)recentSecondaryObject != (Object)null)
{
recentSecondaryObject.SetActive(false);
}
value.SetActive(true);
recentSecondaryObject = value;
recentSecondaryID = input;
}
}
}
public class CuttableMesh
{
private MeshRenderer inputMeshRenderer;
private bool hasUvs;
private bool hasUv1s;
private bool hasColours;
private List<CuttableSubMesh> subMeshes;
public CuttableMesh(Mesh inputMesh)
{
Init(inputMesh, ((Object)inputMesh).name);
}
public CuttableMesh(MeshRenderer input)
{
inputMeshRenderer = input;
MeshFilter component = ((Component)input).GetComponent<MeshFilter>();
Mesh sharedMesh = component.sharedMesh;
Init(sharedMesh, ((Object)input).name);
}
public CuttableMesh(CuttableMesh inputMesh, List<CuttableSubMesh> newSubMeshes)
{
inputMeshRenderer = inputMesh.inputMeshRenderer;
hasUvs = inputMesh.hasUvs;
hasUv1s = inputMesh.hasUv1s;
hasColours = inputMesh.hasColours;
subMeshes = new List<CuttableSubMesh>();
subMeshes.AddRange(newSubMeshes);
}
private void Init(Mesh inputMesh, string debugName)
{
subMeshes = new List<CuttableSubMesh>();
if (inputMesh.isReadable)
{
Vector3[] vertices = inputMesh.vertices;
Vector3[] normals = inputMesh.normals;
Vector2[] uv = inputMesh.uv;
Vector2[] uv2 = inputMesh.uv2;
Color32[] colors = inputMesh.colors32;
hasUvs = uv != null && uv.Length > 0;
hasUv1s = uv2 != null && uv2.Length > 0;
hasColours = colors != null && colors.Length > 0;
for (int i = 0; i < inputMesh.subMeshCount; i++)
{
int[] indices = inputMesh.GetIndices(i);
CuttableSubMesh item = new CuttableSubMesh(indices, vertices, normals, colors, uv, uv2);
subMeshes.Add(item);
}
}
else
{
Debug.LogError((object)("CuttableMesh's input mesh is not readable: " + debugName), (Object)(object)inputMesh);
}
}
public void Add(CuttableMesh other)
{
if (subMeshes.Count != other.subMeshes.Count)
{
throw new Exception("Mismatched submesh count");
}
for (int i = 0; i < subMeshes.Count; i++)
{
subMeshes[i].Add(other.subMeshes[i]);
}
}
public int NumSubMeshes()
{
return subMeshes.Count;
}
public bool HasUvs()
{
return hasUvs;
}
public bool HasColours()
{
return hasColours;
}
public List<CuttableSubMesh> GetSubMeshes()
{
return subMeshes;
}
public CuttableSubMesh GetSubMesh(int index)
{
return subMeshes[index];
}
public Transform GetTransform()
{
if ((Object)(object)inputMeshRenderer != (Object)null)
{
return ((Component)inputMeshRenderer).transform;
}
return null;
}
public MeshRenderer ConvertToRenderer(string newObjectName)
{
//IL_001b: Unknown result type (might be due to invalid IL or missing references)
//IL_0021: Expected O, but got Unknown
//IL_003d: Unknown result type (might be due to invalid IL or missing references)
//IL_004d: Unknown result type (might be due to invalid IL or missing references)
//IL_005d: 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_0097: 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)
Mesh val = CreateMesh();
if (val.vertexCount == 0)
{
return null;
}
GameObject val2 = new GameObject(newObjectName);
val2.transform.SetParent(((Component)inputMeshRenderer).transform);
val2.transform.localPosition = Vector3.zero;
val2.transform.localRotation = Quaternion.identity;
val2.transform.localScale = Vector3.one;
MeshFilter val3 = val2.AddComponent<MeshFilter>();
val3.mesh = val;
MeshRenderer val4 = val2.AddComponent<MeshRenderer>();
((Renderer)val4).shadowCastingMode = ((Renderer)inputMeshRenderer).shadowCastingMode;
((Renderer)val4).reflectionProbeUsage = ((Renderer)inputMeshRenderer).reflectionProbeUsage;
((Renderer)val4).lightProbeUsage = ((Renderer)inputMeshRenderer).lightProbeUsage;
((Renderer)val4).sharedMaterials = ((Renderer)inputMeshRenderer).sharedMaterials;
return val4;
}
public Mesh CreateMesh()
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Expected O, but got Unknown
Mesh val = new Mesh();
int num = 0;
for (int i = 0; i < subMeshes.Count; i++)
{
num += subMeshes[i].NumIndices();
}
List<Vector3> list = new List<Vector3>();
List<Vector3> list2 = new List<Vector3>();
List<Color32> list3 = ((!hasColours) ? null : new List<Color32>());
List<Vector2> list4 = ((!hasUvs) ? null : new List<Vector2>());
List<Vector2> list5 = ((!hasUv1s) ? null : new List<Vector2>());
List<int> list6 = new List<int>();
foreach (CuttableSubMesh subMesh in subMeshes)
{
list6.Add(list.Count);
subMesh.AddTo(list, list2, list3, list4, list5);
}
val.vertices = list.ToArray();
val.normals = list2.ToArray();
val.colors32 = ((!hasColours) ? null : list3.ToArray());
val.uv = ((!hasUvs) ? null : list4.ToArray());
val.uv2 = ((!hasUv1s) ? null : list5.ToArray());
val.subMeshCount = subMeshes.Count;
for (int j = 0; j < subMeshes.Count; j++)
{
CuttableSubMesh cuttableSubMesh = subMeshes[j];
int num2 = list6[j];
int[] array = cuttableSubMesh.GenIndices();
for (int k = 0; k < array.Length; k++)
{
array[k] += num2;
}
val.SetTriangles(array, j, true);
}
return val;
}
}
public class CuttableSubMesh
{
private List<Vector3> vertices;
private List<Vector3> normals;
private List<Color32> colours;
private List<Vector2> uvs;
private List<Vector2> uv1s;
public CuttableSubMesh(bool hasNormals, bool hasColours, bool hasUvs, bool hasUv1)
{
vertices = new List<Vector3>();
if (hasNormals)
{
normals = new List<Vector3>();
}
if (hasColours)
{
colours = new List<Color32>();
}
if (hasUvs)
{
uvs = new List<Vector2>();
}
if (hasUv1)
{
uv1s = new List<Vector2>();
}
}
public CuttableSubMesh(int[] indices, Vector3[] inputVertices, Vector3[] inputNormals, Color32[] inputColours, Vector2[] inputUvs, Vector2[] inputUv1)
{
//IL_0099: Unknown result type (might be due to invalid IL or missing references)
//IL_00bb: Unknown result type (might be due to invalid IL or missing references)
//IL_00de: 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_0124: Unknown result type (might be due to invalid IL or missing references)
vertices = new List<Vector3>();
if (inputNormals != null && inputNormals.Length > 0)
{
normals = new List<Vector3>();
}
if (inputColours != null && inputColours.Length > 0)
{
colours = new List<Color32>();
}
if (inputUvs != null && inputUvs.Length > 0)
{
uvs = new List<Vector2>();
}
if (inputUv1 != null && inputUv1.Length > 0)
{
uv1s = new List<Vector2>();
}
foreach (int num in indices)
{
vertices.Add(inputVertices[num]);
if (normals != null)
{
normals.Add(inputNormals[num]);
}
if (colours != null)
{
colours.Add(inputColours[num]);
}
if (uvs != null)
{
uvs.Add(inputUvs[num]);
}
if (uv1s != null)
{
uv1s.Add(inputUv1[num]);
}
}
}
public void Add(CuttableSubMesh other)
{
for (int i = 0; i < other.vertices.Count; i++)
{
CopyVertex(i, other);
}
}
public int NumVertices()
{
return vertices.Count;
}
public Vector3 GetVertex(int index)
{
//IL_0008: 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)
return vertices[index];
}
public bool HasNormals()
{
return normals != null;
}
public bool HasColours()
{
return colours != null;
}
public bool HasUvs()
{
return uvs != null;
}
public bool HasUv1()
{
return uv1s != null;
}
public void CopyVertex(int srcIndex, CuttableSubMesh srcMesh)
{
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
//IL_0030: Unknown result type (might be due to invalid IL or missing references)
//IL_0052: 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_0096: Unknown result type (might be due to invalid IL or missing references)
vertices.Add(srcMesh.vertices[srcIndex]);
if (normals != null)
{
normals.Add(srcMesh.normals[srcIndex]);
}
if (colours != null)
{
colours.Add(srcMesh.colours[srcIndex]);
}
if (uvs != null)
{
uvs.Add(srcMesh.uvs[srcIndex]);
}
if (uv1s != null)
{
uv1s.Add(srcMesh.uv1s[srcIndex]);
}
}
public void AddInterpolatedVertex(int i0, int i1, float weight, CuttableSubMesh srcMesh)
{
//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_000d: Unknown result type (might be due to invalid IL or missing references)
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
//IL_0019: Unknown result type (might be due to invalid IL or missing references)
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
//IL_001c: 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_004c: Unknown result type (might be due to invalid IL or missing references)
//IL_0052: Unknown result type (might be due to invalid IL or missing references)
//IL_0057: Unknown result type (might be due to invalid IL or missing references)
//IL_005a: Unknown result type (might be due to invalid IL or missing references)
//IL_007d: Unknown result type (might be due to invalid IL or missing references)
//IL_008a: Unknown result type (might be due to invalid IL or missing references)
//IL_0090: Unknown result type (might be due to invalid IL or missing references)
//IL_00b3: 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_00c6: Unknown result type (might be due to invalid IL or missing references)
//IL_00e9: Unknown result type (might be due to invalid IL or missing references)
//IL_00f6: Unknown result type (might be due to invalid IL or missing references)
//IL_00fc: Unknown result type (might be due to invalid IL or missing references)
Vector3 vertex = srcMesh.GetVertex(i0);
Vector3 vertex2 = srcMesh.GetVertex(i1);
vertices.Add(Vector3.Lerp(vertex, vertex2, weight));
if (normals != null)
{
List<Vector3> list = normals;
Vector3 val = Vector3.Lerp(srcMesh.normals[i0], srcMesh.normals[i1], weight);
list.Add(((Vector3)(ref val)).normalized);
}
if (colours != null)
{
colours.Add(Color32.Lerp(srcMesh.colours[i0], srcMesh.colours[i1], weight));
}
if (uvs != null)
{
uvs.Add(Vector2.Lerp(srcMesh.uvs[i0], srcMesh.uvs[i1], weight));
}
if (uv1s != null)
{
uv1s.Add(Vector2.Lerp(srcMesh.uv1s[i0], srcMesh.uv1s[i1], weight));
}
}
public void AddTo(List<Vector3> destVertices, List<Vector3> destNormals, List<Color32> destColours, List<Vector2> destUvs, List<Vector2> destUv1s)
{
destVertices.AddRange(vertices);
if (normals != null)
{
destNormals.AddRange(normals);
}
if (colours != null)
{
destColours.AddRange(colours);
}
if (uvs != null)
{
destUvs.AddRange(uvs);
}
if (uv1s != null)
{
destUv1s.AddRange(uv1s);
}
}
public int NumIndices()
{
return vertices.Count;
}
public int[] GenIndices()
{
int[] array = new int[vertices.Count];
for (int i = 0; i < array.Length; i++)
{
array[i] = i;
}
return array;
}
}
public enum VertexClassification
{
Front = 1,
Back = 2,
OnPlane = 4
}
public class MeshCutter
{
private CuttableMesh inputMesh;
private List<CuttableSubMesh> outputFrontSubMeshes;
private List<CuttableSubMesh> outputBackSubMeshes;
public void Cut(CuttableMesh input, Plane worldCutPlane)
{
//IL_0067: 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_0038: Unknown result type (might be due to invalid IL or missing references)
//IL_0039: Unknown result type (might be due to invalid IL or missing references)
//IL_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_004c: Unknown result type (might be due to invalid IL or missing references)
//IL_0051: Unknown result type (might be due to invalid IL or missing references)
//IL_0056: 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_005a: 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)
inputMesh = input;
outputFrontSubMeshes = new List<CuttableSubMesh>();
outputBackSubMeshes = new List<CuttableSubMesh>();
Transform transform = inputMesh.GetTransform();
Plane cutPlane = default(Plane);
if ((Object)(object)transform != (Object)null)
{
Vector3 val = transform.InverseTransformPoint(ClosestPointOnPlane(worldCutPlane, Vector3.zero));
Vector3 val2 = transform.InverseTransformDirection(((Plane)(ref worldCutPlane)).normal);
((Plane)(ref cutPlane))..ctor(val2, val);
}
else
{
cutPlane = worldCutPlane;
}
foreach (CuttableSubMesh subMesh in input.GetSubMeshes())
{
Cut(subMesh, cutPlane);
}
}
private static Vector3 ClosestPointOnPlane(Plane plane, Vector3 point)
{
//IL_0003: Unknown result type (might be due to invalid IL or missing references)
//IL_000c: Unknown result type (might be due to invalid IL or missing references)
//IL_0032: 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_003b: Unknown result type (might be due to invalid IL or missing references)
//IL_0040: Unknown result type (might be due to invalid IL or missing references)
//IL_0045: Unknown result type (might be due to invalid IL or missing references)
//IL_0018: 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_0021: Unknown result type (might be due to invalid IL or missing references)
//IL_0026: Unknown result type (might be due to invalid IL or missing references)
//IL_002b: Unknown result type (might be due to invalid IL or missing references)
//IL_004b: Unknown result type (might be due to invalid IL or missing references)
float distanceToPoint = ((Plane)(ref plane)).GetDistanceToPoint(point);
if (((Plane)(ref plane)).GetSide(point))
{
return point - ((Plane)(ref plane)).normal * distanceToPoint;
}
return point + ((Plane)(ref plane)).normal * distanceToPoint;
}
public CuttableMesh GetFrontOutput()
{
return new CuttableMesh(inputMesh, outputFrontSubMeshes);
}
public CuttableMesh GetBackOutput()
{
return new CuttableMesh(inputMesh, outputBackSubMeshes);
}
private void Cut(CuttableSubMesh inputSubMesh, Plane cutPlane)
{
//IL_004f: Unknown result type (might be due to invalid IL or missing references)
//IL_0054: Unknown result type (might be due to invalid IL or missing references)
//IL_0059: Unknown result type (might be due to invalid IL or missing references)
//IL_005e: Unknown result type (might be due to invalid IL or missing references)
//IL_0063: Unknown result type (might be due to invalid IL or missing references)
//IL_0068: Unknown result type (might be due to invalid IL or missing references)
//IL_006b: 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_0076: Unknown result type (might be due to invalid IL or missing references)
//IL_0078: Unknown result type (might be due to invalid IL or missing references)
//IL_0081: 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_0121: 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_015b: 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_02be: Unknown result type (might be due to invalid IL or missing references)
//IL_02c0: Unknown result type (might be due to invalid IL or missing references)
//IL_02c2: Unknown result type (might be due to invalid IL or missing references)
//IL_02c7: Unknown result type (might be due to invalid IL or missing references)
//IL_02c9: Unknown result type (might be due to invalid IL or missing references)
//IL_02cb: Unknown result type (might be due to invalid IL or missing references)
//IL_02cd: Unknown result type (might be due to invalid IL or missing references)
//IL_02d2: Unknown result type (might be due to invalid IL or missing references)
//IL_02d4: Unknown result type (might be due to invalid IL or missing references)
//IL_02d6: Unknown result type (might be due to invalid IL or missing references)
//IL_02d8: Unknown result type (might be due to invalid IL or missing references)
//IL_02dd: Unknown result type (might be due to invalid IL or missing references)
//IL_02df: Unknown result type (might be due to invalid IL or missing references)
//IL_02e3: Unknown result type (might be due to invalid IL or missing references)
//IL_01c8: 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_021d: Unknown result type (might be due to invalid IL or missing references)
//IL_0204: Unknown result type (might be due to invalid IL or missing references)
//IL_029d: Unknown result type (might be due to invalid IL or missing references)
//IL_0284: Unknown result type (might be due to invalid IL or missing references)
//IL_0261: Unknown result type (might be due to invalid IL or missing references)
//IL_0248: Unknown result type (might be due to invalid IL or missing references)
bool hasNormals = inputSubMesh.HasNormals();
bool hasColours = inputSubMesh.HasColours();
bool hasUvs = inputSubMesh.HasUvs();
bool hasUv = inputSubMesh.HasUv1();
CuttableSubMesh cuttableSubMesh = new CuttableSubMesh(hasNormals, hasColours, hasUvs, hasUv);
CuttableSubMesh cuttableSubMesh2 = new CuttableSubMesh(hasNormals, hasColours, hasUvs, hasUv);
for (int i = 0; i < inputSubMesh.NumVertices(); i += 3)
{
int num = i;
int num2 = i + 1;
int num3 = i + 2;
Vector3 vertex = inputSubMesh.GetVertex(num);
Vector3 vertex2 = inputSubMesh.GetVertex(num2);
Vector3 vertex3 = inputSubMesh.GetVertex(num3);
VertexClassification vertexClassification = Classify(vertex, cutPlane);
VertexClassification vertexClassification2 = Classify(vertex2, cutPlane);
VertexClassification vertexClassification3 = Classify(vertex3, cutPlane);
int numFront = 0;
int numBehind = 0;
CountSides(vertexClassification, ref numFront, ref numBehind);
CountSides(vertexClassification2, ref numFront, ref numBehind);
CountSides(vertexClassification3, ref numFront, ref numBehind);
if (numFront > 0 && numBehind == 0)
{
KeepTriangle(num, num2, num3, inputSubMesh, cuttableSubMesh);
}
else if (numFront == 0 && numBehind > 0)
{
KeepTriangle(num, num2, num3, inputSubMesh, cuttableSubMesh2);
}
else if (numFront == 2 && numBehind == 1)
{
if (vertexClassification == VertexClassification.Back)
{
SplitA(num, num2, num3, inputSubMesh, cutPlane, cuttableSubMesh2, cuttableSubMesh);
}
else if (vertexClassification2 == VertexClassification.Back)
{
SplitA(num2, num3, num, inputSubMesh, cutPlane, cuttableSubMesh2, cuttableSubMesh);
}
else
{
SplitA(num3, num, num2, inputSubMesh, cutPlane, cuttableSubMesh2, cuttableSubMesh);
}
}
else if (numFront == 1 && numBehind == 2)
{
if (vertexClassification == VertexClassification.Front)
{
SplitA(num, num2, num3, inputSubMesh, cutPlane, cuttableSubMesh, cuttableSubMesh2);
}
else if (vertexClassification2 == VertexClassification.Front)
{
SplitA(num2, num3, num, inputSubMesh, cutPlane, cuttableSubMesh, cuttableSubMesh2);
}
else
{
SplitA(num3, num, num2, inputSubMesh, cutPlane, cuttableSubMesh, cuttableSubMesh2);
}
}
else if (numFront == 1 && numBehind == 1)
{
if (vertexClassification == VertexClassification.OnPlane)
{
if (vertexClassification3 == VertexClassification.Front)
{
SplitB(num3, num, num2, inputSubMesh, cutPlane, cuttableSubMesh, cuttableSubMesh2);
}
else
{
SplitBFlipped(num2, num3, num, inputSubMesh, cutPlane, cuttableSubMesh, cuttableSubMesh2);
}
continue;
}
switch (vertexClassification2)
{
case VertexClassification.OnPlane:
if (vertexClassification == VertexClassification.Front)
{
SplitB(num, num2, num3, inputSubMesh, cutPlane, cuttableSubMesh, cuttableSubMesh2);
}
else
{
SplitBFlipped(num3, num, num2, inputSubMesh, cutPlane, cuttableSubMesh, cuttableSubMesh2);
}
break;
case VertexClassification.Front:
SplitB(num2, num3, num, inputSubMesh, cutPlane, cuttableSubMesh, cuttableSubMesh2);
break;
default:
SplitBFlipped(num, num2, num3, inputSubMesh, cutPlane, cuttableSubMesh, cuttableSubMesh2);
break;
}
}
else if (numFront == 0 && numBehind == 0)
{
Vector3 val = vertex2 - vertex;
Vector3 val2 = vertex3 - vertex;
Vector3 val3 = Vector3.Cross(val, val2);
if (Vector3.Dot(val3, ((Plane)(ref cutPlane)).normal) > 0f)
{
KeepTriangle(num, num2, num3, inputSubMesh, cuttableSubMesh2);
}
else
{
KeepTriangle(num, num2, num3, inputSubMesh, cuttableSubMesh);
}
}
}
outputFrontSubMeshes.Add(cuttableSubMesh);
outputBackSubMeshes.Add(cuttableSubMesh2);
}
private VertexClassification Classify(Vector3 vertex, Plane cutPlane)
{
//IL_0022: Unknown result type (might be due to invalid IL or missing references)
Vector3 val = default(Vector3);
((Vector3)(ref val))..ctor(vertex.x, vertex.y, vertex.z);
float distanceToPoint = ((Plane)(ref cutPlane)).GetDistanceToPoint(val);
double num = 9.999999747378752E-06;
if ((double)distanceToPoint > 0.0 - num && (double)distanceToPoint < num)
{
return VertexClassification.OnPlane;
}
if (distanceToPoint > 0f)
{
return VertexClassification.Front;
}
return VertexClassification.Back;
}
private void CountSides(VertexClassification c, ref int numFront, ref int numBehind)
{
switch (c)
{
case VertexClassification.Front:
numFront++;
break;
case VertexClassification.Back:
numBehind++;
break;
}
}
private void KeepTriangle(int i0, int i1, int i2, CuttableSubMesh inputSubMesh, CuttableSubMesh destSubMesh)
{
destSubMesh.CopyVertex(i0, inputSubMesh);
destSubMesh.CopyVertex(i1, inputSubMesh);
destSubMesh.CopyVertex(i2, inputSubMesh);
}
private void SplitA(int i0, int i1, int i2, CuttableSubMesh inputSubMesh, Plane cutPlane, CuttableSubMesh frontSubMesh, CuttableSubMesh backSubMesh)
{
//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_000d: Unknown result type (might be due to invalid IL or missing references)
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
//IL_0016: 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_001d: Unknown result type (might be due to invalid IL or missing references)
//IL_001e: Unknown result type (might be due to invalid IL or missing references)
//IL_001f: Unknown result type (might be due to invalid IL or missing references)
//IL_0023: Unknown result type (might be due to invalid IL or missing references)
//IL_002a: Unknown result type (might be due to invalid IL or missing references)
//IL_002b: Unknown result type (might be due to invalid IL or missing references)
//IL_002c: Unknown result type (might be due to invalid IL or missing references)
//IL_0030: Unknown result type (might be due to invalid IL or missing references)
Vector3 vertex = inputSubMesh.GetVertex(i0);
Vector3 vertex2 = inputSubMesh.GetVertex(i1);
Vector3 vertex3 = inputSubMesh.GetVertex(i2);
CalcIntersection(vertex, vertex2, cutPlane, out var weight);
CalcIntersection(vertex3, vertex, cutPlane, out var weight2);
frontSubMesh.CopyVertex(i0, inputSubMesh);
frontSubMesh.AddInterpolatedVertex(i0, i1, weight, inputSubMesh);
frontSubMesh.AddInterpolatedVertex(i2, i0, weight2, inputSubMesh);
backSubMesh.AddInterpolatedVertex(i0, i1, weight, inputSubMesh);
backSubMesh.CopyVertex(i1, inputSubMesh);
backSubMesh.CopyVertex(i2, inputSubMesh);
backSubMesh.CopyVertex(i2, inputSubMesh);
backSubMesh.AddInterpolatedVertex(i2, i0, weight2, inputSubMesh);
backSubMesh.AddInterpolatedVertex(i0, i1, weight, inputSubMesh);
}
private void SplitB(int i0, int i1, int i2, CuttableSubMesh inputSubMesh, Plane cutPlane, CuttableSubMesh frontSubMesh, CuttableSubMesh backSubMesh)
{
//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_000d: Unknown result type (might be due to invalid IL or missing references)
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
//IL_0014: 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_0016: Unknown result type (might be due to invalid IL or missing references)
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
Vector3 vertex = inputSubMesh.GetVertex(i0);
Vector3 vertex2 = inputSubMesh.GetVertex(i2);
CalcIntersection(vertex2, vertex, cutPlane, out var weight);
frontSubMesh.CopyVertex(i0, inputSubMesh);
frontSubMesh.CopyVertex(i1, inputSubMesh);
frontSubMesh.AddInterpolatedVertex(i2, i0, weight, inputSubMesh);
backSubMesh.CopyVertex(i1, inputSubMesh);
backSubMesh.CopyVertex(i2, inputSubMesh);
backSubMesh.AddInterpolatedVertex(i2, i0, weight, inputSubMesh);
}
private void SplitBFlipped(int i0, int i1, int i2, CuttableSubMesh inputSubMesh, Plane cutPlane, CuttableSubMesh frontSubMesh, CuttableSubMesh backSubMesh)
{
//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_000d: Unknown result type (might be due to invalid IL or missing references)
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
//IL_0014: 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_0016: Unknown result type (might be due to invalid IL or missing references)
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
Vector3 vertex = inputSubMesh.GetVertex(i0);
Vector3 vertex2 = inputSubMesh.GetVertex(i1);
CalcIntersection(vertex, vertex2, cutPlane, out var weight);
frontSubMesh.CopyVertex(i0, inputSubMesh);
frontSubMesh.AddInterpolatedVertex(i0, i1, weight, inputSubMesh);
frontSubMesh.CopyVertex(i2, inputSubMesh);
backSubMesh.CopyVertex(i1, inputSubMesh);
backSubMesh.CopyVertex(i2, inputSubMesh);
backSubMesh.AddInterpolatedVertex(i0, i1, weight, inputSubMesh);
}
private Vector3 CalcIntersection(Vector3 v0, Vector3 v1, Plane plane, out float weight)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0003: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: 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_0014: 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_0022: 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_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_0044: Unknown result type (might be due to invalid IL or missing references)
//IL_004c: Unknown result type (might be due to invalid IL or missing references)
//IL_004e: 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)
Vector3 val = v1 - v0;
float magnitude = ((Vector3)(ref val)).magnitude;
Ray val2 = default(Ray);
((Ray)(ref val2))..ctor(v0, val / magnitude);
float num = default(float);
((Plane)(ref plane)).Raycast(val2, ref num);
Vector3 result = ((Ray)(ref val2)).origin + ((Ray)(ref val2)).direction * num;
weight = num / magnitude;
return result;
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Logging;
using HarmonyLib;
using OtherLoader;
using UnityEngine;
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("0.0.0.0")]
[module: UnverifiableCode]
namespace SkyHighPurchase.Skye_CyberSosigWearables;
[BepInPlugin("SkyHighPurchase.Skye_CyberSosigWearables", "Skye_CyberSosigWearables", "1.0.0")]
[BepInProcess("h3vr.exe")]
[Description("Built with MeatKit")]
[BepInDependency("h3vr.otherloader", "1.3.0")]
public class Skye_CyberSosigWearablesPlugin : BaseUnityPlugin
{
private static readonly string BasePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
internal static ManualLogSource Logger;
private void Awake()
{
Logger = ((BaseUnityPlugin)this).Logger;
LoadAssets();
}
private void LoadAssets()
{
Harmony.CreateAndPatchAll(Assembly.GetExecutingAssembly(), "SkyHighPurchase.Skye_CyberSosigWearables");
OtherLoader.RegisterDirectLoad(BasePath, "SkyHighPurchase.Skye_CyberSosigWearables", "", "", "skye_cybersosigbody_white,skye_cybersosigbodyarmor_white,skye_cybersosigouterarmor_white,skye_cybersosigguns", "");
}
}
public class CuttableMesh
{
private MeshRenderer inputMeshRenderer;
private bool hasUvs;
private bool hasUv1s;
private bool hasColours;
private List<CuttableSubMesh> subMeshes;
public CuttableMesh(Mesh inputMesh)
{
Init(inputMesh, ((Object)inputMesh).name);
}
public CuttableMesh(MeshRenderer input)
{
inputMeshRenderer = input;
MeshFilter component = ((Component)input).GetComponent<MeshFilter>();
Mesh sharedMesh = component.sharedMesh;
Init(sharedMesh, ((Object)input).name);
}
public CuttableMesh(CuttableMesh inputMesh, List<CuttableSubMesh> newSubMeshes)
{
inputMeshRenderer = inputMesh.inputMeshRenderer;
hasUvs = inputMesh.hasUvs;
hasUv1s = inputMesh.hasUv1s;
hasColours = inputMesh.hasColours;
subMeshes = new List<CuttableSubMesh>();
subMeshes.AddRange(newSubMeshes);
}
private void Init(Mesh inputMesh, string debugName)
{
subMeshes = new List<CuttableSubMesh>();
if (inputMesh.isReadable)
{
Vector3[] vertices = inputMesh.vertices;
Vector3[] normals = inputMesh.normals;
Vector2[] uv = inputMesh.uv;
Vector2[] uv2 = inputMesh.uv2;
Color32[] colors = inputMesh.colors32;
hasUvs = uv != null && uv.Length > 0;
hasUv1s = uv2 != null && uv2.Length > 0;
hasColours = colors != null && colors.Length > 0;
for (int i = 0; i < inputMesh.subMeshCount; i++)
{
int[] indices = inputMesh.GetIndices(i);
CuttableSubMesh item = new CuttableSubMesh(indices, vertices, normals, colors, uv, uv2);
subMeshes.Add(item);
}
}
else
{
Debug.LogError((object)("CuttableMesh's input mesh is not readable: " + debugName), (Object)(object)inputMesh);
}
}
public void Add(CuttableMesh other)
{
if (subMeshes.Count != other.subMeshes.Count)
{
throw new Exception("Mismatched submesh count");
}
for (int i = 0; i < subMeshes.Count; i++)
{
subMeshes[i].Add(other.subMeshes[i]);
}
}
public int NumSubMeshes()
{
return subMeshes.Count;
}
public bool HasUvs()
{
return hasUvs;
}
public bool HasColours()
{
return hasColours;
}
public List<CuttableSubMesh> GetSubMeshes()
{
return subMeshes;
}
public CuttableSubMesh GetSubMesh(int index)
{
return subMeshes[index];
}
public Transform GetTransform()
{
if ((Object)(object)inputMeshRenderer != (Object)null)
{
return ((Component)inputMeshRenderer).transform;
}
return null;
}
public MeshRenderer ConvertToRenderer(string newObjectName)
{
//IL_001b: Unknown result type (might be due to invalid IL or missing references)
//IL_0021: Expected O, but got Unknown
//IL_003d: Unknown result type (might be due to invalid IL or missing references)
//IL_004d: Unknown result type (might be due to invalid IL or missing references)
//IL_005d: 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_0097: 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)
Mesh val = CreateMesh();
if (val.vertexCount == 0)
{
return null;
}
GameObject val2 = new GameObject(newObjectName);
val2.transform.SetParent(((Component)inputMeshRenderer).transform);
val2.transform.localPosition = Vector3.zero;
val2.transform.localRotation = Quaternion.identity;
val2.transform.localScale = Vector3.one;
MeshFilter val3 = val2.AddComponent<MeshFilter>();
val3.mesh = val;
MeshRenderer val4 = val2.AddComponent<MeshRenderer>();
((Renderer)val4).shadowCastingMode = ((Renderer)inputMeshRenderer).shadowCastingMode;
((Renderer)val4).reflectionProbeUsage = ((Renderer)inputMeshRenderer).reflectionProbeUsage;
((Renderer)val4).lightProbeUsage = ((Renderer)inputMeshRenderer).lightProbeUsage;
((Renderer)val4).sharedMaterials = ((Renderer)inputMeshRenderer).sharedMaterials;
return val4;
}
public Mesh CreateMesh()
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Expected O, but got Unknown
Mesh val = new Mesh();
int num = 0;
for (int i = 0; i < subMeshes.Count; i++)
{
num += subMeshes[i].NumIndices();
}
List<Vector3> list = new List<Vector3>();
List<Vector3> list2 = new List<Vector3>();
List<Color32> list3 = ((!hasColours) ? null : new List<Color32>());
List<Vector2> list4 = ((!hasUvs) ? null : new List<Vector2>());
List<Vector2> list5 = ((!hasUv1s) ? null : new List<Vector2>());
List<int> list6 = new List<int>();
foreach (CuttableSubMesh subMesh in subMeshes)
{
list6.Add(list.Count);
subMesh.AddTo(list, list2, list3, list4, list5);
}
val.vertices = list.ToArray();
val.normals = list2.ToArray();
val.colors32 = ((!hasColours) ? null : list3.ToArray());
val.uv = ((!hasUvs) ? null : list4.ToArray());
val.uv2 = ((!hasUv1s) ? null : list5.ToArray());
val.subMeshCount = subMeshes.Count;
for (int j = 0; j < subMeshes.Count; j++)
{
CuttableSubMesh cuttableSubMesh = subMeshes[j];
int num2 = list6[j];
int[] array = cuttableSubMesh.GenIndices();
for (int k = 0; k < array.Length; k++)
{
array[k] += num2;
}
val.SetTriangles(array, j, true);
}
return val;
}
}
public class CuttableSubMesh
{
private List<Vector3> vertices;
private List<Vector3> normals;
private List<Color32> colours;
private List<Vector2> uvs;
private List<Vector2> uv1s;
public CuttableSubMesh(bool hasNormals, bool hasColours, bool hasUvs, bool hasUv1)
{
vertices = new List<Vector3>();
if (hasNormals)
{
normals = new List<Vector3>();
}
if (hasColours)
{
colours = new List<Color32>();
}
if (hasUvs)
{
uvs = new List<Vector2>();
}
if (hasUv1)
{
uv1s = new List<Vector2>();
}
}
public CuttableSubMesh(int[] indices, Vector3[] inputVertices, Vector3[] inputNormals, Color32[] inputColours, Vector2[] inputUvs, Vector2[] inputUv1)
{
//IL_0099: Unknown result type (might be due to invalid IL or missing references)
//IL_00bb: Unknown result type (might be due to invalid IL or missing references)
//IL_00de: 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_0124: Unknown result type (might be due to invalid IL or missing references)
vertices = new List<Vector3>();
if (inputNormals != null && inputNormals.Length > 0)
{
normals = new List<Vector3>();
}
if (inputColours != null && inputColours.Length > 0)
{
colours = new List<Color32>();
}
if (inputUvs != null && inputUvs.Length > 0)
{
uvs = new List<Vector2>();
}
if (inputUv1 != null && inputUv1.Length > 0)
{
uv1s = new List<Vector2>();
}
foreach (int num in indices)
{
vertices.Add(inputVertices[num]);
if (normals != null)
{
normals.Add(inputNormals[num]);
}
if (colours != null)
{
colours.Add(inputColours[num]);
}
if (uvs != null)
{
uvs.Add(inputUvs[num]);
}
if (uv1s != null)
{
uv1s.Add(inputUv1[num]);
}
}
}
public void Add(CuttableSubMesh other)
{
for (int i = 0; i < other.vertices.Count; i++)
{
CopyVertex(i, other);
}
}
public int NumVertices()
{
return vertices.Count;
}
public Vector3 GetVertex(int index)
{
//IL_0008: 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)
return vertices[index];
}
public bool HasNormals()
{
return normals != null;
}
public bool HasColours()
{
return colours != null;
}
public bool HasUvs()
{
return uvs != null;
}
public bool HasUv1()
{
return uv1s != null;
}
public void CopyVertex(int srcIndex, CuttableSubMesh srcMesh)
{
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
//IL_0030: Unknown result type (might be due to invalid IL or missing references)
//IL_0052: 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_0096: Unknown result type (might be due to invalid IL or missing references)
vertices.Add(srcMesh.vertices[srcIndex]);
if (normals != null)
{
normals.Add(srcMesh.normals[srcIndex]);
}
if (colours != null)
{
colours.Add(srcMesh.colours[srcIndex]);
}
if (uvs != null)
{
uvs.Add(srcMesh.uvs[srcIndex]);
}
if (uv1s != null)
{
uv1s.Add(srcMesh.uv1s[srcIndex]);
}
}
public void AddInterpolatedVertex(int i0, int i1, float weight, CuttableSubMesh srcMesh)
{
//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_000d: Unknown result type (might be due to invalid IL or missing references)
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
//IL_0019: Unknown result type (might be due to invalid IL or missing references)
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
//IL_001c: 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_004c: Unknown result type (might be due to invalid IL or missing references)
//IL_0052: Unknown result type (might be due to invalid IL or missing references)
//IL_0057: Unknown result type (might be due to invalid IL or missing references)
//IL_005a: Unknown result type (might be due to invalid IL or missing references)
//IL_007d: Unknown result type (might be due to invalid IL or missing references)
//IL_008a: Unknown result type (might be due to invalid IL or missing references)
//IL_0090: Unknown result type (might be due to invalid IL or missing references)
//IL_00b3: 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_00c6: Unknown result type (might be due to invalid IL or missing references)
//IL_00e9: Unknown result type (might be due to invalid IL or missing references)
//IL_00f6: Unknown result type (might be due to invalid IL or missing references)
//IL_00fc: Unknown result type (might be due to invalid IL or missing references)
Vector3 vertex = srcMesh.GetVertex(i0);
Vector3 vertex2 = srcMesh.GetVertex(i1);
vertices.Add(Vector3.Lerp(vertex, vertex2, weight));
if (normals != null)
{
List<Vector3> list = normals;
Vector3 val = Vector3.Lerp(srcMesh.normals[i0], srcMesh.normals[i1], weight);
list.Add(((Vector3)(ref val)).normalized);
}
if (colours != null)
{
colours.Add(Color32.Lerp(srcMesh.colours[i0], srcMesh.colours[i1], weight));
}
if (uvs != null)
{
uvs.Add(Vector2.Lerp(srcMesh.uvs[i0], srcMesh.uvs[i1], weight));
}
if (uv1s != null)
{
uv1s.Add(Vector2.Lerp(srcMesh.uv1s[i0], srcMesh.uv1s[i1], weight));
}
}
public void AddTo(List<Vector3> destVertices, List<Vector3> destNormals, List<Color32> destColours, List<Vector2> destUvs, List<Vector2> destUv1s)
{
destVertices.AddRange(vertices);
if (normals != null)
{
destNormals.AddRange(normals);
}
if (colours != null)
{
destColours.AddRange(colours);
}
if (uvs != null)
{
destUvs.AddRange(uvs);
}
if (uv1s != null)
{
destUv1s.AddRange(uv1s);
}
}
public int NumIndices()
{
return vertices.Count;
}
public int[] GenIndices()
{
int[] array = new int[vertices.Count];
for (int i = 0; i < array.Length; i++)
{
array[i] = i;
}
return array;
}
}
public enum VertexClassification
{
Front = 1,
Back = 2,
OnPlane = 4
}
public class MeshCutter
{
private CuttableMesh inputMesh;
private List<CuttableSubMesh> outputFrontSubMeshes;
private List<CuttableSubMesh> outputBackSubMeshes;
public void Cut(CuttableMesh input, Plane worldCutPlane)
{
//IL_0067: 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_0038: Unknown result type (might be due to invalid IL or missing references)
//IL_0039: Unknown result type (might be due to invalid IL or missing references)
//IL_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_004c: Unknown result type (might be due to invalid IL or missing references)
//IL_0051: Unknown result type (might be due to invalid IL or missing references)
//IL_0056: 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_005a: 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)
inputMesh = input;
outputFrontSubMeshes = new List<CuttableSubMesh>();
outputBackSubMeshes = new List<CuttableSubMesh>();
Transform transform = inputMesh.GetTransform();
Plane cutPlane = default(Plane);
if ((Object)(object)transform != (Object)null)
{
Vector3 val = transform.InverseTransformPoint(ClosestPointOnPlane(worldCutPlane, Vector3.zero));
Vector3 val2 = transform.InverseTransformDirection(((Plane)(ref worldCutPlane)).normal);
((Plane)(ref cutPlane))..ctor(val2, val);
}
else
{
cutPlane = worldCutPlane;
}
foreach (CuttableSubMesh subMesh in input.GetSubMeshes())
{
Cut(subMesh, cutPlane);
}
}
private static Vector3 ClosestPointOnPlane(Plane plane, Vector3 point)
{
//IL_0003: Unknown result type (might be due to invalid IL or missing references)
//IL_000c: Unknown result type (might be due to invalid IL or missing references)
//IL_0032: 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_003b: Unknown result type (might be due to invalid IL or missing references)
//IL_0040: Unknown result type (might be due to invalid IL or missing references)
//IL_0045: Unknown result type (might be due to invalid IL or missing references)
//IL_0018: 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_0021: Unknown result type (might be due to invalid IL or missing references)
//IL_0026: Unknown result type (might be due to invalid IL or missing references)
//IL_002b: Unknown result type (might be due to invalid IL or missing references)
//IL_004b: Unknown result type (might be due to invalid IL or missing references)
float distanceToPoint = ((Plane)(ref plane)).GetDistanceToPoint(point);
if (((Plane)(ref plane)).GetSide(point))
{
return point - ((Plane)(ref plane)).normal * distanceToPoint;
}
return point + ((Plane)(ref plane)).normal * distanceToPoint;
}
public CuttableMesh GetFrontOutput()
{
return new CuttableMesh(inputMesh, outputFrontSubMeshes);
}
public CuttableMesh GetBackOutput()
{
return new CuttableMesh(inputMesh, outputBackSubMeshes);
}
private void Cut(CuttableSubMesh inputSubMesh, Plane cutPlane)
{
//IL_004f: Unknown result type (might be due to invalid IL or missing references)
//IL_0054: Unknown result type (might be due to invalid IL or missing references)
//IL_0059: Unknown result type (might be due to invalid IL or missing references)
//IL_005e: Unknown result type (might be due to invalid IL or missing references)
//IL_0063: Unknown result type (might be due to invalid IL or missing references)
//IL_0068: Unknown result type (might be due to invalid IL or missing references)
//IL_006b: 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_0076: Unknown result type (might be due to invalid IL or missing references)
//IL_0078: Unknown result type (might be due to invalid IL or missing references)
//IL_0081: 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_0121: 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_015b: 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_02be: Unknown result type (might be due to invalid IL or missing references)
//IL_02c0: Unknown result type (might be due to invalid IL or missing references)
//IL_02c2: Unknown result type (might be due to invalid IL or missing references)
//IL_02c7: Unknown result type (might be due to invalid IL or missing references)
//IL_02c9: Unknown result type (might be due to invalid IL or missing references)
//IL_02cb: Unknown result type (might be due to invalid IL or missing references)
//IL_02cd: Unknown result type (might be due to invalid IL or missing references)
//IL_02d2: Unknown result type (might be due to invalid IL or missing references)
//IL_02d4: Unknown result type (might be due to invalid IL or missing references)
//IL_02d6: Unknown result type (might be due to invalid IL or missing references)
//IL_02d8: Unknown result type (might be due to invalid IL or missing references)
//IL_02dd: Unknown result type (might be due to invalid IL or missing references)
//IL_02df: Unknown result type (might be due to invalid IL or missing references)
//IL_02e3: Unknown result type (might be due to invalid IL or missing references)
//IL_01c8: 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_021d: Unknown result type (might be due to invalid IL or missing references)
//IL_0204: Unknown result type (might be due to invalid IL or missing references)
//IL_029d: Unknown result type (might be due to invalid IL or missing references)
//IL_0284: Unknown result type (might be due to invalid IL or missing references)
//IL_0261: Unknown result type (might be due to invalid IL or missing references)
//IL_0248: Unknown result type (might be due to invalid IL or missing references)
bool hasNormals = inputSubMesh.HasNormals();
bool hasColours = inputSubMesh.HasColours();
bool hasUvs = inputSubMesh.HasUvs();
bool hasUv = inputSubMesh.HasUv1();
CuttableSubMesh cuttableSubMesh = new CuttableSubMesh(hasNormals, hasColours, hasUvs, hasUv);
CuttableSubMesh cuttableSubMesh2 = new CuttableSubMesh(hasNormals, hasColours, hasUvs, hasUv);
for (int i = 0; i < inputSubMesh.NumVertices(); i += 3)
{
int num = i;
int num2 = i + 1;
int num3 = i + 2;
Vector3 vertex = inputSubMesh.GetVertex(num);
Vector3 vertex2 = inputSubMesh.GetVertex(num2);
Vector3 vertex3 = inputSubMesh.GetVertex(num3);
VertexClassification vertexClassification = Classify(vertex, cutPlane);
VertexClassification vertexClassification2 = Classify(vertex2, cutPlane);
VertexClassification vertexClassification3 = Classify(vertex3, cutPlane);
int numFront = 0;
int numBehind = 0;
CountSides(vertexClassification, ref numFront, ref numBehind);
CountSides(vertexClassification2, ref numFront, ref numBehind);
CountSides(vertexClassification3, ref numFront, ref numBehind);
if (numFront > 0 && numBehind == 0)
{
KeepTriangle(num, num2, num3, inputSubMesh, cuttableSubMesh);
}
else if (numFront == 0 && numBehind > 0)
{
KeepTriangle(num, num2, num3, inputSubMesh, cuttableSubMesh2);
}
else if (numFront == 2 && numBehind == 1)
{
if (vertexClassification == VertexClassification.Back)
{
SplitA(num, num2, num3, inputSubMesh, cutPlane, cuttableSubMesh2, cuttableSubMesh);
}
else if (vertexClassification2 == VertexClassification.Back)
{
SplitA(num2, num3, num, inputSubMesh, cutPlane, cuttableSubMesh2, cuttableSubMesh);
}
else
{
SplitA(num3, num, num2, inputSubMesh, cutPlane, cuttableSubMesh2, cuttableSubMesh);
}
}
else if (numFront == 1 && numBehind == 2)
{
if (vertexClassification == VertexClassification.Front)
{
SplitA(num, num2, num3, inputSubMesh, cutPlane, cuttableSubMesh, cuttableSubMesh2);
}
else if (vertexClassification2 == VertexClassification.Front)
{
SplitA(num2, num3, num, inputSubMesh, cutPlane, cuttableSubMesh, cuttableSubMesh2);
}
else
{
SplitA(num3, num, num2, inputSubMesh, cutPlane, cuttableSubMesh, cuttableSubMesh2);
}
}
else if (numFront == 1 && numBehind == 1)
{
if (vertexClassification == VertexClassification.OnPlane)
{
if (vertexClassification3 == VertexClassification.Front)
{
SplitB(num3, num, num2, inputSubMesh, cutPlane, cuttableSubMesh, cuttableSubMesh2);
}
else
{
SplitBFlipped(num2, num3, num, inputSubMesh, cutPlane, cuttableSubMesh, cuttableSubMesh2);
}
continue;
}
switch (vertexClassification2)
{
case VertexClassification.OnPlane:
if (vertexClassification == VertexClassification.Front)
{
SplitB(num, num2, num3, inputSubMesh, cutPlane, cuttableSubMesh, cuttableSubMesh2);
}
else
{
SplitBFlipped(num3, num, num2, inputSubMesh, cutPlane, cuttableSubMesh, cuttableSubMesh2);
}
break;
case VertexClassification.Front:
SplitB(num2, num3, num, inputSubMesh, cutPlane, cuttableSubMesh, cuttableSubMesh2);
break;
default:
SplitBFlipped(num, num2, num3, inputSubMesh, cutPlane, cuttableSubMesh, cuttableSubMesh2);
break;
}
}
else if (numFront == 0 && numBehind == 0)
{
Vector3 val = vertex2 - vertex;
Vector3 val2 = vertex3 - vertex;
Vector3 val3 = Vector3.Cross(val, val2);
if (Vector3.Dot(val3, ((Plane)(ref cutPlane)).normal) > 0f)
{
KeepTriangle(num, num2, num3, inputSubMesh, cuttableSubMesh2);
}
else
{
KeepTriangle(num, num2, num3, inputSubMesh, cuttableSubMesh);
}
}
}
outputFrontSubMeshes.Add(cuttableSubMesh);
outputBackSubMeshes.Add(cuttableSubMesh2);
}
private VertexClassification Classify(Vector3 vertex, Plane cutPlane)
{
//IL_0022: Unknown result type (might be due to invalid IL or missing references)
Vector3 val = default(Vector3);
((Vector3)(ref val))..ctor(vertex.x, vertex.y, vertex.z);
float distanceToPoint = ((Plane)(ref cutPlane)).GetDistanceToPoint(val);
double num = 9.999999747378752E-06;
if ((double)distanceToPoint > 0.0 - num && (double)distanceToPoint < num)
{
return VertexClassification.OnPlane;
}
if (distanceToPoint > 0f)
{
return VertexClassification.Front;
}
return VertexClassification.Back;
}
private void CountSides(VertexClassification c, ref int numFront, ref int numBehind)
{
switch (c)
{
case VertexClassification.Front:
numFront++;
break;
case VertexClassification.Back:
numBehind++;
break;
}
}
private void KeepTriangle(int i0, int i1, int i2, CuttableSubMesh inputSubMesh, CuttableSubMesh destSubMesh)
{
destSubMesh.CopyVertex(i0, inputSubMesh);
destSubMesh.CopyVertex(i1, inputSubMesh);
destSubMesh.CopyVertex(i2, inputSubMesh);
}
private void SplitA(int i0, int i1, int i2, CuttableSubMesh inputSubMesh, Plane cutPlane, CuttableSubMesh frontSubMesh, CuttableSubMesh backSubMesh)
{
//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_000d: Unknown result type (might be due to invalid IL or missing references)
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
//IL_0016: 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_001d: Unknown result type (might be due to invalid IL or missing references)
//IL_001e: Unknown result type (might be due to invalid IL or missing references)
//IL_001f: Unknown result type (might be due to invalid IL or missing references)
//IL_0023: Unknown result type (might be due to invalid IL or missing references)
//IL_002a: Unknown result type (might be due to invalid IL or missing references)
//IL_002b: Unknown result type (might be due to invalid IL or missing references)
//IL_002c: Unknown result type (might be due to invalid IL or missing references)
//IL_0030: Unknown result type (might be due to invalid IL or missing references)
Vector3 vertex = inputSubMesh.GetVertex(i0);
Vector3 vertex2 = inputSubMesh.GetVertex(i1);
Vector3 vertex3 = inputSubMesh.GetVertex(i2);
CalcIntersection(vertex, vertex2, cutPlane, out var weight);
CalcIntersection(vertex3, vertex, cutPlane, out var weight2);
frontSubMesh.CopyVertex(i0, inputSubMesh);
frontSubMesh.AddInterpolatedVertex(i0, i1, weight, inputSubMesh);
frontSubMesh.AddInterpolatedVertex(i2, i0, weight2, inputSubMesh);
backSubMesh.AddInterpolatedVertex(i0, i1, weight, inputSubMesh);
backSubMesh.CopyVertex(i1, inputSubMesh);
backSubMesh.CopyVertex(i2, inputSubMesh);
backSubMesh.CopyVertex(i2, inputSubMesh);
backSubMesh.AddInterpolatedVertex(i2, i0, weight2, inputSubMesh);
backSubMesh.AddInterpolatedVertex(i0, i1, weight, inputSubMesh);
}
private void SplitB(int i0, int i1, int i2, CuttableSubMesh inputSubMesh, Plane cutPlane, CuttableSubMesh frontSubMesh, CuttableSubMesh backSubMesh)
{
//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_000d: Unknown result type (might be due to invalid IL or missing references)
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
//IL_0014: 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_0016: Unknown result type (might be due to invalid IL or missing references)
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
Vector3 vertex = inputSubMesh.GetVertex(i0);
Vector3 vertex2 = inputSubMesh.GetVertex(i2);
CalcIntersection(vertex2, vertex, cutPlane, out var weight);
frontSubMesh.CopyVertex(i0, inputSubMesh);
frontSubMesh.CopyVertex(i1, inputSubMesh);
frontSubMesh.AddInterpolatedVertex(i2, i0, weight, inputSubMesh);
backSubMesh.CopyVertex(i1, inputSubMesh);
backSubMesh.CopyVertex(i2, inputSubMesh);
backSubMesh.AddInterpolatedVertex(i2, i0, weight, inputSubMesh);
}
private void SplitBFlipped(int i0, int i1, int i2, CuttableSubMesh inputSubMesh, Plane cutPlane, CuttableSubMesh frontSubMesh, CuttableSubMesh backSubMesh)
{
//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_000d: Unknown result type (might be due to invalid IL or missing references)
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
//IL_0014: 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_0016: Unknown result type (might be due to invalid IL or missing references)
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
Vector3 vertex = inputSubMesh.GetVertex(i0);
Vector3 vertex2 = inputSubMesh.GetVertex(i1);
CalcIntersection(vertex, vertex2, cutPlane, out var weight);
frontSubMesh.CopyVertex(i0, inputSubMesh);
frontSubMesh.AddInterpolatedVertex(i0, i1, weight, inputSubMesh);
frontSubMesh.CopyVertex(i2, inputSubMesh);
backSubMesh.CopyVertex(i1, inputSubMesh);
backSubMesh.CopyVertex(i2, inputSubMesh);
backSubMesh.AddInterpolatedVertex(i0, i1, weight, inputSubMesh);
}
private Vector3 CalcIntersection(Vector3 v0, Vector3 v1, Plane plane, out float weight)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0003: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: 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_0014: 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_0022: 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_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_0044: Unknown result type (might be due to invalid IL or missing references)
//IL_004c: Unknown result type (might be due to invalid IL or missing references)
//IL_004e: 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)
Vector3 val = v1 - v0;
float magnitude = ((Vector3)(ref val)).magnitude;
Ray val2 = default(Ray);
((Ray)(ref val2))..ctor(v0, val / magnitude);
float num = default(float);
((Plane)(ref plane)).Raycast(val2, ref num);
Vector3 result = ((Ray)(ref val2)).origin + ((Ray)(ref val2)).direction * num;
weight = num / magnitude;
return result;
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Logging;
using FistVR;
using HarmonyLib;
using OtherLoader;
using UnityEngine;
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("0.0.0.0")]
[module: UnverifiableCode]
namespace SkyHighPurchase.Skye_SosigSanta;
[BepInPlugin("SkyHighPurchase.Skye_SosigSanta", "Skye_SosigSanta", "1.0.0")]
[BepInProcess("h3vr.exe")]
[Description("Built with MeatKit")]
[BepInDependency("h3vr.otherloader", "1.3.0")]
public class Skye_SosigSantaPlugin : BaseUnityPlugin
{
private static readonly string BasePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
internal static ManualLogSource Logger;
private void Awake()
{
Logger = ((BaseUnityPlugin)this).Logger;
LoadAssets();
}
private void LoadAssets()
{
Harmony.CreateAndPatchAll(Assembly.GetExecutingAssembly(), "SkyHighPurchase.Skye_SosigSanta");
OtherLoader.RegisterDirectLoad(BasePath, "SkyHighPurchase.Skye_SosigSanta", "", "", "skye_sosigsanta_wearables", "");
}
}
public class PatchChanger : MonoBehaviour
{
public int materialIndexToChange = 0;
public Material[] newMaterials;
private void Start()
{
if (newMaterials == null)
{
Debug.LogError((object)"New Material is not assigned!");
}
else
{
ChangeSpecificMaterial();
}
}
private void ChangeSpecificMaterial()
{
Renderer component = ((Component)this).GetComponent<Renderer>();
if ((Object)(object)component == (Object)null)
{
Debug.LogError((object)"Renderer component not found on this GameObject.");
return;
}
Material[] materials = component.materials;
if (materialIndexToChange >= 0 && materialIndexToChange < materials.Length)
{
materials[materialIndexToChange] = newMaterials[Random.Range(0, newMaterials.Length)];
component.materials = materials;
Debug.Log((object)("Material at index " + materialIndexToChange + " changed successfully."));
return;
}
Debug.LogError((object)("Invalid material index: " + materialIndexToChange + ". The mesh has " + materials.Length + " materials."));
}
}
public class DSC_ChangeOnHeld : MonoBehaviour
{
public string[] primaryIDs;
public GameObject[] primaryGameObjects;
public bool checkPrimary;
public string[] secondaryIDs;
public GameObject[] secondaryGameObjects;
public bool checkSecondary;
private Dictionary<string, GameObject> primaryIDToGameObjectMap;
private Dictionary<string, GameObject> secondaryIDToGameObjectMap;
private Sosig mysosig;
private GameObject recentPrimaryObject;
private string recentPrimaryID;
private GameObject recentSecondaryObject;
private string recentSecondaryID;
public void Start()
{
if (checkPrimary)
{
primaryIDToGameObjectMap = new Dictionary<string, GameObject>();
for (int i = 0; i < primaryIDs.Length; i++)
{
if (i < primaryGameObjects.Length)
{
primaryIDToGameObjectMap[primaryIDs[i]] = primaryGameObjects[i];
}
}
}
if (checkSecondary)
{
secondaryIDToGameObjectMap = new Dictionary<string, GameObject>();
for (int j = 0; j < secondaryIDs.Length; j++)
{
if (j < secondaryGameObjects.Length)
{
secondaryIDToGameObjectMap[secondaryIDs[j]] = secondaryGameObjects[j];
}
}
}
mysosig = ((Component)this).GetComponent<SosigWearable>().S;
}
public void Update()
{
if (checkPrimary && (Object)(object)mysosig != (Object)null)
{
SosigHand hand_Primary = mysosig.Hand_Primary;
if (hand_Primary != null && (Object)(object)hand_Primary.HeldObject != (Object)null && (Object)(object)hand_Primary.HeldObject.O != (Object)null && (Object)(object)hand_Primary.HeldObject.O.ObjectWrapper != (Object)null)
{
string itemID = hand_Primary.HeldObject.O.ObjectWrapper.ItemID;
if (itemID != null && itemID != recentPrimaryID)
{
UpdatePrimary(itemID);
}
}
}
if (!checkSecondary || !((Object)(object)mysosig != (Object)null))
{
return;
}
SosigHand hand_Secondary = mysosig.Hand_Secondary;
if (hand_Secondary != null && (Object)(object)hand_Secondary.HeldObject != (Object)null && (Object)(object)hand_Secondary.HeldObject.O != (Object)null && (Object)(object)hand_Secondary.HeldObject.O.ObjectWrapper != (Object)null)
{
string itemID2 = hand_Secondary.HeldObject.O.ObjectWrapper.ItemID;
if (itemID2 != null && itemID2 != recentSecondaryID)
{
UpdateSecondary(itemID2);
}
}
}
public void UpdatePrimary(string input)
{
if (primaryIDToGameObjectMap.TryGetValue(input, out var value))
{
if ((Object)(object)recentPrimaryObject != (Object)null)
{
recentPrimaryObject.SetActive(false);
}
value.SetActive(true);
recentPrimaryObject = value;
recentPrimaryID = input;
}
}
public void UpdateSecondary(string input)
{
if (secondaryIDToGameObjectMap.TryGetValue(input, out var value))
{
if ((Object)(object)recentSecondaryObject != (Object)null)
{
recentSecondaryObject.SetActive(false);
}
value.SetActive(true);
recentSecondaryObject = value;
recentSecondaryID = input;
}
}
}
public class CuttableMesh
{
private MeshRenderer inputMeshRenderer;
private bool hasUvs;
private bool hasUv1s;
private bool hasColours;
private List<CuttableSubMesh> subMeshes;
public CuttableMesh(Mesh inputMesh)
{
Init(inputMesh, ((Object)inputMesh).name);
}
public CuttableMesh(MeshRenderer input)
{
inputMeshRenderer = input;
MeshFilter component = ((Component)input).GetComponent<MeshFilter>();
Mesh sharedMesh = component.sharedMesh;
Init(sharedMesh, ((Object)input).name);
}
public CuttableMesh(CuttableMesh inputMesh, List<CuttableSubMesh> newSubMeshes)
{
inputMeshRenderer = inputMesh.inputMeshRenderer;
hasUvs = inputMesh.hasUvs;
hasUv1s = inputMesh.hasUv1s;
hasColours = inputMesh.hasColours;
subMeshes = new List<CuttableSubMesh>();
subMeshes.AddRange(newSubMeshes);
}
private void Init(Mesh inputMesh, string debugName)
{
subMeshes = new List<CuttableSubMesh>();
if (inputMesh.isReadable)
{
Vector3[] vertices = inputMesh.vertices;
Vector3[] normals = inputMesh.normals;
Vector2[] uv = inputMesh.uv;
Vector2[] uv2 = inputMesh.uv2;
Color32[] colors = inputMesh.colors32;
hasUvs = uv != null && uv.Length > 0;
hasUv1s = uv2 != null && uv2.Length > 0;
hasColours = colors != null && colors.Length > 0;
for (int i = 0; i < inputMesh.subMeshCount; i++)
{
int[] indices = inputMesh.GetIndices(i);
CuttableSubMesh item = new CuttableSubMesh(indices, vertices, normals, colors, uv, uv2);
subMeshes.Add(item);
}
}
else
{
Debug.LogError((object)("CuttableMesh's input mesh is not readable: " + debugName), (Object)(object)inputMesh);
}
}
public void Add(CuttableMesh other)
{
if (subMeshes.Count != other.subMeshes.Count)
{
throw new Exception("Mismatched submesh count");
}
for (int i = 0; i < subMeshes.Count; i++)
{
subMeshes[i].Add(other.subMeshes[i]);
}
}
public int NumSubMeshes()
{
return subMeshes.Count;
}
public bool HasUvs()
{
return hasUvs;
}
public bool HasColours()
{
return hasColours;
}
public List<CuttableSubMesh> GetSubMeshes()
{
return subMeshes;
}
public CuttableSubMesh GetSubMesh(int index)
{
return subMeshes[index];
}
public Transform GetTransform()
{
if ((Object)(object)inputMeshRenderer != (Object)null)
{
return ((Component)inputMeshRenderer).transform;
}
return null;
}
public MeshRenderer ConvertToRenderer(string newObjectName)
{
//IL_001b: Unknown result type (might be due to invalid IL or missing references)
//IL_0021: Expected O, but got Unknown
//IL_003d: Unknown result type (might be due to invalid IL or missing references)
//IL_004d: Unknown result type (might be due to invalid IL or missing references)
//IL_005d: 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_0097: 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)
Mesh val = CreateMesh();
if (val.vertexCount == 0)
{
return null;
}
GameObject val2 = new GameObject(newObjectName);
val2.transform.SetParent(((Component)inputMeshRenderer).transform);
val2.transform.localPosition = Vector3.zero;
val2.transform.localRotation = Quaternion.identity;
val2.transform.localScale = Vector3.one;
MeshFilter val3 = val2.AddComponent<MeshFilter>();
val3.mesh = val;
MeshRenderer val4 = val2.AddComponent<MeshRenderer>();
((Renderer)val4).shadowCastingMode = ((Renderer)inputMeshRenderer).shadowCastingMode;
((Renderer)val4).reflectionProbeUsage = ((Renderer)inputMeshRenderer).reflectionProbeUsage;
((Renderer)val4).lightProbeUsage = ((Renderer)inputMeshRenderer).lightProbeUsage;
((Renderer)val4).sharedMaterials = ((Renderer)inputMeshRenderer).sharedMaterials;
return val4;
}
public Mesh CreateMesh()
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Expected O, but got Unknown
Mesh val = new Mesh();
int num = 0;
for (int i = 0; i < subMeshes.Count; i++)
{
num += subMeshes[i].NumIndices();
}
List<Vector3> list = new List<Vector3>();
List<Vector3> list2 = new List<Vector3>();
List<Color32> list3 = ((!hasColours) ? null : new List<Color32>());
List<Vector2> list4 = ((!hasUvs) ? null : new List<Vector2>());
List<Vector2> list5 = ((!hasUv1s) ? null : new List<Vector2>());
List<int> list6 = new List<int>();
foreach (CuttableSubMesh subMesh in subMeshes)
{
list6.Add(list.Count);
subMesh.AddTo(list, list2, list3, list4, list5);
}
val.vertices = list.ToArray();
val.normals = list2.ToArray();
val.colors32 = ((!hasColours) ? null : list3.ToArray());
val.uv = ((!hasUvs) ? null : list4.ToArray());
val.uv2 = ((!hasUv1s) ? null : list5.ToArray());
val.subMeshCount = subMeshes.Count;
for (int j = 0; j < subMeshes.Count; j++)
{
CuttableSubMesh cuttableSubMesh = subMeshes[j];
int num2 = list6[j];
int[] array = cuttableSubMesh.GenIndices();
for (int k = 0; k < array.Length; k++)
{
array[k] += num2;
}
val.SetTriangles(array, j, true);
}
return val;
}
}
public class CuttableSubMesh
{
private List<Vector3> vertices;
private List<Vector3> normals;
private List<Color32> colours;
private List<Vector2> uvs;
private List<Vector2> uv1s;
public CuttableSubMesh(bool hasNormals, bool hasColours, bool hasUvs, bool hasUv1)
{
vertices = new List<Vector3>();
if (hasNormals)
{
normals = new List<Vector3>();
}
if (hasColours)
{
colours = new List<Color32>();
}
if (hasUvs)
{
uvs = new List<Vector2>();
}
if (hasUv1)
{
uv1s = new List<Vector2>();
}
}
public CuttableSubMesh(int[] indices, Vector3[] inputVertices, Vector3[] inputNormals, Color32[] inputColours, Vector2[] inputUvs, Vector2[] inputUv1)
{
//IL_0099: Unknown result type (might be due to invalid IL or missing references)
//IL_00bb: Unknown result type (might be due to invalid IL or missing references)
//IL_00de: 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_0124: Unknown result type (might be due to invalid IL or missing references)
vertices = new List<Vector3>();
if (inputNormals != null && inputNormals.Length > 0)
{
normals = new List<Vector3>();
}
if (inputColours != null && inputColours.Length > 0)
{
colours = new List<Color32>();
}
if (inputUvs != null && inputUvs.Length > 0)
{
uvs = new List<Vector2>();
}
if (inputUv1 != null && inputUv1.Length > 0)
{
uv1s = new List<Vector2>();
}
foreach (int num in indices)
{
vertices.Add(inputVertices[num]);
if (normals != null)
{
normals.Add(inputNormals[num]);
}
if (colours != null)
{
colours.Add(inputColours[num]);
}
if (uvs != null)
{
uvs.Add(inputUvs[num]);
}
if (uv1s != null)
{
uv1s.Add(inputUv1[num]);
}
}
}
public void Add(CuttableSubMesh other)
{
for (int i = 0; i < other.vertices.Count; i++)
{
CopyVertex(i, other);
}
}
public int NumVertices()
{
return vertices.Count;
}
public Vector3 GetVertex(int index)
{
//IL_0008: 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)
return vertices[index];
}
public bool HasNormals()
{
return normals != null;
}
public bool HasColours()
{
return colours != null;
}
public bool HasUvs()
{
return uvs != null;
}
public bool HasUv1()
{
return uv1s != null;
}
public void CopyVertex(int srcIndex, CuttableSubMesh srcMesh)
{
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
//IL_0030: Unknown result type (might be due to invalid IL or missing references)
//IL_0052: 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_0096: Unknown result type (might be due to invalid IL or missing references)
vertices.Add(srcMesh.vertices[srcIndex]);
if (normals != null)
{
normals.Add(srcMesh.normals[srcIndex]);
}
if (colours != null)
{
colours.Add(srcMesh.colours[srcIndex]);
}
if (uvs != null)
{
uvs.Add(srcMesh.uvs[srcIndex]);
}
if (uv1s != null)
{
uv1s.Add(srcMesh.uv1s[srcIndex]);
}
}
public void AddInterpolatedVertex(int i0, int i1, float weight, CuttableSubMesh srcMesh)
{
//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_000d: Unknown result type (might be due to invalid IL or missing references)
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
//IL_0019: Unknown result type (might be due to invalid IL or missing references)
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
//IL_001c: 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_004c: Unknown result type (might be due to invalid IL or missing references)
//IL_0052: Unknown result type (might be due to invalid IL or missing references)
//IL_0057: Unknown result type (might be due to invalid IL or missing references)
//IL_005a: Unknown result type (might be due to invalid IL or missing references)
//IL_007d: Unknown result type (might be due to invalid IL or missing references)
//IL_008a: Unknown result type (might be due to invalid IL or missing references)
//IL_0090: Unknown result type (might be due to invalid IL or missing references)
//IL_00b3: 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_00c6: Unknown result type (might be due to invalid IL or missing references)
//IL_00e9: Unknown result type (might be due to invalid IL or missing references)
//IL_00f6: Unknown result type (might be due to invalid IL or missing references)
//IL_00fc: Unknown result type (might be due to invalid IL or missing references)
Vector3 vertex = srcMesh.GetVertex(i0);
Vector3 vertex2 = srcMesh.GetVertex(i1);
vertices.Add(Vector3.Lerp(vertex, vertex2, weight));
if (normals != null)
{
List<Vector3> list = normals;
Vector3 val = Vector3.Lerp(srcMesh.normals[i0], srcMesh.normals[i1], weight);
list.Add(((Vector3)(ref val)).normalized);
}
if (colours != null)
{
colours.Add(Color32.Lerp(srcMesh.colours[i0], srcMesh.colours[i1], weight));
}
if (uvs != null)
{
uvs.Add(Vector2.Lerp(srcMesh.uvs[i0], srcMesh.uvs[i1], weight));
}
if (uv1s != null)
{
uv1s.Add(Vector2.Lerp(srcMesh.uv1s[i0], srcMesh.uv1s[i1], weight));
}
}
public void AddTo(List<Vector3> destVertices, List<Vector3> destNormals, List<Color32> destColours, List<Vector2> destUvs, List<Vector2> destUv1s)
{
destVertices.AddRange(vertices);
if (normals != null)
{
destNormals.AddRange(normals);
}
if (colours != null)
{
destColours.AddRange(colours);
}
if (uvs != null)
{
destUvs.AddRange(uvs);
}
if (uv1s != null)
{
destUv1s.AddRange(uv1s);
}
}
public int NumIndices()
{
return vertices.Count;
}
public int[] GenIndices()
{
int[] array = new int[vertices.Count];
for (int i = 0; i < array.Length; i++)
{
array[i] = i;
}
return array;
}
}
public enum VertexClassification
{
Front = 1,
Back = 2,
OnPlane = 4
}
public class MeshCutter
{
private CuttableMesh inputMesh;
private List<CuttableSubMesh> outputFrontSubMeshes;
private List<CuttableSubMesh> outputBackSubMeshes;
public void Cut(CuttableMesh input, Plane worldCutPlane)
{
//IL_0067: 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_0038: Unknown result type (might be due to invalid IL or missing references)
//IL_0039: Unknown result type (might be due to invalid IL or missing references)
//IL_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_004c: Unknown result type (might be due to invalid IL or missing references)
//IL_0051: Unknown result type (might be due to invalid IL or missing references)
//IL_0056: 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_005a: 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)
inputMesh = input;
outputFrontSubMeshes = new List<CuttableSubMesh>();
outputBackSubMeshes = new List<CuttableSubMesh>();
Transform transform = inputMesh.GetTransform();
Plane cutPlane = default(Plane);
if ((Object)(object)transform != (Object)null)
{
Vector3 val = transform.InverseTransformPoint(ClosestPointOnPlane(worldCutPlane, Vector3.zero));
Vector3 val2 = transform.InverseTransformDirection(((Plane)(ref worldCutPlane)).normal);
((Plane)(ref cutPlane))..ctor(val2, val);
}
else
{
cutPlane = worldCutPlane;
}
foreach (CuttableSubMesh subMesh in input.GetSubMeshes())
{
Cut(subMesh, cutPlane);
}
}
private static Vector3 ClosestPointOnPlane(Plane plane, Vector3 point)
{
//IL_0003: Unknown result type (might be due to invalid IL or missing references)
//IL_000c: Unknown result type (might be due to invalid IL or missing references)
//IL_0032: 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_003b: Unknown result type (might be due to invalid IL or missing references)
//IL_0040: Unknown result type (might be due to invalid IL or missing references)
//IL_0045: Unknown result type (might be due to invalid IL or missing references)
//IL_0018: 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_0021: Unknown result type (might be due to invalid IL or missing references)
//IL_0026: Unknown result type (might be due to invalid IL or missing references)
//IL_002b: Unknown result type (might be due to invalid IL or missing references)
//IL_004b: Unknown result type (might be due to invalid IL or missing references)
float distanceToPoint = ((Plane)(ref plane)).GetDistanceToPoint(point);
if (((Plane)(ref plane)).GetSide(point))
{
return point - ((Plane)(ref plane)).normal * distanceToPoint;
}
return point + ((Plane)(ref plane)).normal * distanceToPoint;
}
public CuttableMesh GetFrontOutput()
{
return new CuttableMesh(inputMesh, outputFrontSubMeshes);
}
public CuttableMesh GetBackOutput()
{
return new CuttableMesh(inputMesh, outputBackSubMeshes);
}
private void Cut(CuttableSubMesh inputSubMesh, Plane cutPlane)
{
//IL_004f: Unknown result type (might be due to invalid IL or missing references)
//IL_0054: Unknown result type (might be due to invalid IL or missing references)
//IL_0059: Unknown result type (might be due to invalid IL or missing references)
//IL_005e: Unknown result type (might be due to invalid IL or missing references)
//IL_0063: Unknown result type (might be due to invalid IL or missing references)
//IL_0068: Unknown result type (might be due to invalid IL or missing references)
//IL_006b: 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_0076: Unknown result type (might be due to invalid IL or missing references)
//IL_0078: Unknown result type (might be due to invalid IL or missing references)
//IL_0081: 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_0121: 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_015b: 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_02be: Unknown result type (might be due to invalid IL or missing references)
//IL_02c0: Unknown result type (might be due to invalid IL or missing references)
//IL_02c2: Unknown result type (might be due to invalid IL or missing references)
//IL_02c7: Unknown result type (might be due to invalid IL or missing references)
//IL_02c9: Unknown result type (might be due to invalid IL or missing references)
//IL_02cb: Unknown result type (might be due to invalid IL or missing references)
//IL_02cd: Unknown result type (might be due to invalid IL or missing references)
//IL_02d2: Unknown result type (might be due to invalid IL or missing references)
//IL_02d4: Unknown result type (might be due to invalid IL or missing references)
//IL_02d6: Unknown result type (might be due to invalid IL or missing references)
//IL_02d8: Unknown result type (might be due to invalid IL or missing references)
//IL_02dd: Unknown result type (might be due to invalid IL or missing references)
//IL_02df: Unknown result type (might be due to invalid IL or missing references)
//IL_02e3: Unknown result type (might be due to invalid IL or missing references)
//IL_01c8: 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_021d: Unknown result type (might be due to invalid IL or missing references)
//IL_0204: Unknown result type (might be due to invalid IL or missing references)
//IL_029d: Unknown result type (might be due to invalid IL or missing references)
//IL_0284: Unknown result type (might be due to invalid IL or missing references)
//IL_0261: Unknown result type (might be due to invalid IL or missing references)
//IL_0248: Unknown result type (might be due to invalid IL or missing references)
bool hasNormals = inputSubMesh.HasNormals();
bool hasColours = inputSubMesh.HasColours();
bool hasUvs = inputSubMesh.HasUvs();
bool hasUv = inputSubMesh.HasUv1();
CuttableSubMesh cuttableSubMesh = new CuttableSubMesh(hasNormals, hasColours, hasUvs, hasUv);
CuttableSubMesh cuttableSubMesh2 = new CuttableSubMesh(hasNormals, hasColours, hasUvs, hasUv);
for (int i = 0; i < inputSubMesh.NumVertices(); i += 3)
{
int num = i;
int num2 = i + 1;
int num3 = i + 2;
Vector3 vertex = inputSubMesh.GetVertex(num);
Vector3 vertex2 = inputSubMesh.GetVertex(num2);
Vector3 vertex3 = inputSubMesh.GetVertex(num3);
VertexClassification vertexClassification = Classify(vertex, cutPlane);
VertexClassification vertexClassification2 = Classify(vertex2, cutPlane);
VertexClassification vertexClassification3 = Classify(vertex3, cutPlane);
int numFront = 0;
int numBehind = 0;
CountSides(vertexClassification, ref numFront, ref numBehind);
CountSides(vertexClassification2, ref numFront, ref numBehind);
CountSides(vertexClassification3, ref numFront, ref numBehind);
if (numFront > 0 && numBehind == 0)
{
KeepTriangle(num, num2, num3, inputSubMesh, cuttableSubMesh);
}
else if (numFront == 0 && numBehind > 0)
{
KeepTriangle(num, num2, num3, inputSubMesh, cuttableSubMesh2);
}
else if (numFront == 2 && numBehind == 1)
{
if (vertexClassification == VertexClassification.Back)
{
SplitA(num, num2, num3, inputSubMesh, cutPlane, cuttableSubMesh2, cuttableSubMesh);
}
else if (vertexClassification2 == VertexClassification.Back)
{
SplitA(num2, num3, num, inputSubMesh, cutPlane, cuttableSubMesh2, cuttableSubMesh);
}
else
{
SplitA(num3, num, num2, inputSubMesh, cutPlane, cuttableSubMesh2, cuttableSubMesh);
}
}
else if (numFront == 1 && numBehind == 2)
{
if (vertexClassification == VertexClassification.Front)
{
SplitA(num, num2, num3, inputSubMesh, cutPlane, cuttableSubMesh, cuttableSubMesh2);
}
else if (vertexClassification2 == VertexClassification.Front)
{
SplitA(num2, num3, num, inputSubMesh, cutPlane, cuttableSubMesh, cuttableSubMesh2);
}
else
{
SplitA(num3, num, num2, inputSubMesh, cutPlane, cuttableSubMesh, cuttableSubMesh2);
}
}
else if (numFront == 1 && numBehind == 1)
{
if (vertexClassification == VertexClassification.OnPlane)
{
if (vertexClassification3 == VertexClassification.Front)
{
SplitB(num3, num, num2, inputSubMesh, cutPlane, cuttableSubMesh, cuttableSubMesh2);
}
else
{
SplitBFlipped(num2, num3, num, inputSubMesh, cutPlane, cuttableSubMesh, cuttableSubMesh2);
}
continue;
}
switch (vertexClassification2)
{
case VertexClassification.OnPlane:
if (vertexClassification == VertexClassification.Front)
{
SplitB(num, num2, num3, inputSubMesh, cutPlane, cuttableSubMesh, cuttableSubMesh2);
}
else
{
SplitBFlipped(num3, num, num2, inputSubMesh, cutPlane, cuttableSubMesh, cuttableSubMesh2);
}
break;
case VertexClassification.Front:
SplitB(num2, num3, num, inputSubMesh, cutPlane, cuttableSubMesh, cuttableSubMesh2);
break;
default:
SplitBFlipped(num, num2, num3, inputSubMesh, cutPlane, cuttableSubMesh, cuttableSubMesh2);
break;
}
}
else if (numFront == 0 && numBehind == 0)
{
Vector3 val = vertex2 - vertex;
Vector3 val2 = vertex3 - vertex;
Vector3 val3 = Vector3.Cross(val, val2);
if (Vector3.Dot(val3, ((Plane)(ref cutPlane)).normal) > 0f)
{
KeepTriangle(num, num2, num3, inputSubMesh, cuttableSubMesh2);
}
else
{
KeepTriangle(num, num2, num3, inputSubMesh, cuttableSubMesh);
}
}
}
outputFrontSubMeshes.Add(cuttableSubMesh);
outputBackSubMeshes.Add(cuttableSubMesh2);
}
private VertexClassification Classify(Vector3 vertex, Plane cutPlane)
{
//IL_0022: Unknown result type (might be due to invalid IL or missing references)
Vector3 val = default(Vector3);
((Vector3)(ref val))..ctor(vertex.x, vertex.y, vertex.z);
float distanceToPoint = ((Plane)(ref cutPlane)).GetDistanceToPoint(val);
double num = 9.999999747378752E-06;
if ((double)distanceToPoint > 0.0 - num && (double)distanceToPoint < num)
{
return VertexClassification.OnPlane;
}
if (distanceToPoint > 0f)
{
return VertexClassification.Front;
}
return VertexClassification.Back;
}
private void CountSides(VertexClassification c, ref int numFront, ref int numBehind)
{
switch (c)
{
case VertexClassification.Front:
numFront++;
break;
case VertexClassification.Back:
numBehind++;
break;
}
}
private void KeepTriangle(int i0, int i1, int i2, CuttableSubMesh inputSubMesh, CuttableSubMesh destSubMesh)
{
destSubMesh.CopyVertex(i0, inputSubMesh);
destSubMesh.CopyVertex(i1, inputSubMesh);
destSubMesh.CopyVertex(i2, inputSubMesh);
}
private void SplitA(int i0, int i1, int i2, CuttableSubMesh inputSubMesh, Plane cutPlane, CuttableSubMesh frontSubMesh, CuttableSubMesh backSubMesh)
{
//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_000d: Unknown result type (might be due to invalid IL or missing references)
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
//IL_0016: 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_001d: Unknown result type (might be due to invalid IL or missing references)
//IL_001e: Unknown result type (might be due to invalid IL or missing references)
//IL_001f: Unknown result type (might be due to invalid IL or missing references)
//IL_0023: Unknown result type (might be due to invalid IL or missing references)
//IL_002a: Unknown result type (might be due to invalid IL or missing references)
//IL_002b: Unknown result type (might be due to invalid IL or missing references)
//IL_002c: Unknown result type (might be due to invalid IL or missing references)
//IL_0030: Unknown result type (might be due to invalid IL or missing references)
Vector3 vertex = inputSubMesh.GetVertex(i0);
Vector3 vertex2 = inputSubMesh.GetVertex(i1);
Vector3 vertex3 = inputSubMesh.GetVertex(i2);
CalcIntersection(vertex, vertex2, cutPlane, out var weight);
CalcIntersection(vertex3, vertex, cutPlane, out var weight2);
frontSubMesh.CopyVertex(i0, inputSubMesh);
frontSubMesh.AddInterpolatedVertex(i0, i1, weight, inputSubMesh);
frontSubMesh.AddInterpolatedVertex(i2, i0, weight2, inputSubMesh);
backSubMesh.AddInterpolatedVertex(i0, i1, weight, inputSubMesh);
backSubMesh.CopyVertex(i1, inputSubMesh);
backSubMesh.CopyVertex(i2, inputSubMesh);
backSubMesh.CopyVertex(i2, inputSubMesh);
backSubMesh.AddInterpolatedVertex(i2, i0, weight2, inputSubMesh);
backSubMesh.AddInterpolatedVertex(i0, i1, weight, inputSubMesh);
}
private void SplitB(int i0, int i1, int i2, CuttableSubMesh inputSubMesh, Plane cutPlane, CuttableSubMesh frontSubMesh, CuttableSubMesh backSubMesh)
{
//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_000d: Unknown result type (might be due to invalid IL or missing references)
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
//IL_0014: 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_0016: Unknown result type (might be due to invalid IL or missing references)
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
Vector3 vertex = inputSubMesh.GetVertex(i0);
Vector3 vertex2 = inputSubMesh.GetVertex(i2);
CalcIntersection(vertex2, vertex, cutPlane, out var weight);
frontSubMesh.CopyVertex(i0, inputSubMesh);
frontSubMesh.CopyVertex(i1, inputSubMesh);
frontSubMesh.AddInterpolatedVertex(i2, i0, weight, inputSubMesh);
backSubMesh.CopyVertex(i1, inputSubMesh);
backSubMesh.CopyVertex(i2, inputSubMesh);
backSubMesh.AddInterpolatedVertex(i2, i0, weight, inputSubMesh);
}
private void SplitBFlipped(int i0, int i1, int i2, CuttableSubMesh inputSubMesh, Plane cutPlane, CuttableSubMesh frontSubMesh, CuttableSubMesh backSubMesh)
{
//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_000d: Unknown result type (might be due to invalid IL or missing references)
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
//IL_0014: 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_0016: Unknown result type (might be due to invalid IL or missing references)
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
Vector3 vertex = inputSubMesh.GetVertex(i0);
Vector3 vertex2 = inputSubMesh.GetVertex(i1);
CalcIntersection(vertex, vertex2, cutPlane, out var weight);
frontSubMesh.CopyVertex(i0, inputSubMesh);
frontSubMesh.AddInterpolatedVertex(i0, i1, weight, inputSubMesh);
frontSubMesh.CopyVertex(i2, inputSubMesh);
backSubMesh.CopyVertex(i1, inputSubMesh);
backSubMesh.CopyVertex(i2, inputSubMesh);
backSubMesh.AddInterpolatedVertex(i0, i1, weight, inputSubMesh);
}
private Vector3 CalcIntersection(Vector3 v0, Vector3 v1, Plane plane, out float weight)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0003: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: 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_0014: 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_0022: 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_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_0044: Unknown result type (might be due to invalid IL or missing references)
//IL_004c: Unknown result type (might be due to invalid IL or missing references)
//IL_004e: 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)
Vector3 val = v1 - v0;
float magnitude = ((Vector3)(ref val)).magnitude;
Ray val2 = default(Ray);
((Ray)(ref val2))..ctor(v0, val / magnitude);
float num = default(float);
((Plane)(ref plane)).Raycast(val2, ref num);
Vector3 result = ((Ray)(ref val2)).origin + ((Ray)(ref val2)).direction * num;
weight = num / magnitude;
return result;
}
}
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Security;
using System.Security.Permissions;
using System.Text;
using System.Xml;
using System.Xml.Serialization;
using Atlas;
using BepInEx;
using BepInEx.Logging;
using FistVR;
using HarmonyLib;
using OtherLoader;
using Sodalite.Api;
using Sodalite.Utilities;
using UnityEditor;
using UnityEngine;
using UnityEngine.AI;
using UnityEngine.Profiling;
using UnityEngine.Rendering;
using UnityEngine.UI;
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("0.0.0.0")]
[module: UnverifiableCode]
namespace Modmas2025.Modmas2025Map
{
[BepInPlugin("Modmas2025.Modmas2025Map", "Modmas2025Map", "1.6.0")]
[BepInProcess("h3vr.exe")]
[Description("Built with MeatKit")]
[BepInDependency("nrgill28.Atlas", "1.0.1")]
public class Modmas2025MapPlugin : BaseUnityPlugin
{
private static readonly string BasePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
internal static ManualLogSource Logger;
private void Awake()
{
Logger = ((BaseUnityPlugin)this).Logger;
LoadAssets();
}
private void LoadAssets()
{
Harmony.CreateAndPatchAll(Assembly.GetExecutingAssembly(), "Modmas2025.Modmas2025Map");
AtlasPlugin.RegisterScene(Path.Combine(BasePath, "modmas2025"));
}
}
}
public class RenameObjectsInSequence : MonoBehaviour
{
public GameObject[] objectsToRename;
public string[] namePatterns;
[ContextMenu("Rename Objects")]
private void RenameObjects()
{
if (objectsToRename == null || namePatterns == null)
{
Debug.LogWarning((object)"Arrays are not set.");
return;
}
if (namePatterns.Length == 0)
{
Debug.LogWarning((object)"Name pattern array is empty.");
return;
}
int num = 0;
int num2 = 1;
for (int i = 0; i < objectsToRename.Length; i++)
{
GameObject val = objectsToRename[i];
if (!((Object)(object)val == (Object)null))
{
string text = namePatterns[num];
((Object)val).name = text + " (" + num2 + ")";
num2++;
num++;
if (num >= namePatterns.Length)
{
num = 0;
}
}
}
Debug.Log((object)"Renaming complete.");
}
}
public class ReplaceObjectsWithRandomPrefabs : MonoBehaviour
{
[Serializable]
public class PrefabArray
{
public GameObject[] prefabs;
}
public GameObject[] objectsToReplace;
public PrefabArray[] prefabGroups;
[ContextMenu("Replace With Sequential Prefabs")]
private void ReplaceObjects()
{
//IL_0100: 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_010d: Unknown result type (might be due to invalid IL or missing references)
//IL_0112: Unknown result type (might be due to invalid IL or missing references)
//IL_011a: 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_0128: Unknown result type (might be due to invalid IL or missing references)
//IL_012f: Expected O, but got Unknown
//IL_0144: Unknown result type (might be due to invalid IL or missing references)
//IL_0152: Unknown result type (might be due to invalid IL or missing references)
//IL_0160: Unknown result type (might be due to invalid IL or missing references)
if (objectsToReplace == null || prefabGroups == null)
{
Debug.LogWarning((object)"Arrays are not set.");
return;
}
if (prefabGroups.Length == 0)
{
Debug.LogWarning((object)"Prefab groups array is empty.");
return;
}
int index = 0;
for (int i = 0; i < objectsToReplace.Length; i++)
{
GameObject val = objectsToReplace[i];
if ((Object)(object)val == (Object)null)
{
continue;
}
PrefabArray prefabArray = prefabGroups[index];
if (prefabArray == null || prefabArray.prefabs == null || prefabArray.prefabs.Length == 0)
{
Debug.LogWarning((object)("Prefab group " + index + " is empty."));
AdvanceGroup(ref index);
continue;
}
int num = Random.Range(0, prefabArray.prefabs.Length);
GameObject val2 = prefabArray.prefabs[num];
if ((Object)(object)val2 == (Object)null)
{
AdvanceGroup(ref index);
continue;
}
Transform parent = val.transform.parent;
Vector3 position = val.transform.position;
Quaternion rotation = val.transform.rotation;
Vector3 localScale = val.transform.localScale;
GameObject val3 = (GameObject)PrefabUtility.InstantiatePrefab((Object)(object)val2);
val3.transform.parent = parent;
val3.transform.position = position;
val3.transform.rotation = rotation;
val3.transform.localScale = localScale;
Undo.RegisterCreatedObjectUndo((Object)(object)val3, "Replace With Sequential Prefab");
Undo.DestroyObjectImmediate((Object)(object)val);
AdvanceGroup(ref index);
}
Debug.Log((object)"Sequential prefab replacement complete.");
}
private void AdvanceGroup(ref int index)
{
index++;
if (index >= prefabGroups.Length)
{
index = 0;
}
}
}
namespace BitWizrd.Cardboard
{
public class BoxSpawner : MonoBehaviour
{
private static readonly Bounds[] HARDCODED_BOX_BOUNDS = (Bounds[])(object)new Bounds[15]
{
new Bounds(new Vector3(0.0006f, 0.0011f, -0.0052f), new Vector3(0.0761f, 0.1823f, 0.2404f)),
new Bounds(new Vector3(0.0006f, 0.0012f, -0.0051f), new Vector3(0.0761f, 0.2223f, 0.3302f)),
new Bounds(new Vector3(0.0006f, 0.0012f, -0.0042f), new Vector3(0.1211f, 0.3025f, 0.4385f)),
new Bounds(new Vector3(0.0006f, 0.0012f, -0.0036f), new Vector3(0.1211f, 0.3025f, 0.8573f)),
new Bounds(new Vector3(0.0006f, 0.0012f, -0.0035f), new Vector3(0.1211f, 0.3025f, 1.107f)),
new Bounds(new Vector3(0.0006f, 0.0012f, -0.0037f), new Vector3(0.1611f, 0.3025f, 1.5075f)),
new Bounds(new Vector3(0.0006f, 0.0014f, -0.0037f), new Vector3(0.4011f, 0.4029f, 1.5075f)),
new Bounds(new Vector3(0.0006f, 0.0009f, -0.0051f), new Vector3(0.1211f, 0.4818f, 0.1302f)),
new Bounds(new Vector3(0.0006f, 0.0012f, -0.0053f), new Vector3(0.1211f, 0.1224f, 0.1306f)),
new Bounds(new Vector3(0.0006f, 0.0012f, -0.0053f), new Vector3(0.1211f, 0.1224f, 0.4607f)),
new Bounds(new Vector3(0.0006f, 0.0012f, -0.0051f), new Vector3(0.1211f, 0.2025f, 0.1302f)),
new Bounds(new Vector3(0.0006f, 0.0016f, -0.0037f), new Vector3(0.2411f, 0.4033f, 0.2475f)),
new Bounds(new Vector3(0.0006f, 0.0012f, -0.0045f), new Vector3(0.2411f, 0.2425f, 0.4091f)),
new Bounds(new Vector3(0.0006f, 0.0012f, -0.0025f), new Vector3(0.4211f, 0.8025f, 0.425f)),
new Bounds(new Vector3(0.0006f, 0.0015f, -0.0034f), new Vector3(0.4211f, 0.423f, 0.8068f))
};
private static readonly string[] BOX_NAMES = new string[15]
{
"Pocket", "Pistol", "Compact", "Carbine", "FullSize", "Bulky", "Oversize", "Throwables", "AttachmentSmall", "AttachmentLong",
"AttachmentTall", "MediumY", "MediumZ", "LargeY", "LargeZ"
};
[Header("Box Contents")]
[Tooltip("The ObjectID of the primary item to spawn inside the box.")]
public string PrimaryObjectID;
[Tooltip("The ObjectID of the secondary item to spawn inside the box (optional). Leave blank if not needed.")]
public string SecondaryObjectID;
[Header("Box Appearance")]
[Tooltip("If checked, the box will be configured as a holiday gift box with \"Merry Meatmas!\" text and no item info.")]
public bool IsHolidayBox = false;
[Tooltip("Show the item name on the box.")]
public bool ShowName = true;
[Tooltip("Show the side details on the box.")]
public bool ShowSideDetails = true;
[Tooltip("If true, the item icon decal will be shown on the box. If false, the decal will be removed after spawning.")]
public bool EnableDecal = true;
[Tooltip("If true, the logo (item icon) will be shown on the box. If false, the logo will be removed after spawning.")]
public bool ShowLogo = true;
[Header("Custom Message")]
[Tooltip("Enable a custom message instead of the default or Merry Meatmas! text.")]
public bool UseCustomMessage = false;
[Tooltip("Custom message to display on the box if enabled.")]
public string CustomMessage = "";
[Header("Box Materials")]
[Tooltip("Custom material to override the primary box material (at index 0). If null, default materials will be used.")]
public Material PrimaryCustomMaterial;
[Tooltip("Custom material to override the secondary box material (at index 1). If null, default materials will be used.")]
public Material SecondaryCustomMaterial;
[Tooltip("Custom material to use for both indices if holiday is enabled. If null, default holiday material will be used.")]
public Material HolidayCustomMaterial;
[Header("Logo Overrides")]
[Tooltip("If true, override the logo images on the box with the custom sprite below.")]
public bool OverrideLogoImage = false;
[Tooltip("Custom sprite to use for all logo images if override is enabled.")]
public Sprite LogoImageOverride;
[Header("Box Effects Overrides")]
[Tooltip("Override the particle system in the box when opened.")]
public bool OverrideParticles = false;
[Tooltip("Particle system prefab to use if override is enabled.")]
public ParticleSystem ParticleOverride;
[Tooltip("Override the open sound event.")]
public bool OverrideOpenSound = false;
[Tooltip("AudioEvent to use when the box is opened if override is enabled.")]
public AudioEvent OpenSoundOverride;
[Tooltip("Number of packing peanut particles to emit when the box is opened (default: 30).")]
public int PeanutVolume = 30;
[Header("Pull Tab Overrides")]
[Tooltip("Override the pull tab's string material (index 0 of PullStrip_Bottom). If null, default is used.")]
public Material PullTabStringMaterial;
[Tooltip("Override the material on the GameObject named 'PullTab' (if found as a child of the box). If null, default is used.")]
public Material PullTabMaterial;
[Tooltip("Override the pull tab's rip sound.")]
public bool OverridePullTabSound = false;
[Tooltip("AudioEvent to use for the pull tab's rip sound if override is enabled.")]
public AudioEvent PullTabRipSoundOverride;
[Header("Manual Box Override")]
[Tooltip("Enable to manually select a box type from the available ItemBoxes list instead of auto-selecting.")]
public bool UseCustomBoxIndex = false;
[Tooltip("Box type to use when manual override is enabled.")]
[BoxTypeDropdown]
public int CustomBoxIndex = -1;
private void Start()
{
SpawnBox();
}
public GameObject SpawnBox()
{
//IL_0014: Unknown result type (might be due to invalid IL or missing references)
//IL_001f: Unknown result type (might be due to invalid IL or missing references)
return SpawnBox(PrimaryObjectID, SecondaryObjectID, ((Component)this).transform.position, ((Component)this).transform.rotation, IsHolidayBox);
}
public GameObject SpawnBox(string primaryObjectID, string secondaryObjectID, Vector3 position, Quaternion rotation)
{
//IL_0004: Unknown result type (might be due to invalid IL or missing references)
//IL_0005: Unknown result type (might be due to invalid IL or missing references)
return SpawnBox(primaryObjectID, secondaryObjectID, position, rotation, IsHolidayBox);
}
public GameObject SpawnBox(string primaryObjectID, string secondaryObjectID, Vector3 position, Quaternion rotation, bool isHolidayBox)
{
//IL_00fd: 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_015c: Unknown result type (might be due to invalid IL or missing references)
//IL_0162: Expected O, but got Unknown
//IL_0196: Unknown result type (might be due to invalid IL or missing references)
//IL_019c: Expected O, but got Unknown
//IL_01af: Unknown result type (might be due to invalid IL or missing references)
//IL_01b5: Expected O, but got Unknown
//IL_0293: Unknown result type (might be due to invalid IL or missing references)
//IL_0299: Expected O, but got Unknown
//IL_022b: Unknown result type (might be due to invalid IL or missing references)
//IL_0231: Expected O, but got Unknown
//IL_01f5: Unknown result type (might be due to invalid IL or missing references)
//IL_01ff: Expected O, but got Unknown
//IL_0256: Unknown result type (might be due to invalid IL or missing references)
//IL_025d: Expected O, but got Unknown
//IL_05e2: Unknown result type (might be due to invalid IL or missing references)
//IL_05ee: Unknown result type (might be due to invalid IL or missing references)
//IL_0707: Unknown result type (might be due to invalid IL or missing references)
//IL_070d: Expected O, but got Unknown
//IL_0792: Unknown result type (might be due to invalid IL or missing references)
//IL_0798: Expected O, but got Unknown
if (string.IsNullOrEmpty(primaryObjectID))
{
Debug.LogWarning((object)"BoxSpawner: Primary ObjectID is empty");
return null;
}
if (!IM.OD.ContainsKey(primaryObjectID))
{
Debug.LogWarning((object)("BoxSpawner: Primary ObjectID '" + primaryObjectID + "' not found in item dictionary"));
return null;
}
string text = string.Empty;
if (!string.IsNullOrEmpty(secondaryObjectID) && IM.OD.ContainsKey(secondaryObjectID))
{
text = secondaryObjectID;
}
FVRObject val = IM.OD[primaryObjectID];
FVRObject val2 = ((!UseCustomBoxIndex || CustomBoxIndex < 0 || CustomBoxIndex >= ManagerSingleton<IM>.Instance.ItemBoxes.Count) ? IM.GetFVRItemBoxForObject(val) : ManagerSingleton<IM>.Instance.ItemBoxes[CustomBoxIndex]);
if ((Object)(object)val2 == (Object)null)
{
Debug.LogWarning((object)("BoxSpawner: No box found for item " + primaryObjectID));
return null;
}
GameObject val3 = Object.Instantiate<GameObject>(((AnvilAsset)val2).GetGameObject(), position, rotation);
CGrillerItemBox component = val3.GetComponent<CGrillerItemBox>();
if ((Object)(object)component != (Object)null)
{
if ((Object)(object)component.Rend != (Object)null)
{
Material[] sharedMaterials = component.Rend.sharedMaterials;
Material[] array = (Material[])(object)new Material[sharedMaterials.Length];
for (int i = 0; i < sharedMaterials.Length; i++)
{
array[i] = new Material(sharedMaterials[i]);
}
if (isHolidayBox && (Object)(object)HolidayCustomMaterial != (Object)null)
{
array[0] = new Material(HolidayCustomMaterial);
if (array.Length > 1)
{
array[1] = new Material(HolidayCustomMaterial);
}
component.HolidayMat = array[0];
}
else
{
if (array.Length > 0)
{
if (isHolidayBox && (Object)(object)component.HolidayMat != (Object)null)
{
component.HolidayMat = new Material(component.HolidayMat);
array[0] = component.HolidayMat;
}
else if ((Object)(object)PrimaryCustomMaterial != (Object)null)
{
array[0] = new Material(PrimaryCustomMaterial);
}
else if (!isHolidayBox && (Object)(object)SecondaryCustomMaterial != (Object)null)
{
array[0] = (component.HolidayMat = new Material(SecondaryCustomMaterial));
}
}
if (array.Length > 1 && (Object)(object)SecondaryCustomMaterial != (Object)null)
{
array[1] = new Material(SecondaryCustomMaterial);
}
}
component.Rend.materials = array;
}
int num = 0;
component.ConfigureFromID(primaryObjectID, num, true, text, isHolidayBox);
if ((isHolidayBox || UseCustomMessage) && component.TXTs_Name != null && ((UseCustomMessage && CustomMessage != "") || isHolidayBox))
{
string text2 = ((!UseCustomMessage || !(CustomMessage != "")) ? "Merry Meatmas!" : CustomMessage);
for (int j = 0; j < component.TXTs_Name.Count; j++)
{
component.TXTs_Name[j].text = text2;
}
}
if (!ShowName && component.TXTs_Name != null)
{
for (int k = 0; k < component.TXTs_Name.Count; k++)
{
component.TXTs_Name[k].text = string.Empty;
}
}
if (!ShowSideDetails && component.TXTs_SideDetails != null)
{
for (int l = 0; l < component.TXTs_SideDetails.Count; l++)
{
component.TXTs_SideDetails[l].text = string.Empty;
}
}
if ((!EnableDecal || !ShowLogo) && (Object)(object)component.Rend != (Object)null && component.Rend.materials.Length > 0)
{
component.Rend.materials[0].SetTexture("_DecalTex", (Texture)null);
if (component.Rend.materials.Length > 1)
{
component.Rend.materials[1].SetTexture("_DecalTex", (Texture)null);
}
if (!ShowLogo)
{
Canvas[] componentsInChildren = val3.GetComponentsInChildren<Canvas>(true);
Canvas[] array2 = componentsInChildren;
foreach (Canvas val4 in array2)
{
Image[] componentsInChildren2 = ((Component)val4).GetComponentsInChildren<Image>(true);
Image[] array3 = componentsInChildren2;
foreach (Image val5 in array3)
{
((Component)val5).gameObject.SetActive(false);
}
}
}
}
if (OverrideLogoImage && (Object)(object)LogoImageOverride != (Object)null)
{
Canvas[] componentsInChildren3 = val3.GetComponentsInChildren<Canvas>(true);
Canvas[] array4 = componentsInChildren3;
foreach (Canvas val6 in array4)
{
Image[] componentsInChildren4 = ((Component)val6).GetComponentsInChildren<Image>(true);
Image[] array5 = componentsInChildren4;
foreach (Image val7 in array5)
{
val7.sprite = LogoImageOverride;
}
}
}
if (OverrideParticles && (Object)(object)ParticleOverride != (Object)null && (Object)(object)component.PSystem_Peanuts != (Object)null)
{
ParticleSystem pSystem_Peanuts = component.PSystem_Peanuts;
ParticleSystem val8 = Object.Instantiate<ParticleSystem>(ParticleOverride, ((Component)pSystem_Peanuts).transform.position, ((Component)pSystem_Peanuts).transform.rotation, ((Component)pSystem_Peanuts).transform.parent);
((Component)val8).gameObject.SetActive(false);
component.PSystem_Peanuts = val8;
Object.Destroy((Object)(object)((Component)pSystem_Peanuts).gameObject);
}
if (OverrideOpenSound && OpenSoundOverride != null)
{
component.AudEvent_Open = OpenSoundOverride;
}
if ((Object)(object)component.PSystem_Peanuts != (Object)null)
{
component.PeanutVolume = PeanutVolume;
}
CGrillerItemBoxTab componentInChildren = val3.GetComponentInChildren<CGrillerItemBoxTab>();
if ((Object)(object)componentInChildren != (Object)null)
{
if (OverridePullTabSound && PullTabRipSoundOverride != null)
{
componentInChildren.AudioRip = PullTabRipSoundOverride;
}
if ((Object)(object)componentInChildren.PullStrip_Bottom != (Object)null)
{
Renderer component2 = componentInChildren.PullStrip_Bottom.GetComponent<Renderer>();
if ((Object)(object)component2 != (Object)null)
{
Material[] materials = component2.materials;
if ((Object)(object)PullTabStringMaterial != (Object)null && materials.Length > 0)
{
materials[0] = new Material(PullTabStringMaterial);
}
component2.materials = materials;
}
}
if ((Object)(object)PullTabMaterial != (Object)null)
{
Transform[] componentsInChildren5 = val3.GetComponentsInChildren<Transform>(true);
Transform[] array6 = componentsInChildren5;
foreach (Transform val9 in array6)
{
if (!((Object)val9).name.Contains("PullTab"))
{
continue;
}
Renderer component3 = ((Component)val9).GetComponent<Renderer>();
if ((Object)(object)component3 != (Object)null)
{
Material[] materials2 = component3.materials;
for (int num5 = 0; num5 < materials2.Length; num5++)
{
materials2[num5] = new Material(PullTabMaterial);
}
component3.materials = materials2;
}
break;
}
}
}
return val3;
}
Object.Destroy((Object)(object)val3);
return null;
}
private void OnDrawGizmos()
{
//IL_0017: Unknown result type (might be due to invalid IL or missing references)
//IL_001c: Unknown result type (might be due to invalid IL or missing references)
//IL_0097: 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_009c: 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_00a9: Unknown result type (might be due to invalid IL or missing references)
//IL_00b4: Unknown result type (might be due to invalid IL or missing references)
//IL_00b5: Unknown result type (might be due to invalid IL or missing references)
//IL_00ba: Unknown result type (might be due to invalid IL or missing references)
//IL_00bf: 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_00c8: 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)
//IL_00da: 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_00e9: Unknown result type (might be due to invalid IL or missing references)
//IL_00ef: 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_00fe: 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_0115: Unknown result type (might be due to invalid IL or missing references)
//IL_011a: Unknown result type (might be due to invalid IL or missing references)
//IL_012b: Unknown result type (might be due to invalid IL or missing references)
//IL_0136: Unknown result type (might be due to invalid IL or missing references)
//IL_013e: Unknown result type (might be due to invalid IL or missing references)
//IL_0143: Unknown result type (might be due to invalid IL or missing references)
//IL_0057: Unknown result type (might be due to invalid IL or missing references)
//IL_005c: Unknown result type (might be due to invalid IL or missing references)
//IL_005f: Unknown result type (might be due to invalid IL or missing references)
//IL_0064: Unknown result type (might be due to invalid IL or missing references)
//IL_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)
Vector3 size = default(Vector3);
((Vector3)(ref size))..ctor(0.3f, 0.3f, 0.3f);
Vector3 val = Vector3.zero;
if (UseCustomBoxIndex && CustomBoxIndex >= 0 && CustomBoxIndex < HARDCODED_BOX_BOUNDS.Length)
{
Bounds val2 = HARDCODED_BOX_BOUNDS[CustomBoxIndex];
size = ((Bounds)(ref val2)).size;
val = ((Bounds)(ref val2)).center;
}
Color color = (Color)((!IsHolidayBox) ? new Color(0.6f, 0.4f, 0.2f, 0.95f) : Color.red);
Gizmos.color = color;
Vector3 val3 = ((Component)this).transform.position + ((Component)this).transform.TransformDirection(val);
Matrix4x4 matrix = Gizmos.matrix;
Gizmos.matrix = Matrix4x4.TRS(val3, ((Component)this).transform.rotation, Vector3.one);
Gizmos.DrawCube(Vector3.zero, size);
Gizmos.matrix = matrix;
Vector3 val4 = val3 - ((Component)this).transform.up * (size.y * 0.5f);
float num = size.z * 0.75f;
Handles.color = Color.blue;
Handles.ArrowHandleCap(0, val4, Quaternion.LookRotation(((Component)this).transform.forward), num, (EventType)7);
}
private void OnDrawGizmosSelected()
{
//IL_0017: Unknown result type (might be due to invalid IL or missing references)
//IL_001c: Unknown result type (might be due to invalid IL or missing references)
//IL_0092: 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_00a2: Unknown result type (might be due to invalid IL or missing references)
//IL_00ad: Unknown result type (might be due to invalid IL or missing references)
//IL_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_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_00c0: Unknown result type (might be due to invalid IL or missing references)
//IL_00c7: Unknown result type (might be due to invalid IL or missing references)
//IL_00cc: Unknown result type (might be due to invalid IL or missing references)
//IL_00d1: Unknown result type (might be due to invalid IL or missing references)
//IL_00db: Unknown result type (might be due to invalid IL or missing references)
//IL_00e0: Unknown result type (might be due to invalid IL or missing references)
//IL_00e6: Unknown result type (might be due to invalid IL or missing references)
//IL_0057: Unknown result type (might be due to invalid IL or missing references)
//IL_005c: Unknown result type (might be due to invalid IL or missing references)
//IL_005f: Unknown result type (might be due to invalid IL or missing references)
//IL_0064: Unknown result type (might be due to invalid IL or missing references)
//IL_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)
Vector3 size = default(Vector3);
((Vector3)(ref size))..ctor(0.3f, 0.3f, 0.3f);
Vector3 val = Vector3.zero;
if (UseCustomBoxIndex && CustomBoxIndex >= 0 && CustomBoxIndex < HARDCODED_BOX_BOUNDS.Length)
{
Bounds val2 = HARDCODED_BOX_BOUNDS[CustomBoxIndex];
size = ((Bounds)(ref val2)).size;
val = ((Bounds)(ref val2)).center;
}
Gizmos.color = (Color)((!IsHolidayBox) ? new Color(0.8f, 0.6f, 0.4f) : Color.red);
Vector3 val3 = ((Component)this).transform.position + ((Component)this).transform.TransformDirection(val);
Matrix4x4 matrix = Gizmos.matrix;
Gizmos.matrix = Matrix4x4.TRS(val3, ((Component)this).transform.rotation, Vector3.one);
Gizmos.DrawWireCube(Vector3.zero, size);
Gizmos.matrix = matrix;
}
}
public class BoxTypeDropdownAttribute : PropertyAttribute
{
}
[CustomPropertyDrawer(typeof(BoxTypeDropdownAttribute))]
public class BoxTypeDropdownDrawer : PropertyDrawer
{
private static readonly string[] BOX_NAMES = new string[15]
{
"Pocket", "Pistol", "Compact", "Carbine", "FullSize", "Bulky", "Oversize", "Throwables", "AttachmentSmall", "AttachmentLong",
"AttachmentTall", "MediumY", "MediumZ", "LargeY", "LargeZ"
};
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
{
//IL_0001: 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)
EditorGUI.BeginProperty(position, label, property);
string[] array = new string[BOX_NAMES.Length];
int[] array2 = new int[BOX_NAMES.Length];
for (int i = 0; i < BOX_NAMES.Length; i++)
{
array[i] = $"[{i}] {BOX_NAMES[i]}";
array2[i] = i;
}
int num = 0;
for (int j = 0; j < array2.Length; j++)
{
if (array2[j] == property.intValue)
{
num = j;
break;
}
}
bool showMixedValue = EditorGUI.showMixedValue;
EditorGUI.showMixedValue = property.hasMultipleDifferentValues;
EditorGUI.BeginChangeCheck();
int num2 = EditorGUI.Popup(position, label.text, num, array);
if (EditorGUI.EndChangeCheck())
{
property.intValue = array2[num2];
}
EditorGUI.showMixedValue = showMixedValue;
EditorGUI.EndProperty();
}
}
}
public class CSL_SosigManager : MonoBehaviour
{
[HideInInspector]
public List<Sosig> activeSosigs;
public CSL_SosigSpawner[] civvieSpawners;
private IEnumerator Start()
{
while (LoaderStatus.GetLoaderProgress() != 1f)
{
yield return null;
}
yield return (object)new WaitForSeconds(5f);
SpawnCivvies();
Debug.Log((object)"SOSIG SPAWN HERE");
}
private void Update()
{
UpdateAllSosigs();
}
public void SpawnCivvies()
{
for (int i = 0; i < civvieSpawners.Length; i++)
{
civvieSpawners[i].SpawnSosig();
}
}
public void UpdateAllSosigs()
{
CSL_SosigSpawner[] array = civvieSpawners;
foreach (CSL_SosigSpawner cSL_SosigSpawner in array)
{
cSL_SosigSpawner.UpdateSosig();
}
}
public void ClearSosigs()
{
for (int i = 0; i < activeSosigs.Count; i++)
{
activeSosigs[i].DeSpawnSosig();
}
activeSosigs.Clear();
}
}
public class CSL_SosigSpawner : MonoBehaviour
{
private Sosig mySosig;
public CSL_SosigManager sosigManager;
public int id;
public SosigOrder spawnState = (SosigOrder)6;
public int IFF;
public bool SpawnActive;
public SosigSpeechSet speechSetOverride;
public Transform[] pathPoints;
private List<Vector3> pathpos = new List<Vector3>();
private List<Vector3> pathrot = new List<Vector3>();
private void Start()
{
//IL_009a: 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)
List<int> list = new List<int>();
for (int i = 0; i < pathPoints.Length; i++)
{
list.Add(i);
}
for (int j = 0; j < list.Count; j++)
{
int index = Random.Range(j, list.Count);
int value = list[j];
list[j] = list[index];
list[index] = value;
}
foreach (int item in list)
{
Transform val = pathPoints[item];
pathpos.Add(val.position);
pathrot.Add(val.eulerAngles);
}
}
public void SpawnSosig()
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Expected O, but got Unknown
//IL_0009: Unknown result type (might be due to invalid IL or missing references)
//IL_0040: Unknown result type (might be due to invalid IL or missing references)
//IL_0051: 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_0084: Unknown result type (might be due to invalid IL or missing references)
//IL_00dd: 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)
SpawnOptions val = new SpawnOptions();
val.SpawnState = spawnState;
val.SpawnActivated = SpawnActive;
val.EquipmentMode = (EquipmentSlots)7;
val.SpawnWithFullAmmo = true;
val.IFF = IFF;
val.SosigTargetPosition = ((Component)this).transform.position;
val.SosigTargetRotation = ((Component)this).transform.eulerAngles;
SpawnOptions val2 = val;
Sosig val3 = SosigAPI.Spawn(ManagerSingleton<IM>.Instance.odicSosigObjsByID[(SosigEnemyID)id], val2, ((Component)this).transform.position, ((Component)this).transform.rotation);
((Component)val3).GetComponent<NavMeshAgent>().obstacleAvoidanceType = (ObstacleAvoidanceType)1;
val3.Speech = speechSetOverride;
sosigManager.activeSosigs.Add(val3);
val3.IgnoresNeedForWeapons = true;
mySosig = val3;
mySosig.CommandPathTo(pathpos, pathrot, 1f, Vector2.one * 4f, 2f, (SosigMoveSpeed)3, (PathLoopType)4, (List<Sosig>)null, 0.2f, 1f, false, 50f);
UpdateSosig();
}
public void UpdateSosig()
{
//IL_002a: Unknown result type (might be due to invalid IL or missing references)
//IL_0031: Invalid comparison between Unknown and I4
if ((Object)(object)mySosig != (Object)null && mySosig.CanSpeakState() && (int)mySosig.CurrentOrder == 10)
{
mySosig.Speak_State(speechSetOverride.OnWander);
}
}
private void OnDrawGizmos()
{
//IL_0015: Unknown result type (might be due to invalid IL or missing references)
//IL_0025: Unknown result type (might be due to invalid IL or missing references)
//IL_003a: Unknown result type (might be due to invalid IL or missing references)
//IL_0045: Unknown result type (might be due to invalid IL or missing references)
//IL_0050: Unknown result type (might be due to invalid IL or missing references)
//IL_005a: Unknown result type (might be due to invalid IL or missing references)
//IL_005f: Unknown result type (might be due to invalid IL or missing references)
Gizmos.color = new Color(0.8f, 0.2f, 0.2f, 0.5f);
Gizmos.DrawSphere(((Component)this).transform.position, 0.1f);
Gizmos.DrawLine(((Component)this).transform.position, ((Component)this).transform.position + ((Component)this).transform.forward * 0.25f);
}
}
namespace Modmas2025
{
public class MallPASystem : MonoBehaviour
{
private bool isDisabled;
public AudioSource[] speakers;
[Tooltip("Amt of silence (in seconds) between song and announcement.")]
public float soundClipGracePeriod = 1f;
private float silenceTimer;
public float songVolume;
public float psaVolume;
public List<AudioClip> songs;
public List<AudioClip> announcements;
private int songIndex;
private int announcementIndex;
private bool isCurrentClipASong;
private void Awake()
{
IListExtensions.Shuffle<AudioClip>((IList<AudioClip>)songs);
IListExtensions.Shuffle<AudioClip>((IList<AudioClip>)announcements);
PlaySong();
}
private void Update()
{
if (speakers[0].isPlaying)
{
return;
}
silenceTimer += Time.deltaTime;
if (silenceTimer >= soundClipGracePeriod)
{
silenceTimer = 0f;
if (isCurrentClipASong)
{
PlayAnnouncement();
}
else
{
PlaySong();
}
}
}
private void PlaySong()
{
isCurrentClipASong = true;
for (int i = 0; i < speakers.Length; i++)
{
speakers[i].volume = songVolume;
speakers[i].PlayOneShot(songs[songIndex]);
}
songIndex++;
if (songIndex >= songs.Count)
{
songIndex = 0;
}
}
private void PlayAnnouncement()
{
isCurrentClipASong = false;
for (int i = 0; i < speakers.Length; i++)
{
speakers[i].volume = psaVolume;
speakers[i].PlayOneShot(announcements[announcementIndex]);
}
announcementIndex++;
if (announcementIndex >= announcements.Count)
{
announcementIndex = 0;
}
}
private void TurnOff()
{
for (int i = 0; i < speakers.Length; i++)
{
speakers[i].Stop();
}
}
private void OnDisable()
{
TurnOff();
}
}
}
public class ModmasArena : MonoBehaviour
{
private List<Sosig> spawnedSosigs = new List<Sosig>();
private bool canSpawn;
[SerializeField]
private SosigOrder spawnState = (SosigOrder)6;
[SerializeField]
private bool SpawnActive;
[SerializeField]
private ModmasArenaTeam[] teams;
[SerializeField]
private float SpawnDelay;
private int teamindex;
private bool hasDied = false;
private Vector3 playerPos;
public GameObject flipON;
public GameObject flopOFF;
private void Update()
{
//IL_00c2: 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_00de: Invalid comparison between Unknown and I4
if (!canSpawn || (Object)(object)GM.CurrentPlayerBody == (Object)null)
{
return;
}
if (GM.CurrentPlayerBody.Health <= 0f)
{
hasDied = true;
DisableArena();
}
else if (hasDied && GM.CurrentPlayerBody.Health > 0f)
{
hasDied = false;
}
SpawnTeam(teams[teamindex]);
teamindex++;
if (teamindex >= teams.Length)
{
teamindex = 0;
}
for (int i = 0; i < spawnedSosigs.Count; i++)
{
spawnedSosigs[i].UpdateAssaultPoint(playerPos);
if ((int)spawnedSosigs[i].BodyState == 3)
{
spawnedSosigs[i].TickDownToClear(4f);
spawnedSosigs.Remove(spawnedSosigs[i]);
}
}
}
private void SpawnTeam(ModmasArenaTeam team)
{
//IL_0007: Unknown result type (might be due to invalid IL or missing references)
//IL_000c: Unknown result type (might be due to invalid IL or missing references)
//IL_0011: Unknown result type (might be due to invalid IL or missing references)
//IL_0016: Unknown result type (might be due to invalid IL or missing references)
playerPos = GM.CurrentPlayerRoot.position - Vector3.down;
if (spawnedSosigs.Count <= team.maxSosigs && team.spawnTimer <= Time.time)
{
SpawnSosig(SodaliteUtils.GetRandom<Transform>((IList<Transform>)team.spawnPoints), SodaliteUtils.GetRandom<int>((IList<int>)team.sosigID), team);
team.spawnTimer = SpawnDelay + Time.time;
}
}
private void SpawnSosig(Transform sp, int id, ModmasArenaTeam team)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Expected O, but got Unknown
//IL_0009: Unknown result type (might be due to invalid IL or missing references)
//IL_003b: Unknown result type (might be due to invalid IL or missing references)
//IL_0047: Unknown result type (might be due to invalid IL or missing references)
//IL_0065: 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)
SpawnOptions val = new SpawnOptions();
val.SpawnState = spawnState;
val.SpawnActivated = SpawnActive;
val.EquipmentMode = (EquipmentSlots)7;
val.SpawnWithFullAmmo = true;
val.IFF = team.sosigIFF;
val.SosigTargetPosition = sp.position;
val.SosigTargetRotation = sp.eulerAngles;
SpawnOptions val2 = val;
Sosig val3 = SosigAPI.Spawn(ManagerSingleton<IM>.Instance.odicSosigObjsByID[(SosigEnemyID)id], val2, sp.position, sp.rotation);
if ((Object)(object)team.speechSetOverride != (Object)null)
{
val3.Speech = team.speechSetOverride;
}
spawnedSosigs.Add(val3);
}
public void OnTriggerEnter(Collider other)
{
if (((Component)other).gameObject.tag == "GameController")
{
canSpawn = true;
}
}
public void OnTriggerExit(Collider other)
{
if (((Component)other).gameObject.tag == "GameController")
{
DisableArena();
}
}
private void OnDrawGizmos()
{
//IL_0041: Unknown result type (might be due to invalid IL or missing references)
//IL_004c: Unknown result type (might be due to invalid IL or missing references)
//IL_005c: Unknown result type (might be due to invalid IL or missing references)
//IL_0062: Unknown result type (might be due to invalid IL or missing references)
//IL_0068: Unknown result type (might be due to invalid IL or missing references)
//IL_0072: Unknown result type (might be due to invalid IL or missing references)
//IL_0077: Unknown result type (might be due to invalid IL or missing references)
ModmasArenaTeam[] array = teams;
foreach (ModmasArenaTeam modmasArenaTeam in array)
{
Transform[] spawnPoints = modmasArenaTeam.spawnPoints;
foreach (Transform val in spawnPoints)
{
Gizmos.color = new Color(0.8f, 0.2f, 0.2f, 0.5f);
Gizmos.DrawSphere(val.position, 0.1f);
Gizmos.DrawLine(val.position, val.position + val.forward * 0.25f);
}
}
}
private void DisableArena()
{
canSpawn = false;
if (spawnedSosigs.Count <= 0)
{
return;
}
foreach (Sosig spawnedSosig in spawnedSosigs)
{
spawnedSosig.DeSpawnSosig();
}
spawnedSosigs.Clear();
}
private void OnEnable()
{
flipON.SetActive(true);
flopOFF.SetActive(false);
}
private void OnDisable()
{
flipON.SetActive(false);
flopOFF.SetActive(true);
DisableArena();
}
}
[Serializable]
public class ModmasArenaTeam
{
public SosigSpeechSet speechSetOverride;
public Transform[] spawnPoints;
public int maxSosigs;
public int[] sosigID;
public int sosigIFF;
[HideInInspector]
public float spawnTimer;
}
public class SecretRadio : MonoBehaviour
{
public AudioSource source;
public List<AudioClip> clips;
public Vector2 delayrange;
private float silenceTimer;
private float silencethresh;
private int announcementIndex;
private void Awake()
{
IListExtensions.Shuffle<AudioClip>((IList<AudioClip>)clips);
silencethresh = Random.Range(delayrange.x, delayrange.y);
}
private void Update()
{
if (!source.isPlaying)
{
silenceTimer += Time.deltaTime;
if (silenceTimer >= silencethresh)
{
PlayAnnouncement();
}
}
}
private void PlayAnnouncement()
{
silenceTimer = 0f;
silencethresh = Random.Range(delayrange.x, delayrange.y);
source.PlayOneShot(clips[announcementIndex]);
announcementIndex++;
if (announcementIndex >= clips.Count)
{
announcementIndex = 0;
}
}
}
public class TSR_Configurable_Course : MonoBehaviour
{
[Header("Course Setup")]
[Tooltip("The courses to cycle through")]
public TSR_Course[] courses;
[Tooltip("The names of each course (name 1 goes to course 1 and so on)")]
public string[] courseNames;
[Tooltip("Game Object to enable whenever its corresponding course is selected (and disabled when another course is swapped to)")]
public GameObject[] courseGameObjects;
[Tooltip("The default course that is selected")]
public int defaultCourseIndex;
[Header("Objects")]
[Tooltip("Text component that the name of the current course is displayed to")]
public Text[] currentCourseNameDisplays;
[HideInInspector]
public int courseIndex;
private void OnValidate()
{
if (courses != null)
{
if (courseNames == null || courseNames.Length != courses.Length)
{
Array.Resize(ref courseNames, courses.Length);
}
if (courseGameObjects == null || courseGameObjects.Length != courses.Length)
{
Array.Resize(ref courseGameObjects, courses.Length);
}
}
}
private void Start()
{
courseIndex = Mathf.Clamp(defaultCourseIndex, 0, courses.Length - 1);
UpdateVis();
}
public void CycleCourseFoward()
{
if (courses != null && courses.Length != 0)
{
bool flag = false;
if (courses[courseIndex].isTargetsActive)
{
courses[courseIndex].SpawnTargets();
flag = true;
}
courseIndex = (courseIndex + 1) % courses.Length;
if (flag)
{
courses[courseIndex].SpawnTargets();
}
UpdateVis();
}
}
public void CycleCourseBackward()
{
if (courses != null && courses.Length != 0)
{
bool flag = false;
if (courses[courseIndex].isTargetsActive)
{
courses[courseIndex].SpawnTargets();
flag = true;
}
courseIndex = (courseIndex - 1 + courses.Length) % courses.Length;
if (flag)
{
courses[courseIndex].SpawnTargets();
}
UpdateVis();
}
}
public void UpdateVis()
{
string text = "";
if (courseNames != null && courseIndex >= 0 && courseIndex < courseNames.Length && courseNames[courseIndex] != null)
{
text = courseNames[courseIndex];
}
if (currentCourseNameDisplays != null)
{
Text[] array = currentCourseNameDisplays;
foreach (Text val in array)
{
if ((Object)(object)val != (Object)null)
{
val.text = text;
}
}
}
if (courseGameObjects != null)
{
for (int j = 0; j < courseGameObjects.Length; j++)
{
if ((Object)(object)courseGameObjects[j] != (Object)null)
{
courseGameObjects[j].SetActive(false);
}
}
if (courseIndex >= 0 && courseIndex < courseGameObjects.Length && (Object)(object)courseGameObjects[courseIndex] != (Object)null)
{
courseGameObjects[courseIndex].SetActive(true);
}
}
if (courseGameObjects != null && (Object)(object)courseGameObjects[courseIndex] != (Object)null)
{
courseGameObjects[courseIndex].SetActive(true);
}
}
}
public class TSR_Course : MonoBehaviour
{
[Header("Target Setup")]
[Tooltip("Array of targets")]
public TSR_Target[] targets;
[Tooltip("Total ammount of targets to spawn (leave -1 to spawn all targets)")]
public int targetsToSpawn = -1;
[Tooltip("Whether this course and its targets are enabled or disabled whenever the map starts or this object is enabled.")]
public bool isTargetsEnabledAtStart;
[Tooltip("The range (x = min, y = max) in random seconds of delay from pressing reset/enable on this course to the targets actually spawning and scoring starting if enabled. (leave either x or y -1 to instead start immediately)")]
public Vector2 startDelay = new Vector2(-1f, -1f);
[Tooltip("Bypasses the start delay when turning the course on, meaning the delayed start only happens on a reset.")]
public bool instantEnable = true;
[Tooltip("Audio source that is played when the course starts after a delay. (Think shotclock starting beep)")]
public AudioSource[] delayedStartAudio;
[Header("Sosig Settings")]
[Tooltip("Whether sosigs under this course will splode or silently dissapear when despawned or reset. (warning! sosigs sploding creates alot of lag)")]
public bool doSosigsSplodeWhenDespawned = false;
[Tooltip("Whether sosigs under this course will splode after after a short delay once dead like in TNH or stay as a dead body till reset or despawned.")]
public bool doSosigsSplodeWhenKilled = false;
[Header("Visuals")]
[Tooltip("Game Object thats enabled whenever the targets are turned on.")]
public GameObject enabledVis;
[Tooltip("Game Object thats enabled whenever the targets are turned off.")]
public GameObject disabledVis;
[Header("Scoring")]
[Tooltip("Whether or not to have scoring (timer or score) enabled for this course.")]
public bool isScoringEnabled = false;
[Tooltip("Text components that the course score displays to. (does nothing if isScoringEnabled is not true)")]
public Text[] scoreDisplays;
[Tooltip("Text components that the course timer displays to. (does nothing if isScoringEnabled is not true)")]
public Text[] timeDisplays;
[HideInInspector]
public bool isTargetsActive;
[HideInInspector]
public FVRObject mainObject;
[HideInInspector]
public List<GameObject> allTargets = new List<GameObject>();
[HideInInspector]
public List<Sosig> activeSosigs = new List<Sosig>();
[HideInInspector]
public bool buttonPressed;
[HideInInspector]
public List<TSR_ExternalButton> externalButtons = new List<TSR_ExternalButton>();
[HideInInspector]
public float score;
[HideInInspector]
public float maxscore;
[HideInInspector]
public float timeTaken;
[HideInInspector]
public float timetillStart = 0f;
[HideInInspector]
public bool isDelayingStart;
[HideInInspector]
public int delayType = 0;
[HideInInspector]
public TSR_Course_Linker linkedcourse;
private void Start()
{
for (int i = 0; i < targets.Length; i++)
{
for (int num = ((Component)targets[i]).transform.childCount - 1; num >= 0; num--)
{
((Component)((Component)targets[i]).transform.GetChild(num)).gameObject.SetActive(false);
}
}
}
private void Update()
{
//IL_007a: Unknown result type (might be due to invalid IL or missing references)
//IL_0080: Invalid comparison between Unknown and I4
if (isDelayingStart)
{
CheckDelay();
}
else if (isTargetsActive && isScoringEnabled)
{
timeTaken += Time.deltaTime;
}
if (!doSosigsSplodeWhenKilled)
{
return;
}
for (int i = 0; i < activeSosigs.Count; i++)
{
if ((Object)(object)activeSosigs[i] != (Object)null && (int)activeSosigs[i].BodyState == 3)
{
activeSosigs[i].ClearSosig();
activeSosigs.Remove(activeSosigs[i]);
}
}
}
public void ResetTargets()
{
if (!isTargetsActive || !isTargetsActive)
{
return;
}
if ((startDelay.x > -1f && !isDelayingStart) || (startDelay.y > -1f && !isDelayingStart))
{
BeginDelayingStart(1);
return;
}
if (isDelayingStart && timetillStart <= 0f)
{
isDelayingStart = false;
}
else if (isDelayingStart)
{
return;
}
for (int i = 0; i < allTargets.Count; i++)
{
if ((Object)(object)allTargets[i] != (Object)null)
{
FVRPhysicalObject component = allTargets[i].GetComponent<FVRPhysicalObject>();
if ((Object)(object)component != (Object)null && ((FVRInteractiveObject)component).IsHeld)
{
FVRViveHand hand = ((FVRInteractiveObject)component).m_hand;
hand.ForceSetInteractable((FVRInteractiveObject)null);
((FVRInteractiveObject)component).EndInteraction(hand);
}
Object.Destroy((Object)(object)allTargets[i]);
}
}
allTargets.Clear();
for (int j = 0; j < activeSosigs.Count; j++)
{
if ((Object)(object)activeSosigs[j] != (Object)null)
{
if (!doSosigsSplodeWhenDespawned)
{
activeSosigs[j].DeSpawnSosig();
}
else
{
activeSosigs[j].ClearSosig();
}
}
}
activeSosigs.Clear();
TSR_Target[] array = targets;
foreach (TSR_Target tSR_Target in array)
{
tSR_Target.isActive = false;
}
if (isScoringEnabled)
{
if ((Object)(object)linkedcourse != (Object)null)
{
linkedcourse.maxscore -= maxscore;
linkedcourse.score -= maxscore;
linkedcourse.timeTaken -= linkedcourse.timeTaken - timeTaken;
}
maxscore = 0f;
score = 0f;
timeTaken = 0f;
}
if (targetsToSpawn < 0 || targetsToSpawn > targets.Length)
{
for (int l = 0; l < targets.Length; l++)
{
SpawnTarget(targets[l]);
}
}
else
{
int num = 0;
while (num < targetsToSpawn)
{
int num2 = Random.Range(0, targets.Length);
TSR_Target tSR_Target2 = targets[num2];
if (!tSR_Target2.isActive)
{
SpawnTarget(tSR_Target2);
num++;
}
}
}
UpdateScore();
}
public void SpawnTargets()
{
if (!isTargetsActive)
{
if (!instantEnable)
{
if ((startDelay.x > -1f && !isDelayingStart) || (startDelay.y > -1f && !isDelayingStart))
{
BeginDelayingStart(2);
return;
}
if (isDelayingStart && timetillStart <= 0f)
{
isDelayingStart = false;
}
else if (isDelayingStart)
{
isDelayingStart = false;
return;
}
}
if (targets != null)
{
if (targetsToSpawn < 0 || targetsToSpawn > targets.Length)
{
for (int i = 0; i < targets.Length; i++)
{
SpawnTarget(targets[i]);
}
}
else
{
int num = 0;
while (num < targetsToSpawn)
{
int num2 = Random.Range(0, targets.Length);
TSR_Target tSR_Target = targets[num2];
if (!tSR_Target.isActive)
{
SpawnTarget(tSR_Target);
num++;
}
}
}
}
isTargetsActive = true;
UpdateVis();
UpdateScore();
}
else
{
if (!isTargetsActive)
{
return;
}
if (allTargets != null)
{
for (int j = 0; j < allTargets.Count; j++)
{
if ((Object)(object)allTargets[j] != (Object)null)
{
FVRPhysicalObject component = allTargets[j].GetComponent<FVRPhysicalObject>();
if ((Object)(object)component != (Object)null && ((FVRInteractiveObject)component).IsHeld)
{
FVRViveHand hand = ((FVRInteractiveObject)component).m_hand;
hand.ForceSetInteractable((FVRInteractiveObject)null);
((FVRInteractiveObject)component).EndInteraction(hand);
}
Object.Destroy((Object)(object)allTargets[j]);
}
}
allTargets.Clear();
}
if (activeSosigs != null)
{
for (int k = 0; k < activeSosigs.Count; k++)
{
if ((Object)(object)activeSosigs[k] != (Object)null)
{
if (!doSosigsSplodeWhenDespawned)
{
activeSosigs[k].DeSpawnSosig();
}
else
{
activeSosigs[k].ClearSosig();
}
}
}
activeSosigs.Clear();
}
if (targets != null)
{
TSR_Target[] array = targets;
foreach (TSR_Target tSR_Target2 in array)
{
tSR_Target2.isActive = false;
}
}
if (isScoringEnabled)
{
if ((Object)(object)linkedcourse != (Object)null)
{
linkedcourse.maxscore -= maxscore;
linkedcourse.score -= maxscore;
linkedcourse.timeTaken -= linkedcourse.timeTaken - timeTaken;
}
maxscore = 0f;
score = 0f;
timeTaken = 0f;
}
isTargetsActive = false;
UpdateVis();
UpdateScore();
}
}
public void SpawnTarget(TSR_Target target)
{
//IL_012b: Unknown result type (might be due to invalid IL or missing references)
//IL_0131: Expected O, but got Unknown
//IL_0138: Unknown result type (might be due to invalid IL or missing references)
//IL_0143: Unknown result type (might be due to invalid IL or missing references)
//IL_00ab: 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_01ca: Unknown result type (might be due to invalid IL or missing references)
//IL_01d1: Expected O, but got Unknown
//IL_01d5: 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_021f: 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_023f: Unknown result type (might be due to invalid IL or missing references)
//IL_0246: Expected O, but got Unknown
//IL_029b: Unknown result type (might be due to invalid IL or missing references)
//IL_02ad: Unknown result type (might be due to invalid IL or missing references)
//IL_02b8: Unknown result type (might be due to invalid IL or missing references)
//IL_0271: Unknown result type (might be due to invalid IL or missing references)
//IL_027c: Unknown result type (might be due to invalid IL or missing references)
//IL_03c1: Unknown result type (might be due to invalid IL or missing references)
//IL_03d3: Unknown result type (might be due to invalid IL or missing references)
//IL_03e8: Unknown result type (might be due to invalid IL or missing references)
//IL_03f2: Unknown result type (might be due to invalid IL or missing references)
//IL_03fe: Unknown result type (might be due to invalid IL or missing references)
//IL_0366: Unknown result type (might be due to invalid IL or missing references)
//IL_0370: Unknown result type (might be due to invalid IL or missing references)
//IL_037c: Unknown result type (might be due to invalid IL or missing references)
//IL_0383: Unknown result type (might be due to invalid IL or missing references)
if (Random.Range(0f, 1f) > target.spawnChance)
{
return;
}
int num = 0;
if (target.mixedTargets.Count <= 0)
{
return;
}
num = Random.Range(0, target.mixedTargets.Count);
target.isActive = true;
if (target.mixedTargets[num] is string)
{
string key = (string)target.mixedTargets[num];
if (IM.OD.TryGetValue(key, out mainObject))
{
GameObject val = Object.Instantiate<GameObject>(((AnvilAsset)mainObject).GetGameObject(), ((Component)target).transform.position, ((Component)target).transform.rotation);
allTargets.Add(val);
if (target.isPhysicsLocked)
{
PhysLock(val);
}
if (isScoringEnabled && target.isScored)
{
SetupScoring(val, target);
}
}
}
else if (target.mixedTargets[num] is GameObject)
{
GameObject val2 = (GameObject)target.mixedTargets[num];
GameObject val3 = Object.Instantiate<GameObject>(val2, ((Component)target).transform.position, ((Component)target).transform.rotation);
allTargets.Add(val3);
if (target.isPhysicsLocked)
{
PhysLock(val3);
}
if (isScoringEnabled && target.isScored)
{
SetupScoring(val3, target);
}
val3.SetActive(true);
}
else if (target.mixedTargets[num] is TSR_Target_Sosig)
{
TSR_Target_Sosig tSR_Target_Sosig = (TSR_Target_Sosig)target.mixedTargets[num];
SpawnOptions val4 = new SpawnOptions();
val4.SpawnState = tSR_Target_Sosig.spawnState;
val4.SpawnActivated = tSR_Target_Sosig.spawnActive;
val4.EquipmentMode = tSR_Target_Sosig.equipmentMode;
val4.SpawnWithFullAmmo = tSR_Target_Sosig.spawnWithFullAmmo;
val4.IFF = tSR_Target_Sosig.iFF;
val4.SosigTargetPosition = ((Component)target).transform.position;
val4.SosigTargetRotation = ((Component)target).transform.eulerAngles;
SpawnOptions val5 = val4;
Sosig val6 = new Sosig();
val6 = ((!tSR_Target_Sosig.usesCustomSosigID) ? SosigAPI.Spawn(ManagerSingleton<IM>.Instance.odicSosigObjsByID[tSR_Target_Sosig.vanillaSosigType], val5, ((Component)target).transform.position, ((Component)target).transform.rotation) : SosigAPI.Spawn(ManagerSingleton<IM>.Instance.odicSosigObjsByID[(SosigEnemyID)tSR_Target_Sosig.customSosigID], val5, ((Component)target).transform.position, ((Component)target).transform.rotation));
activeSosigs.Add(val6);
val6.IgnoresNeedForWeapons = tSR_Target_Sosig.ignoresNeedForWeapon;
if (tSR_Target_Sosig.doesPath)
{
List<Vector3> list = new List<Vector3>();
List<Vector3> list2 = new List<Vector3>();
list = tSR_Target_Sosig.pathPoints.Select((Transform t) => t.position).ToList();
list2 = tSR_Target_Sosig.pathPoints.Select((Transform t) => t.eulerAngles).ToList();
val6.CommandPathTo(list, list2, 1f, Vector2.one * 4f, 2f, tSR_Target_Sosig.pathingMoveSpeed, tSR_Target_Sosig.pathingLoopType, (List<Sosig>)null, 0.2f, 1f, tSR_Target_Sosig.pathingIsPatrol, 50f);
}
else
{
List<Vector3> list3 = new List<Vector3>();
List<Vector3> list4 = new List<Vector3>();
list3.Add(((Component)target).transform.position);
list4.Add(((Component)target).transform.eulerAngles);
val6.CommandPathTo(list3, list4, 1f, Vector2.one * 4f, 2f, tSR_Target_Sosig.pathingMoveSpeed, (PathLoopType)0, (List<Sosig>)null, 0.2f, 1f, tSR_Target_Sosig.pathingIsPatrol, 50f);
}
}
else
{
Debug.LogWarning((object)("TSR_Target: \"" + ((Object)((Component)target).gameObject).name + "\" picked an invalid data type? Honestly idk how this could happen"));
}
}
public void BeginDelayingStart(int delaytype)
{
timetillStart = Random.Range(startDelay.x, startDelay.y);
delayType = delaytype;
isDelayingStart = true;
}
public void CheckDelay()
{
timetillStart -= Time.deltaTime;
if (timetillStart <= 0f)
{
if (delayType == 1)
{
ResetTargets();
}
else if (delayType == 2)
{
SpawnTargets();
}
AudioSource[] array = delayedStartAudio;
foreach (AudioSource val in array)
{
val.Play();
}
}
}
public void PhysLock(GameObject obj)
{
Rigidbody component = obj.GetComponent<Rigidbody>();
if ((Object)(object)component != (Object)null)
{
component.isKinematic = true;
}
}
public void UpdateVis()
{
if (isTargetsActive)
{
if ((Object)(object)enabledVis != (Object)null)
{
enabledVis.SetActive(true);
}
if ((Object)(object)disabledVis != (Object)null)
{
disabledVis.SetActive(false);
}
}
else
{
if ((Object)(object)enabledVis != (Object)null)
{
enabledVis.SetActive(false);
}
if ((Object)(object)disabledVis != (Object)null)
{
disabledVis.SetActive(true);
}
}
externalButtons.ForEach(delegate(TSR_ExternalButton b)
{
b.UpdateVis();
});
}
public void SetupScoring(GameObject target, TSR_Target targetSettings)
{
//IL_00b0: Unknown result type (might be due to invalid IL or missing references)
//IL_00b5: Unknown result type (might be due to invalid IL or missing references)
//IL_00bd: Unknown result type (might be due to invalid IL or missing references)
//IL_00c2: Unknown result type (might be due to invalid IL or missing references)
TSR_Scoring component = target.GetComponent<TSR_Scoring>();
if ((Object)(object)component != (Object)null)
{
component.course = this;
component.CalculateValue();
return;
}
TSR_Scoring tSR_Scoring = target.AddComponent<TSR_Scoring>();
tSR_Scoring.hitsToScore = targetSettings.hitsToScore;
tSR_Scoring.bestHitsScore = targetSettings.bestHitsScore;
Collider[] componentsInChildren = ((Component)this).GetComponentsInChildren<Collider>(true);
Collider[] array = componentsInChildren;
foreach (Collider val in array)
{
if ((Object)(object)((Component)val).GetComponent<TSR_ScoringHitbox>() == (Object)null && ((Component)val).gameObject.layer == 0)
{
TSR_ScoringHitbox tSR_ScoringHitbox = ((Component)val).gameObject.AddComponent<TSR_ScoringHitbox>();
component.hitBoxes.Add(tSR_ScoringHitbox);
tSR_ScoringHitbox.hitValue = targetSettings.hitsToScore;
tSR_ScoringHitbox.hitPowerFactor = targetSettings.hitPowerFactor;
tSR_ScoringHitbox.hitPowerFactorThresholds = targetSettings.hitPowerFactorThresholds;
tSR_ScoringHitbox.hitTime = targetSettings.hitTime;
tSR_ScoringHitbox.damageThreshold = targetSettings.damageThreshold;
tSR_ScoringHitbox.ignoreMelee = targetSettings.ignoreMelee;
tSR_ScoringHitbox.doesDebugLogHits = targetSettings.doesDebugLogHits;
}
}
tSR_Scoring.course = this;
tSR_Scoring.CalculateValue();
}
public void UpdateScore()
{
if (scoreDisplays != null)
{
string text = FormatScore(score, maxscore);
Text[] array = scoreDisplays;
foreach (Text val in array)
{
if ((Object)(object)val != (Object)null)
{
val.text = text;
}
}
}
if (timeDisplays == null)
{
return;
}
string text2 = FormatTime(timeTaken);
Text[] array2 = timeDisplays;
foreach (Text val2 in array2)
{
if ((Object)(object)val2 != (Object)null)
{
val2.text = text2;
}
}
}
private string FormatScore(float current, float max)
{
current = (float)Math.Round(current, 3);
max = (float)Math.Round(max, 3);
int decimalPlaces = GetDecimalPlaces(current);
int decimalPlaces2 = GetDecimalPlaces(max);
int num = Mathf.Max(decimalPlaces, decimalPlaces2);
num = Mathf.Min(num, 3);
string text = "F" + num;
return $"{current.ToString(text, CultureInfo.InvariantCulture)}/{max.ToString(text, CultureInfo.InvariantCulture)}";
}
private int GetDecimalPlaces(float value)
{
string text = value.ToString(CultureInfo.InvariantCulture);
int num = text.IndexOf('.');
return (num >= 0) ? Mathf.Min(text.Length - num - 1, 3) : 0;
}
public static string FormatTime(float timeSeconds)
{
if (timeSeconds < 0f)
{
timeSeconds = 0f;
}
int num = Mathf.FloorToInt(timeSeconds / 60f);
float num2 = timeSeconds % 60f;
num2 = Mathf.Round(num2 * 1000f) / 1000f;
if (num > 0)
{
return $"{num}:{num2:00.000}";
}
if (num2 >= 10f)
{
return $"{num2:00.000}";
}
return $"{num2:0.000}";
}
private void OnTriggerEnter(Collider collider)
{
if (!buttonPressed && ((Component)collider).gameObject.tag == "GameController")
{
SpawnTargets();
buttonPressed = true;
}
}
private void OnTriggerExit(Collider collider)
{
if (((Component)collider).gameObject.tag == "GameController")
{
buttonPressed = false;
}
}
private void OnDisable()
{
if (isTargetsActive)
{
SpawnTargets();
}
}
private void OnEnable()
{
if (isTargetsEnabledAtStart)
{
SpawnTargets();
}
else if (!isTargetsEnabledAtStart)
{
isTargetsActive = false;
UpdateVis();
}
}
}
public class TSR_Course_Linker : MonoBehaviour
{
public TSR_Course[] normalCourses;
public TSR_Configurable_Course[] configurableCourses;
[Tooltip("Whether this button and its targets are enabled or disabled whenever the map starts or this object is enabled.")]
public bool isCoursesEnabledAtStart;
[Tooltip("The range (x = min, y = max) in random seconds of delay from pressing reset/enable on this course to the targets actually spawning and scoring starting if enabled. (leave either x or y -1 to instead start immediately)")]
public Vector2 startDelay = new Vector2(-1f, -1f);
[Tooltip("Bypasses the start delay when turning the course on, meaning the delayed start only happens on a reset.")]
public bool instantEnable = true;
[Tooltip("Audio source that is played when the course starts after a delay. (Think shotclock starting beep)")]
public AudioSource[] delayedStartAudio;
[Tooltip("Game Object thats enabled whenever the targets are turned on")]
public GameObject enabledVis;
[Tooltip("Game Object thats enabled whenever the targets are turned off")]
public GameObject disabledVis;
[Header("Scoring")]
[Tooltip("Whether or not to have scoring (timer or score) enabled for this course.")]
public bool isScoringEnabled = false;
[Tooltip("Text components that the course score displays to. (does nothing if isScoringEnabled is not true)")]
public Text[] scoreDisplays;
[Tooltip("Text components that the course timer displays to. (does nothing if isScoringEnabled is not true)")]
public Text[] timeDisplays;
[HideInInspector]
public bool isCoursesActive;
[HideInInspector]
public List<TSR_ExternalButton> externalButtons = new List<TSR_ExternalButton>();
[HideInInspector]
public bool buttonPressed;
[HideInInspector]
public float score;
[HideInInspector]
public float maxscore;
[HideInInspector]
public float timeTaken;
[HideInInspector]
public float timetillStart = 0f;
[HideInInspector]
public bool isDelayingStart;
[HideInInspector]
public int delayType = 0;
private void Start()
{
if (normalCourses != null)
{
TSR_Course[] array = normalCourses;
foreach (TSR_Course tSR_Course in array)
{
tSR_Course.linkedcourse = this;
}
}
if (configurableCourses == null)
{
return;
}
TSR_Configurable_Course[] array2 = configurableCourses;
foreach (TSR_Configurable_Course tSR_Configurable_Course in array2)
{
TSR_Course[] courses = tSR_Configurable_Course.courses;
foreach (TSR_Course tSR_Course2 in courses)
{
tSR_Course2.linkedcourse = this;
}
}
}
public void Update()
{
if (isDelayingStart)
{
CheckDelay();
}
else if (isCoursesActive && isScoringEnabled)
{
timeTaken += Time.deltaTime;
}
}
public void StartCourses()
{
if (!instantEnable)
{
if ((startDelay.x > -1f && !isDelayingStart) || (startDelay.y > -1f && !isDelayingStart))
{
BeginDelayingStart(2);
return;
}
if (isDelayingStart && timetillStart <= 0f)
{
isDelayingStart = false;
}
else if (isDelayingStart)
{
isDelayingStart = false;
return;
}
}
if (normalCourses != null)
{
TSR_Course[] array = normalCourses;
foreach (TSR_Course tSR_Course in array)
{
tSR_Course.SpawnTargets();
}
}
if (configurableCourses != null)
{
TSR_Configurable_Course[] array2 = configurableCourses;
foreach (TSR_Configurable_Course tSR_Configurable_Course in array2)
{
tSR_Configurable_Course.courses[tSR_Configurable_Course.courseIndex].SpawnTargets();
}
}
if (!isCoursesActive)
{
isCoursesActive = true;
}
else
{
isCoursesActive = false;
if (isScoringEnabled)
{
maxscore = 0f;
score = 0f;
timeTaken = 0f;
}
}
UpdateVis();
UpdateScore();
}
public void ResetCourses()
{
if ((startDelay.x > -1f && !isDelayingStart) || (startDelay.y > -1f && !isDelayingStart))
{
BeginDelayingStart(1);
return;
}
if (isDelayingStart && timetillStart <= 0f)
{
isDelayingStart = false;
}
else if (isDelayingStart)
{
return;
}
if (normalCourses != null)
{
TSR_Course[] array = normalCourses;
foreach (TSR_Course tSR_Course in array)
{
tSR_Course.ResetTargets();
}
}
if (configurableCourses != null)
{
TSR_Configurable_Course[] array2 = configurableCourses;
foreach (TSR_Configurable_Course tSR_Configurable_Course in array2)
{
tSR_Configurable_Course.courses[tSR_Configurable_Course.courseIndex].ResetTargets();
}
}
if (isScoringEnabled)
{
maxscore = 0f;
score = 0f;
timeTaken = 0f;
UpdateScore();
}
}
public void BeginDelayingStart(int delaytype)
{
timetillStart = Random.Range(startDelay.x, startDelay.y);
delayType = delaytype;
isDelayingStart = true;
}
public void CheckDelay()
{
timetillStart -= Time.deltaTime;
if (timetillStart <= 0f)
{
if (delayType == 1)
{
ResetCourses();
}
else if (delayType == 2)
{
StartCourses();
}
AudioSource[] array = delayedStartAudio;
foreach (AudioSource val in array)
{
val.Play();
}
}
}
public void UpdateVis()
{
if (isCoursesActive)
{
if ((Object)(object)enabledVis != (Object)null)
{
enabledVis.SetActive(true);
}
if ((Object)(object)disabledVis != (Object)null)
{
disabledVis.SetActive(false);
}
}
else
{
if ((Object)(object)enabledVis != (Object)null)
{
enabledVis.SetActive(false);
}
if ((Object)(object)disabledVis != (Object)null)
{
disabledVis.SetActive(true);
}
}
externalButtons.ForEach(delegate(TSR_ExternalButton b)
{
b.UpdateVis();
});
}
public void UpdateScore()
{
if (scoreDisplays != null)
{
string text = FormatScore(score, maxscore);
Text[] array = scoreDisplays;
foreach (Text val in array)
{
if ((Object)(object)val != (Object)null)
{
val.text = text;
}
}
}
if (timeDisplays == null)
{
return;
}
string text2 = FormatTime(timeTaken);
Text[] array2 = timeDisplays;
foreach (Text val2 in array2)
{
if ((Object)(object)val2 != (Object)null)
{
val2.text = text2;
}
}
}
private string FormatScore(float current, float max)
{
current = (float)Math.Round(current, 3);
max = (float)Math.Round(max, 3);
int decimalPlaces = GetDecimalPlaces(current);
int decimalPlaces2 = GetDecimalPlaces(max);
int num = Mathf.Max(decimalPlaces, decimalPlaces2);
num = Mathf.Min(num, 3);
string text = "F" + num;
return $"{current.ToString(text, CultureInfo.InvariantCulture)}/{max.ToString(text, CultureInfo.InvariantCulture)}";
}
private int GetDecimalPlaces(float value)
{
string text = value.ToString(CultureInfo.InvariantCulture);
int num = text.IndexOf('.');
return (num >= 0) ? Mathf.Min(text.Length - num - 1, 3) : 0;
}
public static string FormatTime(float timeSeconds)
{
if (timeSeconds < 0f)
{
timeSeconds = 0f;
}
int num = Mathf.FloorToInt(timeSeconds / 60f);
float num2 = timeSeconds % 60f;
num2 = Mathf.Round(num2 * 1000f) / 1000f;
if (num > 0)
{
return $"{num}:{num2:00.000}";
}
if (num2 >= 10f)
{
return $"{num2:00.000}";
}
return $"{num2:0.000}";
}
private void OnTriggerEnter(Collider collider)
{
if (!buttonPressed && ((Component)collider).gameObject.tag == "GameController")
{
StartCourses();
buttonPressed = true;
}
}
private void OnTriggerExit(Collider collider)
{
if (((Component)collider).gameObject.tag == "GameController")
{
buttonPressed = false;
}
}
private void OnDisable()
{
if (isCoursesActive)
{
StartCourses();
}
}
private void OnEnable()
{
if (isCoursesEnabledAtStart && !isCoursesActive)
{
StartCourses();
}
else if (!isCoursesEnabledAtStart && !isCoursesActive)
{
isCoursesActive = false;
UpdateVis();
}
}
}
public class TSR_ExternalButton : MonoBehaviour
{
public TSR_Course mainButton;
public bool isLinkedCourseButton;
public TSR_Course_Linker mainLinkedCourse;
public bool isResetButton;
public AudioSource resetAudio;
[Tooltip("Game Object thats enabled whenever the targets are turned on")]
public GameObject enabledVis;
[Tooltip("Game Object thats enabled whenever the targets are turned off")]
public GameObject disabledVis;
[HideInInspector]
public bool buttonPressed;
private void Start()
{
if ((Object)(object)mainButton != (Object)null)
{
mainButton.externalButtons.Add(this);
}
if ((Object)(object)mainLinkedCourse != (Object)null)
{
mainLinkedCourse.externalButtons.Add(this);
}
UpdateVis();
if ((Object)(object)mainLinkedCourse != (Object)null && !isLinkedCourseButton)
{
Debug.LogWarning((object)("Linked course assigned on TSR_ExternalButton: \"" + ((Object)((Component)this).gameObject).name + "\" but is not marked as \"isLinkedCourseButton\""));
}
if ((Object)(object)mainButton != (Object)null && isLinkedCourseButton)
{
Debug.LogWarning((object)("Normal course assigned on TSR_ExternalButton: \"" + ((Object)((Component)this).gameObject).name + "\" but is marked as \"isLinkedCourseButton\""));
}
if ((Object)(object)mainButton != (Object)null && (Object)(object)mainLinkedCourse != (Object)null)
{
Debug.LogWarning((object)("TSR_ExternalButton: \"" + ((Object)((Component)this).gameObject).name + "\" has both a normal and linked course assigned. This is unsupported and may cause issues"));
}
}
public void UpdateVis()
{
if (((Object)(object)mainButton != (Object)null && mainButton.isTargetsActive) || ((Object)(object)mainLinkedCourse != (Object)null && mainLinkedCourse.isCoursesActive))
{
if ((Object)(object)enabledVis != (Object)null)
{
enabledVis.SetActive(true);
}
if ((Object)(object)disabledVis != (Object)null)
{
disabledVis.SetActive(false);
}
}
else
{
if ((Object)(object)enabledVis != (Object)null)
{
enabledVis.SetActive(false);
}
if ((Object)(object)disabledVis != (Object)null)
{
disabledVis.SetActive(true);
}
}
}
public void ClickButton()
{
if (isResetButton && !isLinkedCourseButton && mainButton.isTargetsActive)
{
mainButton.ResetTargets();
resetAudio.Play();
}
else if (isResetButton && isLinkedCourseButton && mainLinkedCourse.isCoursesActive)
{
mainLinkedCourse.ResetCourses();
resetAudio.Play();
}
else if (!isLinkedCourseButton && !isResetButton)
{
mainButton.SpawnTargets();
}
else if (isLinkedCourseButton && !isResetButton)
{
mainLinkedCourse.StartCourses();
}
}
private void OnTriggerEnter(Collider collider)
{
if (!buttonPressed && ((Component)collider).gameObject.tag == "GameController")
{
ClickButton();
buttonPressed = true;
}
}
private void OnTriggerExit(Collider collider)
{
if (((Component)collider).gameObject.tag == "GameController")
{
buttonPressed = false;
}
}
}
public class TSR_Scoring : MonoBehaviour
{
[Tooltip("How many hits count for score.")]
public int hitsToScore = 1;
[Tooltip("Enables hitting the target more than it's hitsToScore, counting the best hits instead.")]
public bool bestHitsScore = false;
public List<TSR_ScoringHitbox> hitBoxes = new List<TSR_ScoringHitbox>();
[HideInInspector]
public List<Vector2> hits = new List<Vector2>();
[HideInInspector]
public float maxScore;
[HideInInspector]
public TSR_Course course;
public void CalculateValue()
{
float num = 0f;
for (int i = 0; i < hitBoxes.Count; i++)
{
hitBoxes[i].myScore = this;
float num2 = hitBoxes[i].hitValue * hitBoxes[i].hitPowerFactor.y;
if (num2 > num)
{
num = num2;
}
}
maxScore = num * (float)hitsToScore;
if ((Object)(object)course != (Object)null)
{
course.maxscore += maxScore;
}
if ((Object)(object)course != (Object)null && (Object)(object)course.linkedcourse != (Object)null)
{
course.linkedcourse.maxscore += maxScore;
}
}
public void AddNewHit(Vector2 hit)
{
//IL_0045: Unknown result type (might be due to invalid IL or missing references)
//IL_014a: Unknown result type (might be due to invalid IL or missing references)
//IL_014f: Unknown result type (might be due to invalid IL or missing references)
//IL_0167: 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_0183: 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_0281: Unknown result type (might be due to invalid IL or missing references)
//IL_0221: 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_0264: Unknown result type (might be due to invalid IL or missing references)
//IL_0269: Unknown result type (might be due to invalid IL or missing references)
if ((Object)(object)course == (Object)null || course.isDelayingStart)
{
return;
}
if (hits.Count < hitsToScore)
{
hits.Add(hit);
course.score += hit.x;
if ((Object)(object)course.linkedcourse != (Object)null)
{
course.linkedcourse.score += hit.x;
}
if (hit.y != 0f)
{
course.timeTaken += hit.y;
if ((Object)(object)course.linkedcourse != (Object)null)
{
course.linkedcourse.timeTaken += hit.y;
}
}
course.UpdateScore();
if ((Object)(object)course.linkedcourse != (Object)null)
{
course.linkedcourse.UpdateScore();
}
}
else
{
if (!bestHitsScore)
{
return;
}
int index = 0;
float x = hits[0].x;
for (int i = 1; i < hits.Count; i++)
{
if (hits[i].x < x)
{
x = hits[i].x;
index = i;
}
}
if (!(hit.x > x))
{
return;
}
course.score -= x;
if ((Object)(object)course.linkedcourse != (Object)null)
{
course.linkedcourse.score -= x;
}
if (hit.y != 0f)
{
course.timeTaken -= hits[index].y;
if ((Object)(object)course.linkedcourse != (Object)null)
{
course.linkedcourse.timeTaken -= hits[index].y;
}
}
hits[index] = hit;
course.score += hit.x;
if ((Object)(object)course.linkedcourse != (Object)null)
{
course.linkedcourse.score += hit.x;
}
if (hit.y != 0f)
{
course.timeTaken += hit.y;
if ((Object)(object)course.linkedcourse != (Object)null)
{
course.linkedcourse.timeTaken += hit.y;
}
}
course.UpdateScore();
if ((Object)(object)course.linkedcourse != (Object)null)
{
course.linkedcourse.UpdateScore();
}
}
}
}
public class TSR_ScoringHitbox : MonoBehaviour, IFVRDamageable
{
[Tooltip("Ammount of score this hitbox is worth when hit.")]
public float hitValue = 1f;
public Vector2 hitPowerFactor = new Vector2(1f, 1f);
public Vector2 hitPowerFactorThresholds = new Vector2(-1f, -1f);
[Tooltip("Time added (or removed with negative numbers) from the timer when this hit box is hit.")]
public float hitTime = 0f;
[Tooltip("The ammount of damage a hit has to exceed to score.")]
public float damageThreshold = 5f;
[Tooltip("Ignores damage from melee counting as a hit when true.")]
public bool ignoreMelee = true;
[Tooltip("Prints how much damage this hit box takes to the log for fine tuning the damage threshold. (respects whether ignoreMelee is true or not)")]
public bool doesDebugLogHits;
[HideInInspector]
public Vector2 valuestoadd;
[HideInInspector]
public TSR_Scoring myScore;
public void Damage(Damage d)
{
//IL_0112: 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_014b: 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)
if (ignoreMelee)
{
if (d.Dam_TotalEnergetic + d.Dam_TotalKinetic - d.Dam_Blunt > damageThreshold)
{
if (hitPowerFactorThresholds.x < 0f || hitPowerFactorThresholds.y < 0f)
{
myScore.AddNewHit(new Vector2(hitValue, hitTime));
}
else
{
float num = hitValue * GetPowerFactor(d.Dam_TotalEnergetic + d.Dam_TotalKinetic - d.Dam_Blunt);
myScore.AddNewHit(new Vector2(num, hitTime));
}
}
}
else if (d.Dam_TotalEnergetic + d.Dam_TotalKinetic > damageThreshold)
{
if (hitPowerFactorThresholds.x < 0f || hitPowerFactorThresholds.y < 0f)
{
myScore.AddNewHit(new Vector2(hitValue, hitTime));
}
else
{
float num2 = hitValue * GetPowerFactor(d.Dam_TotalEnergetic + d.Dam_TotalKinetic);
myScore.AddNewHit(new Vector2(num2, hitTime));
}
}
if (doesDebugLogHits && ignoreMelee)
{
if (d.Dam_TotalEnergetic + d.Dam_TotalKinetic - d.Dam_Blunt > 0f)
{
Debug.Log((object)("TSR_ScoringHitbox: \"" + ((Object)((Component)this).gameObject).name + "\" hit with: \"" + (d.Dam_TotalEnergetic + d.Dam_TotalKinetic - d.Dam_Blunt) + "\" damage"));
}
}
else if (doesDebugLogHits)
{
Debug.Log((object)("TSR_ScoringHitbox: \"" + ((Object)((Component)this).gameObject).name + "\" hit with: \"" + (d.Dam_TotalEnergetic + d.Dam_TotalKinetic) + "\" damage"));
}
}
private float GetPowerFactor(float damage)
{
float num = Mathf.Clamp(damage, hitPowerFactorThresholds.x, hitPowerFactorThresholds.y);
float num2 = (num - hitPowerFactorThresholds.x) / (hitPowerFactorThresholds.y - hitPowerFactorThresholds.x);
return Mathf.Lerp(hitPowerFactor.x, hitPowerFactor.y, num2);
}
}
public class TSR_Target : MonoBehaviour
{
[Header("Target Setup")]
[Tooltip("Spawn this object ID at this transform")]
public string[] itemID;
[Tooltip("Spawn a custom prefab at this transform")]
public GameObject[] targetPrefab;
[Tooltip("Spawn a custom or vanilla sosig at this transform")]
public TSR_Target_Sosig[] sosig;
[Tooltip("Makes sure the object that is spawned is unable to be affected by physics (by checking for rigidbodies and making them kinematic)")]
public bool isPhysicsLocked;
[Tooltip("Chance this target spawns when called on (0-1)")]
[Range(0f, 1f)]
public float spawnChance = 1f;
[Tooltip("Enables this target to contribute to scoring. (Does nothing if the course spawning this target does not have scoring enabled)")]
public bool isScored = false;
[Header("Scoring Defaults")]
[Tooltip("How many hits count for score.")]
public int hitsToScore = 1;
[Tooltip("Enables hitting the target more than it's hitsToScore, counting the best hits instead.")]
public bool bestHitsScore = false;
[Tooltip("Ammount of score this hitbox is worth when hit.")]
public float hitValue = 1f;
public Vector2 hitPowerFactor = new Vector2(1f, 1f);
public Vector2 hitPowerFactorThresholds = new Vector2(-1f, -1f);
[Tooltip("Time added (or removed with negative numbers) from the timer when this hit box is hit.")]
public float hitTime = 0f;
[Tooltip("The ammount of damage a hit has to exceed to score.")]
public float damageThreshold = 5f;
[Tooltip("Ignores damage from melee counting as a hit when true.")]
public bool ignoreMelee = true;
[Tooltip("Prints how much damage this hit box takes to the log for fine tuning the damage threshold. (respects whether ignoreMelee is true or not)")]
public bool doesDebugLogHits;
[HideInInspector]
public List<object> mixedTargets = new List<object>();
[HideInInspector]
public bool isActive;
private void Start()
{
mixedTargets.AddRange(itemID);
mixedTargets.AddRange(targetPrefab);
mixedTargets.AddRange(sosig);
}
private void OnDrawGizmos()
{
//IL_004d: Unknown result type (might be due to invalid IL or missing references)
//IL_005d: Unknown result type (might be due to invalid IL or missing references)
//IL_0072: Unknown result type (might be due to invalid IL or missing references)
//IL_007d: 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_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_00a8: 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_00d7: Unknown result type (might be due to invalid IL or missing references)
//IL_00e7: Unknown result type (might be due to invalid IL or missing references)
//IL_00f7: Unknown result type (might be due to invalid IL or missing references)
//IL_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_011d: Unknown result type (might be due to invalid IL or missing references)
//IL_0132: Unknown result type (might be due to invalid IL or missing references)
if ((itemID != null && itemID.Length > 0) || (targetPrefab != null && targetPrefab.Length > 0) || (sosig != null && sosig.Length > 0))
{
Gizmos.color = Color.yellow;
Gizmos.DrawSphere(((Component)this).transform.position, 0.1f);
Gizmos.DrawLine(((Component)this).transform.position, ((Component)this).transform.position + ((Component)this).transform.forward * 0.25f);
}
else
{
Gizmos.color = Color.gray;
Gizmos.DrawSphere(((Component)this).gameObject.transform.position, 0.1f);
Gizmos.DrawLine(((Component)this).gameObject.transform.position, ((Component)this).gameObject.transform.position + ((Component)this).gameObject.transform.forward * 0.25f);
}
if (isPhysicsLocked)
{
Gizmos.color = Color.green;
Gizmos.DrawWireSphere(((Component)this).gameObject.transform.position, 0.11f);
}
}
}
[Serializable]
public class TSR_Target_Sosig
{
[Tooltip("Vanilla sosigs already built in")]
public SosigEnemyID vanillaSosigType;
[Tooltip("Will ignore the vanilla sosig input when enabled")]
public bool usesCustomSosigID = false;
[Tooltip("For using sosig IDs for packer's custom sosig loader")]
public int customSosigID = 0;
[Header("Sosig Options")]
[Tooltip("The IFF of this sosig")]
public int iFF = 0;
[Tooltip("Whether this sosig spawns with its AI enabled or not")]
public bool spawnActive = true;
[Tooltip("The state this sosig spawns in")]
public SosigOrder spawnState = (SosigOrder)9;
[Tooltip("What equipment this sosig is allowed to spawn with (eg: if you use only primary, this sosig wont spawn with any other gear it otherwise could spawn with)")]
public EquipmentSlots equipmentMode = (EquipmentSlots)7;
[Tooltip("I honestly dont know what happens if you disable this, use at your own peril")]
public bool spawnWithFullAmmo = true;
[Tooltip("Enable this if this sosig is supposed to be passive otherwise they'll immediately start trying to find a gun and cowering")]
public bool ignoresNeedForWeapon = false;
[Header("Pathing Options")]
[Tooltip("Enable if you want this sosig to follow a path (eg: patrol or wander). Leave disabled if you want your sosig to stay where they spawn unless otherwise agrod")]
public bool doesPath = false;
[Tooltip("The points this sosig paths between")]
public Transform[] pathPoints;
[Tooltip("The speed this sosig paths between points")]
public SosigMoveSpeed pathingMoveSpeed = (SosigMoveSpeed)3;
[Tooltip("The behavior this sosig uses when looping through the pathing points")]
public PathLoopType pathingLoopType = (PathLoopType)4;
[Tooltip("Honestly, I forgot what this does, play with it and see lol")]
public bool pathingIsPatrol = true;
}
public class CuttableMesh
{
private MeshRenderer inputMeshRenderer;
private bool hasUvs;
private bool hasUv1s;
private bool hasColours;
private List<CuttableSubMesh> subMeshes;
public CuttableMesh(Mesh inputMesh)
{
Init(inputMesh, ((Object)inputMesh).name);
}
public CuttableMesh(MeshRenderer input)
{
inputMeshRenderer = input;
MeshFilter component = ((Component)input).GetComponent<MeshFilter>();
Mesh sharedMesh = component.sharedMesh;
Init(sharedMesh, ((Object)input).name);
}
public CuttableMesh(CuttableMesh inputMesh, List<CuttableSubMesh> newSubMeshes)
{
inputMeshRenderer = inputMesh.inputMeshRenderer;
hasUvs = inputMesh.hasUvs;
hasUv1s = inputMesh.hasUv1s;
hasColours = inputMesh.hasColours;
subMeshes = new List<CuttableSubMesh>();
subMeshes.AddRange(newSubMeshes);
}
private void Init(Mesh inputMesh, string debugName)
{
subMeshes = new List<CuttableSubMesh>();
if (inputMesh.isReadable)
{
Vector3[] vertices = inputMesh.vertices;
Vector3[] normals = inputMesh.normals;
Vector2[] uv = inputMesh.uv;
Vector2[] uv2 = inputMesh.uv2;
Color32[] colors = inputMesh.colors32;
hasUvs = uv != null && uv.Length > 0;
hasUv1s = uv2 != null && uv2.Length > 0;
hasColours = colors != null && colors.Length > 0;
for (int i = 0; i < inputMesh.subMeshCount; i++)
{
int[] indices = inputMesh.GetIndices(i);
CuttableSubMesh item = new CuttableSubMesh(indices, vertices, normals, colors, uv, uv2);
subMeshes.Add(item);
}
}
else
{
Debug.LogError((object)("CuttableMesh's input mesh is not readable: " + debugName), (Object)(object)inputMesh);
}
}
public void Add(CuttableMesh other)
{
if (subMeshes.Count != other.subMeshes.Count)
{
throw new Exception("Mismatched submesh count");
}
for (int i = 0; i < subMeshes.Count; i++)
{
subMeshes[i].Add(other.subMeshes[i]);
}
}
public int NumSubMeshes()
{
return subMeshes.Count;
}
public bool HasUvs()
{
return hasUvs;
}
public bool HasColours()
{
return hasColours;
}
public List<CuttableSubMesh> GetSubMeshes()
{
return subMeshes;
}
public CuttableSubMesh GetSubMesh(int index)
{
return subMeshes[index];
}
public Transform GetTransform()
{
if ((Object)(object)inputMeshRenderer != (Object)null)
{
return ((Component)inputMeshRenderer).transform;
}
return null;
}
public MeshRenderer ConvertToRenderer(string newObjectName)
{
//IL_001b: Unknown result type (might be due to invalid IL or missing references)
//IL_0021: Expected O, but got Unknown
//IL_003d: Unknown result type (might be due to invalid IL or missing references)
//IL_004d: Unknown result type (might be due to invalid IL or missing references)
//IL_005d: 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_0097: 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)
Mesh val = CreateMesh();
if (val.vertexCount == 0)
{
return null;
}
GameObject val2 = new GameObject(newObjectName);
val2.transform.SetParent(((Component)inputMeshRenderer).transform);
val2.transform.localPosition = Vector3.zero;
val2.transform.localRotation = Quaternion.identity;
val2.transform.localScale = Vector3.one;
MeshFilter val3 = val2.AddComponent<MeshFilter>();
val3.mesh = val;
MeshRenderer val4 = val2.AddComponent<MeshRenderer>();
((Renderer)val4).shadowCastingMode = ((Renderer)inputMeshRenderer).shadowCastingMode;
((Renderer)val4).reflectionProbeUsage = ((Renderer)inputMeshRenderer).reflectionProbeUsage;
((Renderer)val4).lightProbeUsage = ((Renderer)inputMeshRenderer).lightProbeUsage;
((Renderer)val4).sharedMaterials = ((Renderer)inputMeshRenderer).sharedMaterials;
return val4;
}
public Mesh CreateMesh()
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Expected O, but got Unknown
Mesh val = new Mesh();
int num = 0;
for (int i = 0; i < subMeshes.Count; i++)
{
num += subMeshes[i].NumIndices();
}
List<Vector3> list = new List<Vector3>();
List<Vector3> list2 = new List<Vector3>();
List<Color32> list3 = ((!hasColours) ? null : new List<Color32>());
List<Vector2> list4 = ((!hasUvs) ? null : new List<Vector2>());
List<Vector2> list5 = ((!hasUv1s) ? null : new List<Vector2>());
List<int> list6 = new List<int>();
foreach (CuttableSubMesh subMesh in subMeshes)
{
list6.Add(list.Count);
subMesh.AddTo(list, list2, list3, list4, list5);
}
val.vertices = list.ToArray();
val.normals = list2.ToArray();
val.colors32 = ((!hasColours) ? null : list3.ToArray());
val.uv = ((!hasUvs) ? null : list4.ToArray());
val.uv2 = ((!hasUv1s) ? null : list5.ToArray());
val.subMeshCount = subMeshes.Count;
for (int j = 0; j < subMeshes.Count; j++)
{
CuttableSubMesh cuttableSubMesh = subMeshes[j];
int num2 = list6[j];
int[] array = cuttableSubMesh.GenIndices();
for (int k = 0; k < array.Length; k++)
{
array[k] += num2;
}
val.SetTriangles(array, j, true);
}
return val;
}
}
public class CuttableSubMesh
{
private List<Vector3> vertices;
private List<Vector3> normals;
private List<Color32> colours;
private List<Vector2> uvs;
private List<Vector2> uv1s;
public CuttableSubMesh(bool hasNormals, bool hasColours, bool hasUvs, bool hasUv1)
{
vertices = new List<Vector3>();
if (hasNormals)
{
normals = new List<Vector3>();
}
if (hasColours)
{
colours = new List<Color32>();
}
if (hasUvs)
{
uvs = new List<Vector2>();
}
if (hasUv1)
{
uv1s = new List<Vector2>();
}
}
public CuttableSubMesh(int[] indices, Vector3[] inputVertices, Vector3[] inputNormals, Color32[] inputColours, Vector2[] inputUvs, Vector2[] inputUv1)
{
//IL_0099: Unknown result type (might be due to invalid IL or missing references)
//IL_00bb: Unknown result type (might be due to invalid IL or missing references)
//IL_00de: 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_0124: Unknown result type (might be due to invalid IL or missing references)
vertices = new List<Vector3>();
if (inputNormals != null && inputNormals.Length > 0)
{
normals = new List<Vector3>();
}
if (inputColours != null && inputColours.Length > 0)
{
colours = new List<Color32>();
}
if (inputUvs != null && inputUvs.Length > 0)
{
uvs = new List<Vector2>();
}
if (inputUv1 != null && inputUv1.Length > 0)
{
uv1s = new List<Vector2>();
}
foreach (int num in indices)
{
vertices.Add(inputVertices[num]);
if (normals != null)
{
normals.Add(inputNormals[num]);
}
if (colours != null)
{
colours.Add(inputColours[num]);
}
if (uvs != null)
{
uvs.Add(inputUvs[num]);
}
if (uv1s != null)
{
uv1s.Add(inputUv1[num]);
}
}
}
public void Add(CuttableSubMesh other)
{
for (int i = 0; i < other.vertices.Count; i++)
{
CopyVertex(i, other);
}
}
public int NumVertices()
{
return vertices.Count;
}
public Vector3 GetVertex(int index)
{
//IL_0008: 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)
return vertices[index];
}
public bool HasNormals()
{
return normals != null;
}
public bool HasColours()
{
return colours != null;
}
public bool HasUvs()
{
return uvs != null;
}
public bool HasUv1()
{
return uv1s != null;
}
public void CopyVertex(int srcIndex, CuttableSubMesh srcMesh)
{
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
//IL_0030: Unknown result type (might be due to invalid IL or missing references)
//IL_0052: 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_0096: Unknown result type (might be due to invalid IL or missing references)
vertices.Add(srcMesh.vertices[srcIndex]);
if (normals != null)
{
normals.Add(srcMesh.normals[srcIndex]);
}
if (colours != null)
{
colours.Add(srcMesh.colours[srcIndex]);
}
if (uvs != null)
{
uvs.Add(srcMesh.uvs[srcIndex]);
}
if (uv1s != null)
{
uv1s.Add(srcMesh.uv1s[srcIndex]);
}
}
public void AddInterpolatedVertex(int i0, int i1, float weight, CuttableSubMesh srcMesh)
{
//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_000d: Unknown result type (might be due to invalid IL or missing references)
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
//IL_0019: Unknown result type (might be due to invalid IL or missing references)
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
//IL_001c: 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_004c: Unknown result type (might be due to invalid IL or missing references)
//IL_0052: Unknown result type (might be due to invalid IL or missing references)
//IL_0057: Unknown result type (might be due to invalid IL or missing references)
//IL_005a: Unknown result type (might be due to invalid IL or missing references)
//IL_007d: Unknown result type (might be due to invalid IL or missing references)
//IL_008a: Unknown result type (might be due to invalid IL or missing references)
//IL_0090: Unknown result type (might be due to invalid IL or missing references)
//IL_00b3: 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_00c6: Unknown result type (might be due to invalid IL or missing references)
//IL_00e9: Unknown result type (might be due to invalid IL or missing references)
//IL_00f6: Unknown result type (might be due to invalid IL or missing references)
//IL_00fc: Unknown result type (might be due to invalid IL or missing references)
Vector3 vertex = srcMesh.GetVertex(i0);
Vector3 vertex2 = srcMesh.GetVertex(i1);
vertices.Add(Vector3.Lerp(vertex, vertex2, weight));
if (normals != null)
{
List<Vector3> list = normals;
Vector3 val = Vector3.Lerp(srcMesh.normals[i0], srcMesh.normals[i1], weight);
list.Add(((Vector3)(ref val)).normalized);
}
if (colours != null)
{
colours.Add(Color32.Lerp(srcMesh.colours[i0], srcMesh.colours[i1], weight));
}
if (uvs != null)
{
uvs.Add(Vector2.Lerp(srcMesh.uvs[i0], srcMesh.uvs[i1], weight));
}
if (uv1s != null)
{
uv1s.Add(Vector2.Lerp(srcMesh.uv1s[i0], srcMesh.uv1s[i1], weight));
}
}
public void AddTo(List<Vector3> destVertices, List<Vector3> destNormals, List<Color32> destColours, List<Vector2> destUvs, List<Vector2> destUv1s)
{
destVertices.AddRange(vertices);
if (normals != null)
{
destNormals.AddRange(normals);
}
if (colours != null)
{
destColours.AddRange(colours);
}
if (uvs != null)
{
destUvs.AddRange(uvs);
}
if (uv1s != null)
{
destUv1s.AddRange(uv1s);
}
}
public int NumIndices()
{
return vertices.Count;
}
public int[] GenIndices()
{
int[] array = new int[vertices.Count];
for (int i = 0; i < array.Length; i++)
{
array[i] = i;
}
return array;
}
}
public enum VertexClassification
{
Front = 1,
Back = 2,
OnPlane = 4
}
public class MeshCutter
{
private CuttableMesh inputMesh;
private List<CuttableSubMesh> outputFrontSubMeshes;
private List<CuttableSubMesh> outputBackSubMeshes;
public void Cut(CuttableMesh input, Plane worldCutPlane)
{
//IL_0067: 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_0038: Unknown result type (might be due to invalid IL or missing references)
//IL_0039: Unknown result type (might be due to invalid IL or missing references)
//IL_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_004c: Unknown result type (might be due to invalid IL or missing references)
//IL_0051: Unknown result type (might be due to invalid IL or missing references)
//IL_0056: 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_005a: 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)
inputMesh = input;
outputFrontSubMeshes = new List<CuttableSubMesh>();
outputBackSubMeshes = new List<CuttableSubMesh>();
Transform transform = inputMesh.GetTransform();
Plane cutPlane = default(Plane);
if ((Object)(object)transform != (Object)null)
{
Vector3 val = transform.InverseTransformPoint(ClosestPointOnPlane(worldCutPlane, Vector3.zero));
Vector3 val2 = transform.InverseTransformDirection(((Plane)(ref worldCutPlane)).normal);
((Plane)(ref cutPlane))..ctor(val2, val);
}
else
{
cutPlane = worldCutPlane;
}
foreach (CuttableSubMesh subMesh in input.GetSubMeshes())
{
Cut(subMesh, cutPlane);
}
}
private static Vector3 ClosestPointOnPlane(Plane plane, Vector3 point)
{
//IL_0003: Unknown result type (might be due to invalid IL or missing references)
//IL_000c: Unknown result type (might be due to invalid IL or missing references)
//IL_0032: 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_003b: Unknown result type (might be due to invalid IL or missing references)
//IL_0040: Unknown result type (might be due to invalid IL or missing references)
//IL_0045: Unknown result type (might be due to invalid IL or missing references)
//IL_0018: 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_0021: Unknown result type (might be due to invalid IL or missing references)
//IL_0026: Unknown result type (might be due to invalid IL or missing references)
//IL_002b: Unknown result type (might be due to invalid IL or missing references)
//IL_004b: Unknown result type (might be due to invalid IL or missing references)
float distanceToPoint = ((Plane)(ref plane)).GetDistanceToPoint(point);
if (((Plane)(ref plane)).GetSide(point))
{
return point - ((Plane)(ref plane)).normal * distanceToPoint;
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Logging;
using FistVR;
using HarmonyLib;
using OtherLoader;
using UnityEngine;
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("0.0.0.0")]
[module: UnverifiableCode]
public class FlickerLight : MonoBehaviour
{
public float MinLightIntensity = 0.5f;
public float MaxLightIntensity = 2.3f;
public float AccelerateTime = 0.15f;
private float _targetIntensity = 1f;
private float _lastIntensity = 1f;
private float _timePassed = 0f;
private Light _lt;
private const double Tolerance = 0.0001;
private void Start()
{
_lt = ((Component)this).GetComponent<Light>();
_lastIntensity = _lt.intensity;
FixedUpdate();
}
private void FixedUpdate()
{
_timePassed += Time.deltaTime;
_lt.intensity = Mathf.Lerp(_lastIntensity, _targetIntensity, _timePassed / AccelerateTime);
if ((double)Mathf.Abs(_lt.intensity - _targetIntensity) < 0.0001)
{
_lastIntensity = _lt.intensity;
_targetIntensity = Random.Range(MinLightIntensity, MaxLightIntensity);
_timePassed = 0f;
}
}
}
[RequireComponent(typeof(MeshRenderer))]
public class UVOffset : MonoBehaviour
{
public float scrollSpeed = 0.5f;
public bool scrollY = true;
private MeshRenderer renderer;
private void Start()
{
renderer = ((Component)this).GetComponent<MeshRenderer>();
}
private void Update()
{
//IL_003f: 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)
float num = Time.time * scrollSpeed;
((Renderer)renderer).material.SetTextureOffset("_MainTex", (!scrollY) ? new Vector2(0f, num) : new Vector2(num, 0f));
}
}
namespace Storymods.BundleBags;
[BepInPlugin("Storymods.BundleBags", "BundleBags", "1.0.0")]
[BepInProcess("h3vr.exe")]
[Description("Built with MeatKit")]
[BepInDependency("h3vr.otherloader", "1.3.0")]
public class BundleBagsPlugin : BaseUnityPlugin
{
private static readonly string BasePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
internal static ManualLogSource Logger;
private void Awake()
{
Logger = ((BaseUnityPlugin)this).Logger;
LoadAssets();
}
private void LoadAssets()
{
Harmony.CreateAndPatchAll(Assembly.GetExecutingAssembly(), "Storymods.BundleBags");
OtherLoader.RegisterDirectLoad(BasePath, "Storymods.BundleBags", "", "", "bundlebags", "");
}
}
public class Cabernade : MonoBehaviour
{
public GameObject caberUnexploded;
public GameObject caberExploded;
public bool isCaberKablooey;
public void OnCollisionEnter(Collision col)
{
if (!isCaberKablooey)
{
CaberBlowUp();
}
}
public void CaberBlowUp()
{
caberUnexploded.SetActive(false);
caberExploded.SetActive(true);
isCaberKablooey = true;
}
}
public class SosigRangeEditor : MonoBehaviour
{
public GameObject sosigParent;
public float modifierNumber = 1f;
public bool doesHavePerfectFOV = false;
private void Start()
{
sosigParent = ((Component)((Component)this).transform.root).gameObject;
Sosig component = ((Component)((Component)this).transform).GetComponent<Sosig>();
component.MaxSightRange *= modifierNumber;
if (doesHavePerfectFOV)
{
component.MaxFOV = 360f;
}
else
{
component.MaxFOV *= modifierNumber;
}
}
}
public class CuttableMesh
{
private MeshRenderer inputMeshRenderer;
private bool hasUvs;
private bool hasUv1s;
private bool hasColours;
private List<CuttableSubMesh> subMeshes;
public CuttableMesh(Mesh inputMesh)
{
Init(inputMesh, ((Object)inputMesh).name);
}
public CuttableMesh(MeshRenderer input)
{
inputMeshRenderer = input;
MeshFilter component = ((Component)input).GetComponent<MeshFilter>();
Mesh sharedMesh = component.sharedMesh;
Init(sharedMesh, ((Object)input).name);
}
public CuttableMesh(CuttableMesh inputMesh, List<CuttableSubMesh> newSubMeshes)
{
inputMeshRenderer = inputMesh.inputMeshRenderer;
hasUvs = inputMesh.hasUvs;
hasUv1s = inputMesh.hasUv1s;
hasColours = inputMesh.hasColours;
subMeshes = new List<CuttableSubMesh>();
subMeshes.AddRange(newSubMeshes);
}
private void Init(Mesh inputMesh, string debugName)
{
subMeshes = new List<CuttableSubMesh>();
if (inputMesh.isReadable)
{
Vector3[] vertices = inputMesh.vertices;
Vector3[] normals = inputMesh.normals;
Vector2[] uv = inputMesh.uv;
Vector2[] uv2 = inputMesh.uv2;
Color32[] colors = inputMesh.colors32;
hasUvs = uv != null && uv.Length > 0;
hasUv1s = uv2 != null && uv2.Length > 0;
hasColours = colors != null && colors.Length > 0;
for (int i = 0; i < inputMesh.subMeshCount; i++)
{
int[] indices = inputMesh.GetIndices(i);
CuttableSubMesh item = new CuttableSubMesh(indices, vertices, normals, colors, uv, uv2);
subMeshes.Add(item);
}
}
else
{
Debug.LogError((object)("CuttableMesh's input mesh is not readable: " + debugName), (Object)(object)inputMesh);
}
}
public void Add(CuttableMesh other)
{
if (subMeshes.Count != other.subMeshes.Count)
{
throw new Exception("Mismatched submesh count");
}
for (int i = 0; i < subMeshes.Count; i++)
{
subMeshes[i].Add(other.subMeshes[i]);
}
}
public int NumSubMeshes()
{
return subMeshes.Count;
}
public bool HasUvs()
{
return hasUvs;
}
public bool HasColours()
{
return hasColours;
}
public List<CuttableSubMesh> GetSubMeshes()
{
return subMeshes;
}
public CuttableSubMesh GetSubMesh(int index)
{
return subMeshes[index];
}
public Transform GetTransform()
{
if ((Object)(object)inputMeshRenderer != (Object)null)
{
return ((Component)inputMeshRenderer).transform;
}
return null;
}
public MeshRenderer ConvertToRenderer(string newObjectName)
{
//IL_001b: Unknown result type (might be due to invalid IL or missing references)
//IL_0021: Expected O, but got Unknown
//IL_003d: Unknown result type (might be due to invalid IL or missing references)
//IL_004d: Unknown result type (might be due to invalid IL or missing references)
//IL_005d: 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_0097: 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)
Mesh val = CreateMesh();
if (val.vertexCount == 0)
{
return null;
}
GameObject val2 = new GameObject(newObjectName);
val2.transform.SetParent(((Component)inputMeshRenderer).transform);
val2.transform.localPosition = Vector3.zero;
val2.transform.localRotation = Quaternion.identity;
val2.transform.localScale = Vector3.one;
MeshFilter val3 = val2.AddComponent<MeshFilter>();
val3.mesh = val;
MeshRenderer val4 = val2.AddComponent<MeshRenderer>();
((Renderer)val4).shadowCastingMode = ((Renderer)inputMeshRenderer).shadowCastingMode;
((Renderer)val4).reflectionProbeUsage = ((Renderer)inputMeshRenderer).reflectionProbeUsage;
((Renderer)val4).lightProbeUsage = ((Renderer)inputMeshRenderer).lightProbeUsage;
((Renderer)val4).sharedMaterials = ((Renderer)inputMeshRenderer).sharedMaterials;
return val4;
}
public Mesh CreateMesh()
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Expected O, but got Unknown
Mesh val = new Mesh();
int num = 0;
for (int i = 0; i < subMeshes.Count; i++)
{
num += subMeshes[i].NumIndices();
}
List<Vector3> list = new List<Vector3>();
List<Vector3> list2 = new List<Vector3>();
List<Color32> list3 = ((!hasColours) ? null : new List<Color32>());
List<Vector2> list4 = ((!hasUvs) ? null : new List<Vector2>());
List<Vector2> list5 = ((!hasUv1s) ? null : new List<Vector2>());
List<int> list6 = new List<int>();
foreach (CuttableSubMesh subMesh in subMeshes)
{
list6.Add(list.Count);
subMesh.AddTo(list, list2, list3, list4, list5);
}
val.vertices = list.ToArray();
val.normals = list2.ToArray();
val.colors32 = ((!hasColours) ? null : list3.ToArray());
val.uv = ((!hasUvs) ? null : list4.ToArray());
val.uv2 = ((!hasUv1s) ? null : list5.ToArray());
val.subMeshCount = subMeshes.Count;
for (int j = 0; j < subMeshes.Count; j++)
{
CuttableSubMesh cuttableSubMesh = subMeshes[j];
int num2 = list6[j];
int[] array = cuttableSubMesh.GenIndices();
for (int k = 0; k < array.Length; k++)
{
array[k] += num2;
}
val.SetTriangles(array, j, true);
}
return val;
}
}
public class CuttableSubMesh
{
private List<Vector3> vertices;
private List<Vector3> normals;
private List<Color32> colours;
private List<Vector2> uvs;
private List<Vector2> uv1s;
public CuttableSubMesh(bool hasNormals, bool hasColours, bool hasUvs, bool hasUv1)
{
vertices = new List<Vector3>();
if (hasNormals)
{
normals = new List<Vector3>();
}
if (hasColours)
{
colours = new List<Color32>();
}
if (hasUvs)
{
uvs = new List<Vector2>();
}
if (hasUv1)
{
uv1s = new List<Vector2>();
}
}
public CuttableSubMesh(int[] indices, Vector3[] inputVertices, Vector3[] inputNormals, Color32[] inputColours, Vector2[] inputUvs, Vector2[] inputUv1)
{
//IL_0099: Unknown result type (might be due to invalid IL or missing references)
//IL_00bb: Unknown result type (might be due to invalid IL or missing references)
//IL_00de: 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_0124: Unknown result type (might be due to invalid IL or missing references)
vertices = new List<Vector3>();
if (inputNormals != null && inputNormals.Length > 0)
{
normals = new List<Vector3>();
}
if (inputColours != null && inputColours.Length > 0)
{
colours = new List<Color32>();
}
if (inputUvs != null && inputUvs.Length > 0)
{
uvs = new List<Vector2>();
}
if (inputUv1 != null && inputUv1.Length > 0)
{
uv1s = new List<Vector2>();
}
foreach (int num in indices)
{
vertices.Add(inputVertices[num]);
if (normals != null)
{
normals.Add(inputNormals[num]);
}
if (colours != null)
{
colours.Add(inputColours[num]);
}
if (uvs != null)
{
uvs.Add(inputUvs[num]);
}
if (uv1s != null)
{
uv1s.Add(inputUv1[num]);
}
}
}
public void Add(CuttableSubMesh other)
{
for (int i = 0; i < other.vertices.Count; i++)
{
CopyVertex(i, other);
}
}
public int NumVertices()
{
return vertices.Count;
}
public Vector3 GetVertex(int index)
{
//IL_0008: 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)
return vertices[index];
}
public bool HasNormals()
{
return normals != null;
}
public bool HasColours()
{
return colours != null;
}
public bool HasUvs()
{
return uvs != null;
}
public bool HasUv1()
{
return uv1s != null;
}
public void CopyVertex(int srcIndex, CuttableSubMesh srcMesh)
{
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
//IL_0030: Unknown result type (might be due to invalid IL or missing references)
//IL_0052: 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_0096: Unknown result type (might be due to invalid IL or missing references)
vertices.Add(srcMesh.vertices[srcIndex]);
if (normals != null)
{
normals.Add(srcMesh.normals[srcIndex]);
}
if (colours != null)
{
colours.Add(srcMesh.colours[srcIndex]);
}
if (uvs != null)
{
uvs.Add(srcMesh.uvs[srcIndex]);
}
if (uv1s != null)
{
uv1s.Add(srcMesh.uv1s[srcIndex]);
}
}
public void AddInterpolatedVertex(int i0, int i1, float weight, CuttableSubMesh srcMesh)
{
//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_000d: Unknown result type (might be due to invalid IL or missing references)
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
//IL_0019: Unknown result type (might be due to invalid IL or missing references)
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
//IL_001c: 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_004c: Unknown result type (might be due to invalid IL or missing references)
//IL_0052: Unknown result type (might be due to invalid IL or missing references)
//IL_0057: Unknown result type (might be due to invalid IL or missing references)
//IL_005a: Unknown result type (might be due to invalid IL or missing references)
//IL_007d: Unknown result type (might be due to invalid IL or missing references)
//IL_008a: Unknown result type (might be due to invalid IL or missing references)
//IL_0090: Unknown result type (might be due to invalid IL or missing references)
//IL_00b3: 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_00c6: Unknown result type (might be due to invalid IL or missing references)
//IL_00e9: Unknown result type (might be due to invalid IL or missing references)
//IL_00f6: Unknown result type (might be due to invalid IL or missing references)
//IL_00fc: Unknown result type (might be due to invalid IL or missing references)
Vector3 vertex = srcMesh.GetVertex(i0);
Vector3 vertex2 = srcMesh.GetVertex(i1);
vertices.Add(Vector3.Lerp(vertex, vertex2, weight));
if (normals != null)
{
List<Vector3> list = normals;
Vector3 val = Vector3.Lerp(srcMesh.normals[i0], srcMesh.normals[i1], weight);
list.Add(((Vector3)(ref val)).normalized);
}
if (colours != null)
{
colours.Add(Color32.Lerp(srcMesh.colours[i0], srcMesh.colours[i1], weight));
}
if (uvs != null)
{
uvs.Add(Vector2.Lerp(srcMesh.uvs[i0], srcMesh.uvs[i1], weight));
}
if (uv1s != null)
{
uv1s.Add(Vector2.Lerp(srcMesh.uv1s[i0], srcMesh.uv1s[i1], weight));
}
}
public void AddTo(List<Vector3> destVertices, List<Vector3> destNormals, List<Color32> destColours, List<Vector2> destUvs, List<Vector2> destUv1s)
{
destVertices.AddRange(vertices);
if (normals != null)
{
destNormals.AddRange(normals);
}
if (colours != null)
{
destColours.AddRange(colours);
}
if (uvs != null)
{
destUvs.AddRange(uvs);
}
if (uv1s != null)
{
destUv1s.AddRange(uv1s);
}
}
public int NumIndices()
{
return vertices.Count;
}
public int[] GenIndices()
{
int[] array = new int[vertices.Count];
for (int i = 0; i < array.Length; i++)
{
array[i] = i;
}
return array;
}
}
public enum VertexClassification
{
Front = 1,
Back = 2,
OnPlane = 4
}
public class MeshCutter
{
private CuttableMesh inputMesh;
private List<CuttableSubMesh> outputFrontSubMeshes;
private List<CuttableSubMesh> outputBackSubMeshes;
public void Cut(CuttableMesh input, Plane worldCutPlane)
{
//IL_0067: 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_0038: Unknown result type (might be due to invalid IL or missing references)
//IL_0039: Unknown result type (might be due to invalid IL or missing references)
//IL_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_004c: Unknown result type (might be due to invalid IL or missing references)
//IL_0051: Unknown result type (might be due to invalid IL or missing references)
//IL_0056: 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_005a: 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)
inputMesh = input;
outputFrontSubMeshes = new List<CuttableSubMesh>();
outputBackSubMeshes = new List<CuttableSubMesh>();
Transform transform = inputMesh.GetTransform();
Plane cutPlane = default(Plane);
if ((Object)(object)transform != (Object)null)
{
Vector3 val = transform.InverseTransformPoint(ClosestPointOnPlane(worldCutPlane, Vector3.zero));
Vector3 val2 = transform.InverseTransformDirection(((Plane)(ref worldCutPlane)).normal);
((Plane)(ref cutPlane))..ctor(val2, val);
}
else
{
cutPlane = worldCutPlane;
}
foreach (CuttableSubMesh subMesh in input.GetSubMeshes())
{
Cut(subMesh, cutPlane);
}
}
private static Vector3 ClosestPointOnPlane(Plane plane, Vector3 point)
{
//IL_0003: Unknown result type (might be due to invalid IL or missing references)
//IL_000c: Unknown result type (might be due to invalid IL or missing references)
//IL_0032: 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_003b: Unknown result type (might be due to invalid IL or missing references)
//IL_0040: Unknown result type (might be due to invalid IL or missing references)
//IL_0045: Unknown result type (might be due to invalid IL or missing references)
//IL_0018: 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_0021: Unknown result type (might be due to invalid IL or missing references)
//IL_0026: Unknown result type (might be due to invalid IL or missing references)
//IL_002b: Unknown result type (might be due to invalid IL or missing references)
//IL_004b: Unknown result type (might be due to invalid IL or missing references)
float distanceToPoint = ((Plane)(ref plane)).GetDistanceToPoint(point);
if (((Plane)(ref plane)).GetSide(point))
{
return point - ((Plane)(ref plane)).normal * distanceToPoint;
}
return point + ((Plane)(ref plane)).normal * distanceToPoint;
}
public CuttableMesh GetFrontOutput()
{
return new CuttableMesh(inputMesh, outputFrontSubMeshes);
}
public CuttableMesh GetBackOutput()
{
return new CuttableMesh(inputMesh, outputBackSubMeshes);
}
private void Cut(CuttableSubMesh inputSubMesh, Plane cutPlane)
{
//IL_004f: Unknown result type (might be due to invalid IL or missing references)
//IL_0054: Unknown result type (might be due to invalid IL or missing references)
//IL_0059: Unknown result type (might be due to invalid IL or missing references)
//IL_005e: Unknown result type (might be due to invalid IL or missing references)
//IL_0063: Unknown result type (might be due to invalid IL or missing references)
//IL_0068: Unknown result type (might be due to invalid IL or missing references)
//IL_006b: 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_0076: Unknown result type (might be due to invalid IL or missing references)
//IL_0078: Unknown result type (might be due to invalid IL or missing references)
//IL_0081: 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_0121: 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_015b: 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_02be: Unknown result type (might be due to invalid IL or missing references)
//IL_02c0: Unknown result type (might be due to invalid IL or missing references)
//IL_02c2: Unknown result type (might be due to invalid IL or missing references)
//IL_02c7: Unknown result type (might be due to invalid IL or missing references)
//IL_02c9: Unknown result type (might be due to invalid IL or missing references)
//IL_02cb: Unknown result type (might be due to invalid IL or missing references)
//IL_02cd: Unknown result type (might be due to invalid IL or missing references)
//IL_02d2: Unknown result type (might be due to invalid IL or missing references)
//IL_02d4: Unknown result type (might be due to invalid IL or missing references)
//IL_02d6: Unknown result type (might be due to invalid IL or missing references)
//IL_02d8: Unknown result type (might be due to invalid IL or missing references)
//IL_02dd: Unknown result type (might be due to invalid IL or missing references)
//IL_02df: Unknown result type (might be due to invalid IL or missing references)
//IL_02e3: Unknown result type (might be due to invalid IL or missing references)
//IL_01c8: 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_021d: Unknown result type (might be due to invalid IL or missing references)
//IL_0204: Unknown result type (might be due to invalid IL or missing references)
//IL_029d: Unknown result type (might be due to invalid IL or missing references)
//IL_0284: Unknown result type (might be due to invalid IL or missing references)
//IL_0261: Unknown result type (might be due to invalid IL or missing references)
//IL_0248: Unknown result type (might be due to invalid IL or missing references)
bool hasNormals = inputSubMesh.HasNormals();
bool hasColours = inputSubMesh.HasColours();
bool hasUvs = inputSubMesh.HasUvs();
bool hasUv = inputSubMesh.HasUv1();
CuttableSubMesh cuttableSubMesh = new CuttableSubMesh(hasNormals, hasColours, hasUvs, hasUv);
CuttableSubMesh cuttableSubMesh2 = new CuttableSubMesh(hasNormals, hasColours, hasUvs, hasUv);
for (int i = 0; i < inputSubMesh.NumVertices(); i += 3)
{
int num = i;
int num2 = i + 1;
int num3 = i + 2;
Vector3 vertex = inputSubMesh.GetVertex(num);
Vector3 vertex2 = inputSubMesh.GetVertex(num2);
Vector3 vertex3 = inputSubMesh.GetVertex(num3);
VertexClassification vertexClassification = Classify(vertex, cutPlane);
VertexClassification vertexClassification2 = Classify(vertex2, cutPlane);
VertexClassification vertexClassification3 = Classify(vertex3, cutPlane);
int numFront = 0;
int numBehind = 0;
CountSides(vertexClassification, ref numFront, ref numBehind);
CountSides(vertexClassification2, ref numFront, ref numBehind);
CountSides(vertexClassification3, ref numFront, ref numBehind);
if (numFront > 0 && numBehind == 0)
{
KeepTriangle(num, num2, num3, inputSubMesh, cuttableSubMesh);
}
else if (numFront == 0 && numBehind > 0)
{
KeepTriangle(num, num2, num3, inputSubMesh, cuttableSubMesh2);
}
else if (numFront == 2 && numBehind == 1)
{
if (vertexClassification == VertexClassification.Back)
{
SplitA(num, num2, num3, inputSubMesh, cutPlane, cuttableSubMesh2, cuttableSubMesh);
}
else if (vertexClassification2 == VertexClassification.Back)
{
SplitA(num2, num3, num, inputSubMesh, cutPlane, cuttableSubMesh2, cuttableSubMesh);
}
else
{
SplitA(num3, num, num2, inputSubMesh, cutPlane, cuttableSubMesh2, cuttableSubMesh);
}
}
else if (numFront == 1 && numBehind == 2)
{
if (vertexClassification == VertexClassification.Front)
{
SplitA(num, num2, num3, inputSubMesh, cutPlane, cuttableSubMesh, cuttableSubMesh2);
}
else if (vertexClassification2 == VertexClassification.Front)
{
SplitA(num2, num3, num, inputSubMesh, cutPlane, cuttableSubMesh, cuttableSubMesh2);
}
else
{
SplitA(num3, num, num2, inputSubMesh, cutPlane, cuttableSubMesh, cuttableSubMesh2);
}
}
else if (numFront == 1 && numBehind == 1)
{
if (vertexClassification == VertexClassification.OnPlane)
{
if (vertexClassification3 == VertexClassification.Front)
{
SplitB(num3, num, num2, inputSubMesh, cutPlane, cuttableSubMesh, cuttableSubMesh2);
}
else
{
SplitBFlipped(num2, num3, num, inputSubMesh, cutPlane, cuttableSubMesh, cuttableSubMesh2);
}
continue;
}
switch (vertexClassification2)
{
case VertexClassification.OnPlane:
if (vertexClassification == VertexClassification.Front)
{
SplitB(num, num2, num3, inputSubMesh, cutPlane, cuttableSubMesh, cuttableSubMesh2);
}
else
{
SplitBFlipped(num3, num, num2, inputSubMesh, cutPlane, cuttableSubMesh, cuttableSubMesh2);
}
break;
case VertexClassification.Front:
SplitB(num2, num3, num, inputSubMesh, cutPlane, cuttableSubMesh, cuttableSubMesh2);
break;
default:
SplitBFlipped(num, num2, num3, inputSubMesh, cutPlane, cuttableSubMesh, cuttableSubMesh2);
break;
}
}
else if (numFront == 0 && numBehind == 0)
{
Vector3 val = vertex2 - vertex;
Vector3 val2 = vertex3 - vertex;
Vector3 val3 = Vector3.Cross(val, val2);
if (Vector3.Dot(val3, ((Plane)(ref cutPlane)).normal) > 0f)
{
KeepTriangle(num, num2, num3, inputSubMesh, cuttableSubMesh2);
}
else
{
KeepTriangle(num, num2, num3, inputSubMesh, cuttableSubMesh);
}
}
}
outputFrontSubMeshes.Add(cuttableSubMesh);
outputBackSubMeshes.Add(cuttableSubMesh2);
}
private VertexClassification Classify(Vector3 vertex, Plane cutPlane)
{
//IL_0022: Unknown result type (might be due to invalid IL or missing references)
Vector3 val = default(Vector3);
((Vector3)(ref val))..ctor(vertex.x, vertex.y, vertex.z);
float distanceToPoint = ((Plane)(ref cutPlane)).GetDistanceToPoint(val);
double num = 9.999999747378752E-06;
if ((double)distanceToPoint > 0.0 - num && (double)distanceToPoint < num)
{
return VertexClassification.OnPlane;
}
if (distanceToPoint > 0f)
{
return VertexClassification.Front;
}
return VertexClassification.Back;
}
private void CountSides(VertexClassification c, ref int numFront, ref int numBehind)
{
switch (c)
{
case VertexClassification.Front:
numFront++;
break;
case VertexClassification.Back:
numBehind++;
break;
}
}
private void KeepTriangle(int i0, int i1, int i2, CuttableSubMesh inputSubMesh, CuttableSubMesh destSubMesh)
{
destSubMesh.CopyVertex(i0, inputSubMesh);
destSubMesh.CopyVertex(i1, inputSubMesh);
destSubMesh.CopyVertex(i2, inputSubMesh);
}
private void SplitA(int i0, int i1, int i2, CuttableSubMesh inputSubMesh, Plane cutPlane, CuttableSubMesh frontSubMesh, CuttableSubMesh backSubMesh)
{
//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_000d: Unknown result type (might be due to invalid IL or missing references)
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
//IL_0016: 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_001d: Unknown result type (might be due to invalid IL or missing references)
//IL_001e: Unknown result type (might be due to invalid IL or missing references)
//IL_001f: Unknown result type (might be due to invalid IL or missing references)
//IL_0023: Unknown result type (might be due to invalid IL or missing references)
//IL_002a: Unknown result type (might be due to invalid IL or missing references)
//IL_002b: Unknown result type (might be due to invalid IL or missing references)
//IL_002c: Unknown result type (might be due to invalid IL or missing references)
//IL_0030: Unknown result type (might be due to invalid IL or missing references)
Vector3 vertex = inputSubMesh.GetVertex(i0);
Vector3 vertex2 = inputSubMesh.GetVertex(i1);
Vector3 vertex3 = inputSubMesh.GetVertex(i2);
CalcIntersection(vertex, vertex2, cutPlane, out var weight);
CalcIntersection(vertex3, vertex, cutPlane, out var weight2);
frontSubMesh.CopyVertex(i0, inputSubMesh);
frontSubMesh.AddInterpolatedVertex(i0, i1, weight, inputSubMesh);
frontSubMesh.AddInterpolatedVertex(i2, i0, weight2, inputSubMesh);
backSubMesh.AddInterpolatedVertex(i0, i1, weight, inputSubMesh);
backSubMesh.CopyVertex(i1, inputSubMesh);
backSubMesh.CopyVertex(i2, inputSubMesh);
backSubMesh.CopyVertex(i2, inputSubMesh);
backSubMesh.AddInterpolatedVertex(i2, i0, weight2, inputSubMesh);
backSubMesh.AddInterpolatedVertex(i0, i1, weight, inputSubMesh);
}
private void SplitB(int i0, int i1, int i2, CuttableSubMesh inputSubMesh, Plane cutPlane, CuttableSubMesh frontSubMesh, CuttableSubMesh backSubMesh)
{
//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_000d: Unknown result type (might be due to invalid IL or missing references)
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
//IL_0014: 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_0016: Unknown result type (might be due to invalid IL or missing references)
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
Vector3 vertex = inputSubMesh.GetVertex(i0);
Vector3 vertex2 = inputSubMesh.GetVertex(i2);
CalcIntersection(vertex2, vertex, cutPlane, out var weight);
frontSubMesh.CopyVertex(i0, inputSubMesh);
frontSubMesh.CopyVertex(i1, inputSubMesh);
frontSubMesh.AddInterpolatedVertex(i2, i0, weight, inputSubMesh);
backSubMesh.CopyVertex(i1, inputSubMesh);
backSubMesh.CopyVertex(i2, inputSubMesh);
backSubMesh.AddInterpolatedVertex(i2, i0, weight, inputSubMesh);
}
private void SplitBFlipped(int i0, int i1, int i2, CuttableSubMesh inputSubMesh, Plane cutPlane, CuttableSubMesh frontSubMesh, CuttableSubMesh backSubMesh)
{
//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_000d: Unknown result type (might be due to invalid IL or missing references)
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
//IL_0014: 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_0016: Unknown result type (might be due to invalid IL or missing references)
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
Vector3 vertex = inputSubMesh.GetVertex(i0);
Vector3 vertex2 = inputSubMesh.GetVertex(i1);
CalcIntersection(vertex, vertex2, cutPlane, out var weight);
frontSubMesh.CopyVertex(i0, inputSubMesh);
frontSubMesh.AddInterpolatedVertex(i0, i1, weight, inputSubMesh);
frontSubMesh.CopyVertex(i2, inputSubMesh);
backSubMesh.CopyVertex(i1, inputSubMesh);
backSubMesh.CopyVertex(i2, inputSubMesh);
backSubMesh.AddInterpolatedVertex(i0, i1, weight, inputSubMesh);
}
private Vector3 CalcIntersection(Vector3 v0, Vector3 v1, Plane plane, out float weight)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0003: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: 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_0014: 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_0022: 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_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_0044: Unknown result type (might be due to invalid IL or missing references)
//IL_004c: Unknown result type (might be due to invalid IL or missing references)
//IL_004e: 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)
Vector3 val = v1 - v0;
float magnitude = ((Vector3)(ref val)).magnitude;
Ray val2 = default(Ray);
((Ray)(ref val2))..ctor(v0, val / magnitude);
float num = default(float);
((Plane)(ref plane)).Raycast(val2, ref num);
Vector3 result = ((Ray)(ref val2)).origin + ((Ray)(ref val2)).direction * num;
weight = num / magnitude;
return result;
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Logging;
using FistVR;
using HarmonyLib;
using OtherLoader;
using UnityEngine;
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("0.0.0.0")]
[module: UnverifiableCode]
public class FlickerLight : MonoBehaviour
{
public float MinLightIntensity = 0.5f;
public float MaxLightIntensity = 2.3f;
public float AccelerateTime = 0.15f;
private float _targetIntensity = 1f;
private float _lastIntensity = 1f;
private float _timePassed = 0f;
private Light _lt;
private const double Tolerance = 0.0001;
private void Start()
{
_lt = ((Component)this).GetComponent<Light>();
_lastIntensity = _lt.intensity;
FixedUpdate();
}
private void FixedUpdate()
{
_timePassed += Time.deltaTime;
_lt.intensity = Mathf.Lerp(_lastIntensity, _targetIntensity, _timePassed / AccelerateTime);
if ((double)Mathf.Abs(_lt.intensity - _targetIntensity) < 0.0001)
{
_lastIntensity = _lt.intensity;
_targetIntensity = Random.Range(MinLightIntensity, MaxLightIntensity);
_timePassed = 0f;
}
}
}
[RequireComponent(typeof(MeshRenderer))]
public class UVOffset : MonoBehaviour
{
public float scrollSpeed = 0.5f;
public bool scrollY = true;
private MeshRenderer renderer;
private void Start()
{
renderer = ((Component)this).GetComponent<MeshRenderer>();
}
private void Update()
{
//IL_003f: 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)
float num = Time.time * scrollSpeed;
((Renderer)renderer).material.SetTextureOffset("_MainTex", (!scrollY) ? new Vector2(0f, num) : new Vector2(num, 0f));
}
}
namespace Storymods.BundleEarpro;
[BepInPlugin("Storymods.BundleEarpro", "BundleEarpro", "1.0.0")]
[BepInProcess("h3vr.exe")]
[Description("Built with MeatKit")]
[BepInDependency("h3vr.otherloader", "1.3.0")]
public class BundleEarproPlugin : BaseUnityPlugin
{
private static readonly string BasePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
internal static ManualLogSource Logger;
private void Awake()
{
Logger = ((BaseUnityPlugin)this).Logger;
LoadAssets();
}
private void LoadAssets()
{
Harmony.CreateAndPatchAll(Assembly.GetExecutingAssembly(), "Storymods.BundleEarpro");
OtherLoader.RegisterDirectLoad(BasePath, "Storymods.BundleEarpro", "", "", "bundleearpro", "");
}
}
public class Cabernade : MonoBehaviour
{
public GameObject caberUnexploded;
public GameObject caberExploded;
public bool isCaberKablooey;
public void OnCollisionEnter(Collision col)
{
if (!isCaberKablooey)
{
CaberBlowUp();
}
}
public void CaberBlowUp()
{
caberUnexploded.SetActive(false);
caberExploded.SetActive(true);
isCaberKablooey = true;
}
}
public class SosigRangeEditor : MonoBehaviour
{
public GameObject sosigParent;
public float modifierNumber = 1f;
public bool doesHavePerfectFOV = false;
private void Start()
{
sosigParent = ((Component)((Component)this).transform.root).gameObject;
Sosig component = ((Component)((Component)this).transform).GetComponent<Sosig>();
component.MaxSightRange *= modifierNumber;
if (doesHavePerfectFOV)
{
component.MaxFOV = 360f;
}
else
{
component.MaxFOV *= modifierNumber;
}
}
}
public class CuttableMesh
{
private MeshRenderer inputMeshRenderer;
private bool hasUvs;
private bool hasUv1s;
private bool hasColours;
private List<CuttableSubMesh> subMeshes;
public CuttableMesh(Mesh inputMesh)
{
Init(inputMesh, ((Object)inputMesh).name);
}
public CuttableMesh(MeshRenderer input)
{
inputMeshRenderer = input;
MeshFilter component = ((Component)input).GetComponent<MeshFilter>();
Mesh sharedMesh = component.sharedMesh;
Init(sharedMesh, ((Object)input).name);
}
public CuttableMesh(CuttableMesh inputMesh, List<CuttableSubMesh> newSubMeshes)
{
inputMeshRenderer = inputMesh.inputMeshRenderer;
hasUvs = inputMesh.hasUvs;
hasUv1s = inputMesh.hasUv1s;
hasColours = inputMesh.hasColours;
subMeshes = new List<CuttableSubMesh>();
subMeshes.AddRange(newSubMeshes);
}
private void Init(Mesh inputMesh, string debugName)
{
subMeshes = new List<CuttableSubMesh>();
if (inputMesh.isReadable)
{
Vector3[] vertices = inputMesh.vertices;
Vector3[] normals = inputMesh.normals;
Vector2[] uv = inputMesh.uv;
Vector2[] uv2 = inputMesh.uv2;
Color32[] colors = inputMesh.colors32;
hasUvs = uv != null && uv.Length > 0;
hasUv1s = uv2 != null && uv2.Length > 0;
hasColours = colors != null && colors.Length > 0;
for (int i = 0; i < inputMesh.subMeshCount; i++)
{
int[] indices = inputMesh.GetIndices(i);
CuttableSubMesh item = new CuttableSubMesh(indices, vertices, normals, colors, uv, uv2);
subMeshes.Add(item);
}
}
else
{
Debug.LogError((object)("CuttableMesh's input mesh is not readable: " + debugName), (Object)(object)inputMesh);
}
}
public void Add(CuttableMesh other)
{
if (subMeshes.Count != other.subMeshes.Count)
{
throw new Exception("Mismatched submesh count");
}
for (int i = 0; i < subMeshes.Count; i++)
{
subMeshes[i].Add(other.subMeshes[i]);
}
}
public int NumSubMeshes()
{
return subMeshes.Count;
}
public bool HasUvs()
{
return hasUvs;
}
public bool HasColours()
{
return hasColours;
}
public List<CuttableSubMesh> GetSubMeshes()
{
return subMeshes;
}
public CuttableSubMesh GetSubMesh(int index)
{
return subMeshes[index];
}
public Transform GetTransform()
{
if ((Object)(object)inputMeshRenderer != (Object)null)
{
return ((Component)inputMeshRenderer).transform;
}
return null;
}
public MeshRenderer ConvertToRenderer(string newObjectName)
{
//IL_001b: Unknown result type (might be due to invalid IL or missing references)
//IL_0021: Expected O, but got Unknown
//IL_003d: Unknown result type (might be due to invalid IL or missing references)
//IL_004d: Unknown result type (might be due to invalid IL or missing references)
//IL_005d: 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_0097: 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)
Mesh val = CreateMesh();
if (val.vertexCount == 0)
{
return null;
}
GameObject val2 = new GameObject(newObjectName);
val2.transform.SetParent(((Component)inputMeshRenderer).transform);
val2.transform.localPosition = Vector3.zero;
val2.transform.localRotation = Quaternion.identity;
val2.transform.localScale = Vector3.one;
MeshFilter val3 = val2.AddComponent<MeshFilter>();
val3.mesh = val;
MeshRenderer val4 = val2.AddComponent<MeshRenderer>();
((Renderer)val4).shadowCastingMode = ((Renderer)inputMeshRenderer).shadowCastingMode;
((Renderer)val4).reflectionProbeUsage = ((Renderer)inputMeshRenderer).reflectionProbeUsage;
((Renderer)val4).lightProbeUsage = ((Renderer)inputMeshRenderer).lightProbeUsage;
((Renderer)val4).sharedMaterials = ((Renderer)inputMeshRenderer).sharedMaterials;
return val4;
}
public Mesh CreateMesh()
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Expected O, but got Unknown
Mesh val = new Mesh();
int num = 0;
for (int i = 0; i < subMeshes.Count; i++)
{
num += subMeshes[i].NumIndices();
}
List<Vector3> list = new List<Vector3>();
List<Vector3> list2 = new List<Vector3>();
List<Color32> list3 = ((!hasColours) ? null : new List<Color32>());
List<Vector2> list4 = ((!hasUvs) ? null : new List<Vector2>());
List<Vector2> list5 = ((!hasUv1s) ? null : new List<Vector2>());
List<int> list6 = new List<int>();
foreach (CuttableSubMesh subMesh in subMeshes)
{
list6.Add(list.Count);
subMesh.AddTo(list, list2, list3, list4, list5);
}
val.vertices = list.ToArray();
val.normals = list2.ToArray();
val.colors32 = ((!hasColours) ? null : list3.ToArray());
val.uv = ((!hasUvs) ? null : list4.ToArray());
val.uv2 = ((!hasUv1s) ? null : list5.ToArray());
val.subMeshCount = subMeshes.Count;
for (int j = 0; j < subMeshes.Count; j++)
{
CuttableSubMesh cuttableSubMesh = subMeshes[j];
int num2 = list6[j];
int[] array = cuttableSubMesh.GenIndices();
for (int k = 0; k < array.Length; k++)
{
array[k] += num2;
}
val.SetTriangles(array, j, true);
}
return val;
}
}
public class CuttableSubMesh
{
private List<Vector3> vertices;
private List<Vector3> normals;
private List<Color32> colours;
private List<Vector2> uvs;
private List<Vector2> uv1s;
public CuttableSubMesh(bool hasNormals, bool hasColours, bool hasUvs, bool hasUv1)
{
vertices = new List<Vector3>();
if (hasNormals)
{
normals = new List<Vector3>();
}
if (hasColours)
{
colours = new List<Color32>();
}
if (hasUvs)
{
uvs = new List<Vector2>();
}
if (hasUv1)
{
uv1s = new List<Vector2>();
}
}
public CuttableSubMesh(int[] indices, Vector3[] inputVertices, Vector3[] inputNormals, Color32[] inputColours, Vector2[] inputUvs, Vector2[] inputUv1)
{
//IL_0099: Unknown result type (might be due to invalid IL or missing references)
//IL_00bb: Unknown result type (might be due to invalid IL or missing references)
//IL_00de: 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_0124: Unknown result type (might be due to invalid IL or missing references)
vertices = new List<Vector3>();
if (inputNormals != null && inputNormals.Length > 0)
{
normals = new List<Vector3>();
}
if (inputColours != null && inputColours.Length > 0)
{
colours = new List<Color32>();
}
if (inputUvs != null && inputUvs.Length > 0)
{
uvs = new List<Vector2>();
}
if (inputUv1 != null && inputUv1.Length > 0)
{
uv1s = new List<Vector2>();
}
foreach (int num in indices)
{
vertices.Add(inputVertices[num]);
if (normals != null)
{
normals.Add(inputNormals[num]);
}
if (colours != null)
{
colours.Add(inputColours[num]);
}
if (uvs != null)
{
uvs.Add(inputUvs[num]);
}
if (uv1s != null)
{
uv1s.Add(inputUv1[num]);
}
}
}
public void Add(CuttableSubMesh other)
{
for (int i = 0; i < other.vertices.Count; i++)
{
CopyVertex(i, other);
}
}
public int NumVertices()
{
return vertices.Count;
}
public Vector3 GetVertex(int index)
{
//IL_0008: 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)
return vertices[index];
}
public bool HasNormals()
{
return normals != null;
}
public bool HasColours()
{
return colours != null;
}
public bool HasUvs()
{
return uvs != null;
}
public bool HasUv1()
{
return uv1s != null;
}
public void CopyVertex(int srcIndex, CuttableSubMesh srcMesh)
{
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
//IL_0030: Unknown result type (might be due to invalid IL or missing references)
//IL_0052: 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_0096: Unknown result type (might be due to invalid IL or missing references)
vertices.Add(srcMesh.vertices[srcIndex]);
if (normals != null)
{
normals.Add(srcMesh.normals[srcIndex]);
}
if (colours != null)
{
colours.Add(srcMesh.colours[srcIndex]);
}
if (uvs != null)
{
uvs.Add(srcMesh.uvs[srcIndex]);
}
if (uv1s != null)
{
uv1s.Add(srcMesh.uv1s[srcIndex]);
}
}
public void AddInterpolatedVertex(int i0, int i1, float weight, CuttableSubMesh srcMesh)
{
//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_000d: Unknown result type (might be due to invalid IL or missing references)
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
//IL_0019: Unknown result type (might be due to invalid IL or missing references)
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
//IL_001c: 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_004c: Unknown result type (might be due to invalid IL or missing references)
//IL_0052: Unknown result type (might be due to invalid IL or missing references)
//IL_0057: Unknown result type (might be due to invalid IL or missing references)
//IL_005a: Unknown result type (might be due to invalid IL or missing references)
//IL_007d: Unknown result type (might be due to invalid IL or missing references)
//IL_008a: Unknown result type (might be due to invalid IL or missing references)
//IL_0090: Unknown result type (might be due to invalid IL or missing references)
//IL_00b3: 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_00c6: Unknown result type (might be due to invalid IL or missing references)
//IL_00e9: Unknown result type (might be due to invalid IL or missing references)
//IL_00f6: Unknown result type (might be due to invalid IL or missing references)
//IL_00fc: Unknown result type (might be due to invalid IL or missing references)
Vector3 vertex = srcMesh.GetVertex(i0);
Vector3 vertex2 = srcMesh.GetVertex(i1);
vertices.Add(Vector3.Lerp(vertex, vertex2, weight));
if (normals != null)
{
List<Vector3> list = normals;
Vector3 val = Vector3.Lerp(srcMesh.normals[i0], srcMesh.normals[i1], weight);
list.Add(((Vector3)(ref val)).normalized);
}
if (colours != null)
{
colours.Add(Color32.Lerp(srcMesh.colours[i0], srcMesh.colours[i1], weight));
}
if (uvs != null)
{
uvs.Add(Vector2.Lerp(srcMesh.uvs[i0], srcMesh.uvs[i1], weight));
}
if (uv1s != null)
{
uv1s.Add(Vector2.Lerp(srcMesh.uv1s[i0], srcMesh.uv1s[i1], weight));
}
}
public void AddTo(List<Vector3> destVertices, List<Vector3> destNormals, List<Color32> destColours, List<Vector2> destUvs, List<Vector2> destUv1s)
{
destVertices.AddRange(vertices);
if (normals != null)
{
destNormals.AddRange(normals);
}
if (colours != null)
{
destColours.AddRange(colours);
}
if (uvs != null)
{
destUvs.AddRange(uvs);
}
if (uv1s != null)
{
destUv1s.AddRange(uv1s);
}
}
public int NumIndices()
{
return vertices.Count;
}
public int[] GenIndices()
{
int[] array = new int[vertices.Count];
for (int i = 0; i < array.Length; i++)
{
array[i] = i;
}
return array;
}
}
public enum VertexClassification
{
Front = 1,
Back = 2,
OnPlane = 4
}
public class MeshCutter
{
private CuttableMesh inputMesh;
private List<CuttableSubMesh> outputFrontSubMeshes;
private List<CuttableSubMesh> outputBackSubMeshes;
public void Cut(CuttableMesh input, Plane worldCutPlane)
{
//IL_0067: 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_0038: Unknown result type (might be due to invalid IL or missing references)
//IL_0039: Unknown result type (might be due to invalid IL or missing references)
//IL_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_004c: Unknown result type (might be due to invalid IL or missing references)
//IL_0051: Unknown result type (might be due to invalid IL or missing references)
//IL_0056: 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_005a: 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)
inputMesh = input;
outputFrontSubMeshes = new List<CuttableSubMesh>();
outputBackSubMeshes = new List<CuttableSubMesh>();
Transform transform = inputMesh.GetTransform();
Plane cutPlane = default(Plane);
if ((Object)(object)transform != (Object)null)
{
Vector3 val = transform.InverseTransformPoint(ClosestPointOnPlane(worldCutPlane, Vector3.zero));
Vector3 val2 = transform.InverseTransformDirection(((Plane)(ref worldCutPlane)).normal);
((Plane)(ref cutPlane))..ctor(val2, val);
}
else
{
cutPlane = worldCutPlane;
}
foreach (CuttableSubMesh subMesh in input.GetSubMeshes())
{
Cut(subMesh, cutPlane);
}
}
private static Vector3 ClosestPointOnPlane(Plane plane, Vector3 point)
{
//IL_0003: Unknown result type (might be due to invalid IL or missing references)
//IL_000c: Unknown result type (might be due to invalid IL or missing references)
//IL_0032: 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_003b: Unknown result type (might be due to invalid IL or missing references)
//IL_0040: Unknown result type (might be due to invalid IL or missing references)
//IL_0045: Unknown result type (might be due to invalid IL or missing references)
//IL_0018: 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_0021: Unknown result type (might be due to invalid IL or missing references)
//IL_0026: Unknown result type (might be due to invalid IL or missing references)
//IL_002b: Unknown result type (might be due to invalid IL or missing references)
//IL_004b: Unknown result type (might be due to invalid IL or missing references)
float distanceToPoint = ((Plane)(ref plane)).GetDistanceToPoint(point);
if (((Plane)(ref plane)).GetSide(point))
{
return point - ((Plane)(ref plane)).normal * distanceToPoint;
}
return point + ((Plane)(ref plane)).normal * distanceToPoint;
}
public CuttableMesh GetFrontOutput()
{
return new CuttableMesh(inputMesh, outputFrontSubMeshes);
}
public CuttableMesh GetBackOutput()
{
return new CuttableMesh(inputMesh, outputBackSubMeshes);
}
private void Cut(CuttableSubMesh inputSubMesh, Plane cutPlane)
{
//IL_004f: Unknown result type (might be due to invalid IL or missing references)
//IL_0054: Unknown result type (might be due to invalid IL or missing references)
//IL_0059: Unknown result type (might be due to invalid IL or missing references)
//IL_005e: Unknown result type (might be due to invalid IL or missing references)
//IL_0063: Unknown result type (might be due to invalid IL or missing references)
//IL_0068: Unknown result type (might be due to invalid IL or missing references)
//IL_006b: 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_0076: Unknown result type (might be due to invalid IL or missing references)
//IL_0078: Unknown result type (might be due to invalid IL or missing references)
//IL_0081: 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_0121: 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_015b: 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_02be: Unknown result type (might be due to invalid IL or missing references)
//IL_02c0: Unknown result type (might be due to invalid IL or missing references)
//IL_02c2: Unknown result type (might be due to invalid IL or missing references)
//IL_02c7: Unknown result type (might be due to invalid IL or missing references)
//IL_02c9: Unknown result type (might be due to invalid IL or missing references)
//IL_02cb: Unknown result type (might be due to invalid IL or missing references)
//IL_02cd: Unknown result type (might be due to invalid IL or missing references)
//IL_02d2: Unknown result type (might be due to invalid IL or missing references)
//IL_02d4: Unknown result type (might be due to invalid IL or missing references)
//IL_02d6: Unknown result type (might be due to invalid IL or missing references)
//IL_02d8: Unknown result type (might be due to invalid IL or missing references)
//IL_02dd: Unknown result type (might be due to invalid IL or missing references)
//IL_02df: Unknown result type (might be due to invalid IL or missing references)
//IL_02e3: Unknown result type (might be due to invalid IL or missing references)
//IL_01c8: 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_021d: Unknown result type (might be due to invalid IL or missing references)
//IL_0204: Unknown result type (might be due to invalid IL or missing references)
//IL_029d: Unknown result type (might be due to invalid IL or missing references)
//IL_0284: Unknown result type (might be due to invalid IL or missing references)
//IL_0261: Unknown result type (might be due to invalid IL or missing references)
//IL_0248: Unknown result type (might be due to invalid IL or missing references)
bool hasNormals = inputSubMesh.HasNormals();
bool hasColours = inputSubMesh.HasColours();
bool hasUvs = inputSubMesh.HasUvs();
bool hasUv = inputSubMesh.HasUv1();
CuttableSubMesh cuttableSubMesh = new CuttableSubMesh(hasNormals, hasColours, hasUvs, hasUv);
CuttableSubMesh cuttableSubMesh2 = new CuttableSubMesh(hasNormals, hasColours, hasUvs, hasUv);
for (int i = 0; i < inputSubMesh.NumVertices(); i += 3)
{
int num = i;
int num2 = i + 1;
int num3 = i + 2;
Vector3 vertex = inputSubMesh.GetVertex(num);
Vector3 vertex2 = inputSubMesh.GetVertex(num2);
Vector3 vertex3 = inputSubMesh.GetVertex(num3);
VertexClassification vertexClassification = Classify(vertex, cutPlane);
VertexClassification vertexClassification2 = Classify(vertex2, cutPlane);
VertexClassification vertexClassification3 = Classify(vertex3, cutPlane);
int numFront = 0;
int numBehind = 0;
CountSides(vertexClassification, ref numFront, ref numBehind);
CountSides(vertexClassification2, ref numFront, ref numBehind);
CountSides(vertexClassification3, ref numFront, ref numBehind);
if (numFront > 0 && numBehind == 0)
{
KeepTriangle(num, num2, num3, inputSubMesh, cuttableSubMesh);
}
else if (numFront == 0 && numBehind > 0)
{
KeepTriangle(num, num2, num3, inputSubMesh, cuttableSubMesh2);
}
else if (numFront == 2 && numBehind == 1)
{
if (vertexClassification == VertexClassification.Back)
{
SplitA(num, num2, num3, inputSubMesh, cutPlane, cuttableSubMesh2, cuttableSubMesh);
}
else if (vertexClassification2 == VertexClassification.Back)
{
SplitA(num2, num3, num, inputSubMesh, cutPlane, cuttableSubMesh2, cuttableSubMesh);
}
else
{
SplitA(num3, num, num2, inputSubMesh, cutPlane, cuttableSubMesh2, cuttableSubMesh);
}
}
else if (numFront == 1 && numBehind == 2)
{
if (vertexClassification == VertexClassification.Front)
{
SplitA(num, num2, num3, inputSubMesh, cutPlane, cuttableSubMesh, cuttableSubMesh2);
}
else if (vertexClassification2 == VertexClassification.Front)
{
SplitA(num2, num3, num, inputSubMesh, cutPlane, cuttableSubMesh, cuttableSubMesh2);
}
else
{
SplitA(num3, num, num2, inputSubMesh, cutPlane, cuttableSubMesh, cuttableSubMesh2);
}
}
else if (numFront == 1 && numBehind == 1)
{
if (vertexClassification == VertexClassification.OnPlane)
{
if (vertexClassification3 == VertexClassification.Front)
{
SplitB(num3, num, num2, inputSubMesh, cutPlane, cuttableSubMesh, cuttableSubMesh2);
}
else
{
SplitBFlipped(num2, num3, num, inputSubMesh, cutPlane, cuttableSubMesh, cuttableSubMesh2);
}
continue;
}
switch (vertexClassification2)
{
case VertexClassification.OnPlane:
if (vertexClassification == VertexClassification.Front)
{
SplitB(num, num2, num3, inputSubMesh, cutPlane, cuttableSubMesh, cuttableSubMesh2);
}
else
{
SplitBFlipped(num3, num, num2, inputSubMesh, cutPlane, cuttableSubMesh, cuttableSubMesh2);
}
break;
case VertexClassification.Front:
SplitB(num2, num3, num, inputSubMesh, cutPlane, cuttableSubMesh, cuttableSubMesh2);
break;
default:
SplitBFlipped(num, num2, num3, inputSubMesh, cutPlane, cuttableSubMesh, cuttableSubMesh2);
break;
}
}
else if (numFront == 0 && numBehind == 0)
{
Vector3 val = vertex2 - vertex;
Vector3 val2 = vertex3 - vertex;
Vector3 val3 = Vector3.Cross(val, val2);
if (Vector3.Dot(val3, ((Plane)(ref cutPlane)).normal) > 0f)
{
KeepTriangle(num, num2, num3, inputSubMesh, cuttableSubMesh2);
}
else
{
KeepTriangle(num, num2, num3, inputSubMesh, cuttableSubMesh);
}
}
}
outputFrontSubMeshes.Add(cuttableSubMesh);
outputBackSubMeshes.Add(cuttableSubMesh2);
}
private VertexClassification Classify(Vector3 vertex, Plane cutPlane)
{
//IL_0022: Unknown result type (might be due to invalid IL or missing references)
Vector3 val = default(Vector3);
((Vector3)(ref val))..ctor(vertex.x, vertex.y, vertex.z);
float distanceToPoint = ((Plane)(ref cutPlane)).GetDistanceToPoint(val);
double num = 9.999999747378752E-06;
if ((double)distanceToPoint > 0.0 - num && (double)distanceToPoint < num)
{
return VertexClassification.OnPlane;
}
if (distanceToPoint > 0f)
{
return VertexClassification.Front;
}
return VertexClassification.Back;
}
private void CountSides(VertexClassification c, ref int numFront, ref int numBehind)
{
switch (c)
{
case VertexClassification.Front:
numFront++;
break;
case VertexClassification.Back:
numBehind++;
break;
}
}
private void KeepTriangle(int i0, int i1, int i2, CuttableSubMesh inputSubMesh, CuttableSubMesh destSubMesh)
{
destSubMesh.CopyVertex(i0, inputSubMesh);
destSubMesh.CopyVertex(i1, inputSubMesh);
destSubMesh.CopyVertex(i2, inputSubMesh);
}
private void SplitA(int i0, int i1, int i2, CuttableSubMesh inputSubMesh, Plane cutPlane, CuttableSubMesh frontSubMesh, CuttableSubMesh backSubMesh)
{
//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_000d: Unknown result type (might be due to invalid IL or missing references)
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
//IL_0016: 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_001d: Unknown result type (might be due to invalid IL or missing references)
//IL_001e: Unknown result type (might be due to invalid IL or missing references)
//IL_001f: Unknown result type (might be due to invalid IL or missing references)
//IL_0023: Unknown result type (might be due to invalid IL or missing references)
//IL_002a: Unknown result type (might be due to invalid IL or missing references)
//IL_002b: Unknown result type (might be due to invalid IL or missing references)
//IL_002c: Unknown result type (might be due to invalid IL or missing references)
//IL_0030: Unknown result type (might be due to invalid IL or missing references)
Vector3 vertex = inputSubMesh.GetVertex(i0);
Vector3 vertex2 = inputSubMesh.GetVertex(i1);
Vector3 vertex3 = inputSubMesh.GetVertex(i2);
CalcIntersection(vertex, vertex2, cutPlane, out var weight);
CalcIntersection(vertex3, vertex, cutPlane, out var weight2);
frontSubMesh.CopyVertex(i0, inputSubMesh);
frontSubMesh.AddInterpolatedVertex(i0, i1, weight, inputSubMesh);
frontSubMesh.AddInterpolatedVertex(i2, i0, weight2, inputSubMesh);
backSubMesh.AddInterpolatedVertex(i0, i1, weight, inputSubMesh);
backSubMesh.CopyVertex(i1, inputSubMesh);
backSubMesh.CopyVertex(i2, inputSubMesh);
backSubMesh.CopyVertex(i2, inputSubMesh);
backSubMesh.AddInterpolatedVertex(i2, i0, weight2, inputSubMesh);
backSubMesh.AddInterpolatedVertex(i0, i1, weight, inputSubMesh);
}
private void SplitB(int i0, int i1, int i2, CuttableSubMesh inputSubMesh, Plane cutPlane, CuttableSubMesh frontSubMesh, CuttableSubMesh backSubMesh)
{
//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_000d: Unknown result type (might be due to invalid IL or missing references)
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
//IL_0014: 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_0016: Unknown result type (might be due to invalid IL or missing references)
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
Vector3 vertex = inputSubMesh.GetVertex(i0);
Vector3 vertex2 = inputSubMesh.GetVertex(i2);
CalcIntersection(vertex2, vertex, cutPlane, out var weight);
frontSubMesh.CopyVertex(i0, inputSubMesh);
frontSubMesh.CopyVertex(i1, inputSubMesh);
frontSubMesh.AddInterpolatedVertex(i2, i0, weight, inputSubMesh);
backSubMesh.CopyVertex(i1, inputSubMesh);
backSubMesh.CopyVertex(i2, inputSubMesh);
backSubMesh.AddInterpolatedVertex(i2, i0, weight, inputSubMesh);
}
private void SplitBFlipped(int i0, int i1, int i2, CuttableSubMesh inputSubMesh, Plane cutPlane, CuttableSubMesh frontSubMesh, CuttableSubMesh backSubMesh)
{
//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_000d: Unknown result type (might be due to invalid IL or missing references)
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
//IL_0014: 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_0016: Unknown result type (might be due to invalid IL or missing references)
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
Vector3 vertex = inputSubMesh.GetVertex(i0);
Vector3 vertex2 = inputSubMesh.GetVertex(i1);
CalcIntersection(vertex, vertex2, cutPlane, out var weight);
frontSubMesh.CopyVertex(i0, inputSubMesh);
frontSubMesh.AddInterpolatedVertex(i0, i1, weight, inputSubMesh);
frontSubMesh.CopyVertex(i2, inputSubMesh);
backSubMesh.CopyVertex(i1, inputSubMesh);
backSubMesh.CopyVertex(i2, inputSubMesh);
backSubMesh.AddInterpolatedVertex(i0, i1, weight, inputSubMesh);
}
private Vector3 CalcIntersection(Vector3 v0, Vector3 v1, Plane plane, out float weight)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0003: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: 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_0014: 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_0022: 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_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_0044: Unknown result type (might be due to invalid IL or missing references)
//IL_004c: Unknown result type (might be due to invalid IL or missing references)
//IL_004e: 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)
Vector3 val = v1 - v0;
float magnitude = ((Vector3)(ref val)).magnitude;
Ray val2 = default(Ray);
((Ray)(ref val2))..ctor(v0, val / magnitude);
float num = default(float);
((Plane)(ref plane)).Raycast(val2, ref num);
Vector3 result = ((Ray)(ref val2)).origin + ((Ray)(ref val2)).direction * num;
weight = num / magnitude;
return result;
}
}
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Logging;
using FistVR;
using HarmonyLib;
using OtherLoader;
using UnityEngine;
using UnityEngine.UI;
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("0.0.0.0")]
[module: UnverifiableCode]
namespace Modmas2024.Modmas2024_SosigResources;
[BepInPlugin("Modmas2024.Modmas2024_SosigResources", "Modmas2024_SosigResources", "1.0.0")]
[BepInProcess("h3vr.exe")]
[Description("Built with MeatKit")]
[BepInDependency("h3vr.otherloader", "1.3.0")]
public class Modmas2024_SosigResourcesPlugin : BaseUnityPlugin
{
private static readonly string BasePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
internal static ManualLogSource Logger;
private void Awake()
{
Logger = ((BaseUnityPlugin)this).Logger;
LoadAssets();
}
private void LoadAssets()
{
Harmony.CreateAndPatchAll(Assembly.GetExecutingAssembly(), "Modmas2024.Modmas2024_SosigResources");
OtherLoader.RegisterDirectLoad(BasePath, "Modmas2024.Modmas2024_SosigResources", "", "", "modmas2024_sosigresources", "");
}
}
public class ScopeEditingPanel : MonoBehaviour
{
public Text selectedItemText;
public Text baseMagnificationText;
public Text baseFOVText;
public Text reticleFOVText;
public Text lensDistortionText;
public Text stockZPositionText;
private bool isEditingScopes = true;
private int selectedFirearmIndex;
private int selectedScopeIndex;
private List<PIPScope> scopesInScene = new List<PIPScope>();
private List<FVRFireArm> firearmsInScene = new List<FVRFireArm>();
public void UpdateScopePanel()
{
//IL_0114: Unknown result type (might be due to invalid IL or missing references)
//IL_0119: Unknown result type (might be due to invalid IL or missing references)
PIPScope val = scopesInScene[selectedScopeIndex];
FVRFireArm val2 = firearmsInScene[selectedFirearmIndex];
if (isEditingScopes)
{
selectedItemText.text = ((FVRPhysicalObject)((Component)((Component)val).transform.root).GetComponent<FVRFireArmAttachment>()).ObjectWrapper.DisplayName;
baseMagnificationText.text = "Base Magnification: " + val.baseMagnification;
baseFOVText.text = "Base FOV: " + val.baseFOV;
reticleFOVText.text = "Reticle FOV: " + val.reticle.reticleFOV;
lensDistortionText.text = "Lens Distortion: " + val.distortion;
}
else if (!isEditingScopes)
{
selectedItemText.text = ((FVRPhysicalObject)val2).ObjectWrapper.DisplayName;
stockZPositionText.text = ((Component)val2.StockPos).transform.position.z.ToString();
}
}
public void GrabFirearmsInScene()
{
firearmsInScene.Clear();
firearmsInScene.AddRange(Object.FindObjectsOfType<FVRFireArm>());
selectedFirearmIndex = 0;
}
public void GrabScopesInScene()
{
scopesInScene.Clear();
scopesInScene.AddRange(Object.FindObjectsOfType<PIPScope>());
selectedScopeIndex = 0;
}
public void IndexForward()
{
if (isEditingScopes)
{
if (selectedScopeIndex == scopesInScene.Count)
{
selectedScopeIndex = 0;
}
else
{
selectedScopeIndex++;
}
}
else if (!isEditingScopes)
{
if (selectedFirearmIndex == firearmsInScene.Count)
{
selectedFirearmIndex = 0;
}
else
{
selectedFirearmIndex++;
}
}
UpdateScopePanel();
}
public void IndexBackward()
{
if (isEditingScopes)
{
if (selectedScopeIndex == 0)
{
selectedScopeIndex = scopesInScene.Count;
}
else
{
selectedScopeIndex--;
}
}
else if (!isEditingScopes)
{
if (selectedFirearmIndex == 0)
{
selectedFirearmIndex = firearmsInScene.Count;
}
else
{
selectedFirearmIndex--;
}
}
UpdateScopePanel();
}
public void IndexRefresh()
{
GrabFirearmsInScene();
GrabScopesInScene();
UpdateScopePanel();
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Logging;
using FistVR;
using HarmonyLib;
using OtherLoader;
using UnityEngine;
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("0.0.0.0")]
[module: UnverifiableCode]
public class FlickerLight : MonoBehaviour
{
public float MinLightIntensity = 0.5f;
public float MaxLightIntensity = 2.3f;
public float AccelerateTime = 0.15f;
private float _targetIntensity = 1f;
private float _lastIntensity = 1f;
private float _timePassed = 0f;
private Light _lt;
private const double Tolerance = 0.0001;
private void Start()
{
_lt = ((Component)this).GetComponent<Light>();
_lastIntensity = _lt.intensity;
FixedUpdate();
}
private void FixedUpdate()
{
_timePassed += Time.deltaTime;
_lt.intensity = Mathf.Lerp(_lastIntensity, _targetIntensity, _timePassed / AccelerateTime);
if ((double)Mathf.Abs(_lt.intensity - _targetIntensity) < 0.0001)
{
_lastIntensity = _lt.intensity;
_targetIntensity = Random.Range(MinLightIntensity, MaxLightIntensity);
_timePassed = 0f;
}
}
}
[RequireComponent(typeof(MeshRenderer))]
public class UVOffset : MonoBehaviour
{
public float scrollSpeed = 0.5f;
public bool scrollY = true;
private MeshRenderer renderer;
private void Start()
{
renderer = ((Component)this).GetComponent<MeshRenderer>();
}
private void Update()
{
//IL_003f: 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)
float num = Time.time * scrollSpeed;
((Renderer)renderer).material.SetTextureOffset("_MainTex", (!scrollY) ? new Vector2(0f, num) : new Vector2(num, 0f));
}
}
namespace Storymods.Story_BundleHelmet;
[BepInPlugin("Storymods.Story_BundleHelmet", "Story_BundleHelmet", "1.0.0")]
[BepInProcess("h3vr.exe")]
[Description("Built with MeatKit")]
[BepInDependency("h3vr.otherloader", "1.3.0")]
public class Story_BundleHelmetPlugin : BaseUnityPlugin
{
private static readonly string BasePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
internal static ManualLogSource Logger;
private void Awake()
{
Logger = ((BaseUnityPlugin)this).Logger;
LoadAssets();
}
private void LoadAssets()
{
Harmony.CreateAndPatchAll(Assembly.GetExecutingAssembly(), "Storymods.Story_BundleHelmet");
OtherLoader.RegisterDirectLoad(BasePath, "Storymods.Story_BundleHelmet", "", "", "bundlehelmets", "");
}
}
public class Cabernade : MonoBehaviour
{
public GameObject caberUnexploded;
public GameObject caberExploded;
public bool isCaberKablooey;
public void OnCollisionEnter(Collision col)
{
if (!isCaberKablooey)
{
CaberBlowUp();
}
}
public void CaberBlowUp()
{
caberUnexploded.SetActive(false);
caberExploded.SetActive(true);
isCaberKablooey = true;
}
}
public class SosigRangeEditor : MonoBehaviour
{
public GameObject sosigParent;
public float modifierNumber = 1f;
public bool doesHavePerfectFOV = false;
private void Start()
{
sosigParent = ((Component)((Component)this).transform.root).gameObject;
Sosig component = ((Component)((Component)this).transform).GetComponent<Sosig>();
component.MaxSightRange *= modifierNumber;
if (doesHavePerfectFOV)
{
component.MaxFOV = 360f;
}
else
{
component.MaxFOV *= modifierNumber;
}
}
}
public class CuttableMesh
{
private MeshRenderer inputMeshRenderer;
private bool hasUvs;
private bool hasUv1s;
private bool hasColours;
private List<CuttableSubMesh> subMeshes;
public CuttableMesh(Mesh inputMesh)
{
Init(inputMesh, ((Object)inputMesh).name);
}
public CuttableMesh(MeshRenderer input)
{
inputMeshRenderer = input;
MeshFilter component = ((Component)input).GetComponent<MeshFilter>();
Mesh sharedMesh = component.sharedMesh;
Init(sharedMesh, ((Object)input).name);
}
public CuttableMesh(CuttableMesh inputMesh, List<CuttableSubMesh> newSubMeshes)
{
inputMeshRenderer = inputMesh.inputMeshRenderer;
hasUvs = inputMesh.hasUvs;
hasUv1s = inputMesh.hasUv1s;
hasColours = inputMesh.hasColours;
subMeshes = new List<CuttableSubMesh>();
subMeshes.AddRange(newSubMeshes);
}
private void Init(Mesh inputMesh, string debugName)
{
subMeshes = new List<CuttableSubMesh>();
if (inputMesh.isReadable)
{
Vector3[] vertices = inputMesh.vertices;
Vector3[] normals = inputMesh.normals;
Vector2[] uv = inputMesh.uv;
Vector2[] uv2 = inputMesh.uv2;
Color32[] colors = inputMesh.colors32;
hasUvs = uv != null && uv.Length > 0;
hasUv1s = uv2 != null && uv2.Length > 0;
hasColours = colors != null && colors.Length > 0;
for (int i = 0; i < inputMesh.subMeshCount; i++)
{
int[] indices = inputMesh.GetIndices(i);
CuttableSubMesh item = new CuttableSubMesh(indices, vertices, normals, colors, uv, uv2);
subMeshes.Add(item);
}
}
else
{
Debug.LogError((object)("CuttableMesh's input mesh is not readable: " + debugName), (Object)(object)inputMesh);
}
}
public void Add(CuttableMesh other)
{
if (subMeshes.Count != other.subMeshes.Count)
{
throw new Exception("Mismatched submesh count");
}
for (int i = 0; i < subMeshes.Count; i++)
{
subMeshes[i].Add(other.subMeshes[i]);
}
}
public int NumSubMeshes()
{
return subMeshes.Count;
}
public bool HasUvs()
{
return hasUvs;
}
public bool HasColours()
{
return hasColours;
}
public List<CuttableSubMesh> GetSubMeshes()
{
return subMeshes;
}
public CuttableSubMesh GetSubMesh(int index)
{
return subMeshes[index];
}
public Transform GetTransform()
{
if ((Object)(object)inputMeshRenderer != (Object)null)
{
return ((Component)inputMeshRenderer).transform;
}
return null;
}
public MeshRenderer ConvertToRenderer(string newObjectName)
{
//IL_001b: Unknown result type (might be due to invalid IL or missing references)
//IL_0021: Expected O, but got Unknown
//IL_003d: Unknown result type (might be due to invalid IL or missing references)
//IL_004d: Unknown result type (might be due to invalid IL or missing references)
//IL_005d: 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_0097: 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)
Mesh val = CreateMesh();
if (val.vertexCount == 0)
{
return null;
}
GameObject val2 = new GameObject(newObjectName);
val2.transform.SetParent(((Component)inputMeshRenderer).transform);
val2.transform.localPosition = Vector3.zero;
val2.transform.localRotation = Quaternion.identity;
val2.transform.localScale = Vector3.one;
MeshFilter val3 = val2.AddComponent<MeshFilter>();
val3.mesh = val;
MeshRenderer val4 = val2.AddComponent<MeshRenderer>();
((Renderer)val4).shadowCastingMode = ((Renderer)inputMeshRenderer).shadowCastingMode;
((Renderer)val4).reflectionProbeUsage = ((Renderer)inputMeshRenderer).reflectionProbeUsage;
((Renderer)val4).lightProbeUsage = ((Renderer)inputMeshRenderer).lightProbeUsage;
((Renderer)val4).sharedMaterials = ((Renderer)inputMeshRenderer).sharedMaterials;
return val4;
}
public Mesh CreateMesh()
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Expected O, but got Unknown
Mesh val = new Mesh();
int num = 0;
for (int i = 0; i < subMeshes.Count; i++)
{
num += subMeshes[i].NumIndices();
}
List<Vector3> list = new List<Vector3>();
List<Vector3> list2 = new List<Vector3>();
List<Color32> list3 = ((!hasColours) ? null : new List<Color32>());
List<Vector2> list4 = ((!hasUvs) ? null : new List<Vector2>());
List<Vector2> list5 = ((!hasUv1s) ? null : new List<Vector2>());
List<int> list6 = new List<int>();
foreach (CuttableSubMesh subMesh in subMeshes)
{
list6.Add(list.Count);
subMesh.AddTo(list, list2, list3, list4, list5);
}
val.vertices = list.ToArray();
val.normals = list2.ToArray();
val.colors32 = ((!hasColours) ? null : list3.ToArray());
val.uv = ((!hasUvs) ? null : list4.ToArray());
val.uv2 = ((!hasUv1s) ? null : list5.ToArray());
val.subMeshCount = subMeshes.Count;
for (int j = 0; j < subMeshes.Count; j++)
{
CuttableSubMesh cuttableSubMesh = subMeshes[j];
int num2 = list6[j];
int[] array = cuttableSubMesh.GenIndices();
for (int k = 0; k < array.Length; k++)
{
array[k] += num2;
}
val.SetTriangles(array, j, true);
}
return val;
}
}
public class CuttableSubMesh
{
private List<Vector3> vertices;
private List<Vector3> normals;
private List<Color32> colours;
private List<Vector2> uvs;
private List<Vector2> uv1s;
public CuttableSubMesh(bool hasNormals, bool hasColours, bool hasUvs, bool hasUv1)
{
vertices = new List<Vector3>();
if (hasNormals)
{
normals = new List<Vector3>();
}
if (hasColours)
{
colours = new List<Color32>();
}
if (hasUvs)
{
uvs = new List<Vector2>();
}
if (hasUv1)
{
uv1s = new List<Vector2>();
}
}
public CuttableSubMesh(int[] indices, Vector3[] inputVertices, Vector3[] inputNormals, Color32[] inputColours, Vector2[] inputUvs, Vector2[] inputUv1)
{
//IL_0099: Unknown result type (might be due to invalid IL or missing references)
//IL_00bb: Unknown result type (might be due to invalid IL or missing references)
//IL_00de: 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_0124: Unknown result type (might be due to invalid IL or missing references)
vertices = new List<Vector3>();
if (inputNormals != null && inputNormals.Length > 0)
{
normals = new List<Vector3>();
}
if (inputColours != null && inputColours.Length > 0)
{
colours = new List<Color32>();
}
if (inputUvs != null && inputUvs.Length > 0)
{
uvs = new List<Vector2>();
}
if (inputUv1 != null && inputUv1.Length > 0)
{
uv1s = new List<Vector2>();
}
foreach (int num in indices)
{
vertices.Add(inputVertices[num]);
if (normals != null)
{
normals.Add(inputNormals[num]);
}
if (colours != null)
{
colours.Add(inputColours[num]);
}
if (uvs != null)
{
uvs.Add(inputUvs[num]);
}
if (uv1s != null)
{
uv1s.Add(inputUv1[num]);
}
}
}
public void Add(CuttableSubMesh other)
{
for (int i = 0; i < other.vertices.Count; i++)
{
CopyVertex(i, other);
}
}
public int NumVertices()
{
return vertices.Count;
}
public Vector3 GetVertex(int index)
{
//IL_0008: 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)
return vertices[index];
}
public bool HasNormals()
{
return normals != null;
}
public bool HasColours()
{
return colours != null;
}
public bool HasUvs()
{
return uvs != null;
}
public bool HasUv1()
{
return uv1s != null;
}
public void CopyVertex(int srcIndex, CuttableSubMesh srcMesh)
{
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
//IL_0030: Unknown result type (might be due to invalid IL or missing references)
//IL_0052: 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_0096: Unknown result type (might be due to invalid IL or missing references)
vertices.Add(srcMesh.vertices[srcIndex]);
if (normals != null)
{
normals.Add(srcMesh.normals[srcIndex]);
}
if (colours != null)
{
colours.Add(srcMesh.colours[srcIndex]);
}
if (uvs != null)
{
uvs.Add(srcMesh.uvs[srcIndex]);
}
if (uv1s != null)
{
uv1s.Add(srcMesh.uv1s[srcIndex]);
}
}
public void AddInterpolatedVertex(int i0, int i1, float weight, CuttableSubMesh srcMesh)
{
//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_000d: Unknown result type (might be due to invalid IL or missing references)
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
//IL_0019: Unknown result type (might be due to invalid IL or missing references)
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
//IL_001c: 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_004c: Unknown result type (might be due to invalid IL or missing references)
//IL_0052: Unknown result type (might be due to invalid IL or missing references)
//IL_0057: Unknown result type (might be due to invalid IL or missing references)
//IL_005a: Unknown result type (might be due to invalid IL or missing references)
//IL_007d: Unknown result type (might be due to invalid IL or missing references)
//IL_008a: Unknown result type (might be due to invalid IL or missing references)
//IL_0090: Unknown result type (might be due to invalid IL or missing references)
//IL_00b3: 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_00c6: Unknown result type (might be due to invalid IL or missing references)
//IL_00e9: Unknown result type (might be due to invalid IL or missing references)
//IL_00f6: Unknown result type (might be due to invalid IL or missing references)
//IL_00fc: Unknown result type (might be due to invalid IL or missing references)
Vector3 vertex = srcMesh.GetVertex(i0);
Vector3 vertex2 = srcMesh.GetVertex(i1);
vertices.Add(Vector3.Lerp(vertex, vertex2, weight));
if (normals != null)
{
List<Vector3> list = normals;
Vector3 val = Vector3.Lerp(srcMesh.normals[i0], srcMesh.normals[i1], weight);
list.Add(((Vector3)(ref val)).normalized);
}
if (colours != null)
{
colours.Add(Color32.Lerp(srcMesh.colours[i0], srcMesh.colours[i1], weight));
}
if (uvs != null)
{
uvs.Add(Vector2.Lerp(srcMesh.uvs[i0], srcMesh.uvs[i1], weight));
}
if (uv1s != null)
{
uv1s.Add(Vector2.Lerp(srcMesh.uv1s[i0], srcMesh.uv1s[i1], weight));
}
}
public void AddTo(List<Vector3> destVertices, List<Vector3> destNormals, List<Color32> destColours, List<Vector2> destUvs, List<Vector2> destUv1s)
{
destVertices.AddRange(vertices);
if (normals != null)
{
destNormals.AddRange(normals);
}
if (colours != null)
{
destColours.AddRange(colours);
}
if (uvs != null)
{
destUvs.AddRange(uvs);
}
if (uv1s != null)
{
destUv1s.AddRange(uv1s);
}
}
public int NumIndices()
{
return vertices.Count;
}
public int[] GenIndices()
{
int[] array = new int[vertices.Count];
for (int i = 0; i < array.Length; i++)
{
array[i] = i;
}
return array;
}
}
public enum VertexClassification
{
Front = 1,
Back = 2,
OnPlane = 4
}
public class MeshCutter
{
private CuttableMesh inputMesh;
private List<CuttableSubMesh> outputFrontSubMeshes;
private List<CuttableSubMesh> outputBackSubMeshes;
public void Cut(CuttableMesh input, Plane worldCutPlane)
{
//IL_0067: 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_0038: Unknown result type (might be due to invalid IL or missing references)
//IL_0039: Unknown result type (might be due to invalid IL or missing references)
//IL_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_004c: Unknown result type (might be due to invalid IL or missing references)
//IL_0051: Unknown result type (might be due to invalid IL or missing references)
//IL_0056: 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_005a: 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)
inputMesh = input;
outputFrontSubMeshes = new List<CuttableSubMesh>();
outputBackSubMeshes = new List<CuttableSubMesh>();
Transform transform = inputMesh.GetTransform();
Plane cutPlane = default(Plane);
if ((Object)(object)transform != (Object)null)
{
Vector3 val = transform.InverseTransformPoint(ClosestPointOnPlane(worldCutPlane, Vector3.zero));
Vector3 val2 = transform.InverseTransformDirection(((Plane)(ref worldCutPlane)).normal);
((Plane)(ref cutPlane))..ctor(val2, val);
}
else
{
cutPlane = worldCutPlane;
}
foreach (CuttableSubMesh subMesh in input.GetSubMeshes())
{
Cut(subMesh, cutPlane);
}
}
private static Vector3 ClosestPointOnPlane(Plane plane, Vector3 point)
{
//IL_0003: Unknown result type (might be due to invalid IL or missing references)
//IL_000c: Unknown result type (might be due to invalid IL or missing references)
//IL_0032: 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_003b: Unknown result type (might be due to invalid IL or missing references)
//IL_0040: Unknown result type (might be due to invalid IL or missing references)
//IL_0045: Unknown result type (might be due to invalid IL or missing references)
//IL_0018: 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_0021: Unknown result type (might be due to invalid IL or missing references)
//IL_0026: Unknown result type (might be due to invalid IL or missing references)
//IL_002b: Unknown result type (might be due to invalid IL or missing references)
//IL_004b: Unknown result type (might be due to invalid IL or missing references)
float distanceToPoint = ((Plane)(ref plane)).GetDistanceToPoint(point);
if (((Plane)(ref plane)).GetSide(point))
{
return point - ((Plane)(ref plane)).normal * distanceToPoint;
}
return point + ((Plane)(ref plane)).normal * distanceToPoint;
}
public CuttableMesh GetFrontOutput()
{
return new CuttableMesh(inputMesh, outputFrontSubMeshes);
}
public CuttableMesh GetBackOutput()
{
return new CuttableMesh(inputMesh, outputBackSubMeshes);
}
private void Cut(CuttableSubMesh inputSubMesh, Plane cutPlane)
{
//IL_004f: Unknown result type (might be due to invalid IL or missing references)
//IL_0054: Unknown result type (might be due to invalid IL or missing references)
//IL_0059: Unknown result type (might be due to invalid IL or missing references)
//IL_005e: Unknown result type (might be due to invalid IL or missing references)
//IL_0063: Unknown result type (might be due to invalid IL or missing references)
//IL_0068: Unknown result type (might be due to invalid IL or missing references)
//IL_006b: 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_0076: Unknown result type (might be due to invalid IL or missing references)
//IL_0078: Unknown result type (might be due to invalid IL or missing references)
//IL_0081: 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_0121: 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_015b: 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_02be: Unknown result type (might be due to invalid IL or missing references)
//IL_02c0: Unknown result type (might be due to invalid IL or missing references)
//IL_02c2: Unknown result type (might be due to invalid IL or missing references)
//IL_02c7: Unknown result type (might be due to invalid IL or missing references)
//IL_02c9: Unknown result type (might be due to invalid IL or missing references)
//IL_02cb: Unknown result type (might be due to invalid IL or missing references)
//IL_02cd: Unknown result type (might be due to invalid IL or missing references)
//IL_02d2: Unknown result type (might be due to invalid IL or missing references)
//IL_02d4: Unknown result type (might be due to invalid IL or missing references)
//IL_02d6: Unknown result type (might be due to invalid IL or missing references)
//IL_02d8: Unknown result type (might be due to invalid IL or missing references)
//IL_02dd: Unknown result type (might be due to invalid IL or missing references)
//IL_02df: Unknown result type (might be due to invalid IL or missing references)
//IL_02e3: Unknown result type (might be due to invalid IL or missing references)
//IL_01c8: 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_021d: Unknown result type (might be due to invalid IL or missing references)
//IL_0204: Unknown result type (might be due to invalid IL or missing references)
//IL_029d: Unknown result type (might be due to invalid IL or missing references)
//IL_0284: Unknown result type (might be due to invalid IL or missing references)
//IL_0261: Unknown result type (might be due to invalid IL or missing references)
//IL_0248: Unknown result type (might be due to invalid IL or missing references)
bool hasNormals = inputSubMesh.HasNormals();
bool hasColours = inputSubMesh.HasColours();
bool hasUvs = inputSubMesh.HasUvs();
bool hasUv = inputSubMesh.HasUv1();
CuttableSubMesh cuttableSubMesh = new CuttableSubMesh(hasNormals, hasColours, hasUvs, hasUv);
CuttableSubMesh cuttableSubMesh2 = new CuttableSubMesh(hasNormals, hasColours, hasUvs, hasUv);
for (int i = 0; i < inputSubMesh.NumVertices(); i += 3)
{
int num = i;
int num2 = i + 1;
int num3 = i + 2;
Vector3 vertex = inputSubMesh.GetVertex(num);
Vector3 vertex2 = inputSubMesh.GetVertex(num2);
Vector3 vertex3 = inputSubMesh.GetVertex(num3);
VertexClassification vertexClassification = Classify(vertex, cutPlane);
VertexClassification vertexClassification2 = Classify(vertex2, cutPlane);
VertexClassification vertexClassification3 = Classify(vertex3, cutPlane);
int numFront = 0;
int numBehind = 0;
CountSides(vertexClassification, ref numFront, ref numBehind);
CountSides(vertexClassification2, ref numFront, ref numBehind);
CountSides(vertexClassification3, ref numFront, ref numBehind);
if (numFront > 0 && numBehind == 0)
{
KeepTriangle(num, num2, num3, inputSubMesh, cuttableSubMesh);
}
else if (numFront == 0 && numBehind > 0)
{
KeepTriangle(num, num2, num3, inputSubMesh, cuttableSubMesh2);
}
else if (numFront == 2 && numBehind == 1)
{
if (vertexClassification == VertexClassification.Back)
{
SplitA(num, num2, num3, inputSubMesh, cutPlane, cuttableSubMesh2, cuttableSubMesh);
}
else if (vertexClassification2 == VertexClassification.Back)
{
SplitA(num2, num3, num, inputSubMesh, cutPlane, cuttableSubMesh2, cuttableSubMesh);
}
else
{
SplitA(num3, num, num2, inputSubMesh, cutPlane, cuttableSubMesh2, cuttableSubMesh);
}
}
else if (numFront == 1 && numBehind == 2)
{
if (vertexClassification == VertexClassification.Front)
{
SplitA(num, num2, num3, inputSubMesh, cutPlane, cuttableSubMesh, cuttableSubMesh2);
}
else if (vertexClassification2 == VertexClassification.Front)
{
SplitA(num2, num3, num, inputSubMesh, cutPlane, cuttableSubMesh, cuttableSubMesh2);
}
else
{
SplitA(num3, num, num2, inputSubMesh, cutPlane, cuttableSubMesh, cuttableSubMesh2);
}
}
else if (numFront == 1 && numBehind == 1)
{
if (vertexClassification == VertexClassification.OnPlane)
{
if (vertexClassification3 == VertexClassification.Front)
{
SplitB(num3, num, num2, inputSubMesh, cutPlane, cuttableSubMesh, cuttableSubMesh2);
}
else
{
SplitBFlipped(num2, num3, num, inputSubMesh, cutPlane, cuttableSubMesh, cuttableSubMesh2);
}
continue;
}
switch (vertexClassification2)
{
case VertexClassification.OnPlane:
if (vertexClassification == VertexClassification.Front)
{
SplitB(num, num2, num3, inputSubMesh, cutPlane, cuttableSubMesh, cuttableSubMesh2);
}
else
{
SplitBFlipped(num3, num, num2, inputSubMesh, cutPlane, cuttableSubMesh, cuttableSubMesh2);
}
break;
case VertexClassification.Front:
SplitB(num2, num3, num, inputSubMesh, cutPlane, cuttableSubMesh, cuttableSubMesh2);
break;
default:
SplitBFlipped(num, num2, num3, inputSubMesh, cutPlane, cuttableSubMesh, cuttableSubMesh2);
break;
}
}
else if (numFront == 0 && numBehind == 0)
{
Vector3 val = vertex2 - vertex;
Vector3 val2 = vertex3 - vertex;
Vector3 val3 = Vector3.Cross(val, val2);
if (Vector3.Dot(val3, ((Plane)(ref cutPlane)).normal) > 0f)
{
KeepTriangle(num, num2, num3, inputSubMesh, cuttableSubMesh2);
}
else
{
KeepTriangle(num, num2, num3, inputSubMesh, cuttableSubMesh);
}
}
}
outputFrontSubMeshes.Add(cuttableSubMesh);
outputBackSubMeshes.Add(cuttableSubMesh2);
}
private VertexClassification Classify(Vector3 vertex, Plane cutPlane)
{
//IL_0022: Unknown result type (might be due to invalid IL or missing references)
Vector3 val = default(Vector3);
((Vector3)(ref val))..ctor(vertex.x, vertex.y, vertex.z);
float distanceToPoint = ((Plane)(ref cutPlane)).GetDistanceToPoint(val);
double num = 9.999999747378752E-06;
if ((double)distanceToPoint > 0.0 - num && (double)distanceToPoint < num)
{
return VertexClassification.OnPlane;
}
if (distanceToPoint > 0f)
{
return VertexClassification.Front;
}
return VertexClassification.Back;
}
private void CountSides(VertexClassification c, ref int numFront, ref int numBehind)
{
switch (c)
{
case VertexClassification.Front:
numFront++;
break;
case VertexClassification.Back:
numBehind++;
break;
}
}
private void KeepTriangle(int i0, int i1, int i2, CuttableSubMesh inputSubMesh, CuttableSubMesh destSubMesh)
{
destSubMesh.CopyVertex(i0, inputSubMesh);
destSubMesh.CopyVertex(i1, inputSubMesh);
destSubMesh.CopyVertex(i2, inputSubMesh);
}
private void SplitA(int i0, int i1, int i2, CuttableSubMesh inputSubMesh, Plane cutPlane, CuttableSubMesh frontSubMesh, CuttableSubMesh backSubMesh)
{
//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_000d: Unknown result type (might be due to invalid IL or missing references)
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
//IL_0016: 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_001d: Unknown result type (might be due to invalid IL or missing references)
//IL_001e: Unknown result type (might be due to invalid IL or missing references)
//IL_001f: Unknown result type (might be due to invalid IL or missing references)
//IL_0023: Unknown result type (might be due to invalid IL or missing references)
//IL_002a: Unknown result type (might be due to invalid IL or missing references)
//IL_002b: Unknown result type (might be due to invalid IL or missing references)
//IL_002c: Unknown result type (might be due to invalid IL or missing references)
//IL_0030: Unknown result type (might be due to invalid IL or missing references)
Vector3 vertex = inputSubMesh.GetVertex(i0);
Vector3 vertex2 = inputSubMesh.GetVertex(i1);
Vector3 vertex3 = inputSubMesh.GetVertex(i2);
CalcIntersection(vertex, vertex2, cutPlane, out var weight);
CalcIntersection(vertex3, vertex, cutPlane, out var weight2);
frontSubMesh.CopyVertex(i0, inputSubMesh);
frontSubMesh.AddInterpolatedVertex(i0, i1, weight, inputSubMesh);
frontSubMesh.AddInterpolatedVertex(i2, i0, weight2, inputSubMesh);
backSubMesh.AddInterpolatedVertex(i0, i1, weight, inputSubMesh);
backSubMesh.CopyVertex(i1, inputSubMesh);
backSubMesh.CopyVertex(i2, inputSubMesh);
backSubMesh.CopyVertex(i2, inputSubMesh);
backSubMesh.AddInterpolatedVertex(i2, i0, weight2, inputSubMesh);
backSubMesh.AddInterpolatedVertex(i0, i1, weight, inputSubMesh);
}
private void SplitB(int i0, int i1, int i2, CuttableSubMesh inputSubMesh, Plane cutPlane, CuttableSubMesh frontSubMesh, CuttableSubMesh backSubMesh)
{
//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_000d: Unknown result type (might be due to invalid IL or missing references)
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
//IL_0014: 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_0016: Unknown result type (might be due to invalid IL or missing references)
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
Vector3 vertex = inputSubMesh.GetVertex(i0);
Vector3 vertex2 = inputSubMesh.GetVertex(i2);
CalcIntersection(vertex2, vertex, cutPlane, out var weight);
frontSubMesh.CopyVertex(i0, inputSubMesh);
frontSubMesh.CopyVertex(i1, inputSubMesh);
frontSubMesh.AddInterpolatedVertex(i2, i0, weight, inputSubMesh);
backSubMesh.CopyVertex(i1, inputSubMesh);
backSubMesh.CopyVertex(i2, inputSubMesh);
backSubMesh.AddInterpolatedVertex(i2, i0, weight, inputSubMesh);
}
private void SplitBFlipped(int i0, int i1, int i2, CuttableSubMesh inputSubMesh, Plane cutPlane, CuttableSubMesh frontSubMesh, CuttableSubMesh backSubMesh)
{
//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_000d: Unknown result type (might be due to invalid IL or missing references)
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
//IL_0014: 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_0016: Unknown result type (might be due to invalid IL or missing references)
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
Vector3 vertex = inputSubMesh.GetVertex(i0);
Vector3 vertex2 = inputSubMesh.GetVertex(i1);
CalcIntersection(vertex, vertex2, cutPlane, out var weight);
frontSubMesh.CopyVertex(i0, inputSubMesh);
frontSubMesh.AddInterpolatedVertex(i0, i1, weight, inputSubMesh);
frontSubMesh.CopyVertex(i2, inputSubMesh);
backSubMesh.CopyVertex(i1, inputSubMesh);
backSubMesh.CopyVertex(i2, inputSubMesh);
backSubMesh.AddInterpolatedVertex(i0, i1, weight, inputSubMesh);
}
private Vector3 CalcIntersection(Vector3 v0, Vector3 v1, Plane plane, out float weight)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0003: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: 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_0014: 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_0022: 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_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_0044: Unknown result type (might be due to invalid IL or missing references)
//IL_004c: Unknown result type (might be due to invalid IL or missing references)
//IL_004e: 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)
Vector3 val = v1 - v0;
float magnitude = ((Vector3)(ref val)).magnitude;
Ray val2 = default(Ray);
((Ray)(ref val2))..ctor(v0, val / magnitude);
float num = default(float);
((Plane)(ref plane)).Raycast(val2, ref num);
Vector3 result = ((Ray)(ref val2)).origin + ((Ray)(ref val2)).direction * num;
weight = num / magnitude;
return result;
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Logging;
using FistVR;
using HarmonyLib;
using OtherLoader;
using UnityEngine;
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("0.0.0.0")]
[module: UnverifiableCode]
public class FlickerLight : MonoBehaviour
{
public float MinLightIntensity = 0.5f;
public float MaxLightIntensity = 2.3f;
public float AccelerateTime = 0.15f;
private float _targetIntensity = 1f;
private float _lastIntensity = 1f;
private float _timePassed = 0f;
private Light _lt;
private const double Tolerance = 0.0001;
private void Start()
{
_lt = ((Component)this).GetComponent<Light>();
_lastIntensity = _lt.intensity;
FixedUpdate();
}
private void FixedUpdate()
{
_timePassed += Time.deltaTime;
_lt.intensity = Mathf.Lerp(_lastIntensity, _targetIntensity, _timePassed / AccelerateTime);
if ((double)Mathf.Abs(_lt.intensity - _targetIntensity) < 0.0001)
{
_lastIntensity = _lt.intensity;
_targetIntensity = Random.Range(MinLightIntensity, MaxLightIntensity);
_timePassed = 0f;
}
}
}
[RequireComponent(typeof(MeshRenderer))]
public class UVOffset : MonoBehaviour
{
public float scrollSpeed = 0.5f;
public bool scrollY = true;
private MeshRenderer renderer;
private void Start()
{
renderer = ((Component)this).GetComponent<MeshRenderer>();
}
private void Update()
{
//IL_003f: 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)
float num = Time.time * scrollSpeed;
((Renderer)renderer).material.SetTextureOffset("_MainTex", (!scrollY) ? new Vector2(0f, num) : new Vector2(num, 0f));
}
}
namespace Storymods.Story_BundleVests;
[BepInPlugin("Storymods.Story_BundleVests", "Story_BundleVests", "1.0.0")]
[BepInProcess("h3vr.exe")]
[Description("Built with MeatKit")]
[BepInDependency("h3vr.otherloader", "1.3.0")]
public class Story_BundleVestsPlugin : BaseUnityPlugin
{
private static readonly string BasePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
internal static ManualLogSource Logger;
private void Awake()
{
Logger = ((BaseUnityPlugin)this).Logger;
LoadAssets();
}
private void LoadAssets()
{
Harmony.CreateAndPatchAll(Assembly.GetExecutingAssembly(), "Storymods.Story_BundleVests");
OtherLoader.RegisterDirectLoad(BasePath, "Storymods.Story_BundleVests", "", "", "bundlevests", "");
}
}
public class Cabernade : MonoBehaviour
{
public GameObject caberUnexploded;
public GameObject caberExploded;
public bool isCaberKablooey;
public void OnCollisionEnter(Collision col)
{
if (!isCaberKablooey)
{
CaberBlowUp();
}
}
public void CaberBlowUp()
{
caberUnexploded.SetActive(false);
caberExploded.SetActive(true);
isCaberKablooey = true;
}
}
public class SosigRangeEditor : MonoBehaviour
{
public GameObject sosigParent;
public float modifierNumber = 1f;
public bool doesHavePerfectFOV = false;
private void Start()
{
sosigParent = ((Component)((Component)this).transform.root).gameObject;
Sosig component = ((Component)((Component)this).transform).GetComponent<Sosig>();
component.MaxSightRange *= modifierNumber;
if (doesHavePerfectFOV)
{
component.MaxFOV = 360f;
}
else
{
component.MaxFOV *= modifierNumber;
}
}
}
public class CuttableMesh
{
private MeshRenderer inputMeshRenderer;
private bool hasUvs;
private bool hasUv1s;
private bool hasColours;
private List<CuttableSubMesh> subMeshes;
public CuttableMesh(Mesh inputMesh)
{
Init(inputMesh, ((Object)inputMesh).name);
}
public CuttableMesh(MeshRenderer input)
{
inputMeshRenderer = input;
MeshFilter component = ((Component)input).GetComponent<MeshFilter>();
Mesh sharedMesh = component.sharedMesh;
Init(sharedMesh, ((Object)input).name);
}
public CuttableMesh(CuttableMesh inputMesh, List<CuttableSubMesh> newSubMeshes)
{
inputMeshRenderer = inputMesh.inputMeshRenderer;
hasUvs = inputMesh.hasUvs;
hasUv1s = inputMesh.hasUv1s;
hasColours = inputMesh.hasColours;
subMeshes = new List<CuttableSubMesh>();
subMeshes.AddRange(newSubMeshes);
}
private void Init(Mesh inputMesh, string debugName)
{
subMeshes = new List<CuttableSubMesh>();
if (inputMesh.isReadable)
{
Vector3[] vertices = inputMesh.vertices;
Vector3[] normals = inputMesh.normals;
Vector2[] uv = inputMesh.uv;
Vector2[] uv2 = inputMesh.uv2;
Color32[] colors = inputMesh.colors32;
hasUvs = uv != null && uv.Length > 0;
hasUv1s = uv2 != null && uv2.Length > 0;
hasColours = colors != null && colors.Length > 0;
for (int i = 0; i < inputMesh.subMeshCount; i++)
{
int[] indices = inputMesh.GetIndices(i);
CuttableSubMesh item = new CuttableSubMesh(indices, vertices, normals, colors, uv, uv2);
subMeshes.Add(item);
}
}
else
{
Debug.LogError((object)("CuttableMesh's input mesh is not readable: " + debugName), (Object)(object)inputMesh);
}
}
public void Add(CuttableMesh other)
{
if (subMeshes.Count != other.subMeshes.Count)
{
throw new Exception("Mismatched submesh count");
}
for (int i = 0; i < subMeshes.Count; i++)
{
subMeshes[i].Add(other.subMeshes[i]);
}
}
public int NumSubMeshes()
{
return subMeshes.Count;
}
public bool HasUvs()
{
return hasUvs;
}
public bool HasColours()
{
return hasColours;
}
public List<CuttableSubMesh> GetSubMeshes()
{
return subMeshes;
}
public CuttableSubMesh GetSubMesh(int index)
{
return subMeshes[index];
}
public Transform GetTransform()
{
if ((Object)(object)inputMeshRenderer != (Object)null)
{
return ((Component)inputMeshRenderer).transform;
}
return null;
}
public MeshRenderer ConvertToRenderer(string newObjectName)
{
//IL_001b: Unknown result type (might be due to invalid IL or missing references)
//IL_0021: Expected O, but got Unknown
//IL_003d: Unknown result type (might be due to invalid IL or missing references)
//IL_004d: Unknown result type (might be due to invalid IL or missing references)
//IL_005d: 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_0097: 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)
Mesh val = CreateMesh();
if (val.vertexCount == 0)
{
return null;
}
GameObject val2 = new GameObject(newObjectName);
val2.transform.SetParent(((Component)inputMeshRenderer).transform);
val2.transform.localPosition = Vector3.zero;
val2.transform.localRotation = Quaternion.identity;
val2.transform.localScale = Vector3.one;
MeshFilter val3 = val2.AddComponent<MeshFilter>();
val3.mesh = val;
MeshRenderer val4 = val2.AddComponent<MeshRenderer>();
((Renderer)val4).shadowCastingMode = ((Renderer)inputMeshRenderer).shadowCastingMode;
((Renderer)val4).reflectionProbeUsage = ((Renderer)inputMeshRenderer).reflectionProbeUsage;
((Renderer)val4).lightProbeUsage = ((Renderer)inputMeshRenderer).lightProbeUsage;
((Renderer)val4).sharedMaterials = ((Renderer)inputMeshRenderer).sharedMaterials;
return val4;
}
public Mesh CreateMesh()
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Expected O, but got Unknown
Mesh val = new Mesh();
int num = 0;
for (int i = 0; i < subMeshes.Count; i++)
{
num += subMeshes[i].NumIndices();
}
List<Vector3> list = new List<Vector3>();
List<Vector3> list2 = new List<Vector3>();
List<Color32> list3 = ((!hasColours) ? null : new List<Color32>());
List<Vector2> list4 = ((!hasUvs) ? null : new List<Vector2>());
List<Vector2> list5 = ((!hasUv1s) ? null : new List<Vector2>());
List<int> list6 = new List<int>();
foreach (CuttableSubMesh subMesh in subMeshes)
{
list6.Add(list.Count);
subMesh.AddTo(list, list2, list3, list4, list5);
}
val.vertices = list.ToArray();
val.normals = list2.ToArray();
val.colors32 = ((!hasColours) ? null : list3.ToArray());
val.uv = ((!hasUvs) ? null : list4.ToArray());
val.uv2 = ((!hasUv1s) ? null : list5.ToArray());
val.subMeshCount = subMeshes.Count;
for (int j = 0; j < subMeshes.Count; j++)
{
CuttableSubMesh cuttableSubMesh = subMeshes[j];
int num2 = list6[j];
int[] array = cuttableSubMesh.GenIndices();
for (int k = 0; k < array.Length; k++)
{
array[k] += num2;
}
val.SetTriangles(array, j, true);
}
return val;
}
}
public class CuttableSubMesh
{
private List<Vector3> vertices;
private List<Vector3> normals;
private List<Color32> colours;
private List<Vector2> uvs;
private List<Vector2> uv1s;
public CuttableSubMesh(bool hasNormals, bool hasColours, bool hasUvs, bool hasUv1)
{
vertices = new List<Vector3>();
if (hasNormals)
{
normals = new List<Vector3>();
}
if (hasColours)
{
colours = new List<Color32>();
}
if (hasUvs)
{
uvs = new List<Vector2>();
}
if (hasUv1)
{
uv1s = new List<Vector2>();
}
}
public CuttableSubMesh(int[] indices, Vector3[] inputVertices, Vector3[] inputNormals, Color32[] inputColours, Vector2[] inputUvs, Vector2[] inputUv1)
{
//IL_0099: Unknown result type (might be due to invalid IL or missing references)
//IL_00bb: Unknown result type (might be due to invalid IL or missing references)
//IL_00de: 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_0124: Unknown result type (might be due to invalid IL or missing references)
vertices = new List<Vector3>();
if (inputNormals != null && inputNormals.Length > 0)
{
normals = new List<Vector3>();
}
if (inputColours != null && inputColours.Length > 0)
{
colours = new List<Color32>();
}
if (inputUvs != null && inputUvs.Length > 0)
{
uvs = new List<Vector2>();
}
if (inputUv1 != null && inputUv1.Length > 0)
{
uv1s = new List<Vector2>();
}
foreach (int num in indices)
{
vertices.Add(inputVertices[num]);
if (normals != null)
{
normals.Add(inputNormals[num]);
}
if (colours != null)
{
colours.Add(inputColours[num]);
}
if (uvs != null)
{
uvs.Add(inputUvs[num]);
}
if (uv1s != null)
{
uv1s.Add(inputUv1[num]);
}
}
}
public void Add(CuttableSubMesh other)
{
for (int i = 0; i < other.vertices.Count; i++)
{
CopyVertex(i, other);
}
}
public int NumVertices()
{
return vertices.Count;
}
public Vector3 GetVertex(int index)
{
//IL_0008: 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)
return vertices[index];
}
public bool HasNormals()
{
return normals != null;
}
public bool HasColours()
{
return colours != null;
}
public bool HasUvs()
{
return uvs != null;
}
public bool HasUv1()
{
return uv1s != null;
}
public void CopyVertex(int srcIndex, CuttableSubMesh srcMesh)
{
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
//IL_0030: Unknown result type (might be due to invalid IL or missing references)
//IL_0052: 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_0096: Unknown result type (might be due to invalid IL or missing references)
vertices.Add(srcMesh.vertices[srcIndex]);
if (normals != null)
{
normals.Add(srcMesh.normals[srcIndex]);
}
if (colours != null)
{
colours.Add(srcMesh.colours[srcIndex]);
}
if (uvs != null)
{
uvs.Add(srcMesh.uvs[srcIndex]);
}
if (uv1s != null)
{
uv1s.Add(srcMesh.uv1s[srcIndex]);
}
}
public void AddInterpolatedVertex(int i0, int i1, float weight, CuttableSubMesh srcMesh)
{
//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_000d: Unknown result type (might be due to invalid IL or missing references)
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
//IL_0019: Unknown result type (might be due to invalid IL or missing references)
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
//IL_001c: 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_004c: Unknown result type (might be due to invalid IL or missing references)
//IL_0052: Unknown result type (might be due to invalid IL or missing references)
//IL_0057: Unknown result type (might be due to invalid IL or missing references)
//IL_005a: Unknown result type (might be due to invalid IL or missing references)
//IL_007d: Unknown result type (might be due to invalid IL or missing references)
//IL_008a: Unknown result type (might be due to invalid IL or missing references)
//IL_0090: Unknown result type (might be due to invalid IL or missing references)
//IL_00b3: 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_00c6: Unknown result type (might be due to invalid IL or missing references)
//IL_00e9: Unknown result type (might be due to invalid IL or missing references)
//IL_00f6: Unknown result type (might be due to invalid IL or missing references)
//IL_00fc: Unknown result type (might be due to invalid IL or missing references)
Vector3 vertex = srcMesh.GetVertex(i0);
Vector3 vertex2 = srcMesh.GetVertex(i1);
vertices.Add(Vector3.Lerp(vertex, vertex2, weight));
if (normals != null)
{
List<Vector3> list = normals;
Vector3 val = Vector3.Lerp(srcMesh.normals[i0], srcMesh.normals[i1], weight);
list.Add(((Vector3)(ref val)).normalized);
}
if (colours != null)
{
colours.Add(Color32.Lerp(srcMesh.colours[i0], srcMesh.colours[i1], weight));
}
if (uvs != null)
{
uvs.Add(Vector2.Lerp(srcMesh.uvs[i0], srcMesh.uvs[i1], weight));
}
if (uv1s != null)
{
uv1s.Add(Vector2.Lerp(srcMesh.uv1s[i0], srcMesh.uv1s[i1], weight));
}
}
public void AddTo(List<Vector3> destVertices, List<Vector3> destNormals, List<Color32> destColours, List<Vector2> destUvs, List<Vector2> destUv1s)
{
destVertices.AddRange(vertices);
if (normals != null)
{
destNormals.AddRange(normals);
}
if (colours != null)
{
destColours.AddRange(colours);
}
if (uvs != null)
{
destUvs.AddRange(uvs);
}
if (uv1s != null)
{
destUv1s.AddRange(uv1s);
}
}
public int NumIndices()
{
return vertices.Count;
}
public int[] GenIndices()
{
int[] array = new int[vertices.Count];
for (int i = 0; i < array.Length; i++)
{
array[i] = i;
}
return array;
}
}
public enum VertexClassification
{
Front = 1,
Back = 2,
OnPlane = 4
}
public class MeshCutter
{
private CuttableMesh inputMesh;
private List<CuttableSubMesh> outputFrontSubMeshes;
private List<CuttableSubMesh> outputBackSubMeshes;
public void Cut(CuttableMesh input, Plane worldCutPlane)
{
//IL_0067: 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_0038: Unknown result type (might be due to invalid IL or missing references)
//IL_0039: Unknown result type (might be due to invalid IL or missing references)
//IL_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_004c: Unknown result type (might be due to invalid IL or missing references)
//IL_0051: Unknown result type (might be due to invalid IL or missing references)
//IL_0056: 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_005a: 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)
inputMesh = input;
outputFrontSubMeshes = new List<CuttableSubMesh>();
outputBackSubMeshes = new List<CuttableSubMesh>();
Transform transform = inputMesh.GetTransform();
Plane cutPlane = default(Plane);
if ((Object)(object)transform != (Object)null)
{
Vector3 val = transform.InverseTransformPoint(ClosestPointOnPlane(worldCutPlane, Vector3.zero));
Vector3 val2 = transform.InverseTransformDirection(((Plane)(ref worldCutPlane)).normal);
((Plane)(ref cutPlane))..ctor(val2, val);
}
else
{
cutPlane = worldCutPlane;
}
foreach (CuttableSubMesh subMesh in input.GetSubMeshes())
{
Cut(subMesh, cutPlane);
}
}
private static Vector3 ClosestPointOnPlane(Plane plane, Vector3 point)
{
//IL_0003: Unknown result type (might be due to invalid IL or missing references)
//IL_000c: Unknown result type (might be due to invalid IL or missing references)
//IL_0032: 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_003b: Unknown result type (might be due to invalid IL or missing references)
//IL_0040: Unknown result type (might be due to invalid IL or missing references)
//IL_0045: Unknown result type (might be due to invalid IL or missing references)
//IL_0018: 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_0021: Unknown result type (might be due to invalid IL or missing references)
//IL_0026: Unknown result type (might be due to invalid IL or missing references)
//IL_002b: Unknown result type (might be due to invalid IL or missing references)
//IL_004b: Unknown result type (might be due to invalid IL or missing references)
float distanceToPoint = ((Plane)(ref plane)).GetDistanceToPoint(point);
if (((Plane)(ref plane)).GetSide(point))
{
return point - ((Plane)(ref plane)).normal * distanceToPoint;
}
return point + ((Plane)(ref plane)).normal * distanceToPoint;
}
public CuttableMesh GetFrontOutput()
{
return new CuttableMesh(inputMesh, outputFrontSubMeshes);
}
public CuttableMesh GetBackOutput()
{
return new CuttableMesh(inputMesh, outputBackSubMeshes);
}
private void Cut(CuttableSubMesh inputSubMesh, Plane cutPlane)
{
//IL_004f: Unknown result type (might be due to invalid IL or missing references)
//IL_0054: Unknown result type (might be due to invalid IL or missing references)
//IL_0059: Unknown result type (might be due to invalid IL or missing references)
//IL_005e: Unknown result type (might be due to invalid IL or missing references)
//IL_0063: Unknown result type (might be due to invalid IL or missing references)
//IL_0068: Unknown result type (might be due to invalid IL or missing references)
//IL_006b: 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_0076: Unknown result type (might be due to invalid IL or missing references)
//IL_0078: Unknown result type (might be due to invalid IL or missing references)
//IL_0081: 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_0121: 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_015b: 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_02be: Unknown result type (might be due to invalid IL or missing references)
//IL_02c0: Unknown result type (might be due to invalid IL or missing references)
//IL_02c2: Unknown result type (might be due to invalid IL or missing references)
//IL_02c7: Unknown result type (might be due to invalid IL or missing references)
//IL_02c9: Unknown result type (might be due to invalid IL or missing references)
//IL_02cb: Unknown result type (might be due to invalid IL or missing references)
//IL_02cd: Unknown result type (might be due to invalid IL or missing references)
//IL_02d2: Unknown result type (might be due to invalid IL or missing references)
//IL_02d4: Unknown result type (might be due to invalid IL or missing references)
//IL_02d6: Unknown result type (might be due to invalid IL or missing references)
//IL_02d8: Unknown result type (might be due to invalid IL or missing references)
//IL_02dd: Unknown result type (might be due to invalid IL or missing references)
//IL_02df: Unknown result type (might be due to invalid IL or missing references)
//IL_02e3: Unknown result type (might be due to invalid IL or missing references)
//IL_01c8: 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_021d: Unknown result type (might be due to invalid IL or missing references)
//IL_0204: Unknown result type (might be due to invalid IL or missing references)
//IL_029d: Unknown result type (might be due to invalid IL or missing references)
//IL_0284: Unknown result type (might be due to invalid IL or missing references)
//IL_0261: Unknown result type (might be due to invalid IL or missing references)
//IL_0248: Unknown result type (might be due to invalid IL or missing references)
bool hasNormals = inputSubMesh.HasNormals();
bool hasColours = inputSubMesh.HasColours();
bool hasUvs = inputSubMesh.HasUvs();
bool hasUv = inputSubMesh.HasUv1();
CuttableSubMesh cuttableSubMesh = new CuttableSubMesh(hasNormals, hasColours, hasUvs, hasUv);
CuttableSubMesh cuttableSubMesh2 = new CuttableSubMesh(hasNormals, hasColours, hasUvs, hasUv);
for (int i = 0; i < inputSubMesh.NumVertices(); i += 3)
{
int num = i;
int num2 = i + 1;
int num3 = i + 2;
Vector3 vertex = inputSubMesh.GetVertex(num);
Vector3 vertex2 = inputSubMesh.GetVertex(num2);
Vector3 vertex3 = inputSubMesh.GetVertex(num3);
VertexClassification vertexClassification = Classify(vertex, cutPlane);
VertexClassification vertexClassification2 = Classify(vertex2, cutPlane);
VertexClassification vertexClassification3 = Classify(vertex3, cutPlane);
int numFront = 0;
int numBehind = 0;
CountSides(vertexClassification, ref numFront, ref numBehind);
CountSides(vertexClassification2, ref numFront, ref numBehind);
CountSides(vertexClassification3, ref numFront, ref numBehind);
if (numFront > 0 && numBehind == 0)
{
KeepTriangle(num, num2, num3, inputSubMesh, cuttableSubMesh);
}
else if (numFront == 0 && numBehind > 0)
{
KeepTriangle(num, num2, num3, inputSubMesh, cuttableSubMesh2);
}
else if (numFront == 2 && numBehind == 1)
{
if (vertexClassification == VertexClassification.Back)
{
SplitA(num, num2, num3, inputSubMesh, cutPlane, cuttableSubMesh2, cuttableSubMesh);
}
else if (vertexClassification2 == VertexClassification.Back)
{
SplitA(num2, num3, num, inputSubMesh, cutPlane, cuttableSubMesh2, cuttableSubMesh);
}
else
{
SplitA(num3, num, num2, inputSubMesh, cutPlane, cuttableSubMesh2, cuttableSubMesh);
}
}
else if (numFront == 1 && numBehind == 2)
{
if (vertexClassification == VertexClassification.Front)
{
SplitA(num, num2, num3, inputSubMesh, cutPlane, cuttableSubMesh, cuttableSubMesh2);
}
else if (vertexClassification2 == VertexClassification.Front)
{
SplitA(num2, num3, num, inputSubMesh, cutPlane, cuttableSubMesh, cuttableSubMesh2);
}
else
{
SplitA(num3, num, num2, inputSubMesh, cutPlane, cuttableSubMesh, cuttableSubMesh2);
}
}
else if (numFront == 1 && numBehind == 1)
{
if (vertexClassification == VertexClassification.OnPlane)
{
if (vertexClassification3 == VertexClassification.Front)
{
SplitB(num3, num, num2, inputSubMesh, cutPlane, cuttableSubMesh, cuttableSubMesh2);
}
else
{
SplitBFlipped(num2, num3, num, inputSubMesh, cutPlane, cuttableSubMesh, cuttableSubMesh2);
}
continue;
}
switch (vertexClassification2)
{
case VertexClassification.OnPlane:
if (vertexClassification == VertexClassification.Front)
{
SplitB(num, num2, num3, inputSubMesh, cutPlane, cuttableSubMesh, cuttableSubMesh2);
}
else
{
SplitBFlipped(num3, num, num2, inputSubMesh, cutPlane, cuttableSubMesh, cuttableSubMesh2);
}
break;
case VertexClassification.Front:
SplitB(num2, num3, num, inputSubMesh, cutPlane, cuttableSubMesh, cuttableSubMesh2);
break;
default:
SplitBFlipped(num, num2, num3, inputSubMesh, cutPlane, cuttableSubMesh, cuttableSubMesh2);
break;
}
}
else if (numFront == 0 && numBehind == 0)
{
Vector3 val = vertex2 - vertex;
Vector3 val2 = vertex3 - vertex;
Vector3 val3 = Vector3.Cross(val, val2);
if (Vector3.Dot(val3, ((Plane)(ref cutPlane)).normal) > 0f)
{
KeepTriangle(num, num2, num3, inputSubMesh, cuttableSubMesh2);
}
else
{
KeepTriangle(num, num2, num3, inputSubMesh, cuttableSubMesh);
}
}
}
outputFrontSubMeshes.Add(cuttableSubMesh);
outputBackSubMeshes.Add(cuttableSubMesh2);
}
private VertexClassification Classify(Vector3 vertex, Plane cutPlane)
{
//IL_0022: Unknown result type (might be due to invalid IL or missing references)
Vector3 val = default(Vector3);
((Vector3)(ref val))..ctor(vertex.x, vertex.y, vertex.z);
float distanceToPoint = ((Plane)(ref cutPlane)).GetDistanceToPoint(val);
double num = 9.999999747378752E-06;
if ((double)distanceToPoint > 0.0 - num && (double)distanceToPoint < num)
{
return VertexClassification.OnPlane;
}
if (distanceToPoint > 0f)
{
return VertexClassification.Front;
}
return VertexClassification.Back;
}
private void CountSides(VertexClassification c, ref int numFront, ref int numBehind)
{
switch (c)
{
case VertexClassification.Front:
numFront++;
break;
case VertexClassification.Back:
numBehind++;
break;
}
}
private void KeepTriangle(int i0, int i1, int i2, CuttableSubMesh inputSubMesh, CuttableSubMesh destSubMesh)
{
destSubMesh.CopyVertex(i0, inputSubMesh);
destSubMesh.CopyVertex(i1, inputSubMesh);
destSubMesh.CopyVertex(i2, inputSubMesh);
}
private void SplitA(int i0, int i1, int i2, CuttableSubMesh inputSubMesh, Plane cutPlane, CuttableSubMesh frontSubMesh, CuttableSubMesh backSubMesh)
{
//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_000d: Unknown result type (might be due to invalid IL or missing references)
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
//IL_0016: 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_001d: Unknown result type (might be due to invalid IL or missing references)
//IL_001e: Unknown result type (might be due to invalid IL or missing references)
//IL_001f: Unknown result type (might be due to invalid IL or missing references)
//IL_0023: Unknown result type (might be due to invalid IL or missing references)
//IL_002a: Unknown result type (might be due to invalid IL or missing references)
//IL_002b: Unknown result type (might be due to invalid IL or missing references)
//IL_002c: Unknown result type (might be due to invalid IL or missing references)
//IL_0030: Unknown result type (might be due to invalid IL or missing references)
Vector3 vertex = inputSubMesh.GetVertex(i0);
Vector3 vertex2 = inputSubMesh.GetVertex(i1);
Vector3 vertex3 = inputSubMesh.GetVertex(i2);
CalcIntersection(vertex, vertex2, cutPlane, out var weight);
CalcIntersection(vertex3, vertex, cutPlane, out var weight2);
frontSubMesh.CopyVertex(i0, inputSubMesh);
frontSubMesh.AddInterpolatedVertex(i0, i1, weight, inputSubMesh);
frontSubMesh.AddInterpolatedVertex(i2, i0, weight2, inputSubMesh);
backSubMesh.AddInterpolatedVertex(i0, i1, weight, inputSubMesh);
backSubMesh.CopyVertex(i1, inputSubMesh);
backSubMesh.CopyVertex(i2, inputSubMesh);
backSubMesh.CopyVertex(i2, inputSubMesh);
backSubMesh.AddInterpolatedVertex(i2, i0, weight2, inputSubMesh);
backSubMesh.AddInterpolatedVertex(i0, i1, weight, inputSubMesh);
}
private void SplitB(int i0, int i1, int i2, CuttableSubMesh inputSubMesh, Plane cutPlane, CuttableSubMesh frontSubMesh, CuttableSubMesh backSubMesh)
{
//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_000d: Unknown result type (might be due to invalid IL or missing references)
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
//IL_0014: 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_0016: Unknown result type (might be due to invalid IL or missing references)
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
Vector3 vertex = inputSubMesh.GetVertex(i0);
Vector3 vertex2 = inputSubMesh.GetVertex(i2);
CalcIntersection(vertex2, vertex, cutPlane, out var weight);
frontSubMesh.CopyVertex(i0, inputSubMesh);
frontSubMesh.CopyVertex(i1, inputSubMesh);
frontSubMesh.AddInterpolatedVertex(i2, i0, weight, inputSubMesh);
backSubMesh.CopyVertex(i1, inputSubMesh);
backSubMesh.CopyVertex(i2, inputSubMesh);
backSubMesh.AddInterpolatedVertex(i2, i0, weight, inputSubMesh);
}
private void SplitBFlipped(int i0, int i1, int i2, CuttableSubMesh inputSubMesh, Plane cutPlane, CuttableSubMesh frontSubMesh, CuttableSubMesh backSubMesh)
{
//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_000d: Unknown result type (might be due to invalid IL or missing references)
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
//IL_0014: 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_0016: Unknown result type (might be due to invalid IL or missing references)
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
Vector3 vertex = inputSubMesh.GetVertex(i0);
Vector3 vertex2 = inputSubMesh.GetVertex(i1);
CalcIntersection(vertex, vertex2, cutPlane, out var weight);
frontSubMesh.CopyVertex(i0, inputSubMesh);
frontSubMesh.AddInterpolatedVertex(i0, i1, weight, inputSubMesh);
frontSubMesh.CopyVertex(i2, inputSubMesh);
backSubMesh.CopyVertex(i1, inputSubMesh);
backSubMesh.CopyVertex(i2, inputSubMesh);
backSubMesh.AddInterpolatedVertex(i0, i1, weight, inputSubMesh);
}
private Vector3 CalcIntersection(Vector3 v0, Vector3 v1, Plane plane, out float weight)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0003: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: 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_0014: 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_0022: 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_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_0044: Unknown result type (might be due to invalid IL or missing references)
//IL_004c: Unknown result type (might be due to invalid IL or missing references)
//IL_004e: 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)
Vector3 val = v1 - v0;
float magnitude = ((Vector3)(ref val)).magnitude;
Ray val2 = default(Ray);
((Ray)(ref val2))..ctor(v0, val / magnitude);
float num = default(float);
((Plane)(ref plane)).Raycast(val2, ref num);
Vector3 result = ((Ray)(ref val2)).origin + ((Ray)(ref val2)).direction * num;
weight = num / magnitude;
return result;
}
}