mirror of
https://github.com/wega-team/ss14-wega.git
synced 2026-02-14 19:30:01 +01:00
Фикс андроидов (#276)
* Фикс батареи и светодиодов * Фикс аварийных наборов
This commit is contained in:
@@ -1,11 +1,47 @@
|
||||
using Content.Shared.Alert;
|
||||
using Content.Shared.Android;
|
||||
using Content.Shared.Power.EntitySystems;
|
||||
using Content.Shared.PowerCell;
|
||||
|
||||
namespace Content.Client.Android;
|
||||
|
||||
public sealed class AndroidSystem : SharedAndroidSystem
|
||||
{
|
||||
[Dependency] private readonly PowerCellSystem _powerCell = default!;
|
||||
[Dependency] private readonly PredictedBatterySystem _battery = default!;
|
||||
[Dependency] private readonly AlertsSystem _alerts = default!;
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
}
|
||||
|
||||
public override void Update(float frameTime)
|
||||
{
|
||||
base.Update(frameTime);
|
||||
|
||||
var androidsQuery = EntityQueryEnumerator<AndroidComponent>();
|
||||
while (androidsQuery.MoveNext(out var ent, out var component))
|
||||
{
|
||||
UpdateBatteryAlert((ent, component));
|
||||
}
|
||||
}
|
||||
|
||||
private void UpdateBatteryAlert(Entity<AndroidComponent> ent)
|
||||
{
|
||||
if (!_powerCell.TryGetBatteryFromSlot(ent.Owner, out var battery))
|
||||
{
|
||||
_alerts.ShowAlert(ent.Owner, ent.Comp.NoBatteryAlert);
|
||||
return;
|
||||
}
|
||||
|
||||
var chargeLevel = (short)MathF.Round(_battery.GetChargeLevel(battery.Value.AsNullable()) * 10f);
|
||||
|
||||
if (chargeLevel == 0 && _powerCell.HasDrawCharge(ent.Owner))
|
||||
{
|
||||
chargeLevel = 1;
|
||||
}
|
||||
|
||||
_alerts.ShowAlert(ent.Owner, ent.Comp.BatteryAlert, chargeLevel);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,6 +22,8 @@ using Robust.Server.GameObjects;
|
||||
using Robust.Shared.Containers;
|
||||
using Robust.Shared.Random;
|
||||
using Robust.Shared.Timing;
|
||||
using Content.Shared.Power;
|
||||
using Content.Server.Power.EntitySystems;
|
||||
|
||||
namespace Content.Server.Android;
|
||||
|
||||
@@ -35,7 +37,6 @@ public sealed partial class AndroidSystem : SharedAndroidSystem
|
||||
[Dependency] private readonly MobStateSystem _mobState = default!;
|
||||
[Dependency] private readonly MovementSpeedModifierSystem _movementSpeedModifier = default!;
|
||||
[Dependency] private readonly PowerCellSystem _powerCell = default!;
|
||||
[Dependency] private readonly AlertsSystem _alerts = default!;
|
||||
[Dependency] private readonly ActionsSystem _actions = default!;
|
||||
[Dependency] private readonly LockSystem _lock = default!;
|
||||
[Dependency] private readonly AudioSystem _audio = default!;
|
||||
@@ -43,6 +44,7 @@ public sealed partial class AndroidSystem : SharedAndroidSystem
|
||||
[Dependency] private readonly PointLightSystem _pointLight = default!;
|
||||
[Dependency] private readonly StunSystem _stun = default!;
|
||||
[Dependency] private readonly SharedContainerSystem _container = default!;
|
||||
[Dependency] private readonly AppearanceSystem _appearance = default!;
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
@@ -71,6 +73,8 @@ public sealed partial class AndroidSystem : SharedAndroidSystem
|
||||
DoDischargeStun(ent, component);
|
||||
DelayDischargeStun(component);
|
||||
}
|
||||
|
||||
UpdatePowerCell(ent, component);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -109,7 +113,11 @@ public sealed partial class AndroidSystem : SharedAndroidSystem
|
||||
EntityUid lightEntity = component.LightEntity.Value;
|
||||
|
||||
if (enabled != null)
|
||||
{
|
||||
_appearance.SetData(uid, AndroidVisuals.Light, enabled.Value);
|
||||
_pointLight.SetEnabled(lightEntity, enabled.Value);
|
||||
_audio.PlayPvs(component.ToggleLightSound, uid);
|
||||
}
|
||||
|
||||
_pointLight.SetRadius(lightEntity, _toggle.IsActivated(lightEntity) ? component.BasePointLightRadiuse : Math.Max(component.BasePointLightRadiuse / 3f, 1.3f));
|
||||
_pointLight.SetEnergy(lightEntity, _toggle.IsActivated(lightEntity) ? component.BasePointLightEnergy : component.BasePointLightEnergy * 0.75f);
|
||||
@@ -122,8 +130,6 @@ public sealed partial class AndroidSystem : SharedAndroidSystem
|
||||
|
||||
Color ledColor = markings[0].MarkingColors[0].WithAlpha(255);
|
||||
_pointLight.SetColor(lightEntity, ledColor);
|
||||
|
||||
_audio.PlayPvs(component.ToggleLightSound, uid);
|
||||
}
|
||||
|
||||
#region Battery
|
||||
@@ -133,14 +139,15 @@ public sealed partial class AndroidSystem : SharedAndroidSystem
|
||||
_powerCell.SetDrawEnabled(uid, args.NewMobState == MobState.Alive);
|
||||
}
|
||||
|
||||
private void OnPowerCellChanged(EntityUid uid, AndroidComponent component, PowerCellChangedEvent args)
|
||||
private void OnPowerCellChanged(EntityUid uid, AndroidComponent component, ref PowerCellChangedEvent args)
|
||||
{
|
||||
UpdateBatteryAlert((uid, component));
|
||||
UpdatePowerCell(uid, component);
|
||||
}
|
||||
|
||||
private void UpdatePowerCell(EntityUid uid, AndroidComponent component)
|
||||
{
|
||||
if (_powerCell.HasDrawCharge(uid))
|
||||
{
|
||||
_toggle.TryActivate(uid);
|
||||
}
|
||||
}
|
||||
|
||||
private void OnPowerCellSlotEmpty(EntityUid uid, AndroidComponent component, ref PowerCellSlotEmptyEvent args)
|
||||
@@ -164,24 +171,6 @@ public sealed partial class AndroidSystem : SharedAndroidSystem
|
||||
UpdateLight(uid, component);
|
||||
}
|
||||
|
||||
private void UpdateBatteryAlert(Entity<AndroidComponent> ent, PowerCellSlotComponent? slotComponent = null)
|
||||
{
|
||||
if (!_powerCell.TryGetBatteryFromSlot(ent.Owner, out var battery))
|
||||
{
|
||||
_alerts.ClearAlert(ent.Owner, ent.Comp.BatteryAlert);
|
||||
_alerts.ShowAlert(ent.Owner, ent.Comp.NoBatteryAlert);
|
||||
return;
|
||||
}
|
||||
|
||||
var chargePercent = (short)MathF.Round(battery.Value.Comp.LastCharge / battery.Value.Comp.MaxCharge * 10f);
|
||||
|
||||
if (chargePercent == 0 && _powerCell.HasDrawCharge(ent.Owner))
|
||||
chargePercent = 1;
|
||||
|
||||
_alerts.ClearAlert(ent.Owner, ent.Comp.NoBatteryAlert);
|
||||
_alerts.ShowAlert(ent.Owner, ent.Comp.BatteryAlert, chargePercent);
|
||||
}
|
||||
|
||||
private void DelayDischargeStun(AndroidComponent component)
|
||||
{
|
||||
double multiplier = 1f + (_timing.CurTime - component.DischargeTime).TotalSeconds * 0.03f;
|
||||
|
||||
@@ -99,26 +99,6 @@ public sealed class BatteryDrainerImplantSystem : EntitySystem
|
||||
return null;
|
||||
}
|
||||
|
||||
private void ChargeBattery(EntityUid user, BatteryDrainerImplantComponent component, EntityUid target)
|
||||
{
|
||||
if (!_powerCell.TryGetBatteryFromSlot(user, out var battery))
|
||||
return;
|
||||
|
||||
if (!TryComp<BatteryComponent>(target, out var targetBattery))
|
||||
return;
|
||||
|
||||
float transfer = Math.Clamp(targetBattery.MaxCharge - targetBattery.CurrentCharge, 0f, battery.Value.Comp.LastCharge);
|
||||
if (transfer == 0f)
|
||||
{
|
||||
_popup.PopupEntity(Loc.GetString("implant-battery-drainer-no-transfer"), user, user);
|
||||
return;
|
||||
}
|
||||
_powerCell.TryUseCharge(user, transfer);
|
||||
_battery.ChangeCharge(target, transfer);
|
||||
|
||||
_audio.PlayPvs(component.UseSound, user);
|
||||
}
|
||||
|
||||
private void TransferCharge(BatteryDrainerImplantComponent component, EntityUid source, EntityUid target, EntityUid user)
|
||||
{
|
||||
var sourceUid = TryGetBattery(source);
|
||||
|
||||
@@ -3,6 +3,7 @@ using Content.Shared.Alert;
|
||||
using Robust.Shared.Audio;
|
||||
using Robust.Shared.GameStates;
|
||||
using Robust.Shared.Prototypes;
|
||||
using Robust.Shared.Serialization;
|
||||
|
||||
namespace Content.Shared.Android;
|
||||
|
||||
@@ -30,7 +31,7 @@ public sealed partial class AndroidComponent : Component
|
||||
[DataField]
|
||||
public float BasePointLightRadiuse = 2.5f;
|
||||
[DataField]
|
||||
public float BasePointLightEnergy = 1.2f;
|
||||
public float BasePointLightEnergy = 1.6f;
|
||||
[ViewVariables(VVAccess.ReadWrite)]
|
||||
public EntityUid? LightEntity;
|
||||
[DataField]
|
||||
@@ -41,3 +42,9 @@ public sealed partial class AndroidComponent : Component
|
||||
public string TogglelLightAction = "ActionToggleAndroidLeds";
|
||||
public EntityUid? ToggleLightActionEntity;
|
||||
}
|
||||
|
||||
[Serializable, NetSerializable]
|
||||
public enum AndroidVisuals : byte
|
||||
{
|
||||
Light
|
||||
}
|
||||
|
||||
@@ -4,13 +4,15 @@
|
||||
id: BoxSurvivalAndroid
|
||||
suffix: Android
|
||||
components:
|
||||
- type: StorageFill
|
||||
contents:
|
||||
- id: ClothingMaskBreath
|
||||
- id: EmergencyNitrogenTankFilled
|
||||
- id: Flare
|
||||
- id: Tyriumpack3
|
||||
- id: WelderMini
|
||||
- type: EntityTableContainerFill
|
||||
containers:
|
||||
storagebase: !type:AllSelector
|
||||
children:
|
||||
- id: ClothingMaskBreath
|
||||
- id: EmergencyNitrogenTankFilled
|
||||
- id: Flare
|
||||
- id: Tyriumpack3
|
||||
- id: WelderMini
|
||||
- type: Sprite
|
||||
layers:
|
||||
- state: internals
|
||||
@@ -24,93 +26,108 @@
|
||||
id: BoxSurvivalAndroidExtended
|
||||
suffix: Extended Android
|
||||
components:
|
||||
- type: StorageFill
|
||||
contents:
|
||||
- id: ClothingMaskBreath
|
||||
- id: ExtendedEmergencyNitrogenTankFilled
|
||||
- id: Flare
|
||||
- id: Tyriumpack3
|
||||
- id: WelderMini
|
||||
- type: EntityTableContainerFill
|
||||
containers:
|
||||
storagebase: !type:AllSelector
|
||||
children:
|
||||
- id: ClothingMaskBreath
|
||||
- id: ExtendedEmergencyNitrogenTankFilled
|
||||
- id: Flare
|
||||
- id: Tyriumpack3
|
||||
- id: WelderMini
|
||||
|
||||
- type: entity
|
||||
parent: BoxSurvivalAndroid
|
||||
id: BoxSurvivalAndroidMedical
|
||||
suffix: Medical Android
|
||||
components:
|
||||
- type: StorageFill
|
||||
contents:
|
||||
- id: ClothingMaskBreathMedical
|
||||
- id: EmergencyNitrogenTankFilled
|
||||
- id: Flare
|
||||
- id: Tyriumpack3
|
||||
- id: WelderMini
|
||||
- type: EntityTableContainerFill
|
||||
containers:
|
||||
storagebase: !type:AllSelector
|
||||
children:
|
||||
- id: ClothingMaskBreathMedical
|
||||
- id: EmergencyNitrogenTankFilled
|
||||
- id: Flare
|
||||
- id: Tyriumpack3
|
||||
- id: WelderMini
|
||||
|
||||
- type: entity
|
||||
parent: BoxSurvivalAndroid
|
||||
id: BoxSurvivalAndroidSecurity
|
||||
suffix: Security Android
|
||||
components:
|
||||
- type: StorageFill
|
||||
contents:
|
||||
- id: ClothingMaskGasSecurity
|
||||
- id: EmergencyNitrogenTankFilled
|
||||
- id: Flare
|
||||
- id: Tyriumpack3
|
||||
- id: WelderMini
|
||||
- type: EntityTableContainerFill
|
||||
containers:
|
||||
storagebase: !type:AllSelector
|
||||
children:
|
||||
- id: ClothingMaskGasSecurity
|
||||
- id: EmergencyNitrogenTankFilled
|
||||
- id: Flare
|
||||
- id: Tyriumpack3
|
||||
- id: WelderMini
|
||||
|
||||
- type: entity
|
||||
parent: BoxHug
|
||||
id: BoxAndroidHug
|
||||
suffix: Emergency Android
|
||||
components:
|
||||
- type: StorageFill
|
||||
contents:
|
||||
- id: ClothingMaskBreath
|
||||
- id: EmergencyNitrogenTankFilled
|
||||
- id: Flare
|
||||
- id: Tyriumpack3
|
||||
- id: WelderMini
|
||||
- type: EntityTableContainerFill
|
||||
containers:
|
||||
storagebase: !type:AllSelector
|
||||
children:
|
||||
- id: ClothingMaskBreath
|
||||
- id: EmergencyNitrogenTankFilled
|
||||
- id: Flare
|
||||
- id: Tyriumpack3
|
||||
- id: WelderMini
|
||||
- type: Label
|
||||
currentLabel: reagent-name-nitrogen
|
||||
|
||||
- type: entity
|
||||
parent: BoxSurvivalNitrogen
|
||||
parent: BoxSurvivalAndroid
|
||||
id: BoxAndroidMime
|
||||
suffix: Mime Android
|
||||
components:
|
||||
- type: StorageFill
|
||||
contents:
|
||||
- id: ClothingMaskBreath
|
||||
- id: EmergencyNitrogenTankFilled
|
||||
- id: Flare
|
||||
- id: Tyriumpack3
|
||||
- id: WelderMini
|
||||
- type: EntityTableContainerFill
|
||||
containers:
|
||||
storagebase: !type:AllSelector
|
||||
children:
|
||||
- id: ClothingMaskBreath
|
||||
- id: EmergencyNitrogenTankFilled
|
||||
- id: Flare
|
||||
- id: Tyriumpack3
|
||||
- id: WelderMini
|
||||
- id: FoodBreadNutriBatard
|
||||
|
||||
- type: entity
|
||||
parent: BoxSurvivalAndroid
|
||||
id: BoxSurvivalAndroidBlueShield
|
||||
suffix: Blue Shield Android
|
||||
components:
|
||||
- type: StorageFill
|
||||
contents:
|
||||
- id: ClothingMaskGasBlueShield
|
||||
- id: ExtendedEmergencyNitrogenTankFilled
|
||||
- id: Flare
|
||||
- id: Tyriumpack3
|
||||
- id: WelderMini
|
||||
- type: EntityTableContainerFill
|
||||
containers:
|
||||
storagebase: !type:AllSelector
|
||||
children:
|
||||
- id: ClothingMaskGasBlueShield
|
||||
- id: ExtendedEmergencyNitrogenTankFilled
|
||||
- id: Flare
|
||||
- id: Tyriumpack3
|
||||
- id: WelderMini
|
||||
|
||||
- type: entity
|
||||
parent: BoxSurvivalAndroid
|
||||
id: BoxSurvivalAndroidSyndicate
|
||||
suffix: Syndicate Android
|
||||
components:
|
||||
- type: StorageFill
|
||||
contents:
|
||||
- id: ClothingMaskGasSyndicate
|
||||
- id: ExtendedEmergencyNitrogenTankFilled
|
||||
- id: Flare
|
||||
- id: Tyriumpack3
|
||||
- id: WelderMini
|
||||
- type: EntityTableContainerFill
|
||||
containers:
|
||||
storagebase: !type:AllSelector
|
||||
children:
|
||||
- id: ClothingMaskGasSyndicate
|
||||
- id: ExtendedEmergencyNitrogenTankFilled
|
||||
- id: Flare
|
||||
- id: Tyriumpack3
|
||||
- id: WelderMini
|
||||
|
||||
# BlueShield
|
||||
- type: entity
|
||||
|
||||
@@ -66,7 +66,7 @@
|
||||
# TODO, normally make light switching
|
||||
- type: GenericVisualizer
|
||||
visuals:
|
||||
enum.UnpoweredFlashlightVisuals.LightOn:
|
||||
enum.AndroidVisuals.Light:
|
||||
AndroidLeds-leds:
|
||||
True: { shader: unshaded }
|
||||
False: { shader: shaded }
|
||||
|
||||
Reference in New Issue
Block a user