mirror of
https://github.com/NuclearPowered/Reactor.git
synced 2026-10-19 15:51:54 +00:00
More extensions
This commit is contained in:
9 files changed
+129
-39
No files matched your search
@@ -11,7 +11,7 @@ namespace Reactor.Debugger
|
||||
{
|
||||
[BepInPlugin(Id)]
|
||||
[BepInProcess("Among Us.exe")]
|
||||
[BepInDependency(ReactorPlugin.Id, "^0.2.0")]
|
||||
[BepInDependency(ReactorPlugin.Id)]
|
||||
[ReactorPluginSide(PluginSide.ClientOnly)]
|
||||
public class DebuggerPlugin : BasePlugin
|
||||
{
|
||||
@@ -57,6 +57,20 @@ namespace Reactor.Debugger
|
||||
ShipStatus.RpcEndGame(GameOverReason.ImpostorDisconnect, false);
|
||||
}
|
||||
|
||||
if (TutorialManager.InstanceExists && GUILayout.Button("Spawn a dummy", new Il2CppReferenceArray<GUILayoutOption>(0)))
|
||||
{
|
||||
var playerControl = Instantiate(TutorialManager.Instance.PlayerPrefab);
|
||||
var i = playerControl.PlayerId = (byte) GameData.Instance.GetAvailableId();
|
||||
GameData.Instance.AddPlayer(playerControl);
|
||||
AmongUsClient.Instance.Spawn(playerControl, -2, SpawnFlags.None);
|
||||
playerControl.transform.position = PlayerControl.LocalPlayer.transform.position;
|
||||
playerControl.GetComponent<DummyBehaviour>().enabled = true;
|
||||
playerControl.NetTransform.enabled = false;
|
||||
playerControl.SetName("Dummy " + (i + 1));
|
||||
playerControl.SetColor((byte) (i % Palette.PlayerColors.Length));
|
||||
GameData.Instance.RpcSetTasks(playerControl.PlayerId, new byte[0]);
|
||||
}
|
||||
|
||||
if (PlayerControl.LocalPlayer)
|
||||
{
|
||||
var position = PlayerControl.LocalPlayer.transform.position;
|
||||
|
||||
Binary file not shown.
@@ -18,24 +18,16 @@ namespace Reactor.Extensions
|
||||
/// </summary>
|
||||
public static class Extensions
|
||||
{
|
||||
/// <summary>
|
||||
/// Stops <paramref name="obj"/> from being destroyed
|
||||
/// </summary>
|
||||
/// <param name="obj">Object to stop from being destroyed</param>
|
||||
/// <returns>Passed <paramref name="obj"/></returns>
|
||||
public static T DontDestroy<T>(this T obj) where T : Object
|
||||
[Obsolete]
|
||||
public static T DontDestroy<T>(T obj) where T : Object
|
||||
{
|
||||
obj.hideFlags |= HideFlags.HideAndDontSave;
|
||||
Object.DontDestroyOnLoad(obj);
|
||||
|
||||
return obj;
|
||||
return UnityObjectExtensions.DontDestroy(obj);
|
||||
}
|
||||
|
||||
public static T DontUnload<T>(this T obj) where T : Object
|
||||
[Obsolete]
|
||||
public static T DontUnload<T>(T obj) where T : Object
|
||||
{
|
||||
obj.hideFlags |= HideFlags.DontUnloadUnusedAsset;
|
||||
|
||||
return obj;
|
||||
return UnityObjectExtensions.DontUnload(obj);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
using System;
|
||||
using UnityEngine;
|
||||
using Object = UnityEngine.Object;
|
||||
|
||||
namespace Reactor.Extensions
|
||||
{
|
||||
public static class TextRendererExtensions
|
||||
{
|
||||
public static TextRendererPrefab Prefab { get; internal set; }
|
||||
|
||||
public static TextRenderer AddTextRenderer(this GameObject gameObject)
|
||||
{
|
||||
if (Prefab == null)
|
||||
{
|
||||
throw new ArgumentException("TextRenderer prefab hasn't been initialized yet");
|
||||
}
|
||||
|
||||
var renderer = gameObject.AddComponent<MeshRenderer>();
|
||||
renderer.material = Prefab.Material;
|
||||
|
||||
gameObject.AddComponent<MeshFilter>();
|
||||
|
||||
var textRenderer = gameObject.AddComponent<TextRenderer>();
|
||||
textRenderer.FontData = Prefab.FontData;
|
||||
|
||||
return textRenderer;
|
||||
}
|
||||
}
|
||||
|
||||
public class TextRendererPrefab
|
||||
{
|
||||
public Material Material { get; }
|
||||
public TextAsset FontData { get; }
|
||||
|
||||
internal TextRendererPrefab(TextRenderer textRenderer)
|
||||
{
|
||||
Material = Object.Instantiate(textRenderer.GetComponent<MeshRenderer>().material).DontDestroy();
|
||||
FontData = Object.Instantiate(textRenderer.FontData).DontDestroy();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace Reactor.Extensions
|
||||
{
|
||||
public static class UnityObjectExtensions
|
||||
{
|
||||
/// <summary>
|
||||
/// Stops <paramref name="obj"/> from being destroyed
|
||||
/// </summary>
|
||||
/// <param name="obj">Object to stop from being destroyed</param>
|
||||
/// <returns>Passed <paramref name="obj"/></returns>
|
||||
public static T DontDestroy<T>(this T obj) where T : Object
|
||||
{
|
||||
obj.hideFlags |= HideFlags.HideAndDontSave;
|
||||
|
||||
return obj.DontDestroyOnLoad();
|
||||
}
|
||||
|
||||
public static T DontUnload<T>(this T obj) where T : Object
|
||||
{
|
||||
obj.hideFlags |= HideFlags.DontUnloadUnusedAsset;
|
||||
|
||||
return obj;
|
||||
}
|
||||
|
||||
public static T DontDestroyOnLoad<T>(this T obj) where T : Object
|
||||
{
|
||||
Object.DontDestroyOnLoad(obj);
|
||||
|
||||
return obj;
|
||||
}
|
||||
|
||||
public static void Destroy(this Object obj)
|
||||
{
|
||||
Object.Destroy(obj);
|
||||
}
|
||||
|
||||
public static void DestroyImmediate(this Object obj)
|
||||
{
|
||||
Object.DestroyImmediate(obj);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -77,6 +77,9 @@ namespace Reactor.Patches
|
||||
|
||||
ackCallback = (Action) (() =>
|
||||
{
|
||||
if (__instance.State == ConnectionState.Connected)
|
||||
return;
|
||||
|
||||
PluginSingleton<ReactorPlugin>.Instance.Log.LogDebug("Hello was acked, waiting for modded handshake response");
|
||||
|
||||
Coroutines.Start(Coroutine());
|
||||
|
||||
@@ -2,6 +2,8 @@ using System;
|
||||
using System.Reflection;
|
||||
using BepInEx;
|
||||
using BepInEx.IL2CPP;
|
||||
using Reactor.Extensions;
|
||||
using UnityEngine;
|
||||
using UnityEngine.SceneManagement;
|
||||
|
||||
namespace Reactor.Patches
|
||||
@@ -16,30 +18,30 @@ namespace Reactor.Patches
|
||||
|
||||
internal static void Initialize()
|
||||
{
|
||||
SceneManager.add_sceneLoaded((Action<Scene, LoadSceneMode>) ((scene, loadMode) =>
|
||||
SceneManager.add_sceneLoaded((Action<Scene, LoadSceneMode>) ((_, _) =>
|
||||
{
|
||||
var original = UnityEngine.Object.FindObjectOfType<VersionShower>();
|
||||
if (!original)
|
||||
return;
|
||||
|
||||
var gameObject = UnityEngine.Object.Instantiate(original.gameObject);
|
||||
gameObject.name = "ReactorVersion";
|
||||
TextRendererExtensions.Prefab ??= new TextRendererPrefab(original.gameObject.GetComponentInChildren<TextRenderer>());
|
||||
|
||||
var versionShower = gameObject.GetComponent<VersionShower>();
|
||||
if (versionShower)
|
||||
{
|
||||
versionShower.enabled = false;
|
||||
}
|
||||
var gameObject = new GameObject("ReactorVersion");
|
||||
gameObject.transform.parent = original.transform.parent;
|
||||
|
||||
var aspectPosition = gameObject.GetComponent<AspectPosition>();
|
||||
var aspectPosition = gameObject.AddComponent<AspectPosition>();
|
||||
|
||||
var position = aspectPosition.DistanceFromEdge;
|
||||
aspectPosition.Alignment = AspectPosition.EdgeAlignments.LeftTop;
|
||||
|
||||
var position = original.GetComponent<AspectPosition>().DistanceFromEdge;
|
||||
position.y += 0.2f;
|
||||
aspectPosition.DistanceFromEdge = position;
|
||||
|
||||
aspectPosition.AdjustPosition();
|
||||
|
||||
Text = gameObject.GetComponentInChildren<TextRenderer>();
|
||||
Text = gameObject.AddTextRenderer();
|
||||
Text.scale = 0.65f;
|
||||
|
||||
UpdateText();
|
||||
}));
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
<LangVersion>latest</LangVersion>
|
||||
|
||||
<VersionPrefix>0.3.0</VersionPrefix>
|
||||
<VersionSuffix>dev</VersionSuffix>
|
||||
<Description>Core mod and API for Among Us</Description>
|
||||
<Authors>NuclearPowered</Authors>
|
||||
</PropertyGroup>
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
using System;
|
||||
using Reactor.Extensions;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
@@ -18,20 +17,15 @@ namespace Reactor.Unstrip
|
||||
Graphic.defaultGraphicMaterial.shader = backupShader;
|
||||
}
|
||||
|
||||
var tex = new Texture2D(1, 1, TextureFormat.RGBA32, Texture.GenerateAllMips, false, IntPtr.Zero);
|
||||
tex.SetPixel(0, 0, Color.red);
|
||||
|
||||
var sprite = tex.CreateSprite();
|
||||
|
||||
GUIExtensions.StandardResources = new DefaultControls.Resources
|
||||
{
|
||||
background = sprite,
|
||||
checkmark = sprite,
|
||||
dropdown = sprite,
|
||||
knob = sprite,
|
||||
mask = sprite,
|
||||
standard = sprite,
|
||||
inputField = sprite
|
||||
background = bundle.LoadAsset<Sprite>("Background").DontUnload(),
|
||||
checkmark = bundle.LoadAsset<Sprite>("Checkmark").DontUnload(),
|
||||
dropdown = bundle.LoadAsset<Sprite>("DropdownArrow").DontUnload(),
|
||||
knob = bundle.LoadAsset<Sprite>("Knob").DontUnload(),
|
||||
mask = bundle.LoadAsset<Sprite>("UIMask").DontUnload(),
|
||||
standard = bundle.LoadAsset<Sprite>("UISprite").DontUnload(),
|
||||
inputField = bundle.LoadAsset<Sprite>("InputFieldBackground").DontUnload()
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user