Passed
Push — master ( 2a0f07...98f021 )
by Jakub
02:32
created

CombatLogEntry::getMessage()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 2
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
eloc 1
dl 0
loc 2
ccs 0
cts 1
cp 0
rs 10
c 0
b 0
f 0
nc 1
nop 0
cc 1
crap 2
1
<?php
2
declare(strict_types=1);
3
4
namespace HeroesofAbenez\Combat;
5
6
use Nette\Localization\ITranslator;
7
use Nexendrie\Utils\Constants;
8
use Symfony\Component\OptionsResolver\OptionsResolver;
9
10
/**
11
 * Data structure for combat action
12
 *
13
 * @author Jakub Konečný
14
 * @property-read Character $character1
15
 * @property-read Character $character2
16
 * @property-read string $action
17
 * @property-read string $name
18
 * @property-read bool $result
19
 * @property-read int $amount
20
 */
21 1
class CombatLogEntry {
22 1
  use \Nette\SmartObject;
23
  
24
  public const ACTION_ATTACK = "attack";
25
  public const ACTION_SKILL_ATTACK = "skill_attack";
26
  public const ACTION_SKILL_SPECIAL = "skill_special";
27
  public const ACTION_HEALING = "healing";
28
  public const ACTION_POISON = "poison";
29
  
30
  /** @var ITranslator */
31
  protected $translator;
32
  /** @var Character */
33
  protected $character1;
34
  /** @var Character */
35
  protected $character2;
36
  /** @var  string */
37
  protected $action;
38
  /** @var string */
39
  protected $name;
40
  /** @var bool */
41
  protected $result;
42
  /** @var int */
43
  protected $amount;
44
  
45
  public function __construct(ITranslator $translator, array $action) {
46 1
    $resolver = new OptionsResolver();
47 1
    $this->configureOptions($resolver);
48 1
    $action = $resolver->resolve($action);
49 1
    $this->translator = $translator;
50 1
    $this->action = $action["action"];
51 1
    $this->result = $action["result"];
52 1
    $this->amount = $action["amount"];
53 1
    $this->character1 = clone $action["character1"];
54 1
    $this->character2 = clone $action["character2"];
55 1
    $this->name = $action["name"];
56 1
  }
57
58
  protected function configureOptions(OptionsResolver $resolver): void {
59 1
    $requiredStats = ["action", "result", "character1", "character2",];
60 1
    $resolver->setDefined(["amount", "name",]);
61 1
    $resolver->setRequired($requiredStats);
62 1
    $resolver->setAllowedTypes("action", "string");
63 1
    $resolver->setAllowedValues("action", function(string $value) {
64 1
      return in_array($value, $this->getAllowedActions(), true);
65 1
    });
66 1
    $resolver->setAllowedTypes("result", "bool");
67 1
    $resolver->setAllowedTypes("amount", "integer");
68 1
    $resolver->setDefault("amount", 0);
69 1
    $resolver->setAllowedTypes("name", "string");
70 1
    $resolver->setDefault("name", "");
71 1
    $resolver->setAllowedTypes("character1", Character::class);
72 1
    $resolver->setAllowedTypes("character2", Character::class);
73 1
  }
74
75
  /**
76
   * @return string[]
77
   */
78
  protected function getAllowedActions(): array {
79 1
    return Constants::getConstantsValues(static::class, "ACTION_");
80
  }
81
  
82
  public function getCharacter1(): Character {
83 1
    return $this->character1;
84
  }
85
  
86
  public function getCharacter2(): Character {
87 1
    return $this->character2;
88
  }
89
  
90
  public function getAction(): string {
91 1
    return $this->action;
92
  }
93
  
94
  public function getName(): string {
95 1
    return $this->name;
96
  }
97
  
98
  public function isResult(): bool {
99 1
    return $this->result;
100
  }
101
  
102
  public function getAmount(): int {
103 1
    return $this->amount;
104
  }
105
}
106
?>