Start movie subtitle system

This commit is contained in:
andres.delikat 2011-06-26 14:36:41 +00:00
parent 70dc87a971
commit 61e82793e9
4 changed files with 121 additions and 2 deletions

View File

@ -155,6 +155,8 @@
<Compile Include="movie\MovieHeader.cs" />
<Compile Include="movie\MovieLog.cs" />
<Compile Include="movie\MultitrackRecording.cs" />
<Compile Include="movie\Subtitle.cs" />
<Compile Include="movie\SubtitleList.cs" />
<Compile Include="MruStack.cs" />
<Compile Include="NameStateForm.cs">
<SubType>Form</SubType>

View File

@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Drawing;
namespace BizHawk.MultiClient
{
@ -11,6 +12,7 @@ namespace BizHawk.MultiClient
{
private MovieHeader Header = new MovieHeader();
private MovieLog Log = new MovieLog();
private SubtitleList Subtitles = new SubtitleList();
private bool IsText = true;
private string Filename;
@ -23,8 +25,15 @@ namespace BizHawk.MultiClient
public int lastLog;
public int rerecordCount;
//TODO:
//Author field, needs to be passed in play dialog
public string GetSubtitle(int frame)
{
return Subtitles.GetSubtitle(frame);
}
public Point GetSutitlePoint(int frame)
{
return Subtitles.GetSubtitlePoint(frame);
}
public Movie(string filename, MOVIEMODE m)
{
@ -247,6 +256,10 @@ namespace BizHawk.MultiClient
str = ParseHeader(str, MovieHeader.AUTHOR);
Header.AddHeaderLine(MovieHeader.AUTHOR, str);
}
else if (str.StartsWith("subtitle") || str.StartsWith("sub"))
{
Subtitles.AddSubtitle(str);
}
else if (str[0] == '|')
{
Log.AddFrame(str);

View File

@ -0,0 +1,34 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace BizHawk.MultiClient
{
class Subtitle
{
public string Message;
public int Frame;
public int X;
public int Y;
public int Duration;
public Subtitle()
{
Message = "";
X = 0;
Y = 0;
Duration = 0;
Frame = 0;
}
public Subtitle(string message, int x, int y, int dur, int frame)
{
Message = message;
Frame = frame;
X = x;
Y = y;
Duration = dur;
}
}
}

View File

@ -0,0 +1,70 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
namespace BizHawk.MultiClient
{
class SubtitleList
{
private List<Subtitle> subs = new List<Subtitle>();
public SubtitleList()
{
}
/// <summary>
/// Manages the logic of what subtitle should be displayed on any given frame based on frame & duration
/// </summary>
/// <param name="frame"></param>
/// <returns></returns>
public string GetSubtitle(int frame)
{
if (subs.Count == 0) return "";
for (int x = 0; x < subs.Count; x++)
{
if (subs[x].Frame + subs[x].Duration >= frame)
return subs[x].Message;
}
return "";
}
public Point GetSubtitlePoint(int frame)
{
Point p = new Point(0, 0);
return p;
}
/// <summary>
/// Attempts to parse string for necessary subtitle information, required is a frame and a message, space delminated, the word subtitle assumed to be first
/// </summary>
/// <param name="subtitleStr"></param>
/// <returns></returns>
public bool AddSubtitle(string subtitleStr)
{
if (subtitleStr.Length == 0) return false;
Subtitle s = new Subtitle();
int x = subtitleStr.IndexOf(' ');
if (x <= 0) return false;
string str = subtitleStr.Substring(x, subtitleStr.Length - x);
try
{
s.Frame = Int16.Parse(str);
}
catch
{
return false;
}
x = str.IndexOf(' ');
return true;
}
}
}