TAstudio - start capturing states and lag, basic background color logic, start item text logic
This commit is contained in:
parent
0c3818a37e
commit
98f1e02df3
|
@ -10,7 +10,7 @@ namespace BizHawk.Client.Common
|
|||
/// <summary>
|
||||
/// Gets or sets the string representation of the controller input as a series of mnemonics
|
||||
/// </summary>
|
||||
string Input { get; set; }
|
||||
string Input { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets a value indicating whether or not this was a lag frame,
|
||||
|
@ -18,6 +18,11 @@ namespace BizHawk.Client.Common
|
|||
/// </summary>
|
||||
bool Lagged { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets a valude indicating whether or not this record has a captured state
|
||||
/// </summary>
|
||||
bool HasState { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the Savestate for this frame of input
|
||||
/// </summary>
|
||||
|
|
|
@ -187,13 +187,14 @@ namespace BizHawk.Client.Common
|
|||
|
||||
public class MnemonicsGenerator
|
||||
{
|
||||
IController Source;
|
||||
private IController Source;
|
||||
private string ControlType;
|
||||
|
||||
public void SetSource(IController source)
|
||||
{
|
||||
Source = source;
|
||||
ControlType = source.Type.Name;
|
||||
}
|
||||
string ControlType;
|
||||
|
||||
bool IsBasePressed(string name)
|
||||
{
|
||||
|
@ -359,7 +360,6 @@ namespace BizHawk.Client.Common
|
|||
return input.ToString();
|
||||
}
|
||||
|
||||
|
||||
private string GetA78ControllersAsMnemonic()
|
||||
{
|
||||
StringBuilder input = new StringBuilder("|");
|
||||
|
|
|
@ -7,18 +7,43 @@ namespace BizHawk.Client.Common
|
|||
{
|
||||
public class MovieRecord : IMovieRecord
|
||||
{
|
||||
private List<byte> _state = new List<byte>();
|
||||
private MnemonicsGenerator _mg;
|
||||
private byte[] _state;
|
||||
|
||||
public string Input { get; private set; }
|
||||
|
||||
public string Input { get; set; }
|
||||
public bool Lagged { get; private set; }
|
||||
public IEnumerable<byte> State
|
||||
{
|
||||
get { return _state; }
|
||||
}
|
||||
|
||||
public MovieRecord()
|
||||
public void SetInput(MnemonicsGenerator mg)
|
||||
{
|
||||
_mg = mg;
|
||||
}
|
||||
|
||||
public void ClearInput()
|
||||
{
|
||||
_mg = new MnemonicsGenerator();
|
||||
}
|
||||
|
||||
public MovieRecord(MnemonicsGenerator mg, bool captureState)
|
||||
{
|
||||
_mg = mg;
|
||||
if (captureState)
|
||||
{
|
||||
Lagged = Global.Emulator.IsLagFrame;
|
||||
_state = Global.Emulator.SaveStateBinary();
|
||||
}
|
||||
}
|
||||
|
||||
public bool HasState
|
||||
{
|
||||
get
|
||||
{
|
||||
return State.Count() > 0;
|
||||
}
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
|
|
|
@ -10,6 +10,15 @@ namespace BizHawk.Client.Common
|
|||
{
|
||||
// TODO: preloading, or benchmark and see how much of a performaance gain it really is
|
||||
// TODO: support loop Offset
|
||||
|
||||
public MovieRecord this[int index]
|
||||
{
|
||||
get
|
||||
{
|
||||
return _records[index];
|
||||
}
|
||||
}
|
||||
|
||||
#region Implementation
|
||||
|
||||
public TasMovie(string filename, bool startsFromSavestate = false)
|
||||
|
@ -149,17 +158,14 @@ namespace BizHawk.Client.Common
|
|||
if (frame < _records.Count)
|
||||
{
|
||||
Changes = true;
|
||||
_records[frame].Input = MnemonicsGenerator.GetEmptyMnemonic;
|
||||
_records[frame].ClearInput();
|
||||
}
|
||||
}
|
||||
|
||||
public void AppendFrame(MnemonicsGenerator mg)
|
||||
{
|
||||
Changes = true;
|
||||
_records.Add(new MovieRecord
|
||||
{
|
||||
Input = mg.GetControllersAsMnemonic(),
|
||||
});
|
||||
_records.Add(new MovieRecord(mg, true));
|
||||
}
|
||||
|
||||
public void RecordFrame(int frame, MnemonicsGenerator mg)
|
||||
|
@ -175,7 +181,14 @@ namespace BizHawk.Client.Common
|
|||
}
|
||||
}
|
||||
|
||||
PokeFrame(frame, mg);
|
||||
if (frame < _records.Count)
|
||||
{
|
||||
PokeFrame(frame, mg);
|
||||
}
|
||||
else
|
||||
{
|
||||
AppendFrame(mg);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -184,7 +197,7 @@ namespace BizHawk.Client.Common
|
|||
if (frame < _records.Count)
|
||||
{
|
||||
Changes = true;
|
||||
_records[frame].Input = mg.GetControllersAsMnemonic();
|
||||
_records[frame].SetInput(mg);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -692,7 +692,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
this.MarkerDescriptionBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
|
||||
this.MarkerDescriptionBox.Location = new System.Drawing.Point(118, 495);
|
||||
this.MarkerDescriptionBox.Name = "MarkerDescriptionBox";
|
||||
this.MarkerDescriptionBox.Size = new System.Drawing.Size(194, 20);
|
||||
this.MarkerDescriptionBox.Size = new System.Drawing.Size(185, 20);
|
||||
this.MarkerDescriptionBox.TabIndex = 3;
|
||||
//
|
||||
// TopMarkerBox
|
||||
|
|
|
@ -12,6 +12,9 @@ namespace BizHawk.Client.EmuHawk
|
|||
{
|
||||
public partial class TAStudio : Form, IToolForm
|
||||
{
|
||||
private const string MarkerColumn = "";
|
||||
private const string FrameColumn = "Frame#";
|
||||
|
||||
private int _defaultWidth;
|
||||
private int _defaultHeight;
|
||||
private TasMovie _tas;
|
||||
|
@ -71,12 +74,37 @@ namespace BizHawk.Client.EmuHawk
|
|||
|
||||
private void TASView_QueryItemBkColor(int index, int column, ref Color color)
|
||||
{
|
||||
|
||||
var record = _tas[index];
|
||||
if (!record.HasState)
|
||||
{
|
||||
color = BackColor;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (record.Lagged)
|
||||
{
|
||||
color = Color.Pink;
|
||||
}
|
||||
else
|
||||
{
|
||||
color = Color.LightGreen;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void TASView_QueryItemText(int index, int column, out string text)
|
||||
{
|
||||
text = String.Empty;
|
||||
var columnName = TASView.Columns[column].Name;
|
||||
|
||||
if (columnName == MarkerColumn)
|
||||
{
|
||||
text = "X";
|
||||
}
|
||||
else if (columnName == FrameColumn)
|
||||
{
|
||||
text = index.ToString().PadLeft(5, '0');
|
||||
}
|
||||
}
|
||||
|
||||
private void TAStudio_Load(object sender, EventArgs e)
|
||||
|
|
Loading…
Reference in New Issue