/// ---------------------------------------------
/// Ultimate Character Controller
/// Copyright (c) Opsive. All Rights Reserved.
/// https://www.opsive.com
/// ---------------------------------------------
namespace Opsive.UltimateCharacterController.Items.Actions
{
using Opsive.Shared.Inventory;
using Opsive.UltimateCharacterController.Character.Abilities.Items;
using Opsive.UltimateCharacterController.Items.AnimatorAudioStates;
using Opsive.UltimateCharacterController.Utility;
///
/// Interface for an item that can be reloaded.
///
public interface IReloadableItem
{
///
/// Returns the item that the ReloadableItem is attached to.
///
/// The item that the ReloadableItem is attached to.
Item Item { get; }
///
/// Returns the set for the Reload AnimatorAudioStateSet.
///
/// The set for the Reload AnimatorAudioStateSet.
AnimatorAudioStateSet ReloadAnimatorAudioStateSet { get; }
///
/// Specifies if the item should wait for the OnAnimatorItemReload animation event or wait for the specified duration before reloading.
///
/// Value of if the item should use the OnAnimatorItemReload animation event or wait the specified duration.
AnimationEventTrigger ReloadEvent { get; }
///
/// Specifies if the item should wait for the OnAnimatorItemReloadComplete animation event or wait for the specified duration before reloading.
///
/// Value of if the item should use the OnAnimatorItemReloadComplete animation event or wait the specified duration.
AnimationEventTrigger ReloadCompleteEvent { get; }
///
/// Specifies when the item should automatically be reloaded.
///
/// Value indicating when the item should automatically be reloaded.
Reload.AutoReloadType AutoReload { get; }
///
/// Can the camera zoom while the item is reloading?
///
/// True if the camera can zoom while the item is reloading.
bool CanCameraZoom { get; }
///
/// Returns the ItemIdentifier which can be reloaded by the item.
///
/// The ItemIdentifier which can be reloaded by the item.
IItemIdentifier GetReloadableItemIdentifier();
///
/// Starts to reload the item.
///
void StartItemReload();
///
/// Can the item be reloaded?
///
/// Should the reload ensure the item is equipped?
/// True if the item can be reloaded.
bool CanReloadItem(bool checkEquipStatus);
///
/// Reloads the item.
///
/// Should the full clip be force reloaded?
void ReloadItem(bool fullClip);
///
/// Returns the substate index that the item should be in.
///
/// the substate index that the item should be in.
int GetItemSubstateIndex();
///
/// The item has finished reloading.
///
/// Was the item reloaded successfully?
/// Should the item be reloaded immediately?
void ItemReloadComplete(bool success, bool immediateReload);
}
}