UI/CrosshairView.razor
@using System
@using Sandbox.UI
@namespace Prototype
@inherits Panel
<root style="@FormattableString.Invariant($"opacity:{Settings.CrosshairOpacity};")">
@if(Settings.ShowCrosshair)
{
@for(var i=0;i<4;i++){<div style="@Arm(i)"></div>}
@if(Settings.CrosshairDot){<div style="@Dot"></div>}
}
</root>
@code {
public GameSettingsData Settings { get; set; } = new();
private string BarStyle(float x,float y,float w,float h) => FormattableString.Invariant($"position:absolute; left:{x}px; top:{y}px; width:{w}px; height:{h}px; background-color:{HudAppearance.Hue(Settings.CrosshairHue,Settings.CrosshairSaturation)}; {(Settings.CrosshairOutline ? "box-shadow:0px 0px 0px 1px #000000;" : "")}");
private string Dot => BarStyle(-Settings.CrosshairThickness/2,-Settings.CrosshairThickness/2,Settings.CrosshairThickness,Settings.CrosshairThickness);
private string Arm(int i)
{
var l=Settings.CrosshairLength;var g=Settings.CrosshairGap;var t=Settings.CrosshairThickness;
return i switch {0=>BarStyle(g,-t/2,l,t),1=>BarStyle(-g-l,-t/2,l,t),2=>BarStyle(-t/2,g,t,l),_=>BarStyle(-t/2,-g-l,t,l)};
}
protected override int BuildHash() => HashCode.Combine(Settings.ShowCrosshair,Settings.CrosshairDot,Settings.CrosshairOutline,Settings.CrosshairLength,Settings.CrosshairGap,Settings.CrosshairThickness,Settings.CrosshairHue,HashCode.Combine(Settings.CrosshairOpacity,Settings.CrosshairSaturation));
}