Passed
Push — master ( a3e5b5...489d7c )
by Petr
05:59
created

Map::first()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 10
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 6

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 10
ccs 0
cts 5
cp 0
rs 9.4285
cc 2
eloc 5
nc 2
nop 0
crap 6
1
<?php
2
3
namespace Vehsamrak\Terraformator\Entity;
4
5
use Doctrine\Common\Collections\ArrayCollection;
6
use Vehsamrak\Terraformator\Exception\InvalidTypeException;
7
8
/**
9
 * @author Vehsamrak
10
 */
11
class Map extends ArrayCollection
12
{
13
14
    /**
15
     * {@inheritDoc}
16
     */
17 16
    public function __construct(array $locations = [])
18
    {
19 16
        parent::__construct($locations);
20 16
    }
21
22
    /** {@inheritDoc} */
23 12
    public function add($element): bool
24
    {
25 12
        if (!$element instanceof Location) {
26 1
            throw new InvalidTypeException();
27
        }
28
29 11
        return parent::add($element);
30
    }
31
32
    /** {@inheritDoc} */
33
    public function first(): ?Location
34
    {
35
        $firstLocation = parent::first();
36
37
        if (!$firstLocation) {
38
            return null;
39
        }
40
41
        return $firstLocation;
42
    }
43
44 2
    public function getPreviousLocations(int $x, int $y): PreviousLocationMap
45
    {
46
        // filtering north, north-west, north-east and west locations by X and Y
47 2
        $previousLocations = $this->filter(
48 2
            function (Location $location) use ($x, $y) {
49 2
                $westLocationX = $x - 1;
50 2
                $westLocationY = $y;
51 2
                $northWestLocationX = $x - 1;
52 2
                $northWestLocationY = $y - 1;
53 2
                $northLocationX = $x;
54 2
                $northLocationY = $y - 1;
55 2
                $northEastLocationX = $x + 1;
56 2
                $northEastLocationY = $y - 1;
57
58 2
                $locationX = $location->getX();
59 2
                $locationY = $location->getY();
60
61 2
                return ($locationX === $westLocationX && $locationY === $westLocationY) ||
62 2
                    ($locationX === $northWestLocationX && $locationY === $northWestLocationY) ||
63 2
                    ($locationX === $northLocationX && $locationY === $northLocationY) ||
64 2
                    ($locationX === $northEastLocationX && $locationY === $northEastLocationY);
65
66 2
            }
67
        );
68
69 2
        return new PreviousLocationMap($previousLocations->getValues());
70
    }
71
}
72
73