/** * @param array $data * * @return static */ public static function fromArray(array $data) { $ships = []; foreach ($data['ships'] as $ship) { $ships[] = Ship::fromArray($ship); } $elements = []; foreach ($data['fields'] as $field) { $field = Field::fromArray($field); /** @var Ship $ship */ foreach ($ships as $ship) { if ($ship->on($field->coords())) { $field->place($ship); } } $elements[] = $field; } return new static($elements, $ships); }