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