Passed
Pull Request — master (#1695)
by Nico
40:23 queued 15:53
created

ShipDisassemblyProvider::setTemplateVariables()   B

Complexity

Conditions 8
Paths 8

Size

Total Lines 33
Code Lines 18

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 72

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 8
eloc 18
nc 8
nop 2
dl 0
loc 33
ccs 0
cts 19
cp 0
crap 72
rs 8.4444
c 1
b 0
f 0
1
<?php
2
3
namespace Stu\Module\Colony\Lib\Gui\Component;
4
5
use RuntimeException;
6
use Stu\Component\Colony\OrbitShipListRetrieverInterface;
7
use Stu\Lib\Colony\PlanetFieldHostInterface;
8
use Stu\Lib\Colony\PlanetFieldHostProviderInterface;
9
use Stu\Module\Colony\Lib\ColonyLibFactoryInterface;
10
use Stu\Module\Control\GameControllerInterface;
11
use Stu\Orm\Entity\ColonyInterface;
12
use Stu\Orm\Entity\ShipInterface;
13
use Stu\Orm\Repository\ShipRumpBuildingFunctionRepositoryInterface;
14
15
final class ShipDisassemblyProvider implements GuiComponentProviderInterface
16
{
17
    private ShipRumpBuildingFunctionRepositoryInterface $shipRumpBuildingFunctionRepository;
18
19
    private PlanetFieldHostProviderInterface $planetFieldHostProvider;
20
21
    private ColonyLibFactoryInterface $colonyLibFactory;
22
23
    private OrbitShipListRetrieverInterface $orbitShipListRetriever;
24
25
    public function __construct(
26
        ShipRumpBuildingFunctionRepositoryInterface $shipRumpBuildingFunctionRepository,
27
        PlanetFieldHostProviderInterface $planetFieldHostProvider,
28
        ColonyLibFactoryInterface $colonyLibFactory,
29
        OrbitShipListRetrieverInterface $orbitShipListRetriever
30
    ) {
31
        $this->shipRumpBuildingFunctionRepository = $shipRumpBuildingFunctionRepository;
32
        $this->planetFieldHostProvider = $planetFieldHostProvider;
33
        $this->colonyLibFactory = $colonyLibFactory;
34
        $this->orbitShipListRetriever = $orbitShipListRetriever;
35
    }
36
37
    /** @param ColonyInterface $host */
38
    public function setTemplateVariables(
39
        PlanetFieldHostInterface $host,
40
        GameControllerInterface $game
41
    ): void {
42
        $field = $this->planetFieldHostProvider->loadFieldViaRequestParameter($game->getUser());
43
44
        $building = $field->getBuilding();
45
        if ($building === null) {
46
            throw new RuntimeException('building is null');
47
        }
48
49
        $fieldFunctions = $building->getFunctions()->toArray();
50
        $colonySurface = $this->colonyLibFactory->createColonySurface($host);
51
52
        if ($colonySurface->hasShipyard()) {
53
            $repairableShips = [];
54
            foreach ($this->orbitShipListRetriever->retrieve($host) as $fleet) {
55
                /** @var ShipInterface $ship */
56
                foreach ($fleet['ships'] as $ship) {
57
                    if ($ship->getUser() !== $game->getUser()) {
58
                        continue;
59
                    }
60
                    foreach ($this->shipRumpBuildingFunctionRepository->getByShipRump($ship->getRump()) as $rump_rel) {
61
                        if (array_key_exists($rump_rel->getBuildingFunction(), $fieldFunctions)) {
62
                            $repairableShips[$ship->getId()] = $ship;
63
                            break;
64
                        }
65
                    }
66
                }
67
            }
68
69
            $game->setTemplateVar('SHIP_LIST', $repairableShips);
70
            $game->setTemplateVar('FIELD', $field);
71
        }
72
    }
73
}
74