UI/PanelComponents/InspectorPanel.razor
@using Sandbox;
@using Sandbox.UI;
@namespace Battlebugs
@inherits PanelComponent
<root class="@(Segment is null ? "hidden" : "")">
@if (Segment is null) return;
<div class="header">
<h1>@Segment.Bug.Name</h1>
<div class="segments">
@for (var i = 0; i < Segment.Bug.SegmentCount; i++)
{
var index = Segment.Bug.SegmentCount - 1 - i;
var segment = Scene.GetAllComponents<BugSegment>().FirstOrDefault(x => x.GameObject.Name == Segment.GameObject.Name && x.Index == index);
@* <div class="@(segment == Segment ? "this" : "")" style="background-color: @((segment?.Bug?.Color ?? Color.Black).Hex)" /> *@
<img class="@(segment == Segment ? "this" : "")" src="@GetIcon(Segment.Bug, index)" />
}
</div>
</div>
<div class="healthbar">
<div class="inner">
@if (true)
{
var value = Segment.Health / Segment.Bug.StartingHealth;
<div class="fill" style="background-color: @(HealthGradient.Evaluate(1f - value).Hex); width: @(value * 100f)%;" />
}
</div>
</div>
</root>
@code
{
public static InspectorPanel Instance { get; private set; }
public BugSegment Segment { get; set; }
[Property] Gradient HealthGradient { get; set; }
protected override void OnAwake()
{
Instance = this;
}
protected override void OnUpdate()
{
if (!Segment.IsValid()) return;
var pos = Scene.Camera.PointToScreenPixels(Segment.WorldPosition);
pos.x /= Scene.Camera.ScreenRect.Size.x;
pos.y /= Scene.Camera.ScreenRect.Size.y;
pos *= 100f;
Panel.Style.Left = Length.Percent(pos.x + 2.5f);
Panel.Style.Bottom = Length.Percent(100f - pos.y);
}
string GetIcon(BugResource bug, int index)
{
if (index == 0) return bug.GetTailIcon();
if (index == bug.SegmentCount - 1) return bug.GetHeadIcon();
return bug.GetBodyIcon();
}
protected override int BuildHash() => System.HashCode.Combine(Segment);
}