mirror of
https://github.com/Kelsidavis/WoWee.git
synced 2026-03-22 23:30:14 +00:00
Add property-based mount animation discovery and procedural lean
Mount Animation System: - Property-based jump animation discovery using sequence metadata - Chain linkage scoring (nextAnimation/aliasNext) for accurate detection - Correct loop detection: flags & 0x01 == 0 means looping - Avoids brake/stop animations via blendTime penalties - Works on any mount model without hardcoded animation IDs Mount Physics: - Physics-based jump height: vz = sqrt(2 * g * h) - Configurable MOUNT_JUMP_HEIGHT constant (1.0m default) - Procedural lean into turns for ground mounts - Smooth roll based on turn rate (±14° max, 6x/sec blend) Audio Improvements: - State-machine driven mount sounds (jump, land, rear-up) - Semantic sound methods (no animation ID dependencies) - Debug logging for missing sound files Bug Fixes: - Fixed mount animation sequencing (JumpStart → JumpLoop → JumpEnd) - Fixed animation loop flag interpretation (0x20 vs 0x21) - Rider bone attachment working correctly during all mount actions
This commit is contained in:
parent
3c783d1845
commit
c623fcef51
16 changed files with 1083 additions and 145 deletions
|
|
@ -54,7 +54,7 @@ public:
|
|||
|
||||
void playAnimation(uint32_t instanceId, uint32_t animationId, bool loop = true);
|
||||
|
||||
void update(float deltaTime);
|
||||
void update(float deltaTime, const glm::vec3& cameraPos = glm::vec3(0.0f));
|
||||
|
||||
void render(const Camera& camera, const glm::mat4& view, const glm::mat4& projection);
|
||||
void renderShadow(const glm::mat4& lightSpaceMatrix);
|
||||
|
|
@ -74,6 +74,9 @@ public:
|
|||
bool getInstanceModelName(uint32_t instanceId, std::string& modelName) const;
|
||||
bool getInstanceBounds(uint32_t instanceId, glm::vec3& outCenter, float& outRadius) const;
|
||||
|
||||
/** Debug: Log all available animations for an instance */
|
||||
void dumpAnimations(uint32_t instanceId) const;
|
||||
|
||||
/** Attach a weapon model to a character instance at the given attachment point. */
|
||||
bool attachWeapon(uint32_t charInstanceId, uint32_t attachmentId,
|
||||
const pipeline::M2Model& weaponModel, uint32_t weaponModelId,
|
||||
|
|
@ -82,6 +85,15 @@ public:
|
|||
/** Detach a weapon from the given attachment point. */
|
||||
void detachWeapon(uint32_t charInstanceId, uint32_t attachmentId);
|
||||
|
||||
/** Get the world-space transform of an attachment point on an instance.
|
||||
* Used for mount seats, weapon positions, etc.
|
||||
* @param instanceId The character/mount instance
|
||||
* @param attachmentId The attachment point ID (0=Mount, 1=RightHand, 2=LeftHand, etc.)
|
||||
* @param outTransform The resulting world-space transform matrix
|
||||
* @return true if attachment found and matrix computed
|
||||
*/
|
||||
bool getAttachmentTransform(uint32_t instanceId, uint32_t attachmentId, glm::mat4& outTransform);
|
||||
|
||||
size_t getInstanceCount() const { return instances.size(); }
|
||||
|
||||
void setFog(const glm::vec3& color, float start, float end) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue