mirror of
https://gitgud.io/AbstractConcept/rimworld-animation-studio.git
synced 2024-08-15 00:43:27 +00:00
107 lines
3.4 KiB
C#
107 lines
3.4 KiB
C#
using System;
|
|
using UnityEngine;
|
|
|
|
namespace UnityEditor.Timeline
|
|
{
|
|
partial class TimelineWindow
|
|
{
|
|
[NonSerialized] TimelineTimeArea m_TimeArea;
|
|
public TimeArea timeArea { get { return m_TimeArea; } }
|
|
|
|
internal static class Styles
|
|
{
|
|
public static string DurationModeText = L10n.Tr("Duration Mode/{0}");
|
|
}
|
|
|
|
float m_LastFrameRate;
|
|
bool m_TimeAreaDirty = true;
|
|
|
|
void InitializeTimeArea()
|
|
{
|
|
if (m_TimeArea == null)
|
|
{
|
|
m_TimeArea = new TimelineTimeArea(state, false)
|
|
{
|
|
hRangeLocked = false,
|
|
vRangeLocked = true,
|
|
margin = 10,
|
|
scaleWithWindow = true,
|
|
hSlider = true,
|
|
vSlider = false,
|
|
hBaseRangeMin = 0.0f,
|
|
hBaseRangeMax = WindowState.kMaxShownTime,
|
|
hRangeMin = 0.0f,
|
|
hScaleMax = WindowConstants.maxTimeAreaScaling,
|
|
rect = state.timeAreaRect
|
|
};
|
|
|
|
m_TimeAreaDirty = true;
|
|
InitTimeAreaFrameRate();
|
|
SyncTimeAreaShownRange();
|
|
}
|
|
}
|
|
|
|
void TimelineGUI()
|
|
{
|
|
if (!currentMode.ShouldShowTimeArea(state))
|
|
return;
|
|
|
|
Rect rect = state.timeAreaRect;
|
|
m_TimeArea.rect = new Rect(rect.x, rect.y, rect.width, clientArea.height - rect.y);
|
|
|
|
if (m_LastFrameRate != state.referenceSequence.frameRate)
|
|
InitTimeAreaFrameRate();
|
|
|
|
SyncTimeAreaShownRange();
|
|
|
|
m_TimeArea.BeginViewGUI();
|
|
m_TimeArea.TimeRuler(rect, state.referenceSequence.frameRate, true, false, 1.0f, state.timeInFrames ? TimeArea.TimeFormat.Frame : TimeArea.TimeFormat.TimeFrame);
|
|
m_TimeArea.EndViewGUI();
|
|
}
|
|
|
|
void InitTimeAreaFrameRate()
|
|
{
|
|
m_LastFrameRate = state.referenceSequence.frameRate;
|
|
m_TimeArea.hTicks.SetTickModulosForFrameRate(m_LastFrameRate);
|
|
}
|
|
|
|
void SyncTimeAreaShownRange()
|
|
{
|
|
var range = state.timeAreaShownRange;
|
|
if (!Mathf.Approximately(range.x, m_TimeArea.shownArea.x) || !Mathf.Approximately(range.y, m_TimeArea.shownArea.xMax))
|
|
{
|
|
// set view data onto the time area
|
|
if (m_TimeAreaDirty)
|
|
{
|
|
m_TimeArea.SetShownHRange(range.x, range.y);
|
|
m_TimeAreaDirty = false;
|
|
}
|
|
else
|
|
{
|
|
// set time area data onto the view data
|
|
state.TimeAreaChanged();
|
|
}
|
|
}
|
|
|
|
m_TimeArea.hBaseRangeMax = (float)state.editSequence.duration;
|
|
}
|
|
|
|
class TimelineTimeArea : TimeArea
|
|
{
|
|
readonly WindowState m_State;
|
|
|
|
public TimelineTimeArea(WindowState state, bool minimalGUI) : base(minimalGUI)
|
|
{
|
|
m_State = state;
|
|
}
|
|
|
|
public override string FormatTickTime(float time, float frameRate, TimeFormat timeFormat)
|
|
{
|
|
time = m_State.timeReferenceMode == TimeReferenceMode.Global ?
|
|
(float)m_State.editSequence.ToGlobalTime(time) : time;
|
|
|
|
return FormatTime(time, frameRate, timeFormat);
|
|
}
|
|
}
|
|
}
|
|
}
|