コード例 #1
0
        //手动操作完成
        private void ManualOperationComplete()
        {
            //切换状态
            manualOperationState = ManualOperationState.Waiting;
            skillOperationType   = SkillOperationType.None;

            //清空状态
            CleanState(false, false);

            //清空手动操作单位
            if (manualOperatingBattleUnitRenderer != null)
            {
                manualOperatingBattleUnitRenderer.battleUnit.CompleteManualState(ManualActionState.Skill);
                manualOperatingBattleUnitRenderer.battleUnit.CompleteManualState(ManualActionState.Move);
                manualOperatingBattleUnitRenderer.UpdateRenderState(BattleUnitRenderState.Normal);
                manualOperatingBattleUnitRenderer = null;
            }

            //关闭操作菜单
            UIViewManager.Instance.HideView(UIViewName.BattleFieldPlayerActOption);

            //使用了手动分析器
            if (usedManualReleaseAnalysisor != null)
            {
                usedManualReleaseAnalysisor.Reset();
            }

            //显示后通知手动操作完成
            EventManager.Instance.Run(EGameConstL.EVENT_MANUAL_OPERATION_COMPLETE, null);
        }
コード例 #2
0
 //移动后的回调
 private void AfterManualMove()
 {
     //清空高亮显示
     SetCircularRangeRenderStateActive(false, GridRenderType.MoveRange);
     //切换状态
     manualOperationState = ManualOperationState.Select;
     //通知移动完成
     manualOperatingBattleUnitRenderer.battleUnit.CompleteManualState(ManualActionState.Move);
 }
コード例 #3
0
 private void AfterManualMove()
 {
     //清空高亮显示
     SetRangeHighlightActive(false, 0, 0, 0);
     //切换状态
     manualOperationState = ManualOperationState.None;
     //通知移动完成
     manualBattleUnitRenderer.battleUnit.CompleteManualState(ManualActionState.Move);
 }
コード例 #4
0
        private void BeforeManualSkill()
        {
            //显示攻击范围
            SetRangeHighlightActive(
                true,
                manualBattleUnitRenderer.battleUnit.mapGrid.row,
                manualBattleUnitRenderer.battleUnit.mapGrid.column,
                1);

            manualOperationState = ManualOperationState.Skill;
            UIViewManager.Instance.HideView(UIViewName.BattleFieldPlayerActOption);
        }
コード例 #5
0
        private void BeforeManualSkill()
        {
            //显示攻击范围
            SetRangeHighlightActive(
                true,
                manualBattleUnitRenderer.battleUnit.mapGrid.row,
                manualBattleUnitRenderer.battleUnit.mapGrid.column,
                1);

            manualOperationState = ManualOperationState.Skill;
            activeManualList     = false;
        }
コード例 #6
0
        private void BeforeManualMove()
        {
            //显示移动范围
            SetRangeHighlightActive(
                true,
                manualBattleUnitRenderer.battleUnit.mapGrid.row,
                manualBattleUnitRenderer.battleUnit.mapGrid.column,
                manualBattleUnitRenderer.battleUnit.mobility);

            //设定为移动状态
            manualOperationState = ManualOperationState.Move;
            UIViewManager.Instance.HideView(UIViewName.BattleFieldPlayerActOption);
        }
コード例 #7
0
        private void BeforeManualMove()
        {
            //显示移动范围
            SetRangeHighlightActive(
                true,
                manualBattleUnitRenderer.battleUnit.mapGrid.row,
                manualBattleUnitRenderer.battleUnit.mapGrid.column,
                manualBattleUnitRenderer.battleUnit.mobility);

            //设定为移动状态
            manualOperationState = ManualOperationState.Move;
            activeManualList     = false;
        }
