/// <summary> /// Конструктор задания /// </summary> /// <param name="rect">Прямоугольник для генерации</param> /// <param name="sliceWidth">Ширина куска</param> /// <param name="sliceHeight">Высота куска</param> /// <param name="textureIndex">Индекс текстуры (может быть нужен для быстрого выбора текстуры из списка)</param> /// <param name="currentSliceData">Текущее состояние задания</param> public GenerateRectInfo(RectInt rect, int sliceWidth, int sliceHeight, int textureIndex, ISliceData currentSliceData) { Rect = rect; SliceWidth = sliceWidth; SliceHeight = sliceHeight; SliceLenght = SliceWidth * SliceHeight; TextureIndex = textureIndex; SlicesSizeX = rect.width / SliceWidth; SlicesSizeY = rect.height / SliceHeight; CellSizeX = SliceWidth / SettingsAccess.CellPxSize; CellSizeY = SliceHeight / SettingsAccess.CellPxSize; CurrentSliceData = currentSliceData; }
/// <summary> /// Заполняет рейтинги данными из задания на генерацию /// </summary> /// <param name="data">Данные</param> /// <param name="index">Текущий индекс</param> /// <param name="playerRating">Рейтинг игрока</param> /// <returns>Индекс, увеличенный на величину прочитанных данных</returns> public int FillRatings(ISliceData data, int index, ushort playerRating) { for (ushort i = 0; i < SettingsAccess.CellPxLenght; i++) { var rating = data.GetRating(i + index); if (_ratings != null) { _ratings[i] = rating; } if (rating > 0) { var ratingDistance = (ushort)Mathf.Abs(rating - playerRating); if (SortedCellItems.IsBelowThanMaxRatingDistance(ratingDistance)) { SortedCellItems.AppendCellItemFast(new SortedCellItem(Pos, i, rating, ratingDistance)); } } } return(index + SettingsAccess.CellPxLenght); }