Exemple #1
0
 public override string ToString()
 {
     return(string.Format("{0} change target from {1} to {2}",
                          actionUnit,
                          lastTargetUnit == null ? "None" : lastTargetUnit.ToString(),
                          newTargetUnit == null ? "None" : newTargetUnit.ToString()));
 }
        public override void UpdateView()
        {
            base.UpdateView();

            if (focusGridUnit != null)
            {
                tmpGridUnitInfo.text = string.Format("GridUnit:\n{0}", focusGridUnit.ToString());
            }

            if (focusBattleUnit != null)
            {
                tmpBattleUnitInfo.text = string.Format("BattleUnit:\n{0}\nHp:{1}/{2}\nAtk:{3}{4}\nDef:{5}{6}\nMobility:{7}{8}",
                                                       focusBattleUnit.ToString(),
                                                       focusBattleUnit.battleUnitAttribute.hp, focusBattleUnit.battleUnitAttribute.maxHp,
                                                       focusBattleUnit.battleUnitAttribute.Atk, GetGridUnitBuffStr(focusBattleUnit.mapGrid.gridUnitBuff, GridUnitBuffType.Atk),
                                                       focusBattleUnit.battleUnitAttribute.Def, GetGridUnitBuffStr(focusBattleUnit.mapGrid.gridUnitBuff, GridUnitBuffType.Def),
                                                       focusBattleUnit.battleUnitAttribute.mobility, GetGridUnitBuffStr(focusBattleUnit.mapGrid.gridUnitBuff, GridUnitBuffType.Range)
                                                       );
            }

            //设置显示
            separateLine.SetActive(focusGridUnit != null && focusBattleUnit != null);
            tmpGridUnitInfo.gameObject.SetActive(focusGridUnit != null);
            tmpBattleUnitInfo.gameObject.SetActive(focusBattleUnit != null);

            UpdateBattleUnitPackage();
        }
Exemple #3
0
        public override void UpdateView()
        {
            base.UpdateView();

            if (focusGridUnit != null)
            {
                tmpGridUnitInfo.text = string.Format("GridUnit:\n{0}", focusGridUnit.ToString());
            }

            if (focusBattleUnit != null)
            {
                tmpBattleUnitInfo.text = string.Format("BattleUnit:\n{0}\nHp:{1}/{2}\nAtk:{3}\nDef:{4}\nMobility:{5}",
                                                       focusBattleUnit.ToString(),
                                                       focusBattleUnit.battleUnitAttribute.hp, focusBattleUnit.battleUnitAttribute.maxHp,
                                                       focusBattleUnit.battleUnitAttribute.atk,
                                                       focusBattleUnit.battleUnitAttribute.def,
                                                       focusBattleUnit.battleUnitAttribute.mobility
                                                       );
            }

            //设置显示
            separateLine.SetActive(focusGridUnit != null && focusBattleUnit != null);
            tmpGridUnitInfo.gameObject.SetActive(focusGridUnit != null);
            tmpBattleUnitInfo.gameObject.SetActive(focusBattleUnit != null);
        }
        //打印详情
        public string Desc()
        {
            StringBuilder strBuilder = new StringBuilder();

            strBuilder.AppendFormat("Release analysis : {0} -> {1}\n",
                                    releaser == null ? "None" : releaser.ToString(),
                                    target == null ? "None" : target.ToString());

            List <BattleSkillAutoReleaseAnalysisItem> validList = skillReleaseAnalysisItem.GetUsed();

            if (validList == null)
            {
                strBuilder.AppendFormat("Empty......");
            }
            else
            {
                for (int i = 0; i < validList.Count; ++i)
                {
                    if (validList[i].battleSkill != null)
                    {
                        strBuilder.AppendFormat("{0}. {1} : score = {2}, count = {3}\n",
                                                i,
                                                validList[i].battleSkill.skillName,
                                                validList[i].score,
                                                validList[i].effectedCount);
                    }
                }
            }

            return(strBuilder.ToString());
        }
Exemple #5
0
        public string Desc()
        {
            StringBuilder desc = new StringBuilder();

            desc.AppendFormat("BattleUnit action:{0}\n", actionUnit.ToString());
            if (enterBattleFieldAction != null)
            {
                desc.AppendFormat("Enter battle field:{0}, born grid:{1}\n", enterBattleFieldAction.battleField, enterBattleFieldAction.bornGrid);
            }
            if (changeTargetAction != null)
            {
                desc.AppendFormat("Change target:from {0} to {1}\n", changeTargetAction.lastTargetUnit == null ? "None" : changeTargetAction.lastTargetUnit.ToString(), changeTargetAction.newTargetUnit == null ? "None" : changeTargetAction.newTargetUnit.ToString());
            }
            if (motionAction != null)
            {
                desc.AppendFormat("Move: target is {0}, move from {1},\n", motionAction.targetUnit, motionAction.fromGrid);
                if (motionAction.gridPath != null)
                {
                    for (int i = 0; i < motionAction.gridPath.Length; ++i)
                    {
                        desc.AppendFormat("Passed: {0},\n", motionAction.gridPath[i]);
                    }
                }
                desc.AppendFormat("Move range: {0}.\n", motionAction.moveRange);
            }
            if (skillAction != null)
            {
                desc.AppendFormat("Use skill {0}\n", skillAction.battleSkill.skillName);
                if (skillAction.skillResult != null)
                {
                    for (int i = 0; i < skillAction.skillResult.Length; ++i)
                    {
                        desc.AppendFormat("{0}\n", skillAction.skillResult[i].ToString());
                    }
                }
            }
            if (manualAction != null)
            {
                desc.AppendFormat("Waiting for manual operation.\n");
            }
            if (warningAction != null)
            {
                desc.AppendFormat("<color=#FFFF00>WARNING!!!</color>:{0}\n", warningAction.logWarning);
            }

            return(desc.ToString());
        }
