Esempio n. 1
0
        //向目标地点使用技能
        public void UseSkill(List <BattleAction> actions, GridUnit target, BattleSkillAnalysis skillAnalysis)
        {
            if (target == null || skillAnalysis == null)
            {
                UtilityHelper.LogError("Use skill error, none target or skill");
                return;
            }

            List <BattleHeroSkillResult> skillResults = new List <BattleHeroSkillResult>();

            for (int i = 0; i < skillAnalysis.suitableUnits.Count; ++i)
            {
                //范围内的都受到伤害
                if (target.Distance(skillAnalysis.suitableUnits[i].mapGrid) <= skillAnalysis.battleSkill.rangeRadius)
                {
                    skillResults.Add(BattleCalculator.Instance.CalcSingle(this, skillAnalysis.suitableUnits[i], skillAnalysis.battleSkill));
                }
            }

            //产生使用技能的动作
            if (actions != null)
            {
                BattleHeroSkillAction action = new BattleHeroSkillAction(this, skillAnalysis.battleSkill.skillID);
                action.skillResult = skillResults.ToArray();
                actions.Add(action);
            }

            //产生伤害
            for (int i = 0; i < skillResults.Count; ++i)
            {
                skillResults[i].battleUnit.AcceptSkillResult(skillResults[i].syncAttribute, actions);
            }
        }
Esempio n. 2
0
 //检查是否在攻击范围
 private void CheckUnderAttackRadius()
 {
     skillAnalysis = BattleCalculator.Instance.AnalyseBattleSkill(this, AISkill);
 }
Esempio n. 3
0
        //某个战斗单位点击了使用技能
        public void BattleUnitUseSkill(BattleUnit battleUnit, SO_BattleSkill skill)
        {
            if (battleUnit == null ||
                battleUnit.battleUnitRenderer == null ||
                !battleUnit.battleUnitRenderer.Equals(manualOperatingBattleUnitRenderer))
            {
                UtilityHelper.LogError("Battle unit use skill failed.");
                UIViewManager.Instance.HideView(UIViewName.BattleFieldPlayerActOption);
                return;
            }

            //获取推算的技能释放结果
            selectedBattleSkillAnalysis = BattleCalculator.Instance.AnalyseBattleSkill(battleUnit, skill);

            if (selectedBattleSkillAnalysis == null)
            {
                UtilityHelper.LogError("Battle unit use skill failed.Error analyse.");
                UIViewManager.Instance.HideView(UIViewName.BattleFieldPlayerActOption);
                return;
            }

            //显示技能释放范围
            if (skill.releaseRadius > 0)
            {
                SetCircularRangeRenderStateActive(
                    true,
                    GridRenderType.SkillReleaseRange,
                    battleUnit.mapGrid.row,
                    battleUnit.mapGrid.column,
                    skill.releaseRadius);
            }

            //根据类型判断技能显示状态
            switch (skill.targetType)
            {
            //对单个目标
            case BattleSkillTargetType.BattleUnit:
                //可以被选中的
                for (int i = 0; i < selectedBattleSkillAnalysis.suitableUnits.Count; ++i)
                {
                    selectedBattleSkillAnalysis.suitableUnits[i].battleUnitRenderer.UpdateRenderState(BattleUnitRenderState.Selectable);
                }

                //不可以被选中的
                for (int i = 0; i < selectedBattleSkillAnalysis.distanceLimit.Count; ++i)
                {
                    selectedBattleSkillAnalysis.distanceLimit[i].battleUnitRenderer.UpdateRenderState(BattleUnitRenderState.NotSelectable);
                }

                //队伍不合适的
                for (int i = 0; i < selectedBattleSkillAnalysis.teamLimit.Count; ++i)
                {
                    selectedBattleSkillAnalysis.teamLimit[i].battleUnitRenderer.UpdateRenderState(BattleUnitRenderState.Normal);
                }

                //设定技能操作类型
                skillOperationType = skill.rangeRadius > 0 ? SkillOperationType.SurroundBattleUnit : SkillOperationType.SingleBattleUnitTarget;
                break;

            //对范围(某一个位置)目标
            case BattleSkillTargetType.GridUnit:
                //以自身为中心攻击周围目标
                if (skill.releaseRadius <= 0)
                {
                    //可以被选中,标记为已被选中
                    for (int i = 0; i < selectedBattleSkillAnalysis.suitableUnits.Count; ++i)
                    {
                        selectedBattleSkillAnalysis.suitableUnits[i].battleUnitRenderer.UpdateRenderState(BattleUnitRenderState.Selected);
                    }

                    //不可以被选中的
                    for (int i = 0; i < selectedBattleSkillAnalysis.distanceLimit.Count; ++i)
                    {
                        selectedBattleSkillAnalysis.distanceLimit[i].battleUnitRenderer.UpdateRenderState(BattleUnitRenderState.NotSelectable);
                    }

                    //队伍不合适的
                    for (int i = 0; i < selectedBattleSkillAnalysis.teamLimit.Count; ++i)
                    {
                        selectedBattleSkillAnalysis.teamLimit[i].battleUnitRenderer.UpdateRenderState(BattleUnitRenderState.Normal);
                    }

                    skillOperationType = SkillOperationType.SurroundSelf;

                    //省去一步点击操作,直接展示区域
                    OnBattleUnitAndGridTouched_StateSkill_SurroundSelf(battleUnit.mapGrid, battleUnit);
                }
                //需要指定范围,需要点击目标地块
                else
                {
                    skillOperationType = SkillOperationType.GridUnitTarget;
                }
                break;

            default:
                break;
            }

            //切换操作状态
            manualOperationState = ManualOperationState.Skill;
            UIViewManager.Instance.HideView(UIViewName.BattleFieldPlayerActOption);
        }