示例#1
0
        public Block(string name, Vector3[] faces, ColliderType colliderType,
                     Vector3 colliderMin, Vector3 colliderMax, RenderType renderType = RenderType.Block,
                     ShaderType shaderType = ShaderType.Block, BiomedType biomed = BiomedType.None,
                     Block grassOverlay    = null, float renderParam = 0)
        {
            Name         = name;
            ColliderType = colliderType;
            ColliderMin  = colliderMin;
            ColliderMax  = colliderMax;
            RenderType   = renderType;
            ShaderType   = shaderType;
            Biomed       = biomed;
            GrassOverlay = grassOverlay;
            RenderParam  = renderParam;

            if (faces.Length == 1)
            {
                Faces = new Vector3[] { faces[0], faces[0], faces[0],
                                        faces[0], faces[0], faces[0] };
            }
            else if (faces.Length == 3)
            {
                Faces = new Vector3[] { faces[0], faces[0], faces[1],
                                        faces[1], faces[2], faces[2] };
            }
            else
            {
                Faces = faces;
            }

            ClassicBlock = shaderType == ShaderType.Block &&
                           (renderType == RenderType.Block || renderType == RenderType.Grass);
        }
示例#2
0
        IEnumerator ConnectAsynchronously()
        {
            string serverUrl = FixURL(ServerField.text);

            GameSession.Login     = LoginField.text;
            GameSession.ServerUrl = serverUrl;
            TextureAtlas.Init();

            LoadingScreen.SetActive(true);

            // Download and parse main json
            ResourcesInfo resourcesInfo;

            using (var request = UnityWebRequest.Get("http://" + serverUrl + "/main.json")) {
                request.SendWebRequest();
                while (!request.isDone)
                {
                    Slider.value = request.downloadProgress;
                    yield return(null);
                }
                if (request.isHttpError || request.isNetworkError)
                {
                    LoadingScreen.SetActive(false);
                    yield break;
                }
                resourcesInfo = JsonUtility.FromJson <ResourcesInfo>('{' + request.downloadHandler.text + '}');
                resourcesInfo.resourcesUrl = FixURL(resourcesInfo.resourcesUrl);
            }

            // Download and parse remapper json
            RemapperInfo remapperInfo;

            using (var request = resourcesInfo.DownloadText(resourcesInfo.remapper)) {
                request.SendWebRequest();
                while (!request.isDone)
                {
                    Slider.value = request.downloadProgress;
                    yield return(null);
                }
                if (request.isHttpError || request.isNetworkError)
                {
                    LoadingScreen.SetActive(false);
                    yield break;
                }
                remapperInfo = JsonUtility.FromJson <RemapperInfo>('{' + request.downloadHandler.text + '}');
                GameSession.SetRemapper(remapperInfo.GetFlattenBlocks());
            }

            // Download and apply foliage colormap
            using (var request = resourcesInfo.DownloadTexture(resourcesInfo.foliageColormap)) {
                request.SendWebRequest();
                while (!request.isDone)
                {
                    Slider.value = request.downloadProgress;
                    yield return(null);
                }
                if (request.isHttpError || request.isNetworkError)
                {
                    LoadingScreen.SetActive(false);
                    yield break;
                }
                GameSession.FoliageColormap.Load(DownloadHandlerTexture.GetContent(request));
            }

            // Download and apply grass colormap
            using (var request = resourcesInfo.DownloadTexture(resourcesInfo.grassColormap)) {
                request.SendWebRequest();
                while (!request.isDone)
                {
                    Slider.value = request.downloadProgress;
                    yield return(null);
                }
                if (request.isHttpError || request.isNetworkError)
                {
                    LoadingScreen.SetActive(false);
                    yield break;
                }
                GameSession.GrassColormap.Load(DownloadHandlerTexture.GetContent(request));
            }

            // Download and parse blocks json
            BlocksInfo blocksInfo;

            using (var request = resourcesInfo.DownloadText(resourcesInfo.blocks)) {
                request.SendWebRequest();
                while (!request.isDone)
                {
                    Slider.value = request.downloadProgress;
                    yield return(null);
                }
                if (request.isHttpError || request.isNetworkError)
                {
                    LoadingScreen.SetActive(false);
                    yield break;
                }
                blocksInfo = JsonUtility.FromJson <BlocksInfo>('{' + request.downloadHandler.text + '}');
            }

            // Load all blocks
            GameSession.Palette = new Block[blocksInfo.list.Length + 1];
            for (int i = 1; i < blocksInfo.list.Length + 1; i++)
            {
                TempBlock block = blocksInfo.list[i - 1];
                Vector3[] faces = new Vector3[block.textures.Length];
                for (int j = 0; j < faces.Length; j++)
                {
                    string textureName = block.textures[j];
                    using (var request = resourcesInfo.DownloadTexture(textureName)) {
                        request.SendWebRequest();
                        while (!request.isDone)
                        {
                            Slider.value = request.downloadProgress;
                            yield return(null);
                        }
                        if (request.isHttpError || request.isNetworkError)
                        {
                            LoadingScreen.SetActive(false);
                            yield break;
                        }
                        faces[j] = TextureAtlas.AddTexture(textureName, DownloadHandlerTexture.GetContent(request), null);
                    }
                }

                RenderType renderType = block.renderType == null
                                        ? RenderType.Block
                                        : (RenderType)Enum.Parse(typeof(RenderType), block.renderType);

                ShaderType shaderType = block.shaderType == null
                                        ? ShaderType.Block
                                        : (ShaderType)Enum.Parse(typeof(ShaderType), block.shaderType);

                BiomedType biomed = block.biomed == null
                                        ? BiomedType.None
                                        : (BiomedType)Enum.Parse(typeof(BiomedType), block.biomed);

                ColliderType colliderType = block.colliderType == null
                                        ? ColliderType.Block
                                        : (ColliderType)Enum.Parse(typeof(ColliderType), block.colliderType);

                Vector3 colliderMin = new Vector3(block.colliderMinX,
                                                  block.colliderMinY, block.colliderMinZ);

                Vector3 colliderMax = new Vector3(block.colliderMaxX,
                                                  block.colliderMaxY, block.colliderMaxZ);

                Block grassOverlay = null;
                if (block.grassOverlay != null)
                {
                    using (var request = resourcesInfo.DownloadTexture(block.grassOverlay)) {
                        request.SendWebRequest();
                        while (!request.isDone)
                        {
                            Slider.value = request.downloadProgress;
                            yield return(null);
                        }
                        if (request.isHttpError || request.isNetworkError)
                        {
                            LoadingScreen.SetActive(false);
                            yield break;
                        }
                        grassOverlay = new Block("", new Vector3[] { TextureAtlas.AddTexture(
                                                                         block.grassOverlay, DownloadHandlerTexture.GetContent(request), null) }, ColliderType.None,
                                                 colliderMin, colliderMax);
                    }
                }

                GameSession.Palette[i] = new Block(block.name, faces, colliderType,
                                                   colliderMin, colliderMax, renderType, shaderType, biomed, grassOverlay,
                                                   block.renderParam);
            }

            AsyncOperation operation = SceneManager.LoadSceneAsync("GameScene");

            while (!operation.isDone)
            {
                float progress = Mathf.Clamp01(operation.progress / 0.9f);

                Slider.value = progress;

                yield return(null);
            }
        }
