zxl
/
CTT
forked from Cal/CTT
1
0
Fork 0
CTT/Unity/Assets/XNodeDemo/NewSkill/RunTime/SkillOption_几率.cs

91 lines
3.0 KiB
C#

using ET;
using MongoDB.Bson.Serialization.Attributes;
using Sirenix.OdinInspector;
#if UNITY_EDITOR
using UnityEngine;
using XNode;
#endif
namespace Cal
{
[GUIColor(0.5f, 0.8f, 0.5f)]
[System.Serializable]
[BsonIgnoreExtraElements]
public class SkillOption_ : SkillOptionBase
{
public override SkillOptionType optionType => SkillOptionType.;
[BoxGroup("$optionType", CenterLabel = true)]
[LabelText("几率(0-1)")]
#if UNITY
[SerializeField]
#endif
public SkillParam param;
[HideInInspector]
public SkillOptionBase[] succeedOptionList;
[HideInInspector]
public SkillOptionBase[] failOptionList;
#if UNITY
[LabelText("成功操作")]
[BsonIgnore]
[Output] public float succeedOptions;
[LabelText("失败操作")]
[BsonIgnore]
[Output] public float failOptions;
public override NodePort GetNodePort(string fieldName)
{
if (fieldName == nameof(succeedOptionList))
{
return GetOutputPort("succeedOptions");
}
else
if (fieldName == nameof(failOptionList))
{
return GetOutputPort("failOptions");
}
return null;
}
public override void Serilize(SkillOptionBase skillOption)
{
var succeed = GetOutputPort("succeedOptions");
if (succeed.IsConnected)
{
var targetArr = new SkillOptionBase[0];
foreach (var port in succeed.GetConnections())
{
SkillOptionBase _skillOption = System.Activator.CreateInstance(port.node.GetType()) as SkillOptionBase;
port.node.As<SkillOptionBase>().DeepClone(_skillOption);
port.node.As<SkillOptionBase>().Clear();
UnityEditor.ArrayUtility.Add(ref targetArr, _skillOption);
_skillOption.Serilize(_skillOption);
}
skillOption.As<SkillOption_>().succeedOptionList = targetArr;
}
var fail = GetOutputPort("failOptions");
if (fail.IsConnected)
{
var targetArr = new SkillOptionBase[0];
foreach (var port in fail.GetConnections())
{
SkillOptionBase _skillOption = System.Activator.CreateInstance(port.node.GetType()) as SkillOptionBase;
port.node.As<SkillOptionBase>().DeepClone(_skillOption);
port.node.As<SkillOptionBase>().Clear();
UnityEditor.ArrayUtility.Add(ref targetArr, _skillOption);
_skillOption.Serilize(_skillOption);
}
skillOption.As<SkillOption_>().failOptionList = targetArr;
}
}
internal override void Clear()
{
succeedOptionList = null;
failOptionList = null;
}
#endif
}
}