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.
///