diff options
author | worktycho <work.tycho@gmail.com> | 2015-05-30 11:28:37 +0200 |
---|---|---|
committer | worktycho <work.tycho@gmail.com> | 2015-05-30 11:28:37 +0200 |
commit | 2b51958c8546602ef69aae681fd3e9c04801ed80 (patch) | |
tree | ff194217214d2ef3eb4f6d0845290d4ce94a5b7b /src/Mobs/Path.cpp | |
parent | Merge pull request #2166 from SafwatHalaby/squid (diff) | |
parent | PF - Fixed diagonal cutting (diff) | |
download | cuberite-2b51958c8546602ef69aae681fd3e9c04801ed80.tar cuberite-2b51958c8546602ef69aae681fd3e9c04801ed80.tar.gz cuberite-2b51958c8546602ef69aae681fd3e9c04801ed80.tar.bz2 cuberite-2b51958c8546602ef69aae681fd3e9c04801ed80.tar.lz cuberite-2b51958c8546602ef69aae681fd3e9c04801ed80.tar.xz cuberite-2b51958c8546602ef69aae681fd3e9c04801ed80.tar.zst cuberite-2b51958c8546602ef69aae681fd3e9c04801ed80.zip |
Diffstat (limited to 'src/Mobs/Path.cpp')
-rw-r--r-- | src/Mobs/Path.cpp | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/src/Mobs/Path.cpp b/src/Mobs/Path.cpp index 1848e144e..c21eb597c 100644 --- a/src/Mobs/Path.cpp +++ b/src/Mobs/Path.cpp @@ -216,28 +216,35 @@ bool cPath::Step_Internal() ProcessIfWalkable(CurrentCell->m_Location + Vector3i(0, 0, -1), CurrentCell, 10); // Check diagonals on XY plane. + // x = -1: west, x = 1: east. for (int x = -1; x <= 1; x += 2) { if (GetCell(CurrentCell->m_Location + Vector3i(x, 0, 0))->m_IsSolid) // If there's a solid our east / west. { - ProcessIfWalkable(CurrentCell->m_Location + Vector3i(x, 1, 0), CurrentCell, JUMP_G_COST); // Check east / west-up. + if (!GetCell(CurrentCell->m_Location + Vector3i(0, 1, 0))->m_IsSolid) // If there isn't a solid above. + { + ProcessIfWalkable(CurrentCell->m_Location + Vector3i(x, 1, 0), CurrentCell, JUMP_G_COST); // Check east-up / west-up. + } } else { - ProcessIfWalkable(CurrentCell->m_Location + Vector3i(x, -1, 0), CurrentCell, 14); // Else check east / west-down. + ProcessIfWalkable(CurrentCell->m_Location + Vector3i(x, -1, 0), CurrentCell, 14); // Else check east-down / west-down. } } // Check diagonals on the YZ plane. for (int z = -1; z <= 1; z += 2) { - if (GetCell(CurrentCell->m_Location + Vector3i(0, 0, z))->m_IsSolid) // If there's a solid our east / west. + if (GetCell(CurrentCell->m_Location + Vector3i(0, 0, z))->m_IsSolid) // If there's a solid our north / south. { - ProcessIfWalkable(CurrentCell->m_Location + Vector3i(0, 1, z), CurrentCell, JUMP_G_COST); // Check east / west-up. + if (!GetCell(CurrentCell->m_Location + Vector3i(0, 1, 0))->m_IsSolid) // If there isn't a solid above. + { + ProcessIfWalkable(CurrentCell->m_Location + Vector3i(0, 1, z), CurrentCell, JUMP_G_COST); // Check north-up / south-up. + } } else { - ProcessIfWalkable(CurrentCell->m_Location + Vector3i(0, -1, z), CurrentCell, 14); // Else check east / west-down. + ProcessIfWalkable(CurrentCell->m_Location + Vector3i(0, -1, z), CurrentCell, 14); // Else check north-down / south-down. } } |