Example #1
0
    private IEnumerator LateAtk(Character _target, float delay, Skill skill)
    {
        skill.cast(this.character, _target);
        yield return(new WaitForSeconds(delay));

        AbstractAI targetAI = _target.ai;

        if (this.IsDied() || targetAI.IsDied() || !isInAttackArea(_target.gameObject, getAtkRange()))
        {
            yield break;
        }

        bool isCrit  = IsCrit(skill, _target);
        bool isDodge = IsDodge(skill, _target);
        int  damage  = GetDamage(atkTarget, skill, isCrit, isDodge);

        _target.hp -= damage;
        Vector3 attackdir = this.transform.position - _target.gameObject.transform.position;

        attackdir[1] = 0f;
        attackdir    = Vector3.Normalize(attackdir);
        if (_target.type == CharacterType.MONSTER && isCrit && !isDodge)
        {
            cameraCtrl.Hitcam();
        }
        targetAI.OnHit(damage, attackdir, character, isCrit, isDodge);
    }
Example #2
0
    public void atk()
    {
        if (atkTarget == null)
        {
            Debug.Log("target is null");
            currentState = IDLE;
            return;
        }

        if (atk_ez_time > 0)
        {
            return;
        }

        GameObject target = atkTarget.gameObject;

        if (currentState != ATK)
        {
            currentState = ATK;
        }
        else if (isInAttackArea(target.gameObject, getAtkRange()) && !atkTarget.ai.IsDied())
        {
            //Debug.Log("is attacked " + target.gameObject);
            currentState = ATK;
            //atk_ez_time = GetAnimaLen("attack1") + 0.2f; // TODO 如果有其它的硬直存在?, TODO,这里应该为技能的CD、攻击的CD等设置
            atk_ez_time = character.atkSpeed;

            AbstractAI targetAI = atkTarget.ai;

            if (!targetAI.IsDied())
            {
                Skill skill = getSkill();
                PlayClip(skill.atkClip);
                animation.PlayQueued("idle");

                float delay = 0.5f;// TODO 这里的delay应该是动作播放到到受击帧的时间
                StartCoroutine(LateAtk(atkTarget, delay, skill));
            }
        }

        gameObject.transform.LookAt(target.gameObject.transform.position);
    }