/* sub_7354A */ /// <summary> /// Returns if playerB can see playerA /// </summary> internal static bool CanSeeCombatant(int direction, Point playerA, Point playerB) { if (playerA.MapInBounds() == false || playerB.MapInBounds() == false) { return false; } if (direction == 0xff || direction == 8) { return true; } int facingX = playerB.x + gbl.MapDirectionXDelta[direction]; int facingY = playerB.y + gbl.MapDirectionYDelta[direction]; if (playerB == playerA || (facingX == playerA.x && facingY == playerA.y)) { return true; } bool canSee; switch (direction) { case 0: canSee = ((playerA.x >= facingX && playerA.y <= ((facingX - playerA.x) + facingY)) || (playerA.x <= facingX && playerA.y <= ((playerA.x - facingX) + facingY))); break; case 1: canSee = ((playerA.x >= facingX && playerA.y <= ((facingX - playerA.x) + facingY)) || (playerA.x >= ((facingX - facingY) + playerA.y) && playerA.y <= facingY)); break; case 2: canSee = ((playerA.x >= (facingX + facingY - playerA.y) && playerA.y <= facingY) || (playerA.x >= (facingX + playerA.y - facingY) && playerA.y >= facingY)); break; case 3: canSee = ((playerA.x >= ((facingX + playerA.y) - facingY) && playerA.y >= facingY) || (playerA.x >= facingX && playerA.y >= ((playerA.x - facingX) + facingY))); break; case 4: canSee = ((playerA.x >= facingX && playerA.y >= ((playerA.x - facingX) + facingY)) || (playerA.x <= facingX && playerA.y >= ((facingX - playerA.x) + facingY))); break; case 5: canSee = ((playerA.x <= facingX && playerA.y >= ((facingX - playerA.x) + facingY)) || (playerA.x <= ((facingX + facingY) - playerA.y) && playerA.y >= facingY)); break; case 6: canSee = ((playerA.x <= ((facingX + facingY) - playerA.y) && playerA.y >= facingY) || (playerA.x <= ((facingX + playerA.y) - facingY) && playerA.y <= facingY)); break; case 7: canSee = ((playerA.x <= ((facingX + playerA.y) - facingY) && playerA.y <= facingY) || (playerA.x <= facingX && playerA.y <= ((playerA.x - facingX) + facingY))); break; case 8: canSee = true; break; default: throw new System.ApplicationException("Switch value unexpected"); } return canSee; }