2#ifndef LIBSBX_ANIMATIONS_ANIMATOR_HPP_
3#define LIBSBX_ANIMATIONS_ANIMATOR_HPP_
9#include <unordered_map>
13#include <libsbx/utility/hashed_string.hpp>
14#include <libsbx/utility/iterator.hpp>
16#include <libsbx/math/vector3.hpp>
17#include <libsbx/math/quaternion.hpp>
18#include <libsbx/math/matrix4x4.hpp>
21#include <libsbx/assets/assets_module.hpp>
23#include <libsbx/animations/skeleton.hpp>
25namespace sbx::animations {
34 bool is_looping =
true;
35 std::float_t speed = 1.0f;
41 std::float_t duration = 0.25f;
42 std::function<bool(
const animator&)> condition;
43 std::optional<std::float_t> exit_time = 0.0f;
47 std::unordered_map<utility::hashed_string, bool> bool_values;
48 std::unordered_map<utility::hashed_string, std::float_t> float_values;
49 std::unordered_map<utility::hashed_string, bool> trigger_values;
59 _current_state.animation_id = math::uuid::null();
62 auto add_state(
const state& new_state) -> void;
64 auto add_transition(transition&& transition) -> void;
74 auto play(
const utility::hashed_string& state_name,
const bool instant =
false,
const std::float_t cross_fade = 0.0f) -> void;
76 auto update(
const std::float_t delta_time) -> void;
78 auto evaluate_locals(
const skeleton&
skeleton) -> std::vector<bone_transform>;
80 auto evaluate_pose(
const skeleton&
skeleton,
const std::vector<bone_transform>& locals) -> std::vector<math::matrix4x4>;
82 auto current_state_name() const -> const utility::hashed_string&;
84 auto is_in_transition() const ->
bool;
86 auto bool_parameter(const utility::hashed_string& key) const -> std::optional<
bool>;
88 auto float_parameter(const utility::hashed_string& key) const -> std::optional<std::float_t>;
90 auto trigger_parameter(const utility::hashed_string& key) const -> std::optional<
bool>;
94 auto _start_playback(const state& target_state, const
bool instant, const std::float_t cross_fade) ->
void;
96 auto _wrap_state_time(const state& state, std::float_t time) const -> std::float_t;
98 auto _has_valid_clip(const state& state) const ->
bool;
102 std::unordered_map<utility::hashed_string, state> _state_map;
103 std::vector<transition> _transitions;
104 parameters _parameters{};
106 state _current_state{};
108 std::float_t _current_state_time{0.0f};
109 std::float_t _next_state_time{0.0f};
111 bool _is_in_transition{
false};
112 std::float_t _cross_fade_duration{0.0f};
113 std::float_t _cross_fade_elapsed{0.0f};
Definition: animator.hpp:27
Definition: skeleton.hpp:21
Definition: quaternion.hpp:25
Definition: vector3.hpp:23
Definition: hashed_string.hpp:17
Matrix casting and decomposition utilities.
Definition: animator.hpp:46
Definition: animator.hpp:31
Definition: animator.hpp:38