-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
josh
authored and
josh
committed
May 10, 2022
1 parent
71a7447
commit b45f778
Showing
8 changed files
with
1,437 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,98 @@ | ||
using System; | ||
using System.Collections.Generic; | ||
using System.Linq; | ||
using System.Reflection; | ||
using System.Text; | ||
using System.Threading.Tasks; | ||
using IL2CPPAssetBundleAPI; | ||
using MelonLoader; | ||
using PlagueButtonAPI.Controls; | ||
using UnityEngine; | ||
|
||
namespace VRChatAccessability | ||
{ | ||
internal class ColourBlind : BaseModule | ||
{ | ||
private IL2CPPAssetBundle Bundle = new (); | ||
|
||
public override void OnApplicationStart() | ||
{ | ||
if (!Bundle.LoadBundle(Assembly.GetExecutingAssembly(), "VRChatAccessability.Resources.assistshader.asset")) // This If Also Checks If It Successfully Loaded As To Prevent Further Exceptions | ||
{ | ||
MelonLogger.Error("Failed To Load Bundle! Error: " + Bundle.error); | ||
} | ||
} | ||
|
||
public override void OnQuickMenuInit() | ||
{ | ||
var Comp = Camera.main.gameObject.AddComponent<ColourBlindComponent>(); | ||
Comp.Material = Bundle.Load<GameObject>("LoadMe.prefab").GetComponent<MeshRenderer>().material; | ||
|
||
var page = MainClass.MainMenu.AddSubMenu("Accessibility", "Accessibility Options").Item1; | ||
|
||
var Access = page.AddCollapsibleButtonGroup("Colour Blind Assist", true); | ||
|
||
ToggleButton Protanopia = null; // red | ||
ToggleButton Deuteranopia = null; // green | ||
ToggleButton Tritanopia = null; // blue | ||
|
||
Protanopia = Access.AddToggleButton("Protanopia", "Red-Green", b => | ||
{ | ||
MainClass.Config.InternalConfig.Protanopia = b; | ||
MainClass.Config.InternalConfig.Deuteranopia = false; | ||
MainClass.Config.InternalConfig.Tritanopia = false; | ||
Comp.AssistMode = b ? ColourBlindComponent.AssistType.Protanopia : ColourBlindComponent.AssistType.Normal; | ||
Deuteranopia.SetToggleState(false, false); | ||
Tritanopia.SetToggleState(false, false); | ||
}, MainClass.Config.InternalConfig.Protanopia); | ||
|
||
Deuteranopia = Access.AddToggleButton("Deuteranopia", "Red–Green-Yellow", b => | ||
{ | ||
MainClass.Config.InternalConfig.Protanopia = false; | ||
MainClass.Config.InternalConfig.Deuteranopia = b; | ||
MainClass.Config.InternalConfig.Tritanopia = false; | ||
Comp.AssistMode = b ? ColourBlindComponent.AssistType.Deuteranopia : ColourBlindComponent.AssistType.Normal; | ||
Protanopia.SetToggleState(false, false); | ||
Tritanopia.SetToggleState(false, false); | ||
}, MainClass.Config.InternalConfig.Deuteranopia); | ||
|
||
Tritanopia = Access.AddToggleButton("Tritanopia", "Green-Blue", b => | ||
{ | ||
MainClass.Config.InternalConfig.Protanopia = false; | ||
MainClass.Config.InternalConfig.Deuteranopia = false; | ||
MainClass.Config.InternalConfig.Tritanopia = b; | ||
Comp.AssistMode = b ? ColourBlindComponent.AssistType.Tritanopia : ColourBlindComponent.AssistType.Normal; | ||
Protanopia.SetToggleState(false, false); | ||
Deuteranopia.SetToggleState(false, false); | ||
}, MainClass.Config.InternalConfig.Tritanopia); | ||
|
||
page.AddSlider("Strength", "Change the assist strength", val => | ||
{ | ||
MainClass.Config.InternalConfig.AssistStrength = val; | ||
Comp.Strength = val; | ||
}, 0f, 1f, MainClass.Config.InternalConfig.AssistStrength, false, false); | ||
|
||
if (MainClass.Config.InternalConfig.Protanopia) | ||
{ | ||
Comp.AssistMode = ColourBlindComponent.AssistType.Protanopia; | ||
} | ||
else if (MainClass.Config.InternalConfig.Deuteranopia) | ||
{ | ||
Comp.AssistMode = ColourBlindComponent.AssistType.Deuteranopia; | ||
} | ||
else if (MainClass.Config.InternalConfig.Tritanopia) | ||
{ | ||
Comp.AssistMode = ColourBlindComponent.AssistType.Tritanopia; | ||
} | ||
|
||
Comp.Strength = MainClass.Config.InternalConfig.AssistStrength; | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,94 @@ | ||
using System; | ||
using System.Collections.Generic; | ||
using System.Linq; | ||
using System.Text; | ||
using System.Threading.Tasks; | ||
using MelonLoader; | ||
using UnityEngine; | ||
|
||
namespace VRChatAccessability | ||
{ | ||
[RegisterTypeInIl2Cpp] | ||
public class ColourBlindComponent : MonoBehaviour | ||
{ | ||
public ColourBlindComponent(IntPtr ptr) : base(ptr){} | ||
|
||
public enum AssistType | ||
{ | ||
Normal, | ||
Deuteranopia, | ||
Protanopia, | ||
Tritanopia | ||
} | ||
|
||
public AssistType AssistMode; | ||
|
||
public float Strength = 1.0f; | ||
|
||
public Material Material; | ||
|
||
public bool IsLinear => QualitySettings.activeColorSpace == ColorSpace.Linear; | ||
|
||
void Start() | ||
{ | ||
// Disable if we don't support image effects | ||
if (!SystemInfo.supportsImageEffects) | ||
{ | ||
MelonLogger.Error("Image Effects are not supported on this platform."); | ||
enabled = false; | ||
return; | ||
} | ||
|
||
// Disable if we don't support render textures | ||
if (!SystemInfo.supportsRenderTextures) | ||
{ | ||
MelonLogger.Error("RenderTextures are not supported on this platform."); | ||
enabled = false; | ||
return; | ||
} | ||
|
||
if (Material == null) | ||
{ | ||
MelonLogger.Error("Material Is Null!"); | ||
enabled = false; | ||
return; | ||
} | ||
|
||
if (Material.shader == null) | ||
{ | ||
MelonLogger.Error("Shader Is Null!"); | ||
enabled = false; | ||
return; | ||
} | ||
|
||
// Disable the image effect if the shader can't | ||
// run on the users graphics card | ||
if (!Material.shader.isSupported) | ||
{ | ||
MelonLogger.Error("Unsupported shader."); | ||
enabled = false; | ||
return; | ||
} | ||
} | ||
|
||
void OnDestroy() | ||
{ | ||
if (Material) | ||
{ | ||
DestroyImmediate(Material); | ||
} | ||
} | ||
|
||
void OnRenderImage(RenderTexture source, RenderTexture destination) | ||
{ | ||
if (Material.shader == null || AssistMode == AssistType.Normal) | ||
{ | ||
Graphics.Blit(source, destination); | ||
return; | ||
} | ||
|
||
Material.SetFloat("_Strength", Strength); | ||
Graphics.Blit(source, destination, Material, ((int)AssistMode - 1) + (IsLinear ? 3 : 0)); | ||
} | ||
} | ||
} |
Oops, something went wrong.