using System; using System.Collections; using System.Collections.Generic; using Project.B.Item; using UnityEngine; using Object = UnityEngine.Object; namespace Net.Project.B.Item { /// /// 玩家武器槽 /// public enum PlayerWeaponSlot:int { /// /// 主武器 /// Primary=1, /// /// 主武器2 /// Secondary=2, /// /// 副武器,例如手枪,近战武器等 /// Sidearm=3, /// /// 消耗品,通常是护甲,医疗包等 /// Supplies=4, /// /// 战术道具 /// Tactics=5, /// /// 致命道具 /// Lethal=6, /// /// 连杀奖励,特别的武器 /// KillStreak=7, } [Serializable] public sealed class PlayerAnimationClips { [SerializeField] private AnimationClip armClip; [SerializeField] private AnimationClip weaponClip; [SerializeField] private AnimationClip characterClip; public AnimationClip ArmClip => armClip; public AnimationClip WeaponClip => weaponClip; public AnimationClip CharacterClip => characterClip ? characterClip : armClip; public static implicit operator bool (PlayerAnimationClips value) => value is not null && value.ArmClip && value.WeaponClip; } public class ScriptableWeapon : ScriptableItem { [Header(nameof(ScriptableWeapon))] [SerializeField] private GameObject fpsModel; public GameObject FpsModel => fpsModel; [SerializeField] private Vector3 offset; [SerializeField] private PlayerWeaponSlot weaponSlot; [Header(nameof(AnimationClip))] [SerializeField] protected ScriptableGun clipBase; [SerializeField] private PlayerAnimationClips idleClip; [SerializeField] private PlayerAnimationClips drawClip; [SerializeField] private PlayerAnimationClips holsterClip; [SerializeField] private PlayerAnimationClips meleeClip; public PlayerAnimationClips IdleClip => idleClip?idleClip:clipBase.IdleClip; public PlayerAnimationClips DrawClip => drawClip?drawClip:clipBase.DrawClip; public PlayerAnimationClips HolsterClip => holsterClip?holsterClip:clipBase.HolsterClip; public PlayerAnimationClips MeleeClip => meleeClip?meleeClip:clipBase.MeleeClip; public int WeaponSlot => (int)weaponSlot; public Vector3 Offset => offset; } }