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.name = assetName;
|
||||||
spriteAsset.spriteSheet = sourceTexture;
|
spriteAsset.spriteSheet = sourceTexture;
|
||||||
|
|
||||||
|
TMP_SpriteAsset spriteAssetMasked = ScriptableObject.CreateInstance<TMP_SpriteAsset>();
|
||||||
|
spriteAssetMasked.name = assetName + ".Masked";
|
||||||
|
spriteAssetMasked.spriteSheet = sourceTexture;
|
||||||
|
|
||||||
if (!_spriteShader)
|
if (!_spriteShader)
|
||||||
{
|
{
|
||||||
_spriteShader = Shader.Find("TextMeshPro/Sprite");
|
_spriteShader = Shader.Find("TextMeshPro/Sprite");
|
||||||
@@ -40,7 +44,6 @@ public static class TmpSpriteUtils
|
|||||||
name = assetName + " Material",
|
name = assetName + " Material",
|
||||||
};
|
};
|
||||||
material.SetTexture(ShaderUtilities.ID_MainTex, sourceTexture);
|
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_StencilComp, 4);
|
||||||
material.SetFloat(ShaderUtilities.ID_StencilID, 1);*/
|
material.SetFloat(ShaderUtilities.ID_StencilID, 1);*/
|
||||||
material.SetFloat(ShaderUtilities.ID_StencilComp, 0);
|
material.SetFloat(ShaderUtilities.ID_StencilComp, 0);
|
||||||
@@ -53,15 +56,36 @@ public static class TmpSpriteUtils
|
|||||||
|
|
||||||
spriteAsset.spriteInfoList = new Il2CppSystem.Collections.Generic.List<TMP_Sprite>();
|
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(spriteAsset, rect, assetName, scale);
|
||||||
|
AddSpriteToAsset(spriteAssetMasked, rect, assetName + ".Masked", scale);
|
||||||
|
|
||||||
spriteAsset.DontUnload().DontDestroy();
|
spriteAsset.DontUnload().DontDestroy();
|
||||||
spriteAsset.UpdateLookupTables();
|
spriteAsset.UpdateLookupTables();
|
||||||
spriteAsset.fallbackSpriteAssets = new();
|
spriteAsset.fallbackSpriteAssets = new();
|
||||||
|
spriteAssetMasked.DontUnload().DontDestroy();
|
||||||
|
spriteAssetMasked.UpdateLookupTables();
|
||||||
|
spriteAssetMasked.fallbackSpriteAssets = new();
|
||||||
AssetHolder.fallbackSpriteAssets.Add(spriteAsset);
|
AssetHolder.fallbackSpriteAssets.Add(spriteAsset);
|
||||||
|
AssetHolder.fallbackSpriteAssets.Add(spriteAssetMasked);
|
||||||
AssetHolder.UpdateLookupTables();
|
AssetHolder.UpdateLookupTables();
|
||||||
|
|
||||||
LoadedSprites.Add(assetName, spriteAsset);
|
LoadedSprites.Add(assetName, spriteAsset);
|
||||||
|
LoadedSprites.Add(assetName + ".Masked", spriteAssetMasked);
|
||||||
return spriteAsset;
|
return spriteAsset;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user