Пример #1
0
        //点击了技能按钮
        private void OnClickedSkillItem()
        {
            //获取当前点击对象
            string btnName  = EventSystem.current.currentSelectedGameObject.name;
            int    skillIdx = -1;

            if (int.TryParse(btnName.Replace(EGameConstL.STR_SkillBtn, string.Empty), out skillIdx))
            {
                SO_BattleSkill skill = battleUnit.battleUnitAttribute.battleSkills[skillIdx];
                if (skill != null)
                {
                    if (battleUnit.battleUnitAttribute.energy >= skill.energyCost && BattleFieldRenderer.Instance != null)
                    {
                        BattleFieldRenderer.Instance.BattleUnitUseSkill(battleUnit, skill);
                        UpdateComboNotes(battleUnit.battleUnitAttribute.ComboStatus);
                    }
                    else
                    {
                        UtilityHelper.LogWarning(string.Format("能量不足:{0}/{1}", battleUnit.battleUnitAttribute.energy, skill.energyCost));
                    }
                }
                else
                {
                    UtilityHelper.LogError("Skill item error ->" + btnName);
                }
            }
            else
            {
                UtilityHelper.LogError("Skill item name error ->" + btnName);
            }
        }
Пример #2
0
        //运行英雄动作
        public IEnumerator RunHeroAction(BattleUnitActionEvent heroAction)
        {
            if (heroAction == null)
            {
                yield break;
            }

            switch (heroAction.battleUnitActionType)
            {
            case BattleUnitActionType.EnterBattleField:
                yield return(PlayEnterBattleFieldAction(heroAction as BattleUnitEnterBattleFieldAction));

                break;

            case BattleUnitActionType.ChangeTarget:
                yield return(PlayChangeTargetAction(heroAction as BattleUnitChangeTargetAction));

                break;

            case BattleUnitActionType.MoveToTarget:
                yield return(PlayMotionAction(heroAction as BattleUnitMotionAction));

                break;

            case BattleUnitActionType.UseSkill:
                yield return(PlaySkillAction(heroAction as BattleUnitSkillAction));

                break;

            case BattleUnitActionType.AttributeUpdate:
                yield return(PlayAttributeUpdateAction(heroAction as BattleUnitAttributeUpdate));

                break;

            case BattleUnitActionType.ManualOperate:
                yield return(PlayManualAction(heroAction as BattleUnitManualAction));

                break;

            case BattleUnitActionType.PickupItem:
                yield return(PlayPickupItemAction(heroAction as BattleUnitPickupItemAction));

                break;

            case BattleUnitActionType.UseItem:
                yield return(PlayUseItemAction(heroAction as BattleUnitUseItemAction));

                break;

            case BattleUnitActionType.Warning:
                UtilityHelper.LogWarning(heroAction.ToString());
                yield return(EGameConstL.WaitForTouchScreen);

                break;

            default:
                break;
            }
            yield return(null);
        }
Пример #3
0
        /// <summary>
        /// 尝试使用道具
        /// </summary>
        /// <param name="itemID"></param>
        /// <param name="useCount"></param>
        /// <returns>使用数量</returns>
        public int TryUseItem(int itemID, int useCount, ref int finalCount)
        {
            if (items == null || items.Count == 0)
            {
                UtilityHelper.LogError(string.Format("Use item failed. Do not have this item -> {0}", itemID));
                return(0);
            }
            for (int i = items.Count - 1; i >= 0; --i)
            {
                if (items[i].item.itemID == itemID)
                {
                    //使用道具
                    if (items[i].count < useCount)
                    {
                        UtilityHelper.LogWarning(string.Format("Use item warning. {0}/{1}", useCount, items[i].count));
                        useCount = items[i].count;
                    }

                    //使用道具
                    items[i].count -= useCount;

                    //判断是否还有剩余
                    if (items[i].count <= 0)
                    {
                        items[i].Reset();
                    }

                    finalCount = items[i].count;

                    return(useCount);
                }
            }
            UtilityHelper.LogError(string.Format("Use item failed. Do not have this item -> {0}", itemID));
            return(0);
        }
Пример #4
0
        /// <summary>
        /// 尝试添加道具
        /// </summary>
        /// <param name="itemID"></param>
        /// <param name="addition"></param>
        /// <returns>是否成功</returns>
        public bool TryAddItem(int itemID, int addition, ref int finalCount)
        {
            if (items == null)
            {
                items = new List <PackageItem>();
            }

            BattleUnitPickupItemAction action = null;
            PackageItem emptyItem             = null;

            for (int i = 0; i < items.Count; i++)
            {
                if (items[i].item != null && items[i].item.itemID == itemID)
                {
                    items[i].count += addition;
                    finalCount      = items[i].count;
                    return(true);
                }
                else if (items[i].item == null)
                {
                    emptyItem = items[i];
                }
            }

            //找到了一个空位
            if (emptyItem != null)
            {
                emptyItem.item = PackageItemManager.Instance.GetItem(itemID);
                if (emptyItem.item != null)
                {
                    emptyItem.count += addition;
                    finalCount       = emptyItem.count;
                    return(true);
                }
            }

            //背包已满
            if (items.Count >= capacity)
            {
                UtilityHelper.LogWarning(string.Format("Add item failed. Package if full : {0} -> {1}/{2}", itemID, items.Count, capacity));
                return(false);
            }

            //添加一个道具
            emptyItem      = PackageItem.CreateInstance();
            emptyItem.item = PackageItemManager.Instance.GetItem(itemID);
            if (emptyItem.item != null)
            {
                items.Add(emptyItem);
            }

            emptyItem.count += addition;
            finalCount       = emptyItem.count;
            return(true);
        }
Пример #5
0
        //注册
        public RegEventResult AddEventHandler(string listener, GameEventHandler handler, int time)
        {
#if UNITY_EDITOR
            //编辑器模式需要做一个重复检查
            for (int i = 0; i < eventInfos.Count; i++)
            {
                if (eventInfos[i].handler == handler &&
                    string.Compare(eventInfos[i].listener, listener, true) == 0)
                {
                    eventInfos[i].time = time;
                    UtilityHelper.LogWarning(string.Format("Add event --> {0} <-- handler repeatedly !", eventKey));
                    return(RegEventResult.Failed);
                }
            }
#endif

            eventInfos.Add(new EventInfo(listener, handler, time));
            gameEvent += handler;
            return(RegEventResult.Success);
        }
Пример #6
0
        //开始战斗
        private void Fight()
        {
            battleState = BattleState.Fighting;

            BattleUnit actionUnit = null;

            do
            {
                //连接渲染器,则一步一更新
                //没有连接渲染器,则一直计算直到结束
                actionUnit = actionQueue.Peek();
                if (firstFight)
                {
                    firstFight = false;
                }
                else
                {
                    if (actionUnit.BPStage)
                    {
                        UtilityHelper.Log("We are in BP stage, continue to fight");
                        actionUnit.battleUnitAttribute.BPUsed();
                    }
                    else
                    {
                        UtilityHelper.Log("change queue order");
                        if (actionUnit.battleUnitAttribute.BPUsingStage())
                        {
                            actionUnit.battleUnitAttribute.OutOfBPAction();
                        }
                        actionQueue.Dequeue();
                        CalculateNextAction(actionUnit);
                        actionUnit = actionQueue.Peek();
                    }
                }

                //增加BP值
                if (actionUnit.battleUnitAttribute.manualOperation &&
                    actionUnit.battleUnitAttribute.BPUsingStage() == false)
                {
                    if (actionUnit.battleUnitAttribute.BP < EGameConstL.BPMax)
                    {
                        actionUnit.battleUnitAttribute.BP++;
                    }
                }

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

                if (actionUnit.CanAction)
                {
                    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;
                    }
                }

                if (battleFieldEvents.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();
            }
        }