JD2022-TU1/main/tools/framework/JD.Serialization/Timeline/Utils/TrackUtils.cs

58 lines
2 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
namespace JD.Serialization
{
public class TrackUtils
{
public static void SetupTapeTracksFromPlayerCount(Tape tape, int playerCount)
{
var tracksToHave = new List<TapeTrack>();
//We add the move tracks
for (int i = 0; i < playerCount; i++)
{
var trackName = $"Moves{i + 1}";
var track = tape.GetOrCreateTrack<MoveTrack>(trackName);
track.MoveType = MotionClip.MoveType_Enum.MoveType_HandOnly;
track.CoachId = (MotionClip.CoachId_Enum)i;
tracksToHave.Add(track);
}
//We add the kinect move tracks
for (int i = 0; i < playerCount; i++)
{
var trackName = $"CameraMoves{i + 1}";
var track = tape.GetOrCreateTrack<MoveTrack>(trackName);
track.MoveType = MotionClip.MoveType_Enum.MoveType_FullBody;
track.CoachId = (MotionClip.CoachId_Enum)i;
tracksToHave.Add(track);
}
//We add the picto track
{
var track = tape.GetOrCreateTrack<PictoTrack>("Pictos");
tracksToHave.Add(track);
}
//We add the gold effects track
{
var track = tape.GetOrCreateTrack<GoldEffectTrack>(GoldEffectTrack.DefaultName);
tracksToHave.Add(track);
}
foreach (var track in tracksToHave)
{
//We ensure tracks are sorted in correct order
tape.Tracks.Move(track.Index, tracksToHave.IndexOf(track));
}
var tracksToDelete = tape.Tracks.Where(track => !tracksToHave.Contains(track)).ToList();
if (tracksToDelete.Any())
{
foreach (var track in tracksToDelete)
{
tape.Tracks.Remove(track);
}
}
}
}
}