basic virtualpad + default controls for TIC80, mark it as released

This commit is contained in:
CasualPokePlayer 2022-11-26 19:54:45 -08:00
parent c49a8d338c
commit c23b063733
4 changed files with 136 additions and 11 deletions

View File

@ -1052,6 +1052,19 @@
"P1 9": "Keypad9",
"P1 Asterisk": "KeypadMultiply",
"P1 Pound": "KeypadDivide",
},
"TIC-80 Controller": {
"P1 Up": "Up",
"P1 Down": "Down",
"P1 Left": "Left",
"P1 Right": "Right",
"P1 A": "X",
"P1 B": "Z",
"P1 X": "S",
"P1 Y": "A",
"Mouse Left Click": "Z",
"Mouse Middle Click": "X",
"Mouse Right Click": "C",
}
},
"AllTrollersAutoFire": {
@ -1415,6 +1428,18 @@
"Mult": -1.0,
"Deadzone": 0.1
}
},
"TIC-80 Controller": {
"Mouse X Position": {
"Value": "WMouse X",
"Mult": 1.0,
"Deadzone": 0.0
},
"Mouse Y Position": {
"Value": "WMouse Y",
"Mult": 1.0,
"Deadzone": 0.0
}
}
},
"AllTrollersFeedbacks": {

View File

@ -139,7 +139,7 @@ namespace BizHawk.Emulation.Cores.Computers.TIC80
}
[BizImport(CC)]
public abstract bool Init(byte[] rom, int sz, bool[] inputsEnabled);
public abstract bool Init(byte[] rom, int sz, bool[] inputsActive);
[BizImport(CC)]
public abstract void SetInputs(ref TIC80Inputs inputs);

View File

