

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 Packer.Helldivers_Stratagem;
[BepInPlugin("Packer.Helldivers_Stratagem", "Helldivers_Stratagem", "1.0.3")]
[BepInProcess("h3vr.exe")]
[Description("Built with MeatKit")]
[BepInDependency("h3vr.otherloader", "1.3.0")]
public class Helldivers_StratagemPlugin : 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(), "Packer.Helldivers_Stratagem");
OtherLoader.RegisterDirectLoad(BasePath, "Packer.Helldivers_Stratagem", "", "", "packer.helldiver_stratagem", "");
}
}
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.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Logging;
using FistVR;
using Microsoft.CodeAnalysis;
using Sodalite.Api;
using UnityEngine;
using UnityEngine.AI;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyCompany("Packer")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyDescription("Stratagem Grenade Library")]
[assembly: AssemblyFileVersion("0.9.0.0")]
[assembly: AssemblyInformationalVersion("0.9.0+0e75825a80da1ab39eafa067de895d580712add0")]
[assembly: AssemblyProduct("Packer.StratagemLibrary")]
[assembly: AssemblyTitle("Stratagem Library Plugin")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("0.9.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
internal sealed class EmbeddedAttribute : Attribute
{
}
}
namespace System.Runtime.CompilerServices
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
internal sealed class RefSafetyRulesAttribute : Attribute
{
public readonly int Version;
public RefSafetyRulesAttribute(int P_0)
{
Version = P_0;
}
}
}
namespace BepInEx
{
[AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)]
[Conditional("CodeGeneration")]
internal sealed class BepInAutoPluginAttribute : Attribute
{
public BepInAutoPluginAttribute(string id = null, string name = null, string version = null)
{
}
}
}
namespace BepInEx.Preloader.Core.Patching
{
[AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)]
[Conditional("CodeGeneration")]
internal sealed class PatcherAutoPluginAttribute : Attribute
{
public PatcherAutoPluginAttribute(string id = null, string name = null, string version = null)
{
}
}
}
namespace Stratagem
{
public class ModLoader
{
public delegate void GameStateDelegate();
[Serializable]
public class ModData
{
public string name;
public string directory;
public AssetBundle bundle;
public Stratagem_Package package;
}
[CompilerGenerated]
private sealed class <LoadModPackages>d__8 : IEnumerator<object>, IDisposable, IEnumerator
{
private int <>1__state;
private object <>2__current;
private int <i>5__1;
private bool <continueOut>5__2;
private ModData <newMod>5__3;
private AssetBundleCreateRequest <asyncBundleRequest>5__4;
private AssetBundle <localAssetBundle>5__5;
private AssetBundleRequest <assetRequest>5__6;
private int <z>5__7;
object IEnumerator<object>.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
object IEnumerator.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
[DebuggerHidden]
public <LoadModPackages>d__8(int <>1__state)
{
this.<>1__state = <>1__state;
}
[DebuggerHidden]
void IDisposable.Dispose()
{
<newMod>5__3 = null;
<asyncBundleRequest>5__4 = null;
<localAssetBundle>5__5 = null;
<assetRequest>5__6 = null;
<>1__state = -2;
}
private bool MoveNext()
{
switch (<>1__state)
{
default:
return false;
case 0:
<>1__state = -1;
StratagemPlugin.Logger.LogMessage((object)"Loading Stratagem Mod Packages");
modDirectories = Directory.GetFiles(Paths.PluginPath, "*.stratagem", SearchOption.AllDirectories).ToList();
<i>5__1 = 0;
goto IL_02ab;
case 1:
<>1__state = -1;
<localAssetBundle>5__5 = <asyncBundleRequest>5__4.assetBundle;
if ((Object)(object)<localAssetBundle>5__5 == (Object)null)
{
StratagemPlugin.Logger.LogError((object)("Failed to load AssetBundle - " + modDirectories[<i>5__1]));
goto IL_029b;
}
<newMod>5__3.bundle = <localAssetBundle>5__5;
mods.Add(<newMod>5__3);
<assetRequest>5__6 = <localAssetBundle>5__5.LoadAssetWithSubAssetsAsync<Stratagem_Package>("Stratagem");
<>2__current = <assetRequest>5__6;
<>1__state = 2;
return true;
case 2:
<>1__state = -1;
if (<assetRequest>5__6 == null)
{
Debug.LogError((object)("Map Generator - Missing Package " + modDirectories[<i>5__1]));
}
else
{
<newMod>5__3.package = <assetRequest>5__6.asset as Stratagem_Package;
<newMod>5__3 = null;
<asyncBundleRequest>5__4 = null;
<localAssetBundle>5__5 = null;
<assetRequest>5__6 = null;
}
goto IL_029b;
case 3:
{
<>1__state = -1;
modsLoaded = true;
return false;
}
IL_02ab:
if (<i>5__1 < modDirectories.Count)
{
<continueOut>5__2 = false;
<z>5__7 = 0;
while (<z>5__7 < mods.Count)
{
if (mods[<z>5__7].directory == modDirectories[<i>5__1])
{
<continueOut>5__2 = true;
break;
}
<z>5__7++;
}
if (<continueOut>5__2)
{
goto IL_029b;
}
StratagemPlugin.Logger.LogMessage((object)("Loading Stratagem Loading - " + modDirectories[<i>5__1]));
<newMod>5__3 = new ModData();
<newMod>5__3.directory = modDirectories[<i>5__1];
<newMod>5__3.name = Path.GetFileName(modDirectories[<i>5__1]);
<asyncBundleRequest>5__4 = AssetBundle.LoadFromFileAsync(<newMod>5__3.directory);
<>2__current = <asyncBundleRequest>5__4;
<>1__state = 1;
return true;
}
StratagemPlugin.Logger.LogMessage((object)("Stratagem Loaded: " + mods.Count));
<>2__current = null;
<>1__state = 3;
return true;
IL_029b:
<i>5__1++;
goto IL_02ab;
}
}
bool IEnumerator.MoveNext()
{
//ILSpy generated this explicit interface implementation from .override directive in MoveNext
return this.MoveNext();
}
[DebuggerHidden]
void IEnumerator.Reset()
{
throw new NotSupportedException();
}
}
[CompilerGenerated]
private sealed class <LoadThemes>d__9 : IEnumerator<object>, IDisposable, IEnumerator
{
private int <>1__state;
private object <>2__current;
public string[] loadThemes;
public ModLoader <>4__this;
private int <mainTexture>5__1;
private int <setIndex>5__2;
private int <x>5__3;
private int <i>5__4;
object IEnumerator<object>.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
object IEnumerator.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
[DebuggerHidden]
public <LoadThemes>d__9(int <>1__state)
{
this.<>1__state = <>1__state;
}
[DebuggerHidden]
void IDisposable.Dispose()
{
<>1__state = -2;
}
private bool MoveNext()
{
int num = <>1__state;
if (num != 0)
{
if (num != 1)
{
return false;
}
<>1__state = -1;
goto IL_0111;
}
<>1__state = -1;
<mainTexture>5__1 = 0;
<setIndex>5__2 = 0;
<x>5__3 = 0;
goto IL_0122;
IL_0111:
<x>5__3++;
goto IL_0122;
IL_0122:
if (<x>5__3 < loadThemes.Length)
{
<i>5__4 = 0;
while (<i>5__4 < mods.Count)
{
if (mods[<i>5__4] != null && !((Object)(object)mods[<i>5__4].package == (Object)null) && !(loadThemes[<x>5__3] == "") && mods[<i>5__4].package.title == loadThemes[<x>5__3])
{
<>2__current = null;
<>1__state = 1;
return true;
}
<i>5__4++;
}
goto IL_0111;
}
return false;
}
bool IEnumerator.MoveNext()
{
//ILSpy generated this explicit interface implementation from .override directive in MoveNext
return this.MoveNext();
}
[DebuggerHidden]
void IEnumerator.Reset()
{
throw new NotSupportedException();
}
}
public static bool modsLoaded = false;
public static List<string> modDirectories = new List<string>();
public static List<ModData> mods = new List<ModData>();
public static event GameStateDelegate GameStateEvent;
public static IEnumerator LoadModPackages()
{
//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
return new <LoadModPackages>d__8(0);
}
public IEnumerator LoadThemes(string[] loadThemes)
{
//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
return new <LoadThemes>d__9(0)
{
<>4__this = this,
loadThemes = loadThemes
};
}
public void SoftUnloadAllMods()
{
for (int i = 0; i < mods.Count; i++)
{
mods[i].bundle.Unload(false);
}
}
public void UnloadMods(bool unloadAllLoadedObjects)
{
for (int i = 0; i < mods.Count; i++)
{
mods[i].bundle.Unload(unloadAllLoadedObjects);
}
}
private void OnDestroy()
{
for (int i = 0; i < mods.Count; i++)
{
mods[i].bundle.Unload(true);
}
mods.Clear();
}
}
[BepInPlugin("Packer.StratagemPlugin", "StratagemPlugin", "1.0.2")]
[BepInProcess("h3vr.exe")]
public class StratagemPlugin : BaseUnityPlugin
{
[CompilerGenerated]
private sealed class <DelayDestroy>d__15 : IEnumerator<object>, IDisposable, IEnumerator
{
private int <>1__state;
private object <>2__current;
public float time;
public GameObject gameObj;
object IEnumerator<object>.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
object IEnumerator.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
[DebuggerHidden]
public <DelayDestroy>d__15(int <>1__state)
{
this.<>1__state = <>1__state;
}
[DebuggerHidden]
void IDisposable.Dispose()
{
<>1__state = -2;
}
private bool MoveNext()
{
//IL_0027: Unknown result type (might be due to invalid IL or missing references)
//IL_0031: Expected O, but got Unknown
switch (<>1__state)
{
default:
return false;
case 0:
<>1__state = -1;
<>2__current = (object)new WaitForSeconds(time);
<>1__state = 1;
return true;
case 1:
<>1__state = -1;
if ((Object)(object)gameObj != (Object)null)
{
Object.Destroy((Object)(object)gameObj);
}
return false;
}
}
bool IEnumerator.MoveNext()
{
//ILSpy generated this explicit interface implementation from .override directive in MoveNext
return this.MoveNext();
}
[DebuggerHidden]
void IEnumerator.Reset()
{
throw new NotSupportedException();
}
}
[CompilerGenerated]
private sealed class <SosigUpdate>d__11 : IEnumerator<object>, IDisposable, IEnumerator
{
private int <>1__state;
private object <>2__current;
private int <i>5__1;
object IEnumerator<object>.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
object IEnumerator.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
[DebuggerHidden]
public <SosigUpdate>d__11(int <>1__state)
{
this.<>1__state = <>1__state;
}
[DebuggerHidden]
void IDisposable.Dispose()
{
<>1__state = -2;
}
private bool MoveNext()
{
//IL_0030: Unknown result type (might be due to invalid IL or missing references)
//IL_003a: Expected O, but got Unknown
switch (<>1__state)
{
default:
return false;
case 0:
<>1__state = -1;
<>2__current = (object)new WaitForSeconds(Random.Range(4f, 6f));
<>1__state = 1;
return true;
case 1:
<>1__state = -1;
if (sosigs != null)
{
<i>5__1 = sosigs.Count - 1;
while (<i>5__1 >= 0)
{
ClearSosig(sosigs[<i>5__1]);
<i>5__1--;
}
((MonoBehaviour)instance).StartCoroutine(SosigUpdate());
return false;
}
return false;
}
}
bool IEnumerator.MoveNext()
{
//ILSpy generated this explicit interface implementation from .override directive in MoveNext
return this.MoveNext();
}
[DebuggerHidden]
void IEnumerator.Reset()
{
throw new NotSupportedException();
}
}
public static StratagemPlugin instance;
public static List<Sosig> sosigs = new List<Sosig>();
private static bool sosigClearUpdate = false;
internal static ManualLogSource Logger { get; private set; }
private void Awake()
{
Logger = ((BaseUnityPlugin)this).Logger;
instance = this;
}
private void Start()
{
((MonoBehaviour)this).StartCoroutine(ModLoader.LoadModPackages());
((MonoBehaviour)instance).StartCoroutine(SosigUpdate());
}
private void OnDestroy()
{
sosigs = null;
}
private void ReregisterSosigKillEvent(Scene current, Scene next)
{
if (!((Object)(object)GM.CurrentSceneSettings == (Object)null))
{
}
}
protected static IEnumerator SosigUpdate()
{
//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
return new <SosigUpdate>d__11(0);
}
public static void AddSosig(Sosig s)
{
for (int num = sosigs.Count - 1; num >= 0; num--)
{
if ((Object)(object)sosigs[num] == (Object)null)
{
sosigs.RemoveAt(num);
}
}
sosigs.Add(s);
}
public static void ClearSosig(Sosig s)
{
//IL_000f: Unknown result type (might be due to invalid IL or missing references)
//IL_0015: Invalid comparison between Unknown and I4
if (sosigs.Contains(s) && (int)s.BodyState == 3)
{
s.ClearSosig();
sosigs.Remove(s);
}
}
public static void DestroyObject(float time, GameObject gameObj)
{
((MonoBehaviour)instance).StartCoroutine(DelayDestroy(time, gameObj));
}
protected static IEnumerator DelayDestroy(float time, GameObject gameObj)
{
//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
return new <DelayDestroy>d__15(0)
{
time = time,
gameObj = gameObj
};
}
}
public class Stratagem_Grenade : FVRPhysicalObject
{
[CompilerGenerated]
private sealed class <SelfDestruct>d__51 : IEnumerator<object>, IDisposable, IEnumerator
{
private int <>1__state;
private object <>2__current;
public float timer;
public Stratagem_Grenade <>4__this;
object IEnumerator<object>.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
object IEnumerator.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
[DebuggerHidden]
public <SelfDestruct>d__51(int <>1__state)
{
this.<>1__state = <>1__state;
}
[DebuggerHidden]
void IDisposable.Dispose()
{
<>1__state = -2;
}
private bool MoveNext()
{
//IL_0035: Unknown result type (might be due to invalid IL or missing references)
//IL_003f: Expected O, but got Unknown
//IL_016c: Unknown result type (might be due to invalid IL or missing references)
//IL_0176: Expected O, but got Unknown
//IL_00fb: 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)
switch (<>1__state)
{
default:
return false;
case 0:
<>1__state = -1;
<>2__current = (object)new WaitForSeconds(timer);
<>1__state = 1;
return true;
case 1:
<>1__state = -1;
if (<>4__this.selected.deployType == Stratagem_Package.DeployType.Hellpod)
{
<>4__this.ShakeScreen();
if (<>4__this.selected.deployType == Stratagem_Package.DeployType.Hellpod)
{
<>4__this.hellpod.transform.SetParent((Transform)null, true);
<>4__this.hellpod.transform.position = ((Component)<>4__this).transform.position;
StratagemPlugin.DestroyObject(300f, <>4__this.hellpod);
}
SM.PlayCoreSound((FVRPooledAudioType)11, <>4__this.hellpodLand, ((Component)<>4__this).transform.position);
<>4__this.hellpodFlame.SetActive(false);
<>4__this.hellpodLandedEffect.SetActive(true);
((Component)<>4__this.callIn).gameObject.SetActive(false);
}
<>4__this.SpawnPrefabs();
<>4__this.SpawnSosigs();
<>4__this.SpawnObjectIDs();
<>2__current = (object)new WaitForSeconds(1f);
<>1__state = 2;
return true;
case 2:
<>1__state = -1;
Object.Destroy((Object)(object)((Component)<>4__this).gameObject);
return false;
}
}
bool IEnumerator.MoveNext()
{
//ILSpy generated this explicit interface implementation from .override directive in MoveNext
return this.MoveNext();
}
[DebuggerHidden]
void IEnumerator.Reset()
{
throw new NotSupportedException();
}
}
[Header("Stratagem")]
public string currentInput = "";
private Stratagem_Package selected;
private bool callingIn = false;
[Header("Visuals")]
public Animator ballAnimator;
public LineRenderer beam;
public MeshRenderer ballGlow;
public LineRenderer lightGlow;
public Material[] ballGlowMats;
public Material[] ballBeamMats;
public Material[] ballLightMats;
public Color[] textColors;
[Header("Hellpod")]
public GameObject hellpod;
public GameObject hellpodFlame;
public GameObject hellpodLandingEffect;
public GameObject hellpodLandedEffect;
public AudioEvent hellpodLand;
public Transform[] hellpodSpawnPoints;
[Header("UI")]
public GameObject inputUI;
public GameObject stratagemsUI;
public GameObject previewPrefab;
[HideInInspector]
public Dictionary<Stratagem_Package, Stratagem_Preview> previews = new Dictionary<Stratagem_Package, Stratagem_Preview>();
public Image[] arrowInputs;
public Sprite[] arrowSprites;
[Header("Call In UI")]
public Transform callIn;
public Text callTitle;
public Text callTimer;
public Text callDistance;
public Image callThumbnail;
public Image callArrow;
private float deployHeight = 1000f;
private float deployTimer = 0f;
private float headBallDistance = 1f;
private Transform parentTarget;
private Vector3 offset;
[Header("Audio")]
public AudioEvent AudEvent_Arrow;
public AudioEvent AudEvent_Ready;
public AudioEvent AudEvent_ReadyLoop;
public AudioEvent AudEvent_Beacon;
public AudioEvent AudEvent_HellpodDrop;
[Header("Rattle")]
public AudioEvent AudEvent_Rattle;
public float RattleRadius = 0.2f;
public float RattleHeight = 0.2f;
private Vector3 m_rattlePos = Vector3.zero;
private Vector3 m_rattleLastPos = Vector3.zero;
private Vector3 m_rattleVel = Vector3.zero;
private bool m_israttleSide = false;
private bool m_wasrattleSide = false;
private float m_rattleTime = 0.1f;
public override void Start()
{
((FVRInteractiveObject)this).Start();
for (int i = 0; i < arrowInputs.Length; i++)
{
((Component)arrowInputs[i]).gameObject.SetActive(false);
}
if ((Object)(object)((FVRPhysicalObject)this).QuickbeltSlot == (Object)null && !((FVRInteractiveObject)this).IsHeld)
{
inputUI.SetActive(false);
stratagemsUI.SetActive(false);
}
((Component)ballGlow).gameObject.SetActive(false);
((Component)lightGlow).gameObject.SetActive(false);
((Component)beam).gameObject.SetActive(false);
previewPrefab.SetActive(false);
((Component)callIn).gameObject.SetActive(false);
hellpod.SetActive(false);
hellpodFlame.SetActive(false);
hellpodLandingEffect.SetActive(false);
hellpodLandedEffect.SetActive(false);
SetupStratagems();
}
private void SetupStratagems()
{
for (int i = 0; i < ModLoader.mods.Count; i++)
{
Stratagem_Package package = ModLoader.mods[i].package;
List<string> list = new List<string>();
if (package.spawnObjectIDs != null)
{
for (int j = 0; j < package.spawnObjectIDs.Length; j++)
{
if (IM.OD.ContainsKey(package.spawnObjectIDs[j]))
{
list.Add(package.spawnObjectIDs[j]);
}
}
}
package.spawnObjectIDs = list.ToArray();
string spawnBackpackID = "";
if (package.spawnBackpackID != null && IM.OD.ContainsKey(package.spawnBackpackID))
{
spawnBackpackID = package.spawnBackpackID;
}
package.spawnBackpackID = spawnBackpackID;
List<int> list2 = new List<int>();
if (package.spawnSosigEnemyIDs != null)
{
for (int k = 0; k < package.spawnSosigEnemyIDs.Length; k++)
{
if (ManagerSingleton<IM>.Instance.odicSosigObjsByID.ContainsKey((SosigEnemyID)package.spawnSosigEnemyIDs[k]))
{
list2.Add(package.spawnSosigEnemyIDs[k]);
}
}
}
package.spawnSosigEnemyIDs = list2.ToArray();
int num = 0;
if (package.spawnPrefabs != null)
{
num = package.spawnPrefabs.Length;
}
else
{
package.spawnPrefabs = (GameObject[])(object)new GameObject[0];
}
int num2 = 0;
if (package.spawnInstantPrefab != null)
{
num2 = package.spawnInstantPrefab.Length;
}
else
{
package.spawnInstantPrefab = (GameObject[])(object)new GameObject[0];
}
if (list.Count == 0 && num == 0 && num2 == 0 && list2.Count == 0)
{
continue;
}
Stratagem_Preview component = Object.Instantiate<GameObject>(previewPrefab, previewPrefab.transform.parent).GetComponent<Stratagem_Preview>();
((Component)component).gameObject.SetActive(true);
component.title.text = package.title;
component.description.text = package.description;
component.icon.sprite = package.icon;
for (int l = 0; l < 10; l++)
{
if (l < package.inputs.Length)
{
component.arrows[l].sprite = arrowSprites[ArrowConvert(package.inputs[l].ToString())];
}
else
{
((Component)component.arrows[l]).gameObject.SetActive(false);
}
}
component.package = package;
previews.Add(package, component);
}
}
private int ArrowConvert(string letter)
{
return letter switch
{
"D" => 1,
"L" => 2,
"R" => 3,
_ => 0,
};
}
private void Update()
{
//IL_0036: Unknown result type (might be due to invalid IL or missing references)
//IL_0045: Unknown result type (might be due to invalid IL or missing references)
//IL_004a: Unknown result type (might be due to invalid IL or missing references)
//IL_004f: 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_0088: Unknown result type (might be due to invalid IL or missing references)
//IL_008d: Unknown result type (might be due to invalid IL or missing references)
//IL_0096: 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_0187: Unknown result type (might be due to invalid IL or missing references)
//IL_0192: Unknown result type (might be due to invalid IL or missing references)
//IL_0197: Unknown result type (might be due to invalid IL or missing references)
//IL_01b7: Unknown result type (might be due to invalid IL or missing references)
if (callingIn)
{
deployTimer = Mathf.Clamp(deployTimer - Time.deltaTime, 0f, float.PositiveInfinity);
Vector3 val = ((Component)this).transform.position - GM.CurrentPlayerBody.Head.position;
headBallDistance = Vector3.Magnitude(val);
beam.widthMultiplier = Mathf.Min(0.175f, 0.175f * headBallDistance);
Vector3 position = GM.CurrentPlayerBody.Head.position;
position.y = ((Component)this).transform.position.y;
((Component)this).transform.LookAt(position);
if (deployTimer > 0.5f)
{
TimeSpan timeSpan = TimeSpan.FromSeconds(Mathf.CeilToInt(deployTimer));
callTimer.text = "INBOUND " + $"{timeSpan.Minutes:00}:{timeSpan.Seconds:00}";
((Component)beam).gameObject.SetActive(true);
}
else
{
callTimer.text = "IMPACT";
((Component)beam).gameObject.SetActive(false);
}
if (selected.deployType == Stratagem_Package.DeployType.Hellpod && (Object)(object)hellpod.transform.parent == (Object)(object)((Component)this).transform)
{
hellpod.transform.localPosition = Vector3.Lerp(Vector3.up * deployHeight, Vector3.zero, Mathf.InverseLerp(selected.deployTimer, 0f, deployTimer));
}
}
if (previews == null || previews.Count <= 0)
{
return;
}
foreach (Stratagem_Package key in previews.Keys)
{
previews.TryGetValue(key, out var value);
if (!((Object)(object)value == (Object)null) && !((Object)(object)value.package == (Object)null))
{
if (value.package.timeout > Time.time)
{
((Component)value.cooldown).gameObject.SetActive(true);
value.arrowsParent.gameObject.SetActive(false);
TimeSpan timeSpan2 = TimeSpan.FromSeconds(Mathf.CeilToInt(Time.time - key.timeout));
value.cooldown.text = "Cooldown T-" + $"{timeSpan2.Minutes:00}:{timeSpan2.Seconds:00}";
}
else
{
((Component)value.cooldown).gameObject.SetActive(false);
value.arrowsParent.gameObject.SetActive(true);
}
}
}
}
private void LateUpdate()
{
//IL_007a: Unknown result type (might be due to invalid IL or missing references)
//IL_0091: Unknown result type (might be due to invalid IL or missing references)
//IL_00a3: Unknown result type (might be due to invalid IL or missing references)
//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
//IL_00b8: Unknown result type (might be due to invalid IL or missing references)
//IL_00bd: Unknown result type (might be due to invalid IL or missing references)
//IL_0044: Unknown result type (might be due to invalid IL or missing references)
//IL_004f: Unknown result type (might be due to invalid IL or missing references)
//IL_0055: Unknown result type (might be due to invalid IL or missing references)
//IL_005a: Unknown result type (might be due to invalid IL or missing references)
//IL_005f: Unknown result type (might be due to invalid IL or missing references)
if (callingIn || ((Component)callIn).gameObject.activeSelf)
{
if ((Object)(object)parentTarget != (Object)null)
{
((Component)this).transform.position = parentTarget.position + parentTarget.rotation * offset;
}
callIn.position = GM.CurrentPlayerBody.Head.position;
callIn.LookAt(((Component)this).transform.position);
Transform obj = callIn;
obj.position += callIn.forward * 2f;
callDistance.text = Mathf.FloorToInt(headBallDistance) + "m";
}
}
private void SpawnPrefabs()
{
//IL_0030: Unknown result type (might be due to invalid IL or missing references)
//IL_0035: Unknown result type (might be due to invalid IL or missing references)
for (int i = 0; i < selected.spawnPrefabs.Length; i++)
{
if ((Object)(object)selected.spawnPrefabs[i] != (Object)null)
{
Object.Instantiate<GameObject>(selected.spawnPrefabs[i], ((Component)this).transform.position, Quaternion.identity);
}
}
}
private void SpawnInstantPrefabs()
{
//IL_0030: Unknown result type (might be due to invalid IL or missing references)
//IL_0035: Unknown result type (might be due to invalid IL or missing references)
for (int i = 0; i < selected.spawnInstantPrefab.Length; i++)
{
if ((Object)(object)selected.spawnInstantPrefab[i] != (Object)null)
{
Object.Instantiate<GameObject>(selected.spawnInstantPrefab[i], ((Component)this).transform.position, Quaternion.identity);
}
}
}
private void SpawnSosigs()
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_000e: 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_001e: Unknown result type (might be due to invalid IL or missing references)
//IL_0027: Expected O, but got Unknown
//IL_002d: Unknown result type (might be due to invalid IL or missing references)
//IL_0032: Unknown result type (might be due to invalid IL or missing references)
//IL_003b: 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_007d: Unknown result type (might be due to invalid IL or missing references)
//IL_008b: Unknown result type (might be due to invalid IL or missing references)
//IL_00ac: Unknown result type (might be due to invalid IL or missing references)
//IL_00b3: Unknown result type (might be due to invalid IL or missing references)
//IL_00b8: Unknown result type (might be due to invalid IL or missing references)
//IL_00bd: Unknown result type (might be due to invalid IL or missing references)
//IL_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)
SpawnOptions val = new SpawnOptions
{
SpawnState = (SosigOrder)1,
SpawnActivated = true,
EquipmentMode = (EquipmentSlots)7,
SpawnWithFullAmmo = true
};
Vector3 val2 = ((Component)this).transform.position;
NavMeshHit val3 = default(NavMeshHit);
for (int i = 0; i < selected.spawnSosigEnemyIDs.Length; i++)
{
if (NavMesh.SamplePosition(val2, ref val3, 15f, -1))
{
val2 = ((NavMeshHit)(ref val3)).position;
}
Sosig val4 = SosigAPI.Spawn(ManagerSingleton<IM>.Instance.odicSosigObjsByID[(SosigEnemyID)selected.spawnSosigEnemyIDs[i]], val, val2, ((Component)this).transform.rotation);
val4.UpdateGuardPoint(val2);
StratagemPlugin.AddSosig(val4);
NavMeshAgent component = ((Component)val4).GetComponent<NavMeshAgent>();
component.obstacleAvoidanceType = (ObstacleAvoidanceType)1;
val2 += ((FVRInteractiveObject)this).Transform.forward;
}
}
private void SpawnObjectIDs()
{
//IL_0077: Unknown result type (might be due to invalid IL or missing references)
//IL_0084: Unknown result type (might be due to invalid IL or missing references)
//IL_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_011c: Unknown result type (might be due to invalid IL or missing references)
//IL_0124: Unknown result type (might be due to invalid IL or missing references)
//IL_0129: Unknown result type (might be due to invalid IL or missing references)
//IL_0136: Unknown result type (might be due to invalid IL or missing references)
//IL_018a: Unknown result type (might be due to invalid IL or missing references)
//IL_0198: Unknown result type (might be due to invalid IL or missing references)
FVRObject value = null;
PlayerBackPack val = null;
if (selected.spawnBackpackID != null && selected.spawnBackpackID != "" && IM.OD.TryGetValue(selected.spawnBackpackID, out value) && (Object)(object)value != (Object)null && (Object)(object)((AnvilAsset)value).GetGameObject() != (Object)null)
{
val = Object.Instantiate<GameObject>(((AnvilAsset)value).GetGameObject(), hellpodSpawnPoints[0].position, hellpodSpawnPoints[0].rotation).GetComponent<PlayerBackPack>();
}
FVRObject value2 = null;
int num = 0;
for (int i = 0; i < selected.spawnObjectIDs.Length; i++)
{
if (!IM.OD.TryGetValue(selected.spawnObjectIDs[i], out value2))
{
Debug.Log((object)("Stratagem: Cannot find object with id: " + selected.spawnObjectIDs[i]));
continue;
}
GameObject val2 = null;
if ((Object)(object)((AnvilAsset)value2).GetGameObject() != (Object)null)
{
val2 = Object.Instantiate<GameObject>(((AnvilAsset)value2).GetGameObject(), hellpodSpawnPoints[num].position + Vector3.up * 0.25f * (float)i, hellpodSpawnPoints[num].rotation);
}
FVRPhysicalObject component = val2.GetComponent<FVRPhysicalObject>();
if ((Object)(object)val != (Object)null && (Object)(object)component != (Object)null)
{
for (int j = 0; j < ((FVRPhysicalObject)val).Slots.Length; j++)
{
if (!((Object)(object)((FVRPhysicalObject)val).Slots[j].HeldObject != (Object)null) && component.Size <= ((FVRPhysicalObject)val).Slots[j].SizeLimit)
{
component.SetQuickBeltSlot(((FVRPhysicalObject)val).Slots[j]);
break;
}
}
}
num = ((num + 1 < hellpodSpawnPoints.Length) ? (num + 1) : 0);
}
}
public void InputDirection(string direction)
{
//IL_01ad: Unknown result type (might be due to invalid IL or missing references)
//IL_020d: Unknown result type (might be due to invalid IL or missing references)
currentInput += direction;
bool flag = false;
for (int i = 0; i < arrowInputs.Length; i++)
{
if (i < currentInput.Length)
{
arrowInputs[i].sprite = arrowSprites[ArrowConvert(currentInput[i].ToString())];
((Component)arrowInputs[i]).gameObject.SetActive(true);
}
else
{
((Component)arrowInputs[i]).gameObject.SetActive(false);
}
}
foreach (ModLoader.ModData mod in ModLoader.mods)
{
if (mod.package.inputs.Contains(currentInput))
{
flag = true;
}
if (mod.package.inputs == currentInput)
{
if (Time.time < mod.package.timeout)
{
ClearEvent();
break;
}
selected = mod.package;
((Renderer)ballGlow).sharedMaterial = ballGlowMats[(int)mod.package.deployColor];
((Renderer)beam).sharedMaterial = ballBeamMats[(int)mod.package.deployColor];
((Renderer)lightGlow).sharedMaterial = ballLightMats[(int)mod.package.deployColor];
((Component)ballGlow).gameObject.SetActive(true);
SM.PlayCoreSound((FVRPooledAudioType)20, AudEvent_Ready, ((Component)this).transform.position);
return;
}
}
if (currentInput.Length >= 10 || !flag)
{
ClearEvent();
}
else
{
SM.PlayCoreSound((FVRPooledAudioType)20, AudEvent_Arrow, ((Component)this).transform.position);
}
}
public override void BeginInteraction(FVRViveHand hand)
{
((FVRPhysicalObject)this).BeginInteraction(hand);
if ((Object)(object)hand != (Object)null && !inputUI.activeSelf && (Object)(object)((FVRPhysicalObject)this).QuickbeltSlot == (Object)null)
{
inputUI.SetActive(true);
stratagemsUI.SetActive(true);
}
}
public override GameObject DuplicateFromSpawnLock(FVRViveHand hand)
{
GameObject val = ((FVRPhysicalObject)this).DuplicateFromSpawnLock(hand);
Stratagem_Grenade component = val.GetComponent<Stratagem_Grenade>();
component.inputUI.SetActive(true);
component.stratagemsUI.SetActive(true);
return val;
}
public override void EndInteraction(FVRViveHand hand)
{
((FVRPhysicalObject)this).EndInteraction(hand);
ClearMenu();
}
public override void SetQuickBeltSlot(FVRQuickBeltSlot slot)
{
((FVRPhysicalObject)this).SetQuickBeltSlot(slot);
ClearMenu();
}
public void ClearMenu()
{
inputUI.SetActive(false);
stratagemsUI.SetActive(false);
if ((Object)(object)selected == (Object)null)
{
ClearEvent(silent: true);
}
}
public override void EndInteractionIntoInventorySlot(FVRViveHand hand, FVRQuickBeltSlot slot)
{
((FVRPhysicalObject)this).EndInteractionIntoInventorySlot(hand, slot);
ClearMenu();
}
public override void OnCollisionEnter(Collision col)
{
//IL_005f: Unknown result type (might be due to invalid IL or missing references)
//IL_0098: Unknown result type (might be due to invalid IL or missing references)
//IL_00c0: 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_00f1: Unknown result type (might be due to invalid IL or missing references)
//IL_0102: Unknown result type (might be due to invalid IL or missing references)
//IL_0107: Unknown result type (might be due to invalid IL or missing references)
//IL_010a: Unknown result type (might be due to invalid IL or missing references)
//IL_010f: Unknown result type (might be due to invalid IL or missing references)
//IL_012e: Unknown result type (might be due to invalid IL or missing references)
//IL_012f: Unknown result type (might be due to invalid IL or missing references)
//IL_0214: Unknown result type (might be due to invalid IL or missing references)
//IL_021f: Unknown result type (might be due to invalid IL or missing references)
//IL_0252: 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_02b2: Unknown result type (might be due to invalid IL or missing references)
//IL_0282: Unknown result type (might be due to invalid IL or missing references)
//IL_028d: Unknown result type (might be due to invalid IL or missing references)
//IL_0292: Unknown result type (might be due to invalid IL or missing references)
//IL_0297: 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)
((FVRPhysicalObject)this).OnCollisionEnter(col);
if (!((FVRInteractiveObject)this).IsHeld && (Object)(object)((FVRPhysicalObject)this).QuickbeltSlot == (Object)null && (Object)(object)selected != (Object)null && !callingIn)
{
callingIn = true;
((Graphic)callTitle).color = textColors[(int)selected.textColor];
callTitle.text = selected.title;
((Graphic)callArrow).color = textColors[(int)selected.textColor];
callThumbnail.sprite = selected.icon;
((FVRPhysicalObject)this).RootRigidbody.velocity = Vector3.zero;
((FVRPhysicalObject)this).RootRigidbody.angularVelocity = Vector3.zero;
((Component)((FVRPhysicalObject)this).RootRigidbody).transform.LookAt(GM.CurrentPlayerBody.Head.position);
Quaternion rotation = ((FVRPhysicalObject)this).RootRigidbody.rotation;
Vector3 eulerAngles = ((Quaternion)(ref rotation)).eulerAngles;
eulerAngles.x = 0f;
eulerAngles.z = 0f;
((FVRPhysicalObject)this).RootRigidbody.MoveRotation(Quaternion.Euler(eulerAngles));
((FVRPhysicalObject)this).RootRigidbody.isKinematic = true;
((FVRPhysicalObject)this).RootRigidbody.detectCollisions = false;
selected.timeout = Time.time + selected.cooldown;
deployTimer = selected.deployTimer;
((Component)callIn).gameObject.SetActive(true);
((Component)ballGlow).gameObject.SetActive(false);
((Component)beam).gameObject.SetActive(true);
((Component)lightGlow).gameObject.SetActive(true);
base.IsPickUpLocked = true;
base.DistantGrabbable = false;
ballAnimator.Play("Stratagem_Open", 0);
if (selected.deployType == Stratagem_Package.DeployType.Hellpod)
{
hellpod.SetActive(true);
hellpod.transform.localPosition = Vector3.up * deployHeight;
hellpodLandingEffect.SetActive(true);
hellpodFlame.SetActive(true);
SM.PlayCoreSound((FVRPooledAudioType)11, AudEvent_HellpodDrop, ((Component)this).transform.position);
}
if ((Object)(object)((Component)col.transform.root).GetComponent<Rigidbody>() != (Object)null)
{
offset = ((Component)this).transform.position - col.transform.position;
parentTarget = col.transform;
}
else
{
offset = Vector3.zero;
parentTarget = null;
}
SM.PlayCoreSound((FVRPooledAudioType)11, AudEvent_Beacon, ((Component)this).transform.position);
SpawnInstantPrefabs();
((MonoBehaviour)this).StartCoroutine(SelfDestruct(deployTimer));
}
}
public IEnumerator SelfDestruct(float timer)
{
//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
return new <SelfDestruct>d__51(0)
{
<>4__this = this,
timer = timer
};
}
private void ShakeScreen()
{
//IL_000d: 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_0098: Unknown result type (might be due to invalid IL or missing references)
//IL_00af: 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)
float num = 10f;
float num2 = Vector3.Distance(((Component)this).transform.position, GM.CurrentPlayerBody.Head.position);
float num3 = 1f;
if (num2 < num)
{
num3 = 0f;
}
else if (num2 < num * 3f)
{
num3 = (num2 - num) / (num * 2f);
}
if (num3 < 1f)
{
SM.PowerSound(num3);
float num4 = Mathf.Clamp(1f - num3, 0f, 1f);
ScreenShake.TriggerShake(new ShakeProfile(3.5f * num4, 0.4f), new VignetteProfile(3.4f * num4, 1f, 0.35f, Color.black));
}
}
public void ClearEvent(bool silent = false)
{
//IL_0050: Unknown result type (might be due to invalid IL or missing references)
currentInput = "";
for (int i = 0; i < arrowInputs.Length; i++)
{
((Component)arrowInputs[i]).gameObject.SetActive(false);
}
if (!silent)
{
SM.PlayCoreSound((FVRPooledAudioType)20, AudEvent_Rattle, ((Component)this).transform.position);
}
}
}
[CreateAssetMenu(fileName = "Stratagem", menuName = "Stratagem/New Stratagem", order = 1)]
public class Stratagem_Package : ScriptableObject
{
public enum DeployType
{
Instant,
Hellpod
}
public enum DeployColor
{
Blue,
Red
}
public enum TextColor
{
Yellow,
Red,
Blue,
Green
}
[Tooltip("Name of the package, should match the Assets/FOLDERNAME")]
public string packageName;
[Tooltip("Name of the stratagem")]
public string title;
[Tooltip("Short description of what this stratagem does")]
[Multiline(2)]
public string description;
public Sprite icon;
[Tooltip("The input combination to spawn this stratagem \nU - Up\nD - Down\nL - Left\nR - Right")]
public string inputs = "UDLR";
[Tooltip("Instant = Instantly spawns all spawn items")]
public DeployType deployType = DeployType.Instant;
[Tooltip("How long before this deploys the spawns, set to 0 for Hellpods")]
public float deployTimer = 5f;
[Tooltip("Time between each use of this stratagem")]
public float cooldown = 20f;
[Tooltip("The color of the stratagem ball and beam")]
public DeployColor deployColor = DeployColor.Blue;
[Tooltip("The color of the type of stratagem, \nRed = Strike\nYellow = Emplacement/Supply")]
public TextColor textColor = TextColor.Yellow;
[HideInInspector]
[Tooltip("The time stamp this stratagem can be used again")]
public float timeout = 0f;
[Header("Spawn")]
[Tooltip("GameObjects that will spawn as soon as the Grenade activates")]
public GameObject[] spawnInstantPrefab;
[Tooltip("GameObjects that will spawn as soon as the deploy type has triggered")]
public GameObject[] spawnPrefabs;
[Tooltip("All Object IDs that will spawn when the deploy type has triggered")]
public string[] spawnObjectIDs;
[Tooltip("All spawn Object IDs will attempt to fit into any free slots on this backpack")]
public string spawnBackpackID;
[Tooltip("All Sosigs that will spawn when the deploy type has triggered")]
public int[] spawnSosigEnemyIDs;
}
public class Stratagem_Preview : FVRPointable
{
[Header("Top Layer")]
public GameObject topLayer;
public Text title;
public Image icon;
public Image[] arrows;
public GameObject arrowsParent;
[Header("Description Layer")]
public GameObject descriptionLayer;
public Text description;
[Header("Cooldown Layer")]
public Text cooldown;
[HideInInspector]
public Stratagem_Package package;
public override void OnPoint(FVRViveHand hand)
{
((FVRPointable)this).OnPoint(hand);
topLayer.SetActive(false);
descriptionLayer.SetActive(true);
}
public override void EndPoint(FVRViveHand hand)
{
((FVRPointable)this).EndPoint(hand);
topLayer.SetActive(true);
descriptionLayer.SetActive(false);
}
}
}
namespace Stratagem.src.Editor
{
internal class Stratagem_Package_Drawer
{
}
}