コード例 #8
0
        /// <summary>
        /// 清空状态
        /// </summary>
        /// <param name="resetOperationState">是否将操作状态设置为select(等待操作状态)</param>
        /// <param name="resetManualBattleUnitState">是否重置带操作战斗单位(行动中状态)</param>
        private void CleanState(bool resetOperationState, bool resetManualBattleUnitState)
        {
            //清除区域显示效果
            SetCircularRangeRenderStateActive(false, GridRenderType.MoveRange);
            SetCircularRangeRenderStateActive(false, GridRenderType.SkillReleaseRange);
            SetCircularRangeRenderStateActive(false, GridRenderType.SkillEffectRange);

            //还原所有战斗单位的状态
            if (usedManualReleaseAnalysisor != null)
            {
                //可以被选中的
                for (int i = 0; i < usedManualReleaseAnalysisor.suitableUnits.Count; ++i)
                {
                    usedManualReleaseAnalysisor.suitableUnits[i].battleUnitRenderer.UpdateRenderState(BattleUnitRenderState.Normal);
                }

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

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

                //无效的
                for (int i = 0; i < usedManualReleaseAnalysisor.battleUnitInvalid.Count; ++i)
                {
                    usedManualReleaseAnalysisor.battleUnitInvalid[i].battleUnitRenderer.UpdateRenderState(BattleUnitRenderState.Normal);
                }
            }

            //是否重置操作状态
            if (resetOperationState)
            {
                manualOperationState = ManualOperationState.Select;
            }

            //是否重置手动操作的英雄
            if (resetManualBattleUnitState && manualOperatingBattleUnitRenderer != null)
            {
                manualOperatingBattleUnitRenderer.UpdateRenderState(BattleUnitRenderState.Action);
            }

            //重置已选中项
            selectedBattleUnitRenderer = null;
            selectedGridUnitRenderer   = null;
        }
コード例 #9
0
 private void ManualOperationComplete()
 {
     //切换状态
     manualOperationState = ManualOperationState.None;
     //通知移动完成
     manualBattleUnitRenderer.battleUnit.CompleteManualState(ManualActionState.Skill);
     manualBattleUnitRenderer.battleUnit.CompleteManualState(ManualActionState.Move);
     //清空手动操作单位
     manualBattleUnitRenderer = null;
     //关闭操作菜单
     UIViewManager.Instance.HideView(UIViewName.BattleFieldPlayerActOption);
     //显示后通知手动操作完成
     PlayBattle(battleField.ManualOperationComplete);
 }
コード例 #10
0
 private void ManualOperationComplete()
 {
     //切换状态
     manualOperationState = ManualOperationState.None;
     //通知移动完成
     manualBattleUnitRenderer.battleUnit.CompleteManualState(ManualActionState.Skill);
     manualBattleUnitRenderer.battleUnit.CompleteManualState(ManualActionState.Move);
     //清空手动操作单位
     manualBattleUnitRenderer = null;
     //关闭操作菜单
     activeManualList = false;
     //显示后通知手动操作完成
     PlayBattle(battleField.ManualOperationComplete);
 }
コード例 #11
0
        //某个战斗单位点击了移动
        public void BattleUnitMove(BattleUnit battleUnit)
        {
            if (battleUnit == null ||
                battleUnit.battleUnitRenderer == null ||
                !battleUnit.battleUnitRenderer.Equals(manualOperatingBattleUnitRenderer))
            {
                UtilityHelper.LogError("Battle unit move failed.");
                return;
            }

            //显示移动范围
            SetCircularRangeRenderStateActive(
                true,
                GridRenderType.MoveRange,
                battleUnit.mapGrid.row,
                battleUnit.mapGrid.column,
                battleUnit.battleUnitAttribute.mobility);

            //设定为移动状态
            manualOperationState = ManualOperationState.Move;

            //关闭选择操作界面
            UIViewManager.Instance.HideView(UIViewName.BattleFieldPlayerActOption);
        }
