Move doors to door manager
Signed-off-by: Hans Kokx <hans.d.kokx@gmail.com>
This commit is contained in:
@@ -6,6 +6,7 @@ import 'package:wolf_dart/classes/linear_coordinates.dart';
|
||||
import 'package:wolf_dart/classes/matrix.dart';
|
||||
import 'package:wolf_dart/features/difficulty/difficulty.dart';
|
||||
import 'package:wolf_dart/features/entities/collectible.dart';
|
||||
import 'package:wolf_dart/features/entities/door_manager.dart';
|
||||
import 'package:wolf_dart/features/entities/enemies/enemy.dart';
|
||||
import 'package:wolf_dart/features/entities/entity.dart';
|
||||
import 'package:wolf_dart/features/entities/entity_registry.dart';
|
||||
@@ -36,6 +37,8 @@ class WolfRenderer extends StatefulWidget {
|
||||
class _WolfRendererState extends State<WolfRenderer>
|
||||
with SingleTickerProviderStateMixin {
|
||||
final InputManager inputManager = InputManager();
|
||||
final DoorManager doorManager = DoorManager();
|
||||
|
||||
late Ticker _gameLoop;
|
||||
final FocusNode _focusNode = FocusNode();
|
||||
late WolfMap gameMap;
|
||||
@@ -51,9 +54,6 @@ class _WolfRendererState extends State<WolfRenderer>
|
||||
|
||||
List<Entity> entities = [];
|
||||
|
||||
Map<String, double> doorOffsets = {};
|
||||
Map<String, int> doorStates = {};
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
@@ -64,6 +64,8 @@ class _WolfRendererState extends State<WolfRenderer>
|
||||
gameMap = demo ? await WolfMap.loadDemo() : await WolfMap.load();
|
||||
currentLevel = gameMap.levels[0].wallGrid;
|
||||
|
||||
doorManager.initDoors(currentLevel);
|
||||
|
||||
final Matrix<int> objectLevel = gameMap.levels[0].objectGrid;
|
||||
|
||||
for (int y = 0; y < 64; y++) {
|
||||
@@ -170,10 +172,7 @@ class _WolfRendererState extends State<WolfRenderer>
|
||||
bool _isWalkable(int x, int y) {
|
||||
if (currentLevel[y][x] == 0) return true;
|
||||
if (currentLevel[y][x] >= 90) {
|
||||
String key = '$x,$y';
|
||||
if (doorOffsets[key] != null && doorOffsets[key]! > 0.7) {
|
||||
return true;
|
||||
}
|
||||
return doorManager.isDoorOpenEnough(x, y);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@@ -183,9 +182,10 @@ class _WolfRendererState extends State<WolfRenderer>
|
||||
// 1. Process intentions and receive movement vectors
|
||||
final movement = _processInputs(elapsed);
|
||||
|
||||
doorManager.update(elapsed);
|
||||
|
||||
// 2. Explicit State Updates
|
||||
player.updateWeaponSwitch();
|
||||
_updateDoors();
|
||||
_applyMovementAndCollision(movement.dx, movement.dy);
|
||||
_updateEntities(elapsed);
|
||||
|
||||
@@ -241,37 +241,16 @@ class _WolfRendererState extends State<WolfRenderer>
|
||||
if (player.angle > 2 * math.pi) player.angle -= 2 * math.pi;
|
||||
|
||||
if (inputManager.isInteracting) {
|
||||
int targetX = (player.x + math.cos(player.angle)).toInt();
|
||||
int targetY = (player.y + math.sin(player.angle)).toInt();
|
||||
|
||||
if (targetY > 0 &&
|
||||
targetY < currentLevel.length &&
|
||||
targetX > 0 &&
|
||||
targetX < currentLevel[0].length) {
|
||||
if (currentLevel[targetY][targetX] >= 90) {
|
||||
String key = '$targetX,$targetY';
|
||||
if (!doorStates.containsKey(key) || doorStates[key] == 0) {
|
||||
doorStates[key] = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
doorManager.handleInteraction(
|
||||
player.x,
|
||||
player.y,
|
||||
player.angle,
|
||||
);
|
||||
}
|
||||
|
||||
return (dx: dx, dy: dy);
|
||||
}
|
||||
|
||||
void _updateDoors() {
|
||||
doorStates.forEach((key, state) {
|
||||
if (state == 1) {
|
||||
doorOffsets[key] = (doorOffsets[key] ?? 0.0) + 0.02;
|
||||
if (doorOffsets[key]! >= 1.0) {
|
||||
doorOffsets[key] = 1.0;
|
||||
doorStates[key] = 2;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Now receives dx and dy explicitly
|
||||
void _applyMovementAndCollision(double dx, double dy) {
|
||||
const double margin = 0.3;
|
||||
@@ -364,7 +343,7 @@ class _WolfRendererState extends State<WolfRenderer>
|
||||
textures: gameMap.textures,
|
||||
player: player,
|
||||
fov: fov,
|
||||
doorOffsets: doorOffsets,
|
||||
doorOffsets: doorManager.getOffsetsForRenderer(),
|
||||
entities: entities,
|
||||
sprites: gameMap.sprites,
|
||||
),
|
||||
|
||||
Reference in New Issue
Block a user