Passed
Pull Request — master (#1696)
by Nico
49:43 queued 22:34
created

ColonyMenuEnum   A

Complexity

Total Complexity 9

Size/Duplication

Total Lines 156
Duplicated Lines 0 %

Test Coverage

Coverage 0%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 114
dl 0
loc 156
ccs 0
cts 104
cp 0
rs 10
c 1
b 0
f 0
wmc 9

6 Methods

Rating   Name   Duplication   Size   Complexity  
A getFor() 0 11 3
A getViewIdentifier() 0 22 1
A getNecessaryGuiComponents() 0 34 1
A getMenuClass() 0 7 2
A getTemplate() 0 22 1
A getNeededBuildingFunction() 0 22 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Stu\Component\Colony;
6
7
use Stu\Component\Building\BuildingEnum;
8
use Stu\Module\Building\BuildingFunctionTypeEnum;
9
use Stu\Module\Colony\Lib\Gui\GuiComponentEnum;
10
use Stu\Module\Colony\View\ShowAcademy\ShowAcademy;
11
use Stu\Module\Colony\View\ShowAirfield\ShowAirfield;
12
use Stu\Module\Colony\View\ShowBuildingManagement\ShowBuildingManagement;
13
use Stu\Module\Colony\View\ShowBuildMenu\ShowBuildMenu;
14
use Stu\Module\Colony\View\ShowBuildPlans\ShowBuildPlans;
15
use Stu\Module\Colony\View\ShowFighterShipyard\ShowFighterShipyard;
16
use Stu\Module\Colony\View\ShowMainscreen\ShowMainscreen;
17
use Stu\Module\Colony\View\ShowManagement\ShowManagement;
18
use Stu\Module\Colony\View\ShowMisc\ShowMisc;
19
use Stu\Module\Colony\View\ShowModuleFab\ShowModuleFab;
20
use Stu\Module\Colony\View\ShowShipDisassembly\ShowShipDisassembly;
21
use Stu\Module\Colony\View\ShowShipRepair\ShowShipRepair;
22
use Stu\Module\Colony\View\ShowShipyard\ShowShipyard;
23
use Stu\Module\Colony\View\ShowSocial\ShowSocial;
24
use Stu\Module\Colony\View\ShowSubspaceTelescope\ShowSubspaceTelescope;
25
use Stu\Module\Colony\View\ShowTorpedoFab\ShowTorpedoFab;
26
use Stu\Module\Colony\View\ShowWaste\ShowWaste;
27
28
enum ColonyMenuEnum: int
29
{
30
    case MENU_MAINSCREEN = 0;
31
    case MENU_BUILD = 1;
32
    case MENU_INFO = 2;
33
    case MENU_OPTION = 3;
34
    case MENU_SOCIAL = 4;
35
    case MENU_BUILDINGS = 5;
36
    case MENU_AIRFIELD = 6;
37
    case MENU_MODULEFAB = 7;
38
    case MENU_SHIPYARD = 8;
39
    case MENU_BUILDPLANS = 9;
40
    case MENU_FIGHTER_SHIPYARD = 10;
41
    case MENU_TORPEDOFAB = 11;
42
    case MENU_ACADEMY = 12;
43
    case MENU_WASTE = 13;
44
    case MENU_FAB_HALL = 14;
45
    case MENU_TECH_CENTER = 15;
46
    case MENU_SUBSPACE_TELESCOPE = 16;
47
    case MENU_SHIP_DISASSEMBLY = 17;
48
    case MENU_SHIP_REPAIR = 18;
49
50
    public static function getFor(mixed $value): ColonyMenuEnum
51
    {
52
        if ($value === null) {
53
            return ColonyMenuEnum::MENU_MAINSCREEN;
54
        }
55
56
        if ($value instanceof self) {
57
            return $value;
58
        }
59
60
        return self::tryFrom($value) ?? ColonyMenuEnum::MENU_MAINSCREEN;
61
    }
62
63
    public static function getMenuClass(ColonyMenuEnum $currentMenu, int $value): string
64
    {
65
        if ($currentMenu->value === $value) {
66
            return 'selected';
67
        }
68
69
        return "";
70
    }
71
72
73
    /** @return array<int>|null */
74
    public function getNeededBuildingFunction(): ?array
75
    {
76
        return match ($this) {
77
            self::MENU_MAINSCREEN => null,
78
            self::MENU_BUILD => null,
79
            self::MENU_INFO => null,
80
            self::MENU_OPTION => null,
81
            self::MENU_SOCIAL => null,
82
            self::MENU_BUILDINGS => null,
83
            self::MENU_AIRFIELD => [BuildingEnum::BUILDING_FUNCTION_AIRFIELD],
84
            self::MENU_MODULEFAB => BuildingFunctionTypeEnum::getModuleFabOptions(),
85
            self::MENU_SHIPYARD => BuildingFunctionTypeEnum::getShipyardOptions(),
86
            self::MENU_BUILDPLANS => BuildingFunctionTypeEnum::getShipyardOptions(),
87
            self::MENU_FIGHTER_SHIPYARD => [BuildingEnum::BUILDING_FUNCTION_FIGHTER_SHIPYARD],
88
            self::MENU_TORPEDOFAB => [BuildingEnum::BUILDING_FUNCTION_TORPEDO_FAB],
89
            self::MENU_ACADEMY => [BuildingEnum::BUILDING_FUNCTION_ACADEMY],
90
            self::MENU_WASTE => [BuildingEnum::BUILDING_FUNCTION_WAREHOUSE],
91
            self::MENU_FAB_HALL => [BuildingEnum::BUILDING_FUNCTION_FABRICATION_HALL],
92
            self::MENU_TECH_CENTER => [BuildingEnum::BUILDING_FUNCTION_TECH_CENTER],
93
            self::MENU_SUBSPACE_TELESCOPE => [BuildingEnum::BUILDING_FUNCTION_SUBSPACE_TELESCOPE],
94
            self::MENU_SHIP_DISASSEMBLY => BuildingFunctionTypeEnum::getShipyardOptions(),
95
            self::MENU_SHIP_REPAIR => BuildingFunctionTypeEnum::getShipyardOptions()
96
        };
97
    }
98
99
    public function getViewIdentifier(): string
100
    {
101
        return match ($this) {
102
            self::MENU_MAINSCREEN => ShowMainscreen::VIEW_IDENTIFIER,
103
            self::MENU_BUILD => ShowBuildMenu::VIEW_IDENTIFIER,
104
            self::MENU_INFO => ShowManagement::VIEW_IDENTIFIER,
105
            self::MENU_OPTION => ShowMisc::VIEW_IDENTIFIER,
106
            self::MENU_SOCIAL => ShowSocial::VIEW_IDENTIFIER,
107
            self::MENU_BUILDINGS => ShowBuildingManagement::VIEW_IDENTIFIER,
108
            self::MENU_AIRFIELD => ShowAirfield::VIEW_IDENTIFIER,
109
            self::MENU_MODULEFAB => ShowModuleFab::VIEW_IDENTIFIER,
110
            self::MENU_SHIPYARD => ShowShipyard::VIEW_IDENTIFIER,
111
            self::MENU_BUILDPLANS => ShowBuildPlans::VIEW_IDENTIFIER,
112
            self::MENU_FIGHTER_SHIPYARD => ShowFighterShipyard::VIEW_IDENTIFIER,
113
            self::MENU_TORPEDOFAB => ShowTorpedoFab::VIEW_IDENTIFIER,
114
            self::MENU_ACADEMY => ShowAcademy::VIEW_IDENTIFIER,
115
            self::MENU_WASTE => ShowWaste::VIEW_IDENTIFIER,
116
            self::MENU_FAB_HALL => ShowModuleFab::VIEW_IDENTIFIER,
117
            self::MENU_TECH_CENTER => ShowModuleFab::VIEW_IDENTIFIER,
118
            self::MENU_SUBSPACE_TELESCOPE => ShowSubspaceTelescope::VIEW_IDENTIFIER,
119
            self::MENU_SHIP_DISASSEMBLY => ShowShipDisassembly::VIEW_IDENTIFIER,
120
            self::MENU_SHIP_REPAIR => ShowShipRepair::VIEW_IDENTIFIER
121
        };
122
    }
123
124
    public function getTemplate(): string
125
    {
126
        return match ($this) {
127
            self::MENU_MAINSCREEN => 'html/colony/menu/mainscreen.twig',
128
            self::MENU_BUILD => 'html/colony/menu/buildmenues.twig',
129
            self::MENU_INFO => 'html/colony/menu/management.twig',
130
            self::MENU_OPTION => 'html/colony/menu/miscellaneous.twig',
131
            self::MENU_SOCIAL => 'html/colony/menu/social.twig',
132
            self::MENU_BUILDINGS => 'html/colony/menu/buildingManagement.twig',
133
            self::MENU_AIRFIELD => 'html/colony/menu/airfield.twig',
134
            self::MENU_MODULEFAB => 'html/colony/menu/moduleFab.twig',
135
            self::MENU_SHIPYARD => 'html/colony/menu/shipyard.twig',
136
            self::MENU_BUILDPLANS => 'html/colony/menu/shipBuildplans.twig',
137
            self::MENU_FIGHTER_SHIPYARD => 'html/colony/menu/fighterShipyard.twig',
138
            self::MENU_TORPEDOFAB => 'html/colony/menu/torpedoFab.twig',
139
            self::MENU_ACADEMY => 'html/colony/menu/academy.twig',
140
            self::MENU_WASTE => 'html/colony/menu/waste.twig',
141
            self::MENU_FAB_HALL => 'html/colony/menu/moduleFab.twig',
142
            self::MENU_TECH_CENTER => 'html/colony/menu/moduleFab.twig',
143
            self::MENU_SUBSPACE_TELESCOPE => 'html/colony/menu/telescope.twig',
144
            self::MENU_SHIP_DISASSEMBLY => 'html/colony/menu/shipDisassembly.twig',
145
            self::MENU_SHIP_REPAIR => 'html/colony/menu/shipRepair.twig'
146
        };
147
    }
148
149
    /** @return array<GuiComponentEnum> */
150
    public function getNecessaryGuiComponents(): array
151
    {
152
        return match ($this) {
153
            // mainscreen
154
            self::MENU_MAINSCREEN => [
155
                GuiComponentEnum::SURFACE,
156
                GuiComponentEnum::SHIELDING,
157
                GuiComponentEnum::EPS_BAR,
158
                GuiComponentEnum::STORAGE,
159
                GuiComponentEnum::MANAGEMENT,
160
                GuiComponentEnum::EFFECTS,
161
            ],
162
163
            // submenues
164
            self::MENU_BUILD => [GuiComponentEnum::BUILD_MENUES],
165
            self::MENU_INFO => [GuiComponentEnum::MANAGEMENT, GuiComponentEnum::EFFECTS],
166
            self::MENU_OPTION => [],
167
            self::MENU_SOCIAL => [GuiComponentEnum::SOCIAL],
168
            self::MENU_BUILDINGS => [GuiComponentEnum::BUILDING_MANAGEMENT],
169
170
            // menues without surface
171
            self::MENU_AIRFIELD => [GuiComponentEnum::AIRFIELD],
172
            self::MENU_MODULEFAB => [GuiComponentEnum::MODULE_FAB],
173
            self::MENU_SHIPYARD => [GuiComponentEnum::SHIPYARD],
174
            self::MENU_BUILDPLANS => [GuiComponentEnum::SHIP_BUILDPLANS],
175
            self::MENU_FIGHTER_SHIPYARD => [GuiComponentEnum::FIGHTER_SHIPYARD],
176
            self::MENU_TORPEDOFAB => [GuiComponentEnum::TORPEDO_FAB],
177
            self::MENU_ACADEMY => [GuiComponentEnum::ACADEMY],
178
            self::MENU_WASTE => [],
179
            self::MENU_FAB_HALL => [GuiComponentEnum::MODULE_FAB],
180
            self::MENU_TECH_CENTER => [GuiComponentEnum::MODULE_FAB],
181
            self::MENU_SUBSPACE_TELESCOPE => [],
182
            self::MENU_SHIP_DISASSEMBLY => [GuiComponentEnum::SHIP_DISASSEMBLY],
183
            self::MENU_SHIP_REPAIR => [GuiComponentEnum::SHIP_REPAIR]
184
        };
185
    }
186
}
187