Пример #1
0
        public static Orb Instantiate(ISkillCaster p_SkillCaster, IOrbCaster p_OrbCaster, IOrbTarget p_OrbTarget, OrbData p_OrbData)
        {
            Orb _orb = new Orb();

            _orb.SkillCaster = p_SkillCaster;
            _orb.OrbCaster   = p_OrbCaster;
            _orb.OrbTarget   = p_OrbTarget;
            return(_orb);
        }
Пример #2
0
    public Summon BuildSummon(uint summon_id, ISkillCaster caster, ISummonCaster summon_caster, ISkillTarget summon_target, SMTargetGet trigger_target_get)
    {
        Summon summon = new Summon();

        summon.Create(GameCenter.Instance.DataManager.skillSummonDB.Get(id, summon_id), m_Skill, caster, summon_caster, summon_target);

        summon.TriggerTargetsGet = trigger_target_get;

        summons.Add(summon);

        return(summon);
    }
Пример #3
0
        /// <summary>
        /// Create orb instance
        /// </summary>
        /// <param name="p_SkillCaster"></param>
        /// <param name="p_OrbCaster"></param>
        /// <param name="p_OrbTarget"></param>
        /// <param name="p_OrbData"></param>
        /// <returns></returns>
        public static Orb Instantiate(ISkillCaster p_SkillCaster, IOrbCaster p_OrbCaster, IOrbTarget p_OrbTarget, OrbData p_OrbData)
        {
            Orb _orb = new Orb(p_OrbData);

            //Init some data
            _orb.SkillCaster = p_SkillCaster;
            _orb.OrbCaster   = p_OrbCaster;
            _orb.OrbTarget   = p_OrbTarget;

            #region Init action motion trigger
            if (p_OrbData.createActions != null)
            {
                for (int i = 0; i < p_OrbData.createActions.Length; i++)
                {
                    OrbAction ac = SkillFactory.CreateAction(p_OrbData.createActions[i]);
                    ac.Holder = _orb;
                    _orb.CreateActions.Add(ac);
                }
            }
            if (p_OrbData.triggerActions != null)
            {
                for (int i = 0; i < p_OrbData.triggerActions.Length; i++)
                {
                    OrbAction ac = SkillFactory.CreateAction(p_OrbData.triggerActions[i]);
                    ac.Holder = _orb;
                    _orb.TriggerActions.Add(ac);
                }
            }
            if (p_OrbData.destroyActions != null)
            {
                for (int i = 0; i < p_OrbData.destroyActions.Length; i++)
                {
                    OrbAction ac = SkillFactory.CreateAction(p_OrbData.destroyActions[i]);
                    ac.Holder = _orb;
                    _orb.DestroyActions.Add(ac);
                }
            }
            if (p_OrbData.motions != null)
            {
                for (int i = 0; i < p_OrbData.motions.Length; i++)
                {
                    OrbMotion mo = SkillFactory.CreateMotion(p_OrbData.motions[i]);
                    mo.Holder = _orb;
                    _orb.Motions.Add(mo);
                }
            }
            #endregion

            _orb.TriggerCreate();
            return(_orb);
        }
Пример #4
0
    public Action StartCastSkill(Skill skill, float castTime, GameObject skillObj)
    {
        if (castTime <= 0)
        {
            return(null);
        }

        // 技能施放冷卻計算
        if (skill.coolDownType == SkillCoolDownType.CoolInCast)
        {
            StartCoroutine(GetIntoCoolDown(skill));
        }

        ISkillCaster skillCaster = skillObj.GetComponent <ISkillCaster>();

        return(delegate { skillCaster.CastSkill(); });
    }
Пример #5
0
    public void Create(ISkillCaster caster, SkillStaticData data)
    {
        holder           = caster;
        skillStaticData  = data;
        skillDynamicData = new SkillDynamicData(this);

        m_Machine  = new Machine <Skill>(this);
        skillState = new SkillDynamicState(this);

        timeLine = new TimeLine <Skill>(skillStaticData.id, this, skillStaticData.skill_time);
        timeLine.AddEvent(GameCenter.Instance.DataManager.timelineDB.GetTimeLineEvents(skillStaticData.id));
        //timeLine.AddEvent(new TimeEventSkillSummon((int)skillStaticData.id, 10020001, 0.5f));

        m_Machine.Register <SkillStReady>();
        m_Machine.Register <SkillStSing>();
        m_Machine.Register <SkillStCast>();
        m_Machine.Register <SkillStCoolDown>();
    }
