Ejemplo n.º 1
0
        public void UpdateMouseover()
        {
            TooltipType       = WorldTooltipType.None;
            ActorTooltipExtra = null;
            var cell = worldRenderer.Viewport.ViewToWorld(Viewport.LastMousePos);

            if (!world.Map.Contains(cell))
            {
                return;
            }

            if (world.ShroudObscures(cell))
            {
                TooltipType = WorldTooltipType.Unexplored;
                return;
            }

            var worldPixel  = worldRenderer.Viewport.ViewToWorldPx(Viewport.LastMousePos);
            var underCursor = world.ScreenMap.ActorsAt(worldPixel)
                              .Where(a => !world.FogObscures(a) && a.Info.HasTraitInfo <ITooltipInfo>())
                              .WithHighestSelectionPriority(worldPixel);

            if (underCursor != null)
            {
                ActorTooltip      = underCursor.TraitsImplementing <ITooltip>().First();
                ActorTooltipExtra = underCursor.TraitsImplementing <IProvideTooltipInfo>().ToArray();
                TooltipType       = WorldTooltipType.Actor;
                return;
            }

            var frozen = world.ScreenMap.FrozenActorsAt(world.RenderPlayer, worldPixel)
                         .Where(a => a.TooltipInfo != null && a.IsValid)
                         .WithHighestSelectionPriority(worldPixel);

            if (frozen != null)
            {
                var actor = frozen.Actor;
                if (actor != null && actor.TraitsImplementing <IVisibilityModifier>().All(t => t.IsVisible(actor, world.RenderPlayer)))
                {
                    FrozenActorTooltip = frozen;
                    if (frozen.Actor != null)
                    {
                        ActorTooltipExtra = frozen.Actor.TraitsImplementing <IProvideTooltipInfo>().ToArray();
                    }
                    TooltipType = WorldTooltipType.FrozenActor;
                    return;
                }
            }

            if (resourceLayer != null)
            {
                var resource = resourceLayer.GetRenderedResource(cell);
                if (resource != null)
                {
                    TooltipType     = WorldTooltipType.Resource;
                    ResourceTooltip = resource;
                }
            }
        }
Ejemplo n.º 2
0
        public void UpdateMouseover()
        {
            TooltipType       = WorldTooltipType.None;
            ActorTooltipExtra = null;
            var cell = worldRenderer.Viewport.ViewToWorld(Viewport.LastMousePos);

            if (!world.Map.Contains(cell))
            {
                return;
            }

            if (world.ShroudObscures(cell))
            {
                TooltipType = WorldTooltipType.Unexplored;
                return;
            }

            var worldPixel  = worldRenderer.Viewport.ViewToWorldPx(Viewport.LastMousePos);
            var underCursor = world.ScreenMap.ActorsAtMouse(worldPixel)
                              .Where(a => a.Actor.Info.HasTraitInfo <ITooltipInfo>() && !world.FogObscures(a.Actor))
                              .WithHighestSelectionPriority(worldPixel);

            if (underCursor != null)
            {
                ActorTooltip = underCursor.TraitsImplementing <ITooltip>().FirstEnabledTraitOrDefault();
                if (ActorTooltip != null)
                {
                    ActorTooltipExtra = underCursor.TraitsImplementing <IProvideTooltipInfo>().ToArray();
                    TooltipType       = WorldTooltipType.Actor;
                }

                return;
            }

            var frozen = world.ScreenMap.FrozenActorsAtMouse(world.RenderPlayer, worldPixel)
                         .Where(a => a.TooltipInfo != null && a.IsValid)
                         .WithHighestSelectionPriority(worldPixel);

            if (frozen != null)
            {
                var actor = frozen.Actor;

                // HACK: This leaks the cloak state through the fog (cloaked buildings will not show tooltips)
                if (actor == null || actor.TraitsImplementing <IVisibilityModifier>().All(t => t.IsVisible(actor, world.RenderPlayer)))
                {
                    FrozenActorTooltip = frozen;

                    // HACK: This leaks the tooltip state through the fog
                    // This will cause issues for any downstream mods that use IProvideTooltipInfo on enemy actors
                    if (frozen.Actor != null)
                    {
                        ActorTooltipExtra = frozen.Actor.TraitsImplementing <IProvideTooltipInfo>().ToArray();
                    }

                    TooltipType = WorldTooltipType.FrozenActor;
                    return;
                }
            }

            if (resourceLayer != null)
            {
                var resource = resourceLayer.GetRenderedResource(cell);
                if (resource != null)
                {
                    TooltipType     = WorldTooltipType.Resource;
                    ResourceTooltip = resource;
                }
            }
        }