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; } } }
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; } } }