Passed
Push — master ( 5a11dc...578008 )
by Janko
08:39
created

BuildingFunctionEnum::isShipyard()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 9
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 8
CRAP Score 1

Importance

Changes 0
Metric Value
cc 1
eloc 7
nc 1
nop 0
dl 0
loc 9
ccs 8
cts 8
cp 1
crap 1
rs 10
c 0
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Stu\Component\Building;
6
7
enum BuildingFunctionEnum: int
8
{
9
    // building functions
10
    case COLONY_CENTRAL = 1;
11
    case BASE_CAMP = 2;
12
    case AIRFIELD = 4;
13
    case FIGHTER_SHIPYARD = 5;
14
    case ESCORT_SHIPYARD = 6;
15
    case FRIGATE_SHIPYARD = 7;
16
    case CRUISER_SHIPYARD = 8;
17
    case TORPEDO_FAB = 9;
18
    case MODULEFAB_TYPE1_LVL1 = 10;
19
    case MODULEFAB_TYPE1_LVL2 = 11;
20
    case MODULEFAB_TYPE1_LVL3 = 12;
21
    case MODULEFAB_TYPE2_LVL1 = 13;
22
    case MODULEFAB_TYPE2_LVL2 = 14;
23
    case MODULEFAB_TYPE2_LVL3 = 15;
24
    case MODULEFAB_TYPE3_LVL1 = 16;
25
    case MODULEFAB_TYPE3_LVL2 = 17;
26
    case MODULEFAB_TYPE3_LVL3 = 18;
27
    case ACADEMY = 20;
28
    case DESTROYER_SHIPYARD = 21;
29
    case REPAIR_SHIPYARD = 22;
30
    case WAREHOUSE = 23;
31
    case SUBSPACE_TELESCOPE = 31;
32
33
        // planetary defense
34
    case SHIELD_GENERATOR = 24;
35
    case SHIELD_BATTERY = 25;
36
    case ENERGY_PHALANX = 26;
37
    case PARTICLE_PHALANX = 27;
38
    case ANTI_PARTICLE = 28;
39
40
        // spare parts
41
    case FABRICATION_HALL = 29;
42
    case TECH_CENTER = 30;
43
44
    public function isModuleFab(): bool
45
    {
46
        return match ($this) {
47
            self::MODULEFAB_TYPE1_LVL1,
48
            self::MODULEFAB_TYPE1_LVL2,
49
            self::MODULEFAB_TYPE1_LVL3,
50
            self::MODULEFAB_TYPE2_LVL1,
51
            self::MODULEFAB_TYPE2_LVL2,
52
            self::MODULEFAB_TYPE2_LVL3,
53
            self::MODULEFAB_TYPE3_LVL1,
54
            self::MODULEFAB_TYPE3_LVL2,
55
            self::MODULEFAB_TYPE3_LVL3 => true,
56
            default => false
57
        };
58
    }
59
60 3
    public function isShipyard(): bool
61
    {
62 3
        return match ($this) {
63 3
            self::FIGHTER_SHIPYARD,
64 3
            self::ESCORT_SHIPYARD,
65 3
            self::FRIGATE_SHIPYARD,
66 3
            self::CRUISER_SHIPYARD,
67 3
            self::DESTROYER_SHIPYARD => true,
68 3
            default => false
69 3
        };
70
    }
71
72
    /** @return array<BuildingFunctionEnum> */
73
    public static function getModuleFabs(): array
74
    {
75
        return array_filter(
76
            self::cases(),
77
            fn(BuildingFunctionEnum $function): bool => $function->isModuleFab()
78
        );
79
    }
80
81
    /** @return array<BuildingFunctionEnum> */
82 3
    public static function getShipyards(): array
83
    {
84 3
        return array_filter(
85 3
            self::cases(),
86 3
            fn(BuildingFunctionEnum $function): bool => $function->isShipyard()
87 3
        );
88
    }
89
}
90