UI/Pressable/PressableHud.razor
@using Sandbox;
@using Sandbox.UI;
@inherits PanelComponent
@namespace Sandbox
<root>
<div class="crosshair">
</div>
</root>
@code
{
int _hashCode;
PressableTooltip _tooltip;
protected override void OnUpdate()
{
base.OnUpdate();
var tt = GetHovered();
var hc = HashCode.Combine(tt.Title, tt.Icon, tt.Description);
if (hc != _hashCode)
{
_hashCode = hc;
_tooltip?.Delete();
_tooltip = null;
if (!string.IsNullOrWhiteSpace(tt.Title) || !string.IsNullOrWhiteSpace(tt.Icon) || !string.IsNullOrWhiteSpace(tt.Description))
{
_tooltip = Panel.AddChild<PressableTooltip>();
_tooltip.Title = tt.Title;
_tooltip.Icon = tt.Icon;
_tooltip.Description = tt.Description;
}
}
SetClass("active", tt.Pressable != null && tt.Enabled);
}
IPressable.Tooltip GetHovered()
{
var lp = Player.FindLocalPlayer();
if (lp is null) return default;
if (lp.WantsHideHud) return default;
if (lp.Controller.Tooltips.Count == 0) return default;
return lp.Controller.Tooltips.FirstOrDefault();
}
}