#pragma once #include #include #include "Area.h" #include "TypeRegistry.h" class Block; class Chunk; class BlockFilter; class OrientationConfig : public virtual Framework::ReferenceCounter { public: OrientationConfig(); virtual Direction calculateOrientation( Framework::Vec3 pos, int dimensionId, Chunk* zChunk) const = 0; }; class AttachToNeighborOrientationConfig : public OrientationConfig { private: Directions validDirections; BlockFilter* filter; public: AttachToNeighborOrientationConfig(); ~AttachToNeighborOrientationConfig(); Direction calculateOrientation(Framework::Vec3 pos, int dimensionId, Chunk* zChunk) const override; void setValidDirections(Directions validDirections); Directions getValidDirections() const; void setFilter(BlockFilter* filter); BlockFilter* zFilter() const; }; class AttachToNeighborOrientationConfigFactory : public SubTypeFactory { public: AttachToNeighborOrientationConfigFactory(); AttachToNeighborOrientationConfig* fromJson( Framework::JSON::JSONObject* zJson) const override; Framework::JSON::JSONObject* toJsonObject( AttachToNeighborOrientationConfig* zObject) const override; JSONObjectValidationBuilder* addToValidator( JSONObjectValidationBuilder* builder) const override; const char* getTypeToken() const override; };