using Thousandto.Code.Center; using Thousandto.Core.Asset; using UnityEngine; namespace Thousandto.Code.Logic { /// /// FGameObject的Shader的处理,用于Shader的切换处理. /// public class FGOShaderSwitcher { /// /// 处理切换接口 /// /// /// /// /// public static Shader Process(Shader sh,ModelTypeCode code,int id) { switch (code) { case ModelTypeCode.Wing: return ProcessWing(sh, id); case ModelTypeCode.Object: return ProcessObject(sh, id); } return sh; } //处理翅膀的处理 private static Shader ProcessWing(Shader sh, int imodelid) { var _sn = sh.name; if (imodelid % 100 < 50) { _sn = _sn + "_AlphaTest"; } var _rgbSh = ShaderUseRGB(_sn); if (_rgbSh != null) return _rgbSh; else if(sh.name != _sn) { //如果两个名字不同,那么就使用新的Shader var _si = ShaderManager.SharedInstance.GetShaderDefine(_sn); if (_si != null) return _si.RealShader; } return sh; } //处理采集的shader private static Shader ProcessObject(Shader sh, int imodelid) { if (ShaderManager.IsEntityUseRGB && sh.name == "Ares/EntityState/Grown") { var _newSh = ShaderUseRGB("Ares/EntityState/Grown"); if (_newSh!=null) return _newSh; } return sh; } //Shader使用RGB private static Shader ShaderUseRGB(string strShName) { if (ShaderManager.IsEntityUseRGB) { var _rgb = strShName + "_RGB"; var _rgbSi = ShaderManager.SharedInstance.GetShaderDefine(_rgb); if (_rgbSi!=null) return _rgbSi.RealShader; } return null; } } }