defmodule Ecspanse.Resource.FPS do
@moduledoc """
A special resource provided by the framework to check the FPS in real-time.
The framework also provides a special system that updates the FPS resource.
The TrackFPS system needs to be added to the Server, in order to calculate the FPS.
- value: the last second FPS value
- current: the current frames accumulated this second
- millisecond: the current millisecond of the second
A special resource provided by the framework for real-time FPS monitoring.
The framework also includes a dedicated system that updates this FPS resource.
To enable FPS calculation, the `Ecspanse.System.TrackFPS` system must be added
to the `c:Ecspanse.setup/1` as a sync system.
The FPS state fields are:
- `:value` - the previous second's FPS value.
- `:current` - the number of frames within the current second.
- `:millisecond` - the current millisecond within the second.
"""
use Ecspanse.Resource,
state: [value: 0, current: 0, millisecond: 0]
alias __MODULE__
@type t :: %__MODULE__{
value: non_neg_integer(),
current: non_neg_integer(),
millisecond: non_neg_integer()
}
def validate(%FPS{value: value, current: current, millisecond: millisecond}) do
if is_integer(value) and value >= 0 and
(is_integer(current) and current >= 0) and
(is_integer(millisecond) and millisecond >= 0) do
:ok
else
{:error,
"Invalid state value. The Resource.FPS value, current and millisecond must be non neg integers"}
end
end
end