fish-station/Content.Server/Mech/Equipment/EntitySystems/MechGunSystem.cs
Rinary e39dfe9e64
Мехи (#415)
* initial commit

* some sprites

* mech weapons

* syndi mechs to nuke ops uplink

* some loadouts to Nanotrasen mechs

* spawn mark filled mechs

* construction graphs

* researchable mechs

* i forgor

* locale changes

* aaa

* minor translate(big, later)

* fix items in hands

* fix

* upd translate

* translate electronics

* translate mech weapons

* translate

* translate const

* fix rsi

* fix

* fix

---------

Co-authored-by: NULL882 <gost6865@yandex.ru>
Co-authored-by: VigersRay <vigersray@gmail.com>
2024-10-02 06:39:12 +03:00

61 lines
No EOL
2.1 KiB
C#

using Content.Server.Mech.Systems;
using Content.Server.Power.Components;
using Content.Server.Power.EntitySystems;
using Content.Shared.Mech.Components;
using Content.Shared.Mech.Equipment.Components;
using Content.Shared.Throwing;
using Content.Shared.Weapons.Ranged.Systems;
using Robust.Shared.Random;
namespace Content.Server.Mech.Equipment.EntitySystems;
public sealed class MechGunSystem : EntitySystem
{
[Dependency] private readonly IRobustRandom _random = default!;
[Dependency] private readonly ThrowingSystem _throwing = default!;
[Dependency] private readonly MechSystem _mech = default!;
[Dependency] private readonly BatterySystem _battery = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<MechEquipmentComponent, GunShotEvent>(MechGunShot);
}
private void MechGunShot(EntityUid uid, MechEquipmentComponent component, ref GunShotEvent args)
{
if (!component.EquipmentOwner.HasValue)
return;
if (!TryComp<MechComponent>(component.EquipmentOwner.Value, out var mech))
return;
if (TryComp<BatteryComponent>(uid, out var battery))
{
ChargeGunBattery(uid, battery);
return;
}
}
private void ChargeGunBattery(EntityUid uid, BatteryComponent component)
{
if (!TryComp<MechEquipmentComponent>(uid, out var mechEquipment) || !mechEquipment.EquipmentOwner.HasValue)
return;
if (!TryComp<MechComponent>(mechEquipment.EquipmentOwner.Value, out var mech))
return;
var maxCharge = component.MaxCharge;
var currentCharge = component.CurrentCharge;
var chargeDelta = maxCharge - currentCharge;
// TODO: The battery charge of the mech would be spent directly when fired.
if (chargeDelta <= 0 || mech.Energy - chargeDelta < 0)
return;
if (!_mech.TryChangeEnergy(mechEquipment.EquipmentOwner.Value, -chargeDelta, mech))
return;
_battery.SetCharge(uid, component.MaxCharge, component);
}
}