Implement tile discarding, blocked doors, and correct corridor exits
- Updated TileDefinitions.js: Added 4-way exits to corridor_straight and corridor_steps (N/S y=3,4; E/W x=3,4). - Updated DungeonGenerator.js: Added cancelPlacement() logic and onDoorBlocked callback. - Updated GameRenderer.js: Implemented blockDoor() to visualize blocked passages, and improved isPlayerAdjacentToDoor. - Updated UIManager.js: Added custom showModal/showConfirm and Discard button for tile placement. - Updated main.js: Handled blocked door clicks and hooked up UI events. - Updated GameEngine.js: Improved door adjacency checks. - Updated CameraManager.js: Preserved camera rotation on centerOn. - Added door1_blocked.png asset.
This commit is contained in:
@@ -27,6 +27,7 @@ export class DungeonGenerator {
|
||||
// Callbacks for UI
|
||||
this.onStateChange = null;
|
||||
this.onPlacementUpdate = null;
|
||||
this.onDoorBlocked = null;
|
||||
}
|
||||
|
||||
startDungeon(missionConfig) {
|
||||
@@ -152,6 +153,30 @@ export class DungeonGenerator {
|
||||
return this.grid.canPlace(variant, this.placementX, this.placementY);
|
||||
}
|
||||
|
||||
cancelPlacement() {
|
||||
if (this.state !== PLACEMENT_STATE.PLACING_TILE) return;
|
||||
|
||||
// 1. Mark door as blocked visually
|
||||
if (this.onDoorBlocked && this.selectedExit) {
|
||||
this.onDoorBlocked(this.selectedExit);
|
||||
}
|
||||
|
||||
// 2. Remove the selected exit from available exits
|
||||
if (this.selectedExit) {
|
||||
this.availableExits = this.availableExits.filter(e =>
|
||||
!(e.x === this.selectedExit.x && e.y === this.selectedExit.y && e.direction === this.selectedExit.direction)
|
||||
);
|
||||
}
|
||||
|
||||
// 3. Reset state
|
||||
this.currentCard = null;
|
||||
this.selectedExit = null;
|
||||
this.state = PLACEMENT_STATE.WAITING_DOOR;
|
||||
|
||||
this.notifyPlacementUpdate();
|
||||
this.notifyStateChange();
|
||||
}
|
||||
|
||||
/**
|
||||
* Confirm and finalize tile placement
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user