TETRAEDGE: Support object position anim for Syberia 2

This commit is contained in:
Matthew Duggan 2023-02-24 15:01:37 +09:00
parent 0d43e8e9ae
commit 06021ffc1c
2 changed files with 17 additions and 8 deletions

View File

@ -544,14 +544,22 @@ bool Character::onBonesUpdate(const Common::String &boneName, TeMatrix4x4 &boneM
if (_model->anim()->curFrame2() >= obj->_startFrame
&& _model->anim()->curFrame2() <= obj->_endFrame) {
obj->model()->setVisible(true);
TeMatrix4x4 objmatrix = boneMatrix;
objmatrix.scale(obj->_objScale);
objmatrix.rotate(obj->_objRotation);
objmatrix.translate(obj->_objTranslation);
obj->model()->forceMatrix(objmatrix);
obj->model()->setRotation(_model->rotation());
obj->model()->setPosition(_model->position());
obj->model()->setScale(_model->scale());
if (!obj->_moveAnim._runTimer.running()) {
obj->_lastMatrix = boneMatrix;
obj->_lastMatrix.scale(obj->_objScale);
obj->_lastMatrix.rotate(obj->_objRotation);
obj->_lastMatrix.translate(obj->_objTranslation);
obj->model()->forceMatrix(obj->_lastMatrix);
obj->model()->setRotation(_model->rotation());
obj->model()->setPosition(_model->position());
obj->model()->setScale(_model->scale());
} else {
obj->model()->forceMatrix(obj->_lastMatrix);
obj->model()->setRotation(_model->rotation());
obj->model()->setPosition(_model->position() + obj->_curMovePos);
obj->model()->setScale(_model->scale());
}
} else {
obj->model()->setVisible(false);
}

View File

@ -78,6 +78,7 @@ public:
TeVector3f32 _objTranslation;
TeQuaternion _objRotation;
TeVector3f32 _objScale;
TeMatrix4x4 _lastMatrix;
int _startFrame;
int _endFrame;