light/modules/surface/public/system.hpp
light7734 24d772c2d8
Some checks failed
continuous-integration/drone/pr Build is failing
wip
2025-10-09 20:22:27 +03:30

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 &registry,
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