From 73b6a44d5f9e35f7471b7e86e4fd5ee463b2ea44 Mon Sep 17 00:00:00 2001 From: Lane Kolbly Date: Tue, 26 May 2015 20:35:28 -0500 Subject: Implemented nether portal scanning code. --- src/NetherPortalScanner.h | 75 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 src/NetherPortalScanner.h (limited to 'src/NetherPortalScanner.h') diff --git a/src/NetherPortalScanner.h b/src/NetherPortalScanner.h new file mode 100644 index 000000000..89ffd7d0e --- /dev/null +++ b/src/NetherPortalScanner.h @@ -0,0 +1,75 @@ + +#pragma once + +#include "Vector3.h" +#include "ChunkStay.h" + + +class cEntity; +class cWorld; + + + + + +// This is the chunk stay which finds nearby nether portals +class cNetherPortalScanner : public cChunkStay +{ +public: + cNetherPortalScanner(cEntity * a_MovingEntity, cWorld * a_DestinationWorld, Vector3d a_DestPosition, int a_MaxY); + virtual void OnChunkAvailable(int a_ChunkX, int a_ChunkY) override; + virtual bool OnAllChunksAvailable(void) override; + virtual void OnDisabled(void) override; + + enum class Direction + { + X, + Y + }; + +private: + + /** Length and height, including the obsidian. */ + static const int PortalLength = 4; + static const int PortalHeight = 5; + + static const int SearchRadius = 128; + static const int BuildSearchRadius = 16; + + /** The width of a solid base to search for when building. */ + static const int SearchSolidBaseWidth = 3; + + /** Where to place the player out from the face and across the face */ + const double OutOffset = 1.5; + const double AcrossOffset = 0.5; + + /** Builds a portal. */ + void BuildNetherPortal(Vector3i a_Location, Direction a_Direction, bool a_IncludePlatform); + + /** Whether the given location is a valid location to build a portal. */ + bool IsValidBuildLocation(Vector3i a_BlockPosition); + + /** The entity that's being moved. */ + cEntity * m_Entity; + + /** The world we're moving the entity to. */ + cWorld * m_World; + + /** Whether we found a portal during the loading of the chunks. */ + bool m_FoundPortal; + + /** Whether to build a platform. True if we couldn't build the portal on solid ground */ + bool m_BuildPlatform; + + /** The direction of the portal. */ + Direction m_Dir; + + /** The position of the pre-existing portal. */ + Vector3i m_PortalLoc; + + /** The center of the search area */ + Vector3d m_Position; + + /** The maximum Y to scan to */ + int m_MaxY; +}; -- cgit v1.2.3