mirror of
https://github.com/All-Of-Us-Mods/MiraAPI.git
synced 2026-10-19 15:51:48 +00:00
Create masked variants of tmp icons
This commit is contained in:
1 parent
d41ab95fa4
commit
003d577a09
1 file changed
+25
-1
@@ -30,6 +30,10 @@ public static class TmpSpriteUtils
|
||||
spriteAsset.name = assetName;
|
||||
spriteAsset.spriteSheet = sourceTexture;
|
||||
|
||||
TMP_SpriteAsset spriteAssetMasked = ScriptableObject.CreateInstance<TMP_SpriteAsset>();
|
||||
spriteAssetMasked.name = assetName + ".Masked";
|
||||
spriteAssetMasked.spriteSheet = sourceTexture;
|
||||
|
||||
if (!_spriteShader)
|
||||
{
|
||||
_spriteShader = Shader.Find("TextMeshPro/Sprite");
|
||||
@@ -40,7 +44,6 @@ public static class TmpSpriteUtils
|
||||
name = assetName + " Material",
|
||||
};
|
||||
material.SetTexture(ShaderUtilities.ID_MainTex, sourceTexture);
|
||||
// TODO: Using these values, the icons will NOT clip through chatboxes. However, this breaks quite literally every other tmp text that isn't masked. Please fix this if a good solution is found.
|
||||
/*material.SetFloat(ShaderUtilities.ID_StencilComp, 4);
|
||||
material.SetFloat(ShaderUtilities.ID_StencilID, 1);*/
|
||||
material.SetFloat(ShaderUtilities.ID_StencilComp, 0);
|
||||
@@ -53,15 +56,36 @@ public static class TmpSpriteUtils
|
||||
|
||||
spriteAsset.spriteInfoList = new Il2CppSystem.Collections.Generic.List<TMP_Sprite>();
|
||||
|
||||
var maskedMaterial = new Material(_spriteShader)
|
||||
{
|
||||
name = assetName + " Masked Material",
|
||||
};
|
||||
maskedMaterial.SetTexture(ShaderUtilities.ID_MainTex, sourceTexture);
|
||||
maskedMaterial.SetFloat(ShaderUtilities.ID_StencilComp, 4);
|
||||
maskedMaterial.SetFloat(ShaderUtilities.ID_StencilID, 1);
|
||||
maskedMaterial.SetFloat(ShaderUtilities.ID_StencilOp, 0);
|
||||
maskedMaterial.SetFloat(ShaderUtilities.ID_StencilWriteMask, 255);
|
||||
maskedMaterial.SetFloat(ShaderUtilities.ID_StencilReadMask, 255);
|
||||
maskedMaterial.SetFloat(ShaderUtilities.ShaderTag_CullMode, 0);
|
||||
spriteAssetMasked.material = maskedMaterial;
|
||||
|
||||
spriteAssetMasked.spriteInfoList = new Il2CppSystem.Collections.Generic.List<TMP_Sprite>();
|
||||
|
||||
AddSpriteToAsset(spriteAsset, rect, assetName, scale);
|
||||
AddSpriteToAsset(spriteAssetMasked, rect, assetName + ".Masked", scale);
|
||||
|
||||
spriteAsset.DontUnload().DontDestroy();
|
||||
spriteAsset.UpdateLookupTables();
|
||||
spriteAsset.fallbackSpriteAssets = new();
|
||||
spriteAssetMasked.DontUnload().DontDestroy();
|
||||
spriteAssetMasked.UpdateLookupTables();
|
||||
spriteAssetMasked.fallbackSpriteAssets = new();
|
||||
AssetHolder.fallbackSpriteAssets.Add(spriteAsset);
|
||||
AssetHolder.fallbackSpriteAssets.Add(spriteAssetMasked);
|
||||
AssetHolder.UpdateLookupTables();
|
||||
|
||||
LoadedSprites.Add(assetName, spriteAsset);
|
||||
LoadedSprites.Add(assetName + ".Masked", spriteAssetMasked);
|
||||
return spriteAsset;
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user