mirror of
https://github.com/milimoe/FunGame-Testing.git
synced 2025-12-05 08:09:04 +00:00
ISkill 添加实际可选取的目标数量;顺序表修复排序和硬直时间重复的问题
This commit is contained in:
parent
dfad02fd7c
commit
0d1f1b5321
@ -91,12 +91,13 @@ namespace Milimoe.FunGame.Testing.Desktop.GameMapTesting
|
|||||||
|
|
||||||
public async Task<List<Character>> RequestTargetSelection(Character character, ISkill skill, List<Character> enemys, List<Character> teammates)
|
public async Task<List<Character>> RequestTargetSelection(Character character, ISkill skill, List<Character> enemys, List<Character> teammates)
|
||||||
{
|
{
|
||||||
await WriteLine($"请为 {character.NickName} 选择目标 (最多 {skill.CanSelectTargetCount} 个)。");
|
List<Character> selectable = skill.GetSelectableTargets(character, enemys, teammates);
|
||||||
|
await WriteLine($"请为 {character.NickName} 选择目标 (最多 {skill.RealCanSelectTargetCount(enemys, teammates)} 个)。");
|
||||||
List<Character> targetIds = await _targetSelectionRequester.RequestInput(
|
List<Character> targetIds = await _targetSelectionRequester.RequestInput(
|
||||||
async (callback) => await UI.InvokeAsync(() => UI.ShowTargetSelectionUI(character, skill, enemys, teammates, callback))
|
async (callback) => await UI.InvokeAsync(() => UI.ShowTargetSelectionUI(character, skill, selectable, enemys, teammates, callback))
|
||||||
) ?? [];
|
) ?? [];
|
||||||
if (targetIds == null) return [];
|
if (targetIds == null) return [];
|
||||||
return [.. enemys.Union(teammates).Union([character]).Where(targetIds.Contains)];
|
return [.. selectable.Where(targetIds.Contains)];
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<Skill?> RequestSkillSelection(Character character, List<Skill> availableSkills)
|
public async Task<Skill?> RequestSkillSelection(Character character, List<Skill> availableSkills)
|
||||||
@ -130,7 +131,7 @@ namespace Milimoe.FunGame.Testing.Desktop.GameMapTesting
|
|||||||
await WriteLine(message);
|
await WriteLine(message);
|
||||||
// 调用 _continuePromptRequester 的 RequestInput 方法,它会等待回调被触发
|
// 调用 _continuePromptRequester 的 RequestInput 方法,它会等待回调被触发
|
||||||
await _continuePromptRequester.RequestInput(
|
await _continuePromptRequester.RequestInput(
|
||||||
async (callback) => await UI.InvokeAsync(() => UI.StartCountdownForContinue(countdownSeconds, callback))
|
async (callback) => await UI.InvokeAsync(async () => await UI.StartCountdownForContinue(countdownSeconds, callback))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,20 +1,17 @@
|
|||||||
using System.Collections.ObjectModel;
|
using System.Collections.ObjectModel;
|
||||||
using System.Collections.Specialized;
|
using System.Collections.Specialized;
|
||||||
using System.ComponentModel;
|
using System.Threading.Tasks;
|
||||||
using System.Windows;
|
using System.Windows;
|
||||||
using System.Windows.Controls;
|
using System.Windows.Controls;
|
||||||
using System.Windows.Data;
|
|
||||||
using System.Windows.Documents;
|
using System.Windows.Documents;
|
||||||
using System.Windows.Input;
|
using System.Windows.Input;
|
||||||
using System.Windows.Media;
|
using System.Windows.Media;
|
||||||
using System.Windows.Threading;
|
|
||||||
using Milimoe.FunGame.Core.Api.Utility;
|
using Milimoe.FunGame.Core.Api.Utility;
|
||||||
using Milimoe.FunGame.Core.Entity;
|
using Milimoe.FunGame.Core.Entity;
|
||||||
using Milimoe.FunGame.Core.Interface.Entity;
|
using Milimoe.FunGame.Core.Interface.Entity;
|
||||||
using Milimoe.FunGame.Core.Library.Common.Addon;
|
using Milimoe.FunGame.Core.Library.Common.Addon;
|
||||||
using Milimoe.FunGame.Core.Library.Constant;
|
using Milimoe.FunGame.Core.Library.Constant;
|
||||||
using Milimoe.FunGame.Core.Model;
|
using Milimoe.FunGame.Core.Model;
|
||||||
using Oshima.FunGame.OshimaServers.Service;
|
|
||||||
using static Milimoe.FunGame.Core.Library.Constant.General;
|
using static Milimoe.FunGame.Core.Library.Constant.General;
|
||||||
using Brush = System.Windows.Media.Brush;
|
using Brush = System.Windows.Media.Brush;
|
||||||
using Brushes = System.Windows.Media.Brushes;
|
using Brushes = System.Windows.Media.Brushes;
|
||||||
@ -50,7 +47,6 @@ namespace Milimoe.FunGame.Testing.Desktop.GameMapTesting
|
|||||||
public ObservableCollection<Character> SelectedTargets { get; set; } = [];
|
public ObservableCollection<Character> SelectedTargets { get; set; } = [];
|
||||||
|
|
||||||
// 新增:倒计时相关的字段
|
// 新增:倒计时相关的字段
|
||||||
private readonly DispatcherTimer _countdownTimer;
|
|
||||||
private int _remainingCountdownSeconds;
|
private int _remainingCountdownSeconds;
|
||||||
private Action<bool>? _currentContinueCallback;
|
private Action<bool>? _currentContinueCallback;
|
||||||
|
|
||||||
@ -85,12 +81,6 @@ namespace Milimoe.FunGame.Testing.Desktop.GameMapTesting
|
|||||||
_selectionPredictCharacter.Character.Promotion = 1800;
|
_selectionPredictCharacter.Character.Promotion = 1800;
|
||||||
this.DataContext = this; // 将UserControl自身设置为DataContext,以便ItemsControl可以绑定到CharacterQueueItems和SelectedTargets属性
|
this.DataContext = this; // 将UserControl自身设置为DataContext,以便ItemsControl可以绑定到CharacterQueueItems和SelectedTargets属性
|
||||||
|
|
||||||
_countdownTimer = new()
|
|
||||||
{
|
|
||||||
Interval = TimeSpan.FromSeconds(1) // 每秒触发一次
|
|
||||||
};
|
|
||||||
_countdownTimer.Tick += CountdownTimer_Tick; // 绑定事件处理器
|
|
||||||
|
|
||||||
// 初始化 SelectedTargetsItemsControl 的 ItemsSource
|
// 初始化 SelectedTargetsItemsControl 的 ItemsSource
|
||||||
SelectedTargetsItemsControl.ItemsSource = SelectedTargets;
|
SelectedTargetsItemsControl.ItemsSource = SelectedTargets;
|
||||||
|
|
||||||
@ -1557,14 +1547,15 @@ namespace Milimoe.FunGame.Testing.Desktop.GameMapTesting
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="character">发起行动的角色。</param>
|
/// <param name="character">发起行动的角色。</param>
|
||||||
/// <param name="skill">请求选择目标的技能/普攻。</param>
|
/// <param name="skill">请求选择目标的技能/普攻。</param>
|
||||||
|
/// <param name="selectable">所有可选择的目标列表。</param>
|
||||||
/// <param name="enemys">所有可选敌方目标列表。</param>
|
/// <param name="enemys">所有可选敌方目标列表。</param>
|
||||||
/// <param name="teammates">所有可选友方目标列表。</param>
|
/// <param name="teammates">所有可选友方目标列表。</param>
|
||||||
/// <param name="callback">选择完成后调用的回调函数。</param>
|
/// <param name="callback">选择完成后调用的回调函数。</param>
|
||||||
public void ShowTargetSelectionUI(Character character, ISkill skill, List<Character> enemys, List<Character> teammates, Action<List<Character>> callback)
|
public void ShowTargetSelectionUI(Character character, ISkill skill, List<Character> selectable, List<Character> enemys, List<Character> teammates, Action<List<Character>> callback)
|
||||||
{
|
{
|
||||||
_resolveTargetSelection = callback;
|
_resolveTargetSelection = callback;
|
||||||
_actingCharacterForTargetSelection = character;
|
_actingCharacterForTargetSelection = character;
|
||||||
_potentialTargetsForSelection = skill.GetSelectableTargets(character, enemys, teammates);
|
_potentialTargetsForSelection = selectable;
|
||||||
_maxTargetsForSelection = skill.CanSelectTargetCount;
|
_maxTargetsForSelection = skill.CanSelectTargetCount;
|
||||||
_canSelectAllTeammates = skill.SelectAllTeammates;
|
_canSelectAllTeammates = skill.SelectAllTeammates;
|
||||||
_canSelectAllEnemies = skill.SelectAllEnemies;
|
_canSelectAllEnemies = skill.SelectAllEnemies;
|
||||||
@ -1574,7 +1565,7 @@ namespace Milimoe.FunGame.Testing.Desktop.GameMapTesting
|
|||||||
_isSelectingTargets = true; // 进入目标选择模式
|
_isSelectingTargets = true; // 进入目标选择模式
|
||||||
|
|
||||||
SelectedTargets.Clear(); // 清空之前的选择
|
SelectedTargets.Clear(); // 清空之前的选择
|
||||||
TargetSelectionTitle.Text = $"选择 {character.NickName} 的目标 (最多 {skill.CanSelectTargetCount} 个)";
|
TargetSelectionTitle.Text = $"选择 {character.NickName} 的目标 (最多 {skill.RealCanSelectTargetCount(enemys, teammates)} 个)";
|
||||||
TargetSelectionOverlay.Visibility = Visibility.Visible;
|
TargetSelectionOverlay.Visibility = Visibility.Visible;
|
||||||
if (_canSelectAllTeammates)
|
if (_canSelectAllTeammates)
|
||||||
{
|
{
|
||||||
@ -1766,25 +1757,21 @@ namespace Milimoe.FunGame.Testing.Desktop.GameMapTesting
|
|||||||
_resolveContinuePrompt = null;
|
_resolveContinuePrompt = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void CountdownTimer_Tick(object? sender, EventArgs e)
|
private async Task StartCountdownTimer()
|
||||||
{
|
{
|
||||||
_remainingCountdownSeconds--;
|
while (_remainingCountdownSeconds > 0)
|
||||||
|
|
||||||
if (_remainingCountdownSeconds > 0)
|
|
||||||
{
|
{
|
||||||
// 更新倒计时文本
|
// 更新倒计时文本
|
||||||
CountdownTextBlock.Text = $"{_remainingCountdownSeconds} 秒后继续...";
|
CountdownTextBlock.Text = $"{_remainingCountdownSeconds} 秒后继续...";
|
||||||
|
await Task.Delay(1000);
|
||||||
|
_remainingCountdownSeconds--;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
// 倒计时结束
|
// 倒计时结束
|
||||||
_countdownTimer.Stop(); // 停止计时器
|
CountdownTextBlock.Visibility = Visibility.Collapsed;
|
||||||
CountdownTextBlock.Visibility = Visibility.Collapsed; // 隐藏倒计时文本
|
|
||||||
|
|
||||||
// 触发继续回调
|
// 触发继续回调
|
||||||
_currentContinueCallback?.Invoke(true);
|
_currentContinueCallback?.Invoke(true);
|
||||||
_currentContinueCallback = null; // 清除回调,防止重复触发
|
_currentContinueCallback = null;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -1792,7 +1779,7 @@ namespace Milimoe.FunGame.Testing.Desktop.GameMapTesting
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="seconds">倒计时秒数。</param>
|
/// <param name="seconds">倒计时秒数。</param>
|
||||||
/// <param name="callback">倒计时结束后调用的回调函数。</param>
|
/// <param name="callback">倒计时结束后调用的回调函数。</param>
|
||||||
public void StartCountdownForContinue(int seconds, Action<bool> callback)
|
public async Task StartCountdownForContinue(int seconds, Action<bool> callback)
|
||||||
{
|
{
|
||||||
_remainingCountdownSeconds = seconds;
|
_remainingCountdownSeconds = seconds;
|
||||||
_currentContinueCallback = callback;
|
_currentContinueCallback = callback;
|
||||||
@ -1802,7 +1789,7 @@ namespace Milimoe.FunGame.Testing.Desktop.GameMapTesting
|
|||||||
CountdownTextBlock.Visibility = Visibility.Visible;
|
CountdownTextBlock.Visibility = Visibility.Visible;
|
||||||
|
|
||||||
// 启动计时器
|
// 启动计时器
|
||||||
_countdownTimer.Start();
|
await InvokeAsync(StartCountdownTimer);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user