88 lines
2.3 KiB
C#
88 lines
2.3 KiB
C#
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
using BITKit;
|
|
namespace BITFALL.Guns
|
|
{
|
|
/// <summary>
|
|
/// 射击模式的接口
|
|
/// </summary>
|
|
public interface IFireMode
|
|
{
|
|
float FireRate { get; }
|
|
}
|
|
/// <summary>
|
|
/// 后坐力接口定义
|
|
/// </summary>
|
|
public interface IRecoil:IProperty
|
|
{
|
|
/// <summary>
|
|
/// 后坐力的方向
|
|
/// </summary>
|
|
Vector3 Recoil { get; }
|
|
}
|
|
[Serializable]
|
|
[CustomType(typeof(IRecoil))]
|
|
public struct VectorRecoil:IRecoil
|
|
{
|
|
[SerializeField] private Vector3 recoil;
|
|
public Vector3 Recoil => recoil;
|
|
}
|
|
/// <summary>
|
|
/// 射击模式的基类
|
|
/// </summary>
|
|
public record FireMode : IFireMode {
|
|
[SerializeField]protected float fireRate;
|
|
public float FireRate => fireRate;
|
|
}
|
|
/// <summary>
|
|
/// 自动开火模式
|
|
/// </summary>
|
|
[System.Serializable]
|
|
public record AutoFireMode : FireMode
|
|
{
|
|
}
|
|
/// <summary>
|
|
/// 半自动开火模式
|
|
/// </summary>
|
|
[System.Serializable]
|
|
public record SemiFireMode : FireMode
|
|
{
|
|
}
|
|
/// <summary>
|
|
/// 爆炸射击模式 BurstRound为爆炸开火时一次发射的子弹数量
|
|
///
|
|
/// </summary>
|
|
[System.Serializable]
|
|
public record BurstFireMode : FireMode
|
|
{
|
|
[SerializeField] protected int brustRound;
|
|
[SerializeField] protected float burstFireInterval;
|
|
public int BurstRound=> brustRound;
|
|
public float BurstFireInterval => burstFireInterval;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 资产化武器配置
|
|
/// </summary>
|
|
|
|
[System.Serializable]
|
|
public record ArrowFireMode : FireMode
|
|
{
|
|
|
|
}
|
|
public class AssetableGun : AssetableEquip
|
|
{
|
|
[Header(nameof(AssetableGun))]
|
|
[SerializeReference, SubclassSelector] protected IFireMode fireMode;
|
|
[SerializeField] private int initialDamage;
|
|
[SerializeField] private int initialBulletForce;
|
|
[SerializeField] private int initialBulletSpeed = 128;
|
|
public IFireMode FireMode => fireMode;
|
|
public int InitialBulletForce => initialBulletForce;
|
|
public int InitialDamage => initialDamage;
|
|
public int InitialBulletSpeed => initialBulletSpeed;
|
|
}
|
|
} |