Add more dakka (#307)
* Add more dakka Some slight codebase changes to facilitate more robust behaviour. * Update Content.Server/GameObjects/Components/Projectiles/ProjectileComponent.cs Co-Authored-By: Pieter-Jan Briers <pieterjan.briers@gmail.com> * Remix last stereo to mono hpistol + ltrifle
This commit is contained in:
committed by
Pieter-Jan Briers
parent
44fdf4022e
commit
9431011ba5
@@ -5,6 +5,10 @@ using Robust.Server.GameObjects;
|
||||
using Robust.Shared.GameObjects;
|
||||
using Robust.Shared.Interfaces.GameObjects;
|
||||
using Robust.Shared.Interfaces.GameObjects.Components;
|
||||
using Content.Server.GameObjects.Components.Mobs;
|
||||
using Content.Shared.GameObjects;
|
||||
using Robust.Shared.Log;
|
||||
using Robust.Shared.Serialization;
|
||||
using Robust.Shared.Interfaces.Physics;
|
||||
|
||||
namespace Content.Server.GameObjects.Components.Projectiles
|
||||
@@ -18,7 +22,23 @@ namespace Content.Server.GameObjects.Components.Projectiles
|
||||
|
||||
private EntityUid Shooter = EntityUid.Invalid;
|
||||
|
||||
public Dictionary<DamageType, int> damages = new Dictionary<DamageType, int>();
|
||||
private Dictionary<DamageType, int> _damages;
|
||||
[ViewVariables]
|
||||
public Dictionary<DamageType, int> Damages => _damages;
|
||||
private float _velocity;
|
||||
public float Velocity
|
||||
{
|
||||
get => _velocity;
|
||||
set => _velocity = value;
|
||||
}
|
||||
|
||||
public override void ExposeData(ObjectSerializer serializer)
|
||||
{
|
||||
base.ExposeData(serializer);
|
||||
// If not specified 0 damage
|
||||
serializer.DataField(ref _damages, "damages", new Dictionary<DamageType, int>());
|
||||
serializer.DataField(ref _velocity, "velocity", 20f);
|
||||
}
|
||||
|
||||
public float TimeLeft { get; set; } = 10;
|
||||
|
||||
@@ -53,7 +73,10 @@ namespace Content.Server.GameObjects.Components.Projectiles
|
||||
{
|
||||
if (entity.TryGetComponent(out DamageableComponent damage))
|
||||
{
|
||||
damage.TakeDamage(DamageType.Brute, 10);
|
||||
foreach (var damageType in _damages)
|
||||
{
|
||||
damage.TakeDamage(damageType.Key, damageType.Value);
|
||||
}
|
||||
}
|
||||
|
||||
if (entity.TryGetComponent(out CameraRecoilComponent recoilComponent)
|
||||
|
||||
@@ -136,6 +136,33 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Projectile
|
||||
public enum BallisticMagazineType
|
||||
{
|
||||
Unspecified = 0,
|
||||
A12mm,
|
||||
// .32
|
||||
A32,
|
||||
// .357
|
||||
A357,
|
||||
// .44
|
||||
A44,
|
||||
// .45mm
|
||||
A45mm,
|
||||
// .50 cal
|
||||
A50,
|
||||
// 5.56mm
|
||||
A556mm,
|
||||
// 6.5mm
|
||||
A65mm,
|
||||
// 7.62mm
|
||||
A762mm,
|
||||
Maxim,
|
||||
// 9mm
|
||||
A9mm,
|
||||
A9mmSMG,
|
||||
A9mmTopMounted,
|
||||
// 10mm
|
||||
A10mm,
|
||||
A10mmSMG,
|
||||
// 20mm
|
||||
A20mm,
|
||||
// 24mm
|
||||
A24mm,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Content.Server.GameObjects.Components.Sound;
|
||||
using Content.Server.GameObjects.EntitySystems;
|
||||
using Content.Shared.GameObjects;
|
||||
@@ -12,6 +14,7 @@ using Robust.Shared.GameObjects;
|
||||
using Robust.Shared.Interfaces.GameObjects;
|
||||
using Robust.Shared.Interfaces.Random;
|
||||
using Robust.Shared.IoC;
|
||||
using Robust.Shared.Log;
|
||||
using Robust.Shared.Maths;
|
||||
using Robust.Shared.Random;
|
||||
using Robust.Shared.Serialization;
|
||||
@@ -30,10 +33,10 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Projectile
|
||||
|
||||
[ViewVariables]
|
||||
private ContainerSlot _magazineSlot;
|
||||
private BallisticMagazineType _magazineType;
|
||||
private List<BallisticMagazineType> _magazineTypes;
|
||||
|
||||
[ViewVariables]
|
||||
public BallisticMagazineType MagazineType => _magazineType;
|
||||
public List<BallisticMagazineType> MagazineTypes => _magazineTypes;
|
||||
[ViewVariables]
|
||||
private IEntity Magazine => _magazineSlot.ContainedEntity;
|
||||
|
||||
@@ -65,7 +68,8 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Projectile
|
||||
{
|
||||
base.ExposeData(serializer);
|
||||
|
||||
serializer.DataField(ref _magazineType, "magazine", BallisticMagazineType.Unspecified);
|
||||
serializer.DataField(ref _magazineTypes, "magazines",
|
||||
new List<BallisticMagazineType>{BallisticMagazineType.Unspecified});
|
||||
serializer.DataField(ref _defaultMagazine, "default_magazine", null);
|
||||
serializer.DataField(ref _autoEjectMagazine, "auto_eject_magazine", false);
|
||||
serializer.DataField(ref _autoEjectSound, "sound_auto_eject", null);
|
||||
@@ -102,7 +106,7 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Projectile
|
||||
throw new ArgumentException("Not a magazine", nameof(magazine));
|
||||
}
|
||||
|
||||
if (component.MagazineType != MagazineType)
|
||||
if (!MagazineTypes.Contains(component.MagazineType))
|
||||
{
|
||||
throw new ArgumentException("Wrong magazine type", nameof(magazine));
|
||||
}
|
||||
@@ -170,7 +174,7 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Projectile
|
||||
var entity = RemoveFromChamber(chamber);
|
||||
entity.Transform.GridPosition = Owner.Transform.GridPosition;
|
||||
entity.Transform.LocalRotation = _bulletDropRandom.Pick(_randomBulletDirs).ToAngle();
|
||||
var effect = $"/Audio/items/weapons/casingfall{_bulletDropRandom.Next(1, 4)}.ogg";
|
||||
var effect = $"/Audio/Guns/Casings/casingfall{_bulletDropRandom.Next(1, 4)}.ogg";
|
||||
Owner.GetComponent<SoundComponent>().Play(effect, AudioParams.Default.WithVolume(-3));
|
||||
|
||||
if (Magazine != null)
|
||||
@@ -223,7 +227,7 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Projectile
|
||||
return false;
|
||||
}
|
||||
|
||||
if (component.MagazineType != MagazineType || component.Caliber != Caliber)
|
||||
if (!MagazineTypes.Contains(component.MagazineType) || component.Caliber != Caliber)
|
||||
{
|
||||
Owner.PopupMessage(eventArgs.User, "Magazine doesn't fit.");
|
||||
return false;
|
||||
|
||||
@@ -21,9 +21,9 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Projectile
|
||||
{
|
||||
public abstract class ProjectileWeaponComponent : Component
|
||||
{
|
||||
private float _velocity = 20f;
|
||||
private float _spreadStdDev = 3;
|
||||
private bool _spread = true;
|
||||
private string _soundGunshot;
|
||||
|
||||
#pragma warning disable 649
|
||||
[Dependency] private IRobustRandom _spreadRandom;
|
||||
@@ -57,6 +57,7 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Projectile
|
||||
|
||||
serializer.DataField(ref _spread, "spread", true);
|
||||
serializer.DataField(ref _spreadStdDev, "spreadstddev", 3);
|
||||
serializer.DataField(ref _soundGunshot, "sound_gunshot", "/Audio/Guns/Gunshots/smg.ogg");
|
||||
}
|
||||
|
||||
private void Fire(IEntity user, GridCoordinates clickLocation)
|
||||
@@ -85,15 +86,16 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Projectile
|
||||
|
||||
//Give it the velocity we fire from this weapon, and make sure it doesn't shoot our character
|
||||
projectile.GetComponent<ProjectileComponent>().IgnoreEntity(user);
|
||||
var velocity = projectile.GetComponent<ProjectileComponent>().Velocity;
|
||||
|
||||
//Give it the velocity this weapon gives to things it fires from itself
|
||||
projectile.GetComponent<PhysicsComponent>().LinearVelocity = angle.ToVec() * _velocity;
|
||||
projectile.GetComponent<PhysicsComponent>().LinearVelocity = angle.ToVec() * velocity;
|
||||
|
||||
//Rotate the bullets sprite to the correct direction, from north facing I guess
|
||||
projectile.Transform.LocalRotation = angle.Theta;
|
||||
|
||||
// Sound!
|
||||
Owner.GetComponent<SoundComponent>().Play("/Audio/gunshot_c20.ogg");
|
||||
Owner.GetComponent<SoundComponent>().Play(_soundGunshot);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -105,6 +107,29 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Projectile
|
||||
public enum BallisticCaliber
|
||||
{
|
||||
Unspecified = 0,
|
||||
A12mm,
|
||||
// .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,
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user