// // WalkPacketResponder.cs // // Copyright (c) František Boháček. All rights reserved. // Licensed under the MIT license. See LICENSE file in the project root for full license information. using System.Security; using NosCore.Packets.ClientPackets.Battle; using NosCore.Packets.ClientPackets.Movement; using NosCore.Packets.ServerPackets.MiniMap; using NosSmooth.Core.Commands; using NosSmooth.Core.Packets; using Remora.Results; namespace NosSmooth.LocalClient.CommandHandlers.Walk; /// /// Responds to to manage . /// public class WalkPacketResponder : IPacketResponder, IPacketResponder { private readonly WalkStatus _walkStatus; /// /// Initializes a new instance of the class. /// /// The walk status. public WalkPacketResponder(WalkStatus walkStatus) { _walkStatus = walkStatus; } /// public async Task Respond(PacketEventArgs packet, CancellationToken ct = default) { if (_walkStatus.IsWalking) { _walkStatus.UpdateWalkTime(packet.Packet.XCoordinate, packet.Packet.YCoordinate); if (packet.Packet.XCoordinate == _walkStatus.TargetX && packet.Packet.YCoordinate == _walkStatus.TargetY) { await _walkStatus.FinishWalkingAsync(ct); } } return Result.FromSuccess(); } /// public async Task Respond(PacketEventArgs packet, CancellationToken ct = default) { if (_walkStatus.IsWalking) { await _walkStatus.CancelWalkingAsync(WalkCancelReason.MapChanged, ct); } return Result.FromSuccess(); } // TODO: handle teleport on map }