81 lines
2.7 KiB
C#
81 lines
2.7 KiB
C#
using System;
|
|
using UnityEngine;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using game;
|
|
|
|
namespace RND
|
|
{
|
|
|
|
public class LevelSettings
|
|
{
|
|
public IReadOnlyList<uint> DefaultSequence => _defaultSequence;
|
|
public IReadOnlyList<EnumLevelType> DefaultPattern => _defaultPattern;
|
|
public IReadOnlyList<ConfLevelsPattern> Patterns => _patterns;
|
|
public IList<LevelData> GetAll => _levels;
|
|
public int TutorialLenght { get; } = 0;
|
|
public bool HasTutorial => TutorialLenght > 0;
|
|
|
|
private readonly List<uint> _defaultSequence = default;
|
|
private readonly List<EnumLevelType> _defaultPattern = default;
|
|
private readonly List<ConfLevelsPattern> _patterns = default;
|
|
private readonly List<LevelData> _levels = default;
|
|
|
|
public LevelSettings(ConfGameLevels config)
|
|
{
|
|
_defaultSequence = config.original;
|
|
_defaultPattern = config.originalPattern.sequence;
|
|
_patterns = config.customPatterns;
|
|
_levels = new List<LevelData>(config.levels.Count);
|
|
|
|
for (int i = 0; i < config.levels.Count; i++)
|
|
_levels.Add(new LevelData(config.levels[i]));
|
|
|
|
IList<uint> tutorial = GetIDsBy(l => l.Type == EnumLevelType.TUTORIAL);
|
|
TutorialLenght = tutorial.Count;
|
|
|
|
if (_defaultSequence.ContainsAnyOf(tutorial))
|
|
throw new InvalidOperationException("Default sequence has tutorial level.");
|
|
|
|
Log.Debug($"LevelSettings.Constructor: Uploaded successful {_levels.Count}");
|
|
}
|
|
|
|
public List<EnumLevelType> GetRandomPattern()
|
|
{
|
|
return _patterns.RandomValue().sequence;
|
|
}
|
|
|
|
public IList<LevelData> GetBy([JetBrains.Annotations.NotNull] Predicate<LevelData> conditional)
|
|
{
|
|
if (conditional == null)
|
|
throw new ArgumentNullException(nameof(conditional));
|
|
|
|
return
|
|
(from item in _levels
|
|
where conditional.Invoke(item)
|
|
select item).ToList();
|
|
}
|
|
|
|
public IList<uint> GetIDsBy([JetBrains.Annotations.NotNull] Predicate<LevelData> conditional)
|
|
{
|
|
if (conditional == null)
|
|
throw new ArgumentNullException(nameof(conditional));
|
|
|
|
return
|
|
(from item in _levels
|
|
where conditional.Invoke(item)
|
|
select item.ID).ToList();
|
|
}
|
|
|
|
public static GameObject GetPrefabByID(uint id)
|
|
{
|
|
return Assets.Load<GameObject>(GetPrefabPath(id));
|
|
}
|
|
|
|
public static string GetPrefabPath(uint id)
|
|
{
|
|
return $"Levels/Level{id}";
|
|
}
|
|
}
|
|
}
|