Passed
Push — master ( 1d5530...fba2a1 )
by Nico
56:37 queued 25:57
created

PanelBoundaries::getParentId()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 1
c 1
b 0
f 0
nc 1
nop 0
dl 0
loc 3
ccs 0
cts 2
cp 0
crap 2
rs 10
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Stu\Lib\Map\VisualPanel;
6
7
use RuntimeException;
8
use Stu\Orm\Entity\LayerInterface;
9
use Stu\Orm\Entity\LocationInterface;
10
use Stu\Orm\Entity\MapInterface;
11
use Stu\Orm\Entity\StarSystemInterface;
12
use Stu\Orm\Entity\StarSystemMapInterface;
13
14
final class PanelBoundaries
15
{
16 4
    public function __construct(private int $minX, private int $maxX, private int $minY, private int $maxY, private LayerInterface|StarSystemInterface $parent)
17
    {
18 4
    }
19
20
    /** @return array<int> */
21 1
    public function getColumnRange(): array
22
    {
23 1
        return range($this->minX, $this->maxX);
24
    }
25
26
    /** @return array<int> */
27 1
    public function getRowRange(): array
28
    {
29 1
        return range($this->minY, $this->maxY);
30
    }
31
32 4
    public function getMinX(): int
33
    {
34 4
        return $this->minX;
35
    }
36
37 4
    public function getMaxX(): int
38
    {
39 4
        return $this->maxX;
40
    }
41
42 4
    public function getMinY(): int
43
    {
44 4
        return $this->minY;
45
    }
46
47 4
    public function getMaxY(): int
48
    {
49 4
        return $this->maxY;
50
    }
51
52
    public function getParentId(): int
53
    {
54
        return $this->parent->getId();
55
    }
56
57 4
    public function isOnMap(): bool
58
    {
59 4
        return $this->parent instanceof LayerInterface;
60
    }
61
62
    /**
63
     * @param array{minx: int, maxx: int, miny: int, maxy: int} $array
64
     */
65 1
    public static function fromArray(array $array, LayerInterface $layer): PanelBoundaries
66
    {
67 1
        return new PanelBoundaries(
68 1
            $array['minx'],
69 1
            $array['maxx'],
70 1
            $array['miny'],
71 1
            $array['maxy'],
72 1
            $layer
73 1
        );
74
    }
75
76 1
    public static function fromSystem(StarSystemInterface $system): PanelBoundaries
77
    {
78 1
        return new PanelBoundaries(
79 1
            1,
80 1
            $system->getMaxX(),
81 1
            1,
82 1
            $system->getMaxY(),
83 1
            $system
84 1
        );
85
    }
86
87 2
    public static function fromLocation(MapInterface|StarSystemMapInterface $map, int $range): PanelBoundaries
88
    {
89 2
        if ($map instanceof MapInterface) {
90 1
            return static::fromMap($map, $range);
91
        }
92
93 1
        return static::fromSystemMap($map, $range);
94
    }
95
96 1
    private static function fromMap(MapInterface $map, int $range): PanelBoundaries
97
    {
98 1
        $layer = $map->getLayer();
99 1
        if ($layer === null) {
100
            throw new RuntimeException('this should not happen');
101
        }
102
103 1
        return static::createLocationWithRange(
104 1
            $map,
105 1
            $layer->getWidth(),
106 1
            $layer->getHeight(),
107 1
            $layer,
108 1
            $range
109 1
        );
110
    }
111
112 1
    private static function fromSystemMap(StarSystemMapInterface $systemMap, int $range): PanelBoundaries
113
    {
114 1
        return static::createLocationWithRange(
115 1
            $systemMap,
116 1
            $systemMap->getSystem()->getMaxX(),
117 1
            $systemMap->getSystem()->getMaxY(),
118 1
            $systemMap->getSystem(),
119 1
            $range
120 1
        );
121
    }
122
123 2
    private static function createLocationWithRange(
124
        LocationInterface $location,
125
        int $width,
126
        int $height,
127
        LayerInterface|StarSystemInterface $parent,
128
        int $range
129
    ): PanelBoundaries {
130 2
        return new PanelBoundaries(
131 2
            max(1, $location->getX() - $range),
132 2
            min($width, $location->getX() + $range),
133 2
            max(1, $location->getY() - $range),
134 2
            min($height, $location->getY() + $range),
135 2
            $parent
136 2
        );
137
    }
138
}
139