feat: Refactor game persistence and rendering management for CLI and Flutter hosts
Signed-off-by: Hans Kokx <hans.d.kokx@gmail.com>
This commit is contained in:
@@ -1,42 +1,3 @@
|
||||
library;
|
||||
|
||||
import 'package:wolf_3d_dart/wolf_3d_engine.dart';
|
||||
|
||||
/// Coordinates gameplay persistence concerns for Flutter hosts.
|
||||
class GamePersistenceManager {
|
||||
/// Creates persistence manager dependencies with overridable adapters.
|
||||
GamePersistenceManager({
|
||||
RendererSettingsPersistence? rendererSettingsPersistence,
|
||||
SaveGamePersistence? saveGamePersistence,
|
||||
}) : rendererSettingsPersistence =
|
||||
rendererSettingsPersistence ?? DefaultRendererSettingsPersistence(),
|
||||
saveGamePersistence =
|
||||
saveGamePersistence ?? DefaultSaveGamePersistence();
|
||||
|
||||
/// Persists and restores runtime renderer settings.
|
||||
final RendererSettingsPersistence rendererSettingsPersistence;
|
||||
|
||||
/// Persists slot-based save game snapshots.
|
||||
final SaveGamePersistence saveGamePersistence;
|
||||
|
||||
/// Loads previously persisted renderer settings.
|
||||
Future<WolfRendererSettings?> loadRendererSettings() {
|
||||
return rendererSettingsPersistence.load();
|
||||
}
|
||||
|
||||
/// Loads persisted renderer settings and applies them to [engine].
|
||||
Future<WolfRendererSettings?> restoreRendererSettings(
|
||||
WolfEngine engine,
|
||||
) async {
|
||||
final WolfRendererSettings? saved = await loadRendererSettings();
|
||||
if (saved != null) {
|
||||
engine.updateRendererSettings(saved);
|
||||
}
|
||||
return saved;
|
||||
}
|
||||
|
||||
/// Saves current renderer settings.
|
||||
Future<void> saveRendererSettings(WolfRendererSettings settings) {
|
||||
return rendererSettingsPersistence.save(settings);
|
||||
}
|
||||
}
|
||||
export 'package:wolf_3d_dart/wolf_3d_host.dart' show GamePersistenceManager;
|
||||
|
||||
@@ -1,44 +1,4 @@
|
||||
library;
|
||||
|
||||
import 'package:wolf_3d_dart/wolf_3d_engine.dart';
|
||||
|
||||
/// Renderer presentation mode used by Flutter host widgets.
|
||||
enum GameRendererMode {
|
||||
/// Software pixel renderer presented via decoded framebuffer images.
|
||||
software,
|
||||
|
||||
/// Text-mode renderer for debugging and retro terminal aesthetics.
|
||||
ascii,
|
||||
|
||||
/// GLSL renderer with optional CRT-style post processing.
|
||||
hardware,
|
||||
}
|
||||
|
||||
/// Maps engine renderer settings to host renderer presentation mode.
|
||||
GameRendererMode gameRendererModeFromSettings(WolfRendererSettings settings) {
|
||||
return switch (settings.mode) {
|
||||
WolfRendererMode.hardware => GameRendererMode.hardware,
|
||||
WolfRendererMode.software => GameRendererMode.software,
|
||||
WolfRendererMode.ascii || WolfRendererMode.sixel => GameRendererMode.ascii,
|
||||
};
|
||||
}
|
||||
|
||||
/// Falls back to software mode when GLSL rendering is unavailable at runtime.
|
||||
void handleGlslUnavailable({
|
||||
required bool isMounted,
|
||||
required GameRendererMode rendererMode,
|
||||
required WolfEngine? engine,
|
||||
}) {
|
||||
if (!isMounted || rendererMode != GameRendererMode.hardware) {
|
||||
return;
|
||||
}
|
||||
|
||||
final WolfEngine? activeEngine = engine;
|
||||
if (activeEngine == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
activeEngine.updateRendererSettings(
|
||||
activeEngine.rendererSettings.copyWith(mode: WolfRendererMode.software),
|
||||
);
|
||||
}
|
||||
export 'package:wolf_3d_dart/wolf_3d_host.dart'
|
||||
show GameRendererMode, gameRendererModeFromSettings, handleGlslUnavailable;
|
||||
|
||||
@@ -44,10 +44,7 @@ class _NoopAudio implements EngineAudio {
|
||||
}
|
||||
|
||||
class _RecordingEngine extends Wolf3dFlutterEngine {
|
||||
_RecordingEngine({required this.audio}) : super(audioBackend: audio);
|
||||
|
||||
@override
|
||||
final _NoopAudio audio;
|
||||
_RecordingEngine({required _NoopAudio audio}) : super(audioBackend: audio);
|
||||
|
||||
int initCallCount = 0;
|
||||
String? lastDirectory;
|
||||
|
||||
Reference in New Issue
Block a user