/// <summary> /// Инициализация поля /// </summary> /// <param name="zoom">Зум поля</param> /// <param name="progress">Прогресс инициализации</param> /// <param name="input">Управление игроком</param> /// <param name="debug">Отладка</param> public void Init(ZoomControl zoom, ProgressBar progress, IPlayerInput input, IGameDebug debug) { // Подпишемся на изменения зума _zoom = zoom; _input = input; // Инициализируем случайные значения положения игрока на поле и его рейтинг _currentCellPosition = SettingsAccess.GetRandomFieldPosition(); _currentCellItemPosition = SettingsAccess.GetRandomCellPosition(_currentCellPosition); _playerRating = NoiseTool.GetRandomPlayerRating(); // Инициализируем коллекцию ячеек _cells = new CellCollection(_playerRating); // Инициализируем механизм поиска первых <see cref="SettingsAccess.MaxAdvancedVisiblePlanet"/> планет, ближайших по рейтингу к рейтингу игрока _sortedCellsVisitor = gameObject.AddComponent <SortedCellsVisitor>().Init(_cells, _playerRating, debug); _sortedCellsVisitor.OnProcessEnd += OnSearchTopRatingsEnd; string generationString; if (SystemInfo.supportsComputeShaders) { // Если поддерживаются Computed Shader _generator = gameObject.AddComponent <ComputedShaderNoiseGenerator>() .SetDebug(debug); generationString = "GENERATE COMPUTED SHADER"; } else { #if (UNITY_ANDROID) // По идее, должен поддерживаться большинством платформ, добавлять директивы препроцессора по мере тестирования _generator = gameObject.AddComponent <CustomRenderTextureNoiseGenerator>() .SetDebug(debug); generationString = "GENERATE RENDER TEXTURE"; #else // Для всех остальных платформ. _generator = gameObject.AddComponent <CpuNoiseGenerator>() .SetDebug(debug); generationString = "GENERATE CPU"; #endif } _generator.OnProcessEnd += OnGenerationEnd; // Добавим первое задание на генерацию всего поля _generator.AppendRect(SettingsAccess.GetFieldRectPx(_currentCellPosition)); // Отобразим прогресс progress.Begin(() => _generator.GetProgress(), generationString, OnEndInit); }
void Start() { mViewers = GameObject.FindGameObjectsWithTag(GlobalDefines.PLAYER_TAG); CreateMaterial(); CreateWarFogRTT(); CreateCastProjector(); CreateProjectorMatrix(); NoiseTool.CreatePerlinNoise(ref mPerlinNoise, WAR_FOG_RTT_SIZE, WAR_FOG_RTT_SIZE, 10, Vector2.zero); Matrix4x4 matVP = GL.GetGPUProjectionMatrix(mProjMatrix, true) * mViewMatrix; mWarFogProjector.material.SetTexture("_FogOfWarTex", mWarFogRTT); mWarFogProjector.material.SetMatrix("_MatCastViewProj", matVP); mWarFogMaterial.SetTexture("_NoiseTex", mPerlinNoise); mWarFogMaterial.SetFloat("_AspectRatio", mAspectRatio); mWarFogMaterial.SetFloat("_FogDensity", fogDensity); }
/// <summary> /// Получить рейтинг /// </summary> /// <param name="index">Индекс рейтинга в коллекции</param> /// <returns>Рейтинг планеты от 1 до 10001 (0 если она отсутствует)</returns> public ushort GetRating(int id) { return(NoiseTool.GetRandomPlanetRating(_seed, _pos, id)); }