Пример #1
0
 void CheckSkillEvent()
 {
     for (var i = 0; i < m_skillEventList.Count; ++i)
     {
         SKillEvent evt = m_skillEventList[i];
         if (Time.time >= evt.fTriggerTime && evt.isActive)   //触发时间到了
         {
             evt.func(evt.skillID, evt.targets);
             evt.isActive = false;
         }
     }
 }
Пример #2
0
    SKillEvent GetSkillEvent()
    {
        SKillEvent evt = null;

        for (var i = 0; i < m_skillEventList.Count; ++i)
        {
            if (!m_skillEventList[i].isActive)
            {
                return(m_skillEventList[i]);
            }
        }
        evt = new SKillEvent();
        m_skillEventList.Add(evt);
        return(evt);
    }
Пример #3
0
    void RegSkillEvent(SkillBase skill)
    {
        List <Entity> targets = skill.GetSkillTargets();

        SKillEvent evt = null;

        //播放特效
        if (!string.IsNullOrEmpty(skill.m_skillInfo.castEffect))
        {
            evt = GetSkillEvent();
            evt.fTriggerTime = skill.m_skillInfo.castEffectBeginTime / m_entity.Property.AttackSpeed + Time.time;
            evt.func         = PlayEffect;
            evt.isActive     = true;
            evt.skillID      = skill.m_skillInfo.ID;
            AddSkillEvent(evt);
        }

        //播放动作
        if (!string.IsNullOrEmpty(skill.m_skillInfo.castAction))
        {
            evt = GetSkillEvent();
            evt.fTriggerTime = skill.m_skillInfo.castActionBeginTime / m_entity.Property.AttackSpeed + Time.time;
            evt.func         = PlayAction;
            evt.isActive     = true;
            evt.skillID      = skill.m_skillInfo.ID;
            AddSkillEvent(evt);
        }

        //释放子弹
        if (!string.IsNullOrEmpty(skill.m_skillInfo.BulletEffect))
        {
            evt = GetSkillEvent();
            evt.fTriggerTime = skill.m_skillInfo.BulletBeginTime + Time.time;
            evt.skillID      = skill.m_skillInfo.ID;
            evt.func         = CastBullet;
            evt.isActive     = true;
            AddSkillEvent(evt);
        }

        /*技能击中一般分为2种:
         * 1、可配置型:    由时间控制、即hitTime,在技能编辑器中可以调好适当的值, 非子弹型技能一般都可以这样
         * 2、不可配置型:  如子弹型技能,因为与怪距离有远有近,无法配置hitTime,  这种由代码控制
         */

        //击中处理
        if (skill.m_skillInfo.hitTime.Equals(0f) == false)
        {
            evt = GetSkillEvent();
            evt.fTriggerTime = (skill.m_skillInfo.castActionBeginTime + skill.m_skillInfo.hitTime) / m_entity.Property.AttackSpeed + Time.time;
            evt.func         = SkillHit;
            evt.isActive     = true;
            evt.skillID      = skill.m_skillInfo.ID;
            evt.targets      = targets; //只有击中才需要得到技能的作用目标
            AddSkillEvent(evt);
        }

        evt = GetSkillEvent();
        evt.fTriggerTime = (skill.m_skillInfo.castActionBeginTime + skill.m_skillInfo.castActionDuration) / m_entity.Property.AttackSpeed + Time.time;
        evt.func         = SkillEnd;
        evt.isActive     = true;
        evt.skillID      = skill.m_skillInfo.ID;
        AddSkillEvent(evt);
    }
Пример #4
0
 void AddSkillEvent(SKillEvent evt)
 {
     m_skillEventList.Add(evt);
 }