#if !COMBAT_SERVER
using UnityEngine;
using UnityEngine.Playables;
using UnityEngine.Timeline;
#endif
using CombatCore.SerializationTimeLine.TimeLineSerialization;
using Fort23.Core;
using UTool.CustomizeTimeLogic.FxLogic.TimeLineEventLogic;
using Object = System.Object;
using Random = System.Random;
/// 
/// 播放特效
/// 
[System.Serializable]
public class TimeLinePlayFxSerializtion : TimeLineAssetSerialization
{
    public string fxName;
    public uint randomSeed;
    public FXLocationType locationType;
    public string targetSpecialDotName;
    public string hitPointGroupName;
    public bool isGround;
    /// 
    /// 是否跟随目标
    /// 
    public bool isFollowTarget;
    public bool isFollowRootTarget;
    /// 
    /// 是否不旋转 (默认是跟随目标旋转)
    /// 
    public bool isNotRotate;
    /// 
    /// 是否跟随攻击速度进行播放te
    /// 
    public bool isAttSpeed;
    public int CustomTargetPosIndex;
    public bool isActivityCustomTargetPos;
    /// 
    /// 是否循环
    /// 
    public bool isLoop;
    /// 
    /// 循环独立
    /// 
    public bool loopAlone;
    public float intervalTime;
    public bool isRoat;
    public int roatIndex;
    public bool isUseRandom;
    public TimeLineVector2 xoff;
    public TimeLineVector2 yoff;
    public TimeLineVector2 zoff;
 
    public int randomGroup;
    public TimeLinePlayFxSerializtion()
    {
    }
#if !COMBAT_SERVER
    public TimeLinePlayFxSerializtion(PlayableDirector playableDirector, GroupTrack groupTrack,
        TimelineClip timelineClip) : base(groupTrack, timelineClip)
    {
        TimeLineParticleSystemAsset controlPlayableAsset = timelineClip.asset as TimeLineParticleSystemAsset;
        if (controlPlayableAsset == null)
        {
            return;
        }
        GameObject go = null;
        if (controlPlayableAsset.prefabGameObject != null)
        {
            go = controlPlayableAsset.prefabGameObject;
        }
        else if (playableDirector.playableGraph.GetResolver() != null)
        {
            go = controlPlayableAsset.sourceGameObject.Resolve(playableDirector.playableGraph.GetResolver());
        }
        Object obj = controlPlayableAsset.sourceGameObject.defaultValue;
        // Debug.Log(playableDirector.playableGraph.GetResolver());
        if (go != null)
        {
            fxName = go.name;
            randomSeed = controlPlayableAsset.particleRandomSeed;
            locationType = controlPlayableAsset.LocationType;
            targetSpecialDotName = controlPlayableAsset.targetSpecialDotName;
            hitPointGroupName = controlPlayableAsset.hitPointGroupName;
            isFollowTarget = controlPlayableAsset.isFollowTarget;
            isFollowRootTarget = controlPlayableAsset.isFollowRootTarget;
            isGround = controlPlayableAsset.isGround;
            isNotRotate = controlPlayableAsset.isNotRotate;
            isAttSpeed = controlPlayableAsset.isAttSpeed;
            targetEntityType = controlPlayableAsset.targetType;
            CustomTargetPosIndex = controlPlayableAsset.CustomTargetPosIndex;
            isActivityCustomTargetPos = controlPlayableAsset.isActivityCustomTargetPos;
            loopAlone = controlPlayableAsset.loopAlone;
            isLoop = controlPlayableAsset.isLoop;
            intervalTime = controlPlayableAsset.intervalTime;
            isRoat = controlPlayableAsset.isRoat;
            roatIndex = controlPlayableAsset.roatIndex;
            isUseRandom = controlPlayableAsset.isUseRandom;
            xoff = controlPlayableAsset.xoff;
            yoff = controlPlayableAsset.yoff;
            zoff = controlPlayableAsset.zoff;
            randomGroup = controlPlayableAsset.randomGroup;
        }
    }
  
#endif
    public override TimeLineEventLogicBasic CreateLogic()
    {
        return CObjectPool.Instance.Fetch();
    }
}