Adjust damage @param aDamage @return adjusted damage
(String aDamage, int sizeDiff)
| 425 | * @return adjusted damage |
| 426 | */ |
| 427 | public static String adjustDamage(String aDamage, int sizeDiff) |
| 428 | { |
| 429 | if (aDamage.isEmpty()) |
| 430 | { |
| 431 | return aDamage; |
| 432 | } |
| 433 | final AbstractReferenceContext ref = getContext().getReferenceContext(); |
| 434 | BaseDice bd = ref.silentlyGetConstructedCDOMObject(BaseDice.class, aDamage); |
| 435 | int multiplier = 0; |
| 436 | if (bd == null) |
| 437 | { |
| 438 | //Need to test for higher dice |
| 439 | final RollInfo aRollInfo = new RollInfo(aDamage); |
| 440 | final String baseDice = "1d" + Integer.toString(aRollInfo.sides); |
| 441 | bd = ref.silentlyGetConstructedCDOMObject(BaseDice.class, baseDice); |
| 442 | if (bd != null) |
| 443 | { |
| 444 | multiplier = aRollInfo.times; |
| 445 | } |
| 446 | } |
| 447 | else |
| 448 | { |
| 449 | multiplier = 1; |
| 450 | } |
| 451 | RollInfo bi; |
| 452 | if (bd == null) |
| 453 | { |
| 454 | bi = new RollInfo(aDamage); |
| 455 | } |
| 456 | else |
| 457 | { |
| 458 | List<RollInfo> steps; |
| 459 | if (sizeDiff > 0) |
| 460 | { |
| 461 | steps = bd.getUpSteps(); |
| 462 | } |
| 463 | else if (sizeDiff < 0) |
| 464 | { |
| 465 | steps = bd.getDownSteps(); |
| 466 | } |
| 467 | else |
| 468 | { |
| 469 | // Not a warning? |
| 470 | return aDamage; |
| 471 | } |
| 472 | final int difference = Math.abs(sizeDiff); |
| 473 | |
| 474 | final int index; |
| 475 | if (steps.size() > difference) |
| 476 | { |
| 477 | index = difference - 1; |
| 478 | } |
| 479 | else |
| 480 | { |
| 481 | index = steps.size() - 1; |
| 482 | } |
| 483 | bi = steps.get(index); |
| 484 | } |