Issues (30)

src/CombatActions/Heal.php (1 issue)

Severity
1
<?php
2
declare(strict_types=1);
3
4
namespace HeroesofAbenez\Combat\CombatActions;
5
6
use HeroesofAbenez\Combat\Character;
7
use HeroesofAbenez\Combat\CombatBase;
8
use HeroesofAbenez\Combat\ICombatAction;
9
use Nexendrie\Utils\Numbers;
10
use HeroesofAbenez\Combat\Team;
11
12 1
final class Heal implements ICombatAction {
13
  public const ACTION_NAME = "healing";
14
15
  public function getName(): string {
16 1
    return self::ACTION_NAME;
17
  }
18
19
  public function getPriority(): int {
20 1
    return 10000;
21
  }
22
23
  public function shouldUse(CombatBase $combat, Character $character): bool {
24 1
    return (in_array($character, $this->findHealers($combat)->toArray(), true) && $this->selectHealingTarget($character, $combat) !== null);
0 ignored issues
show
Line exceeds 120 characters; contains 140 characters
Loading history...
25
  }
26
27
  public function do(CombatBase $combat, Character $character): void {
28 1
    $result = [];
29
    /** @var Character $patient */
30 1
    $patient = $this->selectHealingTarget($character, $combat);
31 1
    $result["result"] = $combat->successCalculator->hasHealed($character);
32 1
    $amount = ($result["result"]) ? (int) ($character->intelligence / 2) : 0;
33 1
    $result["amount"] = Numbers::range($amount, 0, $patient->maxHitpoints - $patient->hitpoints);
34 1
    if($result["amount"] > 0) {
35 1
      $patient->heal($result["amount"]);
36
    }
37 1
    $result["action"] = $this->getName();
38 1
    $result["name"] = "";
39 1
    $result["character1"] = $character;
40 1
    $result["character2"] = $patient;
41 1
    $combat->log->log($result);
42 1
  }
43
44
  protected function findHealers(CombatBase $combat): Team {
45 1
    $healers = call_user_func($combat->healers, $combat->team1, $combat->team2);
46 1
    if($healers instanceof Team) {
47 1
      return $healers;
48
    }
49
    return new Team("healers");
50
  }
51
52
  protected function selectHealingTarget(Character $healer, CombatBase $combat): ?Character {
53 1
    return $combat->getTeam($healer)->getLowestHpCharacter();
54
  }
55
}
56
?>