#pragma once #include #include #include #include #include namespace mbgl { class RenderSymbolLayer; class SymbolBucket; class OpacityState { public: OpacityState(bool placed); OpacityState(const OpacityState& prevOpacityState, float increment, bool placed); bool isHidden() const; float opacity; bool placed; }; class JointOpacityState { public: JointOpacityState(bool placedIcon, bool placedText); JointOpacityState(const JointOpacityState& prevOpacityState, float increment, bool placedIcon, bool placedText); bool isHidden() const; OpacityState icon; OpacityState text; }; class PlacementPair { public: PlacementPair(bool text_, bool icon_) : text(text_), icon(icon_) {} bool text; bool icon; }; class Placement { public: Placement(const TransformState&); void placeLayer(RenderSymbolLayer&, bool showCollisionBoxes); bool commit(const Placement& prevPlacement, TimePoint); void updateLayerOpacities(RenderSymbolLayer&); JointOpacityState getOpacity(uint32_t crossTileSymbolID) const; float symbolFadeChange(TimePoint now) const; bool hasTransitions(TimePoint now) const; private: void placeLayerBucket( SymbolBucket&, const mat4& posMatrix, const mat4& textLabelPlaneMatrix, const mat4& iconLabelPlaneMatrix, const float scale, const bool showCollisionBoxes); void updateBucketOpacities(SymbolBucket&); CollisionIndex collisionIndex; TransformState state; TimePoint commitTime; static uint32_t maxCrossTileID; // TODO remove std::unordered_map placements; std::unordered_map opacities; }; } // namespace mbgl