// Generate By EToy
// Don't Edit It!!

using XGame.Framework.Database;
using XGame.Framework.Serialization;

namespace XGame.Database
{
    /// <summary> SkillVfxs </summary>
    public sealed class SkillVfxsTable : ITable
    {
        long ITable.Key => Id;

        /// <summary> id职业技能：职业ID*10+序号飞剑技能:飞剑ID*10+序号怪物技能：怪物ID*10+序号通用技能：200000+技能品质*100+序号家族技能：300000+技能品质*100+序号车位技能：400000+技能品质*100+序号 </summary>
        public int Id { get; private set; }

        /// <summary> 施法特效和施法动作配套 </summary>
        public string CastVfx { get; private set; }

        /// <summary> 施法特效跟随类型控制施法特效父节点0：角色中心（跟随玩家移动）1：角色始发点（跟随玩家移动）2：世界坐标 </summary>
        public int VfxFollowType { get; private set; }

        /// <summary> 施法特效时长单位：毫秒不能超过技能持续时长 </summary>
        public int CastVfxTime { get; private set; }

        /// <summary> 动作名字 </summary>
        public EAnimationName AniName { get; private set; }

        /// <summary> 技能特效 </summary>
        public string SkillVfx { get; private set; }

        /// <summary> 技能特效出现的时间单位：毫秒 </summary>
        public int SkillVfxDelay { get; private set; }

        /// <summary> 技能特效数量 </summary>
        public int SkillVfxCount { get; private set; }

        /// <summary> 技能特效间隔单位：毫秒 </summary>
        public int SkillVfxInterval { get; private set; }

        /// <summary> 技能特效持续时长单位：毫秒-1表示不限时间 </summary>
        public int SkillVfxTime { get; private set; }

        /// <summary> 0:不移动1：线性2：随机贝塞尔3：抛物线 </summary>
        public int SkillVfxMoveType { get; private set; }

        /// <summary>  移动速度曲线，默认线性，名字参考:https://blog.csdn.net/qq_44119541/article/details/107397494 </summary>
        public string SkillVfxMoveEase { get; private set; }

        /// <summary> 移动速度 </summary>
        public float SkillVfxSpeed { get; private set; }

        /// <summary> 技能特效坐标参数Y坐标根据施法者为玩家/怪物动态加/减0:特效出生点相对施法点偏移坐标1:特效结束点相对施法点偏移坐标 </summary>
        public Vec3[] SkillVfxPositions { get; private set; }

        /// <summary> 受击特效 </summary>
        public string HitVfx { get; private set; }

        /// <summary> 受击特效时长单位：毫秒 </summary>
        public int HitVfxTime { get; private set; }

        /// <summary> 201:["陷阱展开特效","陷阱爆炸特效"] </summary>
        public string[] CustomArgs { get; private set; }

        void ISerializable.Deserialize(IReader reader)
        {
            Id = reader.ReadInt();
            CastVfx = reader.ReadString();
            VfxFollowType = reader.ReadInt();
            CastVfxTime = reader.ReadInt();
            AniName = (EAnimationName)reader.ReadInt();
            SkillVfx = reader.ReadString();
            SkillVfxDelay = reader.ReadInt();
            SkillVfxCount = reader.ReadInt();
            SkillVfxInterval = reader.ReadInt();
            SkillVfxTime = reader.ReadInt();
            SkillVfxMoveType = reader.ReadInt();
            SkillVfxMoveEase = reader.ReadString();
            SkillVfxSpeed = reader.ReadFloat();
            SkillVfxPositions = reader.ReadEnumerable<Vec3[]>();
            HitVfx = reader.ReadString();
            HitVfxTime = reader.ReadInt();
            CustomArgs = reader.ReadEnumerable<string[]>();
        }

        void ISerializable.Serialize(IWriter writer)
        {
            writer.Write(Id);
            writer.Write(CastVfx);
            writer.Write(VfxFollowType);
            writer.Write(CastVfxTime);
            writer.Write((int)AniName);
            writer.Write(SkillVfx);
            writer.Write(SkillVfxDelay);
            writer.Write(SkillVfxCount);
            writer.Write(SkillVfxInterval);
            writer.Write(SkillVfxTime);
            writer.Write(SkillVfxMoveType);
            writer.Write(SkillVfxMoveEase);
            writer.Write(SkillVfxSpeed);
            writer.Write(SkillVfxPositions);
            writer.Write(HitVfx);
            writer.Write(HitVfxTime);
            writer.Write(CustomArgs);
        }
    }
}