@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using BizHawk.Common;
using BizHawk.Emulation.Common;
@ -7,7 +8,7 @@ using BizHawk.Emulation.Cores.Waterbox;
namespace BizHawk.Emulation.Cores.Computers.TIC80
{
[PortedCore(CoreNames.TIC80, "nesbox", "v1.0.2164", "https://tic80.com/", isReleased: false)]
[PortedCore(CoreNames.TIC80, "nesbox", "v1.0.2164", "https://tic80.com/")]
[ServiceNotApplicable(new[] { typeof(IDriveLight), })]
public partial class TIC80 : WaterboxCore
{
@ -49,7 +50,7 @@ namespace BizHawk.Emulation.Cores.Computers.TIC80
});
var rom = lp.Roms[0].FileData;
var inputsEnabled = new bool[6]
var inputsActive = new bool[6]
{
_syncSettings.Gamepad1,
_syncSettings.Gamepad2,
@ -59,20 +60,23 @@ namespace BizHawk.Emulation.Cores.Computers.TIC80
_syncSettings.Keyboard,
};
if (!_core.Init(rom, rom.Length, inputsEnabled))
if (!_core.Init(rom, rom.Length, inputsActive))
{
throw new InvalidOperationException("Init returned false!");
}
// inputsEnabled is mutated in Init call
// as such any Autodetects in inputsEnabled will be set to True or False
ControllerDefinition = CreateControllerDefinition(inputsEnabled);
// note: InputsActive is mutated in Init call
// any items not available for the game will be set to false
ControllerDefinition = CreateControllerDefinition(inputsActive);
InputsActive = Array.AsReadOnly(inputsActive);
PostInit();
DeterministicEmulation = lp.DeterministicEmulationRequested || (!_syncSettings.UseRealTime);
InitializeRtc(_syncSettings.InitialTime);
}
public readonly ReadOnlyCollection<bool> InputsActive;
private static readonly IReadOnlyCollection<KeyValuePair<string, LibTIC80.TIC80Keys>> KeyMap = MakeKeyMap();
private static IReadOnlyCollection<KeyValuePair<string, LibTIC80.TIC80Keys>> MakeKeyMap()
@ -89,13 +93,13 @@ namespace BizHawk.Emulation.Cores.Computers.TIC80
return Array.AsReadOnly(ret);
}
private static ControllerDefinition CreateControllerDefinition(bool[] inputsEnabled)
private static ControllerDefinition CreateControllerDefinition(bool[] inputsActive)
{
var ret = new ControllerDefinition("TIC-80 Controller");
for (int i = 0; i < 4; i++)
{
if (inputsEnabled[i])
if (inputsActive[i])
{
foreach (var b in Enum.GetValues(typeof(LibTIC80.TIC80Gamepad)))
{
@ -104,7 +108,7 @@ namespace BizHawk.Emulation.Cores.Computers.TIC80
}
}
if (inputsEnabled[4])
if (inputsActive[4])
{
ret.AddXYPair("Mouse Position {0}", AxisPairOrientation.RightAndUp, (-128).RangeTo(127), 0);
ret.BoolButtons.Add("Mouse Left Click");
@ -130,7 +134,7 @@ namespace BizHawk.Emulation.Cores.Computers.TIC80
}
}
if (inputsEnabled[5])
if (inputsActive[5])
{
foreach (var k in Enum.GetValues(typeof(LibTIC80.TIC80Keys)))
{

View File

@ -0,0 +1,96 @@
using System;
using System.Collections.Generic;
using System.Drawing;
using BizHawk.Common;
using BizHawk.Emulation.Common;
using BizHawk.Emulation.Cores.Computers.TIC80;
namespace BizHawk.Emulation.Cores
{
[Schema(VSystemID.Raw.TIC80)]
public class TIC80Schema : IVirtualPadSchema
{
public virtual IEnumerable<PadSchema> GetPadSchemas(IEmulator core, Action<string> showMessageBox)
{
var inputsActive = ((TIC80)core).InputsActive;
if (inputsActive[0]) yield return StandardController(1);
if (inputsActive[1]) yield return StandardController(2);
if (inputsActive[2]) yield return StandardController(3);
if (inputsActive[3]) yield return StandardController(4);
if (inputsActive[4]) yield return Mouse();
// todo: keyboard
yield return ConsoleButtons();
}
private static PadSchema StandardController(int controller)
{
return new PadSchema
{
Size = new Size(174, 79),
Buttons = new[]
{
ButtonSchema.Up(14, 12, controller),
ButtonSchema.Down(14, 56, controller),
ButtonSchema.Left(2, 34, controller),
ButtonSchema.Right(24, 34, controller),
new ButtonSchema(100, 45, controller, "B"),
new ButtonSchema(124, 45, controller, "A"),
new ButtonSchema(100, 23, controller, "Y"),
new ButtonSchema(124, 23, controller, "X")
}
};
}
private static PadSchema Mouse()
{
var posRange = new AxisSpec((-128).RangeTo(127), 0);
var scrollRange = new AxisSpec((-32).RangeTo(31), 0);
return new PadSchema
{
Size = new Size(375, 395),
Buttons = new PadSchemaControl[]
{
new AnalogSchema(6, 14, "Mouse Position X")
{
Spec = posRange,
SecondarySpec = posRange,
},
new AnalogSchema(6, 220, "Mouse Scroll X")
{
Spec = scrollRange,
SecondarySpec = scrollRange,
},
new ButtonSchema(275, 15, "Mouse Left Click")
{
DisplayName = "Left",
},
new ButtonSchema(275, 45, "Mouse Middle Click")
{
DisplayName = "Middle",
},
new ButtonSchema(275, 75, "Mouse Right Click")
{
DisplayName = "Right",
},
new ButtonSchema(275, 105, "Mouse Relative Toggle")
{
DisplayName = "Relative Toggle",
},
}
};
}
private static PadSchema ConsoleButtons()
{
return new ConsoleSchema
{
Size = new Size(75, 50),
Buttons = new[]
{
new ButtonSchema(10, 15, "Reset")
}
};
}
}
}