| 3489 | } |
| 3490 | |
| 3491 | real_t Player::WorldUI_t::tooltipInRange(Entity& tooltip) |
| 3492 | { |
| 3493 | if ( !players[player.playernum]->isLocalPlayerAlive() && !player.ghost.isActive() ) |
| 3494 | { |
| 3495 | return 0.0; |
| 3496 | } |
| 3497 | |
| 3498 | Entity* playerEntity = Player::getPlayerInteractEntity(player.playernum); |
| 3499 | if ( !playerEntity ) |
| 3500 | { |
| 3501 | return 0.0; |
| 3502 | } |
| 3503 | |
| 3504 | real_t dist = entityDist(&tooltip, playerEntity); |
| 3505 | Entity* parent = uidToEntity(tooltip.parent); |
| 3506 | |
| 3507 | real_t maxDist = 24.0; |
| 3508 | real_t minDist = 4.0; |
| 3509 | |
| 3510 | bool selectInteract = false; |
| 3511 | bool callout = false; |
| 3512 | bool spellInteract = false; |
| 3513 | if ( FollowerMenu[player.playernum].followerMenuIsOpen() && FollowerMenu[player.playernum].selectMoveTo ) |
| 3514 | { |
| 3515 | selectInteract = (FollowerMenu[player.playernum].optionSelected == ALLY_CMD_ATTACK_SELECT); |
| 3516 | maxDist = 256; |
| 3517 | } |
| 3518 | else if ( CalloutMenu[player.playernum].calloutMenuIsOpen() && CalloutMenu[player.playernum].selectMoveTo ) |
| 3519 | { |
| 3520 | selectInteract = (CalloutMenu[player.playernum].optionSelected == CalloutRadialMenu::CALLOUT_CMD_SELECT); |
| 3521 | callout = true; |
| 3522 | maxDist = 256; |
| 3523 | } |
| 3524 | else if ( cast_animation[player.playernum].active && cast_animation[player.playernum].rangefinder == RANGEFINDER_TOUCH_INTERACT_TEST ) |
| 3525 | { |
| 3526 | selectInteract = true; |
| 3527 | spellInteract = true; |
| 3528 | maxDist = 64.0; |
| 3529 | } |
| 3530 | else if ( parent |
| 3531 | && (parent->getMonsterTypeFromSprite() == SHOPKEEPER |
| 3532 | || parent->monsterCanTradeWith(player.playernum) |
| 3533 | || (parent->behavior == &actFloorDecoration && parent->sprite == 991 /* sign */) |
| 3534 | || (parent->behavior == &actMonster && (monsterIsFriendlyForTooltip(player.playernum, *parent))) |
| 3535 | || (parent->monsterAllyGetPlayerLeader() |
| 3536 | && parent->monsterAllyGetPlayerLeader() == players[player.playernum]->entity)) ) |
| 3537 | { |
| 3538 | maxDist = TOUCHRANGE; |
| 3539 | } |
| 3540 | if ( parent && (parent->behavior == &actDoor || parent->behavior == &actIronDoor) && parent->doorStatus == 0 ) // min dist 0.0 when door closed, just in case we're stuck inside. |
| 3541 | { |
| 3542 | minDist = 0.0; |
| 3543 | } |
| 3544 | |
| 3545 | if ( dist < maxDist && dist > minDist ) |
| 3546 | { |
| 3547 | real_t tangent = atan2(tooltip.y - playerEntity->y, tooltip.x - playerEntity->x); |
| 3548 | while ( tangent >= 2 * PI ) |
no test coverage detected