Files
Main/Assets/GameAssets/Resources/Lua/Logic/FGameObject/FGameObjectShaderUtils.lua
2025-01-25 04:38:09 +08:00

89 lines
2.8 KiB
Lua

------------------------------------------------
--作者: gzg
--日期: 2021-05-21
--文件: FGameObjectShaderUtils.lua
--模块: FGameObjectShaderUtils
--描述: 模型中需要替换Shader的逻辑代码
------------------------------------------------
--引用
local ShaderManager = CS.Thousandto.Core.Asset.ShaderManager
--在类中的定义字段,不能赋值为nil,需要赋值为一个值.默认可以为0
local FGameObjectShaderUtils = {}
--切换Shader的代码,返回值为Shader类型.
--sh:Shader
--modelType:ModelTypeCode
--imodelid:integer
function FGameObjectShaderUtils.ShaderSwitch(sh,modeltype,imodelid)
Debug.Log("FGameObjectShaderUtils.ShaderSwitch:" .. tostring(modeltype) .. ":::" .. tostring(imodelid) );
if modeltype == UnityUtils.GetObjct2Int(ModelTypeCode.Wing) then
return FGameObjectShaderUtils.ProcessWing(sh,imodelid);
elseif modeltype == UnityUtils.GetObjct2Int(ModelTypeCode.Object) then
return FGameObjectShaderUtils.ProcessObject(sh,imodelid);
elseif modeltype == UnityUtils.GetObjct2Int(ModelTypeCode.Player) then
return FGameObjectShaderUtils.ProcessPlayer(sh,imodelid);
end
return sh;
end
function FGameObjectShaderUtils.ProcessWing(sh,imodelid)
local _sn = sh.name;
if imodelid % 100 < 50 then
_sn = _sn + "_AlphaTest"
end
local _rgbSh = FGameObjectShaderUtils.ShaderUseRGB(_sn,imodelid);
if _rgbSh then
return _rgbSh;
elseif sh.name ~= _sn then
--如果两个名字不同,那么就使用新的Shader
local _si = ShaderManager.SharedInstance:GetShaderDefine(_sn);
if _si then
return _si.RealShader;
end
end
return sh;
end
function FGameObjectShaderUtils.ProcessObject(sh,imodelid)
if ShaderManager.IsEntityUseRGB and sh.name == "Ares/EntityState/Grown" then
local _newSh = FGameObjectShaderUtils.ShaderUseRGB("Ares/EntityState/Grown");
if _newSh then
return _newSh;
end
end
return sh;
end
function FGameObjectShaderUtils.ProcessPlayer(sh,imodelid)
local _sn = sh.name;
if imodelid % 100 > 70 then
_sn = _sn + "_AlphaBlend"
end
local _rgbSh = FGameObjectShaderUtils.ShaderUseRGB(_sn,imodelid);
if _rgbSh then
return _rgbSh;
elseif sh.name ~= _sn then
--如果两个名字不同,那么就使用新的Shader
local _si = ShaderManager.SharedInstance:GetShaderDefine(_sn);
if _si then
return _si.RealShader;
end
end
return sh;
end
function FGameObjectShaderUtils.ShaderUseRGB(strShName,imodelid)
if ShaderManager.IsEntityUseRGB then
local _rgb = strShName + "_RGB";
local _rgbSi = ShaderManager.SharedInstance.GetShaderDefine(_rgb);
if _rgbSi then
return _rgbSi.RealShader;
end
end
return nil;
end
return FGameObjectShaderUtils