예제 #1
0
        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);
예제 #2
0
        private EntityUid GetEntityUnderMouse(ScalingViewport viewport, Vector2 mousePos, MapCoordinates coords)
        {
            EntityUid?entity = GetEntityOnScreen(mousePos, viewport);

            entity ??= GetEntityOnMap(coords);

            return(entity ?? EntityUid.Invalid);
        }
예제 #3
0
        public MainViewport()
        {
            IoCManager.InjectDependencies(this);

            Viewport = new ScalingViewport
            {
                AlwaysRender    = true,
                RenderScaleMode = ScalingViewportRenderScaleMode.CeilInt,
                MouseFilter     = MouseFilterMode.Stop
            };

            AddChild(Viewport);
        }