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); }
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); } }
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); } }
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); }
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); }
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); }
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); }