コード例 #12
0
        //某个战斗单位点击了移动
        public void BattleUnitMove(BattleUnit battleUnit)
        {
            if (battleUnit == null ||
                battleUnit.battleUnitRenderer == null ||
                !battleUnit.battleUnitRenderer.Equals(manualOperatingBattleUnitRenderer))
            {
                UtilityHelper.LogError("Battle unit move failed.");
                return;
            }

            //显示移动范围
            SetCircularRangeRenderStateActive(
                true,
                GridRenderType.MoveRange,
                battleUnit.mapGrid.row,
                battleUnit.mapGrid.column,
                battleUnit.battleUnitAttribute.mobility);

            //设定为移动状态
            manualOperationState = ManualOperationState.Move;

            //关闭选择操作界面
            HideManualActionList();
        }
コード例 #13
0
        //手动操作完成
        private void ManualOperationComplete()
        {
            //切换状态
            manualOperationState = ManualOperationState.Waiting;
            skillOperationType   = SkillOperationType.None;

            //清空状态
            CleanState(false, false);

            //清空手动操作单位
            if (manualOperatingBattleUnitRenderer != null)
            {
                manualOperatingBattleUnitRenderer.battleUnit.CompleteManualState(ManualActionState.Skill);
                manualOperatingBattleUnitRenderer.battleUnit.CompleteManualState(ManualActionState.Move);
                manualOperatingBattleUnitRenderer.UpdateRenderState(BattleUnitRenderState.Normal);
                manualOperatingBattleUnitRenderer = null;
            }

            //关闭操作菜单
            UIViewManager.Instance.HideView(UIViewName.BattleFieldPlayerActOption);

            //显示后通知手动操作完成
            fieldRenderer.PlayBattle(fieldRenderer.battleField.ManualOperationComplete);
        }
コード例 #14
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;
            }

            //获取推算的技能释放结果
            usedManualReleaseAnalysisor = BattleCalculator.Instance.ManualReleaseAnalysisor;

            //分析结果
            usedManualReleaseAnalysisor.Analysis(manualOperatingBattleUnitRenderer.battleUnit, skill);

            //显示技能释放范围
            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 < usedManualReleaseAnalysisor.suitableUnits.Count; ++i)
                {
                    usedManualReleaseAnalysisor.suitableUnits[i].battleUnitRenderer.UpdateRenderState(BattleUnitRenderState.Selectable);
                }

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

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

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

            //对范围(某一个位置)目标
            case BattleSkillTargetType.GridUnit:
                skillOperationType = SkillOperationType.GridUnitTarget;
                //如果没有位置可选,则直接打开范围
                if (skill.releaseRadius <= 0)
                {
                    //可以被选中,标记为已被选中
                    for (int i = 0; i < usedManualReleaseAnalysisor.suitableUnits.Count; ++i)
                    {
                        usedManualReleaseAnalysisor.suitableUnits[i].battleUnitRenderer.UpdateRenderState(BattleUnitRenderState.Selected);
                    }

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

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

                    OnBattleUnitAndGridTouched_StateSkill_GridUnitTarget(battleUnit.mapGrid, null);
                }
                else
                {
                    //需要指定范围,需要点击目标地块
                }
                break;

            //以自身为中心的
            case BattleSkillTargetType.Self:
                //可以被选中,标记为已被选中
                for (int i = 0; i < usedManualReleaseAnalysisor.suitableUnits.Count; ++i)
                {
                    usedManualReleaseAnalysisor.suitableUnits[i].battleUnitRenderer.UpdateRenderState(BattleUnitRenderState.Selected);
                }

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

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

                skillOperationType = SkillOperationType.SurroundSelf;

                //省去一步点击操作,直接展示区域
                OnBattleUnitAndGridTouched_StateSkill_SurroundSelf(battleUnit.mapGrid, battleUnit);
                break;

            default:
                break;
            }

            //切换操作状态
            manualOperationState = ManualOperationState.Skill;
            UIViewManager.Instance.HideView(UIViewName.BattleFieldPlayerActOption);
        }
