ShipMovementInformationAdder::reachedDestination()   C
last analyzed

Complexity

Conditions 13
Paths 42

Size

Total Lines 77
Code Lines 54

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 182

Importance

Changes 0
Metric Value
cc 13
eloc 54
nc 42
nop 4
dl 0
loc 77
ccs 0
cts 57
cp 0
crap 182
rs 6.6166
c 0
b 0
f 0

How to fix   Long Method    Complexity   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
3
namespace Stu\Module\Spacecraft\Lib\Movement;
4
5
use InvalidArgumentException;
6
use Override;
0 ignored issues
show
Bug introduced by
The type Override was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
7
use Stu\Module\Spacecraft\Lib\Message\MessageCollectionInterface;
8
use Stu\Module\Spacecraft\Lib\Message\MessageFactoryInterface;
9
use Stu\Module\Spacecraft\Lib\Movement\Route\RouteModeEnum;
10
use Stu\Orm\Entity\Ship;
11
use Stu\Orm\Entity\Spacecraft;
12
13
//TODO unit tests
14
final class ShipMovementInformationAdder implements ShipMovementInformationAdderInterface
15
{
16 1
    public function __construct(private MessageFactoryInterface $messageFactory) {}
17
18
    #[Override]
19
    public function reachedDestination(
20
        Spacecraft $spacecraft,
21
        bool $isFleetMode,
22
        RouteModeEnum $routeMode,
23
        MessageCollectionInterface $messages
24
    ): void {
25
26
        $name = $isFleetMode ? 'Flotte' : $spacecraft->getName();
27
        $routeModeValue = $routeMode->value;
28
29
        $message = $this->messageFactory->createMessage();
30
        $messages->add($message);
31
32
        switch ($routeMode) {
33
            case RouteModeEnum::FLIGHT:
34
                $message->add(sprintf(
35
                    _('Die %s fliegt in Sektor %s ein'),
36
                    $name,
37
                    $spacecraft->getSectorString()
38
                ));
39
                break;
40
            case RouteModeEnum::SYSTEM_ENTRY:
41
                $system = $spacecraft->getSystem();
42
43
                if ($system === null) {
44
                    throw new InvalidArgumentException(sprintf('route mode %d does not exist', $routeModeValue));
45
                }
46
47
                $message->add(sprintf(
48
                    _('Die %s fliegt in das %s-System ein'),
49
                    $name,
50
                    $system->getName()
51
                ));
52
                break;
53
            case RouteModeEnum::SYSTEM_EXIT:
54
                $message->add(sprintf(
55
                    _('Die %s hat das Sternsystem verlassen'),
56
                    $name,
57
                ));
58
                break;
59
            case RouteModeEnum::WORMHOLE_ENTRY:
60
                $system = $spacecraft->getSystem();
61
62
                if ($system === null) {
63
                    throw new InvalidArgumentException(sprintf('route mode %d does not exist', $routeModeValue));
64
                }
65
66
                $message->add(sprintf(
67
                    _('Die %s fliegt in das %s ein'),
68
                    $name,
69
                    $system->getName()
70
                ));
71
                break;
72
            case RouteModeEnum::WORMHOLE_EXIT:
73
                $message->add($isFleetMode ? 'Die Flotte hat das Wurmloch verlassen' : 'Das Wurmloch wurde verlassen');
74
                break;
75
            case RouteModeEnum::TRANSWARP:
76
                $message->add(sprintf(
77
                    _('Die %s verlässt den Transwarpkanal in Sektor %s'),
78
                    $name,
79
                    $spacecraft->getSectorString()
80
                ));
81
                break;
82
            default:
83
                throw new InvalidArgumentException(sprintf('route mode %d does not exist', $routeMode));
0 ignored issues
show
Bug introduced by
$routeMode of type Stu\Module\Spacecraft\Li...ent\Route\RouteModeEnum is incompatible with the type double|integer|string expected by parameter $values of sprintf(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

83
                throw new InvalidArgumentException(sprintf('route mode %d does not exist', /** @scrutinizer ignore-type */ $routeMode));
Loading history...
84
        }
85
86
        $fieldType = $spacecraft->getLocation()->getFieldType();
87
        foreach ($fieldType->getEffects() as $effect) {
88
89
            $fieldType = $spacecraft->getLocation()->getFieldType();
90
            $flightDestinationInfo = $effect->getFlightDestinationInfo($fieldType);
91
            if ($flightDestinationInfo !== null) {
92
                $messages->addMessageBy(
93
                    sprintf("[color=yellow]%s[/color]", $flightDestinationInfo),
94
                    $spacecraft->getUser()->getId()
95
                );
96
            }
97
        }
98
    }
99
100
    #[Override]
101
    public function reachedDestinationDestroyed(
102
        Spacecraft $spacecraft,
103
        string $leadShipName,
104
        bool $isFleetMode,
105
        RouteModeEnum $routeMode,
106
        MessageCollectionInterface $messages
107
    ): void {
108
109
        $name = $isFleetMode ? 'gesamte Flotte' : $leadShipName;
110
        $routeModeValue = $routeMode->value;
111
112
        $message = $this->messageFactory->createMessage();
113
        $messages->add($message);
114
115
        switch ($routeMode) {
116
            case RouteModeEnum::FLIGHT:
117
                $message->add(sprintf(
118
                    _('Beim Einflug in Sektor %s wurde die %s zerstört'),
119
                    $spacecraft->getSectorString(),
120
                    $name
121
                ));
122
                break;
123
            case RouteModeEnum::SYSTEM_ENTRY:
124
                $system = $spacecraft->getSystem();
125
126
                if ($system === null) {
127
                    throw new InvalidArgumentException(sprintf('route mode %d does not exist', $routeModeValue));
128
                }
129
130
                $message->add(sprintf(
131
                    _('Beim Einflug in das %s-System wurde die %s zerstört'),
132
                    $system->getName(),
133
                    $name
134
                ));
135
                break;
136
            case RouteModeEnum::SYSTEM_EXIT:
137
                $message->add(sprintf(
138
                    _('Beim Verlassen des Sternsystem wurde die %s zerstört'),
139
                    $name
140
                ));
141
                break;
142
            case RouteModeEnum::WORMHOLE_ENTRY:
143
                $system = $spacecraft->getSystem();
144
145
                if ($system === null) {
146
                    throw new InvalidArgumentException(sprintf('route mode %d does not exist', $routeModeValue));
147
                }
148
                $message->add(sprintf(
149
                    _('Beim Einflug in das %s wurde die %s zerstört'),
150
                    $system->getName(),
151
                    $name
152
                ));
153
                break;
154
            case RouteModeEnum::WORMHOLE_EXIT:
155
                $message->add(
156
                    sprintf(
157
                        _('Beim Verlassen des Wurmlochs wurde die %s zerstört'),
158
                        $name
159
                    )
160
                );
161
                break;
162
            case RouteModeEnum::TRANSWARP:
163
                $message->add(
164
                    sprintf(
165
                        _('Beim Verlassen des Transwarpkanals wurde die %s zerstört'),
166
                        $name
167
                    )
168
                );
169
                break;
170
            default:
171
                throw new InvalidArgumentException(sprintf('route mode %d does not exist', $routeModeValue));
172
        }
173
    }
174
175
    #[Override]
176
    public function pulledTractoredShip(
177
        Spacecraft $spacecraft,
178
        Ship $tractoredShip,
179
        RouteModeEnum $routeMode,
180
        MessageCollectionInterface $messages
181
    ): void {
182
        $tractoredShipName = $tractoredShip->getName();
183
184
        $message = $this->messageFactory->createMessage(
185
            $spacecraft->getUser()->getId(),
186
            $tractoredShip->getUser()->getId()
187
        );
188
        $messages->add($message);
189
190
        $sectorString = $spacecraft->getSectorString();
191
192
        switch ($routeMode) {
193
            case RouteModeEnum::FLIGHT:
194
                $message->add(sprintf(
195
                    _('Die %s wurde via Traktorstrahl bis %s mitgezogen'),
196
                    $tractoredShipName,
197
                    $sectorString
198
                ));
199
                break;
200
            case RouteModeEnum::SYSTEM_ENTRY:
201
                $message->add(sprintf(_('Die %s wurde mit in das System gezogen'), $tractoredShipName));
202
                break;
203
            case RouteModeEnum::SYSTEM_EXIT:
204
                $message->add(sprintf(_('Die %s wurde mit aus dem System gezogen'), $tractoredShipName));
205
                break;
206
            case RouteModeEnum::WORMHOLE_ENTRY:
207
                $message->add(sprintf(_('Die %s wurde mit in das Wurmloch gezogen'), $tractoredShipName));
208
                break;
209
            case RouteModeEnum::WORMHOLE_EXIT:
210
                $message->add(sprintf(_('Die %s wurde mit aus dem Wurmloch gezogen'), $tractoredShipName));
211
                break;
212
            default:
213
                throw new InvalidArgumentException(sprintf('route mode %d does not exist', $routeMode->value));
214
        }
215
    }
216
}
217