#if UNITY_EDITOR using System; using System.Collections.Generic; using System.IO; using System.Linq; using UnityEditor; using UnityEngine; namespace lilToon { public class lilLanguageManager { private static readonly Dictionary loc = new Dictionary(); public static string sMainColorBranch; public static string sCullModes; public static string sBlendModes; public static string sAlphaModes; public static string sAlphaMaskModes; public static string blinkSetting; public static string sDistanceFadeSetting; public static string sDistanceFadeSettingMode; public static string sDissolveParams; public static string sDissolveParamsMode; public static string sDissolveParamsOther; public static string sGlitterParams1; public static string sGlitterParams2; public static string sTransparentMode; public static string sOutlineVertexColorUsages; public static string sShadowColorTypes; public static string sShadowMaskTypes; public static string[] sRenderingModeList; public static string[] sRenderingModeListLite; public static string[] sTransparentModeList; public static string[] sBlendModeList; public static GUIContent mainColorRGBAContent; public static GUIContent colorRGBAContent; public static GUIContent colorAlphaRGBAContent; public static GUIContent maskBlendContent; public static GUIContent maskBlendRGBContent; public static GUIContent maskBlendRGBAContent; public static GUIContent colorMaskRGBAContent; public static GUIContent alphaMaskContent; public static GUIContent ditherContent; public static GUIContent maskStrengthContent; public static GUIContent normalMapContent; public static GUIContent noiseMaskContent; public static GUIContent adjustMaskContent; public static GUIContent matcapContent; public static GUIContent gradationContent; public static GUIContent gradSpeedContent; public static GUIContent smoothnessContent; public static GUIContent metallicContent; public static GUIContent parallaxContent; public static GUIContent audioLinkMaskContent; public static GUIContent audioLinkMaskSpectrumContent; public static GUIContent customMaskContent; public static GUIContent shadow1stColorRGBAContent; public static GUIContent shadow2ndColorRGBAContent; public static GUIContent shadow3rdColorRGBAContent; public static GUIContent blurMaskRGBContent; public static GUIContent shadowAOMapContent; public static GUIContent widthMaskContent; public static GUIContent lengthMaskContent; public static GUIContent triMaskContent; public static GUIContent cubemapContent; public static GUIContent audioLinkLocalMapContent; public static GUIContent gradationMapContent; public static LanguageSettings langSet { get { return LanguageSettings.instance; } } public class LanguageSettings : ScriptableSingleton { public int languageNum = -1; public string languageNames = ""; public string languageName = "English"; } public static string GetLoc(string value) { return loc.ContainsKey(value) ? loc[value] : value; } public static string BuildParams(params string[] labels) { return string.Join("|", labels); } public static bool ShouldApplyTemp() { return string.IsNullOrEmpty(langSet.languageNames); } public static void LoadCustomLanguage(string langFileGUID) { LoadLanguage(lilDirectoryManager.GUIDToPath(langFileGUID)); } [Obsolete] public static void InitializeLanguage() { if(langSet.languageNum == -1) { if(Application.systemLanguage == SystemLanguage.Japanese) langSet.languageNum = 1; else if(Application.systemLanguage == SystemLanguage.Korean) langSet.languageNum = 2; else if(Application.systemLanguage == SystemLanguage.ChineseSimplified) langSet.languageNum = 3; else if(Application.systemLanguage == SystemLanguage.ChineseTraditional) langSet.languageNum = 4; else langSet.languageNum = 0; } if(loc.Count == 0) { UpdateLanguage(); } } public static void UpdateLanguage() { #pragma warning disable CS0612 string langPath = lilDirectoryManager.GetEditorLanguageFileGUID(); #pragma warning restore CS0612 LoadLanguage(langPath); InitializeLabels(); } public static void SelectLang() { #pragma warning disable CS0612 InitializeLanguage(); #pragma warning restore CS0612 int numbuf = langSet.languageNum; langSet.languageNum = EditorGUILayout.Popup("Language", langSet.languageNum, langSet.languageNames.Split('\t')); if(numbuf != langSet.languageNum) UpdateLanguage(); if(!string.IsNullOrEmpty(GetLoc("sLanguageWarning"))) EditorGUILayout.HelpBox(GetLoc("sLanguageWarning"),MessageType.Warning); } private static void LoadLanguage(string langPath) { if(string.IsNullOrEmpty(langPath) || !File.Exists(langPath)) return; StreamReader sr = new StreamReader(langPath); string str = sr.ReadLine(); langSet.languageNames = str.Substring(str.IndexOf("\t")+1); langSet.languageName = langSet.languageNames.Split('\t')[langSet.languageNum]; while((str = sr.ReadLine()) != null) { var lineContents = str.Split('\t'); loc[lineContents[0]] = lineContents[langSet.languageNum+1]; } sr.Close(); } private static void InitializeLabels() { loc["sCullModes"] = BuildParams(GetLoc("sCullMode"), GetLoc("sCullModeOff"), GetLoc("sCullModeFront"), GetLoc("sCullModeBack")); loc["sBlendModes"] = BuildParams(GetLoc("sBlendMode"), GetLoc("sBlendModeNormal"), GetLoc("sBlendModeAdd"), GetLoc("sBlendModeScreen"), GetLoc("sBlendModeMul")); loc["sAlphaModes"] = BuildParams(GetLoc("sTransparentMode"), GetLoc("sAlphaMaskModeNone"), GetLoc("sAlphaMaskModeReplace"), GetLoc("sAlphaMaskModeMul"), GetLoc("sAlphaMaskModeAdd"), GetLoc("sAlphaMaskModeSub")); loc["sAlphaMaskModes"] = BuildParams(GetLoc("sAlphaMask"), GetLoc("sAlphaMaskModeNone"), GetLoc("sAlphaMaskModeReplace"), GetLoc("sAlphaMaskModeMul"), GetLoc("sAlphaMaskModeAdd"), GetLoc("sAlphaMaskModeSub")); loc["sBlinkSettings"] = BuildParams(GetLoc("sBlinkStrength"), GetLoc("sBlinkType"), GetLoc("sBlinkSpeed"), GetLoc("sBlinkOffset")); loc["sDistanceFadeSettings"] = BuildParams(GetLoc("sStartDistance"), GetLoc("sEndDistance"), GetLoc("sStrength"), GetLoc("sBackfaceForceShadow")); loc["sDistanceFadeModes"] = BuildParams("Mode", GetLoc("sVertex"), GetLoc("sDissolveModePosition")); loc["sDissolveParams"] = BuildParams(GetLoc("sDissolveMode"), GetLoc("sDissolveModeNone"), GetLoc("sDissolveModeAlpha"), GetLoc("sDissolveModeUV"), GetLoc("sDissolveModePosition"), GetLoc("sDissolveShape"), GetLoc("sDissolveShapePoint"), GetLoc("sDissolveShapeLine"), GetLoc("sBorder"), GetLoc("sBlur")); loc["sDissolveParamsModes"] = BuildParams(GetLoc("sDissolve"), GetLoc("sDissolveModeNone"), GetLoc("sDissolveModeAlpha"), GetLoc("sDissolveModeUV"), GetLoc("sDissolveModePosition")); loc["sDissolveParamsOther"] = BuildParams(GetLoc("sDissolveShape"), GetLoc("sDissolveShapePoint"), GetLoc("sDissolveShapeLine"), GetLoc("sBorder"), GetLoc("sBlur"), "Dummy"); loc["sGlitterParams2"] = BuildParams(GetLoc("sBlinkSpeed"), GetLoc("sAngleLimit"), GetLoc("sRimLightDirection"), GetLoc("sColorRandomness")); loc["sOutlineVertexColorUsages"] = BuildParams(GetLoc("sVertexColor"), GetLoc("sNone"), GetLoc("sVertexR2Width"), GetLoc("sVertexRGBA2Normal")); loc["sShadowColorTypes"] = BuildParams(GetLoc("sColorType"), GetLoc("sColorTypeNormal"), GetLoc("sColorTypeLUT")); loc["sShadowMaskTypes"] = BuildParams(GetLoc("sMaskType"), GetLoc("sStrength"), GetLoc("sFlat")); loc["sHSVGs"] = BuildParams(GetLoc("sHue"), GetLoc("sSaturation"), GetLoc("sValue"), GetLoc("sGamma")); loc["sScrollRotates"] = BuildParams(GetLoc("sAngle"), GetLoc("sUVAnimation"), GetLoc("sScroll"), GetLoc("sRotate")); loc["sDecalAnimations"] = BuildParams(GetLoc("sAnimation"), GetLoc("sXFrames"), GetLoc("sYFrames"), GetLoc("sFrames"), GetLoc("sFPS")); loc["sDecalSubParams"] = BuildParams(GetLoc("sXRatio"), GetLoc("sYRatio"), GetLoc("sFixBorder")); loc["sAudioLinkUVModes"] = BuildParams(GetLoc("sAudioLinkUVMode"), GetLoc("sAudioLinkUVModeNone"), GetLoc("sAudioLinkUVModeRim"), GetLoc("sAudioLinkUVModeUV"), GetLoc("sAudioLinkUVModeMask"), GetLoc("sAudioLinkUVModeMask") + " (Spectrum)", GetLoc("sAudioLinkUVModePosition")); loc["sAudioLinkVertexUVModes"] = BuildParams(GetLoc("sAudioLinkUVMode"), GetLoc("sAudioLinkUVModeNone"), GetLoc("sAudioLinkUVModePosition"), GetLoc("sAudioLinkUVModeUV"), GetLoc("sAudioLinkUVModeMask")); loc["sAudioLinkVertexStrengths"] = BuildParams(GetLoc("sAudioLinkMovingVector"), GetLoc("sAudioLinkNormalStrength")); loc["sAudioLinkLocalMapParams"] = BuildParams(GetLoc("sAudioLinkLocalMapBPM"), GetLoc("sAudioLinkLocalMapNotes"), GetLoc("sOffset")); loc["sFakeShadowVectors"] = BuildParams(GetLoc("sVector"), GetLoc("sOffset")); loc["sFurVectors"] = BuildParams(GetLoc("sVector"), GetLoc("sLength")); loc["sPreOutTypes"] = BuildParams(GetLoc("sOutType"), GetLoc("sOutTypeNormal"), GetLoc("sOutTypeFlat"), GetLoc("sOutTypeMono")); loc["sLightDirectionOverrides"] = BuildParams(GetLoc("sLightDirectionOverride"), GetLoc("sObjectFollowing")); sCullModes = BuildParams(GetLoc("sCullMode"), GetLoc("sCullModeOff"), GetLoc("sCullModeFront"), GetLoc("sCullModeBack")); sBlendModes = BuildParams(GetLoc("sBlendMode"), GetLoc("sBlendModeNormal"), GetLoc("sBlendModeAdd"), GetLoc("sBlendModeScreen"), GetLoc("sBlendModeMul")); sAlphaModes = BuildParams(GetLoc("sTransparentMode"), GetLoc("sAlphaMaskModeNone"), GetLoc("sAlphaMaskModeReplace"), GetLoc("sAlphaMaskModeMul"), GetLoc("sAlphaMaskModeAdd"), GetLoc("sAlphaMaskModeSub")); sAlphaMaskModes = BuildParams(GetLoc("sAlphaMask"), GetLoc("sAlphaMaskModeNone"), GetLoc("sAlphaMaskModeReplace"), GetLoc("sAlphaMaskModeMul"), GetLoc("sAlphaMaskModeAdd"), GetLoc("sAlphaMaskModeSub")); blinkSetting = BuildParams(GetLoc("sBlinkStrength"), GetLoc("sBlinkType"), GetLoc("sBlinkSpeed"), GetLoc("sBlinkOffset")); sDistanceFadeSetting = BuildParams(GetLoc("sStartDistance"), GetLoc("sEndDistance"), GetLoc("sStrength"), GetLoc("sBackfaceForceShadow")); sDistanceFadeSettingMode = BuildParams("Mode", GetLoc("sVertex"), GetLoc("sDissolveModePosition")); sDissolveParams = BuildParams(GetLoc("sDissolveMode"), GetLoc("sDissolveModeNone"), GetLoc("sDissolveModeAlpha"), GetLoc("sDissolveModeUV"), GetLoc("sDissolveModePosition"), GetLoc("sDissolveShape"), GetLoc("sDissolveShapePoint"), GetLoc("sDissolveShapeLine"), GetLoc("sBorder"), GetLoc("sBlur")); sDissolveParamsMode = BuildParams(GetLoc("sDissolve"), GetLoc("sDissolveModeNone"), GetLoc("sDissolveModeAlpha"), GetLoc("sDissolveModeUV"), GetLoc("sDissolveModePosition")); sDissolveParamsOther = BuildParams(GetLoc("sDissolveShape"), GetLoc("sDissolveShapePoint"), GetLoc("sDissolveShapeLine"), GetLoc("sBorder"), GetLoc("sBlur"), "Dummy"); sGlitterParams1 = BuildParams("Tiling", GetLoc("sParticleSize"), GetLoc("sContrast")); sGlitterParams2 = BuildParams(GetLoc("sBlinkSpeed"), GetLoc("sAngleLimit"), GetLoc("sRimLightDirection"), GetLoc("sColorRandomness")); sTransparentMode = BuildParams(GetLoc("sRenderingMode"), GetLoc("sRenderingModeOpaque"), GetLoc("sRenderingModeCutout"), GetLoc("sRenderingModeTransparent"), GetLoc("sRenderingModeRefraction"), GetLoc("sRenderingModeFur"), GetLoc("sRenderingModeFurCutout"), GetLoc("sRenderingModeGem")); sRenderingModeList = new[]{GetLoc("sRenderingModeOpaque"), GetLoc("sRenderingModeCutout"), GetLoc("sRenderingModeTransparent"), GetLoc("sRenderingModeRefraction"), GetLoc("sRenderingModeRefractionBlur"), GetLoc("sRenderingModeFur"), GetLoc("sRenderingModeFurCutout"), GetLoc("sRenderingModeFurTwoPass"), GetLoc("sRenderingModeGem")}; sRenderingModeListLite = new[]{GetLoc("sRenderingModeOpaque"), GetLoc("sRenderingModeCutout"), GetLoc("sRenderingModeTransparent")}; sTransparentModeList = new[]{GetLoc("sTransparentModeNormal"), GetLoc("sTransparentModeOnePass"), GetLoc("sTransparentModeTwoPass")}; sBlendModeList = new[]{GetLoc("sBlendModeNormal"), GetLoc("sBlendModeAdd"), GetLoc("sBlendModeScreen"), GetLoc("sBlendModeMul")}; sOutlineVertexColorUsages = BuildParams(GetLoc("sVertexColor"), GetLoc("sNone"), GetLoc("sVertexR2Width"), GetLoc("sVertexRGBA2Normal")); sShadowColorTypes = BuildParams(GetLoc("sColorType"), GetLoc("sColorTypeNormal"), GetLoc("sColorTypeLUT")); sShadowMaskTypes = BuildParams(GetLoc("sMaskType"), GetLoc("sStrength"), GetLoc("sFlat")); colorRGBAContent = new GUIContent(GetLoc("sColor"), GetLoc("sTextureRGBA")); colorAlphaRGBAContent = new GUIContent(GetLoc("sColorAlpha"), GetLoc("sTextureRGBA")); maskBlendContent = new GUIContent(GetLoc("sMask"), GetLoc("sBlendR")); maskBlendRGBContent = new GUIContent(GetLoc("sMask"), GetLoc("sTextureRGB")); maskBlendRGBAContent = new GUIContent(GetLoc("sMask"), GetLoc("sTextureRGBA")); colorMaskRGBAContent = new GUIContent(GetLoc("sColor") + " / " + GetLoc("sMask"), GetLoc("sTextureRGBA")); alphaMaskContent = new GUIContent(GetLoc("sAlphaMask"), GetLoc("sAlphaR")); ditherContent = new GUIContent(GetLoc("sDither"), GetLoc("sAlphaR")); maskStrengthContent = new GUIContent(GetLoc("sStrengthMask"), GetLoc("sStrengthR")); normalMapContent = new GUIContent(GetLoc("sNormalMap"), GetLoc("sNormalRGB")); noiseMaskContent = new GUIContent(GetLoc("sNoise"), GetLoc("sNoiseR")); matcapContent = new GUIContent(GetLoc("sMatCap"), GetLoc("sTextureRGBA")); gradationContent = new GUIContent(GetLoc("sGradation"), GetLoc("sTextureRGBA")); gradSpeedContent = new GUIContent(GetLoc("sGradTexSpeed"), GetLoc("sTextureRGBA")); smoothnessContent = new GUIContent(GetLoc("sSmoothness"), GetLoc("sSmoothnessR")); metallicContent = new GUIContent(GetLoc("sMetallic"), GetLoc("sMetallicR")); parallaxContent = new GUIContent(GetLoc("sParallax"), GetLoc("sParallaxR")); audioLinkMaskContent = new GUIContent(GetLoc("sMask"), GetLoc("sAudioLinkMaskRGB")); audioLinkMaskSpectrumContent = new GUIContent(GetLoc("sMask"), GetLoc("sAudioLinkMaskRGBSpectrum")); customMaskContent = new GUIContent(GetLoc("sMask"), ""); shadow1stColorRGBAContent = new GUIContent(GetLoc("sShadow1stColor"), GetLoc("sTextureRGBA")); shadow2ndColorRGBAContent = new GUIContent(GetLoc("sShadow2ndColor"), GetLoc("sTextureRGBA")); shadow3rdColorRGBAContent = new GUIContent(GetLoc("sShadow3rdColor"), GetLoc("sTextureRGBA")); blurMaskRGBContent = new GUIContent(GetLoc("sBlurMask"), GetLoc("sBlurRGB")); shadowAOMapContent = new GUIContent("AO Map", GetLoc("sBorderRGB")); widthMaskContent = new GUIContent(GetLoc("sWidth"), GetLoc("sWidthR")); lengthMaskContent = new GUIContent(GetLoc("sLengthMask"), GetLoc("sStrengthR")); triMaskContent = new GUIContent(GetLoc("sTriMask"), GetLoc("sTriMaskRGB")); cubemapContent = new GUIContent("Cubemap Fallback"); audioLinkLocalMapContent = new GUIContent(GetLoc("sAudioLinkLocalMap")); gradationMapContent = new GUIContent(GetLoc("sGradationMap")); } public static string GetDisplayLabel(MaterialProperty prop) { var labels = prop.displayName.Split('|').First().Split('+').Select(m=>GetLoc(m)).ToArray(); if(Event.current.alt) labels[0] = prop.name; return string.Join("", labels); } public static string GetDisplayName(MaterialProperty prop) { var labels = prop.displayName.Split('|').Select( n=>string.Join("",n.Split('+').Select(m=>GetLoc(m)).ToArray()) ).ToArray(); if(Event.current.alt) { if(labels[0].Contains("|")) labels[0] = prop.name + labels[0].Substring(labels[0].IndexOf("|")); else labels[0] = prop.name; } return string.Join("|", labels); } public static string GetDisplayName(string label) { return string.Join("|", label.Split('|').Select( n=>string.Join("",n.Split('+').Select(m=>GetLoc(m)).ToArray()) ).ToArray() ); } [Obsolete("This may be deleted in the future.")] public static void ApplySettingTemp(){} [Obsolete("This may be deleted in the future.")] public static void SaveSettingTemp(){} } } #endif