ILIAS  trunk Revision v11.0_alpha-1866-gfa368f7776e
All Data Structures Namespaces Files Functions Variables Enumerations Enumerator Modules Pages
Deck.php
Go to the documentation of this file.
1 <?php
2 
19 declare(strict_types=1);
20 
22 
26 
27 class Deck implements D\Deck
28 {
29  use ComponentHelper;
30 
31  private static array $sizes = [
32  self::SIZE_FULL,
33  self::SIZE_XL,
34  self::SIZE_L,
35  self::SIZE_M,
36  self::SIZE_S,
37  self::SIZE_XS
38  ];
39 
43  protected array $cards;
44  protected int $size;
45 
49  public function __construct(array $cards, int $size)
50  {
51  $classes = [Card::class];
52  $this->checkArgListElements("cards", $cards, $classes);
53  $this->checkArgIsElement("size", $size, self::$sizes, "size type");
54 
55  $this->cards = $cards;
56  $this->size = $size;
57  }
58 
62  public function withCards(array $cards): D\Deck
63  {
64  $classes = [Card::class];
65  $this->checkArgListElements("sections", $cards, $classes);
66 
67  $clone = clone $this;
68  $clone->cards = $cards;
69  return $clone;
70  }
71 
75  public function getCards(): array
76  {
77  return $this->cards;
78  }
79 
83  public function withExtraSmallCardsSize(): D\Deck
84  {
85  return $this->withCardsSize(self::SIZE_XS);
86  }
87 
91  public function withSmallCardsSize(): D\Deck
92  {
93  return $this->withCardsSize(self::SIZE_S);
94  }
98  public function withNormalCardsSize(): D\Deck
99  {
100  return $this->withCardsSize(self::SIZE_M);
101  }
102 
106  public function withLargeCardsSize(): D\Deck
107  {
108  return $this->withCardsSize(self::SIZE_L);
109  }
110 
114  public function withExtraLargeCardsSize(): D\Deck
115  {
116  return $this->withCardsSize(self::SIZE_XL);
117  }
118 
122  public function withFullSizedCardsSize(): D\Deck
123  {
124  return $this->withCardsSize(self::SIZE_FULL);
125  }
126 
127  protected function withCardsSize(int $size): D\Deck
128  {
129  $this->checkArgIsElement("size", $size, self::$sizes, "size type");
130 
131  $clone = clone $this;
132  $clone->size = $size;
133  return $clone;
134  }
135 
139  public function getCardsSize(): int
140  {
141  return $this->size;
142  }
143 
148  public function getCardsSizeSmallDisplays(): int
149  {
150  return $this->getCardsSizeForDisplaySize(self::SIZE_S);
151  }
152 
157  public function getCardsSizeForDisplaySize(int $display_size): int
158  {
172  $sizes = [
173  self::SIZE_XS => [
174  self::SIZE_XS => 4,
175  self::SIZE_S => 2,
176  self::SIZE_M => 2,
177  self::SIZE_L => 1
178  ],
179  self::SIZE_S => [
180  self::SIZE_XS => 6,
181  self::SIZE_S => 3,
182  self::SIZE_M => 3,
183  self::SIZE_L => 2
184  ],
185  self::SIZE_M => [
186  self::SIZE_XS => 12,
187  self::SIZE_S => 6,
188  self::SIZE_M => 4,
189  self::SIZE_L => 3
190  ],
191  self::SIZE_L => [
192  self::SIZE_XS => 12,
193  self::SIZE_S => 6,
194  self::SIZE_M => 6,
195  self::SIZE_L => 4
196  ],
197  self::SIZE_XL => [
198  self::SIZE_XS => 12,
199  self::SIZE_S => 12,
200  self::SIZE_M => 6,
201  self::SIZE_L => 6
202  ],
203  self::SIZE_FULL => [
204  self::SIZE_XS => 12,
205  self::SIZE_S => 12,
206  self::SIZE_M => 12,
207  self::SIZE_L => 12
208  ],
209  ];
210 
211  return $sizes[$this->getCardsSize()][$display_size];
212  }
213 }
getCardsSizeForDisplaySize(int $display_size)
Definition: Deck.php:157
__construct(array $cards, int $size)
Definition: Deck.php:49