Automatic save/restore

This commit is contained in:
Lior Halphon 2023-01-15 01:43:34 +02:00
parent 1c1d6bec78
commit e04aeebc0a
3 changed files with 61 additions and 2 deletions

View File

@ -5,5 +5,15 @@
@property (readonly) NSArray<NSString *> *allROMs;
@property (nonatomic) NSString *currentROM;
@property (readonly) NSString *romFile;
@property (readonly) NSString *batterySaveFile;
@property (readonly) NSString *autosaveStateFile;
- (NSString *)stateFile:(unsigned)index;
- (NSString *)romFileForROM:(NSString *)rom;
- (NSString *)batterySaveFileForROM:(NSString *)rom;
- (NSString *)autosaveStateFileForROM:(NSString *)rom;
- (NSString *)stateFile:(unsigned)index forROM:(NSString *)rom;
@end

View File

@ -54,6 +54,51 @@
return _romFile = [self romFileForDirectory:romDirectory];
}
- (NSString *)romFileForROM:(NSString *)rom
{
if (rom == _currentROM) {
return self.romFile;
}
NSString *root = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, true).firstObject;
NSString *romDirectory = [root stringByAppendingPathComponent:_currentROM];
return [self romFileForDirectory:romDirectory];
}
- (NSString *)auxilaryFileForROM:(NSString *)rom withExtension:(NSString *)extension
{
return [[[self romFileForROM:rom] stringByDeletingPathExtension] stringByAppendingPathExtension:extension];
}
- (NSString *)batterySaveFileForROM:(NSString *)rom
{
return [self auxilaryFileForROM:rom withExtension:@"sav"];
}
- (NSString *)batterySaveFile
{
return [self batterySaveFileForROM:_currentROM];
}
- (NSString *)autosaveStateFileForROM:(NSString *)rom
{
return [self auxilaryFileForROM:rom withExtension:@"auto"];
}
- (NSString *)autosaveStateFile
{
return [self autosaveStateFileForROM:_currentROM];
}
- (NSString *)stateFile:(unsigned)index forROM:(NSString *)rom
{
return [self auxilaryFileForROM:rom withExtension:[NSString stringWithFormat:@"s%u", index]];
}
- (NSString *)stateFile:(unsigned)index
{
return [self stateFile:index forROM:_currentROM];
}
- (NSArray<NSString *> *)allROMs
{
NSMutableArray<NSString *> *ret = [NSMutableArray array];

View File

@ -130,6 +130,10 @@ static void rumbleCallback(GB_gameboy_t *gb, double amp)
if (romManager.romFile) {
// Todo: display errors and warnings
_romLoaded = GB_load_rom(&_gb, romManager.romFile.fileSystemRepresentation) == 0;
if (_romLoaded) {
GB_load_battery(&_gb, [GBROMManager sharedManager].batterySaveFile.fileSystemRepresentation);
GB_load_state(&_gb, [GBROMManager sharedManager].autosaveStateFile.fileSystemRepresentation);
}
}
}
@ -238,8 +242,8 @@ static void rumbleCallback(GB_gameboy_t *gb, double amp)
[_audioClient stop];
_audioClient = nil;
// Todo
//GB_save_battery(&gb, self.savPath.UTF8String);
GB_save_battery(&_gb, [GBROMManager sharedManager].batterySaveFile.fileSystemRepresentation);
GB_save_state(&_gb, [GBROMManager sharedManager].autosaveStateFile.fileSystemRepresentation);
}
- (void)start