Files
tbd-station-14/Content.Server/GameObjects/Components/Weapon/Ranged/Projectile/BallisticBulletComponent.cs
py01 196950fb7e Gun Code Modularization + Magazine Fed Shotgun (#751)
* Adds shotgun YAML files

* Adds shotgu ammo and magazine enum value, modularizes some projectile weapon methods

* Fixes guns consuming two bullets on fire

* Finishes shotgun behavior in Projectile Weapon Components

* Gun and ammo modularization

* Updates BallisticMagazineWeapons to be compatible with new AmmoWeapon

* Fixes shotgun spread angles, Fixes shogun YAML

* Gun documentation and ViewVariable specifications

* Removes todo messsage in gun code

* Default gun evenspread fix

* AmmoComponent Name fix

* Fixes Component name

* Projectile refactor code review fixes
2020-02-29 18:09:41 +01:00

107 lines
3.6 KiB
C#

using Robust.Shared.GameObjects;
using Robust.Shared.Serialization;
using Robust.Shared.ViewVariables;
namespace Content.Server.GameObjects.Components.Weapon.Ranged.Projectile
{
/// <summary>
/// Passes information about the projectiles to be fired by AmmoWeapons
/// </summary>
[RegisterComponent]
public class BallisticBulletComponent : Component
{
public override string Name => "BallisticBullet";
private BallisticCaliber _caliber;
/// <summary>
/// Cartridge calibre, restricts what AmmoWeapons this ammo can be fired from.
/// </summary>
[ViewVariables(VVAccess.ReadWrite)]
public BallisticCaliber Caliber { get => _caliber; set => _caliber = value; }
private string _projectileID;
/// <summary>
/// YAML ID of the projectiles to be created when firing this ammo.
/// </summary>
[ViewVariables(VVAccess.ReadWrite)]
public string ProjectileID { get => _projectileID; set => _projectileID = value; }
private int _projectilesFired;
/// <summary>
/// How many copies of the projectile are shot.
/// </summary>
[ViewVariables(VVAccess.ReadWrite)]
public int ProjectilesFired { get => _projectilesFired; set => _projectilesFired = value; }
private float _spreadStdDev_Ammo;
/// <summary>
/// Weapons that fire projectiles from ammo types.
/// </summary>
[ViewVariables(VVAccess.ReadWrite)]
public float SpreadStdDev_Ammo { get => _spreadStdDev_Ammo; set => _spreadStdDev_Ammo = value; }
private float _evenSpreadAngle_Ammo;
/// <summary>
/// Arc angle of shotgun pellet spreads, only used if multiple projectiles are being fired.
/// </summary>
[ViewVariables(VVAccess.ReadWrite)]
public float EvenSpreadAngle_Ammo { get => _evenSpreadAngle_Ammo; set => _evenSpreadAngle_Ammo = value; }
private float _velocity_Ammo;
/// <summary>
/// Adds additional velocity to the projectile, on top of what it already has.
/// </summary>
[ViewVariables(VVAccess.ReadWrite)]
public float Velocity_Ammo { get => _velocity_Ammo; set => _velocity_Ammo = value; }
private bool _spent;
/// <summary>
/// If the ammo cartridge has been shot already.
/// </summary>
[ViewVariables(VVAccess.ReadWrite)]
public bool Spent { get => _spent; set => _spent = value; }
public override void ExposeData(ObjectSerializer serializer)
{
base.ExposeData(serializer);
serializer.DataField(ref _caliber, "caliber", BallisticCaliber.Unspecified);
serializer.DataField(ref _projectileID, "projectile", null);
serializer.DataField(ref _spent, "spent", false);
serializer.DataField(ref _projectilesFired, "projectilesfired", 1);
serializer.DataField(ref _spreadStdDev_Ammo, "ammostddev", 0);
serializer.DataField(ref _evenSpreadAngle_Ammo, "ammospread", 0);
serializer.DataField(ref _velocity_Ammo, "ammovelocity", 0);
}
}
public enum BallisticCaliber
{
Unspecified = 0,
// .32
A32,
// .357
A357,
// .44
A44,
// .45mm
A45mm,
// .50 cal
A50,
// 5.56mm
A556mm,
// 6.5mm
A65mm,
// 7.62mm
A762mm,
// 9mm
A9mm,
// 10mm
A10mm,
// 20mm
A20mm,
// 24mm
A24mm,
// 12g
A12g,
}
}