diff --git a/OctoAwesome/OctoAwesome.Basics/Definitions/Blocks/BirchWoodBlockDefinition.cs b/OctoAwesome/OctoAwesome.Basics/Definitions/Blocks/BirchWoodBlockDefinition.cs index 49da20f0..71450244 100644 --- a/OctoAwesome/OctoAwesome.Basics/Definitions/Blocks/BirchWoodBlockDefinition.cs +++ b/OctoAwesome/OctoAwesome.Basics/Definitions/Blocks/BirchWoodBlockDefinition.cs @@ -9,45 +9,31 @@ namespace OctoAwesome.Basics.Definitions.Blocks { public sealed class BirchWoodBlockDefinition : BlockDefinition { - public override string Name - { - get { return Languages.OctoBasics.BirchWood; } - } + public override string Name => Languages.OctoBasics.BirchWood; - public override string Icon - { - get { return "birch_wood_top"; } - } + public override string Icon => "birch_wood_top"; - public override bool HasMetaData { get { return true; } } + public override bool HasMetaData => true; - public override string[] Textures - { - get - { - return new[] { + public override string[] Textures => new[] { "birch_wood_top", "birch_wood_side" }; - } - } public override PhysicalProperties GetProperties(ILocalChunkCache manager, int x, int y, int z) - { - return new PhysicalProperties() + => new PhysicalProperties() { Density = 0.87f, FractureToughness = 0.3f, Granularity = 0.9f, Hardness = 0.1f }; - } public override void Hit(IBlockDefinition block, PhysicalProperties itemProperties) { throw new NotImplementedException(); } - public override int GetTextureIndex (Wall wall, ILocalChunkCache manager, + public override int GetTextureIndex(Wall wall, ILocalChunkCache manager, int x, int y, int z) { OrientationFlags orientation = (OrientationFlags)manager.GetBlockMeta(x, y, z); @@ -113,111 +99,43 @@ public override void Hit(IBlockDefinition block, PhysicalProperties itemProperti return -1; } - public override int GetTopTextureRotation(ILocalChunkCache manager, int x, int y, int z) - { - OrientationFlags orientation = (OrientationFlags)manager.GetBlockMeta(x, y, z); - - switch (orientation) - { - case OrientationFlags.SideWest: - case OrientationFlags.SideEast: - return 1; - case OrientationFlags.SideSouth: - case OrientationFlags.SideNorth: - case OrientationFlags.SideBottom: - case OrientationFlags.SideTop: - default: - return 0; - } - } - - public override int GetBottomTextureRotation(ILocalChunkCache manager, int x, int y, int z) - { - OrientationFlags orientation = (OrientationFlags)manager.GetBlockMeta(x, y, z); - - switch (orientation) - { - case OrientationFlags.SideWest: - case OrientationFlags.SideEast: - return 1; - case OrientationFlags.SideSouth: - case OrientationFlags.SideNorth: - case OrientationFlags.SideBottom: - case OrientationFlags.SideTop: - default: - return 0; - } - } - - public override int GetEastTextureRotation(ILocalChunkCache manager, int x, int y, int z) - { - OrientationFlags orientation = (OrientationFlags)manager.GetBlockMeta(x, y, z); - - switch (orientation) - { - case OrientationFlags.SideSouth: - case OrientationFlags.SideNorth: - return 1; - case OrientationFlags.SideWest: - case OrientationFlags.SideEast: - case OrientationFlags.SideBottom: - case OrientationFlags.SideTop: - default: - return 0; - } - } - - public override int GetWestTextureRotation(ILocalChunkCache manager, int x, int y, int z) - { - OrientationFlags orientation = (OrientationFlags)manager.GetBlockMeta(x, y, z); - - switch (orientation) - { - case OrientationFlags.SideSouth: - case OrientationFlags.SideNorth: - return 1; - case OrientationFlags.SideWest: - case OrientationFlags.SideEast: - case OrientationFlags.SideBottom: - case OrientationFlags.SideTop: - default: - return 0; - } - } - - public override int GetNorthTextureRotation(ILocalChunkCache manager, int x, int y, int z) + public override int GetTextureRotation(Wall wall, ILocalChunkCache manager, int x, int y, int z) { OrientationFlags orientation = (OrientationFlags)manager.GetBlockMeta(x, y, z); - - switch (orientation) - { - case OrientationFlags.SideWest: - case OrientationFlags.SideEast: - return 1; - case OrientationFlags.SideSouth: - case OrientationFlags.SideNorth: - case OrientationFlags.SideBottom: - case OrientationFlags.SideTop: - default: - return 0; - } - } - - public override int GetSouthTextureRotation(ILocalChunkCache manager, int x, int y, int z) - { - OrientationFlags orientation = (OrientationFlags)manager.GetBlockMeta(x, y, z); - - switch (orientation) + switch (wall) { - case OrientationFlags.SideWest: - case OrientationFlags.SideEast: - return 1; - case OrientationFlags.SideSouth: - case OrientationFlags.SideNorth: - case OrientationFlags.SideBottom: - case OrientationFlags.SideTop: + case Wall.Top: + case Wall.Bottom: + case Wall.Back: + case Wall.Front: + switch (orientation)//top and bottom north south + { + case OrientationFlags.SideWest: + case OrientationFlags.SideEast: + return 1; + case OrientationFlags.SideSouth: + case OrientationFlags.SideNorth: + case OrientationFlags.SideBottom: + case OrientationFlags.SideTop: + default: + return 0; + } + case Wall.Left: + case Wall.Right: + switch (orientation) //east west + { + case OrientationFlags.SideSouth: + case OrientationFlags.SideNorth: + return 1; + case OrientationFlags.SideWest: + case OrientationFlags.SideEast: + case OrientationFlags.SideBottom: + case OrientationFlags.SideTop: + default: + return 0; + } default: - return 0; + return base.GetTextureRotation(wall, manager, x, y, z); //should never ever happen } } } diff --git a/OctoAwesome/OctoAwesome.Basics/Definitions/Blocks/CactusBlockDefinition.cs b/OctoAwesome/OctoAwesome.Basics/Definitions/Blocks/CactusBlockDefinition.cs index 5cfe54d8..8bf406f8 100644 --- a/OctoAwesome/OctoAwesome.Basics/Definitions/Blocks/CactusBlockDefinition.cs +++ b/OctoAwesome/OctoAwesome.Basics/Definitions/Blocks/CactusBlockDefinition.cs @@ -8,27 +8,15 @@ namespace OctoAwesome.Basics.Definitions.Blocks { public class CactusBlockDefinition : BlockDefinition { - public override string Icon - { - get { return "cactus_inside"; } - } + public override string Icon => "cactus_inside"; - public override string Name - { - get { return Languages.OctoBasics.Cactus; } - } + public override string Name => Languages.OctoBasics.Cactus; - public override string[] Textures - { - get - { - return new[] { + public override string[] Textures => new[] { "cactus_inside", "cactus_side", "cactus_top" }; - } - } public override int GetTextureIndex(Wall wall, ILocalChunkCache manager, int x, int y, int z) @@ -167,111 +155,45 @@ public override string[] Textures return -1; } - public override int GetTopTextureRotation(ILocalChunkCache manager, int x, int y, int z) - { - OrientationFlags orientation = (OrientationFlags)manager.GetBlockMeta(x, y, z); - - switch (orientation) - { - case OrientationFlags.SideWest: - case OrientationFlags.SideEast: - return 1; - case OrientationFlags.SideSouth: - case OrientationFlags.SideNorth: - case OrientationFlags.SideBottom: - case OrientationFlags.SideTop: - default: - return 0; - } - } - - public override int GetBottomTextureRotation(ILocalChunkCache manager, int x, int y, int z) - { - OrientationFlags orientation = (OrientationFlags)manager.GetBlockMeta(x, y, z); - - switch (orientation) - { - case OrientationFlags.SideWest: - case OrientationFlags.SideEast: - return 1; - case OrientationFlags.SideSouth: - case OrientationFlags.SideNorth: - case OrientationFlags.SideBottom: - case OrientationFlags.SideTop: - default: - return 0; - } - } - - public override int GetEastTextureRotation(ILocalChunkCache manager, int x, int y, int z) - { - OrientationFlags orientation = (OrientationFlags)manager.GetBlockMeta(x, y, z); - - switch (orientation) - { - case OrientationFlags.SideSouth: - case OrientationFlags.SideNorth: - return 1; - case OrientationFlags.SideWest: - case OrientationFlags.SideEast: - case OrientationFlags.SideBottom: - case OrientationFlags.SideTop: - default: - return 0; - } - } - - public override int GetWestTextureRotation(ILocalChunkCache manager, int x, int y, int z) + public override int GetTextureRotation(Wall wall, ILocalChunkCache manager, int x, int y, int z) { - OrientationFlags orientation = (OrientationFlags)manager.GetBlockMeta(x, y, z); - switch (orientation) - { - case OrientationFlags.SideSouth: - case OrientationFlags.SideNorth: - return 1; - case OrientationFlags.SideWest: - case OrientationFlags.SideEast: - case OrientationFlags.SideBottom: - case OrientationFlags.SideTop: - default: - return 0; - } - } - - public override int GetNorthTextureRotation(ILocalChunkCache manager, int x, int y, int z) - { OrientationFlags orientation = (OrientationFlags)manager.GetBlockMeta(x, y, z); - switch (orientation) - { - case OrientationFlags.SideWest: - case OrientationFlags.SideEast: - return 1; - case OrientationFlags.SideSouth: - case OrientationFlags.SideNorth: - case OrientationFlags.SideBottom: - case OrientationFlags.SideTop: - default: - return 0; - } - } - - public override int GetSouthTextureRotation(ILocalChunkCache manager, int x, int y, int z) - { - OrientationFlags orientation = (OrientationFlags)manager.GetBlockMeta(x, y, z); - - switch (orientation) + switch (wall) { - case OrientationFlags.SideWest: - case OrientationFlags.SideEast: - return 1; - case OrientationFlags.SideSouth: - case OrientationFlags.SideNorth: - case OrientationFlags.SideBottom: - case OrientationFlags.SideTop: + case Wall.Top: + case Wall.Bottom: + case Wall.Back: + case Wall.Front: + switch (orientation) + { + case OrientationFlags.SideWest: + case OrientationFlags.SideEast: + return 1; + case OrientationFlags.SideSouth: + case OrientationFlags.SideNorth: + case OrientationFlags.SideBottom: + case OrientationFlags.SideTop: + default: + return 0; + } + case Wall.Left: + case Wall.Right: + switch (orientation) + { + case OrientationFlags.SideSouth: + case OrientationFlags.SideNorth: + return 1; + case OrientationFlags.SideWest: + case OrientationFlags.SideEast: + case OrientationFlags.SideBottom: + case OrientationFlags.SideTop: + default: + return 0; + } default: - return 0; + return base.GetTextureRotation(wall, manager, x, y, z); //should never ever happen } } diff --git a/OctoAwesome/OctoAwesome.Basics/Definitions/Blocks/WoodBlockDefinition.cs b/OctoAwesome/OctoAwesome.Basics/Definitions/Blocks/WoodBlockDefinition.cs index e368fa56..a019e97a 100644 --- a/OctoAwesome/OctoAwesome.Basics/Definitions/Blocks/WoodBlockDefinition.cs +++ b/OctoAwesome/OctoAwesome.Basics/Definitions/Blocks/WoodBlockDefinition.cs @@ -9,43 +9,27 @@ namespace OctoAwesome.Basics.Definitions.Blocks { public sealed class WoodBlockDefinition : BlockDefinition { - public override string Name - { - get { return Languages.OctoBasics.Wood; } - } + public override string Name => Languages.OctoBasics.Wood; - public override string Icon - { - get { return "wood_top"; } - } + public override string Icon => "wood_top"; - public override bool HasMetaData { get { return true; } } + public override bool HasMetaData => true; - public override string[] Textures - { - get - { - return new[] { + public override string[] Textures => new[] { "wood_top", "wood_side" }; - } - } - public override PhysicalProperties GetProperties(ILocalChunkCache manager, int x, int y, int z) - { - return new PhysicalProperties() + public override PhysicalProperties GetProperties(ILocalChunkCache manager, int x, int y, int z) + => new PhysicalProperties() { Density = 0.87f, FractureToughness = 0.3f, Granularity = 0.9f, Hardness = 0.1f }; - } - public override void Hit(IBlockDefinition block, PhysicalProperties itemProperties) - { - throw new NotImplementedException(); - } + public override void Hit(IBlockDefinition block, PhysicalProperties itemProperties) + => throw new NotImplementedException(); public override int GetTextureIndex(Wall wall, ILocalChunkCache manager, int x, int y, int z) { @@ -108,112 +92,44 @@ public override int GetTextureIndex(Wall wall, ILocalChunkCache manager, int x, // Assert this return -1; } - - public override int GetTopTextureRotation(ILocalChunkCache manager, int x, int y, int z) - { - OrientationFlags orientation = (OrientationFlags)manager.GetBlockMeta(x, y, z); - - switch (orientation) - { - case OrientationFlags.SideWest: - case OrientationFlags.SideEast: - return 1; - case OrientationFlags.SideSouth: - case OrientationFlags.SideNorth: - case OrientationFlags.SideBottom: - case OrientationFlags.SideTop: - default: - return 0; - } - } - - public override int GetBottomTextureRotation(ILocalChunkCache manager, int x, int y, int z) - { - OrientationFlags orientation = (OrientationFlags)manager.GetBlockMeta(x, y, z); - - switch (orientation) - { - case OrientationFlags.SideWest: - case OrientationFlags.SideEast: - return 1; - case OrientationFlags.SideSouth: - case OrientationFlags.SideNorth: - case OrientationFlags.SideBottom: - case OrientationFlags.SideTop: - default: - return 0; - } - } - - public override int GetEastTextureRotation(ILocalChunkCache manager, int x, int y, int z) + + public override int GetTextureRotation(Wall wall, ILocalChunkCache manager, int x, int y, int z) { OrientationFlags orientation = (OrientationFlags)manager.GetBlockMeta(x, y, z); - - switch (orientation) - { - case OrientationFlags.SideSouth: - case OrientationFlags.SideNorth: - return 1; - case OrientationFlags.SideWest: - case OrientationFlags.SideEast: - case OrientationFlags.SideBottom: - case OrientationFlags.SideTop: - default: - return 0; - } - } - - public override int GetWestTextureRotation(ILocalChunkCache manager, int x, int y, int z) - { - OrientationFlags orientation = (OrientationFlags)manager.GetBlockMeta(x, y, z); - - switch (orientation) - { - case OrientationFlags.SideSouth: - case OrientationFlags.SideNorth: - return 1; - case OrientationFlags.SideWest: - case OrientationFlags.SideEast: - case OrientationFlags.SideBottom: - case OrientationFlags.SideTop: - default: - return 0; - } - } - - public override int GetNorthTextureRotation(ILocalChunkCache manager, int x, int y, int z) - { - OrientationFlags orientation = (OrientationFlags)manager.GetBlockMeta(x, y, z); - - switch (orientation) - { - case OrientationFlags.SideWest: - case OrientationFlags.SideEast: - return 1; - case OrientationFlags.SideSouth: - case OrientationFlags.SideNorth: - case OrientationFlags.SideBottom: - case OrientationFlags.SideTop: - default: - return 0; - } - } - - public override int GetSouthTextureRotation(ILocalChunkCache manager, int x, int y, int z) - { - OrientationFlags orientation = (OrientationFlags)manager.GetBlockMeta(x, y, z); - - switch (orientation) + switch (wall) { - case OrientationFlags.SideWest: - case OrientationFlags.SideEast: - return 1; - case OrientationFlags.SideSouth: - case OrientationFlags.SideNorth: - case OrientationFlags.SideBottom: - case OrientationFlags.SideTop: + case Wall.Top: + case Wall.Bottom: + case Wall.Back: + case Wall.Front: + switch (orientation)//top and bottom north south + { + case OrientationFlags.SideWest: + case OrientationFlags.SideEast: + return 1; + case OrientationFlags.SideSouth: + case OrientationFlags.SideNorth: + case OrientationFlags.SideBottom: + case OrientationFlags.SideTop: + default: + return 0; + } + case Wall.Left: + case Wall.Right: + switch (orientation) //east west + { + case OrientationFlags.SideSouth: + case OrientationFlags.SideNorth: + return 1; + case OrientationFlags.SideWest: + case OrientationFlags.SideEast: + case OrientationFlags.SideBottom: + case OrientationFlags.SideTop: + default: + return 0; + } default: - return 0; + return base.GetTextureRotation(wall, manager, x, y, z); //should never ever happen } } } diff --git a/OctoAwesome/OctoAwesome.Client/Components/ChunkRenderer.cs b/OctoAwesome/OctoAwesome.Client/Components/ChunkRenderer.cs index 72440f0a..1560e4d1 100644 --- a/OctoAwesome/OctoAwesome.Client/Components/ChunkRenderer.cs +++ b/OctoAwesome/OctoAwesome.Client/Components/ChunkRenderer.cs @@ -246,7 +246,7 @@ public bool RegenerateVertexBuffer() (((textureIndex + blockDefinition.GetTextureIndex(Wall.Top,_manager, x, y, z)) % textureColumns) * textureWidth) + textureGap, (((textureIndex + blockDefinition.GetTextureIndex(Wall.Top,_manager, x, y, z)) / textureColumns) * textureWidth) + textureGap); - int rotation = -blockDefinition.GetTopTextureRotation(_manager, x, y, z); + int rotation = -blockDefinition.GetTextureRotation(Wall.Top, _manager, x, y, z); int localOffset = vertices.Count; vertices.Add( @@ -296,7 +296,7 @@ public bool RegenerateVertexBuffer() (((textureIndex + blockDefinition.GetTextureIndex(Wall.Bottom, _manager, x, y, z)) % textureColumns) * textureWidth) + textureGap, (((textureIndex + blockDefinition.GetTextureIndex(Wall.Bottom, _manager, x, y, z)) / textureColumns) * textureWidth) + textureGap); - int rotation = -blockDefinition.GetBottomTextureRotation(_manager, x, y, z); + int rotation = -blockDefinition.GetTextureRotation(Wall.Bottom,_manager, x, y, z); int localOffset = vertices.Count; vertices.Add( @@ -345,7 +345,7 @@ public bool RegenerateVertexBuffer() (((textureIndex + blockDefinition.GetTextureIndex(Wall.Front,_manager, x, y, z)) % textureColumns) * textureWidth) + textureGap, (((textureIndex + blockDefinition.GetTextureIndex(Wall.Front,_manager, x, y, z)) / textureColumns) * textureWidth) + textureGap); - int rotation = -blockDefinition.GetSouthTextureRotation(_manager, x, y, z); + int rotation = -blockDefinition.GetTextureRotation(Wall.Front, _manager, x, y, z); int localOffset = vertices.Count; vertices.Add( @@ -394,7 +394,7 @@ public bool RegenerateVertexBuffer() (((textureIndex + blockDefinition.GetTextureIndex(Wall.Back,_manager, x, y, z)) % textureColumns) * textureWidth) + textureGap, (((textureIndex + blockDefinition.GetTextureIndex(Wall.Back,_manager, x, y, z)) / textureColumns) * textureWidth) + textureGap); - int rotation = -blockDefinition.GetNorthTextureRotation(_manager, x, y, z); + int rotation = -blockDefinition.GetTextureRotation(Wall.Back, _manager, x, y, z); int localOffset = vertices.Count; vertices.Add( @@ -444,7 +444,7 @@ public bool RegenerateVertexBuffer() (((textureIndex + blockDefinition.GetTextureIndex(Wall.Left,_manager, x, y, z)) / textureColumns) * textureWidth) + textureGap); - int rotation = -blockDefinition.GetWestTextureRotation(_manager, x, y, z); + int rotation = -blockDefinition.GetTextureRotation(Wall.Left, _manager, x, y, z); int localOffset = vertices.Count; vertices.Add( @@ -494,7 +494,7 @@ public bool RegenerateVertexBuffer() (((textureIndex + blockDefinition.GetTextureIndex(Wall.Right,_manager, x, y, z)) / textureColumns) * textureWidth) + textureGap); - int rotation = -blockDefinition.GetEastTextureRotation(_manager, x, y, z); + int rotation = -blockDefinition.GetTextureRotation(Wall.Right,_manager, x, y, z); int localOffset = vertices.Count; vertices.Add( diff --git a/OctoAwesome/OctoAwesome.Tests/TestPlanet.cs b/OctoAwesome/OctoAwesome.Tests/TestPlanet.cs index c5ea7e98..62eea158 100644 --- a/OctoAwesome/OctoAwesome.Tests/TestPlanet.cs +++ b/OctoAwesome/OctoAwesome.Tests/TestPlanet.cs @@ -44,6 +44,7 @@ public int Seed public Index3 Size { get; private set; } public Guid Universe { get; private set; } + IMapGenerator IPlanet.Generator { get => throw new NotImplementedException(); set => throw new NotImplementedException(); } public void Deserialize(Stream stream) { diff --git a/OctoAwesome/OctoAwesome.sln b/OctoAwesome/OctoAwesome.sln index 22d95b56..38ee9b9d 100644 --- a/OctoAwesome/OctoAwesome.sln +++ b/OctoAwesome/OctoAwesome.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 14 -VisualStudioVersion = 14.0.25420.1 +# Visual Studio 15 +VisualStudioVersion = 15.0.27130.2010 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OctoAwesome", "OctoAwesome\OctoAwesome.csproj", "{93601DB8-F134-418E-8B35-11E30CFEC31C}" EndProject @@ -67,4 +67,7 @@ Global GlobalSection(NestedProjects) = preSolution {0468B67C-E076-4B19-833C-382513606A5A} = {D269F5F0-2B6A-471A-8A44-253DEF5D98A1} EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {0BE45E2B-9F0C-49A7-AC90-A9B87EC9D7EA} + EndGlobalSection EndGlobal diff --git a/OctoAwesome/OctoAwesome/Block.cs b/OctoAwesome/OctoAwesome/Block.cs index 06f6dbb7..ae58fad9 100644 --- a/OctoAwesome/OctoAwesome/Block.cs +++ b/OctoAwesome/OctoAwesome/Block.cs @@ -3,7 +3,6 @@ namespace OctoAwesome { - //TODO: #CleanUP -> combine intersect methods? /// /// Helferklasse für die Kollisionserkennung mit Blöcken. /// @@ -29,6 +28,7 @@ public static class Block BoundingBox box = new BoundingBox(localBox.Min + boxPosition, localBox.Max + boxPosition); float? distance = ray.Intersects(box); + if (!distance.HasValue) continue; @@ -45,44 +45,42 @@ public static class Block collided = true; } - if (collided) + if (!collided) { - float max = -5f; - Axis? axis = null; - - // Fall X - if (min.X < 1f && min.X > max) - { - max = min.X; - axis = Axis.X; - } - - // Fall Y - if (min.Y < 1f && min.Y > max) - { - max = min.Y; - axis = Axis.Y; - } - - // Fall Z - if (min.Z < 1f && min.Z > max) - { - max = min.Z; - axis = Axis.Z; - } - - collisionAxis = axis; - - if (axis.HasValue) - return max * raylength; - + collisionAxis = null; return null; } - else + + float max = -5f; + Axis? axis = null; + + // Fall X + if (min.X < 1f && min.X > max) { - collisionAxis = null; - return null; + max = min.X; + axis = Axis.X; } + + // Fall Y + if (min.Y < 1f && min.Y > max) + { + max = min.Y; + axis = Axis.Y; + } + + // Fall Z + if (min.Z < 1f && min.Z > max) + { + max = min.Z; + axis = Axis.Z; + } + + collisionAxis = axis; + + if (axis.HasValue) + return max * raylength; + + return null; } /// @@ -132,42 +130,41 @@ public static class Block collided = true; } - if (collided) + if (!collided) { - float max = 0f; - Axis? axis = null; - - // Fall X - if (min.X < 1f && min.X > max) - { - max = min.X; - axis = Axis.X; - } - - // Fall Y - if (min.Y < 1f && min.Y > max) - { - max = min.Y; - axis = Axis.Y; - } - - // Fall Z - if (min.Z < 1f && min.Z > max) - { - max = min.Z; - axis = Axis.Z; - } - - collisionAxis = axis; - if (axis.HasValue) - return max; + collisionAxis = null; return null; } - else + float max = 0f; + Axis? axis = null; + + // Fall X + if (min.X < 1f && min.X > max) { - collisionAxis = null; - return null; + max = min.X; + axis = Axis.X; + } + + // Fall Y + if (min.Y < 1f && min.Y > max) + { + max = min.Y; + axis = Axis.Y; + } + + // Fall Z + if (min.Z < 1f && min.Z > max) + { + max = min.Z; + axis = Axis.Z; } + + collisionAxis = axis; + + if (axis.HasValue) + return max; + + return null; } } } diff --git a/OctoAwesome/OctoAwesome/BlockDefinition.cs b/OctoAwesome/OctoAwesome/BlockDefinition.cs index 02182275..39406360 100644 --- a/OctoAwesome/OctoAwesome/BlockDefinition.cs +++ b/OctoAwesome/OctoAwesome/BlockDefinition.cs @@ -73,66 +73,8 @@ public virtual BoundingBox[] GetCollisionBoxes(ILocalChunkCache manager, int x, public virtual int GetTextureIndex(Wall wall, ILocalChunkCache manager, int x, int y, int z) => 0; - /// - /// Rotation der Textur in 90° Schritten für die Oberseite (Positiv Z) des Blocks - /// - /// [Bitte ergänzen] - /// X-Anteil der Koordinate des Blocks - /// Y-Anteil der Koordinate des Blocks - /// Z-Anteil der Koordinate des Blocks - /// Rotation der Textur in 90° Schritten - public virtual int GetTopTextureRotation(ILocalChunkCache manager, int x, int y, int z) => 0; - - /// - /// Rotation der Textur in 90° Schritten für die Unterseite (Negativ Z) des Blocks - /// - /// [Bitte ergänzen] - /// X-Anteil der Koordinate des Blocks - /// Y-Anteil der Koordinate des Blocks - /// Z-Anteil der Koordinate des Blocks - /// Rotation der Textur in 90° Schritten - public virtual int GetBottomTextureRotation(ILocalChunkCache manager, int x, int y, int z) => 0; - - /// - /// Rotation der Textur in 90° Schritten für die Ostseite (Positiv X) des Blocks - /// - /// [Bitte ergänzen] - /// X-Anteil der Koordinate des Blocks - /// Y-Anteil der Koordinate des Blocks - /// Z-Anteil der Koordinate des Blocks - /// Rotation der Textur in 90° Schritten - public virtual int GetEastTextureRotation(ILocalChunkCache manager, int x, int y, int z) => 0; - - /// - /// Rotation der Textur in 90° Schritten für die Westseite (Negativ X) des Blocks - /// - /// [Bitte ergänzen] - /// X-Anteil der Koordinate des Blocks - /// Y-Anteil der Koordinate des Blocks - /// Z-Anteil der Koordinate des Blocks - /// Rotation der Textur in 90° Schritten - public virtual int GetWestTextureRotation(ILocalChunkCache manager, int x, int y, int z) => 0; - - /// - /// Rotation der Textur in 90° Schritten für die Nordseite (Positiv Y) des Blocks - /// - /// [Bitte ergänzen] - /// X-Anteil der Koordinate des Blocks - /// Y-Anteil der Koordinate des Blocks - /// Z-Anteil der Koordinate des Blocks - /// Rotation der Textur in 90° Schritten - public virtual int GetNorthTextureRotation(ILocalChunkCache manager, int x, int y, int z) => 0; - - /// - /// Rotation der Textur in 90° Schritten für die Südseite (Negativ Y) des Blocks - /// - /// [Bitte ergänzen] - /// X-Anteil der Koordinate des Blocks - /// Y-Anteil der Koordinate des Blocks - /// Z-Anteil der Koordinate des Blocks - /// Rotation der Textur in 90° Schritten - public virtual int GetSouthTextureRotation(ILocalChunkCache manager, int x, int y, int z) => 0; - + public virtual int GetTextureRotation(Wall wall, ILocalChunkCache manager, int x, int y, int z) => 0; + public bool IsSolidWall(Wall wall) => (SolidWall& (1 << (int)wall)) != 0; } } diff --git a/OctoAwesome/OctoAwesome/ChunkColumn.cs b/OctoAwesome/OctoAwesome/ChunkColumn.cs index 4285aaf1..0fa34ea3 100644 --- a/OctoAwesome/OctoAwesome/ChunkColumn.cs +++ b/OctoAwesome/OctoAwesome/ChunkColumn.cs @@ -193,7 +193,7 @@ public void SetBlock(int x, int y, int z, ushort block, int meta = 0) { int index = z / Chunk.CHUNKSIZE_Z; z %= Chunk.CHUNKSIZE_Z; - Chunks[index].SetBlock(x, y, z,block,meta); + Chunks[index].SetBlock(x, y, z, block, meta); } /// @@ -207,7 +207,7 @@ public void SetBlockMeta(int x, int y, int z, int meta) { int index = z / Chunk.CHUNKSIZE_Z; z %= Chunk.CHUNKSIZE_Z; - Chunks[index].SetBlockMeta(x, y, z, meta); + Chunks[index].SetBlockMeta(x, y, z, meta); } /// @@ -231,7 +231,6 @@ public void SetBlockResources(int x, int y, int z, ushort[] resources) /// Der verwendete DefinitionManager public void Serialize(Stream stream, IDefinitionManager definitionManager) { - //TODO: #CleanUp Method ok? using (BinaryWriter bw = new BinaryWriter(stream)) { // Definitionen sammeln @@ -263,7 +262,7 @@ public void Serialize(Stream stream, IDefinitionManager definitionManager) for (int i = 0; i < Chunks.Length; i++) // Change Counter bw.Write(Chunks[i].ChangeCounter); - + // Schreibe Phase 2 (Block Definitionen) if (longIndex) bw.Write((ushort)definitions.Count); @@ -341,7 +340,6 @@ public void Serialize(Stream stream, IDefinitionManager definitionManager) /// Der Index des Planeten public void Deserialize(Stream stream, IDefinitionManager definitionManager, int planetId, Index2 columnIndex) { - //TODO #CleanUp Method ok? using (BinaryReader br = new BinaryReader(stream)) { bool longIndex = br.ReadByte() > 0; @@ -352,11 +350,13 @@ public void Deserialize(Stream stream, IDefinitionManager definitionManager, int Index = columnIndex; Populated = br.ReadBoolean(); // Populated + for (int y = 0; y < Chunk.CHUNKSIZE_Y; y++) // Heightmap for (int x = 0; x < Chunk.CHUNKSIZE_X; x++) Heights[x, y] = br.ReadUInt16(); int[] counter = new int[Chunks.Length]; + for (int i = 0; i < Chunks.Length; i++) // ChangeCounter counter[i] = br.ReadInt32(); @@ -365,6 +365,7 @@ public void Deserialize(Stream stream, IDefinitionManager definitionManager, int Dictionary map = new Dictionary(); int typecount = longIndex ? br.ReadUInt16() : br.ReadByte(); + for (int i = 0; i < typecount; i++) { string typeName = br.ReadString(); @@ -380,6 +381,7 @@ public void Deserialize(Stream stream, IDefinitionManager definitionManager, int { IChunk chunk = Chunks[c] = new Chunk(new Index3(columnIndex, c), planetId); chunk.Changed += OnChunkChanged; + for (int i = 0; i < chunk.Blocks.Length; i++) { ushort typeIndex = longIndex ? br.ReadUInt16() : br.ReadByte(); @@ -389,6 +391,7 @@ public void Deserialize(Stream stream, IDefinitionManager definitionManager, int chunk.Blocks[i] = map[typeIndex]; var definition = (IBlockDefinition)definitionManager.GetDefinitionByIndex(map[typeIndex]); + if (definition.HasMetaData) chunk.MetaData[i] = br.ReadInt32(); } @@ -413,25 +416,21 @@ public void Deserialize(Stream stream, IDefinitionManager definitionManager, int if (type == null) continue; - Entity entity = (Entity)Activator.CreateInstance(type); - using (MemoryStream memorystream = new MemoryStream(buffer)) - using (BinaryReader componentbinarystream = new BinaryReader(memorystream)) { - entity.Deserialize(componentbinarystream, definitionManager); + using (BinaryReader componentbinarystream = new BinaryReader(memorystream)) + { + entity.Deserialize(componentbinarystream, definitionManager); + } } Entities.Add(entity); - } catch (Exception) { } - finally - { - } } } } diff --git a/OctoAwesome/OctoAwesome/IBlockDefinition.cs b/OctoAwesome/OctoAwesome/IBlockDefinition.cs index 56efb278..83a4f342 100644 --- a/OctoAwesome/OctoAwesome/IBlockDefinition.cs +++ b/OctoAwesome/OctoAwesome/IBlockDefinition.cs @@ -55,57 +55,7 @@ public interface IBlockDefinition : IInventoryableDefinition, IDefinition /// Y-Anteil der Koordinate des Blocks /// Z-Anteil der Koordinate des Blocks /// Rotation der Textur in 90° Schritten - int GetTopTextureRotation(ILocalChunkCache manager, int x, int y, int z); - - /// - /// Texturindex für das Array für die Unterseite (Negativ Z) des Blocks - /// - /// [Bitte ergänzen] - /// X-Anteil der Koordinate des Blocks - /// Y-Anteil der Koordinate des Blocks - /// Z-Anteil der Koordinate des Blocks - /// Index für das Array - int GetBottomTextureRotation(ILocalChunkCache manager, int x, int y, int z); - - /// - /// Rotation der Textur in 90° Schritten für die Ostseite (Positiv X) des Blocks - /// - /// [Bitte ergänzen] - /// X-Anteil der Koordinate des Blocks - /// Y-Anteil der Koordinate des Blocks - /// Z-Anteil der Koordinate des Blocks - /// Rotation der Textur in 90° Schritten - int GetEastTextureRotation(ILocalChunkCache manager, int x, int y, int z); - - /// - /// Rotation der Textur in 90° Schritten für die Westseite (Negativ X) des Blocks - /// - /// [Bitte ergänzen] - /// X-Anteil der Koordinate des Blocks - /// Y-Anteil der Koordinate des Blocks - /// Z-Anteil der Koordinate des Blocks - /// Rotation der Textur in 90° Schritten - int GetWestTextureRotation(ILocalChunkCache manager, int x, int y, int z); - - /// - /// Rotation der Textur in 90° Schritten für die Nordseite (Positiv Y) des Blocks - /// - /// [Bitte ergänzen] - /// X-Anteil der Koordinate des Blocks - /// Y-Anteil der Koordinate des Blocks - /// Z-Anteil der Koordinate des Blocks - /// Rotation der Textur in 90° Schritten - int GetNorthTextureRotation(ILocalChunkCache manager, int x, int y, int z); - - /// - /// Rotation der Textur in 90° Schritten für die Südseite (Negativ Y) des Blocks - /// - /// [Bitte ergänzen] - /// X-Anteil der Koordinate des Blocks - /// Y-Anteil der Koordinate des Blocks - /// Z-Anteil der Koordinate des Blocks - /// Rotation der Textur in 90° Schritten - int GetSouthTextureRotation(ILocalChunkCache manager, int x, int y, int z); + int GetTextureRotation(Wall wall, ILocalChunkCache manager, int x, int y, int z); uint SolidWall { get; } diff --git a/OctoAwesome/OctoAwesome/Wall.cs b/OctoAwesome/OctoAwesome/Wall.cs index 965950af..750a560e 100644 --- a/OctoAwesome/OctoAwesome/Wall.cs +++ b/OctoAwesome/OctoAwesome/Wall.cs @@ -4,11 +4,29 @@ namespace OctoAwesome { public enum Wall { + /// + /// Top + /// Top, + /// + /// Bottom + /// Bottom, + /// + /// West + /// Left, + /// + /// East + /// Right, + /// + /// North + /// Back, - Front + /// + /// South + /// + Front } } \ No newline at end of file