Files
sbox-public/game/editor/MovieMaker/Code/Session/Ticks.cs
s&box team 71f266059a Open source release
This commit imports the C# engine code and game files, excluding C++ source code.

[Source-Commit: ceb3d758046e50faa6258bc3b658a30c97743268]
2025-11-24 09:05:18 +00:00

84 lines
1.3 KiB
C#

using Sandbox.MovieMaker;
namespace Editor.MovieMaker;
#nullable enable
public enum TickStyle
{
TimeLabel,
Major,
Minor
}
public record struct TimelineTick( TickStyle Style, MovieTime Interval );
partial class Session
{
private const float MinMajorTickWidth = 70f;
private const float MinMinorTickWidth = 6f;
public TimelineTick MajorTick
{
get
{
MovieTime majorTime = 1d;
foreach ( var tickScale in TickScales )
{
if ( TimeToPixels( majorTime ) < MinMajorTickWidth )
{
majorTime = 1d * tickScale;
}
else
{
break;
}
}
return new TimelineTick( TickStyle.Major, majorTime );
}
}
public TimelineTick MinorTick
{
get
{
var minorTime = MovieTime.FromFrames( 1, FrameRate );
while ( TimeToPixels( minorTime ) < MinMinorTickWidth )
{
minorTime *= 2;
}
return new TimelineTick( TickStyle.Minor, minorTime );
}
}
public IEnumerable<TimelineTick> Ticks
{
get
{
var major = MajorTick;
yield return major with { Style = TickStyle.TimeLabel };
yield return major;
yield return MinorTick;
}
}
private static IEnumerable<int> TickScales
{
get
{
for ( var i = 1; i <= 1_000_000; i *= 10 )
{
yield return i;
yield return i * 2;
yield return i * 5;
}
}
}
}