Lines 100.00% 11 / 11
Functions and Methods 100.00% 3 / 3
Classes and Traits 100.00% 1 / 1
Name Lines Functions and Methods CRAP Classes and Traits
PlayersStateChangedEvent 100.00% 11 / 11 100.00% 3 / 3 6 100.00% 1 / 1
 __construct 100.00% 1 / 1 100.00% 1 / 1 1
 read 100.00% 6 / 6 100.00% 1 / 1 4
 summary 100.00% 4 / 4 100.00% 1 / 1 1
1<?php
2
3declare(strict_types=1);
4
5namespace Lorekeeper\Server\Event\Combat;
6
7use Lorekeeper\Core\Player\PlayerName;
8use Lorekeeper\Server\Event\Combat\Helper\CombatStates;
9use Override;
10use Psl\Option;
11
12final readonly class PlayersStateChangedEvent extends CombatRoundEvent
13{
14    /** @param non-empty-list<PlayerState> $players */
15    public function __construct(
16        public array $players,
17    ) {}
18
19    #[Override]
20    protected static function read(array $monsters, array $players): Option\Option
21    {
22        $changed = [];
23        foreach ($players as $name => $player) {
24            if (!array_key_exists('intState', $player)) {
25                continue;
26            }
27
28            $changed[] = new PlayerState(new PlayerName($name), CombatStates::read($player['intState']));
29        }
30
31        return $changed === [] ? Option\none() : Option\some(new static($changed));
32    }
33
34    #[Override]
35    public function summary(): string
36    {
37        return implode(', ', array_map(
38            static fn(PlayerState $player): string => "{$player->player->value} is " . strtolower($player->state->name),
39            $this->players,
40        ));
41    }
42}