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;
58 auto add_state(
const state& new_state) -> void;
70 auto play(
const utility::hashed_string& state_name,
const bool instant =
false,
const std::float_t cross_fade = 0.0f) -> void;
72 auto update(
const std::float_t delta_time) -> void;
74 auto evaluate_locals(
const skeleton&
skeleton) -> std::vector<bone_transform>;
76 auto evaluate_pose(
const skeleton&
skeleton,
const std::vector<bone_transform>& locals) -> std::vector<math::matrix4x4>;
78 auto current_state_name() const -> const utility::hashed_string&;
80 auto is_in_transition() const ->
bool;
82 auto bool_parameter(const utility::hashed_string& key) const -> std::optional<
bool>;
84 auto float_parameter(const utility::hashed_string& key) const -> std::optional<std::float_t>;
86 auto trigger_parameter(const utility::hashed_string& key) const -> std::optional<
bool>;
90 auto _start_playback(const
state& target_state, const
bool instant, const std::float_t cross_fade) ->
void;
92 auto _wrap_state_time(const
state&
state, std::float_t time) const -> std::float_t;
94 auto _has_valid_clip(const
state&
state) const ->
bool;
98 std::unordered_map<utility::hashed_string,
state> _state_map;
102 state _current_state{};
104 std::float_t _current_state_time{0.0f};
105 std::float_t _next_state_time{0.0f};
107 bool _is_in_transition{
false};
108 std::float_t _cross_fade_duration{0.0f};
109 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