Skip to content

Commit 15ff0ec

Browse files
committed
refactor sticky hold/autofire logic in TAStudio
- setting multiple buttons to autofire actually works - the config to respect lag in autofire is applied now - can set meaningful axis hold / autofire - removed last reference to "float autofire"
1 parent 6d9aa4d commit 15ff0ec

File tree

4 files changed

+54
-113
lines changed

4 files changed

+54
-113
lines changed

src/BizHawk.Client.EmuHawk/tools/TAStudio/PatternsForm.Designer.cs

Lines changed: 10 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/BizHawk.Client.EmuHawk/tools/TAStudio/PatternsForm.cs

Lines changed: 6 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,13 @@ public partial class PatternsForm : Form
1717

1818
private string SelectedButton => ButtonBox.Text;
1919

20-
private bool IsBool => SelectedButton == "Default bool Auto-Fire" || _tastudio.MovieSession.MovieController.Definition.BoolButtons.Contains(SelectedButton);
20+
private bool IsBool => _tastudio.MovieSession.MovieController.Definition.BoolButtons.Contains(SelectedButton);
2121

2222
public PatternsForm(TAStudio owner)
2323
{
2424
InitializeComponent();
2525
_tastudio = owner;
2626

27-
2827
foreach (var button in _tastudio.MovieSession.MovieController.Definition.BoolButtons)
2928
{
3029
ButtonBox.Items.Add(button);
@@ -34,9 +33,6 @@ public PatternsForm(TAStudio owner)
3433
{
3534
ButtonBox.Items.Add(button);
3635
}
37-
38-
ButtonBox.Items.Add("Default bool Auto-Fire");
39-
ButtonBox.Items.Add("Default float Auto-Fire");
4036
}
4137

4238
private void PatternsForm_Load(object sender, EventArgs e)
@@ -77,7 +73,7 @@ private void InsertButton_Click(object sender, EventArgs e)
7773
string defaultStr = "false";
7874
if (!IsBool)
7975
{
80-
defaultStr = "0";
76+
defaultStr = _tastudio.MovieSession.MovieController.Definition.Axes[SelectedButton].Neutral.ToString();
8177
}
8278

8379
_values.Insert(PatternList.SelectedIndex, defaultStr);
@@ -194,10 +190,6 @@ private void UpdateDisplay()
194190
if (PatternList.SelectedIndex != -1 && PatternList.SelectedIndex < _values.Count)
195191
{
196192
index = _tastudio.MovieSession.MovieController.Definition.BoolButtons.IndexOf(SelectedButton);
197-
if (SelectedButton == "Default bool Auto-Fire")
198-
{
199-
index = _tastudio.BoolPatterns.Length - 1;
200-
}
201193

202194
if (index != -1)
203195
{
@@ -207,14 +199,7 @@ private void UpdateDisplay()
207199
}
208200
else
209201
{
210-
if (SelectedButton == "Default float Auto-Fire")
211-
{
212-
index = _tastudio.AxisPatterns.Length - 1;
213-
}
214-
else
215-
{
216-
index = _tastudio.MovieSession.MovieController.Definition.Axes.IndexOf(SelectedButton);
217-
}
202+
index = _tastudio.MovieSession.MovieController.Definition.Axes.IndexOf(SelectedButton);
218203

219204
LagBox.Checked = _tastudio.AxisPatterns[index].SkipsLag;
220205
ValueNum.Value = int.Parse(_values[PatternList.SelectedIndex]);
@@ -233,10 +218,6 @@ private void UpdateDisplay()
233218
private void UpdatePattern()
234219
{
235220
int index = _tastudio.MovieSession.MovieController.Definition.BoolButtons.IndexOf(SelectedButton);
236-
if (SelectedButton == "Default bool Auto-Fire")
237-
{
238-
index = _tastudio.BoolPatterns.Length - 1;
239-
}
240221

241222
if (index != -1)
242223
{
@@ -253,14 +234,7 @@ private void UpdatePattern()
253234
}
254235
else
255236
{
256-
if (SelectedButton == "Default float Auto-Fire")
257-
{
258-
index = _tastudio.AxisPatterns.Length - 1;
259-
}
260-
else
261-
{
262-
index = _tastudio.MovieSession.MovieController.Definition.Axes.IndexOf(SelectedButton);
263-
}
237+
index = _tastudio.MovieSession.MovieController.Definition.Axes.IndexOf(SelectedButton);
264238

265239
var p = new List<int>();
266240
for (int i = 0; i < _counts.Count; i++)
@@ -274,21 +248,13 @@ private void UpdatePattern()
274248
_tastudio.AxisPatterns[index] = new AutoPatternAxis(p.ToArray(), LagBox.Checked, 0, _loopAt);
275249
}
276250

277-
if ((SelectedButton != "Default float Auto-Fire") && (SelectedButton != "Default bool Auto-Fire"))
278-
{
279-
_tastudio.UpdateAutoFire(SelectedButton, null);
280-
}
251+
_tastudio.UpdateAutoFire(SelectedButton, null);
281252
}
282253

283254
private void GetPattern()
284255
{
285256
int index = _tastudio.MovieSession.MovieController.Definition.BoolButtons.IndexOf(SelectedButton);
286257

287-
if (SelectedButton == "Default bool Auto-Fire")
288-
{
289-
index = _tastudio.BoolPatterns.Length - 1;
290-
}
291-
292258
if (index != -1)
293259
{
294260
bool[] p = _tastudio.BoolPatterns[index].Pattern;
@@ -315,14 +281,7 @@ private void GetPattern()
315281
}
316282
else
317283
{
318-
if (SelectedButton == "Default float Auto-Fire")
319-
{
320-
index = _tastudio.AxisPatterns.Length - 1;
321-
}
322-
else
323-
{
324-
index = _tastudio.MovieSession.MovieController.Definition.Axes.IndexOf(SelectedButton);
325-
}
284+
index = _tastudio.MovieSession.MovieController.Definition.Axes.IndexOf(SelectedButton);
326285

327286
var p = _tastudio.AxisPatterns[index].Pattern;
328287
var lastValue = p[0];

src/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.ListView.cs

Lines changed: 27 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -439,64 +439,51 @@ private void UpdateAutoFire()
439439

440440
public void UpdateAutoFire(string button, bool? isOn)
441441
{
442-
if (!isOn.HasValue) // No value means don't change whether it's on or off.
443-
{
444-
isOn = TasView.AllColumns.Find(c => c.Name == button).Emphasis;
445-
}
442+
// No value means don't change whether it's on or off.
443+
isOn ??= TasView.AllColumns.Find(c => c.Name == button).Emphasis;
446444

447-
int index = 0;
448-
if (autoHoldToolStripMenuItem.Checked)
449-
{
450-
index = 1;
451-
}
452-
453-
if (autoFireToolStripMenuItem.Checked)
454-
{
455-
index = 2;
456-
}
445+
// use custom pattern if set
446+
bool useCustom = customPatternToolStripMenuItem.Checked;
447+
// else, set autohold or fire based on setting
448+
bool autoHold = autoHoldToolStripMenuItem.Checked; // !autoFireToolStripMenuItem.Checked
457449

458450
if (ControllerType.BoolButtons.Contains(button))
459451
{
460-
if (index == 0)
452+
InputManager.StickyHoldController.SetButtonHold(button, false);
453+
InputManager.StickyAutofireController.SetButtonAutofire(button, false);
454+
if (!isOn.Value) return;
455+
456+
if (useCustom)
461457
{
462-
index = ControllerType.BoolButtons.IndexOf(button);
458+
InputManager.StickyAutofireController.SetButtonAutofire(button, true, BoolPatterns[ControllerType.BoolButtons.IndexOf(button)]);
463459
}
464-
else
460+
else if (autoHold)
465461
{
466-
index += ControllerType.BoolButtons.Count - 1;
462+
InputManager.StickyHoldController.SetButtonHold(button, true);
467463
}
468-
469-
// Fixes auto-loading, but why is this code like this? The code above suggests we have a BoolPattern for every bool button? But we don't
470-
// This is a sign of a deeper problem, but this fixes some basic functionality at least
471-
if (index < BoolPatterns.Length)
464+
else
472465
{
473-
AutoPatternBool p = BoolPatterns[index];
474-
InputManager.StickyAutofireController.SetButtonAutofire(button, isOn.Value, p);
466+
InputManager.StickyAutofireController.SetButtonAutofire(button, true);
475467
}
476468
}
477469
else
478470
{
479-
if (index == 0)
480-
{
481-
index = ControllerType.Axes.IndexOf(button);
482-
}
483-
else
471+
InputManager.StickyHoldController.SetAxisHold(button, null);
472+
InputManager.StickyAutofireController.SetAxisAutofire(button, null);
473+
if (!isOn.Value) return;
474+
475+
int holdValue = ControllerType.Axes[button].Range.EndInclusive; // it's not clear what value to use for auto-hold, just use max i guess
476+
if (useCustom)
484477
{
485-
index += ControllerType.Axes.Count - 1;
478+
InputManager.StickyAutofireController.SetAxisAutofire(button, holdValue, AxisPatterns[ControllerType.Axes.IndexOf(button)]);
486479
}
487-
488-
int? value = null;
489-
if (isOn.Value)
480+
else if (autoHold)
490481
{
491-
value = 0;
482+
InputManager.StickyHoldController.SetAxisHold(button, holdValue);
492483
}
493-
494-
// Fixes auto-loading, but why is this code like this? The code above suggests we have a AxisPattern for every axis button? But we don't
495-
// This is a sign of a deeper problem, but this fixes some basic functionality at least
496-
if (index < AxisPatterns.Length)
484+
else
497485
{
498-
AutoPatternAxis p = AxisPatterns[index];
499-
InputManager.StickyAutofireController.SetAxisAutofire(button, value, p);
486+
InputManager.StickyAutofireController.SetAxisAutofire(button, holdValue);
500487
}
501488
}
502489
}

src/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.cs

Lines changed: 11 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -398,39 +398,24 @@ private void SetUpColumns()
398398
TasView.AllColumns.ColumnsChanged();
399399
}
400400

401-
private void SetupBoolPatterns()
401+
private void SetupCustomPatterns()
402402
{
403-
// Patterns
404-
int bStart = 0;
405-
int fStart = 0;
406-
if (BoolPatterns == null)
407-
{
408-
BoolPatterns = new AutoPatternBool[ControllerType.BoolButtons.Count + 2];
409-
AxisPatterns = new AutoPatternAxis[ControllerType.Axes.Count + 2];
410-
}
411-
else
412-
{
413-
bStart = BoolPatterns.Length - 2;
414-
fStart = AxisPatterns.Length - 2;
415-
Array.Resize(ref BoolPatterns, ControllerType.BoolButtons.Count + 2);
416-
Array.Resize(ref AxisPatterns, ControllerType.Axes.Count + 2);
417-
}
403+
// custom autofire patterns to allow configuring a unique pattern for each button or axis
404+
BoolPatterns = new AutoPatternBool[ControllerType.BoolButtons.Count];
405+
AxisPatterns = new AutoPatternAxis[ControllerType.Axes.Count];
418406

419-
for (int i = bStart; i < BoolPatterns.Length - 2; i++)
407+
for (int i = 0; i < BoolPatterns.Length; i++)
420408
{
409+
// standard 1 on 1 off autofire pattern
421410
BoolPatterns[i] = new AutoPatternBool(1, 1);
422411
}
423412

424-
BoolPatterns[BoolPatterns.Length - 2] = new(1, 0);
425-
BoolPatterns[BoolPatterns.Length - 1] = new(Config.AutofireOn, Config.AutofireOff);
426-
427-
for (int i = fStart; i < AxisPatterns.Length - 2; i++)
413+
for (int i = 0; i < AxisPatterns.Length; i++)
428414
{
429-
AxisPatterns[i] = new AutoPatternAxis(new[] { 1 });
415+
// autohold pattern with the maximum axis range as hold value (bit arbitrary)
416+
var axisSpec = ControllerType.Axes[ControllerType.Axes[i]];
417+
AxisPatterns[i] = new AutoPatternAxis([ axisSpec.Range.EndInclusive ]);
430418
}
431-
432-
AxisPatterns[AxisPatterns.Length - 2] = new([ 1 ]);
433-
AxisPatterns[AxisPatterns.Length - 1] = new(1, Config.AutofireOn, 0, Config.AutofireOff);
434419
}
435420

436421
/// <remarks>for Lua</remarks>
@@ -572,7 +557,7 @@ private bool StartNewMovieWrapper(ITasMovie movie, bool isNew)
572557
SetUpColumns();
573558
}
574559
SetUpToolStripColumns();
575-
SetupBoolPatterns();
560+
SetupCustomPatterns();
576561
UpdateAutoFire();
577562
}
578563

0 commit comments

Comments
 (0)