Apply visual HP bars to all combat displays

- Update combat_handlers.py to show visual enemy and player HP bars
- Update action_handlers.py combat encounters with progress bars
- Update combat.py attack results with visual HP displays
- Add UI_EXAMPLES.md with before/after comparisons
- All combat displays now use format_stat_bar() for consistency
This commit is contained in:
Joan
2025-10-19 00:32:05 +02:00
parent 861f3b8a36
commit 604ed653c1
3 changed files with 12 additions and 11 deletions

View File

@@ -8,6 +8,7 @@ import random
from telegram import Update, InlineKeyboardButton, InlineKeyboardMarkup
from telegram.ext import ContextTypes
from . import database, keyboards, logic
from .utils import format_stat_bar
from data.world_loader import game_world
from data.items import ITEMS
@@ -20,8 +21,6 @@ logger = logging.getLogger(__name__)
async def get_player_status_text(telegram_id: int) -> str:
"""Generate player status text with location and stats."""
from .utils import format_stat_bar
player = await database.get_player(telegram_id)
if not player:
return "Could not find player data."
@@ -124,8 +123,8 @@ async def handle_attack_wandering(query, user_id: int, player: dict, data: list)
npc_def = NPCS.get(npc_id)
message = f"⚔️ You engage the {npc_def.emoji} {npc_def.name}!\n\n"
message += f"{npc_def.description}\n\n"
message += f"{npc_def.emoji} Enemy HP: {combat_data['npc_hp']}/{combat_data['npc_max_hp']}\n"
message += f"❤️ Your HP: {player['hp']}/{player['max_hp']}\n\n"
message += format_stat_bar(f"{npc_def.emoji} Enemy HP", "", combat_data['npc_hp'], combat_data['npc_max_hp']) + "\n"
message += format_stat_bar("Your HP", "❤️", player['hp'], player['max_hp']) + "\n\n"
message += "🎯 Your turn! What will you do?"
keyboard = await keyboards.combat_keyboard(user_id)
@@ -343,8 +342,8 @@ async def handle_move(query, user_id: int, player: dict, data: list):
npc_def = NPCS.get(npc_id)
message = f"⚠️ A {npc_def.emoji} {npc_def.name} appears!\n\n"
message += f"{npc_def.description}\n\n"
message += f"{npc_def.emoji} Enemy HP: {combat_data['npc_hp']}/{combat_data['npc_max_hp']}\n"
message += f"❤️ Your HP: {player['hp']}/{player['max_hp']}\n\n"
message += format_stat_bar(f"{npc_def.emoji} Enemy HP", "", combat_data['npc_hp'], combat_data['npc_max_hp']) + "\n"
message += format_stat_bar("Your HP", "❤️", player['hp'], player['max_hp']) + "\n\n"
message += "🎯 Your turn! What will you do?"
keyboard = await keyboards.combat_keyboard(user_id)

View File

@@ -7,6 +7,7 @@ import json
import time
from typing import Dict, List, Tuple, Optional
from bot import database
from bot.utils import format_stat_bar
from data.npcs import NPCS, STATUS_EFFECTS
from data.items import ITEMS
@@ -173,7 +174,7 @@ async def player_attack(player_id: int) -> Tuple[str, bool, bool]:
'player_status_effects': json.dumps(player_effects)
})
message += f"\n{npc_def.emoji} {npc_def.name}: {new_npc_hp}/{combat['npc_max_hp']} HP"
message += "\n" + format_stat_bar(f"{npc_def.emoji} {npc_def.name}", "", new_npc_hp, combat['npc_max_hp'])
return (message, False, True)
@@ -250,8 +251,8 @@ async def npc_attack(player_id: int) -> Tuple[str, bool]:
'npc_status_effects': json.dumps(npc_effects)
})
message += f"\n❤️ Your HP: {new_player_hp}/{player['max_hp']}"
message += f"\n{npc_def.emoji} {npc_def.name}: {combat['npc_hp']}/{combat['npc_max_hp']} HP"
message += "\n" + format_stat_bar("Your HP", "❤️", new_player_hp, player['max_hp'])
message += "\n" + format_stat_bar(f"{npc_def.emoji} {npc_def.name}", "", combat['npc_hp'], combat['npc_max_hp'])
return (message, False)

View File

@@ -3,6 +3,7 @@ Combat-related action handlers.
"""
import logging
from . import database, keyboards
from .utils import format_stat_bar
from data.world_loader import game_world
logger = logging.getLogger(__name__)
@@ -158,8 +159,8 @@ async def handle_combat_back(query, user_id: int, player: dict):
keyboard = await keyboards.combat_keyboard(user_id)
message = f"⚔️ Combat with {npc_def.emoji} {npc_def.name}!\n"
message += f"{npc_def.emoji} Enemy HP: {combat_data['npc_hp']}/{combat_data['npc_max_hp']}\n"
message += f"❤️ Your HP: {player['hp']}/{player['max_hp']}\n\n"
message += format_stat_bar(f"{npc_def.emoji} Enemy HP", "", combat_data['npc_hp'], combat_data['npc_max_hp']) + "\n"
message += format_stat_bar("Your HP", "❤️", player['hp'], player['max_hp']) + "\n\n"
message += "🎯 Your turn!" if combat_data['turn'] == 'player' else "⏳ Enemy's turn..."
from .handlers import send_or_edit_with_image