Skip to content

Commit b45f778

Browse files
joshjosh
authored andcommitted
Add project files.
1 parent 71a7447 commit b45f778

8 files changed

Lines changed: 1437 additions & 0 deletions

File tree

ColourBlind.cs

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Reflection;
5+
using System.Text;
6+
using System.Threading.Tasks;
7+
using IL2CPPAssetBundleAPI;
8+
using MelonLoader;
9+
using PlagueButtonAPI.Controls;
10+
using UnityEngine;
11+
12+
namespace VRChatAccessability
13+
{
14+
internal class ColourBlind : BaseModule
15+
{
16+
private IL2CPPAssetBundle Bundle = new ();
17+
18+
public override void OnApplicationStart()
19+
{
20+
if (!Bundle.LoadBundle(Assembly.GetExecutingAssembly(), "VRChatAccessability.Resources.assistshader.asset")) // This If Also Checks If It Successfully Loaded As To Prevent Further Exceptions
21+
{
22+
MelonLogger.Error("Failed To Load Bundle! Error: " + Bundle.error);
23+
}
24+
}
25+
26+
public override void OnQuickMenuInit()
27+
{
28+
var Comp = Camera.main.gameObject.AddComponent<ColourBlindComponent>();
29+
Comp.Material = Bundle.Load<GameObject>("LoadMe.prefab").GetComponent<MeshRenderer>().material;
30+
31+
var page = MainClass.MainMenu.AddSubMenu("Accessibility", "Accessibility Options").Item1;
32+
33+
var Access = page.AddCollapsibleButtonGroup("Colour Blind Assist", true);
34+
35+
ToggleButton Protanopia = null; // red
36+
ToggleButton Deuteranopia = null; // green
37+
ToggleButton Tritanopia = null; // blue
38+
39+
Protanopia = Access.AddToggleButton("Protanopia", "Red-Green", b =>
40+
{
41+
MainClass.Config.InternalConfig.Protanopia = b;
42+
MainClass.Config.InternalConfig.Deuteranopia = false;
43+
MainClass.Config.InternalConfig.Tritanopia = false;
44+
45+
Comp.AssistMode = b ? ColourBlindComponent.AssistType.Protanopia : ColourBlindComponent.AssistType.Normal;
46+
47+
Deuteranopia.SetToggleState(false, false);
48+
Tritanopia.SetToggleState(false, false);
49+
}, MainClass.Config.InternalConfig.Protanopia);
50+
51+
Deuteranopia = Access.AddToggleButton("Deuteranopia", "Red–Green-Yellow", b =>
52+
{
53+
MainClass.Config.InternalConfig.Protanopia = false;
54+
MainClass.Config.InternalConfig.Deuteranopia = b;
55+
MainClass.Config.InternalConfig.Tritanopia = false;
56+
57+
Comp.AssistMode = b ? ColourBlindComponent.AssistType.Deuteranopia : ColourBlindComponent.AssistType.Normal;
58+
59+
Protanopia.SetToggleState(false, false);
60+
Tritanopia.SetToggleState(false, false);
61+
}, MainClass.Config.InternalConfig.Deuteranopia);
62+
63+
Tritanopia = Access.AddToggleButton("Tritanopia", "Green-Blue", b =>
64+
{
65+
MainClass.Config.InternalConfig.Protanopia = false;
66+
MainClass.Config.InternalConfig.Deuteranopia = false;
67+
MainClass.Config.InternalConfig.Tritanopia = b;
68+
69+
Comp.AssistMode = b ? ColourBlindComponent.AssistType.Tritanopia : ColourBlindComponent.AssistType.Normal;
70+
71+
Protanopia.SetToggleState(false, false);
72+
Deuteranopia.SetToggleState(false, false);
73+
}, MainClass.Config.InternalConfig.Tritanopia);
74+
75+
page.AddSlider("Strength", "Change the assist strength", val =>
76+
{
77+
MainClass.Config.InternalConfig.AssistStrength = val;
78+
79+
Comp.Strength = val;
80+
}, 0f, 1f, MainClass.Config.InternalConfig.AssistStrength, false, false);
81+
82+
if (MainClass.Config.InternalConfig.Protanopia)
83+
{
84+
Comp.AssistMode = ColourBlindComponent.AssistType.Protanopia;
85+
}
86+
else if (MainClass.Config.InternalConfig.Deuteranopia)
87+
{
88+
Comp.AssistMode = ColourBlindComponent.AssistType.Deuteranopia;
89+
}
90+
else if (MainClass.Config.InternalConfig.Tritanopia)
91+
{
92+
Comp.AssistMode = ColourBlindComponent.AssistType.Tritanopia;
93+
}
94+
95+
Comp.Strength = MainClass.Config.InternalConfig.AssistStrength;
96+
}
97+
}
98+
}

ColourBlindComponent.cs

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Text;
5+
using System.Threading.Tasks;
6+
using MelonLoader;
7+
using UnityEngine;
8+
9+
namespace VRChatAccessability
10+
{
11+
[RegisterTypeInIl2Cpp]
12+
public class ColourBlindComponent : MonoBehaviour
13+
{
14+
public ColourBlindComponent(IntPtr ptr) : base(ptr){}
15+
16+
public enum AssistType
17+
{
18+
Normal,
19+
Deuteranopia,
20+
Protanopia,
21+
Tritanopia
22+
}
23+
24+
public AssistType AssistMode;
25+
26+
public float Strength = 1.0f;
27+
28+
public Material Material;
29+
30+
public bool IsLinear => QualitySettings.activeColorSpace == ColorSpace.Linear;
31+
32+
void Start()
33+
{
34+
// Disable if we don't support image effects
35+
if (!SystemInfo.supportsImageEffects)
36+
{
37+
MelonLogger.Error("Image Effects are not supported on this platform.");
38+
enabled = false;
39+
return;
40+
}
41+
42+
// Disable if we don't support render textures
43+
if (!SystemInfo.supportsRenderTextures)
44+
{
45+
MelonLogger.Error("RenderTextures are not supported on this platform.");
46+
enabled = false;
47+
return;
48+
}
49+
50+
if (Material == null)
51+
{
52+
MelonLogger.Error("Material Is Null!");
53+
enabled = false;
54+
return;
55+
}
56+
57+
if (Material.shader == null)
58+
{
59+
MelonLogger.Error("Shader Is Null!");
60+
enabled = false;
61+
return;
62+
}
63+
64+
// Disable the image effect if the shader can't
65+
// run on the users graphics card
66+
if (!Material.shader.isSupported)
67+
{
68+
MelonLogger.Error("Unsupported shader.");
69+
enabled = false;
70+
return;
71+
}
72+
}
73+
74+
void OnDestroy()
75+
{
76+
if (Material)
77+
{
78+
DestroyImmediate(Material);
79+
}
80+
}
81+
82+
void OnRenderImage(RenderTexture source, RenderTexture destination)
83+
{
84+
if (Material.shader == null || AssistMode == AssistType.Normal)
85+
{
86+
Graphics.Blit(source, destination);
87+
return;
88+
}
89+
90+
Material.SetFloat("_Strength", Strength);
91+
Graphics.Blit(source, destination, Material, ((int)AssistMode - 1) + (IsLinear ? 3 : 0));
92+
}
93+
}
94+
}

0 commit comments

Comments
 (0)