- Updated AsciiRasterizer to support game and episode selection menus with improved layout and cursor handling. - Enhanced SixelRasterizer and SoftwareRasterizer to modularize menu drawing logic for game and episode selection. - Introduced new methods for drawing menus and applying fade effects across rasterizers. - Adjusted wall texture sampling in Rasterizer to anchor to projection height center for consistent rendering. - Added tests for wall texture sampling behavior to ensure legacy compatibility and new functionality. - Modified Flutter audio adapter to use nullable access for active game and adjusted game selection logic in the main class. - Cleaned up input handling in Wolf3dFlutterInput by removing unused menu tap variables. Signed-off-by: Hans Kokx <hans.d.kokx@gmail.com>
81 lines
2.6 KiB
Dart
81 lines
2.6 KiB
Dart
/// Flutter entry point for the GUI host application.
|
|
///
|
|
/// The GUI bootstraps bundled and discoverable game data through [Wolf3d]
|
|
/// before presenting the game-selection flow.
|
|
library;
|
|
|
|
import 'package:flutter/material.dart';
|
|
import 'package:wolf_3d_flutter/wolf_3d_flutter.dart';
|
|
import 'package:wolf_3d_gui/screens/game_screen.dart';
|
|
|
|
/// Creates the application shell after loading available Wolf3D data sets.
|
|
void main() async {
|
|
WidgetsFlutterBinding.ensureInitialized();
|
|
|
|
final Wolf3d wolf3d = await Wolf3d().init();
|
|
|
|
runApp(
|
|
MaterialApp(
|
|
home: wolf3d.availableGames.isEmpty
|
|
? const _NoGameDataScreen()
|
|
: GameScreen(wolf3d: wolf3d),
|
|
),
|
|
);
|
|
}
|
|
|
|
class _NoGameDataScreen extends StatelessWidget {
|
|
const _NoGameDataScreen();
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return Scaffold(
|
|
backgroundColor: const Color(0xFF140000),
|
|
body: Center(
|
|
child: Padding(
|
|
padding: const EdgeInsets.all(24),
|
|
child: ConstrainedBox(
|
|
constraints: const BoxConstraints(maxWidth: 640),
|
|
child: DecoratedBox(
|
|
decoration: BoxDecoration(
|
|
color: const Color(0xFF590002),
|
|
border: Border.all(color: const Color(0xFFB00000), width: 2),
|
|
),
|
|
child: const Padding(
|
|
padding: EdgeInsets.all(20),
|
|
child: Column(
|
|
mainAxisSize: MainAxisSize.min,
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
children: [
|
|
Text(
|
|
'WOLF3D DATA NOT FOUND',
|
|
style: TextStyle(
|
|
color: Color(0xFFFFF700),
|
|
fontSize: 24,
|
|
fontWeight: FontWeight.bold,
|
|
),
|
|
),
|
|
SizedBox(height: 16),
|
|
Text(
|
|
'No game files were discovered.\n\n'
|
|
'Add Wolfenstein 3D data files to one of these locations:\n'
|
|
'- packages/wolf_3d_assets/assets/retail\n'
|
|
'- packages/wolf_3d_assets/assets/shareware\n'
|
|
'- or a discoverable local game-data folder.\n\n'
|
|
'Restart the app after adding the files.',
|
|
style: TextStyle(
|
|
color: Colors.white,
|
|
fontSize: 15,
|
|
height: 1.4,
|
|
),
|
|
),
|
|
],
|
|
),
|
|
),
|
|
),
|
|
),
|
|
),
|
|
),
|
|
);
|
|
}
|
|
}
|