/// <summary> /// Przeprowadza walidację konfigu dla spinnera. Rzuci wyjątkiem, jeśli spinner nie będzie miał prawa działać na tych danych. /// </summary> /// <param name="lines">Zestaw wszystkich kombinacji (możliwych linii)</param> /// <param name="spin">O ile każdy walec miałby się przesówać</param> /// <param name="rnoConfig">Konfiguracja początkowego rno dla gry</param> private void ValidateConfig(int[][] lines, RnoConfig rnoConfig, int winningLines) { // Wartość początkowa nie może być większa niż liczba linii if (lines.Length < rnoConfig.MaxValue) { throw new ArgumentOutOfRangeException(nameof(rnoConfig), "Invalid initial rno value"); } if (lines.Length < winningLines) { throw new ArgumentOutOfRangeException(nameof(winningLines), "Too much winning lines for this configuration."); } }
/// <summary> /// C-tor konfiguratora dla spinnera. Przeprowdza walidację, jeśli dane będą nieodpowiednie to wysypie się z błędem. /// </summary> /// <param name="reels">Walce</param> /// <param name="rnoConfig">Konfig początkowego rno</param> /// <param name="payLines">Liczba linii wygrywających. Domyślnie brana z <see cref="Defs.PayLines"/></param> public SpinnerConfig(Reel[] reels, RnoConfig rnoConfig, int payLines) { Ensure.ParamNotNullOrEmpty(reels, nameof(reels)); Ensure.ParamNotNull(rnoConfig, nameof(rnoConfig)); this.Reels = reels; this.Spin = this.GetSpins(reels); // TODO jeszcze premyśleć. Ten composer powinien być w engine, a nie w configach ResultsComposer results = new ResultsComposer(reels); this.ValidateConfig(results.Lines, rnoConfig, payLines); this.Lines = results.Lines; this.Rno = rnoConfig.Value; this.PayLines = payLines; }