Files
JJBB/Assets/Project/Script/Player/Impact/Impact_ChangeModelGraphics.cs
2024-08-23 15:49:34 +08:00

71 lines
2.8 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Games.LogicObj;
using GCGame.Table;
using Module.Log;
using UnityEngine;
public abstract class Impact_ChangeModelMaterialBase : ImpactEffectBase
{
private ChangeMatPro _materialPropertyMod;
public int Token { get; private set; }
public override void StartEffect()
{
base.StartEffect();
if (objCharacter != null && Data != null)
{
if (bodyPart >= 0 && bodyPart < 4)
{
var paramid = Data.GetParamValuebyIndex(bodyPart);
var effectparam = TableManager.GetEffectParamByID(paramid, 0);
if (effectparam != null)
{
var matPath = effectparam.GetParamValuebyIndex(0); //材质路径
// 注:现在会锁定使用主贴图属性和法线贴图属性
//var mainTexName = effectparam.GetParamValuebyIndex(1); //材质主贴图属性名称
//var proNumStr = effectparam.GetParamValuebyIndex(3); //需要设置初始属性值得属性个数
var proInfoIdStr = effectparam.GetParamValuebyIndex(1); //材质的相关效果效果信息表现对应的ID (也是EffectParam表中的ID)
int proInfoId;
if (!int.TryParse(proInfoIdStr, out proInfoId))
{
proInfoId = -1;
LogModule.ErrorLog(string.Format("无法转化特效id={0}中的材质属性变化id为整数", Data.EffectID));
}
var modelPart = BodyToModelPart(bodyPart);
// 建立ChangeMatPro
if (proInfoId > -1)
{
var modParam = TableManager.GetEffectParamByID(proInfoId, 0);
if (modParam != null && _materialPropertyMod == null)
{
_materialPropertyMod = new ChangeMatPro(objCharacter, modelPart, modParam);
_materialPropertyMod.Start(modParam, Data.Duration);
}
}
Token = AddMod(matPath, modelPart);
}
}
else
LogModule.ErrorLog(string.Format("配置表中id={0}的特效bodyPart={1}属性超过范围!", Data.EffectID, bodyPart));
}
}
public override void StopEffect()
{
base.StopEffect();
if (Token >= 0)
RemoveMod(Token, BodyToModelPart(bodyPart));
if (_materialPropertyMod != null)
_materialPropertyMod.StopEffect();
}
protected override void UpdateInherited()
{
if (_materialPropertyMod != null)
_materialPropertyMod.OnUpdate();
}
protected abstract int AddMod(string assetName, int modelPart);
protected abstract void RemoveMod(int token, int modelPart);
}