UI/ZonePanel.razor
@using HC3.Terraforming
@using Sandbox;
@using Sandbox.UI;
@inherits BaseCanvas
@namespace HC3
<root>
<div class="screen-canvas">
@foreach (var zone in BuildingZone.Instance.GetAllPreview())
{
var cost = BuildingZone.Instance.GetChunkCost(zone.Item1);
@if (IsOffScreen(zone.Item2)) continue;
<div class="zone-purchase" style="@GetPos(zone.Item2)">
<div class="zone-name">PURCHASE</div>
<div class="zone-cost">$@(cost)</div>
</div>
}
</div>
</root>
@code
{
private static Vector2 ScreenSafezone = new(0.05f, 0.95f);
string GetPos(Vector3 pos)
{
var toScreen = Scene.Camera.PointToScreenNormal(pos, out bool isBehind);
toScreen = new(toScreen.x.Clamp(ScreenSafezone.x, ScreenSafezone.y), toScreen.y.Clamp(ScreenSafezone.x, ScreenSafezone.y));
return $"top: {Length.Fraction(toScreen.y)}px; left: {Length.Fraction(toScreen.x)}px;";
}
bool IsOffScreen(Vector3 pos)
{
var toScreen = Scene.Camera.PointToScreenPixels(pos, out bool isBehind);
return isBehind;
}
protected override int BuildHash() => System.HashCode.Combine(base.BuildHash(), Time.Now);
protected override void OnTreeFirstBuilt()
{
RegisterAs( "ZoneCanvas" );
}
protected override void OnUpdate()
{
base.OnUpdate();
if ( BuildingZone.Instance is { IsValid: true } buildingZone )
{
buildingZone.PurchaseMode = IsVisible;
}
}
}