(
cycloper: Creature,
target: Creature,
path: Hex[],
args: { direction?: number } | undefined,
G: Game,
)
| 858 | } |
| 859 | |
| 860 | function getOpticBurstEffectiveDistance( |
| 861 | cycloper: Creature, |
| 862 | target: Creature, |
| 863 | path: Hex[], |
| 864 | args: { direction?: number } | undefined, |
| 865 | G: Game, |
| 866 | ) { |
| 867 | const directionalDistance = getTargetDistanceInDirection(cycloper, target, args?.direction, G); |
| 868 | |
| 869 | if (Number.isFinite(directionalDistance)) { |
| 870 | const relayBonus = isRiotShieldUpgraded(cycloper) |
| 871 | ? countAlliedRelayWallsBeforeTarget(cycloper, target, args?.direction, G) |
| 872 | : 0; |
| 873 | const effectiveDistance = Math.max(0, directionalDistance - 1 - relayBonus); |
| 874 | return effectiveDistance; |
| 875 | } |
| 876 | |
| 877 | // Fallback when direction context is unavailable. |
| 878 | const emptyHexDistance = arrayUtils.filterCreature(path.slice(0), false, false).length; |
| 879 | const relayBonus = isRiotShieldUpgraded(cycloper) |
| 880 | ? countAlliedRelayWallsBeforeTarget(cycloper, target, args?.direction, G) |
| 881 | : 0; |
| 882 | |
| 883 | const effectiveDistance = Math.max(0, emptyHexDistance - relayBonus); |
| 884 | return effectiveDistance; |
| 885 | } |
| 886 | |
| 887 | function countAlliedRelayWallsBeforeTarget( |
| 888 | cycloper: Creature, |
no test coverage detected