Passed
Push — dev ( 45bf8d...5b8f46 )
by Janko
10:07
created

ModuleSpecialAbilityEnum   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 92
Duplicated Lines 0 %

Test Coverage

Coverage 33.96%

Importance

Changes 0
Metric Value
eloc 61
dl 0
loc 92
ccs 18
cts 53
cp 0.3396
rs 10
c 0
b 0
f 0
wmc 7

5 Methods

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