From 760f5652ed9f401d1ed3fb71ae5f24e90b2e5ec5 Mon Sep 17 00:00:00 2001 From: Brendan King Date: Fri, 2 Sep 2022 18:26:20 -0400 Subject: [PATCH] Colorblind Support Added For: - The Switch --- SwitchMaster/Assets/KMColorblindMode.cs | 60 ++++++ SwitchMaster/Assets/KMColorblindMode.cs.meta | 11 + SwitchMaster/Assets/The Switch/CBTextMat.mat | 76 +++++++ .../Assets/The Switch/CBTextMat.mat.meta | 8 + .../The Switch/OstrichSans-Heavy_90.otf | Bin 0 -> 19460 bytes .../The Switch/OstrichSans-Heavy_90.otf.meta | 22 ++ SwitchMaster/Assets/The Switch/Switch.cs | 38 +++- .../Assets/The Switch/The Switch.prefab | 188 ++++++++++++++++++ 8 files changed, 399 insertions(+), 4 deletions(-) create mode 100644 SwitchMaster/Assets/KMColorblindMode.cs create mode 100644 SwitchMaster/Assets/KMColorblindMode.cs.meta create mode 100644 SwitchMaster/Assets/The Switch/CBTextMat.mat create mode 100644 SwitchMaster/Assets/The Switch/CBTextMat.mat.meta create mode 100644 SwitchMaster/Assets/The Switch/OstrichSans-Heavy_90.otf create mode 100644 SwitchMaster/Assets/The Switch/OstrichSans-Heavy_90.otf.meta diff --git a/SwitchMaster/Assets/KMColorblindMode.cs b/SwitchMaster/Assets/KMColorblindMode.cs new file mode 100644 index 0000000..23f7e62 --- /dev/null +++ b/SwitchMaster/Assets/KMColorblindMode.cs @@ -0,0 +1,60 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Text.RegularExpressions; +using Newtonsoft.Json; +using UnityEngine; + +public class KMColorblindMode : MonoBehaviour +{ + [SerializeField] + private bool _colorblindMode = false; + + public bool ColorblindModeActive + { + get + { + if (Application.isEditor) + return _colorblindMode; + + string key = null; + + KMBombModule bombModule = GetComponent(); + KMNeedyModule needyModule = GetComponent(); + + if (bombModule != null) + key = bombModule.ModuleType; + else if (needyModule != null) + key = needyModule.ModuleType; + else + key = Regex.Replace(gameObject.name, @"\(Clone\)$", ""); + + try + { + var settingsPath = Path.Combine(Path.Combine(Application.persistentDataPath, "Modsettings"), "ColorblindMode.json"); + + ColorblindModeSettings settings = new ColorblindModeSettings(); + if (File.Exists(settingsPath)) + settings = JsonConvert.DeserializeObject(File.ReadAllText(settingsPath)); + + bool? isEnabled = null; + if (!string.IsNullOrEmpty(key) && !settings.EnabledModules.TryGetValue(key, out isEnabled)) + settings.EnabledModules[key] = null; + + File.WriteAllText(settingsPath, JsonConvert.SerializeObject(settings, Formatting.Indented)); + return isEnabled ?? settings.Enabled; + } + catch (Exception e) + { + Debug.LogFormat(@"[Colorblind Mode] Error in ""{0}"": {1} ({2})\n{3}", key ?? "", e.Message, e.GetType().FullName, e.StackTrace); + return false; + } + } + } +} + +internal class ColorblindModeSettings +{ + public bool Enabled = false; + public Dictionary EnabledModules = new Dictionary(); +} \ No newline at end of file diff --git a/SwitchMaster/Assets/KMColorblindMode.cs.meta b/SwitchMaster/Assets/KMColorblindMode.cs.meta new file mode 100644 index 0000000..1d72def --- /dev/null +++ b/SwitchMaster/Assets/KMColorblindMode.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d3efc04ccca332b4eaf7ddb423000fab +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/SwitchMaster/Assets/The Switch/CBTextMat.mat b/SwitchMaster/Assets/The Switch/CBTextMat.mat new file mode 100644 index 0000000..f76ff11 --- /dev/null +++ b/SwitchMaster/Assets/The Switch/CBTextMat.mat @@ -0,0 +1,76 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: CBTextMat + m_Shader: {fileID: 4800000, guid: 306ffc165961a2c40806bad3bb861c43, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: b56500c841d890348ad8a3a72d2e7588, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/SwitchMaster/Assets/The Switch/CBTextMat.mat.meta b/SwitchMaster/Assets/The Switch/CBTextMat.mat.meta new file mode 100644 index 0000000..45927a6 --- /dev/null +++ b/SwitchMaster/Assets/The Switch/CBTextMat.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7f55d16a97b4a944692068ea587fe6f9 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/SwitchMaster/Assets/The Switch/OstrichSans-Heavy_90.otf b/SwitchMaster/Assets/The Switch/OstrichSans-Heavy_90.otf new file mode 100644 index 0000000000000000000000000000000000000000..e93aed3168606941fd26d41d828dd1a822f0af55 GIT binary patch literal 19460 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 lRRxo>7_Sx