WIP moving difficulty selection to engine
Signed-off-by: Hans Kokx <hans.d.kokx@gmail.com>
This commit is contained in:
@@ -21,6 +21,12 @@ class Wolf3d {
|
||||
/// Shared engine audio backend used by menus and gameplay sessions.
|
||||
final EngineAudio audio = WolfAudio();
|
||||
|
||||
/// Engine menu background color as 24-bit RGB.
|
||||
int menuBackgroundRgb = 0x890000;
|
||||
|
||||
/// Engine menu panel color as 24-bit RGB.
|
||||
int menuPanelRgb = 0x590002;
|
||||
|
||||
/// Shared Flutter input adapter reused by gameplay screens.
|
||||
final Wolf3dFlutterInput input = Wolf3dFlutterInput();
|
||||
|
||||
@@ -41,6 +47,54 @@ class Wolf3d {
|
||||
/// Index of the episode currently selected in the UI flow.
|
||||
int get activeEpisode => _activeEpisode;
|
||||
|
||||
Difficulty? _activeDifficulty;
|
||||
|
||||
/// The difficulty applied when [launchEngine] creates a new session.
|
||||
Difficulty? get activeDifficulty => _activeDifficulty;
|
||||
|
||||
/// Stores [difficulty] so the next [launchEngine] call uses it.
|
||||
void setActiveDifficulty(Difficulty difficulty) {
|
||||
_activeDifficulty = difficulty;
|
||||
}
|
||||
|
||||
/// Clears any previously selected difficulty so the engine can prompt for one.
|
||||
void clearActiveDifficulty() {
|
||||
_activeDifficulty = null;
|
||||
}
|
||||
|
||||
WolfEngine? _engine;
|
||||
|
||||
/// The most recently launched engine.
|
||||
///
|
||||
/// Throws a [StateError] until [launchEngine] has been called.
|
||||
WolfEngine get engine {
|
||||
if (_engine == null) {
|
||||
throw StateError('No engine launched. Call launchEngine() first.');
|
||||
}
|
||||
return _engine!;
|
||||
}
|
||||
|
||||
/// Creates and initializes a [WolfEngine] for the current session config.
|
||||
///
|
||||
/// Uses [activeGame], [activeEpisode], and [activeDifficulty]. Stores the
|
||||
/// engine so it can be retrieved via [engine]. [onGameWon] is invoked when
|
||||
/// the player completes the final level of the episode.
|
||||
WolfEngine launchEngine({required void Function() onGameWon}) {
|
||||
_engine = WolfEngine(
|
||||
data: activeGame,
|
||||
difficulty: _activeDifficulty,
|
||||
startingEpisode: _activeEpisode,
|
||||
frameBuffer: FrameBuffer(320, 200),
|
||||
menuBackgroundRgb: menuBackgroundRgb,
|
||||
menuPanelRgb: menuPanelRgb,
|
||||
audio: audio,
|
||||
input: input,
|
||||
onGameWon: onGameWon,
|
||||
);
|
||||
_engine!.init();
|
||||
return _engine!;
|
||||
}
|
||||
|
||||
/// Sets the active episode for the current [activeGame].
|
||||
void setActiveEpisode(int episodeIndex) {
|
||||
if (_activeGame == null) {
|
||||
|
||||
Reference in New Issue
Block a user