#pragma once #include "gameMainSelector.h" #include "modeHelper.hpp" #include "toolbar.h" #include "worldOverlay.h" #include #include #include class Ray; class EditNetwork : public GameMainSelector::Component, public WorldOverlay { public: explicit EditNetwork(Network *); virtual ~EditNetwork(); bool click(const SDL_MouseButtonEvent & e, const Ray &) override; bool move(const SDL_MouseMotionEvent & e, const Ray &) override; bool handleInput(const SDL_Event & e, const UIComponent::Position &) override; void render(const Shader &) const override; void render(const UIShader & shader, const UIComponent::Position & pos) const override; using NetworkClickPos = std::variant; class Builder { public: virtual ~Builder() = default; virtual void render(const Shader & shader) const = 0; virtual std::string hint() const = 0; virtual void click(Network *, const GeoData *, const SDL_MouseButtonEvent &, const Ray &) = 0; using Ptr = std::unique_ptr; }; private: Network * network; Builder::Ptr builder; Mode mode {builder}; Toolbar builderToolbar; }; template class EditNetworkOf : public EditNetwork { public: template EditNetworkOf(P &&... p) : EditNetwork(gameState->world.findOrCreate(), std::forward

(p)...) { } };