diff --git a/OctoAwesome/OctoAwesome.Basics/Assets/Definitions/Blocks/cotton_red_0.png b/OctoAwesome/OctoAwesome.Basics/Assets/Definitions/Blocks/cotton_red_0.png new file mode 100644 index 00000000..c8bf3fcc Binary files /dev/null and b/OctoAwesome/OctoAwesome.Basics/Assets/Definitions/Blocks/cotton_red_0.png differ diff --git a/OctoAwesome/OctoAwesome.Basics/Assets/Definitions/Blocks/cotton_red_1.png b/OctoAwesome/OctoAwesome.Basics/Assets/Definitions/Blocks/cotton_red_1.png new file mode 100644 index 00000000..247b6eb4 Binary files /dev/null and b/OctoAwesome/OctoAwesome.Basics/Assets/Definitions/Blocks/cotton_red_1.png differ diff --git a/OctoAwesome/OctoAwesome.Basics/Assets/Definitions/Blocks/cotton_red_10.png b/OctoAwesome/OctoAwesome.Basics/Assets/Definitions/Blocks/cotton_red_10.png new file mode 100644 index 00000000..4dc0b788 Binary files /dev/null and b/OctoAwesome/OctoAwesome.Basics/Assets/Definitions/Blocks/cotton_red_10.png differ diff --git a/OctoAwesome/OctoAwesome.Basics/Assets/Definitions/Blocks/cotton_red_11.png b/OctoAwesome/OctoAwesome.Basics/Assets/Definitions/Blocks/cotton_red_11.png new file mode 100644 index 00000000..c7df6857 Binary files /dev/null and b/OctoAwesome/OctoAwesome.Basics/Assets/Definitions/Blocks/cotton_red_11.png differ diff --git a/OctoAwesome/OctoAwesome.Basics/Assets/Definitions/Blocks/cotton_red_12.png b/OctoAwesome/OctoAwesome.Basics/Assets/Definitions/Blocks/cotton_red_12.png new file mode 100644 index 00000000..cbb3952f Binary files /dev/null and b/OctoAwesome/OctoAwesome.Basics/Assets/Definitions/Blocks/cotton_red_12.png differ diff --git a/OctoAwesome/OctoAwesome.Basics/Assets/Definitions/Blocks/cotton_red_13.png b/OctoAwesome/OctoAwesome.Basics/Assets/Definitions/Blocks/cotton_red_13.png new file mode 100644 index 00000000..2b1d0940 Binary files /dev/null and b/OctoAwesome/OctoAwesome.Basics/Assets/Definitions/Blocks/cotton_red_13.png differ diff --git a/OctoAwesome/OctoAwesome.Basics/Assets/Definitions/Blocks/cotton_red_14.png b/OctoAwesome/OctoAwesome.Basics/Assets/Definitions/Blocks/cotton_red_14.png new file mode 100644 index 00000000..98140cbf Binary files /dev/null and b/OctoAwesome/OctoAwesome.Basics/Assets/Definitions/Blocks/cotton_red_14.png differ diff --git a/OctoAwesome/OctoAwesome.Basics/Assets/Definitions/Blocks/cotton_red_15.png b/OctoAwesome/OctoAwesome.Basics/Assets/Definitions/Blocks/cotton_red_15.png new file mode 100644 index 00000000..d69d705e Binary files /dev/null and b/OctoAwesome/OctoAwesome.Basics/Assets/Definitions/Blocks/cotton_red_15.png differ diff --git a/OctoAwesome/OctoAwesome.Basics/Assets/Definitions/Blocks/cotton_red_2.png b/OctoAwesome/OctoAwesome.Basics/Assets/Definitions/Blocks/cotton_red_2.png new file mode 100644 index 00000000..ed79fb19 Binary files /dev/null and b/OctoAwesome/OctoAwesome.Basics/Assets/Definitions/Blocks/cotton_red_2.png differ diff --git a/OctoAwesome/OctoAwesome.Basics/Assets/Definitions/Blocks/cotton_red_3.png b/OctoAwesome/OctoAwesome.Basics/Assets/Definitions/Blocks/cotton_red_3.png new file mode 100644 index 00000000..12aafa08 Binary files /dev/null and b/OctoAwesome/OctoAwesome.Basics/Assets/Definitions/Blocks/cotton_red_3.png differ diff --git a/OctoAwesome/OctoAwesome.Basics/Assets/Definitions/Blocks/cotton_red_4.png b/OctoAwesome/OctoAwesome.Basics/Assets/Definitions/Blocks/cotton_red_4.png new file mode 100644 index 00000000..951a6bf0 Binary files /dev/null and b/OctoAwesome/OctoAwesome.Basics/Assets/Definitions/Blocks/cotton_red_4.png differ diff --git a/OctoAwesome/OctoAwesome.Basics/Assets/Definitions/Blocks/cotton_red_5.png b/OctoAwesome/OctoAwesome.Basics/Assets/Definitions/Blocks/cotton_red_5.png new file mode 100644 index 00000000..458db790 Binary files /dev/null and b/OctoAwesome/OctoAwesome.Basics/Assets/Definitions/Blocks/cotton_red_5.png differ diff --git a/OctoAwesome/OctoAwesome.Basics/Assets/Definitions/Blocks/cotton_red_6.png b/OctoAwesome/OctoAwesome.Basics/Assets/Definitions/Blocks/cotton_red_6.png new file mode 100644 index 00000000..1d4a1b7f Binary files /dev/null and b/OctoAwesome/OctoAwesome.Basics/Assets/Definitions/Blocks/cotton_red_6.png differ diff --git a/OctoAwesome/OctoAwesome.Basics/Assets/Definitions/Blocks/cotton_red_7.png b/OctoAwesome/OctoAwesome.Basics/Assets/Definitions/Blocks/cotton_red_7.png new file mode 100644 index 00000000..1dbac8ec Binary files /dev/null and b/OctoAwesome/OctoAwesome.Basics/Assets/Definitions/Blocks/cotton_red_7.png differ diff --git a/OctoAwesome/OctoAwesome.Basics/Assets/Definitions/Blocks/cotton_red_8.png b/OctoAwesome/OctoAwesome.Basics/Assets/Definitions/Blocks/cotton_red_8.png new file mode 100644 index 00000000..aef3a40c Binary files /dev/null and b/OctoAwesome/OctoAwesome.Basics/Assets/Definitions/Blocks/cotton_red_8.png differ diff --git a/OctoAwesome/OctoAwesome.Basics/Assets/Definitions/Blocks/cotton_red_9.png b/OctoAwesome/OctoAwesome.Basics/Assets/Definitions/Blocks/cotton_red_9.png new file mode 100644 index 00000000..a4b47763 Binary files /dev/null and b/OctoAwesome/OctoAwesome.Basics/Assets/Definitions/Blocks/cotton_red_9.png differ diff --git a/OctoAwesome/OctoAwesome.Basics/Definitions/Blocks/RedCottonBlockDefinition.cs b/OctoAwesome/OctoAwesome.Basics/Definitions/Blocks/RedCottonBlockDefinition.cs index 8a4598ce..11546923 100644 --- a/OctoAwesome/OctoAwesome.Basics/Definitions/Blocks/RedCottonBlockDefinition.cs +++ b/OctoAwesome/OctoAwesome.Basics/Definitions/Blocks/RedCottonBlockDefinition.cs @@ -1,5 +1,8 @@ -using OctoAwesome.Basics.Definitions.Materials; +using System; +using OctoAwesome.Basics.Definitions.Materials; +using OctoAwesome.Chunking; using OctoAwesome.Definitions; +using OctoAwesome.Location; namespace OctoAwesome.Basics.Definitions.Blocks { @@ -15,7 +18,25 @@ public sealed class RedCottonBlockDefinition : BlockDefinition public override string Icon => "cotton_red"; /// - public override string[] Textures { get; } = { "cotton_red" }; + public override string[] Textures => + new[]{ + "cotton_red_0", + "cotton_red_1", + "cotton_red_2", + "cotton_red_3", + "cotton_red_4", + "cotton_red_5", + "cotton_red_6", + "cotton_red_7", + "cotton_red_8", + "cotton_red_9", + "cotton_red_10", + "cotton_red_11", + "cotton_red_12", + "cotton_red_13", + "cotton_red_14", + "cotton_red_15", + }; /// public override IMaterialDefinition Material { get; } @@ -28,5 +49,46 @@ public RedCottonBlockDefinition(CottonMaterialDefinition material) { Material = material; } + + /// + public override int GetTextureIndex(Wall wall, ILocalChunkCache manager, int x, int y, int z) + { + int fullBlockTextureIndex = 15; + var centerBlock = new Index3(x, y, z); + var baseBlockIndex = manager.GetBlock(centerBlock); + + var (firstAxis, secondAxis) = wall switch + { + Wall.Top => (Index3.UnitX, Index3.UnitY), + Wall.Bottom => (-Index3.UnitX, Index3.UnitY), + Wall.Left => (Index3.UnitY, -Index3.UnitZ), + Wall.Right => (-Index3.UnitY, -Index3.UnitZ), + Wall.Front => (Index3.UnitX, -Index3.UnitZ), + Wall.Back => (-Index3.UnitX, -Index3.UnitZ), + _ => throw new ArgumentOutOfRangeException(nameof(wall), wall, null) + }; + + fullBlockTextureIndex = RemoveEdgesOnAxis(manager, centerBlock, firstAxis, 0, baseBlockIndex, fullBlockTextureIndex); + fullBlockTextureIndex = RemoveEdgesOnAxis(manager, centerBlock, secondAxis, 1, baseBlockIndex, fullBlockTextureIndex); + + return fullBlockTextureIndex; + } + + private static int RemoveEdgesOnAxis(ILocalChunkCache manager, Index3 centerBlock, Index3 axis, int sideOffset, ushort baseBlockIndex, + int fullBlockTextureIndex) + { + for (int i = -1; i <= 1; i+=2) + { + var otherIndex = manager.GetBlock(centerBlock + axis * i); + + if (otherIndex == baseBlockIndex) + { + var bitOffset = (i + 1) + sideOffset; + fullBlockTextureIndex &= ~(1 << bitOffset); + } + } + + return fullBlockTextureIndex; + } } } diff --git a/OctoAwesome/OctoAwesome/Location/Index3.cs b/OctoAwesome/OctoAwesome/Location/Index3.cs index f912f037..37396f9f 100644 --- a/OctoAwesome/OctoAwesome/Location/Index3.cs +++ b/OctoAwesome/OctoAwesome/Location/Index3.cs @@ -280,6 +280,16 @@ public double Length() public int LengthSquared() => X * X + Y * Y + Z * Z; + /// + /// Calculates the componentwise factorization with -1. + /// + /// The calculated factorization with -1. + /// The componentwise factorized result. + public static Index3 operator -(Index3 val) + { + return new Index3(-val.X, -val.Y, -val.Z); + } + /// /// Calculates the sum of two componentwise. ///