Fix bulle "Appuie sur X" trop haute au-dessus du personnage
La bulle s'ancrait sur le cadre BRUT du sprite (<img> style.left/top/ width/height) — beaucoup de sprites (animaux CraftPix notamment, voir screens/labels/animal_sprite_library.py) ont un très grand canevas padé autour d'une silhouette bien plus petite, faisant flotter la bulle loin au-dessus du personnage visible. Elle s'ancre maintenant sur la BOÎTE DE COLLISION (objRect, déjà résolue via forgeElementBoxRect — largeur/hauteur/décalage réglables dans "🧱 Collision"), que l'auteur ajuste déjà pour épouser la silhouette réelle : ancre bien plus fidèle, sans configuration supplémentaire à faire. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
00f9cf33e9
commit
aa17614c7b
@@ -93,17 +93,23 @@ function forgeCollisionInteractBubbleEl(objectId, parentEl) {
|
||||
return bubble;
|
||||
}
|
||||
|
||||
function forgeShowCollisionInteractBubble(objectEl, objectId, key) {
|
||||
// Positionnée sur la BOÎTE DE COLLISION (objRect, déjà résolue via
|
||||
// forgeElementBoxRect — largeur/hauteur/décalage réglables dans "🧱
|
||||
// Collision") plutôt que sur le cadre brut du <img> : beaucoup de
|
||||
// sprites (notamment les animaux CraftPix, voir screens/labels/
|
||||
// animal_sprite_library.py) ont un TRÈS GRAND canevas très padé autour
|
||||
// d'une silhouette bien plus petite — ancrée sur le cadre brut, la
|
||||
// bulle flottait loin au-dessus du personnage visible (bug corrigé :
|
||||
// "c'est trop haut"). La boîte de collision, que l'auteur ajuste déjà
|
||||
// pour épouser la silhouette réelle, donne une ancre bien plus fidèle.
|
||||
function forgeShowCollisionInteractBubble(objectEl, objectId, objRect, key) {
|
||||
var parentEl = objectEl.parentElement;
|
||||
if (!parentEl) return;
|
||||
var bubble = forgeCollisionInteractBubbleEl(objectId, parentEl);
|
||||
bubble.textContent = 'Appuie sur ' + key;
|
||||
bubble.style.display = 'block';
|
||||
var left = parseFloat(objectEl.style.left) || 0;
|
||||
var top = parseFloat(objectEl.style.top) || 0;
|
||||
var width = parseFloat(objectEl.style.width) || 0;
|
||||
bubble.style.left = (left + width / 2) + 'px'; // centrée horizontalement (voir transform:translateX(-50%), static/style.css)
|
||||
bubble.style.top = top + 'px'; // AU-DESSUS de l'objet (voir transform:translateY(-100%), static/style.css)
|
||||
bubble.style.left = (objRect.left + objRect.width / 2) + 'px'; // centrée horizontalement (voir transform:translateX(-50%), static/style.css)
|
||||
bubble.style.top = objRect.top + 'px'; // AU-DESSUS de la boîte de collision (voir transform:translateY(-100%), static/style.css)
|
||||
}
|
||||
|
||||
function forgeHideCollisionInteractBubble(objectId, objectEl) {
|
||||
@@ -158,7 +164,7 @@ function forgeCollisionRuleTick(screenData) {
|
||||
if (rule.action.type === 'interagir') {
|
||||
if (isActive) {
|
||||
anyInteractActive = true;
|
||||
forgeShowCollisionInteractBubble(targetEl, obj.id, (player.personnage_commandes && player.personnage_commandes.interagir) || 'E');
|
||||
forgeShowCollisionInteractBubble(targetEl, obj.id, objRect, (player.personnage_commandes && player.personnage_commandes.interagir) || 'E');
|
||||
}
|
||||
forgeCollisionRuleActiveState[stateKey] = isActive;
|
||||
return;
|
||||
|
||||
Reference in New Issue
Block a user