Exemple #6
0
        //开始战斗
        private void Fight()
        {
            battleState = BattleState.Fighting;

            Debug.Log(string.Format("<color=#ff0000> {0} battle fight. </color>", this.ToString()));

            List <BattleAction> actions = new List <BattleAction>();

            BattleUnit actionUnit = null;

            do
            {
                //没有连接渲染器,则一步一更新
                //连接了渲染器,则一直更新直到结束
                actionUnit = actionQueue.Dequeue();

                if (actionUnit == null)
                {
                    battleState = BattleState.End;
                    break;
                }

                if (actionUnit.CanAction)
                {
                    HeroActionState state = actionUnit.BattleAction(actions);

                    switch (state)
                    {
                    case HeroActionState.BattleEnd:
                        battleState = BattleState.End;
                        break;

                    case HeroActionState.Error:
                        battleState = BattleState.Exception;
                        break;

                    case HeroActionState.Warn:
                        UtilityHelper.LogWarning(string.Format("Warning: battle action state warning -> {0}", actionUnit.ToString()));
                        break;

                    case HeroActionState.WaitForPlayerChoose:
                        battleState = BattleState.WaitForPlayer;
                        break;

                    default:
                        break;
                    }

                    //追加动作
                    AppendBattleActions(actions);
                    //考虑是否在放回队列
                    CalculateNextAction(actionUnit);
                }

                ++actionCount;

                if (actionCount >= EGameConstL.BattleFieldMaxActions)
                {
                    battleState = BattleState.Exception;
                }
            } while (battleFieldRenderer == null &&
                     battleState != BattleState.End &&
                     battleState != BattleState.Exception);

            //连接了渲染器,一步一更新
            if (battleFieldRenderer != null)
            {
                Debug.Log("Play actions");

                if (battleState == BattleState.End || battleState == BattleState.Exception)
                {
                    battleFieldRenderer.PlayBattle(BattleEnd);
                }

                else if (battleState == BattleState.WaitForPlayer)
                {
                    battleFieldRenderer.PlayBattle(null);
                }

                else
                {
                    battleFieldRenderer.PlayBattle(Fight);
                }
            }
            else
            {
                //没有连接渲染器,自动战斗
                BattleEnd();
            }
        }
Exemple #7
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());
                }
            }
        }
Exemple #8
0
        //开始战斗
        private void Fight()
        {
            battleState = BattleState.Fighting;

            BattleUnit actionUnit = null;

            do
            {
                //连接渲染器,则一步一更新
                //没有连接渲染器,则一直计算直到结束
                actionUnit = actionQueue.Dequeue();

                if (actionUnit == null)
                {
                    battleState = BattleState.End;
                    break;
                }

                if (actionUnit.CanAction)
                {
                    BattleUnitAction battleUnitAction = BattleUnitAction.Create(actionUnit);

                    HeroActionState state = actionUnit.BattleAction();

                    switch (state)
                    {
                    case HeroActionState.Normal:
                        battleState = BattleState.Fighting;
                        break;

                    case HeroActionState.WaitForPlayerChoose:
                        battleState = BattleState.WaitForPlayer;
                        break;

                    case HeroActionState.Error:
                        battleState = BattleState.Exception;
                        break;

                    case HeroActionState.Warn:
                        battleState = BattleState.Exception;
                        UtilityHelper.LogWarning(string.Format("Warning: battle action state warning -> {0}", actionUnit.ToString()));
                        break;

                    default:
                        break;
                    }
                }

                //考虑是否在放回队列
                CalculateNextAction(actionUnit);

                if (battleActions.Count > EGameConstL.BattleFieldMaxActions)
                {
                    UtilityHelper.LogError("Battle actions overflow max limit.");
                    battleState = BattleState.Exception;
                }
                else
                {
                    //只在这种情况下做战斗结束的判断
                    if (!actionUnit.CanAction ||
                        actionUnit.targetBattleUnit == null ||
                        !actionUnit.targetBattleUnit.CanAction)
                    {
                        CheckBattleEnd();
                    }
                }
            } while (battleFieldRenderer == null &&
                     battleState != BattleState.End &&
                     battleState != BattleState.Exception);

            //连接了渲染器,一步一表现
            if (battleFieldRenderer != null)
            {
                if (battleState == BattleState.WaitForPlayer)
                {
                    battleFieldRenderer.PlayBattle(null);
                }

                else
                {
                    battleFieldRenderer.PlayBattle(Run);
                }
            }
            else
            {
                Run();
            }
        }
 public override string Desc()
 {
     return(string.Format("Change target:from {0} to {1}\n", lastTargetUnit == null ? "None" : lastTargetUnit.ToString(), newTargetUnit == null ? "None" : newTargetUnit.ToString()));
 }