From 939a6dc79c7786498e6f5d69b3bcc6f726362c50 Mon Sep 17 00:00:00 2001 From: Drew DeVault Date: Sat, 20 Jun 2015 11:01:07 -0400 Subject: [PATCH] Render snow variation of grass blocks This also increases the average rainfall everywhere so that fucking deserts are less common --- TrueCraft.API/Logic/BlockDescriptor.cs | 4 ++ .../Rendering/Blocks/GrassRenderer.cs | 50 ++++++++++++++++++- TrueCraft.Client/Rendering/ChunkRenderer.cs | 3 +- TrueCraft.Client/TrueCraft.Client.csproj | 1 + TrueCraft.Core/Logic/Blocks/SnowBlock.cs | 4 +- TrueCraft.Core/World/BiomeMap.cs | 2 +- 6 files changed, 59 insertions(+), 5 deletions(-) diff --git a/TrueCraft.API/Logic/BlockDescriptor.cs b/TrueCraft.API/Logic/BlockDescriptor.cs index 5d6db36..bac09a7 100644 --- a/TrueCraft.API/Logic/BlockDescriptor.cs +++ b/TrueCraft.API/Logic/BlockDescriptor.cs @@ -1,4 +1,5 @@ using System; +using TrueCraft.API.World; namespace TrueCraft.API.Logic { @@ -8,6 +9,9 @@ namespace TrueCraft.API.Logic public byte Metadata; public byte BlockLight; public byte SkyLight; + // Optional public Coordinates3D Coordinates; + // Optional + public IChunk Chunk; } } \ No newline at end of file diff --git a/TrueCraft.Client/Rendering/Blocks/GrassRenderer.cs b/TrueCraft.Client/Rendering/Blocks/GrassRenderer.cs index b4923e8..f16572d 100644 --- a/TrueCraft.Client/Rendering/Blocks/GrassRenderer.cs +++ b/TrueCraft.Client/Rendering/Blocks/GrassRenderer.cs @@ -3,6 +3,8 @@ using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework; using TrueCraft.Core.Logic.Blocks; using TrueCraft.API.Logic; +using TrueCraft.Core.World; +using TrueCraft.API; namespace TrueCraft.Client.Rendering.Blocks { @@ -13,11 +15,14 @@ namespace TrueCraft.Client.Rendering.Blocks BlockRenderer.RegisterRenderer(GrassBlock.BlockID, new GrassRenderer()); for (int i = 0; i < Texture.Length; i++) Texture[i] *= new Vector2(16f / 256f); + for (int i = 0; i < Texture.Length; i++) + SnowTexture[i] *= new Vector2(16f / 256f); } private static Vector2 TextureMap = new Vector2(0, 0); private static Vector2 EndsTexture = new Vector2(2, 0); private static Vector2 SideTexture = new Vector2(3, 0); + private static Vector2 SideTextureSnow = new Vector2(4, 4); private static Vector2[] Texture = { // Positive Z @@ -51,13 +56,54 @@ namespace TrueCraft.Client.Rendering.Blocks EndsTexture, EndsTexture + Vector2.UnitX, }; + private static Vector2[] SnowTexture = + { + // Positive Z + SideTextureSnow + Vector2.UnitX + Vector2.UnitY, + SideTextureSnow + Vector2.UnitY, + SideTextureSnow, + SideTextureSnow + Vector2.UnitX, + // Negative Z + SideTextureSnow + Vector2.UnitX + Vector2.UnitY, + SideTextureSnow + Vector2.UnitY, + SideTextureSnow, + SideTextureSnow + Vector2.UnitX, + // Positive X + SideTextureSnow + Vector2.UnitX + Vector2.UnitY, + SideTextureSnow + Vector2.UnitY, + SideTextureSnow, + SideTextureSnow + Vector2.UnitX, + // Negative X + SideTextureSnow + Vector2.UnitX + Vector2.UnitY, + SideTextureSnow + Vector2.UnitY, + SideTextureSnow, + SideTextureSnow + Vector2.UnitX, + // Positive Y + TextureMap + Vector2.UnitX + Vector2.UnitY, + TextureMap + Vector2.UnitY, + TextureMap, + TextureMap + Vector2.UnitX, + // Negative Y + EndsTexture + Vector2.UnitX + Vector2.UnitY, + EndsTexture + Vector2.UnitY, + EndsTexture, + EndsTexture + Vector2.UnitX, + }; public static readonly Color BiomeColor = new Color(105, 169, 63); - public override VertexPositionNormalColorTexture[] Render(BlockDescriptor descriptor, Vector3 offset, + public override VertexPositionNormalColorTexture[] Render(BlockDescriptor descriptor, Microsoft.Xna.Framework.Vector3 offset, Tuple textureMap, int indiciesOffset, out int[] indicies) { - var cube = CreateUniformCube(offset, Texture, indiciesOffset, out indicies, Color.White); + var texture = Texture; + if (descriptor.Coordinates.Y < World.Height) + { + if (descriptor.Chunk.GetBlockID(descriptor.Coordinates + Coordinates3D.Up) == SnowfallBlock.BlockID) + { + texture = SnowTexture; + } + } + var cube = CreateUniformCube(offset, texture, indiciesOffset, out indicies, Color.White); // Apply biome colors to top of cube for (int i = (int)(CubeFace.PositiveY) * 4; i < (int)(CubeFace.PositiveY) * 4 + 4; i++) { diff --git a/TrueCraft.Client/Rendering/ChunkRenderer.cs b/TrueCraft.Client/Rendering/ChunkRenderer.cs index f6174ca..a59352c 100644 --- a/TrueCraft.Client/Rendering/ChunkRenderer.cs +++ b/TrueCraft.Client/Rendering/ChunkRenderer.cs @@ -131,7 +131,8 @@ namespace TrueCraft.Client.Rendering Metadata = chunk.GetMetadata(coords), BlockLight = chunk.GetBlockLight(coords), SkyLight = chunk.GetSkyLight(coords), - Coordinates = coords + Coordinates = coords, + Chunk = chunk.Chunk }; var provider = BlockRepository.GetBlockProvider(descriptor.ID); if (provider.RenderOpaque) diff --git a/TrueCraft.Client/TrueCraft.Client.csproj b/TrueCraft.Client/TrueCraft.Client.csproj index da9b770..cb19bac 100644 --- a/TrueCraft.Client/TrueCraft.Client.csproj +++ b/TrueCraft.Client/TrueCraft.Client.csproj @@ -101,6 +101,7 @@ + diff --git a/TrueCraft.Core/Logic/Blocks/SnowBlock.cs b/TrueCraft.Core/Logic/Blocks/SnowBlock.cs index 52ac989..f82b7fd 100644 --- a/TrueCraft.Core/Logic/Blocks/SnowBlock.cs +++ b/TrueCraft.Core/Logic/Blocks/SnowBlock.cs @@ -71,6 +71,8 @@ namespace TrueCraft.Core.Logic.Blocks public override string DisplayName { get { return "Snow"; } } + public override TrueCraft.API.BoundingBox? BoundingBox { get { return null; } } + public override Tuple GetTextureMap(byte metadata) { return new Tuple(2, 4); @@ -81,4 +83,4 @@ namespace TrueCraft.Core.Logic.Blocks return new[] { new ItemStack(SnowballItem.ItemID) }; } } -} \ No newline at end of file +} diff --git a/TrueCraft.Core/World/BiomeMap.cs b/TrueCraft.Core/World/BiomeMap.cs index 7ebebe2..4894f54 100644 --- a/TrueCraft.Core/World/BiomeMap.cs +++ b/TrueCraft.Core/World/BiomeMap.cs @@ -24,7 +24,7 @@ namespace TrueCraft.Core.World TempNoise.Octaves = 2; TempNoise.Lacunarity = 1.3; RainNoise.Frequency = 0.03; - RainNoise.Octaves = 2; + RainNoise.Octaves = 3; RainNoise.Amplitude = 5; RainNoise.Lacunarity = 1.7; TempNoise.Seed = seed;