Модули для оружия (#222)
This commit is contained in:
@@ -231,7 +231,7 @@ public sealed partial class GunComponent : Component
|
||||
// WD START
|
||||
|
||||
public EntityUid? Target;
|
||||
|
||||
|
||||
[DataField("forceThrowingAngle")]
|
||||
[ViewVariables(VVAccess.ReadWrite)]
|
||||
public bool ForceThrowingAngle;
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
using Content.Shared._White.WeaponModules;
|
||||
using Content.Shared.Actions;
|
||||
using Content.Shared.Examine;
|
||||
using Content.Shared.Hands;
|
||||
@@ -21,6 +22,20 @@ public abstract partial class SharedGunSystem
|
||||
args.PushMarkup(Loc.GetString("gun-fire-rate-examine", ("color", FireRateExamineColor),
|
||||
("fireRate", $"{component.FireRateModified:0.0}")));
|
||||
|
||||
if (TryComp<WeaponModulesComponent>(uid, out var weaponModulesComponent))
|
||||
{
|
||||
if (weaponModulesComponent.Modules.Count == 0)
|
||||
{
|
||||
args.PushMarkup(Loc.GetString("gun-modules", ("modules", "Пусто")));
|
||||
return;
|
||||
}
|
||||
|
||||
foreach (var module in weaponModulesComponent.Modules)
|
||||
{
|
||||
args.PushMarkup(Loc.GetString("gun-modules", ("modules", Name(module))));
|
||||
}
|
||||
}
|
||||
|
||||
if (!TryComp<TwoModeEnergyAmmoProviderComponent>(uid, out var comp))
|
||||
return;
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Numerics;
|
||||
using Content.Shared._White.WeaponModules;
|
||||
using Content.Shared.ActionBlocker;
|
||||
using Content.Shared.Actions;
|
||||
using Content.Shared.Administration.Logs;
|
||||
@@ -476,6 +477,9 @@ public abstract partial class SharedGunSystem : EntitySystem
|
||||
|
||||
protected void MuzzleFlash(EntityUid gun, AmmoComponent component, EntityUid? user = null)
|
||||
{
|
||||
bool cancelled = TryComp<WeaponModulesComponent>(gun, out var weaponModulesComponent) && weaponModulesComponent.WeaponFireEffect; // WD EDIT
|
||||
if(cancelled) return; // WD EDIT END
|
||||
|
||||
var attemptEv = new GunMuzzleFlashAttemptEvent();
|
||||
RaiseLocalEvent(gun, ref attemptEv);
|
||||
if (attemptEv.Cancelled)
|
||||
@@ -534,9 +538,38 @@ public abstract partial class SharedGunSystem : EntitySystem
|
||||
|
||||
Dirty(gun);
|
||||
}
|
||||
// WD EDIT
|
||||
public void SetProjectileSpeed(EntityUid weapon, float projectileSpeed)
|
||||
{
|
||||
if(!TryComp<GunComponent>(weapon, out var gunComponent))
|
||||
return;
|
||||
|
||||
gunComponent.ProjectileSpeed = projectileSpeed;
|
||||
|
||||
RefreshModifiers(weapon);
|
||||
}
|
||||
|
||||
public void SetFireRate(EntityUid weapon, float fireRate)
|
||||
{
|
||||
if(!TryComp<GunComponent>(weapon, out var gunComponent))
|
||||
return;
|
||||
|
||||
gunComponent.FireRate = fireRate;
|
||||
|
||||
RefreshModifiers(weapon);
|
||||
}
|
||||
|
||||
public void SetSound(EntityUid weapon, SoundSpecifier sound)
|
||||
{
|
||||
if(!TryComp<GunComponent>(weapon, out var gunComponent))
|
||||
return;
|
||||
|
||||
gunComponent.SoundGunshot = sound;
|
||||
|
||||
RefreshModifiers(weapon);
|
||||
}
|
||||
// WD EDIT END
|
||||
protected abstract void CreateEffect(EntityUid uid, MuzzleFlashEvent message, EntityUid? user = null);
|
||||
|
||||
/// <summary>
|
||||
/// Used for animated effects on the client.
|
||||
/// </summary>
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
namespace Content.Shared._White.WeaponModules;
|
||||
|
||||
/// <summary>
|
||||
/// This is used for...
|
||||
/// </summary>
|
||||
[RegisterComponent]
|
||||
public sealed partial class AcceleratorModuleComponent : BaseModuleComponent
|
||||
{
|
||||
public float OldFireRate;
|
||||
|
||||
public float FireRateAdd = 2.4F;
|
||||
}
|
||||
11
Content.Shared/_White/WeaponModules/BaseModuleComponent.cs
Normal file
11
Content.Shared/_White/WeaponModules/BaseModuleComponent.cs
Normal file
@@ -0,0 +1,11 @@
|
||||
using Robust.Shared.GameStates;
|
||||
|
||||
namespace Content.Shared._White.WeaponModules;
|
||||
|
||||
|
||||
[RegisterComponent, NetworkedComponent]
|
||||
public partial class BaseModuleComponent : Component
|
||||
{
|
||||
[ViewVariables(VVAccess.ReadWrite), DataField("value")]
|
||||
public string AppearanceValue;
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
namespace Content.Shared._White.WeaponModules;
|
||||
|
||||
/// <summary>
|
||||
/// This is used for...
|
||||
/// </summary>
|
||||
[RegisterComponent]
|
||||
public sealed partial class FlameHiderModuleComponent : BaseModuleComponent
|
||||
{
|
||||
}
|
||||
12
Content.Shared/_White/WeaponModules/LaserModuleComponent.cs
Normal file
12
Content.Shared/_White/WeaponModules/LaserModuleComponent.cs
Normal file
@@ -0,0 +1,12 @@
|
||||
namespace Content.Shared._White.WeaponModules;
|
||||
|
||||
/// <summary>
|
||||
/// This is used for...
|
||||
/// </summary>
|
||||
[RegisterComponent]
|
||||
public sealed partial class LaserModuleComponent : BaseModuleComponent
|
||||
{
|
||||
public float OldProjectileSpeed;
|
||||
|
||||
public float ProjectileSpeedAdd = 15F;
|
||||
}
|
||||
12
Content.Shared/_White/WeaponModules/LightModuleComponent.cs
Normal file
12
Content.Shared/_White/WeaponModules/LightModuleComponent.cs
Normal file
@@ -0,0 +1,12 @@
|
||||
namespace Content.Shared._White.WeaponModules;
|
||||
|
||||
/// <summary>
|
||||
/// LightModuleComponent
|
||||
/// </summary>
|
||||
[RegisterComponent]
|
||||
public sealed partial class LightModuleComponent : BaseModuleComponent
|
||||
{
|
||||
public bool Enabled;
|
||||
|
||||
public float Radius = 4F;
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
using Robust.Shared.Audio;
|
||||
|
||||
namespace Content.Shared._White.WeaponModules;
|
||||
|
||||
/// <summary>
|
||||
/// This is used for...
|
||||
/// </summary>
|
||||
[RegisterComponent]
|
||||
public sealed partial class SilencerModuleComponent : BaseModuleComponent
|
||||
{
|
||||
public SoundSpecifier? OldSoundGunshot;
|
||||
|
||||
public SoundSpecifier NewSoundGunshot = new SoundPathSpecifier("/Audio/White/Weapons/Modules/silence.ogg");
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
using Robust.Shared.GameStates;
|
||||
using Robust.Shared.Serialization;
|
||||
|
||||
namespace Content.Shared._White.WeaponModules;
|
||||
|
||||
/// <summary>
|
||||
/// Base Module Component
|
||||
/// </summary>
|
||||
[RegisterComponent, NetworkedComponent, AutoGenerateComponentState]
|
||||
public partial class WeaponModulesComponent : Component
|
||||
{
|
||||
[ViewVariables(VVAccess.ReadWrite), DataField]
|
||||
public List<EntityUid> Modules = new();
|
||||
|
||||
[ViewVariables(VVAccess.ReadWrite), AutoNetworkedField]
|
||||
public bool WeaponFireEffect;
|
||||
}
|
||||
|
||||
[Serializable, NetSerializable]
|
||||
public enum ModuleVisualState : byte
|
||||
{
|
||||
Module
|
||||
}
|
||||
|
||||
[Serializable, NetSerializable]
|
||||
public enum Modules : byte
|
||||
{
|
||||
Light
|
||||
}
|
||||
Reference in New Issue
Block a user