コード例 #15
0
        private void OnBattleUnitAndGridTouched(GridUnit gridTouched, BattleUnit battleUnitTouched)
        {
            //没有激活操作状态
            if (manualOperationState == ManualOperationState.None)
            {
                //点中了战斗单位
                if (battleUnitTouched != null)
                {
                    //点中了等待手动操作的战斗单位
                    if (battleUnitTouched.battleUnitRenderer.Equals(manualBattleUnitRenderer))
                    {
                        ShowManualActionList();
                    }
                    else
                    {
                        UIViewManager.Instance.ShowView(UIViewName.BattleFieldUnitInfo, gridTouched, battleUnitTouched);
                    }
                }
                //点中了地图
                else
                {
                    UIViewManager.Instance.ShowView(UIViewName.BattleFieldUnitInfo, gridTouched, battleUnitTouched);
                }
            }
            //选择移动状态
            else if (manualOperationState == ManualOperationState.Move)
            {
                //点中了战斗单位
                if (battleUnitTouched != null)
                {
                    //点中了等待手动操作的战斗单位
                    if (battleUnitTouched.battleUnitRenderer.Equals(manualBattleUnitRenderer))
                    {
                        //取消操作
                        manualOperationState = ManualOperationState.None;
                        SetRangeHighlightActive(false, 0, 0, 0);
                    }
                    else
                    {
                        UIViewManager.Instance.ShowView(UIViewName.BattleFieldUnitInfo, gridTouched, battleUnitTouched);
                    }
                }
                //点中了地图
                else
                {
                    if (gridTouched.GridType == GridType.Obstacle)
                    {
                        UIViewManager.Instance.ShowView(UIViewName.BattleFieldUnitInfo, gridTouched, battleUnitTouched);
                    }
                    else
                    {
                        //点击是否超出了范围
                        GridUnit fromGrid = manualBattleUnitRenderer.battleUnit.mapGrid;
                        if (fromGrid.Distance(gridTouched) > manualBattleUnitRenderer.battleUnit.mobility)
                        {
                            Debug.Log("超出了移动半径!");
                        }
                        else
                        {
                            bool result = MapNavigator.Instance.Navigate(
                                battleField.battleMap,
                                fromGrid,
                                gridTouched,
                                UtilityObjs.gridUnits,
                                null,
                                manualBattleUnitRenderer.battleUnit.mobility
                                );

                            //判断是否可以到达(导航成功且可以可以到达)
                            if (result && UtilityObjs.gridUnits[UtilityObjs.gridUnits.Count - 1].Equals(gridTouched))
                            {
                                //可以到达
                                ManualMoveTo(gridTouched, UtilityObjs.gridUnits.ToArray());
                                UtilityObjs.gridUnits.Clear();
                            }
                            else
                            {
                                //不可以到达
                                Debug.Log("点击位置不可到达!");
                            }
                        }
                    }
                }
            }
            //选择攻击目标状态
            else if (manualOperationState == ManualOperationState.Skill)
            {
                //点中了战斗单位
                if (battleUnitTouched != null)
                {
                    //点中了等待手动操作的战斗单位
                    if (battleUnitTouched.battleUnitRenderer.Equals(manualBattleUnitRenderer))
                    {
                        //取消操作
                        manualOperationState = ManualOperationState.None;
                        SetRangeHighlightActive(false, 0, 0, 0);
                    }
                    else
                    {
                        //判断是否可以被攻击
                        if (manualBattleUnitRenderer.battleUnit.battleTeam.Equals(battleUnitTouched.battleTeam))
                        {
                            //同一个队伍的
                            Debug.Log("攻击状态点中了同一个队伍的战斗单位:" + battleUnitTouched.ToString());
                        }
                        else if (battleUnitTouched.mapGrid.Distance(manualBattleUnitRenderer.battleUnit.mapGrid) > 1)
                        {
                            Debug.Log("不在攻击范围:" + battleUnitTouched.ToString());
                        }
                        else
                        {
                            ManualSkill(battleUnitTouched);
                        }
                    }
                }
                //点中了地图
                else
                {
                    Debug.Log("攻击状态点中了地图单位:" + gridTouched.ToString());
                }
            }
        }