-
Notifications
You must be signed in to change notification settings - Fork 110
ГЛОБАЛ | Ивентовый детроит #568
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: develop
Are you sure you want to change the base?
Changes from 12 commits
83e9dd1
9982f40
dfea4dd
5cbed25
8c6c4c2
8e8fc8c
fb87a18
1be438f
3860b8d
7b22716
3efd244
370ecaf
43d4791
867971b
450b867
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,94 @@ | ||
| using Content.Shared.Humanoid; | ||
| using Content.Shared.Imperial.XxRaay.Android; | ||
| using Robust.Client.GameObjects; | ||
| using Robust.Shared.GameStates; | ||
|
|
||
| namespace Content.Client.Imperial.XxRaay.Android; | ||
|
|
||
| /// <summary> | ||
| /// Клиентская визуализирующая система маскировки андроида | ||
| ///</summary> | ||
| public sealed partial class AndroidDisguiseVisualizerSystem : EntitySystem | ||
| { | ||
| [Dependency] private readonly SpriteSystem _sprite = default!; | ||
|
|
||
| public override void Initialize() | ||
| { | ||
| base.Initialize(); | ||
|
|
||
| SubscribeLocalEvent<AndroidDisguiseComponent, ComponentStartup>(OnStartup); | ||
| SubscribeLocalEvent<AndroidDisguiseComponent, ComponentShutdown>(OnShutdown); | ||
| SubscribeLocalEvent<AndroidDisguiseComponent, AfterAutoHandleStateEvent>(OnAfterState); | ||
| } | ||
|
|
||
| private void OnStartup(Entity<AndroidDisguiseComponent> ent, ref ComponentStartup args) | ||
| { | ||
| var uid = (EntityUid) ent; | ||
| UpdateVisuals(uid, ent.Comp); | ||
| } | ||
|
|
||
| private void OnShutdown(Entity<AndroidDisguiseComponent> ent, ref ComponentShutdown args) | ||
| { | ||
| if (!TryComp<SpriteComponent>(ent, out var sprite)) | ||
| return; | ||
|
|
||
| var uid = (EntityUid) ent; | ||
|
|
||
| _sprite.LayerSetVisible((uid, sprite), ent.Comp.AndroidBaseLayer, true); | ||
| _sprite.LayerSetVisible((uid, sprite), ent.Comp.AndroidTransformLayer, false); | ||
| _sprite.LayerSetVisible((uid, sprite), ent.Comp.AndroidRetransformLayer, false); | ||
| SetHumanoidVisible((uid, sprite), visible: false); | ||
| } | ||
|
|
||
| private void OnAfterState(Entity<AndroidDisguiseComponent> ent, ref AfterAutoHandleStateEvent args) | ||
| { | ||
| var uid = (EntityUid) ent; | ||
| UpdateVisuals(uid, ent.Comp); | ||
| } | ||
|
|
||
| private void UpdateVisuals(EntityUid uid, AndroidDisguiseComponent comp) | ||
| { | ||
| if (!TryComp<SpriteComponent>(uid, out var sprite)) | ||
| return; | ||
|
|
||
|
|
||
| _sprite.LayerSetVisible((uid, sprite), comp.AndroidBaseLayer, | ||
| comp.State is AndroidDisguiseState.Android); | ||
|
|
||
| _sprite.LayerSetVisible((uid, sprite), comp.AndroidTransformLayer, | ||
| comp.State == AndroidDisguiseState.TransformingToHuman); | ||
| _sprite.LayerSetVisible((uid, sprite), comp.AndroidRetransformLayer, | ||
| comp.State == AndroidDisguiseState.TransformingToAndroid); | ||
|
Comment on lines
+55
to
+61
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🧹 Nitpick | 🔵 Trivial Непоследовательное сравнение enum: Строка 56 использует паттерн-матчинг ♻️ Предлагаемое исправление (унификация на `==`)- _sprite.LayerSetVisible((uid, sprite), comp.AndroidBaseLayer,
- comp.State is AndroidDisguiseState.Android);
+ _sprite.LayerSetVisible((uid, sprite), comp.AndroidBaseLayer,
+ comp.State == AndroidDisguiseState.Android);🤖 Prompt for AI Agents |
||
|
|
||
| var humanoidVisible = comp.State != AndroidDisguiseState.Android; | ||
| SetHumanoidVisible((uid, sprite), humanoidVisible); | ||
| } | ||
|
|
||
| private void SetHumanoidVisible(Entity<SpriteComponent> ent, bool visible) | ||
| { | ||
| var spriteEnt = ent.AsNullable(); | ||
|
|
||
| _sprite.LayerSetVisible(spriteEnt, HumanoidVisualLayers.Chest, visible); | ||
| _sprite.LayerSetVisible(spriteEnt, HumanoidVisualLayers.Head, visible); | ||
| _sprite.LayerSetVisible(spriteEnt, HumanoidVisualLayers.Snout, visible); | ||
| _sprite.LayerSetVisible(spriteEnt, HumanoidVisualLayers.Eyes, visible); | ||
| _sprite.LayerSetVisible(spriteEnt, HumanoidVisualLayers.RArm, visible); | ||
| _sprite.LayerSetVisible(spriteEnt, HumanoidVisualLayers.LArm, visible); | ||
| _sprite.LayerSetVisible(spriteEnt, HumanoidVisualLayers.RLeg, visible); | ||
| _sprite.LayerSetVisible(spriteEnt, HumanoidVisualLayers.LLeg, visible); | ||
| _sprite.LayerSetVisible(spriteEnt, HumanoidVisualLayers.UndergarmentBottom, visible); | ||
| _sprite.LayerSetVisible(spriteEnt, HumanoidVisualLayers.UndergarmentTop, visible); | ||
| _sprite.LayerSetVisible(spriteEnt, HumanoidVisualLayers.LFoot, visible); | ||
| _sprite.LayerSetVisible(spriteEnt, HumanoidVisualLayers.RFoot, visible); | ||
| _sprite.LayerSetVisible(spriteEnt, HumanoidVisualLayers.LHand, visible); | ||
| _sprite.LayerSetVisible(spriteEnt, HumanoidVisualLayers.RHand, visible); | ||
| _sprite.LayerSetVisible(spriteEnt, HumanoidVisualLayers.SnoutCover, visible); | ||
| _sprite.LayerSetVisible(spriteEnt, HumanoidVisualLayers.FacialHair, visible); | ||
| _sprite.LayerSetVisible(spriteEnt, HumanoidVisualLayers.Hair, visible); | ||
| _sprite.LayerSetVisible(spriteEnt, HumanoidVisualLayers.HeadSide, visible); | ||
| _sprite.LayerSetVisible(spriteEnt, HumanoidVisualLayers.HeadTop, visible); | ||
| _sprite.LayerSetVisible(spriteEnt, HumanoidVisualLayers.Tail, visible); | ||
| } | ||
|
Comment on lines
+67
to
+91
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🧹 Nitpick | 🔵 Trivial Длинный список слоёв в 20 вызовов 🤖 Prompt for AI Agents |
||
| } | ||
|
|
||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,80 @@ | ||
| using Content.Shared.Imperial.XxRaay.Android; | ||
| using Robust.Client.Graphics; | ||
| using Robust.Client.Player; | ||
| using Robust.Shared.Player; | ||
|
|
||
| namespace Content.Client.Imperial.XxRaay.Android; | ||
|
|
||
| /// <summary> | ||
| /// Включает клиентский оверлей | ||
| /// </summary> | ||
| public sealed partial class AndroidOverlaySystem : EntitySystem | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🧹 Nitpick | 🔵 Trivial
В файле нет второй части класса, и никаких source-генераторов, которые требовали бы ♻️ Предлагаемое исправление-public sealed partial class AndroidOverlaySystem : EntitySystem
+public sealed class AndroidOverlaySystem : EntitySystem🤖 Prompt for AI Agents |
||
| { | ||
| [Dependency] private readonly IOverlayManager _overlayMgr = default!; | ||
| [Dependency] private readonly IPlayerManager _player = default!; | ||
|
|
||
| private AndroidOverlay? _overlay; | ||
|
|
||
| public override void Initialize() | ||
| { | ||
| base.Initialize(); | ||
|
|
||
| SubscribeLocalEvent<AndroidOverlayComponent, ComponentInit>(OnOverlayInit); | ||
| SubscribeLocalEvent<AndroidOverlayComponent, ComponentRemove>(OnOverlayRemove); | ||
| SubscribeLocalEvent<AndroidOverlayComponent, LocalPlayerAttachedEvent>(OnPlayerAttached); | ||
| SubscribeLocalEvent<AndroidOverlayComponent, LocalPlayerDetachedEvent>(OnPlayerDetached); | ||
| } | ||
|
|
||
| public override void Shutdown() | ||
| { | ||
| base.Shutdown(); | ||
| RemoveOverlay(); | ||
| } | ||
|
|
||
| private void OnOverlayInit(Entity<AndroidOverlayComponent> ent, ref ComponentInit args) | ||
| { | ||
| var local = _player.LocalEntity; | ||
| if (local != ent) | ||
| return; | ||
|
|
||
| AddOverlay(ent); | ||
| } | ||
|
|
||
| private void OnOverlayRemove(Entity<AndroidOverlayComponent> ent, ref ComponentRemove args) | ||
| { | ||
| var local = _player.LocalEntity; | ||
| if (local != ent) | ||
| return; | ||
|
|
||
| RemoveOverlay(); | ||
| } | ||
|
|
||
| private void OnPlayerAttached(Entity<AndroidOverlayComponent> ent, ref LocalPlayerAttachedEvent args) | ||
| { | ||
| AddOverlay(ent); | ||
| } | ||
|
|
||
| private void OnPlayerDetached(Entity<AndroidOverlayComponent> ent, ref LocalPlayerDetachedEvent args) | ||
| { | ||
| RemoveOverlay(); | ||
| } | ||
|
|
||
| private void AddOverlay(Entity<AndroidOverlayComponent> ent) | ||
| { | ||
| if (_overlay != null) | ||
| return; | ||
|
|
||
| _overlay = new AndroidOverlay(ent.Comp.IconSprite, ent.Comp.IconScale); | ||
| _overlayMgr.AddOverlay(_overlay); | ||
| } | ||
|
|
||
| private void RemoveOverlay() | ||
| { | ||
| if (_overlay == null) | ||
| return; | ||
|
|
||
| _overlayMgr.RemoveOverlay(_overlay); | ||
| _overlay = null; | ||
| } | ||
| } | ||
|
|
||
| Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| @@ -0,0 +1,142 @@ | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| using System.Numerics; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| using Content.Shared.IdentityManagement; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| using Content.Shared.Imperial.XxRaay.Android; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| using Robust.Client.GameObjects; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| using Robust.Client.Graphics; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| using Robust.Client.Player; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| using Robust.Client.ResourceManagement; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| using Robust.Shared.Enums; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| using Robust.Shared.Map; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| using Robust.Shared.Maths; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| using Robust.Shared.Prototypes; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| using Robust.Shared.Utility; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
| namespace Content.Client.Imperial.XxRaay.Android; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
| /// <summary> | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| /// Оверлей, рисующий иконку над всеми сущностями с <see cref="AndroidStressComponent"/>. | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| /// </summary> | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| public sealed partial class AndroidOverlay : Overlay | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| { | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| [Dependency] private readonly IEntitySystemManager _systems = default!; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| [Dependency] private readonly IEntityManager _entManager = default!; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| [Dependency] private readonly IPlayerManager _player = default!; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| [Dependency] private readonly IEyeManager _eye = default!; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| [Dependency] private readonly IResourceCache _resources = default!; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
| private readonly SpriteSystem _sprites; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| private readonly SharedTransformSystem _xforms; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| private readonly MapSystem _maps; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
| private readonly string _iconSprite; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| private readonly float _iconScale; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| private readonly Font _font; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
| public override OverlaySpace Space => OverlaySpace.WorldSpace | OverlaySpace.ScreenSpace; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
| public AndroidOverlay(string iconSprite, float iconScale) | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| { | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| IoCManager.InjectDependencies(this); | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
| _sprites = _systems.GetEntitySystem<SpriteSystem>(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| _xforms = _systems.GetEntitySystem<SharedTransformSystem>(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| _maps = _systems.GetEntitySystem<MapSystem>(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| _iconSprite = iconSprite; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| _iconScale = iconScale; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| _font = new VectorFont(_resources.GetResource<FontResource>("/Fonts/NotoSans/NotoSans-Regular.ttf"), 9); | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
| protected override void Draw(in OverlayDrawArgs args) | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| { | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| if (args.Viewport.Eye == null) | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| return; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
| switch (args.Space) | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| { | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| case OverlaySpace.WorldSpace: | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| DrawWorld(args); | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| break; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| case OverlaySpace.ScreenSpace: | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| DrawScreen(args); | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| break; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
| private void DrawWorld(in OverlayDrawArgs args) | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| { | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| if (!_maps.TryGetMap(args.MapId, out var mapUid)) | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| return; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
| var worldHandle = args.WorldHandle; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| var texture = _sprites.Frame0(ParseSpriteSpecifier(_iconSprite)); | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
| var worldMatrix = _xforms.GetWorldMatrix(mapUid.Value); | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| var invMatrix = _xforms.GetInvWorldMatrix(mapUid.Value); | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
| var query = _entManager.EntityQueryEnumerator<AndroidStressComponent>(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| while (query.MoveNext(out var uid, out _)) | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| { | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| if (_player.LocalEntity == uid) | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| continue; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
| var coords = _xforms.GetMapCoordinates(uid); | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| if (coords.MapId != args.MapId) | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| continue; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Comment on lines
+76
to
+84
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🧹 Nitpick | 🔵 Trivial Нет отсечения сущностей за пределами viewport.
♻️ Добавить проверку bounds var coords = _xforms.GetMapCoordinates(uid);
if (coords.MapId != args.MapId)
continue;
+ if (!args.WorldBounds.Contains(coords.Position))
+ continue;
+
if (!_entManager.TryGetComponent(uid, out AndroidDiodeComponent? diode) || !diode.HasDiode)
continue;📝 Committable suggestion
Suggested change
🤖 Prompt for AI Agents |
||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
| if (!_entManager.TryGetComponent(uid, out AndroidDiodeComponent? diode) || !diode.HasDiode) | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| continue; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
| var localPos = Vector2.Transform(coords.Position, invMatrix); | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| var halfSize = 0.5f * _iconScale; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
| var aabb = new Box2( | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| localPos - new Vector2(halfSize, halfSize), | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| localPos + new Vector2(halfSize, halfSize)); | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
| var box = new Box2Rotated(aabb, Angle.Zero, localPos); | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
| worldHandle.SetTransform(worldMatrix); | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| worldHandle.DrawTextureRect(texture, box, Color.White); | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| worldHandle.SetTransform(Matrix3x2.Identity); | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Comment on lines
+89
to
+100
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Иконка отрисовывается по центру сущности — вероятно, нужен вертикальный сдвиг. Документация класса гласит: "рисующий иконку над всеми сущностями", однако AABB строится точно по центру позиции сущности ( 💡 Пример сдвига иконки вверх- var localPos = Vector2.Transform(coords.Position, invMatrix);
+ var rawPos = Vector2.Transform(coords.Position, invMatrix);
+ var localPos = rawPos + new Vector2(0f, 0.5f); // смещение вверх над сущностью📝 Committable suggestion
Suggested change
🤖 Prompt for AI Agents |
||||||||||||||||||||||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Comment on lines
+65
to
+101
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Текстура парсится и загружается каждый кадр — кэшируйте результат.
♻️ Предлагаемое исправлениеДобавьте поле в класс и инициализируйте в конструкторе: private readonly Font _font;
+ private readonly Texture _iconTexture;
...
public AndroidOverlay(string iconSprite, float iconScale)
{
IoCManager.InjectDependencies(this);
_sprites = _systems.GetEntitySystem<SpriteSystem>();
_xforms = _systems.GetEntitySystem<SharedTransformSystem>();
_maps = _systems.GetEntitySystem<MapSystem>();
_iconSprite = iconSprite;
_iconScale = iconScale;
_font = new VectorFont(_resources.GetResource<FontResource>("/Fonts/NotoSans/NotoSans-Regular.ttf"), 9);
+ _iconTexture = _sprites.Frame0(ParseSpriteSpecifier(_iconSprite));
}И в - var texture = _sprites.Frame0(ParseSpriteSpecifier(_iconSprite));
+ var texture = _iconTexture;🤖 Prompt for AI Agents |
||||||||||||||||||||||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
| private void DrawScreen(in OverlayDrawArgs args) | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| { | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| var screenHandle = args.ScreenHandle; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
| var query = _entManager.EntityQueryEnumerator<AndroidStressComponent>(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| while (query.MoveNext(out var uid, out _)) | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| { | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| if (_player.LocalEntity == uid) | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| continue; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
| var coords = _xforms.GetMapCoordinates(uid); | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| if (coords.MapId != args.MapId) | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| continue; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
| if (!_entManager.TryGetComponent(uid, out AndroidDiodeComponent? diode) || !diode.HasDiode) | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| continue; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
| var worldPos = _xforms.GetWorldPosition(uid); | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| var screenPos = _eye.WorldToScreen(worldPos); | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| var name = Identity.Name(uid, _entManager); | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| var textOffset = new Vector2(16f, -6f); | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| screenHandle.DrawString(_font, screenPos + textOffset, name, Color.Cyan); | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Comment on lines
+124
to
+125
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🧹 Nitpick | 🔵 Trivial Магические числа для
🤖 Prompt for AI Agents |
||||||||||||||||||||||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Comment on lines
+104
to
+127
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion | 🟠 Major Дублирование логики запроса и фильтрации сущностей между
♻️ Устранение дублирующего вызова трансформа- var worldPos = _xforms.GetWorldPosition(uid);
- var screenPos = _eye.WorldToScreen(worldPos);
+ var screenPos = _eye.WorldToScreen(coords.Position);Для устранения дублирования запроса рассмотрите вынос общей фильтрации в отдельный метод или сбор отфильтрованных данных в единый проход. 🤖 Prompt for AI Agents |
||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
| private static SpriteSpecifier ParseSpriteSpecifier(string value) | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| { | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| var split = value.Split('/', StringSplitOptions.RemoveEmptyEntries); | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| if (split.Length >= 2) | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| { | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| var state = split[^1]; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| var path = string.Join('/', split[..^1]); | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| return new SpriteSpecifier.Rsi(new ResPath(path), state); | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
| return new SpriteSpecifier.Texture(new ResPath(value)); | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick | 🔵 Trivial
Избыточная локальная переменная
uid— явный каст не нужен.Entity<T>неявно приводится кEntityUid, поэтому создавать промежуточную переменную через(EntityUid) entизлишне.entможно передавать напрямую во все вызовы, принимающиеEntityUid.♻️ Предлагаемое исправление
private void OnStartup(Entity<AndroidDisguiseComponent> ent, ref ComponentStartup args) { - var uid = (EntityUid) ent; - UpdateVisuals(uid, ent.Comp); + UpdateVisuals(ent, ent.Comp); } private void OnShutdown(Entity<AndroidDisguiseComponent> ent, ref ComponentShutdown args) { if (!TryComp<SpriteComponent>(ent, out var sprite)) return; - var uid = (EntityUid) ent; - - _sprite.LayerSetVisible((uid, sprite), ent.Comp.AndroidBaseLayer, true); - _sprite.LayerSetVisible((uid, sprite), ent.Comp.AndroidTransformLayer, false); - _sprite.LayerSetVisible((uid, sprite), ent.Comp.AndroidRetransformLayer, false); - SetHumanoidVisible((uid, sprite), visible: false); + _sprite.LayerSetVisible((ent, sprite), ent.Comp.AndroidBaseLayer, true); + _sprite.LayerSetVisible((ent, sprite), ent.Comp.AndroidTransformLayer, false); + _sprite.LayerSetVisible((ent, sprite), ent.Comp.AndroidRetransformLayer, false); + SetHumanoidVisible((ent, sprite), visible: false); } private void OnAfterState(Entity<AndroidDisguiseComponent> ent, ref AfterAutoHandleStateEvent args) { - var uid = (EntityUid) ent; - UpdateVisuals(uid, ent.Comp); + UpdateVisuals(ent, ent.Comp); }Also applies to: 30-41, 43-47
🤖 Prompt for AI Agents