44 lines
842 B
C++
44 lines
842 B
C++
#pragma once
|
|
#include <cstdint>
|
|
|
|
#include "flecs.h"
|
|
|
|
struct TickAccumulator
|
|
{
|
|
uint16_t MaxTick{1};
|
|
uint16_t AccumulatedTick;
|
|
|
|
constexpr bool Finished() const
|
|
{
|
|
return AccumulatedTick >= MaxTick;
|
|
}
|
|
};
|
|
|
|
struct Freezes
|
|
{};
|
|
|
|
inline void Flecs_Tick(flecs::world& world)
|
|
{
|
|
world.component<TickAccumulator>()
|
|
.member<uint16_t>("MaxTick")
|
|
.member<uint16_t>("AccumulatedTick")
|
|
.add(flecs::Inheritable);
|
|
|
|
world.component<Freezes>();
|
|
|
|
world.system<TickAccumulator>("Tick Increase")
|
|
.kind(flecs::PreUpdate)
|
|
.without<Freezes, TickAccumulator>()
|
|
.each([] (TickAccumulator& tick)
|
|
{
|
|
++tick.AccumulatedTick;
|
|
});
|
|
|
|
world.system<TickAccumulator>("Tick Reset")
|
|
.kind(flecs::PostUpdate)
|
|
.without<Freezes, TickAccumulator>()
|
|
.each([] (TickAccumulator& tick)
|
|
{
|
|
tick.AccumulatedTick -= tick.MaxTick * tick.Finished();
|
|
});
|
|
} |