mirror of https://github.com/LIJI32/SameBoy.git
Automatic save/restore
This commit is contained in:
parent
1c1d6bec78
commit
e04aeebc0a
|
@ -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
|
||||
|
|
|
@ -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];
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue