классы соотв.
class Mouse {
public:
virtual void on_button_down(sf::Vector2i pos, Button btn) {}
virtual void on_button_up(sf::Vector2i pos, Button btn) {}
virtual void on_button_click(sf::Vector2i pos, Button btn) {}
// on_move, on_enter, on_exit
};
class Keyboard {
public:
virtual void on_key_down(Key code) {}
virtual void on_key_up(Key code) {}
virtual void on_key_count(Key code) {}
};
ладно самое обычно взаимодействие, но в этом бренном мире существует фокус!
как реализовывать фокус? при таких базовых классах нужно, чтобы фокус определил методы on_button_down, on_button_up, чтобы собственно "собой" управлять.
тогда возникает проблема, что, например, если определить on_button_down, нужно, чтобы он дальше мог прокинуть этот вызов, не нарушать же логику?
получается должен быть метод on_pre_button_down, а если будет focus'? а focus''? определять on_pre_..._pre_button_down? как жить?
получается ад перфекциониста, и как на зло все статьи, что я нашел в интернете предлагают просто спиздить фокус в нужный момент.
хочется снова впасть в депрессию...
хочется добавить пример ,,идеальной,, реализации фокуса class Focus: public Mouse, public Keyboard { public: virtual void on_button_down(sf::Vector2i pos, Button btn) { last_click_pos[int(btn)] = pos; this->??? on_button_down(pos, btn); // вызов для следующего переопределения } virtual void on_button_up(sf::Vector2i pos, Button btn) { if (last_click_pos[int(btn)] == pos) on_button_click(pos, btn); this->??? on_button_up(pos, btn); // вызов для следующего переопределения } private: sf::Vector2i last_click_pos[int(Button::Count)]; }; и вот как...
Обсуждают сегодня