예제 #1
0
    private int ShowEffect(EffectArise arise)
    {
        int childCount = 0;

        if (param == null || entity == null)
        {
            return(childCount);
        }
        if (entity.TryGetComponent(out EntityComponentModel model) == false)
        {
            return(childCount);
        }
        for (int i = 0; i < param.children.Count; ++i)
        {
            var child = param.children[i] as EntityParamEffect;
            if (child == null || string.IsNullOrEmpty(child.asset) || child.arise != arise)
            {
                continue;
            }
            childCount++;

            if (child.delay > 0)
            {
                DelayManager.Instance.AddDelayTask(child.delay, delegate()
                {
                    EffectEntity effect = BattleManager.Instance.CreateEffect(child.effectType);
                    if (effect != null && effect.Init(child, entity, mTarget, null))
                    {
                        if (action != null)
                        {
                            effect.action = action;
                            action.AddSubState(effect);
                        }
                    }
                    else
                    {
                        BattleManager.Instance.RemoveEffect(effect);
                    }
                });
            }
            else
            {
                EffectEntity effect = BattleManager.Instance.CreateEffect(child.effectType);

                if (effect != null && effect.Init(child, entity, mTarget, null))
                {
                    if (action != null)
                    {
                        effect.action = action;
                        action.AddSubState(effect);
                    }
                }
                else
                {
                    BattleManager.Instance.RemoveEffect(effect);
                }
            }
        }
        return(childCount);
    }
예제 #2
0
    public static void BulletHit(Entity caster, Entity target, CSVSkill skillInfo)
    {
        if (target.IsDead || target.invincible)
        {
            return;
        }

        //受击动作
        if (!string.IsNullOrEmpty(skillInfo.beattackAction))
        {
            target.Anim.SyncAction(skillInfo.beattackAction);
        }
        //受击特效

        if (!string.IsNullOrEmpty(skillInfo.beattackEffect))
        {
            EffectEntity effect = EffectManager.Instance.GetEffect(skillInfo.beattackEffect);
            effect.Init(eDestroyType.Time, skillInfo.beattackActionDuration);

            effect.Pos     = target.Pos;
            effect.Forward = target.Forward;
        }

        CalcBlood(caster, target, skillInfo);
    }
예제 #3
0
    private void ShowEffect(float deltaTime)
    {
        if (mParamAnimationClip == null || agent.param == null)
        {
            return;
        }

        var param = agent.param.GetAnimation(mParamAnimationClip.animationClip);

        if (param == null)
        {
            return;
        }
        deltaTime = action.speed * deltaTime;

        for (int i = 0; i < param.children.Count; ++i)
        {
            var child = param.children[i] as EntityParamEffect;
            if (child == null || string.IsNullOrEmpty(child.asset))
            {
                continue;
            }
            float time = action.time - mBeginTime;

            float previousTime = time - deltaTime;

            float delay = (child.delay - mParamAnimationClip.beginAt) / (mParamAnimationClip.speed > 0 ? mParamAnimationClip.speed : 1);


            if (delay < deltaTime)
            {
                delay = deltaTime;
            }

            if (previousTime < delay && time >= delay)
            {
                EffectEntity effect = BattleManager.Instance.CreateEffect(child.effectType);

                if (effect != null && effect.Init(child, agent, agent.target, null))
                {
                    effect.action = action;
                    action.AddSubState(effect);
                }
                else
                {
                    BattleManager.Instance.RemoveEffect(effect);
                }
            }
        }
    }
예제 #4
0
 /// <summary>
 /// 显示子特效
 /// </summary>
 /// <param name="effectType"></param>
 private void ShowEffect(EffectArise effectType)
 {
     if (param != null && param.effects != null)
     {
         for (int i = 0; i < param.effects.Count; ++i)
         {
             var effect = param.effects[i];
             if (effect.effectArise == effectType)
             {
                 EffectEntity entity = BattleManager.instance.CreateEffect(effect.type);
                 entity.Init(action, param.effects[i], parentTarget);
             }
         }
     }
 }
