Implement Elf Ranged Combat and Pinned Mechanic
- Added 'Shoot Bow' action for Elf with Ballistic Skill mechanics (1995 rules). - Implemented strict Line of Sight (LOS) raycasting (Amanatides & Woo) with UI feedback for blockers. - Added 'Pinned' status: Heroes adjacent to monsters (without intervening walls) cannot move. - Enhanced UI with visual indicators for blocked shots (red circles) and temporary modals. - Polished 'End Phase' button layout and hidden it during Monster phase.
This commit is contained in:
24
src/main.js
24
src/main.js
@@ -115,6 +115,30 @@ game.onEntityDeath = (entityId) => {
|
||||
renderer.triggerDeathAnimation(entityId);
|
||||
};
|
||||
|
||||
game.onRangedTarget = (targetMonster, losResult) => {
|
||||
// 1. Draw Visuals
|
||||
renderer.showRangedTargeting(game.selectedEntity, targetMonster, losResult);
|
||||
|
||||
// 2. UI
|
||||
if (targetMonster && losResult && losResult.clear) {
|
||||
ui.showRangedAttackUI(targetMonster);
|
||||
} else {
|
||||
ui.hideMonsterCard();
|
||||
if (targetMonster && losResult && !losResult.clear && losResult.blocker) {
|
||||
let msg = 'Línea de visión bloqueada.';
|
||||
if (losResult.blocker.type === 'hero') msg = `Bloqueado por aliado: ${losResult.blocker.entity.name}`;
|
||||
if (losResult.blocker.type === 'monster') msg = `Bloqueado por enemigo: ${losResult.blocker.entity.name}`;
|
||||
if (losResult.blocker.type === 'wall') msg = `Bloqueado por muro/obstáculo.`;
|
||||
|
||||
ui.showTemporaryMessage('Objetivo Bloqueado', msg, 1500);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
game.onShowMessage = (title, message, duration) => {
|
||||
ui.showTemporaryMessage(title, message, duration);
|
||||
};
|
||||
|
||||
// game.onEntitySelect is now handled by UIManager to wrap the renderer call
|
||||
|
||||
renderer.onHeroFinishedMove = (x, y) => {
|
||||
|
||||
Reference in New Issue
Block a user