1 #pragma once 2 #include "core/tool.hpp" 3 #include "util/keep_slope_util.hpp" 4 #include <deque> 5 6 namespace horizon { 7 8 class ToolDragKeepSlope : public ToolBase { 9 public: 10 using ToolBase::ToolBase; 11 ToolResponse begin(const ToolArgs &args) override; 12 ToolResponse update(const ToolArgs &args) override; 13 bool can_begin() override; is_specific()14 bool is_specific() override 15 { 16 return true; 17 } get_actions() const18 std::set<InToolActionID> get_actions() const override 19 { 20 using I = InToolActionID; 21 return { 22 I::LMB, 23 I::CANCEL, 24 I::RMB, 25 }; 26 } 27 28 private: 29 class TrackInfo : public KeepSlopeInfo { 30 public: 31 class Track &track; // the track itself 32 33 TrackInfo(Track &tr, const Track &fr, const Track &to); 34 // TrackInfo(Track *a, Track *b, Track *c): track(a), track_from(b), 35 // track_to(c) {} 36 }; 37 std::set<UUID> nets; 38 39 std::deque<TrackInfo> track_info; 40 Coordi pos_orig; 41 }; 42 } // namespace horizon 43