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

Map   A

Complexity

Total Complexity 13

Size/Duplication

Total Lines 61
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 5

Test Coverage

Coverage 83.87%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 13
c 1
b 0
f 0
lcom 0
cbo 5
dl 0
loc 61
ccs 26
cts 31
cp 0.8387
rs 10

4 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A add() 0 8 2
C getPreviousLocations() 0 27 8
A first() 0 10 2
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