Flecs v3.2
A fast entity component system (ECS) for C & C++
Loading...
Searching...
No Matches
impl.hpp
Go to the documentation of this file.
1
6#pragma once
7
8namespace flecs {
9
10// Timer class
11struct timer final : entity {
12 using entity::entity;
13
14 timer& interval(ecs_ftime_t interval) {
15 ecs_set_interval(m_world, m_id, interval);
16 return *this;
17 }
18
20 return ecs_get_interval(m_world, m_id);
21 }
22
23 timer& timeout(ecs_ftime_t timeout) {
24 ecs_set_timeout(m_world, m_id, timeout);
25 return *this;
26 }
27
29 return ecs_get_timeout(m_world, m_id);
30 }
31
32 timer& rate(int32_t rate, flecs::entity_t tick_source = 0) {
33 ecs_set_rate(m_world, m_id, rate, tick_source);
34 return *this;
35 }
36
37 void start() {
38 ecs_start_timer(m_world, m_id);
39 }
40
41 void stop() {
42 ecs_stop_timer(m_world, m_id);
43 }
44};
45
46template <typename... Args>
47inline flecs::timer world::timer(Args &&... args) const {
48 return flecs::timer(m_world, FLECS_FWD(args)...);
49}
50
51inline void world::randomize_timers() const {
52 ecs_randomize_timers(m_world);
53}
54
56 ecs_set_interval(m_world, m_id, interval);
57}
58
60 return ecs_get_interval(m_world, m_id);
61}
62
63inline void system::timeout(ecs_ftime_t timeout) {
64 ecs_set_timeout(m_world, m_id, timeout);
65}
66
67inline ecs_ftime_t system::timeout() {
68 return ecs_get_timeout(m_world, m_id);
69}
70
71inline void system::rate(int32_t rate) {
72 ecs_set_rate(m_world, m_id, rate, 0);
73}
74
75inline void system::start() {
76 ecs_start_timer(m_world, m_id);
77}
78
79inline void system::stop() {
80 ecs_stop_timer(m_world, m_id);
81}
82
83inline void system::set_tick_source(flecs::entity e) {
84 ecs_set_tick_source(m_world, m_id, e);
85}
86
87namespace _ {
88
89inline void timer_init(flecs::world& world) {
90 world.component<RateFilter>("flecs::timer::RateFilter");
91 world.component<Timer>("flecs::timer::Timer");
92}
93
94}
95}
FLECS_API ecs_ftime_t ecs_get_timeout(const ecs_world_t *world, ecs_entity_t tick_source)
Get current timeout value for the specified timer.
FLECS_API ecs_entity_t ecs_set_interval(ecs_world_t *world, ecs_entity_t tick_source, ecs_ftime_t interval)
Set timer interval.
FLECS_API ecs_ftime_t ecs_get_interval(const ecs_world_t *world, ecs_entity_t tick_source)
Get current interval value for the specified timer.
FLECS_API void ecs_set_tick_source(ecs_world_t *world, ecs_entity_t system, ecs_entity_t tick_source)
Assign tick source to system.
FLECS_API ecs_entity_t ecs_set_rate(ecs_world_t *world, ecs_entity_t tick_source, int32_t rate, ecs_entity_t source)
Set rate filter.
FLECS_API void ecs_start_timer(ecs_world_t *world, ecs_entity_t tick_source)
Start timer.
FLECS_API void ecs_randomize_timers(ecs_world_t *world)
Enable randomizing initial time value of timers.
FLECS_API ecs_entity_t ecs_set_timeout(ecs_world_t *world, ecs_entity_t tick_source, ecs_ftime_t timeout)
Set timer timeout.
FLECS_API void ecs_stop_timer(ecs_world_t *world, ecs_entity_t tick_source)
Stop timer This operation stops a timer from triggering.
void interval(ecs_ftime_t interval)
Set interval.
flecs::timer timer(Args &&... args) const
Find or register a timer.
flecs::component< T > component(Args &&... args) const
Find or register component.
#define ecs_ftime_t
Customizable precision for scalar time values.
Definition: flecs.h:42
Entity.
Definition: entity.hpp:30
The world.
Definition: world.hpp:132
ecs_ftime_t timeout()
Get timeout.
ecs_ftime_t interval()
Get interval.
void rate(int32_t rate)
Set system rate (system is its own tick source).
void timeout(ecs_ftime_t timeout)
Set timeout.