Skip to main content

DelayedComponentEnablerSystem.ixx File

System that processes delayed component activations. More...

Included Headers

Namespaces Index

namespacehelios
namespaceengine

Main engine module aggregating core infrastructure and game systems. More...

namespacemechanics

High-level gameplay systems and components for game logic. More...

namespacelifecycle

Lifecycle management for entity components. More...

namespacesystems

Systems for processing entity lifecycle transitions. More...

Classes Index

classDelayedComponentEnablerSystem

System that processes delayed component activations each frame. More...

Description

System that processes delayed component activations.

File Listing

The file content with the documentation metadata removed is:

1/**
2 * @file DelayedComponentEnablerSystem.ixx
3 * @brief System that processes delayed component activations.
4 */
5module;
6
7
8#include <vector>
9
10export module helios.engine.mechanics.lifecycle.systems.DelayedComponentEnablerSystem;
11
12import helios.engine.ecs.System;
13import helios.engine.runtime.world.GameWorld;
14import helios.engine.runtime.world.UpdateContext;
15import helios.engine.mechanics.lifecycle.components.DelayedComponentEnabler;
16import helios.engine.core.data.ComponentTypeId;
17
18import helios.engine.ecs.ComponentOpsRegistry;
19
20import helios.engine.mechanics.lifecycle.components.Active;
21
23
24 /**
25 * @brief System that processes delayed component activations each frame.
26 *
27 * @details DelayedComponentEnablerSystem iterates over all entities with a
28 * DelayedComponentEnabler component and decrements the delay timers. When a
29 * timer reaches zero, the corresponding component is enabled.
30 *
31 * This system enables gameplay patterns such as:
32 * - **Spawn immunity:** Projectiles/enemies ignore collisions briefly
33 * - **Staggered activation:** Wave spawns activate progressively
34 * - **Effect sequencing:** Components enable in a defined order
35 *
36 * @note Should be scheduled in the gameplay phase to ensure proper timing.
37 *
38 * @see DelayedComponentEnabler
39 * @see DelayedComponentEnablerInitializer
40 */
42
43 /**
44 * @brief Temporary buffer for components that completed their delay.
45 */
46 std::vector<helios::engine::core::data::ComponentTypeId> sync_;
47
48 public:
49
50 /**
51 * @brief Processes all deferred components and activates expired ones.
52 *
53 * @details For each entity with DelayedComponentEnabler:
54 * 1 Decrements all delay timers by deltaTime
55 * 2 Enables components whose timers reach zero
56 * 3 Removes activated components from the deferred list
57 *
58 * @param updateContext Provides deltaTime for timer updates.
59 */
60 void update(helios::engine::runtime::world::UpdateContext& updateContext) noexcept override {
61
62 const float delta = updateContext.deltaTime();
63
64 for (auto [entity, dce, active] : gameWorld_->view<
67 >().whereEnabled()) {
68
69 sync_.clear();
70
71 auto deferredComponents = dce->deferredComponents();
72
73 for (auto& deferredComponent : deferredComponents) {
74
75 deferredComponent.delta = std::max(deferredComponent.delta - delta, 0.0f);
76
77 const auto componentTypeId = deferredComponent.componentTypeId;
78
79 if (deferredComponent.delta <= 0) {
80 auto* rawCmp = entity.raw(componentTypeId);
81 auto ops = helios::engine::ecs::ComponentOpsRegistry::ops(componentTypeId);
82
83 if (rawCmp && ops.enable) {
84 ops.enable(rawCmp);
85 }
86
87 sync_.push_back(componentTypeId);
88 }
89 }
90
91 dce->sync(sync_);
92 }
93 }
94 };
95
96}

Generated via doxygen2docusaurus 2.0.0 by Doxygen 1.15.0.