From 63475c32d310ef0250707b445061a27cd275f2fd Mon Sep 17 00:00:00 2001 From: Anri Date: Mon, 19 Aug 2024 14:56:18 +0300 Subject: [PATCH] BaseUIPlotEnd --- .../Observer/SuperMatterObserverSystem.cs | 11 +- .../SuperMatter/Ui/SuperMatterObserverBUI.cs | 13 +- .../Ui/SuperMatterObserverMenu.xaml | 59 +++++--- .../Ui/SuperMatterObserverMenu.xaml.cs | 126 ++++++++++++++++-- .../SS220/UserInterface/PlotFigure/Plot.cs | 31 ++++- .../PlotFigure/PlotSequencedView.cs | 13 +- .../PlotFigure/Pseudo3DColoredView.cs | 16 ++- .../SuperMatterInternalProcess.cs | 2 +- .../SuperMatterSystem.EventHandlers.cs | 10 +- .../Crystal/SuperMatterSystem.Integrity.cs | 4 +- .../SuperMatterSystem.Thermodynamics.cs | 4 +- .../SuperMatter/Crystal/SuperMatterSystem.cs | 13 +- .../Functions/SuperMatterFunctions.cs | 2 +- .../Weapons/Guns/Projectiles/projectiles.yml | 4 + .../Specific/supermatter_crystal.yml | 15 ++- .../Specific/Supermatter/crystal.rsi/base.png | Bin 0 -> 6175 bytes .../Supermatter/crystal.rsi/field.png | Bin 0 -> 557 bytes .../Specific/Supermatter/crystal.rsi/glow.png | Bin 0 -> 8727 bytes .../Specific/Supermatter/crystal.rsi/icon.png | Bin 0 -> 2712 bytes .../Supermatter/crystal.rsi/meta.json | 49 +++++++ .../Specific/Supermatter/crystal.rsi/psy.png | Bin 0 -> 3074 bytes .../moth_stat_display.rsi/broken.png | Bin 0 -> 632 bytes .../moth_stat_display.rsi/falling.png | Bin 0 -> 111 bytes .../moth_stat_display.rsi/icon.png | Bin 0 -> 1251 bytes .../moth_stat_display.rsi/meta.json | 68 ++++++++++ .../moth_stat_display.rsi/num_0.png | Bin 0 -> 112 bytes .../moth_stat_display.rsi/num_1.png | Bin 0 -> 115 bytes .../moth_stat_display.rsi/num_2.png | Bin 0 -> 120 bytes .../moth_stat_display.rsi/num_3.png | Bin 0 -> 113 bytes .../moth_stat_display.rsi/num_4.png | Bin 0 -> 116 bytes .../moth_stat_display.rsi/num_5.png | Bin 0 -> 120 bytes .../moth_stat_display.rsi/num_6.png | Bin 0 -> 117 bytes .../moth_stat_display.rsi/num_7.png | Bin 0 -> 115 bytes .../moth_stat_display.rsi/num_8.png | Bin 0 -> 112 bytes .../moth_stat_display.rsi/num_9.png | Bin 0 -> 118 bytes .../Supermatter/moth_stat_display.rsi/off.png | Bin 0 -> 234 bytes .../moth_stat_display.rsi/rising.png | Bin 0 -> 113 bytes .../Supermatter/stat_display.rsi/advert1.png | Bin 0 -> 1348 bytes .../Supermatter/stat_display.rsi/broken.png | Bin 0 -> 753 bytes .../Supermatter/stat_display.rsi/falling.png | Bin 0 -> 109 bytes .../Supermatter/stat_display.rsi/icon.png | Bin 0 -> 537 bytes .../Supermatter/stat_display.rsi/meta.json | 93 +++++++++++++ .../Supermatter/stat_display.rsi/num_0.png | Bin 0 -> 112 bytes .../Supermatter/stat_display.rsi/num_1.png | Bin 0 -> 115 bytes .../Supermatter/stat_display.rsi/num_2.png | Bin 0 -> 120 bytes .../Supermatter/stat_display.rsi/num_3.png | Bin 0 -> 113 bytes .../Supermatter/stat_display.rsi/num_4.png | Bin 0 -> 116 bytes .../Supermatter/stat_display.rsi/num_5.png | Bin 0 -> 120 bytes .../Supermatter/stat_display.rsi/num_6.png | Bin 0 -> 117 bytes .../Supermatter/stat_display.rsi/num_7.png | Bin 0 -> 115 bytes .../Supermatter/stat_display.rsi/num_8.png | Bin 0 -> 112 bytes .../Supermatter/stat_display.rsi/num_9.png | Bin 0 -> 118 bytes .../Supermatter/stat_display.rsi/off.png | Bin 0 -> 345 bytes .../Supermatter/stat_display.rsi/rising.png | Bin 0 -> 111 bytes .../Supermatter/stat_display.rsi/shame.png | Bin 0 -> 194 bytes .../Objects/Specific/smCrystal.rsi/meta.json | 49 +++++++ 56 files changed, 508 insertions(+), 74 deletions(-) create mode 100644 Resources/Textures/SS220/Objects/Specific/Supermatter/crystal.rsi/base.png create mode 100644 Resources/Textures/SS220/Objects/Specific/Supermatter/crystal.rsi/field.png create mode 100644 Resources/Textures/SS220/Objects/Specific/Supermatter/crystal.rsi/glow.png create mode 100644 Resources/Textures/SS220/Objects/Specific/Supermatter/crystal.rsi/icon.png create mode 100644 Resources/Textures/SS220/Objects/Specific/Supermatter/crystal.rsi/meta.json create mode 100644 Resources/Textures/SS220/Objects/Specific/Supermatter/crystal.rsi/psy.png create mode 100644 Resources/Textures/SS220/Objects/Specific/Supermatter/moth_stat_display.rsi/broken.png create mode 100644 Resources/Textures/SS220/Objects/Specific/Supermatter/moth_stat_display.rsi/falling.png create mode 100644 Resources/Textures/SS220/Objects/Specific/Supermatter/moth_stat_display.rsi/icon.png create mode 100644 Resources/Textures/SS220/Objects/Specific/Supermatter/moth_stat_display.rsi/meta.json create mode 100644 Resources/Textures/SS220/Objects/Specific/Supermatter/moth_stat_display.rsi/num_0.png create mode 100644 Resources/Textures/SS220/Objects/Specific/Supermatter/moth_stat_display.rsi/num_1.png create mode 100644 Resources/Textures/SS220/Objects/Specific/Supermatter/moth_stat_display.rsi/num_2.png create mode 100644 Resources/Textures/SS220/Objects/Specific/Supermatter/moth_stat_display.rsi/num_3.png create mode 100644 Resources/Textures/SS220/Objects/Specific/Supermatter/moth_stat_display.rsi/num_4.png create mode 100644 Resources/Textures/SS220/Objects/Specific/Supermatter/moth_stat_display.rsi/num_5.png create mode 100644 Resources/Textures/SS220/Objects/Specific/Supermatter/moth_stat_display.rsi/num_6.png create mode 100644 Resources/Textures/SS220/Objects/Specific/Supermatter/moth_stat_display.rsi/num_7.png create mode 100644 Resources/Textures/SS220/Objects/Specific/Supermatter/moth_stat_display.rsi/num_8.png create mode 100644 Resources/Textures/SS220/Objects/Specific/Supermatter/moth_stat_display.rsi/num_9.png create mode 100644 Resources/Textures/SS220/Objects/Specific/Supermatter/moth_stat_display.rsi/off.png create mode 100644 Resources/Textures/SS220/Objects/Specific/Supermatter/moth_stat_display.rsi/rising.png create mode 100644 Resources/Textures/SS220/Objects/Specific/Supermatter/stat_display.rsi/advert1.png create mode 100644 Resources/Textures/SS220/Objects/Specific/Supermatter/stat_display.rsi/broken.png create mode 100644 Resources/Textures/SS220/Objects/Specific/Supermatter/stat_display.rsi/falling.png create mode 100644 Resources/Textures/SS220/Objects/Specific/Supermatter/stat_display.rsi/icon.png create mode 100644 Resources/Textures/SS220/Objects/Specific/Supermatter/stat_display.rsi/meta.json create mode 100644 Resources/Textures/SS220/Objects/Specific/Supermatter/stat_display.rsi/num_0.png create mode 100644 Resources/Textures/SS220/Objects/Specific/Supermatter/stat_display.rsi/num_1.png create mode 100644 Resources/Textures/SS220/Objects/Specific/Supermatter/stat_display.rsi/num_2.png create mode 100644 Resources/Textures/SS220/Objects/Specific/Supermatter/stat_display.rsi/num_3.png create mode 100644 Resources/Textures/SS220/Objects/Specific/Supermatter/stat_display.rsi/num_4.png create mode 100644 Resources/Textures/SS220/Objects/Specific/Supermatter/stat_display.rsi/num_5.png create mode 100644 Resources/Textures/SS220/Objects/Specific/Supermatter/stat_display.rsi/num_6.png create mode 100644 Resources/Textures/SS220/Objects/Specific/Supermatter/stat_display.rsi/num_7.png create mode 100644 Resources/Textures/SS220/Objects/Specific/Supermatter/stat_display.rsi/num_8.png create mode 100644 Resources/Textures/SS220/Objects/Specific/Supermatter/stat_display.rsi/num_9.png create mode 100644 Resources/Textures/SS220/Objects/Specific/Supermatter/stat_display.rsi/off.png create mode 100644 Resources/Textures/SS220/Objects/Specific/Supermatter/stat_display.rsi/rising.png create mode 100644 Resources/Textures/SS220/Objects/Specific/Supermatter/stat_display.rsi/shame.png create mode 100644 Resources/Textures/SS220/Objects/Specific/smCrystal.rsi/meta.json diff --git a/Content.Client/SS220/SuperMatter/Observer/SuperMatterObserverSystem.cs b/Content.Client/SS220/SuperMatter/Observer/SuperMatterObserverSystem.cs index a549ef14b1b5a5..929b7dd9f26ea5 100644 --- a/Content.Client/SS220/SuperMatter/Observer/SuperMatterObserverSystem.cs +++ b/Content.Client/SS220/SuperMatter/Observer/SuperMatterObserverSystem.cs @@ -19,6 +19,7 @@ public sealed class SuperMatterObserverSystem : EntitySystem private List _smReceiverUIOwnersToInit = new(); private TimeSpan _nextUpdateTime = default!; private HashSet> _receivers = new(); + private SortedList _processedReceivers = new(); public override void Initialize() { base.Initialize(); @@ -102,12 +103,18 @@ private void OnCrystalUpdate(SuperMatterStateUpdate args) _entityLookup.GetEntitiesOnMap(Transform(observerUid).MapID, _receivers); // logic foreach (var receiver in _receivers) - TrySendToUIState(receiver.Owner, new SuperMatterObserverUpdateState(args.Id, args.Name, args.Integrity, args.Pressure, - args.Temperature, args.Matter, args.InternalEnergy, args.Delaminate)); + { + if (_processedReceivers.ContainsKey(receiver.Owner.Id)) + continue; + if (TrySendToUIState(receiver.Owner, new SuperMatterObserverUpdateState(args.Id, args.Name, args.Integrity, args.Pressure, + args.Temperature, args.Matter, args.InternalEnergy, args.Delaminate))) + _processedReceivers.Add(receiver.Owner.Id, receiver.Owner); + } _receivers.Clear(); // RaiseLocalEvent(SMpanels -> accept information) } _observerEntities.Clear(); + _processedReceivers.Clear(); } private void OnReceiverBoundUIOpened(Entity entity, ref BoundUIOpenedEvent args) { diff --git a/Content.Client/SS220/SuperMatter/Ui/SuperMatterObserverBUI.cs b/Content.Client/SS220/SuperMatter/Ui/SuperMatterObserverBUI.cs index e5b8191f8758cf..d66be0bb84e2d4 100644 --- a/Content.Client/SS220/SuperMatter/Ui/SuperMatterObserverBUI.cs +++ b/Content.Client/SS220/SuperMatter/Ui/SuperMatterObserverBUI.cs @@ -17,16 +17,19 @@ protected override void Open() _menu.OnServerButtonPressed += (args, observerComp) => { - if (!args.Button.Pressed) - _menu.Observer = null; - else + if (args.Button.Pressed) _menu.Observer = observerComp; + else + _menu.Observer = null; _menu.CrystalKey = null; _menu.LoadCrystal(); }; - _menu.OnCrystalButtonPressed += (_, crystalKey) => + _menu.OnCrystalButtonPressed += (args, crystalKey) => { - _menu.CrystalKey = crystalKey; + if (args.Button.Pressed) + _menu.CrystalKey = crystalKey; + else + _menu.CrystalKey = null; _menu.LoadCachedData(); }; } diff --git a/Content.Client/SS220/SuperMatter/Ui/SuperMatterObserverMenu.xaml b/Content.Client/SS220/SuperMatter/Ui/SuperMatterObserverMenu.xaml index 072eec7336d80c..1f267d8d5ce781 100644 --- a/Content.Client/SS220/SuperMatter/Ui/SuperMatterObserverMenu.xaml +++ b/Content.Client/SS220/SuperMatter/Ui/SuperMatterObserverMenu.xaml @@ -2,27 +2,54 @@ - - - - - - - - - - + + + + + + + + + + - - - + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Content.Client/SS220/SuperMatter/Ui/SuperMatterObserverMenu.xaml.cs b/Content.Client/SS220/SuperMatter/Ui/SuperMatterObserverMenu.xaml.cs index 5ed83a591d71b3..de5191b4027295 100644 --- a/Content.Client/SS220/SuperMatter/Ui/SuperMatterObserverMenu.xaml.cs +++ b/Content.Client/SS220/SuperMatter/Ui/SuperMatterObserverMenu.xaml.cs @@ -3,13 +3,14 @@ using FancyWindow = Content.Client.UserInterface.Controls.FancyWindow; using Robust.Client.AutoGenerated; using Robust.Client.UserInterface.XAML; -using Robust.Shared.Timing; using Robust.Client.UserInterface.Controls; using Content.Shared.SS220.SuperMatter.Ui; using Content.Client.SS220.UserInterface.PlotFigure; using Content.Client.SS220.SuperMatter.Observer; using System.Numerics; using System.Linq; +using Robust.Client.Graphics; +using Content.Shared.Atmos; namespace Content.Client.SS220.SuperMatter.Ui; @@ -17,23 +18,28 @@ namespace Content.Client.SS220.SuperMatter.Ui; [GenerateTypedNameReferences] public sealed partial class SuperMatterObserverMenu : FancyWindow { - + [Dependency] ILocalizationManager _localization = default!; public event Action? OnServerButtonPressed; public event Action? OnCrystalButtonPressed; public SuperMatterObserverComponent? Observer; public int? CrystalKey; + public Dictionary GasBarColors = new() + { + {Gas.Oxygen, Color.SeaBlue}, + {Gas.Nitrogen, Color.LightCoral}, + {Gas.Plasma, Color.Violet}, + {Gas.CarbonDioxide, Color.Gray} + }; public const int MAX_DATA_LENGTH = 180; - private int counter = 0; - private float conterAbobaX = 0f; - private float conterAbobaY = 0f; public SuperMatterObserverMenu() { IoCManager.InjectDependencies(this); RobustXamlLoader.Load(this); - PlotValueOverTime.SetLabels("time elapsed, s", " Integrity", " Crystal Integrity "); + PlotValueOverTime.SetLabels(_localization.GetString("smObserver-plotXLabel-integrity"), _localization.GetString("smObserver-plotYLabel-integrity"), _localization.GetString("smObserver-plotTitle-integrity")); ColorState.MakeMeshgrid((1, 100, 25), (1, 100, 100)); ColorState.EvalFunctionOnMeshgrid(GetIntegrityDamageMap); - ColorState.SetLabels("Matter, a.u.", "Internal energy, a.u.", " Safe operation "); + ColorState.SetLabels(_localization.GetString("smObserver-plotXLabel-colorState"), _localization.GetString("smObserver-plotYLabel-colorState"), _localization.GetString("smObserver-plotTitle-colorState")); + InitGasRatioBars(); } public void LoadState(List> observerEntities) { @@ -43,12 +49,17 @@ public void LoadState(List> observerEntitie var serverButton = new ServerButton { Text = observerUid.ToString(), + StyleBoxOverride = new StyleBoxFlat(Color.DarkGray), ObserverComponent = observerComp, + Margin = new Thickness(2, 0, 2, 0), ToggleMode = true, StyleClasses = { "OpenBoth" } }; - serverButton.OnPressed += args => OnServerButtonPressed?.Invoke(args, serverButton.ObserverComponent); + serverButton.OnPressed += args => + { + OnServerButtonPressed?.Invoke(args, serverButton.ObserverComponent); + }; ServerNavigationBar.AddChild(serverButton); } } @@ -62,12 +73,17 @@ public void LoadCrystal() var crystalButton = new CrystalButton { Text = name, + StyleBoxOverride = new StyleBoxFlat(Color.DarkGray), CrystalKey = crystalKey, ToggleMode = true, + Margin = new Thickness(2, 0, 2, 0), StyleClasses = { "OpenBoth" } }; - crystalButton.OnPressed += args => OnCrystalButtonPressed?.Invoke(args, crystalButton.CrystalKey); + crystalButton.OnPressed += args => + { + OnCrystalButtonPressed?.Invoke(args, crystalButton.CrystalKey); + }; CrystalNavigationBar.AddChild(crystalButton); } } @@ -77,7 +93,7 @@ public void LoadCachedData() || CrystalKey == null) return; PlotValueOverTime.LoadPlot2DTimePoints(new PlotPoints2D(MAX_DATA_LENGTH, Observer.Integrities[CrystalKey.Value], - -1f, -1f * Observer.Integrities[CrystalKey.Value].Count)); + -1f, Observer.Integrities[CrystalKey.Value].Count)); ColorState.LoadMovingPoint(new Vector2(Observer.Matters[CrystalKey.Value].Last().Value, Observer.InternalEnergy[CrystalKey.Value].Last().Value), new Vector2(Observer.Matters[CrystalKey.Value].Last().Derv, Observer.InternalEnergy[CrystalKey.Value].Last().Derv)); } @@ -85,15 +101,97 @@ public void UpdateState(SuperMatterObserverUpdateState msg) { if (Observer == null || CrystalKey == null) + { + SetMessageDataToTextInfo(); + return; + } + if (msg.Id != CrystalKey) return; - PlotValueOverTime.AddPointToPlot(new Vector2(PlotValueOverTime.GetLastAddedPointX() + 1, msg.Integrity)); + + PlotValueOverTime.AddPointToPlot(new Vector2(PlotValueOverTime.GetLastAddedPointX() + 1f, msg.Integrity)); ColorState.LoadMovingPoint(new Vector2(msg.Matter.Value, msg.InternalEnergy.Value), new Vector2(msg.Matter.Derivative, msg.InternalEnergy.Derivative)); + SetMessageDataToTextInfo(msg); + } + + private void SetMessageDataToTextInfo(SuperMatterObserverUpdateState msg) + { + NameLabel.SetMessage(_localization.GetString("smObserver-name", ("name", msg.Name))); + IntegrityLabel.SetMessage(_localization.GetString("smObserver-integrity", ("value", msg.Integrity))); + PressureLabel.SetMessage(_localization.GetString("smObserver-pressure", ("value", msg.Pressure))); + TemperatureLabel.SetMessage(_localization.GetString("smObserver-temperature", ("value", msg.Temperature))); + MatterLabel.SetMessage(_localization.GetString("smObserver-matter", ("value", msg.Matter.Value))); + InternalEnergyLabel.SetMessage(_localization.GetString("smObserver-internalEnergy", ("value", msg.InternalEnergy.Value))); + DelamStatus.SetMessage(_localization.GetString("smObserver-delamStatus", + ("status", msg.Delaminate.Delaminates), ("ETA", msg.Delaminate.ETOfDelamination))); + } + private void SetMessageDataToTextInfo() + { + NameLabel.SetMessage(_localization.GetString("smObserver-integrity-none")); + IntegrityLabel.SetMessage(_localization.GetString("smObserver-integrity-none")); + PressureLabel.SetMessage(_localization.GetString("smObserver-pressure-none")); + TemperatureLabel.SetMessage(_localization.GetString("smObserver-temperature-none")); + MatterLabel.SetMessage(_localization.GetString("smObserver-matter-none")); + InternalEnergyLabel.SetMessage(_localization.GetString("smObserver-internalEnergy-none")); + DelamStatus.SetMessage(_localization.GetString("smObserver-delamStatus-none")); } private float GetIntegrityDamageMap(float matter, float internalEnergy) { return SuperMatterFunctions.EnergyToMatterDamageFactorFunction( internalEnergy - SuperMatterFunctions.SafeInternalEnergyToMatterFunction(matter / SuperMatterFunctions.MatterNondimensionalization)); } + private void InitGasRatioBars() + { + foreach (var gas in Enum.GetValues()) + { + var gasBar = MakeGasRatioProgressBar(gas); + GasContainer.AddChild(gasBar); + } + } + private void UpdateGasRatioBars(Dictionary gasRatios) + { + foreach (var gasBar in GasContainer.Children) + { + if (gasBar.GetType() != typeof(GasBar)) + return; + + ((ProgressBar)gasBar).SetAsRatio(gasRatios[((GasBar)gasBar).GasId]); + } + } + private ProgressBar MakeGasRatioProgressBar(Gas gas) + { + + if (TryGetStyleProperty(ProgressBar.StylePropertyBackground, out var retBackground)) + retBackground.BackgroundColor = Color.FromHex("#2B2A26"); + else + retBackground = new StyleBoxFlat(Color.FromHex("#2B2A26")); + if (TryGetStyleProperty(ProgressBar.StylePropertyForeground, out var retForeground)) + retForeground.BackgroundColor = GasBarColors.TryGetValue(gas, out var color) ? color : Color.ForestGreen; + else + retForeground = new StyleBoxFlat(GasBarColors.TryGetValue(gas, out var color) ? color : Color.ForestGreen); + retForeground.BorderThickness = new Thickness(2f, 2f, 0f, 4f); + retBackground.BorderThickness = new Thickness(2f, 2f, 0f, 4f); + var gasBar = new GasBar + { + GasId = gas, + HorizontalExpand = true, + VerticalExpand = true, + MinValue = 0f, + MaxValue = 1f, + MinHeight = 20f, + Page = 0f, + Value = 0.5f, + BackgroundStyleBoxOverride = retBackground, + ForegroundStyleBoxOverride = retForeground, + }; + + var gasLabel = new Label + { + Margin = new Thickness(2f, 2f, 0f, 14f), + Text = gas.ToString(), + }; + gasBar.AddChild(gasLabel); + return gasBar; + } private sealed class ServerButton : Button { public SuperMatterObserverComponent? ObserverComponent; @@ -102,4 +200,10 @@ private sealed class CrystalButton : Button { public int CrystalKey; } + private sealed class GasBar : ProgressBar + { + public Gas GasId; + } } + + diff --git a/Content.Client/SS220/UserInterface/PlotFigure/Plot.cs b/Content.Client/SS220/UserInterface/PlotFigure/Plot.cs index 7a56408076e61f..2802f1b8072da4 100644 --- a/Content.Client/SS220/UserInterface/PlotFigure/Plot.cs +++ b/Content.Client/SS220/UserInterface/PlotFigure/Plot.cs @@ -11,7 +11,7 @@ internal abstract class Plot : Control { [Dependency] internal readonly IResourceCache ResourceCache = default!; public Color AxisColor = Color.WhiteSmoke; - public List AxisSteps = new() { 0.2f, 0.4f, 0.6f, 0.8f }; + public List AxisSteps = new() { 0.2f, 0.4f, 0.6f, 0.8f, 1f}; public float AxisBorderPosition = 20f; public float AxisThickness = 4f; public float SerifSize = 5f; @@ -64,11 +64,11 @@ internal void DrawAxis(DrawingHandleScreen handle, LabelContainer? mainLabels = foreach (var step in AxisSteps) { // X - DrawAxisLine(handle, CorrectVector(PixelWidth * step + AxisBorderPosition, AxisBorderPosition), - CorrectVector(PixelWidth * step + AxisBorderPosition, AxisBorderPosition + SerifSize)); + DrawAxisLine(handle, InsideVector(PixelWidth * step, 0f), + InsideVector(PixelWidth * step, SerifSize)); // Y - DrawAxisLine(handle, CorrectVector(AxisBorderPosition, PixelHeight * step), - CorrectVector(AxisBorderPosition + SerifSize, PixelHeight * step)); + DrawAxisLine(handle, InsideVector(0f, PixelHeight * step), + InsideVector(SerifSize, PixelHeight * step)); } // adding labels AddAxisLabels(handle, mainLabels); @@ -80,7 +80,7 @@ private void AddAxisLabels(DrawingHandleScreen handle, LabelContainer? labels) if (labels == null) return; if (labels.YLabel != null) - handle.DrawString(AxisFont, CorrectVector(AxisBorderPosition + SerifSize, PixelHeight - SerifSize), labels.YLabel, AxisColor); + handle.DrawString(AxisFont, CorrectVector(AxisBorderPosition + SerifSize, PixelHeight - AxisBorderPosition), labels.YLabel, AxisColor); if (labels.XLabel != null) handle.DrawString(AxisFont, CorrectVector(PixelWidth - FontSize * 3f / 4f * labels.XLabel.Length, 2f * AxisBorderPosition + SerifSize), labels.XLabel, AxisColor); if (labels.Title != null) @@ -90,6 +90,7 @@ internal Vector2 CorrectVector(float x, float y) { return new Vector2(GetCorrectX(x), GetCorrectY(y)); } + internal Vector2 CorrectVector(Vector2 vector) { return new Vector2(GetCorrectX(vector.X), GetCorrectY(vector.Y)); @@ -102,6 +103,24 @@ internal float GetCorrectY(float y) { return Math.Clamp(PixelHeight - y, 0f, PixelHeight); } + /// Helps with resizing into axises plot + internal Vector2 InsideVector(float x, float y) + { + return new Vector2(GetInsideX(x), GetInsideY(y)); + } + internal Vector2 InsideVector(Vector2 vector) + { + return new Vector2(GetInsideX(vector.X), GetInsideY(vector.Y)); + } + internal float GetInsideX(float x) + { + return GetCorrectX(x) / PixelWidth * (PixelWidth - 2 * AxisBorderPosition) + AxisBorderPosition; + } + internal float GetInsideY(float y) + { + y = Math.Clamp(y, 0f, MaxHeight); + return GetCorrectY(y / PixelHeight * (PixelHeight - 3 * AxisBorderPosition) + AxisBorderPosition); + } private void DrawArrowHeadHat(DrawingHandleScreen handle, Vector2 from, Vector2 to, float arrowRange, Color color, Vector2 perpendicularClockwise) { DrawTriangleStrip(handle, [ to + perpendicularClockwise * arrowRange, diff --git a/Content.Client/SS220/UserInterface/PlotFigure/PlotSequencedView.cs b/Content.Client/SS220/UserInterface/PlotFigure/PlotSequencedView.cs index b40307ef66a40d..2071bb5ea3144d 100644 --- a/Content.Client/SS220/UserInterface/PlotFigure/PlotSequencedView.cs +++ b/Content.Client/SS220/UserInterface/PlotFigure/PlotSequencedView.cs @@ -64,16 +64,17 @@ protected override void Draw(DrawingHandleScreen handle) if (!(PixelWidth - AxisBorderPosition > 0)) return; - var yMaxResult = (yMax + 0.1f) * 1.1f ?? 0.1f; + var yMaxResult = (yMax + 0.1f) ?? 0.1f; var xWidthResult = xWidth ?? 1f; - var deltaXWidth = (PixelWidth - (float) AxisBorderPosition) / _plotPoints.Point2Ds.Count; + + var deltaXWidth = PixelWidth / _plotPoints.Point2Ds.Count; var yNormalizer = PixelHeight / yMaxResult; var point2Ds = _plotPoints.Point2Ds; for (var i = 1; i < point2Ds.Count; i++) { - var firstPoint = CorrectVector(deltaXWidth * (i - 1) + AxisBorderPosition, point2Ds[i - 1].Y * yNormalizer); - var secondPoint = CorrectVector(deltaXWidth * i + AxisBorderPosition, point2Ds[i].Y * yNormalizer); + var firstPoint = InsideVector(deltaXWidth * (i - 1), point2Ds[i - 1].Y * yNormalizer); + var secondPoint = InsideVector(deltaXWidth * i, point2Ds[i].Y * yNormalizer); DrawFirstGraphicLine(handle, firstPoint, secondPoint); } @@ -88,9 +89,9 @@ private void DrawAxis(DrawingHandleScreen handle, float maxY, float xWidth) foreach (var step in AxisSteps) { // X - handle.DrawString(_font, CorrectVector(PixelWidth * step, AxisBorderPosition), $"{step * xWidth - xWidth:0.}"); + handle.DrawString(_font, InsideVector(PixelWidth * step, 0), $"{step * xWidth - xWidth:0.}"); // Y - handle.DrawString(_font, CorrectVector(AxisBorderPosition + SerifSize, PixelHeight * step), $"{step * maxY:0.}"); + handle.DrawString(_font, InsideVector(SerifSize, PixelHeight * step), $"{step * maxY:0.}"); } } } diff --git a/Content.Client/SS220/UserInterface/PlotFigure/Pseudo3DColoredView.cs b/Content.Client/SS220/UserInterface/PlotFigure/Pseudo3DColoredView.cs index 6641612040d726..3d17e8080050c8 100644 --- a/Content.Client/SS220/UserInterface/PlotFigure/Pseudo3DColoredView.cs +++ b/Content.Client/SS220/UserInterface/PlotFigure/Pseudo3DColoredView.cs @@ -54,8 +54,8 @@ public void LoadMovingPoint(Vector2 position, Vector2 moveDirection) || position.Y > _cachedParams.y.Offset + (_cachedParams.y.Size - 1) * _cachedParams.y.Step || position.X < _cachedParams.x.Offset || position.Y < _cachedParams.x.Offset) { - MakeMeshgrid((MakeOffsetFromCoord(position.X, _initCachedParams.x.Offset), _initCachedParams.x.Size, _initCachedParams.x.Step), - (MakeOffsetFromCoord(position.Y, _initCachedParams.x.Offset), _initCachedParams.y.Size, _initCachedParams.y.Step)); + MakeMeshgrid((MakeOffsetFromCoord(position.X, _initCachedParams.x), _initCachedParams.x.Size, _initCachedParams.x.Step), + (MakeOffsetFromCoord(position.Y, _initCachedParams.y), _initCachedParams.y.Size, _initCachedParams.y.Step)); if (_cachedFunction != null) EvalFunctionOnMeshgrid(_cachedFunction); } @@ -70,10 +70,10 @@ public void LoadMovingPoint(Vector2 position, Vector2 moveDirection) _movingPoint?.Update(position, moveDirection); } /// Make sure that we wont get into wrong position by changing Meshgrid - private float MakeOffsetFromCoord(float coord, float min) + private float MakeOffsetFromCoord(float coord, (float Min, float Size, float Step) parameters) { // TODO Make it to variables of plot and add difference between X and Y - return Math.Clamp(coord - _cachedParams.x.Size / 2 * _cachedParams.x.Step, min, float.PositiveInfinity); + return Math.Clamp(coord - parameters.Size / 2f * parameters.Step, parameters.Min, float.PositiveInfinity); } public void DeleteMovingPoint() => _movingPoint = null; @@ -99,6 +99,7 @@ protected override void Draw(DrawingHandleScreen handle) Colormap.GetCorrespondingColor((_curPoint.Z - _minZ) / (_maxZ - _minZ))); } } + DrawAxis(handle, _color2DPoint); if (_movingPoint != null) { _movingPoint.DrawMovingDirection(handle); @@ -108,11 +109,10 @@ protected override void Draw(DrawingHandleScreen handle) foreach (var step in AxisSteps) { // X - handle.DrawString(AxisFont, CorrectVector(PixelWidth * step, AxisBorderPosition), $"{_color2DPoint.X[(int) (_color2DPoint.X.Count * step)]:0.}"); + handle.DrawString(AxisFont, InsideVector(PixelWidth * step, 0f), $"{_color2DPoint.X[(int)((_color2DPoint.X.Count - 1) * step)]:0.}"); // Y - handle.DrawString(AxisFont, CorrectVector(AxisBorderPosition + SerifSize, PixelHeight * step), $"{_color2DPoint.Y[(int) (_color2DPoint.Y.Count * step)]:0.}"); + handle.DrawString(AxisFont, InsideVector(SerifSize, PixelHeight * step), $"{_color2DPoint.Y[(int)((_color2DPoint.Y.Count - 1) * step)]:0.}"); } - base.DrawAxis(handle, _color2DPoint); } /// Adjust vector to borders also offsets it with AxisBorderPosition @@ -126,6 +126,8 @@ private float MakeToPixelRange(float coord, float curMin, float curMax, float av } private void DrawPoint(DrawingHandleScreen handle, (float X, float Y) coords, (float X, float Y) size, Color color) { + size.X *= 1.05f; + size.Y *= 1.05f; _uIBox2 = UIBox2.FromDimensions(coords.X - size.X / 2, coords.Y + size.Y / 2, size.X, size.Y); handle.DrawRect(_uIBox2, color, true); } diff --git a/Content.Server/SS220/SuperMatter/Crystal/SuperMatterInterior/SuperMatterInternalProcess.cs b/Content.Server/SS220/SuperMatter/Crystal/SuperMatterInterior/SuperMatterInternalProcess.cs index 26aa4f118c5deb..6665567c60d6c6 100644 --- a/Content.Server/SS220/SuperMatter/Crystal/SuperMatterInterior/SuperMatterInternalProcess.cs +++ b/Content.Server/SS220/SuperMatter/Crystal/SuperMatterInterior/SuperMatterInternalProcess.cs @@ -129,7 +129,7 @@ private static float DeltaChemistryPotentialFunction(float temperature, float pr var normalizedPressure = pressure / TriplePointPressure; var normalizedCombined = normalizedPressure * normalizedTemperature / ChemistryPotentialCombinedStretchCoeff; - return ChemistryPotentialCoeff * MathF.Pow(normalizedCombined, 2) * MathF.Exp(MathF.Pow(normalizedCombined, 2)); + return ChemistryPotentialCoeff * MathF.Pow(normalizedCombined, 2) * MathF.Exp(-MathF.Pow(normalizedCombined, 2)); } private const float ReleaseEnergyConversionEfficiencyCoeff = 0.01f; diff --git a/Content.Server/SS220/SuperMatter/Crystal/SuperMatterSystem.EventHandlers.cs b/Content.Server/SS220/SuperMatter/Crystal/SuperMatterSystem.EventHandlers.cs index 9250df74898e5d..b3cc74624bb8d2 100644 --- a/Content.Server/SS220/SuperMatter/Crystal/SuperMatterSystem.EventHandlers.cs +++ b/Content.Server/SS220/SuperMatter/Crystal/SuperMatterSystem.EventHandlers.cs @@ -33,7 +33,9 @@ private void OnComponentInit(Entity entity, ref ComponentI if (!TryComp(uid, out arcShooterComponent)) arcShooterComponent = AddComp(uid); - radiationSource.Enabled = false; + radiationSource.Intensity = 1f; + radiationSource.Slope = 1f; + radiationSource.Enabled = true; arcShooterComponent.Enabled = false; arcShooterComponent.ShootRange = 3f; entity.Comp.InternalEnergy = GetSafeInternalEnergyToMatterValue(entity.Comp.Matter); @@ -45,7 +47,7 @@ private void OnHandInteract(Entity entity, ref InteractHan } private void OnItemInteract(Entity entity, ref InteractUsingEvent args) { - entity.Comp.Matter += MatterNondimensionalization / 10f; + entity.Comp.Matter += MatterNondimensionalization / 5f; ConsumeObject(args.User, entity); } private void OnCollideEvent(Entity entity, ref StartCollideEvent args) @@ -53,9 +55,9 @@ private void OnCollideEvent(Entity entity, ref StartCollid if (args.OtherBody.BodyType == BodyType.Static) return; if (TryComp(args.OtherEntity, out var projectile)) - entity.Comp.InternalEnergy += CHEMISTRY_POTENTIAL_BASE * MathF.Max((float) projectile.Damage.GetTotal(), 0f); + entity.Comp.InternalEnergy += CHEMISTRY_POTENTIAL_BASE * MathF.Max(4f * (float)projectile.Damage.GetTotal(), 0f); - entity.Comp.Matter += MatterNondimensionalization / 10f; + entity.Comp.Matter += MatterNondimensionalization / 5f; ConsumeObject(args.OtherEntity, entity, false); } private void OnActivationEvent(Entity entity, ref SuperMatterActivationEvent args) diff --git a/Content.Server/SS220/SuperMatter/Crystal/SuperMatterSystem.Integrity.cs b/Content.Server/SS220/SuperMatter/Crystal/SuperMatterSystem.Integrity.cs index d7878544e27079..add8457e5f679d 100644 --- a/Content.Server/SS220/SuperMatter/Crystal/SuperMatterSystem.Integrity.cs +++ b/Content.Server/SS220/SuperMatter/Crystal/SuperMatterSystem.Integrity.cs @@ -38,8 +38,8 @@ public float GetIntegrity(SuperMatterComponent smComp) return MathF.Round(smComp.Integrity, 2); } - private const float MaxDamagePerSecond = 1.5f; - private const float MaxRegenerationPerSecond = 1.5f; + private const float MaxDamagePerSecond = 0.7f; + private const float MaxRegenerationPerSecond = 1.2f; /// Based lie, negative damage = heal, no exception will thrown /// Return false only if SM integrity WILL fall below zero, but wont set it to zero private bool TryImplementIntegrityDamage(SuperMatterComponent smComp) diff --git a/Content.Server/SS220/SuperMatter/Crystal/SuperMatterSystem.Thermodynamics.cs b/Content.Server/SS220/SuperMatter/Crystal/SuperMatterSystem.Thermodynamics.cs index 95c07b5b5faaa1..d5bc87abb1b66a 100644 --- a/Content.Server/SS220/SuperMatter/Crystal/SuperMatterSystem.Thermodynamics.cs +++ b/Content.Server/SS220/SuperMatter/Crystal/SuperMatterSystem.Thermodynamics.cs @@ -53,16 +53,16 @@ private void EvaluateDeltaInternalEnergy(Entity crystal, G var deltaInternalEnergy = (smDeltaT * (matterToTemperatureRatio - newMatterToTemperatureRatio) * smComp.InternalEnergy - chemistryPotential * normalizedDeltaMatter) / (1 + newMatterToTemperatureRatio * smDeltaT); - smComp.InternalEnergy += deltaInternalEnergy * frameTime; if (smComp.InternalEnergy < 0) { // TODO loc it Log.Error($"Internal Energy of SuperMatter {crystal} became negative, forced to truthish value."); SendAdminChatAlert(crystal, "Physics law breaking! If it possible ask how they do it and convey it to developer"); + smComp.Matter += 20 * MatterNondimensionalization; smComp.InternalEnergy = EvaluateTruthishInternalEnergy(crystal); } - smComp.Matter = MathF.Max(smComp.Matter + deltaMatter * frameTime, MatterNondimensionalization); // actually should go boom at this low, but... + smComp.Matter = MathF.Max(smComp.Matter + deltaMatter * frameTime, 4 * MatterNondimensionalization); // actually should go boom at this low, but... smComp.Temperature = Math.Clamp(smComp.Temperature + smDeltaT * frameTime, Atmospherics.TCMB, Atmospherics.Tmax); // weird but okay _atmosphere.AddHeat(gasMixture, -crystalHeatFromGas * frameTime); } diff --git a/Content.Server/SS220/SuperMatter/Crystal/SuperMatterSystem.cs b/Content.Server/SS220/SuperMatter/Crystal/SuperMatterSystem.cs index 2d65a01b1f735c..7bf859c81df9c9 100644 --- a/Content.Server/SS220/SuperMatter/Crystal/SuperMatterSystem.cs +++ b/Content.Server/SS220/SuperMatter/Crystal/SuperMatterSystem.cs @@ -30,16 +30,17 @@ public override void Initialize() public override void Update(float frameTime) { base.Update(frameTime); - + // 0.033f corresponds to 30 ticks per second. Just in case if server got very laggy + var flooredFrameTime = MathF.Min(frameTime, 0.033f); var query = EntityQueryEnumerator(); while (query.MoveNext(out var uid, out var smComp)) { var crystal = new Entity(uid, smComp); - UpdateDelayed(crystal, frameTime); + UpdateDelayed(crystal, flooredFrameTime); if (!smComp.Activated) continue; - SuperMatterUpdate(crystal, frameTime); + SuperMatterUpdate(crystal, flooredFrameTime); } } @@ -50,7 +51,7 @@ private void SuperMatterUpdate(Entity crystal, float frame return; if (!TryGetCrystalGasMixture(crystal.Owner, out var gasMixture)) { - Log.Error($"Got null GasMixture in {crystal}. AddedComponentToGetIt"); + Log.Error($"Got null GasMixture in {crystal}"); return; } @@ -62,12 +63,11 @@ private void SuperMatterUpdate(Entity crystal, float frame var decayedMatter = CalculateDecayedMatter(crystal, gasMixture) * frameTime; // this method make changes in SM parameters! EvaluateDeltaInternalEnergy(crystal, gasMixture, frameTime); - var smState = SuperMatterFunctions.GetSuperMatterPhase(crystal.Comp.Temperature, gasMixture.Pressure); var crystalTemperature = crystal.Comp.Temperature; var pressure = gasMixture.Pressure; - var releasedEnergyPerFrame = crystal.Comp.InternalEnergy * GetReleaseEnergyConversionEfficiency(crystalTemperature, pressure) + var releasedEnergyPerFrame = 0.1f * crystal.Comp.InternalEnergy * GetReleaseEnergyConversionEfficiency(crystalTemperature, pressure) * (SuperMatterGasResponse.GetGasInfluenceReleaseEnergyEfficiency(crystal.Comp, gasMixture) + 1); crystal.Comp.AccumulatedRadiationEnergy += releasedEnergyPerFrame * GetZapToRadiationRatio(crystalTemperature, pressure, smState); crystal.Comp.AccumulatedZapEnergy += releasedEnergyPerFrame * (1 - GetZapToRadiationRatio(crystalTemperature, pressure, smState)); @@ -138,6 +138,7 @@ private void ReleaseEnergy(Entity crystal) private void EjectGases(float decayedMatter, float crystalTemperature, SuperMatterPhaseState smState, GasMixture gasMixture) { var pressure = gasMixture.Pressure; + // TODO make 4f to variable! var oxygenMoles = decayedMatter * GetOxygenToPlasmaRatio(crystalTemperature, pressure, smState); var plasmaMoles = decayedMatter * (1 - GetOxygenToPlasmaRatio(crystalTemperature, pressure, smState)); var heatEnergy = GetChemistryPotential(crystalTemperature, gasMixture.Pressure) * decayedMatter / MatterNondimensionalization; diff --git a/Content.Shared/SS220/SuperMatter/Functions/SuperMatterFunctions.cs b/Content.Shared/SS220/SuperMatter/Functions/SuperMatterFunctions.cs index 93afac09a1e7e4..13364a0af2d813 100644 --- a/Content.Shared/SS220/SuperMatter/Functions/SuperMatterFunctions.cs +++ b/Content.Shared/SS220/SuperMatter/Functions/SuperMatterFunctions.cs @@ -88,7 +88,7 @@ public static float ResonanceTeslaEquilibriumPressureFunction(float temperature) (float) MathF.Pow(temperature + ResonanceTeslaEquilibriumTemperatureOffset, 0.7f); } //region Integrity - private const float EnergyToMatterDamageFactorWide = 1000f; + private const float EnergyToMatterDamageFactorWide = 2000f; private const float EnergyToMatterDamageFactorCoeff = 2f; private const float EnergyToMatterDamageFactorOffset = 1f; public static float EnergyToMatterDamageFactorFunction(float delta) diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml index a61647df2301ac..6ec8dae9d6f2e3 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml @@ -308,6 +308,10 @@ types: Heat: 14 # mining laser real + # SS220 SM-Crystal-begin + - type: SuperMatterSpecificConsumable + additionalMatterOnConsumption: 8 + # SS220 SM-Crystal-end - type: GatheringProjectile - type: Tag tags: diff --git a/Resources/Prototypes/SS220/Entities/Structures/Specific/supermatter_crystal.yml b/Resources/Prototypes/SS220/Entities/Structures/Specific/supermatter_crystal.yml index 48d382a494b2a3..cbf7256b3661a7 100644 --- a/Resources/Prototypes/SS220/Entities/Structures/Specific/supermatter_crystal.yml +++ b/Resources/Prototypes/SS220/Entities/Structures/Specific/supermatter_crystal.yml @@ -35,19 +35,24 @@ - type: SuperMatter # all things like radiation source etc will be added through SMSystem - type: HallucinationSource weightedRandom: HallucinationSupermatterCrystal - range: 6 - rangeEnd: 8 + range: 7 + rangeEnd: 9 betweenHallucinations: 4 hallucinationMinTime: 2 hallucinationMaxTime: 10 totalDuration: 20 eyeProtectionDependent: true - type: Sprite - sprite: SS220/Objects/Specific/jerrycan.rsi - state: icon + sprite: SS220/Objects/Specific/Supermatter/crystal.rsi + state: base - type: Icon - sprite: SS220/Objects/Specific/jerrycan.rsi + sprite: SS220/Objects/Specific/Supermatter/crystal.rsi state: icon + - type: PointLight + enabled: true + radius: 10 + energy: 5 + color: "#ffe000" - type: Speech speechSounds: Pai - type: IntrinsicRadioTransmitter diff --git a/Resources/Textures/SS220/Objects/Specific/Supermatter/crystal.rsi/base.png b/Resources/Textures/SS220/Objects/Specific/Supermatter/crystal.rsi/base.png new file mode 100644 index 0000000000000000000000000000000000000000..42c2f4e813783202e7774762ee5ed6ef918582e6 GIT binary patch literal 6175 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/SS220/Objects/Specific/Supermatter/crystal.rsi/field.png b/Resources/Textures/SS220/Objects/Specific/Supermatter/crystal.rsi/field.png new file mode 100644 index 0000000000000000000000000000000000000000..38f05a6230acc19e2c7eb86eb266216f87a3c8d0 GIT binary patch literal 557 zcmeAS@N?(olHy`uVBq!ia0vp^4M1$b!3HF6eks}qq!^2X+?^QKos)S9WIy+GaSW-L z^LE-sFJ?y(*Y|pvs(X7wS)@dN|`{TLapPu_0H^XXraaoM?tb%AGkeq3g*PdT!F?fdvP z_NNQli!PiFlJEZU^XFUvxof|_nw{SHW80r+tQ`9<)a}h(wsh@hlSj8dEEZR|eP!+s z){gn}@AEXwpB7Up^)dHH5kt{FnT9#~>h2!;T$QbIRLA%T}v0EU;c9u&np<-K@^@{mX$$ zx0kOsR{rjBovte=$h_9eAK2KKlNCAL-h= zvSDX~FCMD|x$rEP#n$FqR{sAvfu4BE@TA7FK}I3(i|J{;6oiu<_yo*<%}Qn8^ck#z z!7`ptfxSbz_UtC+n+Q)$U_R2jFYRXIn;J`y3WsyknNKi2a*N;m#-R);6l51jGDxV% zFeujbP0l+XkKFF*e@ literal 0 HcmV?d00001 diff --git a/Resources/Textures/SS220/Objects/Specific/Supermatter/crystal.rsi/glow.png b/Resources/Textures/SS220/Objects/Specific/Supermatter/crystal.rsi/glow.png new file mode 100644 index 0000000000000000000000000000000000000000..7a1f1babb3f6ceafdddc59e4e4bd3b2f01a2e708 GIT binary patch literal 8727 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 B1RDSV literal 0 HcmV?d00001 diff --git a/Resources/Textures/SS220/Objects/Specific/Supermatter/crystal.rsi/icon.png b/Resources/Textures/SS220/Objects/Specific/Supermatter/crystal.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..e1426eeb71b0407874ab8918b0f5aa7b4fb6de6e GIT binary patch literal 2712 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 Qe*gdg07*qoM6N<$f|xzkJ^%m! literal 0 HcmV?d00001 diff --git a/Resources/Textures/SS220/Objects/Specific/Supermatter/moth_stat_display.rsi/broken.png b/Resources/Textures/SS220/Objects/Specific/Supermatter/moth_stat_display.rsi/broken.png new file mode 100644 index 0000000000000000000000000000000000000000..905d8136bc5dd061f4c78523317a6ef9765266c3 GIT binary patch literal 632 zcmeAS@N?(olHy`uVBq!ia0y~yU;;836gZfHWbjmj>p+UJILO_JVcj{Imq3m|fKQ04 zg@HpsM!|*^8$1?V*sx*4fddCl9N6*W#}A-9R`Azk#ay6-KuM5a@P8;^fYPtCwiE&F zxaH~M7*a9k?d;yNW(A(sw@-TZ{ujPuLoy#Z}uVNd=snLHrpDn_Zi*vzeZqMxxt};B}4PjovXqUtA zTmK=`yYqgX_Ez-?|56%~*w<8-7&LUpm^lbsWRU&D{_H+)fGM*-tBsucCnvTANBXB8 zm-zg>#D0Pl!=e3>3l{ym_CI_Jqp0?Ynf@se0ndM|YiPT}AYdo4pp5C+_k?G1_ck$b z9P1Z9A$nngbi+aJecTfw4q37#9PtkU3o#tjSMoNPzJDF#yvZFFbqxFdN-bF0P??~Z&%74<)5>$9hRw8L2ICISIltWR9-gftKHs`7A?^Z${I039pIGnVULk95 zaQ`I372B9o480$BK4yQmbUVW{xpRgL%68>{HZFcCZE&^bp@?bCJCRQ7#%ufK)Gt=e z2{iki=))^ yrX1+RI{k#AI%9@FJI1Gpm4EXdJPBgmnG8K)eqU{Jf_AU~V&OFWb6t6%Px(ok>JNRA_RbpQ_mB zLP;^kmp-b6KIl^^2n_|TD}5-|R%6>m}$6vwM+dQfs~4^+nc84EN2cl`_1<>Ha3J2Xqv$ARUkAS zsd-sfR4fA*PlzlOB|x}CAp_0SY_2Sg2nkTO#j__9IL{QyQYgzoS71+C*rtU$X`vDc zGzZ)Xg)+Tyw&{QaljelyE62{3bqVA`2AZ+&T%K!M1rxf`yWsc8D?qrzldbWCsf|+x znu&zYENoQIF%XSS>$e>YCR?^wzmD{tWeOg}A7Pp%0B0`Vo;Gh?ZFN@vd6$3;bRh%H zKuU~upq-k{mBr>UFQk&!4S{YL2;D&Qc>)-Q!7Ei&tn=3burIi=AfI^!uV1i(os99y9rh3nYZ2^bt6^n_FhQ@%G=a5oy)W^?pJ#>q%r>{-3w;c@f)ps`m*zJGJczlTZcprCH z?**W4X9JZhmckF2KJyAtv$@hsK3VdS(3WKTC;&%J*UdGjqPV+yFGS9C?vXq9)mK_j0|+81&M^t@XMt?W}V1f>Fd5i)5=@a?QEcK z+cqAqTFRGSe9H3GYtzXWO3n(ndc6xaf*;`hUf>9lWIuJ@TAB)|+u4wA+cY3Uhlxe{ z*s-M_fb*Xn0z6@gNgnbDuzhROY+{{P*1WzBZGBaS-EKL?j!7^18|O{|8jh=Qtud|? zd5@z13YQCSzI%{e`&&s&K1CN6t~JK4{jId`db=n;FQfo6bQpm1m%PnS2r;dnx?Tt` zoB%R(m}>t9o;>-JP4ycXiS_erVuF!aKbz`3d$oT(Z-Q4f&X5{yQ?EXp_{Cp9M z^zq}#j{z8u4>1rQ0-)pD8?1?aogR0;v-=-?mAwEnlh~sRejc+S(l^a+z0uA)H6#4= zt7i}Bg1gUMzt;00Yq^*85|~-G@7dm)=v%8KqvKBc0Px*BnlV2$J|AUW0oQsSu;wM5 zwgbWBPZdmGtIsiK&!JO18l8G8+(-WRg0ijvfI}Y!aRD?~E(I%+2Y?|36+VHH>@TSh z2t!c4wu)D4YtugRy&0Ch00Ph?NX@`P<1be+3Fy*C!d95B22vuWz_DTY;V_PC;9#)6 zHdmcYQT76~etrQGU?&nJEXQkG3fr_mfonP>CKA||A~rmXX_`c%{oIT8(;xM=!4qe5 ze_1N)Js?Hvi3bP0 Hl+XkKW{V&j literal 0 HcmV?d00001 diff --git a/Resources/Textures/SS220/Objects/Specific/Supermatter/moth_stat_display.rsi/num_1.png b/Resources/Textures/SS220/Objects/Specific/Supermatter/moth_stat_display.rsi/num_1.png new file mode 100644 index 0000000000000000000000000000000000000000..e1229d80cdc2d0fc64352a9fe86f3ed27a4503a9 GIT binary patch literal 115 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH$P6TB1iv{Bq}T#{LR=3VIPm}ff9=fnEkF^* zk|4ie28U-i(tsRkPZ!4!iK)p63$!yDF7@!fP^ysVVb6Fb*Tle}r_6kq`9eqpP#J@# LtDnm{r-UW|;F}>~ literal 0 HcmV?d00001 diff --git a/Resources/Textures/SS220/Objects/Specific/Supermatter/moth_stat_display.rsi/num_2.png b/Resources/Textures/SS220/Objects/Specific/Supermatter/moth_stat_display.rsi/num_2.png new file mode 100644 index 0000000000000000000000000000000000000000..6644e3b4b551702846cdd4fc24c1ef296a6f958e GIT binary patch literal 120 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH$P6TB1iv{Bq}T#{LR=3VIPm}ff9=fnEkF^* zk|4ie28U-i(m-lGT^vIsrY0vWP*2EdFq$Eg;KU~p#PfpZ8S|E6K}80Jh$l=wA|u6{1-oD!MFVdQ&MBb@00y`r00000 literal 0 HcmV?d00001 diff --git a/Resources/Textures/SS220/Objects/Specific/Supermatter/moth_stat_display.rsi/num_7.png b/Resources/Textures/SS220/Objects/Specific/Supermatter/moth_stat_display.rsi/num_7.png new file mode 100644 index 0000000000000000000000000000000000000000..d2321ac4e32be428524ec2ae3fd9a51de4439aa3 GIT binary patch literal 115 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH$P6TB1iv{Bq}T#{LR=3VIPm}ff9=fnEkF^* zk|4ie28U-i(tsRkPZ!4!iK)p63)BbP0 Hl+XkKV+bF# literal 0 HcmV?d00001 diff --git a/Resources/Textures/SS220/Objects/Specific/Supermatter/moth_stat_display.rsi/num_9.png b/Resources/Textures/SS220/Objects/Specific/Supermatter/moth_stat_display.rsi/num_9.png new file mode 100644 index 0000000000000000000000000000000000000000..135673a8fb469bdd40f9e047652761c77828e367 GIT binary patch literal 118 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH$P6TB1iv{Bq}T#{LR=3VIPm}ff9=fnEkF^* zk|4ie28U-i(tsQ}PZ!4!iK)p63)B;G8jNPhT#)QxPv`b(vD{o|K^d_3F!<G9;Y=n|s0K`yU^4<#9>Xjao6W{?oTc4t zGwZFMFyR)$%3v_8CcS5={|izE_PRY@v2*FEN8JAnz`q^y+?Meo0LT+b@v%qIYqQr* z=U){t4v8O9qnf3fz=Ltevl^OD)u&XayjY*R;͵JROS=Yu*+A8|gHz1qe-TVVKA zr~u%XxI!8LxG%{|!=^AmX)F#{$!wyL{-nYujJKM+CcuYs((jf7o^1IKS1lI2Wd{|k zhdURB%hc-?)K7bj><+tX9OE8O3I(fP^HF78Cvpli&#p;%nf%Ajz)mBjl5W%g>HOhx zsx;&ku-rZ06t>sCeqGVKUMJjBEN2l@OH$B(gM>$YnO65e+k8MdooFb{kgPkM zsRxdD`|~6CdH5GKom;Q+dmPa_x0kI3{LBrH!@qOJiE9{b&~M_$M8KF!?rze{hwURn zHSh0xd(%w9?Wy05;c&O?#I3mnd|Ld%2yJ=%!cQfieZ@tevAY9xQhUU};)i!b-A)R6 zMn1T;J$yBhO>R>-a@;Ze&9H|e9k z;RWuIu4X%OVL7_;0X(r7By&9RB^SKhQAtD)BEDnWj}MTc?y-iR4yF(ZrQn%y?K81D0*0Ig@4NDpz8~1rqM@aF|cm(Vz0dXkqdy zxlO!FaVc9_B;SzDJXF+@AcnU;c83WAy3fX4Do8Q)yCOta?86(MA}Jv?zA+9i{s-gE Bb$I{) literal 0 HcmV?d00001 diff --git a/Resources/Textures/SS220/Objects/Specific/Supermatter/stat_display.rsi/broken.png b/Resources/Textures/SS220/Objects/Specific/Supermatter/stat_display.rsi/broken.png new file mode 100644 index 0000000000000000000000000000000000000000..7a62f976783f8bd1973964350cee0bc2648441ea GIT binary patch literal 753 zcmeAS@N?(olHy`uVBq!ia0y~yU;;836gZfHWbjmj>p+UJILO_JVcj{Imq1QJfKQ04 zgoMO_0|y!!8Vn2^9z1y9u;2#}NHjd~@Ce9AC{WOFm@#8U!iFCe1r-bl7bGMUBm^{o zT8Rg&D`xotRV$PP`33(+2MnkJxxBKkfUXwyba4!+nDcgaZ(oyvK+9Q1R(}2uf8)Ou zu=;xMzB}#H=91$MJRg&#({_n0-o9KT`);3H!;1({2BYaL3dJBwuAxok`^}d0qt;9bUlZrpUtu`%Dckx)%>8HoD-2W^a&PxZ@98vZ;M~u{P?2sf z(3hXJU_WC8GsnH#%nZj*$};FBNar#L-{WvtC7B_5r@4@M8}9*c#_bF{8gjQV+WfF( zb}+ag&9GEsyTa=KQ+^$@-BPQ4i9xL9gj7QTqqV+YG|QnP$J=~d2TVE_@mkovuj1-3 zH3(z~yXG&^aOlmVMz%R~?ep0KF29-ot)2D3<{4ck51#xnV_Y%O@7=?_x(y-qehfB0 zGiTTEZ}_To;je_Jfq`S~_h5$#_Jo87QFXT&ZdmV;m(i0);Hzbx~}_m$oR?Add8XFOcQph cFo3Clj2(}4e;sa8x&%sip00i_>zopr0J>;8oB#j- literal 0 HcmV?d00001 diff --git a/Resources/Textures/SS220/Objects/Specific/Supermatter/stat_display.rsi/falling.png b/Resources/Textures/SS220/Objects/Specific/Supermatter/stat_display.rsi/falling.png new file mode 100644 index 0000000000000000000000000000000000000000..b4e3e610895e6b279b74d75477095cbaa9ba1bfa GIT binary patch literal 109 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH$P6TB1iv{Bq}T#{LR=3VIPm}ff9=fnEkF^* zk|4ie28U-i(tsRMPZ!4!iK)p65>f~Fj!kGZw0M!E&!F4FkbM1+b|6pzgQu&X%Q~lo FCIAc&A8r5u literal 0 HcmV?d00001 diff --git a/Resources/Textures/SS220/Objects/Specific/Supermatter/stat_display.rsi/icon.png b/Resources/Textures/SS220/Objects/Specific/Supermatter/stat_display.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..06994bcb5a49876f367a004e16a7245462aaa1b6 GIT binary patch literal 537 zcmV+!0_OdRP)Px$(@8`@RA_N`VHn51#z7!71Q(S_3AJ3HK}(Hd+!jHLEk?AoGz8IN|3E`g zG_(Y*6)r)vX<^WyAVS`7lVBi1c_8Gb$JyYI2wL9vo;OYJv)m8(zRz=?d+&vN0S5;M zhXKaL8b~ISI5|CUh-k(x2m5=jU@*v(VHU8uw%%A?T4as=38{1z5BGOW&m{2{ySzy9 zMuo7m8|2Dy3jlzz(FHqkGRl=#?kux_OeP1Q`S26t)7*urNu{%$-dNzC0j2jBlq(~= zaZ>8FDkf*AxUxgUz5F|b3dkocJfD4tEMXgA0`dt9lA^-vmwQ@*FaeUH!qnrUh9`qe zKt5q1pRj)1lN1$2&7dkF1Tq1V@&rjy0iY!!3LpxvU#2P{1Tq1p9s=LC zs#JY+4Q>H$*-hC;*Webgz1dsSK9$aL<+ug#7VI^+c7-F6NW-*-Mf78f+v_XlU10|Y bhr#9x-}ZvR+_J~k00000NkvXXu0mjfs1D~w literal 0 HcmV?d00001 diff --git a/Resources/Textures/SS220/Objects/Specific/Supermatter/stat_display.rsi/meta.json b/Resources/Textures/SS220/Objects/Specific/Supermatter/stat_display.rsi/meta.json new file mode 100644 index 00000000000000..92ec6ec0e4600a --- /dev/null +++ b/Resources/Textures/SS220/Objects/Specific/Supermatter/stat_display.rsi/meta.json @@ -0,0 +1,93 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/3f2ebd858fa918a0bd4afad227731376475d599f", + "size": { + "x": 64, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "broken", + "delays": [ + [ + 1, + 1, + 1, + 67, + 20, + 10, + 10, + 30 + ] + ] + }, + { + "name": "shame" + }, + { + "name": "off" + }, + { + "name": "num_0" + }, + { + "name": "num_1" + }, + { + "name": "num_2" + }, + { + "name": "num_3" + }, + { + "name": "num_4" + }, + { + "name": "num_5" + }, + { + "name": "num_6" + }, + { + "name": "num_7" + }, + { + "name": "num_8" + }, + { + "name": "num_9" + }, + { + "name": "rising" + }, + { + "name": "falling" + }, + { + "name": "advert1", + "delays": [ + [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 5, + 20 + ] + ] + } + ] + } diff --git a/Resources/Textures/SS220/Objects/Specific/Supermatter/stat_display.rsi/num_0.png b/Resources/Textures/SS220/Objects/Specific/Supermatter/stat_display.rsi/num_0.png new file mode 100644 index 0000000000000000000000000000000000000000..178a30e6aef3bfbe23a5a7aa379afbb0860bafd3 GIT binary patch literal 112 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH$P6TB1iv{Bq}T#{LR=3VIPm}ff9=fnEkF^* zk|4ie28U-i(tsQZPZ!4!iK)p63)B;G8jNPhcqAMsbP0 Hl+XkKW{V&j literal 0 HcmV?d00001 diff --git a/Resources/Textures/SS220/Objects/Specific/Supermatter/stat_display.rsi/num_1.png b/Resources/Textures/SS220/Objects/Specific/Supermatter/stat_display.rsi/num_1.png new file mode 100644 index 0000000000000000000000000000000000000000..e1229d80cdc2d0fc64352a9fe86f3ed27a4503a9 GIT binary patch literal 115 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH$P6TB1iv{Bq}T#{LR=3VIPm}ff9=fnEkF^* zk|4ie28U-i(tsRkPZ!4!iK)p63$!yDF7@!fP^ysVVb6Fb*Tle}r_6kq`9eqpP#J@# LtDnm{r-UW|;F}>~ literal 0 HcmV?d00001 diff --git a/Resources/Textures/SS220/Objects/Specific/Supermatter/stat_display.rsi/num_2.png b/Resources/Textures/SS220/Objects/Specific/Supermatter/stat_display.rsi/num_2.png new file mode 100644 index 0000000000000000000000000000000000000000..6644e3b4b551702846cdd4fc24c1ef296a6f958e GIT binary patch literal 120 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH$P6TB1iv{Bq}T#{LR=3VIPm}ff9=fnEkF^* zk|4ie28U-i(m-lGT^vIsrY0vWP*2EdFq$Eg;KU~p#PfpZ8S|E6K}80Jh$l=wA|u6{1-oD!MFVdQ&MBb@00y`r00000 literal 0 HcmV?d00001 diff --git a/Resources/Textures/SS220/Objects/Specific/Supermatter/stat_display.rsi/num_7.png b/Resources/Textures/SS220/Objects/Specific/Supermatter/stat_display.rsi/num_7.png new file mode 100644 index 0000000000000000000000000000000000000000..d2321ac4e32be428524ec2ae3fd9a51de4439aa3 GIT binary patch literal 115 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH$P6TB1iv{Bq}T#{LR=3VIPm}ff9=fnEkF^* zk|4ie28U-i(tsRkPZ!4!iK)p63)BbP0 Hl+XkKV+bF# literal 0 HcmV?d00001 diff --git a/Resources/Textures/SS220/Objects/Specific/Supermatter/stat_display.rsi/num_9.png b/Resources/Textures/SS220/Objects/Specific/Supermatter/stat_display.rsi/num_9.png new file mode 100644 index 0000000000000000000000000000000000000000..135673a8fb469bdd40f9e047652761c77828e367 GIT binary patch literal 118 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH$P6TB1iv{Bq}T#{LR=3VIPm}ff9=fnEkF^* zk|4ie28U-i(tsQ}PZ!4!iK)p63)B;G8jNPhT#)QxPv`LkAQzw3?2x3+PC(hY7whj?iIqtl<&l5j&`5=2+7p%_DunLEdRX zYpbbfy1<+7cdYw2ef~QC_x<@(V;PP~bZ>0Qao}LQeAA|9QO~NA6;lj+gSC`x9d=*l zo!z@D=Z$vG@z%e2+NH}yzHNBwl(2ZB1dneBpDoatcG1C|*^hs!mxNU{JpRbT@cy(o zx9FFHyKeUVeyPU%mo;V``-eX~X6vs06?0e_<(4{m*6u&Dat*r}OtBDKZ}2bpVqLSJ zbyw8{NB)E-JacVNEMR}}J<6(DW3#OIRA>GM+Yi?l#I@?4=8`{OB2qgg=bHA*@Wf*g cd-gK?^faBhe1=myFsv9nUHx3vIVCg!045fQL;wH) literal 0 HcmV?d00001 diff --git a/Resources/Textures/SS220/Objects/Specific/Supermatter/stat_display.rsi/rising.png b/Resources/Textures/SS220/Objects/Specific/Supermatter/stat_display.rsi/rising.png new file mode 100644 index 0000000000000000000000000000000000000000..13f651a57a61fe1372abb37824a497073302161c GIT binary patch literal 111 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH$P6TB1iv{Bq}T#{LR=3VIPm}ff9=fnEkF^* zk|4ie28U-i(tsRsPZ!4!iK)p65)}s+lTRFwC}Vyspu@mm-oTK&wD5=mPzi<Dnm{ Hr-UW|L{A@% literal 0 HcmV?d00001 diff --git a/Resources/Textures/SS220/Objects/Specific/Supermatter/stat_display.rsi/shame.png b/Resources/Textures/SS220/Objects/Specific/Supermatter/stat_display.rsi/shame.png new file mode 100644 index 0000000000000000000000000000000000000000..68cb670d452cf2a41d212a57acd00ffb24946713 GIT binary patch literal 194 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!VDw>HYaZfQgQ)4A+84w9PsfAY-w$F7LY8G zQkRfYo}goG#v`b#;UFU;vyXw>7^sr5B*-tA!Qt7BG$1F))5S5wqBl7~!m1%qfSF@~ zhCt9EhOQM{J%$Xkn1sbm9`vkIxS-3+yQE{0mWJE*gEb)s7la1%F