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
 |