Supports local multiplayer (up to 4 players)
Heavily based on Ian Clawson’s PRs, including #128
This commit is contained in:
parent
5a019e5950
commit
10af836105
@ -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
|
||||||
@ -15,6 +15,7 @@ extension ControllersSettingsViewController
|
|||||||
{
|
{
|
||||||
private enum Section: Int
|
private enum Section: Int
|
||||||
{
|
{
|
||||||
|
case none
|
||||||
case localDevice
|
case localDevice
|
||||||
case externalControllers
|
case externalControllers
|
||||||
case customizeControls
|
case customizeControls
|
||||||
@ -149,6 +150,18 @@ private extension ControllersSettingsViewController
|
|||||||
|
|
||||||
switch Section(rawValue: indexPath.section)!
|
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:
|
case .localDevice, .externalControllers:
|
||||||
let controller: GameController
|
let controller: GameController
|
||||||
|
|
||||||
@ -172,7 +185,7 @@ private extension ControllersSettingsViewController
|
|||||||
cell.accessoryType = .checkmark
|
cell.accessoryType = .checkmark
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
cell.accessoryType = .none
|
cell.accessoryType = .none
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -257,18 +270,20 @@ extension ControllersSettingsViewController
|
|||||||
{
|
{
|
||||||
override func numberOfSections(in tableView: UITableView) -> Int
|
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
|
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
|
||||||
{
|
{
|
||||||
switch Section(rawValue: section)!
|
switch Section(rawValue: section)!
|
||||||
{
|
{
|
||||||
|
case .none where self.playerIndex == 0: return 0
|
||||||
|
case .none: return 1
|
||||||
case .localDevice: return 1
|
case .localDevice: return 1
|
||||||
case .externalControllers: return self.connectedControllers.isEmpty ? 1 : self.connectedControllers.count
|
case .externalControllers: return self.connectedControllers.isEmpty ? 1 : self.connectedControllers.count
|
||||||
case .customizeControls: return 1
|
case .customizeControls: return 1
|
||||||
@ -294,11 +309,30 @@ extension ControllersSettingsViewController
|
|||||||
{
|
{
|
||||||
switch Section(rawValue: section)!
|
switch Section(rawValue: section)!
|
||||||
{
|
{
|
||||||
|
case .none: return nil
|
||||||
case .localDevice: return NSLocalizedString("This Device", comment: "")
|
case .localDevice: return NSLocalizedString("This Device", comment: "")
|
||||||
case .externalControllers: return NSLocalizedString("Game Controllers", comment: "")
|
case .externalControllers: return NSLocalizedString("Game Controllers", comment: "")
|
||||||
case .customizeControls: return nil
|
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
|
extension ControllersSettingsViewController
|
||||||
@ -309,6 +343,7 @@ extension ControllersSettingsViewController
|
|||||||
|
|
||||||
switch Section(rawValue: indexPath.section)!
|
switch Section(rawValue: indexPath.section)!
|
||||||
{
|
{
|
||||||
|
case .none: self.gameController = nil
|
||||||
case .localDevice: self.gameController = self.localDeviceController
|
case .localDevice: self.gameController = self.localDeviceController
|
||||||
case .externalControllers where self.connectedControllers.isEmpty: return
|
case .externalControllers where self.connectedControllers.isEmpty: return
|
||||||
case .externalControllers: self.gameController = self.connectedControllers[indexPath.row]
|
case .externalControllers: self.gameController = self.connectedControllers[indexPath.row]
|
||||||
@ -338,7 +373,7 @@ extension ControllersSettingsViewController
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
previousIndexPath = nil
|
previousIndexPath = IndexPath(row: 0, section: Section.none.rawValue)
|
||||||
}
|
}
|
||||||
|
|
||||||
self.tableView.beginUpdates()
|
self.tableView.beginUpdates()
|
||||||
|
|||||||
@ -330,7 +330,7 @@ extension SettingsViewController
|
|||||||
let section = Section(rawValue: sectionIndex)!
|
let section = Section(rawValue: sectionIndex)!
|
||||||
switch section
|
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 .controllerSkins: return System.registeredSystems.count
|
||||||
case .syncing: return SyncManager.shared.coordinator?.account == nil ? 1 : super.tableView(tableView, numberOfRowsInSection: sectionIndex)
|
case .syncing: return SyncManager.shared.coordinator?.account == nil ? 1 : super.tableView(tableView, numberOfRowsInSection: sectionIndex)
|
||||||
default:
|
default:
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user