feat: Implement platform-specific persistence for renderer settings and save games
Signed-off-by: Hans Kokx <hans.d.kokx@gmail.com>
This commit is contained in:
@@ -7,8 +7,6 @@ library;
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:wolf_3d_cli/cli_game_loop.dart';
|
||||
import 'package:wolf_3d_cli/cli_renderer_settings_persistence.dart';
|
||||
import 'package:wolf_3d_cli/cli_save_game_persistence.dart';
|
||||
import 'package:wolf_3d_dart/wolf_3d_data.dart';
|
||||
import 'package:wolf_3d_dart/wolf_3d_data_types.dart';
|
||||
import 'package:wolf_3d_dart/wolf_3d_engine.dart';
|
||||
@@ -64,12 +62,12 @@ void main() async {
|
||||
input: CliInput(),
|
||||
onGameWon: () => stopAndExit(0),
|
||||
onQuit: () => stopAndExit(0),
|
||||
saveGamePersistence: CliSaveGamePersistence(),
|
||||
saveGamePersistence: DefaultSaveGamePersistence(),
|
||||
);
|
||||
|
||||
engine.init();
|
||||
|
||||
final persistence = CliRendererSettingsPersistence();
|
||||
final persistence = DefaultRendererSettingsPersistence();
|
||||
final WolfRendererSettings? saved = await persistence.load();
|
||||
|
||||
gameLoop = CliGameLoop(
|
||||
|
||||
@@ -12,9 +12,7 @@ import 'package:wolf_3d_dart/wolf_3d_engine.dart';
|
||||
class CliRendererSettingsPersistence extends RendererSettingsPersistence
|
||||
with JsonRendererSettingsPersistence {
|
||||
CliRendererSettingsPersistence({String? filePath})
|
||||
: _filePath =
|
||||
filePath ??
|
||||
'${Platform.environment['HOME'] ?? '.'}/.wolf3d_cli_settings.json';
|
||||
: _filePath = filePath ?? '${_platformConfigDir()}/settings.json';
|
||||
|
||||
final String _filePath;
|
||||
|
||||
@@ -40,3 +38,21 @@ class CliRendererSettingsPersistence extends RendererSettingsPersistence
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
String _platformConfigDir() {
|
||||
if (Platform.isLinux) {
|
||||
final String xdg = Platform.environment['XDG_CONFIG_HOME'] ?? '';
|
||||
final String home = Platform.environment['HOME'] ?? '.';
|
||||
return xdg.isNotEmpty ? '$xdg/wolf3d' : '$home/.config/wolf3d';
|
||||
}
|
||||
if (Platform.isMacOS) {
|
||||
final String home = Platform.environment['HOME'] ?? '.';
|
||||
return '$home/Library/Application Support/wolf3d';
|
||||
}
|
||||
if (Platform.isWindows) {
|
||||
final String appData = Platform.environment['APPDATA'] ?? '.';
|
||||
return '$appData/wolf3d';
|
||||
}
|
||||
final String home = Platform.environment['HOME'] ?? '.';
|
||||
return '$home/.config/wolf3d';
|
||||
}
|
||||
|
||||
@@ -12,9 +12,7 @@ import 'package:wolf_3d_dart/wolf_3d_engine.dart';
|
||||
/// `SAVEGAM{slot}.{ext}` where `{ext}` follows the active game version.
|
||||
class CliSaveGamePersistence implements SaveGamePersistence {
|
||||
CliSaveGamePersistence({String? directoryPath})
|
||||
: _directoryPath =
|
||||
directoryPath ??
|
||||
'${Platform.environment['HOME'] ?? '.'}/.wolf3d_saves';
|
||||
: _directoryPath = directoryPath ?? '${_platformConfigDir()}/saves';
|
||||
|
||||
final String _directoryPath;
|
||||
|
||||
@@ -66,3 +64,21 @@ class CliSaveGamePersistence implements SaveGamePersistence {
|
||||
return '$_directoryPath/SAVEGAM$normalizedSlot.${version.fileExtension}';
|
||||
}
|
||||
}
|
||||
|
||||
String _platformConfigDir() {
|
||||
if (Platform.isLinux) {
|
||||
final String xdg = Platform.environment['XDG_CONFIG_HOME'] ?? '';
|
||||
final String home = Platform.environment['HOME'] ?? '.';
|
||||
return xdg.isNotEmpty ? '$xdg/wolf3d' : '$home/.config/wolf3d';
|
||||
}
|
||||
if (Platform.isMacOS) {
|
||||
final String home = Platform.environment['HOME'] ?? '.';
|
||||
return '$home/Library/Application Support/wolf3d';
|
||||
}
|
||||
if (Platform.isWindows) {
|
||||
final String appData = Platform.environment['APPDATA'] ?? '.';
|
||||
return '$appData/wolf3d';
|
||||
}
|
||||
final String home = Platform.environment['HOME'] ?? '.';
|
||||
return '$home/.config/wolf3d';
|
||||
}
|
||||
|
||||
@@ -13,8 +13,6 @@ import 'package:wolf_3d_dart/wolf_3d_renderer.dart';
|
||||
import 'package:wolf_3d_flutter/renderer/wolf_3d_ascii_renderer.dart';
|
||||
import 'package:wolf_3d_flutter/renderer/wolf_3d_flutter_renderer.dart';
|
||||
import 'package:wolf_3d_flutter/renderer/wolf_3d_glsl_renderer.dart';
|
||||
import 'package:wolf_3d_flutter/renderer_settings_persistence_flutter.dart';
|
||||
import 'package:wolf_3d_flutter/save_game_persistence_flutter.dart';
|
||||
import 'package:wolf_3d_flutter/wolf_3d_flutter.dart';
|
||||
import 'package:wolf_3d_flutter/wolf_3d_input_flutter.dart';
|
||||
import 'package:wolf_3d_gui/screens/debug_tools_screen.dart';
|
||||
@@ -141,10 +139,10 @@ class GameScreen extends StatefulWidget {
|
||||
|
||||
class _GameScreenState extends State<GameScreen> {
|
||||
late final WolfEngine _engine;
|
||||
final FlutterRendererSettingsPersistence _persistence =
|
||||
FlutterRendererSettingsPersistence();
|
||||
final FlutterSaveGamePersistence _savePersistence =
|
||||
FlutterSaveGamePersistence();
|
||||
final DefaultRendererSettingsPersistence _persistence =
|
||||
DefaultRendererSettingsPersistence();
|
||||
final DefaultSaveGamePersistence _savePersistence =
|
||||
DefaultSaveGamePersistence();
|
||||
|
||||
/// Mirrors [WolfRendererSettings.mode] into the Flutter renderer enum.
|
||||
RendererMode _rendererMode = RendererMode.hardware;
|
||||
|
||||
Reference in New Issue
Block a user