Esempio n. 1
0
        protected virtual void EquipWeapon(CharacterLogic target)
        {
            var weapons = logic.Info.Items.GetAllWeapons();

            if (weapons.Count <= 1)
            {
                return;
            }
            List <WeaponItem> avWeapons = new List <WeaponItem>();

            foreach (var v in weapons)
            {
                //找到每个武器可以攻击到的范围内的敌方单位

                var rangeType = v.GetDefinition().RangeType;
                EnumSelectEffectRangeType selRangeType = rangeType.SelectType;
                Vector2Int selRange = rangeType.SelectRange;
                EnumSelectEffectRangeType effRangeType = rangeType.EffectType;
                Vector2Int effRange = rangeType.EffectRange;
                logic.BattleInfo.SetSelectTargetParam(CharacterBattleInfo.EBattleActionType.Attack, logic.GetTileCoord(), selRangeType, selRange, effRangeType, effRange);
                if (logic.BattleInfo.TargetChooseRanges.Contains(target.GetTileCoord()))
                {
                    avWeapons.Add(v);
                }
            }
            List <int> damage = new List <int>();

            //根据对方的属性选择伤害最高的武器
            foreach (var v in weapons)
            {
                logic.Info.Items.EquipWeapon(v);
                int dmg = BattleLogic.GetAttackCount(logic, target) * BattleLogic.GetAttackDamage(logic, target);
                damage.Add(dmg);
            }
            int maxDamageIndex = LinqS.IndexOfMax(damage.GetEnumerator());

            logic.Info.Items.EquipWeapon(avWeapons[maxDamageIndex]);
        }
Esempio n. 2
0
    private void BattleAction_SelectWeapon(WeaponItem item)
    {
        battleManager.ChangeState(BattleManager.EBattleState.SelectTarget);
        if (item == null)
        {
            Debug.LogError("选择的武器是null");
        }
        else
        {
            Debug.Log(item.ToString());
        }
        BattleActionMenu.Hide();
        BattleSelectWeaponMenu.Hide();
        CharacterLogic logic = battleManager.CurrentCharacterLogic;

        logic.Info.Items.EquipWeapon(item);
        //从选择的武器确定
        var rangeType = item.GetDefinition().RangeType;
        EnumSelectEffectRangeType selRangeType = rangeType.SelectType;
        Vector2Int selRange = rangeType.SelectRange;
        EnumSelectEffectRangeType effRangeType = rangeType.EffectType;
        Vector2Int effRange = rangeType.EffectRange;

        logic.BattleInfo.SetSelectTargetParam(CharacterBattleInfo.EBattleActionType.Attack, logic.GetTileCoord(), selRangeType, selRange, effRangeType, effRange);
        battleManager.ShowSelectTargetRangeAction(logic);
        MenuUndoAction.Push(UndoSelectWeapon);
    }
Esempio n. 3
0
 public void ShowMoveRange(CharacterLogic logic)
 {
     PositionMath.InitActionScope(logic.Info.Camp, logic.GetMoveClass(), logic.GetMovement(), logic.GetTileCoord(), logic.GetSelectRangeType(), logic.GetSelectRange());
     pathShower.ShowTiles(PathShower.EPathShowerType.Move, PositionMath.MoveableAreaPoints);
     pathShower.ShowTiles(PathShower.EPathShowerType.Damage, PositionMath.AttackAreaPoints, true, false);
 }