diff --git a/BizHawk.MultiClient/RenderPanel.cs b/BizHawk.MultiClient/RenderPanel.cs index 578fb7690f..3112c99df9 100644 --- a/BizHawk.MultiClient/RenderPanel.cs +++ b/BizHawk.MultiClient/RenderPanel.cs @@ -111,7 +111,7 @@ namespace BizHawk.MultiClient bool Resized { get; set; } void AddMessage(string msg); string FPS { get; set; } - string MT { get; set; } + string MT { get; set; } } public class SysdrawingRenderPanel : IRenderer @@ -119,7 +119,7 @@ namespace BizHawk.MultiClient public bool Resized { get; set; } public void Dispose() { } public string FPS { get; set; } - public string MT { get; set; } + public string MT { get; set; } public void Render(IVideoProvider video) { Color BackgroundColor = Color.FromArgb(video.BackgroundColor); @@ -149,7 +149,7 @@ namespace BizHawk.MultiClient public Color BackgroundColor { get; set; } public bool Resized { get; set; } public string FPS { get; set; } - public string MT { get; set; } + public string MT { get; set; } private Direct3D d3d; private Device Device; private Control backingControl; @@ -229,26 +229,28 @@ namespace BizHawk.MultiClient Device.Present(Present.DoNotWait); } - public void Render(IVideoProvider video) - { - try - { - RenderExec(video); - } catch (Direct3D9Exception) { - // Wait until device is available or user gets annoyed and closes app - Result r; - do - { - r = Device.TestCooperativeLevel(); - Thread.Sleep(100); - } while (r == ResultCode.DeviceLost); + public void Render(IVideoProvider video) + { + try + { + RenderExec(video); + } + catch (Direct3D9Exception) + { + // Wait until device is available or user gets annoyed and closes app + Result r; + do + { + r = Device.TestCooperativeLevel(); + Thread.Sleep(100); + } while (r == ResultCode.DeviceLost); - // lets try recovery! - DestroyDevice(); - CreateDevice(); - RenderExec(video); - } - } + // lets try recovery! + DestroyDevice(); + CreateDevice(); + RenderExec(video); + } + } private void RenderExec(IVideoProvider video) { @@ -352,13 +354,13 @@ namespace BizHawk.MultiClient input = MakeInputDisplay(); MessageFont.DrawString(null, input, x, y, c); } - if (Global.MainForm.UserMovie.MultiTrack.isActive) - { - MessageFont.DrawString(null, MT, Global.Config.DispFPSx + 1, //TODO: Multitrack position variables - Global.Config.DispFPSy + 1, new Color4(Color.Black)); - MessageFont.DrawString(null, MT, Global.Config.DispFPSx, - Global.Config.DispFPSy, Color.FromArgb(Global.Config.MessagesColor)); - } + if (Global.MainForm.UserMovie.MultiTrack.isActive) + { + MessageFont.DrawString(null, MT, Global.Config.DispFPSx + 1, //TODO: Multitrack position variables + Global.Config.DispFPSy + 1, new Color4(Color.Black)); + MessageFont.DrawString(null, MT, Global.Config.DispFPSx, + Global.Config.DispFPSy, Color.FromArgb(Global.Config.MessagesColor)); + } if (Global.Config.DisplayFPS && FPS != null) { x = GetX(Global.Config.DispFPSx, Global.Config.DispFPSanchor); @@ -403,7 +405,7 @@ namespace BizHawk.MultiClient if (Global.MainForm.UserMovie.GetMovieMode() == MOVIEMODE.PLAY || Global.MainForm.UserMovie.GetMovieMode() == MOVIEMODE.PLAY) { - MessageFont.DrawString(null, "Play", backingControl.Size.Width-47, + MessageFont.DrawString(null, "Play", backingControl.Size.Width - 47, 0 + 1, new Color4(Color.Black)); MessageFont.DrawString(null, "Play", backingControl.Size.Width - 48, 0, new Color4(Color.Red)); @@ -416,9 +418,12 @@ namespace BizHawk.MultiClient 0, new Color4(Color.Red)); } - + //TODO: read subtitle positioning, implement multiple subtitles at once feature + MessageFont.DrawString(null, Global.MainForm.UserMovie.Subtitles.GetSubtitle(Global.Emulator.Frame), 0 + 1, + 0 + 1, new Color4(Color.Black)); + MessageFont.DrawString(null, Global.MainForm.UserMovie.Subtitles.GetSubtitle(Global.Emulator.Frame), 0 , + 0, new Color4(Color.White)); - } private string MakeFrameCounter() diff --git a/BizHawk.MultiClient/movie/Movie.cs b/BizHawk.MultiClient/movie/Movie.cs index d7a0961268..bdee73feff 100644 --- a/BizHawk.MultiClient/movie/Movie.cs +++ b/BizHawk.MultiClient/movie/Movie.cs @@ -12,7 +12,7 @@ namespace BizHawk.MultiClient { private MovieHeader Header = new MovieHeader(); private MovieLog Log = new MovieLog(); - private SubtitleList Subtitles = new SubtitleList(); + public SubtitleList Subtitles = new SubtitleList(); private bool IsText = true; private string Filename; @@ -25,16 +25,6 @@ namespace BizHawk.MultiClient public int lastLog; public int rerecordCount; - public string GetSubtitle(int frame) - { - return Subtitles.GetSubtitle(frame); - } - - public Point GetSutitlePoint(int frame) - { - return Subtitles.GetSubtitlePoint(frame); - } - public Movie(string filename, MOVIEMODE m) { Filename = filename; //TODO: Validate that file is writable diff --git a/BizHawk.MultiClient/movie/Subtitle.cs b/BizHawk.MultiClient/movie/Subtitle.cs index aad1eee5fc..c4eb7d0ee6 100644 --- a/BizHawk.MultiClient/movie/Subtitle.cs +++ b/BizHawk.MultiClient/movie/Subtitle.cs @@ -5,13 +5,14 @@ using System.Text; namespace BizHawk.MultiClient { - class Subtitle + public class Subtitle { public string Message; public int Frame; public int X; public int Y; public int Duration; + public UInt32 Color; public Subtitle() { @@ -20,15 +21,17 @@ namespace BizHawk.MultiClient Y = 0; Duration = 0; Frame = 0; + Color = 0xFFFFFFFF; } - public Subtitle(string message, int x, int y, int dur, int frame) + public Subtitle(string message, int x, int y, int dur, int frame, UInt32 color) { Message = message; Frame = frame; X = x; Y = y; Duration = dur; + Color = color; } } } diff --git a/BizHawk.MultiClient/movie/SubtitleList.cs b/BizHawk.MultiClient/movie/SubtitleList.cs index 7affb4697e..d6b04c0e6c 100644 --- a/BizHawk.MultiClient/movie/SubtitleList.cs +++ b/BizHawk.MultiClient/movie/SubtitleList.cs @@ -6,7 +6,7 @@ using System.Drawing; namespace BizHawk.MultiClient { - class SubtitleList + public class SubtitleList { private List subs = new List(); @@ -25,12 +25,13 @@ namespace BizHawk.MultiClient for (int x = 0; x < subs.Count; x++) { - if (subs[x].Frame + subs[x].Duration >= frame) + if (frame >= subs[x].Frame && frame <= subs[x].Frame + subs[x].Duration) return subs[x].Message; } return ""; } + //TODO public Point GetSubtitlePoint(int frame) { Point p = new Point(0, 0); @@ -51,18 +52,24 @@ namespace BizHawk.MultiClient int x = subtitleStr.IndexOf(' '); if (x <= 0) return false; - string str = subtitleStr.Substring(x, subtitleStr.Length - x); + string str = subtitleStr.Substring(x + 1, subtitleStr.Length - x - 1); + string frame = str.Substring(0, str.IndexOf(' ')); try { - s.Frame = Int16.Parse(str); + s.Frame = Int16.Parse(frame); } catch { return false; } - x = str.IndexOf(' '); - + //TODO: actually attempt to parse these things and supply with default values if they don't exist + s.X = 0; + s.Y = 0; + s.Duration = 120; + s.Message = str; + s.Color = 0xFFFFFFFF; + subs.Add(s); return true; }