//
// ICombatOperation.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 NosSmooth.Extensions.Combat.Techniques;
using Remora.Results;
namespace NosSmooth.Extensions.Combat.Operations;
///
/// A combat operation used in that can be used as one step.
///
public interface ICombatOperation
{
///
/// Checks whether the operation can currently be used.
///
///
/// Ie. if the operation is to use a skill, it will return true only if the skill is not on a cooldown,
/// the character has enough mana and is not stunned.
///
/// The combat state.
/// Whether the operation can be used right away.
public Result CanBeUsed(ICombatState combatState);
///
/// Use the operation, if possible.
///
///
/// Should block until the operation is finished.
///
/// The combat state.
/// The cancellation token for cancelling the operation.
/// A result that may or may not succeed.
public Task UseAsync(ICombatState combatState, CancellationToken ct = default);
}