Skip to content

Commit

Permalink
Add project files.
Browse files Browse the repository at this point in the history
  • Loading branch information
josh authored and josh committed May 10, 2022
1 parent 71a7447 commit b45f778
Show file tree
Hide file tree
Showing 8 changed files with 1,437 additions and 0 deletions.
98 changes: 98 additions & 0 deletions ColourBlind.cs
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;
}
}
}
94 changes: 94 additions & 0 deletions ColourBlindComponent.cs
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));
}
}
}
Loading

0 comments on commit b45f778

Please sign in to comment.