Files
Net.Like.Xue.Tokyo/Packages-Local/Com.Project.B.Unity/Item/ScriptableWeapon.cs
2025-06-24 23:49:13 +08:00

80 lines
2.7 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using Project.B.Item;
using UnityEngine;
using Object = UnityEngine.Object;
namespace Net.Project.B.Item
{
/// <summary>
/// 玩家武器槽
/// </summary>
public enum PlayerWeaponSlot:int
{
/// <summary>
/// 主武器
/// </summary>
Primary=1,
/// <summary>
/// 主武器2
/// </summary>
Secondary=2,
/// <summary>
/// 副武器,例如手枪,近战武器等
/// </summary>
Sidearm=3,
/// <summary>
/// 消耗品,通常是护甲,医疗包等
/// </summary>
Supplies=4,
/// <summary>
/// 战术道具
/// </summary>
Tactics=5,
/// <summary>
/// 致命道具
/// </summary>
Lethal=6,
/// <summary>
/// 连杀奖励,特别的武器
/// </summary>
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;
}
}