89 lines
2.8 KiB
Lua
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 |