using UnityEngine;
namespace MalbersAnimations.Weapons
{
public interface IMWeapon : IMDamager
{
/// Gets the Weapon ID Value
WeaponID WeaponType { get; }
/// Unique Weapon ID, Random numbers diferenciate 2 weapons of the same Type
int WeaponID { get; }
/// This will give information to use if on the animation for Store and Draw weapon.
int HolsterID { get; }
/// Description to use on the UI for every weapon
string Description { get; }
/// Offset Position to place the Weapon on the Characters hand
Vector3 PositionOffset { get; }
/// Offset Rotation to place the Weapon on the Characters hand
Vector3 RotationOffset { get; }
/// Is the Weapon Right-Handed or Left-Handed
bool IsRightHanded { get; }
/// The Weapon will continue attacking if the Input is Down
bool Automatic { get; set; }
/// Minimum Damage the Weapon can casueto a Stat
float MinDamage { get; }
/// Maximum Damage the Weapon can casue to a Stat
float MaxDamage { get; }
/// Minimum Force the Weapon can casue to an object
float MinForce { get; }
/// Maximum Force the Weapon can casue to an object
float MaxForce { get; }
/// Is the Weapon Equiped
bool IsEquiped { get; set; }
/// Enables the Main Attack
bool MainInput { get; set; }
/// Enables the Secondary Attack or Aiming
bool SecondInput { get; set; }
/// Reset all the Weapons Properties
void ResetWeapon();
/// Which Side the Weapon can Aim
AimSide AimSide { set; get; }
/// Transform to Set the Aim Origin
Transform AimOrigin { get; }
/// Owner of the Weapon
IMWeaponOwner WeaponOwner { get; set; }
/// Play the sounds clips
/// ID is the index on the list of clips
void PlaySound(int ID);
System.Action WeaponAction { get; set; }
/// Make all the Calcultations to Restore ammo in the Chamber
/// True = if it can reload
bool Reload();
}
public interface IShootableWeapon : IMWeapon
{
/// Projectile to Shoot
GameObject Projectile { get; set; }
/// Is the weapon Reloading
bool IsReloading { get; set; }
/// Total Ammo of the gun
int TotalAmmo { get; set; }
/// Ammo in Chamber
int AmmoInChamber { get; set; }
/// Size of the Chamber
int ChamberSize { get; set; }
}
/// Character who is currenlty using the weapon
public interface IMWeaponOwner
{
/// Character Animator
Animator Anim { get; }
/// is the Character aiming
bool Aim { get; }
/// Aim Horizontal angle regarding the camera
float HorizontalAngle { get; }
/// Get the Aimer Component of the Character
IAim Aimer { get; }
/// Direction the weapon is Aiming
Vector3 AimDirection { get; }
/// Set the Active Weapon Action
int WeaponAction { get; }
/// Returns where is the Camera regarding the player, False: Right; True: Left
bool AimingSide { get; }
/// IK Weight for IK Modifications
float WeaponIKW { get; set; }
GameObject Owner { get; }
/// Equiped/Active Weapon on the Character
MWeapon Weapon { get; }
Transform RightShoulder {get;}
Transform LeftShoulder {get;}
Transform Chest {get;}
Transform RightHand {get;}
Transform LeftHand {get;}
Transform Head { get;}
/// External Transform to be use so the Rider does not hurt the Mount
Transform IgnoreTransform { get; set; }
}
}