| 12345678910111213141516171819202122232425262728293031323334353637383940414243 | using UnityEngine;namespace MPUIKIT {    public static class MPMaterials {        private const string MpBasicProceduralShaderName = "MPUI/Basic Procedural Image";        private static string[] MpShapeKeywords = {"CIRCLE", "TRIANGLE", "RECTANGLE", "NSTAR_POLYGON"};        private const string MpStrokeKeyword = "STROKE";        private const string MpOutlineKeyword = "OUTLINED";        private const string MpOutlinedStrokeKeyword = "OUTLINED_STROKE";        private static Shader _proceduralShader;        internal static Shader MPBasicProceduralShader        {            get {                if (_proceduralShader == null)                    _proceduralShader = Shader.Find(MpBasicProceduralShaderName);                return _proceduralShader;            }            }        private static Material[] _materialDB = new Material[16];        internal static ref Material GetMaterial(int shapeIndex, bool stroked, bool outlined) {            int index = shapeIndex * 4;            if (stroked && outlined) index += 3;            else if (outlined) index += 2;            else if (stroked) index += 1;            ref Material mat = ref _materialDB[index];            if (mat != null) return ref mat;                        mat = new Material(MPBasicProceduralShader);            string shapeKeyword = MpShapeKeywords[shapeIndex];            mat.name = $"Basic Procedural Sprite - {shapeKeyword} {(stroked?MpStrokeKeyword:string.Empty)} {(outlined?MpOutlineKeyword:string.Empty)}";            mat.EnableKeyword(shapeKeyword);            if(stroked && outlined) mat.EnableKeyword(MpOutlinedStrokeKeyword);            else if(stroked) mat.EnableKeyword(MpStrokeKeyword);            else if(outlined) mat.EnableKeyword(MpOutlineKeyword);            return ref mat;        }    }}
 |