Пример #1
0
        /// <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);
        }
Пример #2
0
    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);
    }
Пример #3
0
 /// <summary>
 /// Получить рейтинг
 /// </summary>
 /// <param name="index">Индекс рейтинга в коллекции</param>
 /// <returns>Рейтинг планеты от 1 до 10001 (0 если она отсутствует)</returns>
 public ushort GetRating(int id)
 {
     return(NoiseTool.GetRandomPlanetRating(_seed, _pos, id));
 }