From 65ab6a011d600fbcd9ae6518839a25840b8c4aa4 Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Sun, 30 Sep 2018 07:59:30 +1000 Subject: [PATCH] Fix collisions when using 0 sized blocks as model --- ClassicalSharp/Entities/Model/BlockModel.cs | 12 ++++++++++-- src/ModelCache.c | 5 +++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/ClassicalSharp/Entities/Model/BlockModel.cs b/ClassicalSharp/Entities/Model/BlockModel.cs index 55711d234..fa281ca0d 100644 --- a/ClassicalSharp/Entities/Model/BlockModel.cs +++ b/ClassicalSharp/Entities/Model/BlockModel.cs @@ -34,10 +34,18 @@ namespace ClassicalSharp.Model { float maxY = BlockInfo.MaxBB[block].Y; return block == Block.Air ? 1 : (minY + maxY) / 2; } - + static Vector3 colShrink = new Vector3(0.75f/16, 0.75f/16, 0.75f/16); public override Vector3 CollisionSize { - get { return (maxBB - minBB) - colShrink; } // to fit slightly inside + get { + // to fit slightly inside + Vector3 size = (maxBB - minBB) - colShrink; + // fix for 0 size blocks + size.X = Math.Max(size.X, 0.125f/16); + size.Y = Math.Max(size.Y, 0.125f/16); + size.Z = Math.Max(size.Z, 0.125f/16); + return size; + } } static Vector3 offset = new Vector3(-0.5f, 0.0f, -0.5f); diff --git a/src/ModelCache.c b/src/ModelCache.c index 464252f0e..d8f243643 100644 --- a/src/ModelCache.c +++ b/src/ModelCache.c @@ -10,6 +10,7 @@ #include "Stream.h" #include "ErrorHandler.h" #include "Entity.h" +#include "Funcs.h" /*########################################################################################################################* @@ -1113,6 +1114,10 @@ static void BlockModel_GetCollisionSize(Vector3* size) { /* to fit slightly inside */ static Vector3 shrink = { 0.75f/16.0f, 0.75f/16.0f, 0.75f/16.0f }; Vector3_SubBy(size, &shrink); + /* fix for 0 size blocks */ + size->X = max(size->X, 0.125f/16.0f); + size->Y = max(size->Y, 0.125f/16.0f); + size->Z = max(size->Z, 0.125f/16.0f); } static void BlockModel_GetPickingBounds(struct AABB* bb) {