group2 0.1.0
CSE 125 Group 2
Loading...
Searching...
No Matches
CharacterAnimator.hpp
Go to the documentation of this file.
1
3
4#pragma once
5
7#include "CharacterRig.hpp"
8#include "SkinningBackend.hpp"
10
11#include <array>
12#include <glm/glm.hpp>
13#include <memory>
14#include <vector>
15
21{
22 glm::vec3 velocityWorld{0.0f};
23 float yawRad = 0.0f;
24 float pitchRad = 0.0f;
25 bool grounded = false;
26 bool sprinting = false;
27 bool crouching = false;
28 int moveMode = 0;
29 int wallRunSide = 0;
30};
31
39static constexpr size_t kNumSamplerSlots = 5;
40
43{
45 float timeRatio = 0.0f;
46 float playbackSpeed = 1.0f;
47 float weight = 0.0f;
48 bool active = false;
49};
50
60{
61public:
62 CharacterAnimator(const CharacterRig& rig, const AnimationLibrary& library);
67 CharacterAnimator& operator=(CharacterAnimator&&) noexcept = delete;
68
72 void setSkinningBackend(const ISkinningBackend* backend);
73
77 void update(const AnimationInputs& inputs, float dt);
78
99 void renderFromServer(const AnimSnapshot& serverState, const AnimationInputs& inputs);
100
103 void computeSkinnedVertices(std::vector<std::vector<ModelVertex>>& out) const;
104
108 void setDebugOverride(ClipId id, bool loop = true);
109
111 [[nodiscard]] ClipId debugOverride() const noexcept;
112
114 [[nodiscard]] const std::array<ClipSampler, kNumSamplerSlots>& samplers() const noexcept;
115
117 void setDebugPlaybackSpeed(float mul) noexcept;
118
120 [[nodiscard]] int numJoints() const noexcept;
121
130 [[nodiscard]] const std::vector<glm::mat4>& jointModelMatrices() const noexcept;
131
137 [[nodiscard]] const std::vector<glm::mat4>& skinMatrices() const noexcept;
138
139private:
147 void runSamplingAndSkinning(const AnimationInputs& inputs);
148
149 struct Impl;
150 std::unique_ptr<Impl> impl_;
151};
PR-27 — per-entity animation state snapshot, decoupled from CharacterAnimator.
Catalog of ozz animation clips shared across all animated entities.
ClipId
Enumerated clip IDs.
Definition AnimationLibrary.hpp:21
@ Idle
Definition AnimationLibrary.hpp:22
static constexpr size_t kNumSamplerSlots
Number of sampler slots available for the per-frame blend.
Definition CharacterAnimator.hpp:39
Shared skinned-character rig: skeleton, bind-pose mesh, skin weights.
Pluggable skinning interface — phase-1 CPU LBS; GPU backend slots in later.
Collection of animation clips loaded on top of a shared skeleton.
Definition AnimationLibrary.hpp:55
std::unique_ptr< Impl > impl_
Definition CharacterAnimator.hpp:150
void setSkinningBackend(const ISkinningBackend *backend)
Set the skinning backend (non-owning).
Definition CharacterAnimator.cpp:193
void setDebugPlaybackSpeed(float mul) noexcept
Playback-speed multiplier applied in debug-override mode.
Definition CharacterAnimator.cpp:216
void renderFromServer(const AnimSnapshot &serverState, const AnimationInputs &inputs)
PR-29: render the entity at server-authoritative animation state.
Definition CharacterAnimator.cpp:567
ClipId debugOverride() const noexcept
Current debug override clip (_Count = no override).
Definition CharacterAnimator.cpp:206
const std::array< ClipSampler, kNumSamplerSlots > & samplers() const noexcept
Snapshot of the current sampler slots (for UI inspection).
Definition CharacterAnimator.cpp:211
CharacterAnimator(CharacterAnimator &&) noexcept=delete
void runSamplingAndSkinning(const AnimationInputs &inputs)
PR-29: shared back end for update() and renderFromServer().
Definition CharacterAnimator.cpp:600
CharacterAnimator(const CharacterRig &rig, const AnimationLibrary &library)
Definition CharacterAnimator.cpp:136
int numJoints() const noexcept
Number of joints in the underlying rig.
Definition CharacterAnimator.cpp:221
CharacterAnimator(const CharacterAnimator &)=delete
const std::vector< glm::mat4 > & skinMatrices() const noexcept
Per-joint LBS skin matrices: procedural * modelMat * inverseBind.
Definition CharacterAnimator.cpp:231
void computeSkinnedVertices(std::vector< std::vector< ModelVertex > > &out) const
Apply CPU skinning to every rig mesh, producing animated vertices.
Definition CharacterAnimator.cpp:715
void update(const AnimationInputs &inputs, float dt)
Advance the state machine, sample + blend, and compute skin matrices.
Definition CharacterAnimator.cpp:359
void setDebugOverride(ClipId id, bool loop=true)
Force a single clip to play, bypassing the graph.
Definition CharacterAnimator.cpp:198
const std::vector< glm::mat4 > & jointModelMatrices() const noexcept
Model-space joint matrices with all procedural transforms applied (head pitch, wallrun mirror) but WI...
Definition CharacterAnimator.cpp:226
CharacterAnimator & operator=(const CharacterAnimator &)=delete
Shared skinned rig — skeleton + bind-pose meshes + joint map.
Definition CharacterRig.hpp:41
Abstract skinning backend.
Definition SkinningBackend.hpp:20
Definition AudioRuntime.hpp:365
Snapshot of an entity's full animation state at one instant.
Definition AnimSnapshot.hpp:73
Driving inputs for the animation state machine.
Definition CharacterAnimator.hpp:21
float pitchRad
Player pitch (radians, positive = looking down).
Definition CharacterAnimator.hpp:24
bool crouching
Crouch currently held (phase 1: note-only).
Definition CharacterAnimator.hpp:27
bool sprinting
Sprint key currently held.
Definition CharacterAnimator.hpp:26
glm::vec3 velocityWorld
World-space velocity (u/s).
Definition CharacterAnimator.hpp:22
float yawRad
Player yaw (radians).
Definition CharacterAnimator.hpp:23
bool grounded
Touching the ground this tick.
Definition CharacterAnimator.hpp:25
int wallRunSide
WallSide value: 0=None, 1=Left, 2=Right.
Definition CharacterAnimator.hpp:29
int moveMode
MoveMode value: 0=OnFoot, 1=Sliding, 2=WallRunning.
Definition CharacterAnimator.hpp:28
Definition CharacterAnimator.cpp:90
One active sampler slot contributing to the per-frame blend.
Definition CharacterAnimator.hpp:43
bool active
False = slot unused this frame.
Definition CharacterAnimator.hpp:48
float playbackSpeed
Multiplier applied to clip duration when advancing.
Definition CharacterAnimator.hpp:46
float weight
Blend weight; slots with weight 0 are skipped.
Definition CharacterAnimator.hpp:47
float timeRatio
Normalised playback time ∈ [0, 1].
Definition CharacterAnimator.hpp:45
One vertex in a skinned bind-pose mesh.
Definition SkinVertex.hpp:17