Added difficulty screen

Signed-off-by: Hans Kokx <hans.d.kokx@gmail.com>
This commit is contained in:
2026-03-13 19:20:06 +01:00
parent 827d858f0f
commit 01d8329969
6 changed files with 156 additions and 27 deletions

View File

@@ -3,9 +3,10 @@ import 'dart:math' as math;
import 'package:flutter/material.dart';
import 'package:flutter/scheduler.dart';
import 'package:flutter/services.dart';
import 'package:wolf_dart/classes/difficulty.dart';
import 'package:wolf_dart/classes/entity.dart';
import 'package:wolf_dart/classes/linear_coordinates.dart';
import 'package:wolf_dart/classes/matrix.dart';
import 'package:wolf_dart/classes/sprite.dart';
import 'package:wolf_dart/features/map/wolf_map.dart';
import 'package:wolf_dart/features/renderer/raycast_painter.dart';
import 'package:wolf_dart/sprite_gallery.dart';
@@ -13,10 +14,12 @@ import 'package:wolf_dart/sprite_gallery.dart';
class WolfRenderer extends StatefulWidget {
const WolfRenderer({
super.key,
required this.difficulty,
this.showSpriteGallery = false,
this.isDemo = true,
});
final Difficulty difficulty;
final bool showSpriteGallery;
final bool isDemo;
@@ -39,7 +42,7 @@ class _WolfRendererState extends State<WolfRenderer>
bool _isLoading = true;
bool _spaceWasPressed = false;
List<Sprite> entities = [];
List<Entity> entities = [];
// Track door animations
// Key is "X,Y" coordinate. Value is how far open it is (0.0 to 1.0)
@@ -83,23 +86,43 @@ class _WolfRendererState extends State<WolfRenderer>
// NEW: Populate the Entities!
else if (objId >= 23 && objId <= 70) {
int calculatedSpriteIndex = objId - 21;
// Safety bounds check to prevent crashes on custom/corrupt maps
if (calculatedSpriteIndex >= 0 &&
calculatedSpriteIndex < gameMap.sprites.length) {
entities.add((
x: x + 0.5,
y: y + 0.5,
spriteIndex: calculatedSpriteIndex,
));
entities.add(
Entity(
x: x + 0.5,
y: y + 0.5,
spriteIndex: calculatedSpriteIndex,
state: EntityState.staticObj,
mapId: objId,
),
);
}
} else if (objId == 124) {
}
// NEW: The Dead Guard (FIXED INDEX)
else if (objId == 124) {
if (95 < gameMap.sprites.length) {
entities.add((
x: x + 0.5,
y: y + 0.5,
spriteIndex: 95,
));
entities.add(
Entity(
x: x + 0.5,
y: y + 0.5,
spriteIndex: 95,
state: EntityState.dead,
mapId: objId,
),
);
}
} else if (_isGuardForDifficulty(objId)) {
if (50 < gameMap.sprites.length) {
entities.add(
Entity(
x: x + 0.5,
y: y + 0.5,
spriteIndex: 50, // Front-facing Brown Guard
state: EntityState.idle,
mapId: objId,
),
);
}
}
}
@@ -260,6 +283,21 @@ class _WolfRendererState extends State<WolfRenderer>
setState(() {});
}
bool _isGuardForDifficulty(int objId) {
switch (widget.difficulty.level) {
case 0: // Baby
return objId >= 108 && objId <= 115;
case 1: // Easy
return objId >= 144 && objId <= 151;
case 2: // Normal
return objId >= 180 && objId <= 187;
case 3: // Hard
return objId >= 216 && objId <= 223;
default:
return false;
}
}
@override
Widget build(BuildContext context) {
if (_isLoading) {