Ejemplo n.º 1
0
    /// <summary>
    /// 使用绝技技能,HeroUnitUI调用
    /// </summary>
    /// <returns></returns>
    public void UI_UseUniqueSkill(params object[] objs)
    {
        UnAbleReason reason = UnAbleReason.None;

        if (self.state != FightUnit.UnitState.Fighting)
        {
            reason = UnAbleReason.NotFighting;
        }
        else if (self.isConfused)
        {
            reason = UnAbleReason.InSpecailState;
        }
        if (reason != UnAbleReason.None)
        {
            TipReason(reason);
            return;
        }
        else
        {
            if (target == null || target.state == FightUnit.UnitState.Dead)
            {
                target = FightRule.GetFightTarget(self, self.parentGroup.targetGroup);
                if (target == null)
                {
                    return;
                }
            }
            UseUniqueSkill();
        }
    }
Ejemplo n.º 2
0
    void OnNormalAttackHit(params object[] objs)
    {
        float hurtNum  = (int)objs[0];
        int   xixueNum = Mathf.Max(1, Mathf.RoundToInt(hurtNum * buffValue));

        FightRule.XixueCure(xixueNum, target);
    }
Ejemplo n.º 3
0
 public bool TryAttack()
 {
     if (targetUnit == null || targetUnit.state == UnitState.Dead)
     {
         targetUnit = FightRule.GetFightTarget(this, isEntice || isConfused? parentGroup : parentGroup.targetGroup);
     }
     if (targetUnit == null)
     {
         return(false);
     }
     return(Util.Distance(targetUnit.transform.localPosition, mTrans.localPosition) <= fightAttribute.range);
 }
Ejemplo n.º 4
0
 public override void OnIng()
 {
     base.OnIng();
     if (!targetUnit)
     {
         targetUnit = FightRule.GetFightTarget(mineUnit, mineUnit.parentGroup.targetGroup);
         if (!targetUnit)
         {
             return;
         }
     }
     FightRule.NormalAttackWork(mineUnit, targetUnit, this);
 }
Ejemplo n.º 5
0
    void OnFantan(params object[] objs)
    {
        int      hurtNum     = (int)objs[0];
        Skill    skill       = (Skill)objs[1];
        HurtType damangeType = (HurtType)objs[2];

        if (damangeType != hurtType || skill == null)
        {
            return;
        }
        int fantanNum = Mathf.Max(1, Mathf.RoundToInt(hurtNum * buffValue));

        FightRule.FantanDamage(fantanNum, target, skill.mineUnit);
    }
Ejemplo n.º 6
0
 public override void OnIng()
 {
     base.OnIng();
     if (!targetUnit)
     {
         if (mineUnit.TryAttack())
         {
             targetUnit = mineUnit.targetUnit;
         }
         else
         {
             return;
         }
     }
     FightRule.ActiveSkillWork(mineUnit, targetUnit, this);
 }
Ejemplo n.º 7
0
    /// <summary>
    /// 每次普通攻击结束后思考一次是否使用技能
    /// </summary>
    public void ThinkUseSkill(object[] objs)
    {
        if (target == null || target.state == FightUnit.UnitState.Dead)
        {
            target = FightRule.GetFightTarget(self, self.isConfused ? self.parentGroup : self.parentGroup.targetGroup);
            if (target == null)
            {
                return;
            }
        }
        List <int> indexList   = new List <int>();
        uint       totalWeight = 0;
        float      randomVal   = Random.value;

        for (int i = 0; i < autoSkills.Count; i++)
        {
            ActiveSkillStruct skill = autoSkills[i];
            if (skill.isLocked)
            {
                if (skill.autoSkillCondition.unlockTime <= time)
                {
                    skill.isLocked = false;
                }
            }
            if (!skill.isLocked && skill.cd + skill.lastUseTime <= time && IsFitSkillCondition(skill))
            {
                totalWeight += skill.autoSkillCondition.weight;
                indexList.Add(i);
            }
        }
        for (int i = 0; i < indexList.Count; i++)
        {
            float val = (float)autoSkills[i].autoSkillCondition.weight / totalWeight;
            if (randomVal <= val)
            {
                selectedSkill             = autoSkills[i].autoSkill;
                autoSkills[i].lastUseTime = time;
                autoSkills[i].GetCd();
                break;
            }
            else
            {
                randomVal -= val;
            }
        }
    }
Ejemplo n.º 8
0
 public override void OnIng()
 {
     base.OnIng();
     FightRule.UniqueSkillWork(mineUnit, targetUnit, this);
 }
Ejemplo n.º 9
0
    public override void Update()
    {
        base.Update();
        //根据玩家方向或者出生点进行自我转向调整
        ChangeOrientation();
        //这部分要放在上面,否则引起一直原地
        if (this.mTrans.localPosition == this.birthPoint.localPosition && targetUnit == null)
        {
            mTrans.localRotation = birthPoint.localRotation;
            isRotate             = false; //恢复初始设置
            state = UnitState.Wait;
        }

        if (state == UnitState.Wait && (FightRule.GetAlarmedFightTarget(this, this.parentGroup.targetGroup) != null))
        {
            targetUnit = FightRule.GetAlarmedFightTarget(this, this.parentGroup.targetGroup);
            state      = UnitState.MoveToTarget;
        }

        if (targetUnit != null && FightRule.Distance(this, targetUnit) > this.fightAttribute.alarmRange)
        {
            state = UnitState.LoseTarget;
        }

        //如果回到出生地,则恢复wait状态(待做)


        if (state == UnitState.LoseTarget)
        {
            targetUnit = null;
            GetBack();
        }

        else if (state == UnitState.MoveToTarget && beAbleMove)
        {
            ChangeOrientation();
            if (TryAttack())
            {
                anim.Play(Const.IdleAction, true);          //调整动作
                state = UnitState.Fighting;                 //有目标既进入战斗状态
            }
            else
            {
                if (targetUnit == null)
                {
                    return;
                }
                else
                {
                    MoveTowardsTarget();
                }
            }
        }
        else if (state == UnitState.Fighting && beAbleFight)
        {
            if (modifiedY != 0 || modifiedZ != 0)
            {
                mTrans.localPosition = Vector3.MoveTowards(mTrans.localPosition, new Vector3(mTrans.localPosition.x, modifiedY, modifiedZ), Const.MoveSpeed * Time.deltaTime);
            }
            if (TryAttack())
            {
                attack.DoAttack(targetUnit);
            }
            else
            {
                if (attack.currentSkill != null)
                {
                    return;
                }
                if (targetUnit == null)
                {
                    state = UnitState.Wait;
                }
                else
                {
                    state = UnitState.MoveToTarget;
                }
            }
        }
    }
Ejemplo n.º 10
0
 public override void BuffProcess()
 {
     FightRule.BuffAttackDamage(this, HurtType.True);
 }
Ejemplo n.º 11
0
 public override void BuffProcess()
 {
     FightRule.BuffCure((int)buffValue, target);
 }