Completed
Push — master ( 5d9f44...4b85e8 )
by Tomáš
03:31
created

R2G::generate()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 44
Code Lines 32

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
eloc 32
nc 3
nop 0
dl 0
loc 44
rs 9.408
c 0
b 0
f 0
1
<?php
2
3
namespace TournamentGenerator\Preset;
4
5
/**
6
 *
7
 */
8
class R2G extends \TournamentGenerator\Tournament
9
{
10
11
	public function generate() {
12
13
		if (count($this->getTeams()) === 0) throw new \Exception('Couldn\'t generate 2R2G tournament because there are no teams in the tournament.');
14
15
16
		$round1 = $this->round('Round 1');
17
		$round2 = $this->round('Round 2');
18
		$round3 = $this->round('Round 3');
19
20
		$group_0_0 = $round1->group('0/0')->setInGame(2)->setType(\TournamentGenerator\Constants::ROUND_TWO);
21
		$group_0_1 = $round2->group('0/1')->setInGame(2)->setType(\TournamentGenerator\Constants::ROUND_TWO);
22
		$group_1_0 = $round2->group('1/0')->setInGame(2)->setType(\TournamentGenerator\Constants::ROUND_TWO);
23
		$group_1_1 = $round3->group('1/1')->setInGame(2)->setType(\TournamentGenerator\Constants::ROUND_SPLIT)->setMaxSize(3);
24
		$group_0_2 = $round3->group('0/2')->setInGame(2)->setType(\TournamentGenerator\Constants::ROUND_ROBIN);
25
		$group_2_0 = $round3->group('2/0')->setInGame(2)->setType(\TournamentGenerator\Constants::ROUND_ROBIN);
26
27
		$filter_win_1 = new \TournamentGenerator\TeamFilter('wins', '=', 1);
28
		$filter_loss_1 = new \TournamentGenerator\TeamFilter('losses', '=', 1);
29
		$filter_notProgressed = new \TournamentGenerator\TeamFilter('notprogressed');
30
31
		$this->splitTeams($round1);
32
33
		if (count($this->getTeams()) % 4 == 2) {
34
			$group_top = $round2->group('TOP')->setType(\TournamentGenerator\Constants::ROUND_TWO);
35
36
			$filter_win_2 = new \TournamentGenerator\TeamFilter('wins', '=', 2, [$group_0_0, $group_top]);
37
			$filter_loss_2 = new \TournamentGenerator\TeamFilter('losses', '=', 2, [$group_0_0, $group_top]);
38
			$filter_win_1_both = new \TournamentGenerator\TeamFilter('wins', '=', 1, [$group_0_0, $group_top]);
39
			$filter_loss_1_both = new \TournamentGenerator\TeamFilter('losses', '=', 1, [$group_0_0, $group_top]);
40
			$group_0_0->progression($group_top, 0, 1)->addFilter($filter_win_1); // PROGRESS THE BEST WINNING TEAM
41
			$group_0_0->progression($group_top, 0, 1)->addFilter($filter_loss_1); // PROGRESS THE BEST LOSING TEAM
42
			$group_top->progression($group_2_0)->addFilter($filter_win_2);
43
			$group_top->progression($group_0_2)->addFilter($filter_loss_2);
44
			$group_top->progression($group_1_1)->addFilter($filter_win_1_both, $filter_loss_1_both);
45
		}
46
47
		$group_0_0->progression($group_0_1)->addFilter($filter_loss_1)->addFilter($filter_notProgressed);
48
		$group_0_0->progression($group_1_0)->addFilter($filter_win_1)->addFilter($filter_notProgressed);
49
		$group_0_1->progression($group_0_2)->addFilter($filter_loss_1);
50
		$group_0_1->progression($group_1_1)->addFilter($filter_win_1);
51
		$group_1_0->progression($group_2_0)->addFilter($filter_win_1);
52
		$group_1_0->progression($group_1_1)->addFilter($filter_loss_1);
53
54
		return $this;
55
56
	}
57
58
}
59