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]); }
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); }
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); }