Files
RobustToolbox/Robust.Client/UserInterface/CustomControls/DebugCoordsPanel.cs
T
2019-07-30 00:56:51 +02:00

163 lines
5.1 KiB
C#

using System.Text;
using Robust.Client.Graphics;
using Robust.Client.Interfaces.Graphics.ClientEye;
using Robust.Client.Interfaces.Input;
using Robust.Client.UserInterface.Controls;
using Robust.Shared.Map;
using Robust.Shared.Maths;
using Robust.Client.Interfaces.ResourceManagement;
using Robust.Client.ResourceManagement;
using Robust.Client.Graphics.Drawing;
using Robust.Client.Interfaces.Graphics;
using Robust.Client.Interfaces.State;
using Robust.Client.Player;
using Robust.Client.State.States;
using Robust.Shared.Interfaces.GameObjects;
using Robust.Shared.Interfaces.Map;
using Robust.Shared.Utility;
namespace Robust.Client.UserInterface.CustomControls
{
internal class DebugCoordsPanel : Panel
{
private readonly IPlayerManager playerManager;
private readonly IEyeManager eyeManager;
private readonly IInputManager inputManager;
private readonly IResourceCache resourceCache;
private readonly IStateManager stateManager;
private readonly IClyde _displayManager;
private readonly IMapManager _mapManager;
private Label contents;
//TODO: Think about a factory for this
public DebugCoordsPanel(IPlayerManager playerMan,
IEyeManager eyeMan,
IInputManager inputMan,
IResourceCache resCache,
IStateManager stateMan,
IClyde displayMan,
IMapManager mapMan)
{
playerManager = playerMan;
eyeManager = eyeMan;
inputManager = inputMan;
resourceCache = resCache;
stateManager = stateMan;
_displayManager = displayMan;
_mapManager = mapMan;
PerformLayout();
}
protected override void Initialize()
{
base.Initialize();
contents = new Label();
}
private void PerformLayout()
{
SizeFlagsHorizontal = SizeFlags.None;
contents = new Label
{
FontColorShadowOverride = Color.Black,
MarginTop = 5,
MarginLeft = 5
};
AddChild(contents);
PanelOverride = new StyleBoxFlat
{
BackgroundColor = new Color(67, 105, 255, 138),
};
MouseFilter = contents.MouseFilter = MouseFilterMode.Ignore;
}
protected override void FrameUpdate(RenderFrameEventArgs args)
{
if (!VisibleInTree)
{
return;
}
var stringBuilder = new StringBuilder();
var mouseScreenPos = inputManager.MouseScreenPosition;
var screenSize = _displayManager.ScreenSize;
int mouseWorldMap;
int mouseWorldGrid;
GridCoordinates mouseWorldPos;
ScreenCoordinates worldToScreen;
IEntity mouseEntity = null;
TileRef tile;
try
{
var coords = eyeManager.ScreenToWorld(new ScreenCoordinates(mouseScreenPos));
mouseWorldMap = (int) _mapManager.GetGrid(coords.GridID).ParentMapId;
mouseWorldGrid = (int) coords.GridID;
mouseWorldPos = coords;
worldToScreen = eyeManager.WorldToScreen(coords);
if (stateManager.CurrentState is GameScreen gameScreen)
{
mouseEntity = gameScreen.GetEntityUnderPosition(coords);
}
tile = _mapManager.GetGrid(coords.GridID).GetTileRef(coords);
}
catch
{
mouseWorldPos = eyeManager.ScreenToWorld(mouseScreenPos);
mouseWorldGrid = 0;
mouseWorldMap = 0;
worldToScreen = new ScreenCoordinates();
tile = new TileRef();
}
stringBuilder.AppendFormat(@"Positioning Debug:
Screen Size: {0}
Mouse Pos:
Screen: {1}
World: {2}
W2S: {3}
Grid: {4}
Tile: {8}
Map: {5}
Entity: {6}
GUI: {7}
", screenSize, mouseScreenPos, mouseWorldPos, worldToScreen, mouseWorldGrid, mouseWorldMap, mouseEntity,
UserInterfaceManager.CurrentlyHovered, tile);
stringBuilder.AppendLine("\nAttached Entity:");
if (playerManager.LocalPlayer?.ControlledEntity == null)
{
stringBuilder.AppendLine("No attached entity.");
}
else
{
var entityTransform = playerManager.LocalPlayer.ControlledEntity.Transform;
var playerWorldOffset = entityTransform.WorldPosition;
var playerScreen = eyeManager.WorldToScreen(playerWorldOffset);
stringBuilder.AppendFormat(@" World: {0}
Screen: {1}
Grid: {2}
Map: {3}", playerWorldOffset, playerScreen, entityTransform.GridID, entityTransform.MapID);
}
contents.Text = stringBuilder.ToString();
MinimumSizeChanged();
}
protected override Vector2 CalculateMinimumSize()
{
return new Vector2(175, contents.CombinedMinimumSize.Y + 10);
}
}
}