Supports local multiplayer (up to 4 players)

Heavily based on Ian Clawson’s PRs, including #128
This commit is contained in:
Riley Testut 2023-02-28 18:49:32 -06:00
parent 5a019e5950
commit 10af836105
11 changed files with 50 additions and 15 deletions

@ -1 +1 @@
Subproject commit 12f1432f2aa48ed24f324d31b405fe4e5c73d6f6
Subproject commit 6c84366b3a76045782905293c9616e33f5da1a35

@ -1 +1 @@
Subproject commit c40ae8b069433159627903b43b4b4154d9a03ea2
Subproject commit c9ac6b5f4f50e9ae4b5fa7f8b420f240003df127

@ -1 +1 @@
Subproject commit 27b969810857d8b62436fec612291177d909e087
Subproject commit 8ea36dff87bc1f787765de45fa8ccbcc1256a0e3

@ -1 +1 @@
Subproject commit a57751156ba7df394903893ff8c37f08024d5500
Subproject commit 81f8ffba56823637706689fb5c6bc634ee4d9b32

@ -1 +1 @@
Subproject commit e3a957f4e841694f90cd6f64f421130dfa6e9727
Subproject commit 18c595887a12ef23e0d54c63f83c91c99e7f4827

@ -1 +1 @@
Subproject commit 694b73f87ce9fb83d37eaeea862bcf79e0cfc080
Subproject commit b0eeb87c41cf5d78182879a10a51f7c147a60ef7

@ -1 +1 @@
Subproject commit d66953070113b961adb55b44ee6d20f00947b6fd
Subproject commit c8816c51f82210a9c4cc62b1a7c53fa21bc705ee

@ -1 +1 @@
Subproject commit 5ffdc3bc615a280ec1b78d2c82772ff78aa04368
Subproject commit bc3e0178caa29b4c1e8872133dd00aa55cc9da2a

@ -1 +1 @@
Subproject commit d296fe001652c282c43dacc8f5504f7fdff15265
Subproject commit d5717291325578f64d519822aeb2be81217c67f3

View File

@ -15,6 +15,7 @@ extension ControllersSettingsViewController
{
private enum Section: Int
{
case none
case localDevice
case externalControllers
case customizeControls
@ -149,6 +150,18 @@ private extension ControllersSettingsViewController
switch Section(rawValue: indexPath.section)!
{
case .none:
cell.textLabel?.text = NSLocalizedString("None", comment: "")
if self.gameController == nil
{
cell.accessoryType = .checkmark
}
else
{
cell.accessoryType = .none
}
case .localDevice, .externalControllers:
let controller: GameController
@ -172,7 +185,7 @@ private extension ControllersSettingsViewController
cell.accessoryType = .checkmark
}
else
{
{
cell.accessoryType = .none
}
@ -257,18 +270,20 @@ extension ControllersSettingsViewController
{
override func numberOfSections(in tableView: UITableView) -> Int
{
if self.gameController == self.localDeviceController
if self.gameController == self.localDeviceController || self.gameController == nil
{
return 2
return 3
}
return 3
return 4
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
switch Section(rawValue: section)!
{
case .none where self.playerIndex == 0: return 0
case .none: return 1
case .localDevice: return 1
case .externalControllers: return self.connectedControllers.isEmpty ? 1 : self.connectedControllers.count
case .customizeControls: return 1
@ -294,11 +309,30 @@ extension ControllersSettingsViewController
{
switch Section(rawValue: section)!
{
case .none: return nil
case .localDevice: return NSLocalizedString("This Device", comment: "")
case .externalControllers: return NSLocalizedString("Game Controllers", comment: "")
case .customizeControls: return nil
}
}
override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat
{
switch Section(rawValue: section)!
{
case .none where self.playerIndex == 0: return 1
default: return UITableView.automaticDimension
}
}
override func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat
{
switch Section(rawValue: section)!
{
case .none where self.playerIndex == 0: return 1
default: return UITableView.automaticDimension
}
}
}
extension ControllersSettingsViewController
@ -309,6 +343,7 @@ extension ControllersSettingsViewController
switch Section(rawValue: indexPath.section)!
{
case .none: self.gameController = nil
case .localDevice: self.gameController = self.localDeviceController
case .externalControllers where self.connectedControllers.isEmpty: return
case .externalControllers: self.gameController = self.connectedControllers[indexPath.row]
@ -338,7 +373,7 @@ extension ControllersSettingsViewController
}
else
{
previousIndexPath = nil
previousIndexPath = IndexPath(row: 0, section: Section.none.rawValue)
}
self.tableView.beginUpdates()

View File

@ -330,7 +330,7 @@ extension SettingsViewController
let section = Section(rawValue: sectionIndex)!
switch section
{
case .controllers: return 1 // Temporarily hide other controller indexes until controller logic is finalized
case .controllers: return 4
case .controllerSkins: return System.registeredSystems.count
case .syncing: return SyncManager.shared.coordinator?.account == nil ? 1 : super.tableView(tableView, numberOfRowsInSection: sectionIndex)
default: