2014-07-09 16:35:39 +00:00
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Text;
|
|
|
|
|
|
|
|
|
|
namespace BizHawk.Client.Common
|
|
|
|
|
{
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Represents a TasMovie Marker
|
|
|
|
|
/// A marker is a tagged frame with a message
|
|
|
|
|
/// </summary>
|
|
|
|
|
public class TasMovieMarker
|
|
|
|
|
{
|
|
|
|
|
private int _frame;
|
|
|
|
|
|
|
|
|
|
public TasMovieMarker(int frame, string message = "")
|
|
|
|
|
{
|
|
|
|
|
_frame = frame;
|
|
|
|
|
Message = message;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Parses a Marker from a line of text
|
|
|
|
|
/// </summary>
|
|
|
|
|
public TasMovieMarker(string line)
|
|
|
|
|
{
|
|
|
|
|
var split = line.Split('\t');
|
|
|
|
|
_frame = int.Parse(split[0]);
|
|
|
|
|
Message = split[1];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public virtual int Frame
|
|
|
|
|
{
|
|
|
|
|
get { return _frame; }
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public virtual string Message { get; set; }
|
|
|
|
|
|
|
|
|
|
public override string ToString()
|
|
|
|
|
{
|
|
|
|
|
return Frame.ToString() + '\t' + Message;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public override int GetHashCode()
|
|
|
|
|
{
|
|
|
|
|
return this.Frame.GetHashCode();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public override bool Equals(object obj)
|
|
|
|
|
{
|
|
|
|
|
if (obj == null)
|
|
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
else if (obj is TasMovieMarker)
|
|
|
|
|
{
|
|
|
|
|
return this.Frame == (obj as TasMovieMarker).Frame;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static bool operator ==(TasMovieMarker marker, int frame)
|
|
|
|
|
{
|
|
|
|
|
return marker.Frame == frame;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static bool operator !=(TasMovieMarker marker, int frame)
|
|
|
|
|
{
|
|
|
|
|
return marker.Frame != frame;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public class TasMovieMarkerList : List<TasMovieMarker>
|
|
|
|
|
{
|
2014-07-17 18:38:30 +00:00
|
|
|
|
private readonly TasMovie _movie;
|
|
|
|
|
|
|
|
|
|
public TasMovieMarkerList(TasMovie movie)
|
|
|
|
|
{
|
|
|
|
|
_movie = movie;
|
|
|
|
|
}
|
|
|
|
|
|
2014-07-09 16:35:39 +00:00
|
|
|
|
public override string ToString()
|
|
|
|
|
{
|
2014-07-16 02:17:19 +00:00
|
|
|
|
var sb = new StringBuilder();
|
2014-07-09 16:35:39 +00:00
|
|
|
|
foreach (var marker in this)
|
|
|
|
|
{
|
|
|
|
|
sb.AppendLine(marker.ToString());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return sb.ToString();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public new void Add(TasMovieMarker item)
|
|
|
|
|
{
|
|
|
|
|
var existingItem = this.FirstOrDefault(m => m.Frame == item.Frame);
|
|
|
|
|
if (existingItem != null)
|
|
|
|
|
{
|
|
|
|
|
existingItem.Message = item.Message;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
base.Add(item);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void Add(int frame, string message)
|
|
|
|
|
{
|
|
|
|
|
Add(new TasMovieMarker(frame, message));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void Remove(int frame)
|
|
|
|
|
{
|
|
|
|
|
var existingItem = this.FirstOrDefault(m => m.Frame == frame);
|
|
|
|
|
if (existingItem != null)
|
|
|
|
|
{
|
|
|
|
|
this.Remove(existingItem);
|
|
|
|
|
}
|
|
|
|
|
}
|
2014-07-13 14:13:20 +00:00
|
|
|
|
|
|
|
|
|
public TasMovieMarker Previous(int currentFrame)
|
2014-07-17 19:00:28 +00:00
|
|
|
|
{
|
|
|
|
|
return this
|
|
|
|
|
.Where(m => m.Frame < currentFrame)
|
|
|
|
|
.OrderBy(m => m.Frame)
|
|
|
|
|
.LastOrDefault();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public TasMovieMarker PreviousOrCurrent(int currentFrame)
|
2014-07-13 14:13:20 +00:00
|
|
|
|
{
|
|
|
|
|
return this
|
2014-07-15 23:43:17 +00:00
|
|
|
|
.Where(m => m.Frame <= currentFrame)
|
2014-07-13 14:13:20 +00:00
|
|
|
|
.OrderBy(m => m.Frame)
|
2014-07-15 23:43:17 +00:00
|
|
|
|
.LastOrDefault();
|
2014-07-13 14:13:20 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public TasMovieMarker Next(int currentFrame)
|
|
|
|
|
{
|
|
|
|
|
return this
|
|
|
|
|
.Where(m => m.Frame > currentFrame)
|
|
|
|
|
.OrderBy(m => m.Frame)
|
2014-07-15 23:43:17 +00:00
|
|
|
|
.FirstOrDefault();
|
2014-07-13 14:13:20 +00:00
|
|
|
|
}
|
2014-07-16 00:10:37 +00:00
|
|
|
|
|
|
|
|
|
public bool IsMarker(int frame)
|
|
|
|
|
{
|
|
|
|
|
return this.Any(m => m == frame);
|
|
|
|
|
}
|
2014-07-09 16:35:39 +00:00
|
|
|
|
}
|
|
|
|
|
}
|