Displays preview save state image even if context menu previews are disabled
This commit is contained in:
parent
0ad0e752f8
commit
1b874ce9c1
@ -1 +1 @@
|
|||||||
Subproject commit a07abad3214a310785055eddf86bed36ae7612ca
|
Subproject commit 135b0532a3b17e0a970e23bdc81bf80595ed81b2
|
||||||
@ -27,6 +27,8 @@ class PreviewGameViewController: DeltaCore.GameViewController
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var isLivePreview: Bool = true
|
||||||
|
|
||||||
private var emulatorCoreQueue = DispatchQueue(label: "com.rileytestut.Delta.PreviewGameViewController.emulatorCoreQueue", qos: .userInitiated)
|
private var emulatorCoreQueue = DispatchQueue(label: "com.rileytestut.Delta.PreviewGameViewController.emulatorCoreQueue", qos: .userInitiated)
|
||||||
private var copiedSaveFiles = [(originalURL: URL, copyURL: URL)]()
|
private var copiedSaveFiles = [(originalURL: URL, copyURL: URL)]()
|
||||||
|
|
||||||
@ -58,6 +60,20 @@ class PreviewGameViewController: DeltaCore.GameViewController
|
|||||||
return previewActionItems
|
return previewActionItems
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public required init()
|
||||||
|
{
|
||||||
|
super.init()
|
||||||
|
|
||||||
|
self.delegate = self
|
||||||
|
}
|
||||||
|
|
||||||
|
public required init?(coder aDecoder: NSCoder)
|
||||||
|
{
|
||||||
|
super.init(coder: aDecoder)
|
||||||
|
|
||||||
|
self.delegate = self
|
||||||
|
}
|
||||||
|
|
||||||
deinit
|
deinit
|
||||||
{
|
{
|
||||||
// Explicitly stop emulatorCore _before_ we remove ourselves as observer
|
// Explicitly stop emulatorCore _before_ we remove ourselves as observer
|
||||||
@ -77,6 +93,7 @@ extension PreviewGameViewController
|
|||||||
super.viewDidLoad()
|
super.viewDidLoad()
|
||||||
|
|
||||||
self.controllerView.isHidden = true
|
self.controllerView.isHidden = true
|
||||||
|
self.controllerView.controllerSkin = nil // Skip loading controller skin from disk, which may be slow.
|
||||||
|
|
||||||
// Temporarily prevent emulatorCore from updating gameView to prevent flicker of black, or other visual glitches
|
// Temporarily prevent emulatorCore from updating gameView to prevent flicker of black, or other visual glitches
|
||||||
self.emulatorCore?.remove(self.gameView)
|
self.emulatorCore?.remove(self.gameView)
|
||||||
@ -94,7 +111,7 @@ extension PreviewGameViewController
|
|||||||
super.viewDidAppear(animated)
|
super.viewDidAppear(animated)
|
||||||
|
|
||||||
self.emulatorCoreQueue.async {
|
self.emulatorCoreQueue.async {
|
||||||
self.emulatorCore?.start()
|
self.startEmulation()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -264,3 +281,11 @@ private extension PreviewGameViewController
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extension PreviewGameViewController: GameViewControllerDelegate
|
||||||
|
{
|
||||||
|
func gameViewControllerShouldResumeEmulation(_ gameViewController: DeltaCore.GameViewController) -> Bool
|
||||||
|
{
|
||||||
|
return self.isLivePreview
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@ -821,9 +821,16 @@ extension GameCollectionViewController: UIViewControllerPreviewingDelegate
|
|||||||
gameViewController.pauseEmulation()
|
gameViewController.pauseEmulation()
|
||||||
|
|
||||||
let indexPath = self.dataSource.fetchedResultsController.indexPath(forObject: game)!
|
let indexPath = self.dataSource.fetchedResultsController.indexPath(forObject: game)!
|
||||||
|
|
||||||
let fileURL = FileManager.default.uniqueTemporaryURL()
|
let fileURL = FileManager.default.uniqueTemporaryURL()
|
||||||
|
|
||||||
|
if gameViewController.isLivePreview
|
||||||
|
{
|
||||||
self.activeSaveState = gameViewController.emulatorCore?.saveSaveState(to: fileURL)
|
self.activeSaveState = gameViewController.emulatorCore?.saveSaveState(to: fileURL)
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
self.activeSaveState = gameViewController.previewSaveState
|
||||||
|
}
|
||||||
|
|
||||||
gameViewController.emulatorCore?.stop()
|
gameViewController.emulatorCore?.stop()
|
||||||
|
|
||||||
@ -831,6 +838,8 @@ extension GameCollectionViewController: UIViewControllerPreviewingDelegate
|
|||||||
|
|
||||||
self.launchGame(at: indexPath, clearScreen: true, ignoreAlreadyRunningError: true)
|
self.launchGame(at: indexPath, clearScreen: true, ignoreAlreadyRunningError: true)
|
||||||
|
|
||||||
|
if gameViewController.isLivePreview
|
||||||
|
{
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
try FileManager.default.removeItem(at: fileURL)
|
try FileManager.default.removeItem(at: fileURL)
|
||||||
@ -840,6 +849,7 @@ extension GameCollectionViewController: UIViewControllerPreviewingDelegate
|
|||||||
print(error)
|
print(error)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//MARK: - SaveStatesViewControllerDelegate -
|
//MARK: - SaveStatesViewControllerDelegate -
|
||||||
@ -926,9 +936,12 @@ extension GameCollectionViewController
|
|||||||
let actions = self.actions(for: game)
|
let actions = self.actions(for: game)
|
||||||
|
|
||||||
return UIContextMenuConfiguration(identifier: indexPath as NSIndexPath, previewProvider: { [weak self] in
|
return UIContextMenuConfiguration(identifier: indexPath as NSIndexPath, previewProvider: { [weak self] in
|
||||||
guard let self = self, Settings.isPreviewsEnabled else { return nil }
|
guard let self = self else { return nil }
|
||||||
|
|
||||||
let previewViewController = self.makePreviewGameViewController(for: game)
|
let previewViewController = self.makePreviewGameViewController(for: game)
|
||||||
|
previewViewController.isLivePreview = Settings.isPreviewsEnabled
|
||||||
|
|
||||||
|
guard previewViewController.isLivePreview || previewViewController.previewSaveState != nil else { return nil }
|
||||||
self._previewTransitionViewController = previewViewController
|
self._previewTransitionViewController = previewViewController
|
||||||
|
|
||||||
return previewViewController
|
return previewViewController
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user