Code/Demo/UI/DemoUI.razor
@using System.Collections.Generic
@using Andicraft.SecondOrderDynamics
@using Andicraft.SecondOrderDynamics.Components
@using Sandbox;
@using Sandbox.UI;
@inherits PanelComponent
@namespace Sandbox
<root>
<div class="demo-ui-container">
<div class="header">
<button onclick="@PreviousSlide" class="slide-btn">Previous</button>
<div class="title">@SlideTitle</div>
<button onclick="@NextSlide" class="slide-btn">Next</button>
</div>
@if ( DemoController.CurrentSlide == 2 )
{
<div class="sliders">
<div class="slider">
<div class="label">Frequency</div>
<SliderControl Min="@( 0.01f )" Max="@( 5 )" Step="@( 0.01f )" Value="@SlideThreeFollower.PositionParameters.Frequency" OnValueChanged="@FrequencyChanged" ShowRange="@false"/>
</div>
<div class="slider">
<div class="label">Damping</div>
<SliderControl Min="@( 0 )" Max="@( 4 )" Step="@( 0.01f )" Value="@SlideThreeFollower.PositionParameters.Damping" OnValueChanged="@DampingChanged" ShowRange="@false"/>
</div>
<div class="slider">
<div class="label">Response</div>
<SliderControl Min="@( -1 )" Max="@( 2 )" Step="@( 0.01f )" Value="@SlideThreeFollower.PositionParameters.Response" OnValueChanged="@ResponseChanged" ShowRange="@false"/>
</div>
</div>
}
<div class="footer"><p>@SlideDescription</p></div>
</div>
</root>
@code
{
[Property] List<string> SlideTitles { get; set; } = [];
[Property] List<string> SlideDescriptions { get; set; } = [];
[Property] SODDemoControllerComponent DemoController { get; set; }
[Property] FollowTargetComponent SlideThreeFollower { get; set; }
private void FrequencyChanged( float v )
{
var p = SlideThreeFollower.PositionParameters;
SlideThreeFollower.UpdatePositionParameters( new DynamicsParameters(v, p.Response, p.Damping) );
}
private void DampingChanged( float v )
{
var p = SlideThreeFollower.PositionParameters;
SlideThreeFollower.UpdatePositionParameters( new DynamicsParameters(p.Frequency, p.Response, v) );
}
private void ResponseChanged( float v )
{
var p = SlideThreeFollower.PositionParameters;
SlideThreeFollower.UpdatePositionParameters( new DynamicsParameters(p.Frequency, v, p.Damping) );
}
private void NextSlide() => DemoController.ChangeSlide( 1 );
private void PreviousSlide() => DemoController.ChangeSlide( -1 );
private string SlideTitle => SlideTitles[DemoController.CurrentSlide];
private string SlideDescription => SlideDescriptions[DemoController.CurrentSlide];
}