77 lines
1.8 KiB
C++
77 lines
1.8 KiB
C++
#pragma once
|
|
|
|
#include <app/system.hpp>
|
|
#include <ecs/registry.hpp>
|
|
#include <math/vec2.hpp>
|
|
#include <memory/reference.hpp>
|
|
#include <surface/components.hpp>
|
|
|
|
namespace lt::surface {
|
|
|
|
class System: public app::ISystem
|
|
{
|
|
public:
|
|
[[nodiscard]] System(memory::Ref<ecs::Registry> registry);
|
|
|
|
~System() override;
|
|
|
|
System(System &&) = default;
|
|
|
|
System(const System &) = delete;
|
|
|
|
auto operator=(System &&) -> System & = default;
|
|
|
|
auto operator=(const System &) -> System & = delete;
|
|
|
|
void on_register() override;
|
|
|
|
void on_unregister() override;
|
|
|
|
__attribute__((no_sanitize_memory)) void create_surface_component(
|
|
ecs::EntityId entity,
|
|
SurfaceComponent::CreateInfo info
|
|
);
|
|
|
|
void tick(app::TickInfo tick) override;
|
|
|
|
[[nodiscard]] auto get_last_tick_result() const -> const app::TickResult & override
|
|
{
|
|
return m_last_tick_result;
|
|
}
|
|
|
|
private:
|
|
__attribute__((no_sanitize_memory)) void on_surface_destruct(
|
|
ecs::Registry ®istry,
|
|
ecs::EntityId entity
|
|
);
|
|
|
|
void handle_requests(struct SurfaceComponent &surface);
|
|
|
|
void handle_events(struct SurfaceComponent &surface);
|
|
|
|
__attribute__((no_sanitize_memory)) void modify_title(
|
|
struct SurfaceComponent &surface,
|
|
const struct ModifyTitleRequest &request
|
|
);
|
|
|
|
__attribute__((no_sanitize_memory)) void modify_resolution(
|
|
struct SurfaceComponent &surface,
|
|
const struct ModifyResolutionRequest &request
|
|
);
|
|
|
|
__attribute__((no_sanitize_memory)) void modify_position(
|
|
struct SurfaceComponent &surface,
|
|
const struct ModifyPositionRequest &request
|
|
);
|
|
|
|
__attribute__((no_sanitize_memory)) void modify_visiblity(
|
|
struct SurfaceComponent &surface,
|
|
const struct ModifyVisibilityRequest &request
|
|
);
|
|
|
|
memory::Ref<ecs::Registry> m_registry;
|
|
|
|
app::TickResult m_last_tick_result;
|
|
};
|
|
|
|
} // namespace lt::surface
|