示例#3
0
        private void SetLight(int x, int y, int z, int neighborsIndex,
                              BiomedType biomed, float brightness, float mod, bool ao)
        {
            Color32 biomeColor;

            if (biomed == BiomedType.None)
            {
                biomeColor = new Color32(255, 255, 255, 255);
            }
            else
            {
                int biome = _world.GetBiome(x, y, z);

                switch (biomed)
                {
                case BiomedType.Foliage:
                    biomeColor = GameSession.FoliageColormap.GetColor(biome);
                    break;

                case BiomedType.Birch:
                    biomeColor = GameSession.BirchColormap.GetColor(biome);
                    break;

                case BiomedType.Spruce:
                    biomeColor = GameSession.SpruceColormap.GetColor(biome);
                    break;

                default:
                    biomeColor = GameSession.GrassColormap.GetColor(biome);
                    break;
                }
            }
            biomeColor.a = (byte)(brightness * 255);
            BiomeColors.Add(biomeColor);
            BiomeColors.Add(biomeColor);
            BiomeColors.Add(biomeColor);
            BiomeColors.Add(biomeColor);

            Vector2 light;
            float   blockLight;
            float   skyLight;

            _world.GetLight(x, y, z, out blockLight, out skyLight);
            if (ao)
            {
                foreach (Vector3Int vec in _cornerNeighbors[neighborsIndex])
                {
                    float blockLight1;
                    float skyLight1;
                    _world.GetLight(x + vec.x, y + vec.y, z + vec.z, out blockLight1, out skyLight1);

                    float blockLight2;
                    float skyLight2;
                    if (vec.x == 0)
                    {
                        _world.GetLight(x, y + vec.y, z, out blockLight2, out skyLight2);
                    }
                    else
                    {
                        _world.GetLight(x + vec.x, y, z, out blockLight2, out skyLight2);
                    }

                    float blockLight3;
                    float skyLight3;
                    if (vec.z == 0)
                    {
                        _world.GetLight(x, y + vec.y, z, out blockLight3, out skyLight3);
                    }
                    else
                    {
                        _world.GetLight(x, y, z + vec.z, out blockLight3, out skyLight3);
                    }

                    blockLight1 = (blockLight1 + blockLight2 + blockLight3 + blockLight) / 4.0f;
                    skyLight1   = (skyLight1 + skyLight2 + skyLight3 + skyLight) / 4.0f;

                    blockLight1 = (15 - blockLight1) * mod;
                    skyLight1   = (15 - skyLight1) * mod;
                    light       = new Vector2(skyLight1, blockLight1);

                    Lights.Add(light);
                }
            }
            else
            {
                blockLight = (15 - blockLight) * mod;
                skyLight   = (15 - skyLight) * mod;
                light      = new Vector2(skyLight, blockLight);
                Lights.Add(light);
                Lights.Add(light);
                Lights.Add(light);
                Lights.Add(light);
            }
        }
示例#4
0
 public void SetLightNorth(int x, int y, int z, BiomedType biomed, bool ao = true)
 {
     SetLight(x, y, z, 5, biomed, 0.71f, 0.038f, ao);
 }
示例#5
0
 public void SetLightDown(int x, int y, int z, BiomedType biomed, bool ao = true)
 {
     SetLight(x, y, z, 3, biomed, 0.50f, 0.0275f, ao);
 }
示例#6
0
 public void SetLightUp(int x, int y, int z, BiomedType biomed, bool ao = true)
 {
     SetLight(x, y, z, 2, biomed, 0.9f, 0.049f, ao);
 }
示例#7
0
 public void SetLightEast(int x, int y, int z, BiomedType biomed, bool ao = true)
 {
     SetLight(x, y, z, 1, biomed, 0.56f, 0.0305f, ao);
 }