예제 #5
0
    //由时间控制的击中事件,一般是近战类攻击击中目标
    public void SkillHit(uint skillID, List <Entity> targets = null)
    {
        if (targets == null)
        {
            Log.Info("技能id = " + skillID + " 没有目标");
            return;
        }

        CSVSkill skillInfo = CSVManager.GetSkillCfg(skillID);

        //技能类型(1.普攻 2.物理 3.法术 4.保护 5.治疗 6.辅助 7.召唤 8.被动)
        if (skillInfo.type <= 3)
        {
            for (int i = 0; i < targets.Count; i++)
            {
                Entity target = targets[i];
                if (target.IsDead || target.invincible)
                {
                    continue;
                }

                //受击动作
                if (!string.IsNullOrEmpty(skillInfo.beattackAction))
                {
                    target.Anim.SyncAction(skillInfo.beattackAction);
                }
                //受击特效

                if (!string.IsNullOrEmpty(skillInfo.beattackEffect))
                {
                    EffectEntity effect = EffectManager.Instance.GetEffect(skillInfo.beattackEffect);
                    effect.Init(eDestroyType.Time, skillInfo.beattackActionDuration);

                    effect.Pos     = target.Pos;
                    effect.Forward = target.Forward;
                }

                SkillProcesser.CalcBlood(m_entity, target, skillInfo);
            }
        }
        else if (skillInfo.type <= 6)
        {
            //添加增益buff
            for (int i = 0; i < targets.Count; i++)
            {
            }
        }
    }
예제 #6
0
    public void Init(Entity caster, CSVSkill skillInfo, BulletHitCallback notify = null, Entity target = null)
    {
        m_effect = EffectManager.Instance.GetEffect(skillInfo.BulletEffect);
        if (m_effect == null)
        {
            Log.Error("不存在特效 " + skillInfo.BulletEffect);
            return;
        }
        m_caster = caster;
        m_target = target;
        if (target == null)
        {
            bulletType = eBulletType.Dir;
            m_dir      = m_caster.Forward;
        }
        else
        {
            bulletType = eBulletType.Target;
            m_dir      = (m_target.Pos - m_caster.Pos).normalized;
        }

        m_skillInfo = skillInfo;
        m_hitNotify = notify;
        //子弹存在的时间 = 子弹的攻击距离 / 子弹的飞行速度  小学物理知识  呵呵哒
        duration = m_skillInfo.attackDistance / m_skillInfo.flySpeed;
        m_effect.Init(eDestroyType.Time, duration);
        m_fSpeed = m_skillInfo.flySpeed;

        if (!string.IsNullOrEmpty(m_skillInfo.BulletBindBone))
        {
            m_effect.Pos = GetBonePos(m_caster, m_skillInfo.BulletBindBone);
        }
        else
        {
            m_effect.Pos = new Vector3(m_caster.Pos.x, m_caster.Pos.y + 0.5f, m_caster.Pos.z);
        }

        IsUsing = true;
    }
예제 #7
0
    void PlayEffect(uint skillID, List <Entity> targets = null)
    {
        CSVSkill skillInfo = CSVManager.GetSkillCfg(skillID);

        if (string.IsNullOrEmpty(skillInfo.castEffect))
        {
            return;
        }

        EffectEntity effect = EffectManager.Instance.GetEffect(skillInfo.castEffect);

        effect.Init(eDestroyType.Time, skillInfo.castEffectDuration);
        //特效绑定的骨骼

        if (!string.IsNullOrEmpty(skillInfo.castEffectBindBone))
        {
            Transform bone = null;

            if (skillInfo.castEffectBindBone.CompareTo("self") == 0)
            {
                bone = m_object.transform;
            }
            else
            {
                bone = m_entity.GetBone(skillInfo.castEffectBindBone);
            }

            if (bone != null)
            {
                effect.Bind(bone);
            }
        }
        //如果特效没有绑定位置,则默认位置为释放者的位置
        else
        {
            effect.Pos     = m_entity.Pos;
            effect.Forward = m_entity.Forward;
        }
    }
예제 #8
0
    private void ShowEffect(EffectArise effectType)
    {
        if (param != null && param.effects != null && entity.isPool == false)
        {
            for (int i = 0; i < param.effects.Count; ++i)
            {
                if (param.effects[i].effectArise == effectType)
                {
                    var target = BattleManager.instance.GetEntity(entity.data.target);

                    if (target != null && target.isPool)
                    {
                        return;
                    }

                    EffectEntity effect = BattleManager.instance.CreateEffect(param.effects[i].type);


                    effect.Init(this, param.effects[i], target);
                }
            }
        }
    }