Code/Render/ArcRenderer.cs
using System.Text.Json.Serialization;
using Sandbox;
namespace MANIFOLD.BHLib {
[Category(LibraryData.CATEGORY + "/Rendering")]
[Icon("wifi_tethering")]
public class ArcRenderer : Component {
[Property]
public ModelRenderer Model { get; set; }
[Property]
public Angles ModelRotationOffset { get; set; }
[Property]
public float ModelRadius { get; set; }
[Property, Range(0, 360), Space]
public float Angle { get; set; } = 90f;
[Property]
public bool Centered { get; set; }
[Property]
public float StartLength { get; set; }
[Property]
public float EndLength { get; set; }
protected override void OnEnabled() {
StartLength = 0;
EndLength = 0;
}
protected override void OnPreRender() {
float angle = Centered ? Angle * 0.5f : Angle;
Model.LocalRotation = ModelRotationOffset + new Angles(0f, angle, 0f);
Model.LocalScale = EndLength / ModelRadius;
Model.SceneObject.Batchable = false;
Model.Attributes.Set("Arc", 1 - (Angle / 360f));
Model.Attributes.Set("StartLength", 1 - ((EndLength - StartLength) / EndLength));
}
}
}