Passed
Pull Request — dev (#2044)
by Nico
11:37
created

PanelLayerCreation::addAnomalyLayer()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 1

Importance

Changes 0
Metric Value
cc 1
eloc 3
nc 1
nop 0
dl 0
loc 6
ccs 3
cts 3
cp 1
crap 1
rs 10
c 0
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Stu\Lib\Map\VisualPanel\Layer;
6
7
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...
8
use RuntimeException;
9
use Stu\Component\Map\EncodedMapInterface;
10
use Stu\Lib\Map\VisualPanel\AbstractVisualPanel;
11
use Stu\Lib\Map\VisualPanel\Layer\DataProvider\PanelLayerDataProviderInterface;
12
use Stu\Lib\Map\VisualPanel\Layer\DataProvider\Border\BorderDataProviderFactoryInterface;
13
use Stu\Lib\Map\VisualPanel\Layer\DataProvider\Spacecraftcount\SpacecraftCountDataProviderFactoryInterface;
14
use Stu\Lib\Map\VisualPanel\Layer\DataProvider\Spacecraftcount\SpacecraftCountLayerTypeEnum;
15
use Stu\Lib\Map\VisualPanel\Layer\DataProvider\Subspace\SubspaceDataProviderFactoryInterface;
16
use Stu\Lib\Map\VisualPanel\Layer\DataProvider\Subspace\SubspaceLayerTypeEnum;
17
use Stu\Lib\Map\VisualPanel\Layer\Render\AnomalyLayerRenderer;
18
use Stu\Lib\Map\VisualPanel\Layer\Render\BorderLayerRenderer;
0 ignored issues
show
Bug introduced by
The type Stu\Lib\Map\VisualPanel\...der\BorderLayerRenderer 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...
19
use Stu\Lib\Map\VisualPanel\Layer\Render\ColonyShieldLayerRenderer;
20
use Stu\Lib\Map\VisualPanel\Layer\Render\LayerRendererInterface;
21
use Stu\Lib\Map\VisualPanel\Layer\Render\MapLayerRenderer;
22
use Stu\Lib\Map\VisualPanel\Layer\Render\SpacecraftCountLayerRenderer;
23
use Stu\Lib\Map\VisualPanel\Layer\Render\SubspaceLayerRenderer;
24
use Stu\Lib\Map\VisualPanel\Layer\Render\SystemLayerRenderer;
0 ignored issues
show
Bug introduced by
The type Stu\Lib\Map\VisualPanel\...der\SystemLayerRenderer 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...
25
use Stu\Orm\Entity\LayerInterface;
26
use Stu\Orm\Entity\SpacecraftInterface;
27
28
final class PanelLayerCreation implements PanelLayerCreationInterface
29
{
30
    /** @var array<int, PanelLayerDataProviderInterface> */
31
    private array $specialDataProviders = [];
32
33
    /** @var array<int, LayerRendererInterface> */
34
    private array $layers = [];
35
36
    /** @var array<int> */
37
    public static array $skippedLayers = [];
38
39
    /** @param array<int, PanelLayerDataProviderInterface> $dataProviders */
40 2
    public function __construct(
41
        private EncodedMapInterface $encodedMap,
42
        private BorderDataProviderFactoryInterface $borderDataProviderFactory,
43
        private SpacecraftCountDataProviderFactoryInterface $shipcountDataProviderFactory,
44
        private SubspaceDataProviderFactoryInterface $subspaceDataProviderFactory,
45
        private array $dataProviders
46 2
    ) {}
47
48 3
    #[Override]
49
    public function addSystemLayer(): PanelLayerCreationInterface
50
    {
51 3
        $this->layers[PanelLayerEnum::SYSTEM->value] = new SystemLayerRenderer();
52
53 3
        return $this;
54
    }
55
56 1
    #[Override]
57
    public function addMapLayer(LayerInterface $layer): PanelLayerCreationInterface
58
    {
59 1
        $this->layers[PanelLayerEnum::MAP->value] = new MapLayerRenderer($layer, $this->encodedMap);
60
61 1
        return $this;
62
    }
63
64 3
    #[Override]
65
    public function addColonyShieldLayer(): PanelLayerCreationInterface
66
    {
67 3
        $this->layers[PanelLayerEnum::COLONY_SHIELD->value] = new ColonyShieldLayerRenderer();
68
69 3
        return $this;
70
    }
71
72
    #[Override]
73
    public function addSubspaceLayer(int $id, SubspaceLayerTypeEnum $type): PanelLayerCreationInterface
74
    {
75
        $this->layers[PanelLayerEnum::SUBSPACE_SIGNATURES->value] = new SubspaceLayerRenderer();
76
        $this->specialDataProviders[PanelLayerEnum::SUBSPACE_SIGNATURES->value] = $this->subspaceDataProviderFactory->getDataProvider($id, $type);
77
78
        return $this;
79
    }
80
81 4
    #[Override]
82
    public function addShipCountLayer(
83
        bool $showCloakedEverywhere,
84
        ?SpacecraftInterface $currentSpacecraft,
85
        SpacecraftCountLayerTypeEnum $type,
86
        int $id
87
    ): PanelLayerCreationInterface {
88 4
        $this->layers[PanelLayerEnum::SPACECRAFT_COUNT->value] = new SpacecraftCountLayerRenderer($showCloakedEverywhere, $currentSpacecraft);
89 4
        $this->specialDataProviders[PanelLayerEnum::SPACECRAFT_COUNT->value] = $this->shipcountDataProviderFactory->getDataProvider($id, $type);
90
91 4
        return $this;
92
    }
93
94 1
    #[Override]
95
    public function addBorderLayer(?SpacecraftInterface $currentSpacecraft, ?bool $isOnShipLevel): PanelLayerCreationInterface
96
    {
97 1
        $this->layers[PanelLayerEnum::BORDER->value] = new BorderLayerRenderer($currentSpacecraft, $isOnShipLevel);
98 1
        $this->specialDataProviders[PanelLayerEnum::BORDER->value] = $this->borderDataProviderFactory->getDataProvider($currentSpacecraft, $isOnShipLevel);
99
100 1
        return $this;
101
    }
102
103 4
    #[Override]
104
    public function addAnomalyLayer(): PanelLayerCreationInterface
105
    {
106 4
        $this->layers[PanelLayerEnum::ANOMALIES->value] = new AnomalyLayerRenderer();
107
108 4
        return $this;
109
    }
110
111 4
    #[Override]
112
    public function build(AbstractVisualPanel $panel): PanelLayers
113
    {
114 4
        $layers = $this->layers;
115 4
        $this->layers = [];
116
117 4
        return $this->createLayers($layers, $panel);
118
    }
119
120
    /** @param array<int, LayerRendererInterface> $layers */
121 4
    private function createLayers(array $layers, AbstractVisualPanel $panel): PanelLayers
122
    {
123 4
        $result = new PanelLayers($panel);
124
125 4
        foreach ($layers as $layerType => $renderer) {
126
127 4
            if (!in_array($layerType, self::$skippedLayers)) {
128 4
                $result->addLayer(PanelLayerEnum::from($layerType), new PanelLayer($this->getDataProvider($layerType)->loadData(
129 4
                    $panel->getBoundaries()
130 4
                ), $renderer));
131
            }
132
        }
133
134 4
        return $result;
135
    }
136
137 4
    private function getDataProvider(int $layerType): PanelLayerDataProviderInterface
138
    {
139 4
        if (array_key_exists($layerType, $this->specialDataProviders)) {
140 4
            return $this->specialDataProviders[$layerType];
141
        }
142
143 4
        if (!array_key_exists($layerType, $this->dataProviders)) {
144
            throw new RuntimeException(sprintf('no layer data provider existent for type: %d', $layerType));
145
        }
146
147 4
        return $this->dataProviders[$layerType];
148
    }
149
}