Passed
Pull Request — master (#1976)
by Janko
21:47 queued 12:50
created

ModuleSpecialAbilityEnum::getDescription()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 18
Code Lines 16

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 12
CRAP Score 1.0254

Importance

Changes 0
Metric Value
cc 1
eloc 16
nc 1
nop 0
dl 0
loc 18
ccs 12
cts 17
cp 0.7059
crap 1.0254
rs 9.7333
c 0
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Stu\Component\Spacecraft;
6
7
use Doctrine\Common\Collections\Collection;
8
use Stu\Component\Spacecraft\System\SpacecraftSystemTypeEnum;
9
use Stu\Orm\Entity\ModuleSpecialInterface;
10
11
enum ModuleSpecialAbilityEnum: int
12
{
13
    case CLOAK = 1;
14
    case RPG = 2;
15
    case TACHYON_SCANNER = 4;
16
    case TROOP_QUARTERS = 5;
17
    case ASTRO_LABORATORY = 6;
18
    case SUBSPACE_FIELD_SENSOR = 7;
19
    case MATRIX_SENSOR = 8;
20
    case TORPEDO_STORAGE = 9;
21
    case SHUTTLE_RAMP = 10;
22
    case TRANSWARP_COIL = 11;
23
    case HIROGEN_TRACKER = 12;
24
    case THOLIAN_WEB = 13;
25
    case BUSSARD_COLLECTOR = 14;
26
    case AGGREGATION_SYSTEM = 15;
27
    case WARPDRIVE_BOOST = 16;
28
29 3
    public function getDescription(): string
30
    {
31 3
        return match ($this) {
32 3
            self::CLOAK => 'Tarnung',
33 3
            self::RPG => 'RPG-Schiff',
34 3
            self::TACHYON_SCANNER => 'Tachyon-Scanner',
35 3
            self::TROOP_QUARTERS => 'Truppen-Quartiere',
36 3
            self::ASTRO_LABORATORY => 'Astrometrie-Labor',
37 3
            self::SUBSPACE_FIELD_SENSOR => 'Subraumfeldsensor',
38 3
            self::MATRIX_SENSOR => 'Matrix-Sensor',
39 3
            self::TORPEDO_STORAGE => 'Torpedo-Lager',
40 3
            self::SHUTTLE_RAMP => 'Shuttle-Rampe',
41
            self::TRANSWARP_COIL => 'Transwarpspule',
42
            self::HIROGEN_TRACKER => 'Tracker-Device',
43
            self::THOLIAN_WEB => 'Tholianischer Netzemitter',
44
            self::BUSSARD_COLLECTOR => 'Bussard-Kollektor',
45
            self::AGGREGATION_SYSTEM => 'Aggregationssystem',
46 3
            self::WARPDRIVE_BOOST => 'Warpdrive Boost',
47 3
        };
48
    }
49
50
    public function getSystemType(): SpacecraftSystemTypeEnum
51
    {
52
        return match ($this) {
53
            self::CLOAK => SpacecraftSystemTypeEnum::SYSTEM_CLOAK,
54
            self::RPG => SpacecraftSystemTypeEnum::SYSTEM_RPG_MODULE,
55
            self::TACHYON_SCANNER => SpacecraftSystemTypeEnum::SYSTEM_TACHYON_SCANNER,
56
            self::TROOP_QUARTERS => SpacecraftSystemTypeEnum::SYSTEM_TROOP_QUARTERS,
57
            self::ASTRO_LABORATORY => SpacecraftSystemTypeEnum::SYSTEM_ASTRO_LABORATORY,
58
            self::SUBSPACE_FIELD_SENSOR => SpacecraftSystemTypeEnum::SYSTEM_SUBSPACE_SCANNER,
59
            self::MATRIX_SENSOR => SpacecraftSystemTypeEnum::SYSTEM_MATRIX_SCANNER,
60
            self::TORPEDO_STORAGE => SpacecraftSystemTypeEnum::SYSTEM_TORPEDO_STORAGE,
61
            self::SHUTTLE_RAMP => SpacecraftSystemTypeEnum::SYSTEM_SHUTTLE_RAMP,
62
            self::TRANSWARP_COIL => SpacecraftSystemTypeEnum::SYSTEM_TRANSWARP_COIL,
63
            self::HIROGEN_TRACKER => SpacecraftSystemTypeEnum::SYSTEM_TRACKER,
64
            self::THOLIAN_WEB => SpacecraftSystemTypeEnum::SYSTEM_THOLIAN_WEB,
65
            self::BUSSARD_COLLECTOR => SpacecraftSystemTypeEnum::SYSTEM_BUSSARD_COLLECTOR,
66
            self::AGGREGATION_SYSTEM => SpacecraftSystemTypeEnum::SYSTEM_AGGREGATION_SYSTEM,
67
            self::WARPDRIVE_BOOST => SpacecraftSystemTypeEnum::SYSTEM_WARPDRIVE_BOOSTER
68
        };
69
    }
70
71
    public function hasCorrespondingModule(): bool
72
    {
73
        return match ($this) {
74
            self::RPG => false,
75
            default => true
76
        };
77
    }
78
79
    /** @return array<int> */
80
    public static function getValueArray(): array
81
    {
82
        return array_map(
83
            fn(ModuleSpecialAbilityEnum $enum): int => $enum->value,
84
            ModuleSpecialAbilityEnum::cases()
85
        );
86
    }
87
88
    /**
89
     * @param Collection<int, ModuleSpecialInterface> $specials
90
     */
91 4
    public static function getHash($specials): ?int
92
    {
93 4
        $result = 0;
94
95 4
        foreach ($specials as $special) {
96 3
            $result += 2 ** ($special->getSpecialId()->value - 1);
97
        }
98
99 4
        return $result == 0 ? null : (int)$result;
0 ignored issues
show
introduced by
The condition $result == 0 is always true.
Loading history...
100
    }
101
}
102