Passed
Push — master ( c42dd3...851beb )
by Nico
15:48 queued 10:17
created

ModuleSpecialAbilityEnum::getDescription()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 20
Code Lines 18

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 12
CRAP Score 1.0499

Importance

Changes 0
Metric Value
cc 1
eloc 18
c 0
b 0
f 0
nc 1
nop 0
dl 0
loc 20
ccs 12
cts 19
cp 0.6316
crap 1.0499
rs 9.6666
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\ModuleSpecial;
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
    case ION_STORM_DAMAGE_REDUCTION = 17;
29
    case WARPCORE_CHARGE_TRANSFER = 18;
30
31 3
    public function getDescription(): string
32
    {
33 3
        return match ($this) {
34 3
            self::CLOAK => 'Tarnung',
35 3
            self::RPG => 'RPG-Schiff',
36 3
            self::TACHYON_SCANNER => 'Tachyon-Scanner',
37 3
            self::TROOP_QUARTERS => 'Truppen-Quartiere',
38 3
            self::ASTRO_LABORATORY => 'Astrometrie-Labor',
39 3
            self::SUBSPACE_FIELD_SENSOR => 'Subraumfeldsensor',
40 3
            self::MATRIX_SENSOR => 'Matrix-Sensor',
41 3
            self::TORPEDO_STORAGE => 'Torpedo-Lager',
42 3
            self::SHUTTLE_RAMP => 'Shuttle-Rampe',
43
            self::TRANSWARP_COIL => 'Transwarpspule',
44
            self::HIROGEN_TRACKER => 'Tracker-Device',
45
            self::THOLIAN_WEB => 'Tholianischer Netzemitter',
46
            self::BUSSARD_COLLECTOR => 'Bussard-Kollektor',
47
            self::AGGREGATION_SYSTEM => 'Aggregationssystem',
48
            self::WARPDRIVE_BOOST => 'Warpdrive Boost',
49
            self::ION_STORM_DAMAGE_REDUCTION => 'Ionensturmresistenz',
50 3
            self::WARPCORE_CHARGE_TRANSFER => 'Warpkern Ladungstransfer',
51 3
        };
52
    }
53
54
    public function getSystemType(): ?SpacecraftSystemTypeEnum
55
    {
56
        return match ($this) {
57
            self::CLOAK => SpacecraftSystemTypeEnum::CLOAK,
58
            self::RPG => SpacecraftSystemTypeEnum::RPG_MODULE,
59
            self::TACHYON_SCANNER => SpacecraftSystemTypeEnum::TACHYON_SCANNER,
60
            self::TROOP_QUARTERS => SpacecraftSystemTypeEnum::TROOP_QUARTERS,
61
            self::ASTRO_LABORATORY => SpacecraftSystemTypeEnum::ASTRO_LABORATORY,
62
            self::SUBSPACE_FIELD_SENSOR => SpacecraftSystemTypeEnum::SUBSPACE_SCANNER,
63
            self::MATRIX_SENSOR => SpacecraftSystemTypeEnum::MATRIX_SCANNER,
64
            self::TORPEDO_STORAGE => SpacecraftSystemTypeEnum::TORPEDO_STORAGE,
65
            self::SHUTTLE_RAMP => SpacecraftSystemTypeEnum::SHUTTLE_RAMP,
66
            self::TRANSWARP_COIL => SpacecraftSystemTypeEnum::TRANSWARP_COIL,
67
            self::HIROGEN_TRACKER => SpacecraftSystemTypeEnum::TRACKER,
68
            self::THOLIAN_WEB => SpacecraftSystemTypeEnum::THOLIAN_WEB,
69
            self::BUSSARD_COLLECTOR => SpacecraftSystemTypeEnum::BUSSARD_COLLECTOR,
70
            self::AGGREGATION_SYSTEM => SpacecraftSystemTypeEnum::AGGREGATION_SYSTEM,
71
            self::WARPDRIVE_BOOST => SpacecraftSystemTypeEnum::WARPDRIVE_BOOSTER,
72
            default => null
73
        };
74
    }
75
76
    public function hasCorrespondingModule(): bool
77
    {
78
        return match ($this) {
79
            self::RPG => false,
80
            default => true
81
        };
82
    }
83
84
    /** @return array<int> */
85
    public static function getValueArray(): array
86
    {
87
        return array_map(
88
            fn(ModuleSpecialAbilityEnum $enum): int => $enum->value,
89
            ModuleSpecialAbilityEnum::cases()
90
        );
91
    }
92
93
    /**
94
     * @param Collection<int, ModuleSpecial> $specials
95
     */
96 4
    public static function getHash(Collection $specials): ?int
97
    {
98 4
        $result = 0;
99
100 4
        foreach ($specials as $special) {
101 3
            $result += 2 ** ($special->getSpecialId()->value - 1);
102
        }
103
104 4
        return $result === 0 ? null : (int)$result;
0 ignored issues
show
introduced by
The condition $result === 0 is always true.
Loading history...
105
    }
106
}
107