From 5402b214b31af60bc96cd4e47e9211715c3e99f5 Mon Sep 17 00:00:00 2001 From: Lane Kolbly Date: Fri, 28 Jul 2017 11:59:21 -0500 Subject: Check for intersection between placed blocks and entities. (#3850) * Check for intersection between placed blocks and entities. + Implemented GetPlacementCollisionBox, to permit custom placement collision boxes for blocks. * Factored block-entity placement checking into another function in cPlayer. - Removed vector min/max functions * Use GetWorld to get the world in DoesPlacingBlocksIntersectEntity. + Added block height checks, allow different cEntity subclasses to decide whether they will prevent block placement. --- tests/Generating/Stubs.cpp | 16 ++++++++++++++++ tests/LuaThreadStress/Stubs.cpp | 17 +++++++++++++++++ tests/SchematicFileSerializer/Stubs.cpp | 14 ++++++++++++++ 3 files changed, 47 insertions(+) (limited to 'tests') diff --git a/tests/Generating/Stubs.cpp b/tests/Generating/Stubs.cpp index aadb92d0b..bdc1d2a58 100644 --- a/tests/Generating/Stubs.cpp +++ b/tests/Generating/Stubs.cpp @@ -108,6 +108,13 @@ cBlockInfo::cBlockInfoArray::cBlockInfoArray() +cBoundingBox::cBoundingBox(double, double, double, double, double, double) +{ +} + + + + cBlockHandler::cBlockHandler(BLOCKTYPE a_BlockType) { @@ -117,6 +124,15 @@ cBlockHandler::cBlockHandler(BLOCKTYPE a_BlockType) +cBoundingBox cBlockHandler::GetPlacementCollisionBox(BLOCKTYPE a_XM, BLOCKTYPE a_XP, BLOCKTYPE a_YM, BLOCKTYPE a_YP, BLOCKTYPE a_ZM, BLOCKTYPE a_ZP) +{ + return cBoundingBox(0, 0, 0, 0, 0, 0); +} + + + + + bool cBlockHandler::GetPlacementBlockTypeMeta( cChunkInterface & a_ChunkInterface, cPlayer * a_Player, int a_BlockX, int a_BlockY, int a_BlockZ, eBlockFace a_BlockFace, diff --git a/tests/LuaThreadStress/Stubs.cpp b/tests/LuaThreadStress/Stubs.cpp index aadb92d0b..eb46f0e0c 100644 --- a/tests/LuaThreadStress/Stubs.cpp +++ b/tests/LuaThreadStress/Stubs.cpp @@ -109,6 +109,14 @@ cBlockInfo::cBlockInfoArray::cBlockInfoArray() +cBoundingBox::cBoundingBox(double, double, double, double, double, double) +{ +} + + + + + cBlockHandler::cBlockHandler(BLOCKTYPE a_BlockType) { } @@ -117,6 +125,15 @@ cBlockHandler::cBlockHandler(BLOCKTYPE a_BlockType) +cBoundingBox cBlockHandler::GetPlacementCollisionBox(BLOCKTYPE a_XM, BLOCKTYPE a_XP, BLOCKTYPE a_YM, BLOCKTYPE a_YP, BLOCKTYPE a_ZM, BLOCKTYPE a_ZP) +{ + return cBoundingBox(0, 0, 0, 0, 0, 0); +} + + + + + bool cBlockHandler::GetPlacementBlockTypeMeta( cChunkInterface & a_ChunkInterface, cPlayer * a_Player, int a_BlockX, int a_BlockY, int a_BlockZ, eBlockFace a_BlockFace, diff --git a/tests/SchematicFileSerializer/Stubs.cpp b/tests/SchematicFileSerializer/Stubs.cpp index 7261d7a14..683b6d18e 100644 --- a/tests/SchematicFileSerializer/Stubs.cpp +++ b/tests/SchematicFileSerializer/Stubs.cpp @@ -34,6 +34,11 @@ cBlockInfo::cBlockInfoArray::cBlockInfoArray() } +cBoundingBox::cBoundingBox(double, double, double, double, double, double) +{ +} + + @@ -45,6 +50,15 @@ cBlockHandler::cBlockHandler(BLOCKTYPE a_BlockType) +cBoundingBox cBlockHandler::GetPlacementCollisionBox(BLOCKTYPE a_XM, BLOCKTYPE a_XP, BLOCKTYPE a_YM, BLOCKTYPE a_YP, BLOCKTYPE a_ZM, BLOCKTYPE a_ZP) +{ + return cBoundingBox(0, 0, 0, 0, 0, 0); +} + + + + + bool cBlockHandler::GetPlacementBlockTypeMeta( cChunkInterface & a_ChunkInterface, cPlayer * a_Player, int a_BlockX, int a_BlockY, int a_BlockZ, eBlockFace a_BlockFace, -- cgit v1.2.3