private EntityUid?GetEntityOnScreen(Vector2 mousePos, ScalingViewport viewport) { ClientScreenOverlaySystem screenOverlay = EntitySystem.Get <ClientScreenOverlaySystem>(); EntityUid?eye = _playerManager.LocalPlayer.Session.AttachedEntity; if (eye == null || !_entityManager.TryGetComponent <TransformComponent>(eye.Value, out var eyeTransform)) { return(null); } Vector2 viewOffset = eyeTransform.WorldPosition - 7.5f; //TODO: Don't hardcode a 15x15 view MapCoordinates coords = viewport.ScreenToMap(mousePos); var foundSprites = new List <DMISpriteComponent>(); foreach (DMISpriteComponent sprite in screenOverlay.EnumerateScreenObjects()) { Vector2 position = sprite.ScreenLocation.GetViewPosition(viewOffset, EyeManager.PixelsPerMeter); if (sprite.CheckClickScreen(position, coords.Position)) { foundSprites.Add(sprite); } } if (foundSprites.Count == 0) { return(null); } foundSprites.Sort(new RenderOrderComparer()); return(foundSprites[^ 1].Owner);
private EntityUid GetEntityUnderMouse(ScalingViewport viewport, Vector2 mousePos, MapCoordinates coords) { EntityUid?entity = GetEntityOnScreen(mousePos, viewport); entity ??= GetEntityOnMap(coords); return(entity ?? EntityUid.Invalid); }
public MainViewport() { IoCManager.InjectDependencies(this); Viewport = new ScalingViewport { AlwaysRender = true, RenderScaleMode = ScalingViewportRenderScaleMode.CeilInt, MouseFilter = MouseFilterMode.Stop }; AddChild(Viewport); }