1
0

BiomeDebugOverlay.cs 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. using System.Numerics;
  2. using System.Text;
  3. using Content.Shared.Parallax.Biomes;
  4. using Robust.Client.Graphics;
  5. using Robust.Client.Input;
  6. using Robust.Client.ResourceManagement;
  7. using Robust.Shared.Enums;
  8. using Robust.Shared.Map;
  9. using Robust.Shared.Map.Components;
  10. namespace Content.Client.Parallax;
  11. public sealed class BiomeDebugOverlay : Overlay
  12. {
  13. public override OverlaySpace Space => OverlaySpace.ScreenSpace;
  14. [Dependency] private readonly IEntityManager _entManager = default!;
  15. [Dependency] private readonly IEyeManager _eyeManager = default!;
  16. [Dependency] private readonly IInputManager _inputManager = default!;
  17. [Dependency] private readonly IMapManager _mapManager = default!;
  18. [Dependency] private readonly IResourceCache _cache = default!;
  19. [Dependency] private readonly ITileDefinitionManager _tileDefManager = default!;
  20. private BiomeSystem _biomes;
  21. private SharedMapSystem _maps;
  22. private Font _font;
  23. public BiomeDebugOverlay()
  24. {
  25. IoCManager.InjectDependencies(this);
  26. _biomes = _entManager.System<BiomeSystem>();
  27. _maps = _entManager.System<SharedMapSystem>();
  28. _font = new VectorFont(_cache.GetResource<FontResource>("/EngineFonts/NotoSans/NotoSans-Regular.ttf"), 12);
  29. }
  30. protected override bool BeforeDraw(in OverlayDrawArgs args)
  31. {
  32. var mapUid = _mapManager.GetMapEntityId(args.MapId);
  33. return _entManager.HasComponent<BiomeComponent>(mapUid);
  34. }
  35. protected override void Draw(in OverlayDrawArgs args)
  36. {
  37. var mouseScreenPos = _inputManager.MouseScreenPosition;
  38. var mousePos = _eyeManager.ScreenToMap(mouseScreenPos);
  39. if (mousePos.MapId == MapId.Nullspace || mousePos.MapId != args.MapId)
  40. return;
  41. var mapUid = _mapManager.GetMapEntityId(args.MapId);
  42. if (!_entManager.TryGetComponent(mapUid, out BiomeComponent? biomeComp) || !_entManager.TryGetComponent(mapUid, out MapGridComponent? grid))
  43. return;
  44. var sb = new StringBuilder();
  45. var nodePos = _maps.WorldToTile(mapUid, grid, mousePos.Position);
  46. if (_biomes.TryGetEntity(nodePos, biomeComp, grid, out var ent))
  47. {
  48. var text = $"Entity: {ent}";
  49. sb.AppendLine(text);
  50. }
  51. if (_biomes.TryGetDecals(nodePos, biomeComp.Layers, biomeComp.Seed, grid, out var decals))
  52. {
  53. var text = $"Decals: {decals.Count}";
  54. sb.AppendLine(text);
  55. foreach (var decal in decals)
  56. {
  57. var decalText = $"- {decal.ID}";
  58. sb.AppendLine(decalText);
  59. }
  60. }
  61. if (_biomes.TryGetBiomeTile(nodePos, biomeComp.Layers, biomeComp.Seed, grid, out var tile))
  62. {
  63. var tileText = $"Tile: {_tileDefManager[tile.Value.TypeId].ID}";
  64. sb.AppendLine(tileText);
  65. }
  66. args.ScreenHandle.DrawString(_font, mouseScreenPos.Position + new Vector2(0f, 32f), sb.ToString());
  67. }
  68. }