Пример #6
0
 public SMTargetGet(ISkillCaster holder)
 {
     m_Holder = holder;
 }
Пример #7
0
 public SMTargetGetNear(ISkillCaster holder)
     : base(holder)
 {
 }
Пример #8
0
        /// <summary>
        /// 召唤物初始化
        /// </summary>
        /// <param name="summon_data"></param>
        /// <param name="skill"></param>
        /// <param name="skill_caster"></param>
        /// <param name="summon_caster"></param>
        public void Create(SummonData summon_data, Skill skill, ISkillCaster skill_caster, ISummonCaster summon_caster, ISkillTarget summon_target)
        {
            m_SummonData   = summon_data;
            m_Skill        = skill;
            m_SkillCaster  = skill_caster;
            m_SummonCaster = summon_caster;
            m_TriggerCount = summon_data.prop.GetInt(PropertiesKey.SUMMON_TRIGGERCOUNT, 0);
            m_Duration     = summon_data.prop.GetInt(PropertiesKey.SUMMON_DURATION, 20);

            //要在下一行代码之前,因为在获取motion里面初始化中要使用此对象
            m_SummonMoveTarget = summon_target;
            m_Motions          = GameCenter.Instance.DataManager.skillMotionDB.GetMotion(m_SummonData.owner, m_SummonData.id, this);
            m_Actions          = GameCenter.Instance.DataManager.skillActionDB.GetAction(m_SummonData.owner, m_SummonData.id, this);

            GameObject summon = new GameObject(summon_data.prop.GetString(PropertiesKey.SUMMON_NAME) + "_fly");

            Transform = summon.GetComponent <Transform>();
            switch (summon_data.prop.GetString(PropertiesKey.SUMMON_CREATE_EFFECT_NODE_TYPE))
            {
            case "summon":
            {
                if (m_SummonCaster != null && m_SummonCaster.GetMount(summon_data.prop.GetString(PropertiesKey.SUMMON_CREATE_EFFECT_NODE_NAME)) != null)
                {
                    Transform.position = m_SummonCaster.GetMount(summon_data.prop.GetString(PropertiesKey.SUMMON_CREATE_EFFECT_NODE_NAME)).position
                                         + summon_data.prop.GetVector3(PropertiesKey.SUMMON_CREATE_EFFECT_NODE_OFFSET);
                }
                break;
            }

            case "caster":
            {
                Transform.position = m_SkillCaster.GetMount(summon_data.prop.GetString(PropertiesKey.SUMMON_CREATE_EFFECT_NODE_NAME)).position
                                     + summon_data.prop.GetVector3(PropertiesKey.SUMMON_CREATE_EFFECT_NODE_OFFSET);
                break;
            }

            case "scene":
            {
                Transform.position = summon_data.prop.GetVector3(PropertiesKey.SUMMON_CREATE_EFFECT_NODE_OFFSET);
                break;
            }
            }

            //生成特效
            if (!string.IsNullOrEmpty(summon_data.prop.GetString(PropertiesKey.SUMMON_CREATE_EFFECT_NAME)))
            {
                Effect create_effect = GameCenter.Instance.EffectManager.Create(summon_data.prop.GetString(PropertiesKey.SUMMON_CREATE_EFFECT_NAME), Transform.position, Transform.rotation);

                create_effect.Destroy();
                //Effect.SetParent(Transform, true);
            }
            //生成音效
            GameCenter.Instance.AudioManager.Play(eAudioLayer.EFFECTAUDIO, summon_data.prop.GetString(PropertiesKey.SUMMON_CREATE_AUDIO_NAME));

            //
            if (!string.IsNullOrEmpty(summon_data.prop.GetString(PropertiesKey.SUMMON_FLY_EFFECT_NAME)))
            {
                Effect = GameCenter.Instance.EffectManager.Create(summon_data.prop.GetString(PropertiesKey.SUMMON_FLY_EFFECT_NAME), Transform.position, Transform.rotation);

                Effect.SetParent(Transform, true);
            }
        }
Пример #9
0
 public void ReplaceHoler(ISkillCaster caster)
 {
     holder = caster;
 }
Пример #10
0
 public SkillHub(ISkillCaster caster)
 {
     holder = caster;
 }