Add support for multiple media events on audio, postfx and camera tracks in Scene Animations
#519
This commit is contained in:
@@ -4,6 +4,7 @@ using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using FlaxEditor.Utilities;
|
||||
using FlaxEngine;
|
||||
using FlaxEngine.GUI;
|
||||
@@ -33,6 +34,7 @@ namespace FlaxEditor.GUI.Timeline.Tracks
|
||||
public CameraCutMedia()
|
||||
{
|
||||
ClipChildren = true;
|
||||
CanSplit = true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -292,7 +294,7 @@ namespace FlaxEditor.GUI.Timeline.Tracks
|
||||
{
|
||||
base.OnTimelineChanged(track);
|
||||
|
||||
PropertiesEditObject = new Proxy(Track as CameraCutTrack, this);
|
||||
PropertiesEditObject = track != null ? new Proxy((CameraCutTrack)track, this) : null;
|
||||
UpdateThumbnails();
|
||||
}
|
||||
|
||||
@@ -673,26 +675,41 @@ namespace FlaxEditor.GUI.Timeline.Tracks
|
||||
{
|
||||
var e = (CameraCutTrack)track;
|
||||
e.ActorID = stream.ReadGuid();
|
||||
var m = e.TrackMedia;
|
||||
m.StartFrame = stream.ReadInt32();
|
||||
m.DurationFrames = stream.ReadInt32();
|
||||
if (version <= 3)
|
||||
{
|
||||
// [Deprecated on 03.09.2021 expires on 03.09.2023]
|
||||
var m = e.TrackMedia;
|
||||
m.StartFrame = stream.ReadInt32();
|
||||
m.DurationFrames = stream.ReadInt32();
|
||||
}
|
||||
else
|
||||
{
|
||||
var count = stream.ReadInt32();
|
||||
while (e.Media.Count > count)
|
||||
e.RemoveMedia(e.Media.Last());
|
||||
while (e.Media.Count < count)
|
||||
e.AddMedia(new CameraCutMedia());
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
var m = (CameraCutMedia)e.Media[i];
|
||||
m.StartFrame = stream.ReadInt32();
|
||||
m.DurationFrames = stream.ReadInt32();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void SaveTrack(Track track, BinaryWriter stream)
|
||||
{
|
||||
var e = (CameraCutTrack)track;
|
||||
stream.Write(e.ActorID.ToByteArray());
|
||||
if (e.Media.Count != 0)
|
||||
stream.WriteGuid(ref e.ActorID);
|
||||
var count = e.Media.Count;
|
||||
stream.Write(count);
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
var m = e.TrackMedia;
|
||||
var m = e.Media[i];
|
||||
stream.Write(m.StartFrame);
|
||||
stream.Write(m.DurationFrames);
|
||||
}
|
||||
else
|
||||
{
|
||||
stream.Write(0);
|
||||
stream.Write(track.Timeline.DurationFrames);
|
||||
}
|
||||
}
|
||||
|
||||
private Image _pilotCamera;
|
||||
@@ -702,10 +719,7 @@ namespace FlaxEditor.GUI.Timeline.Tracks
|
||||
/// </summary>
|
||||
public Camera Camera => Actor as Camera;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the camera track media.
|
||||
/// </summary>
|
||||
public CameraCutMedia TrackMedia
|
||||
private CameraCutMedia TrackMedia
|
||||
{
|
||||
get
|
||||
{
|
||||
@@ -731,6 +745,7 @@ namespace FlaxEditor.GUI.Timeline.Tracks
|
||||
public CameraCutTrack(ref TrackCreateOptions options)
|
||||
: base(ref options, false)
|
||||
{
|
||||
MinMediaCount = 1;
|
||||
Height = CameraCutThumbnailRenderer.Height + 8;
|
||||
|
||||
// Pilot Camera button
|
||||
@@ -794,12 +809,18 @@ namespace FlaxEditor.GUI.Timeline.Tracks
|
||||
}
|
||||
}
|
||||
|
||||
private void UpdateThumbnails()
|
||||
{
|
||||
foreach (CameraCutMedia media in Media)
|
||||
media.UpdateThumbnails();
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void OnObjectExistenceChanged(object obj)
|
||||
{
|
||||
base.OnObjectExistenceChanged(obj);
|
||||
|
||||
TrackMedia.UpdateThumbnails();
|
||||
UpdateThumbnails();
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
|
||||
Reference in New Issue
Block a user