Add support for multiple media events on audio, postfx and camera tracks in Scene Animations

#519
This commit is contained in:
Wojtek Figat
2021-09-21 17:21:39 +02:00
parent f547e44d3d
commit 0ec16de569
16 changed files with 479 additions and 331 deletions

View File

@@ -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 />