Skip to content

Commit

Permalink
[Fast Forward] Fixes some issues with the cycle mode
Browse files Browse the repository at this point in the history
  • Loading branch information
LitRitt committed Mar 27, 2024
1 parent 56ae3bc commit 06ff16c
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 19 deletions.
61 changes: 43 additions & 18 deletions Ignited/Emulation/GameViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -646,7 +646,11 @@ extension GameViewController

pauseViewController.fastForwardItem?.isSelected = (self.emulatorCore?.rate != self.emulatorCore?.deltaCore.supportedRates.lowerBound)
pauseViewController.fastForwardItem?.action = { [unowned self] item in
self.performFastForwardAction(activate: item.isSelected)
switch Settings.gameplayFeatures.fastForward.mode
{
case .cycle: self.performFastForwardCycleAction()
default: self.performFastForwardAction(activate: item.isSelected)
}
}
pauseViewController.fastForwardItem?.menu = makeFastForwardSpeedMenu()

Expand Down Expand Up @@ -2468,44 +2472,65 @@ extension GameViewController
}

guard let emulatorCore = self.emulatorCore else { return }

var text: String = ""
var validSpeedFound: Bool = false
var newSpeed: Double = 0

var speeds = Settings.gameplayFeatures.fastForward.cycleModes
speeds.append(1)
speeds.sort()

for speed in speeds {
if emulatorCore.rate == speed,
if emulatorCore.rate <= speed,
let index = speeds.firstIndex(of: speed)
{
validSpeedFound = true
var newIndex = index + 1

if newIndex >= speeds.count
if emulatorCore.rate < speed
{
newIndex = 0
newIndex = index
}

let newSpeed = speeds[newIndex]

emulatorCore.rate = newSpeed

if newSpeed < 1.0
{
text = NSLocalizedString("Slow Motion: " + String(format: "%.f", emulatorCore.rate * 100) + "%", comment: "")
}
else if newSpeed > 1.0
{
text = NSLocalizedString("Fast Forward: " + String(format: "%.f", emulatorCore.rate * 100) + "%", comment: "")
}
else
if newIndex >= speeds.count
{
text = NSLocalizedString("Fast Forward Disabled", comment: "")
newIndex = 0
}

newSpeed = speeds[newIndex] ?? 1

break
}
}

if !validSpeedFound
{
if speeds[0] == 1
{
newSpeed = speeds[1]
}
else
{
newSpeed = speeds[0]
}
}

emulatorCore.rate = newSpeed

if newSpeed < 1.0
{
text = NSLocalizedString("Slow Motion: " + String(format: "%.f", emulatorCore.rate * 100) + "%", comment: "")
}
else if newSpeed > 1.0
{
text = NSLocalizedString("Fast Forward: " + String(format: "%.f", emulatorCore.rate * 100) + "%", comment: "")
}
else
{
text = NSLocalizedString("Fast Forward Disabled", comment: "")
}

if Settings.userInterfaceFeatures.toasts.fastForward
{
self.presentToastView(text: text)
Expand Down
9 changes: 8 additions & 1 deletion Ignited/Features/Gameplay/FastForwardOptions.swift
Original file line number Diff line number Diff line change
Expand Up @@ -164,7 +164,14 @@ extension FastForwardOptions
.foregroundColor(.accentColor)
.contentShape(Rectangle())
.onTapGesture {
selectedSpeeds.wrappedValue.removeAll(where: {$0 == speed.rawValue})
if selectedSpeeds.wrappedValue.count > 1
{
selectedSpeeds.wrappedValue.removeAll(where: {$0 == speed.rawValue})
}
else
{
ToastView.show(NSLocalizedString("There must be at least 1 selected speed", comment: ""))
}
}
}
else
Expand Down

0 comments on commit 06ff16c

Please sign in to comment.