#pragma once namespace lt { class Event; class MouseMovedEvent; class ButtonPressedEvent; class ButtonReleasedEvent; class WheelScrolledEvent; class KeyPressedEvent; class KeyRepeatEvent; class KeyReleasedEvent; class SetCharEvent; class WindowClosedEvent; class WindowResizedEvent; class WindowMovedEvent; class WindowLostFocusEvent; class WindowGainFocusEvent; class Layer { public: Layer(std::string name); virtual ~Layer() = default; [[nodiscard]] auto get_name() const -> const std::string & { return m_layer_name; } virtual void on_update(float deltaTime) { } virtual void on_user_interface_update() { } virtual void on_render() { } auto on_event(const Event &event) -> bool; protected: std::string m_layer_name; virtual auto on_mouse_moved(const MouseMovedEvent & /*event*/) -> bool { return false; } virtual auto on_button_pressed(const ButtonPressedEvent & /*event*/) -> bool { return false; } virtual auto on_button_released(const ButtonReleasedEvent & /*event*/) -> bool { return false; } virtual auto on_wheel_scrolled(const WheelScrolledEvent & /*event*/) -> bool { return false; } virtual auto on_key_pressed(const KeyPressedEvent & /*event*/) -> bool { return false; } virtual auto on_key_repeat(const KeyRepeatEvent & /*event*/) -> bool { return false; } virtual auto on_key_released(const KeyReleasedEvent & /*event*/) -> bool { return false; } virtual auto on_set_char(const SetCharEvent & /*event*/) -> bool { return false; } virtual auto on_window_closed(const WindowClosedEvent & /*event*/) -> bool { return false; } virtual auto on_window_resized(const WindowResizedEvent & /*event*/) -> bool { return false; } virtual auto on_window_moved(const WindowMovedEvent & /*event*/) -> bool { return false; } virtual auto on_window_lost_focus(const WindowLostFocusEvent & /*event*/) -> bool { return false; } virtual auto on_window_gain_focus(const WindowGainFocusEvent & /*event*/) -> bool { return false; } }; } // namespace lt