mirror of
https://github.com/rwengine/openrw.git
synced 2024-11-25 11:52:40 +01:00
Remove all traces of Skeleton
This commit is contained in:
parent
94456aa732
commit
d84b492412
@ -41,8 +41,6 @@ set(RWENGINE_SOURCES
|
|||||||
src/data/PathData.hpp
|
src/data/PathData.hpp
|
||||||
src/data/PedData.cpp
|
src/data/PedData.cpp
|
||||||
src/data/PedData.hpp
|
src/data/PedData.hpp
|
||||||
src/data/Skeleton.cpp
|
|
||||||
src/data/Skeleton.hpp
|
|
||||||
src/data/WeaponData.hpp
|
src/data/WeaponData.hpp
|
||||||
src/data/ZoneData.hpp
|
src/data/ZoneData.hpp
|
||||||
src/dynamics/CollisionInstance.cpp
|
src/dynamics/CollisionInstance.cpp
|
||||||
|
@ -1,100 +0,0 @@
|
|||||||
#include <data/Clump.hpp>
|
|
||||||
#include <data/Skeleton.hpp>
|
|
||||||
#include <glm/gtc/matrix_transform.hpp>
|
|
||||||
|
|
||||||
Skeleton::FrameTransform Skeleton::IdentityTransform = {glm::vec3(0.f),
|
|
||||||
glm::quat()};
|
|
||||||
Skeleton::FrameData Skeleton::IdentityData = {
|
|
||||||
Skeleton::IdentityTransform, Skeleton::IdentityTransform, true};
|
|
||||||
|
|
||||||
Skeleton::Skeleton() {
|
|
||||||
}
|
|
||||||
|
|
||||||
void Skeleton::setAllData(const Skeleton::FramesData& data) {
|
|
||||||
framedata = data;
|
|
||||||
}
|
|
||||||
|
|
||||||
const Skeleton::FrameData& Skeleton::getData(unsigned int frameIdx) const {
|
|
||||||
auto fdit = framedata.find(frameIdx);
|
|
||||||
if (fdit == framedata.end()) {
|
|
||||||
return Skeleton::IdentityData;
|
|
||||||
}
|
|
||||||
|
|
||||||
return fdit->second;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Skeleton::setData(unsigned int frameIdx, const Skeleton::FrameData& data) {
|
|
||||||
framedata[frameIdx] = data;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Skeleton::setEnabled(ModelFrame* frame, bool enabled) {
|
|
||||||
auto fdit = framedata.find(frame->getIndex());
|
|
||||||
if (fdit != framedata.end()) {
|
|
||||||
fdit->second.enabled = enabled;
|
|
||||||
} else {
|
|
||||||
FrameTransform tf{frame->getDefaultTranslation(),
|
|
||||||
glm::quat_cast(frame->getDefaultRotation())};
|
|
||||||
framedata.insert({frame->getIndex(), {tf, tf, enabled}});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void Skeleton::setEnabled(unsigned int frameIdx, bool enabled) {
|
|
||||||
auto fdit = framedata.find(frameIdx);
|
|
||||||
if (fdit == framedata.end()) {
|
|
||||||
framedata.insert({frameIdx,
|
|
||||||
{Skeleton::IdentityTransform,
|
|
||||||
Skeleton::IdentityTransform, enabled}});
|
|
||||||
} else {
|
|
||||||
fdit->second.enabled = enabled;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const Skeleton::FrameTransform& Skeleton::getInterpolated(
|
|
||||||
unsigned int frameIdx) const {
|
|
||||||
auto itit = interpolateddata.find(frameIdx);
|
|
||||||
if (itit == interpolateddata.end()) {
|
|
||||||
return Skeleton::IdentityTransform;
|
|
||||||
}
|
|
||||||
|
|
||||||
return itit->second;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Skeleton::interpolate(float alpha) {
|
|
||||||
interpolateddata.clear();
|
|
||||||
|
|
||||||
for (auto i = framedata.begin(); i != framedata.end(); ++i) {
|
|
||||||
auto& t2 = i->second.a.translation;
|
|
||||||
auto& t1 = i->second.b.translation;
|
|
||||||
|
|
||||||
auto& r2 = i->second.a.rotation;
|
|
||||||
auto& r1 = i->second.b.rotation;
|
|
||||||
|
|
||||||
interpolateddata.insert(
|
|
||||||
{i->first, {glm::mix(t1, t2, alpha), glm::slerp(r1, r2, alpha)}});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
glm::mat4 Skeleton::getMatrix(unsigned int frameIdx) const {
|
|
||||||
const FrameTransform& ft = getInterpolated(frameIdx);
|
|
||||||
|
|
||||||
glm::mat4 m;
|
|
||||||
|
|
||||||
m = glm::translate(m, ft.translation);
|
|
||||||
m = m * glm::mat4_cast(ft.rotation);
|
|
||||||
|
|
||||||
return m;
|
|
||||||
}
|
|
||||||
|
|
||||||
glm::mat4 Skeleton::getMatrix(ModelFrame* frame) const {
|
|
||||||
auto itit = interpolateddata.find(frame->getIndex());
|
|
||||||
if (itit != interpolateddata.end()) {
|
|
||||||
glm::mat4 m;
|
|
||||||
|
|
||||||
m = glm::translate(m, itit->second.translation);
|
|
||||||
m = m * glm::mat4_cast(itit->second.rotation);
|
|
||||||
|
|
||||||
return m;
|
|
||||||
}
|
|
||||||
|
|
||||||
return frame->getTransform();
|
|
||||||
}
|
|
@ -1,59 +0,0 @@
|
|||||||
#ifndef _SKELETON_HPP_
|
|
||||||
#define _SKELETON_HPP_
|
|
||||||
|
|
||||||
#include <glm/glm.hpp>
|
|
||||||
#include <glm/gtx/quaternion.hpp>
|
|
||||||
#include <map>
|
|
||||||
#include <vector>
|
|
||||||
|
|
||||||
class ModelFrame;
|
|
||||||
/**
|
|
||||||
* Data class for additional frame transformation and meta data.
|
|
||||||
*
|
|
||||||
* Provides interfaces to modify and query the visibility of model frames,
|
|
||||||
* as well as their transformation. Modified by Animator to animate models.
|
|
||||||
*/
|
|
||||||
class Skeleton {
|
|
||||||
public:
|
|
||||||
struct FrameTransform {
|
|
||||||
glm::vec3 translation;
|
|
||||||
glm::quat rotation;
|
|
||||||
};
|
|
||||||
|
|
||||||
static FrameTransform IdentityTransform;
|
|
||||||
|
|
||||||
struct FrameData {
|
|
||||||
FrameTransform a;
|
|
||||||
FrameTransform b;
|
|
||||||
bool enabled;
|
|
||||||
};
|
|
||||||
|
|
||||||
static FrameData IdentityData;
|
|
||||||
|
|
||||||
typedef std::map<unsigned int, FrameData> FramesData;
|
|
||||||
typedef std::map<unsigned int, FrameTransform> TransformData;
|
|
||||||
|
|
||||||
Skeleton();
|
|
||||||
|
|
||||||
void setAllData(const FramesData& data);
|
|
||||||
|
|
||||||
const FrameData& getData(unsigned int frameIdx) const;
|
|
||||||
|
|
||||||
void setData(unsigned int frameIdx, const FrameData& data);
|
|
||||||
void setEnabled(ModelFrame* frame, bool enabled);
|
|
||||||
|
|
||||||
void setEnabled(unsigned int frameIdx, bool enabled);
|
|
||||||
|
|
||||||
const FrameTransform& getInterpolated(unsigned int frameIdx) const;
|
|
||||||
|
|
||||||
glm::mat4 getMatrix(unsigned int frameIdx) const;
|
|
||||||
glm::mat4 getMatrix(ModelFrame* frame) const;
|
|
||||||
|
|
||||||
void interpolate(float alpha);
|
|
||||||
|
|
||||||
private:
|
|
||||||
FramesData framedata;
|
|
||||||
TransformData interpolateddata;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,5 +1,4 @@
|
|||||||
#include <data/Clump.hpp>
|
#include <data/Clump.hpp>
|
||||||
#include <data/Skeleton.hpp>
|
|
||||||
#include <engine/Animator.hpp>
|
#include <engine/Animator.hpp>
|
||||||
#include <glm/gtc/matrix_transform.hpp>
|
#include <glm/gtc/matrix_transform.hpp>
|
||||||
#include <loaders/LoaderDFF.hpp>
|
#include <loaders/LoaderDFF.hpp>
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
#include <data/Skeleton.hpp>
|
|
||||||
#include <engine/GameWorld.hpp>
|
#include <engine/GameWorld.hpp>
|
||||||
#include <items/Weapon.hpp>
|
#include <items/Weapon.hpp>
|
||||||
#include <objects/ProjectileObject.hpp>
|
#include <objects/ProjectileObject.hpp>
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
#include <ai/CharacterController.hpp>
|
#include <ai/CharacterController.hpp>
|
||||||
#include <data/Skeleton.hpp>
|
|
||||||
#include <engine/Animator.hpp>
|
#include <engine/Animator.hpp>
|
||||||
#include <engine/GameData.hpp>
|
#include <engine/GameData.hpp>
|
||||||
#include <engine/GameWorld.hpp>
|
#include <engine/GameWorld.hpp>
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
#include <data/Skeleton.hpp>
|
|
||||||
#include <engine/Animator.hpp>
|
#include <engine/Animator.hpp>
|
||||||
#include <objects/CutsceneObject.hpp>
|
#include <objects/CutsceneObject.hpp>
|
||||||
|
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
#include <data/Skeleton.hpp>
|
|
||||||
#include <engine/Animator.hpp>
|
#include <engine/Animator.hpp>
|
||||||
#include <glm/gtc/quaternion.hpp>
|
#include <glm/gtc/quaternion.hpp>
|
||||||
#include <loaders/LoaderDFF.hpp>
|
#include <loaders/LoaderDFF.hpp>
|
||||||
@ -9,9 +8,6 @@ GameObject::~GameObject() {
|
|||||||
if (animator) {
|
if (animator) {
|
||||||
delete animator;
|
delete animator;
|
||||||
}
|
}
|
||||||
if (skeleton) {
|
|
||||||
delete skeleton;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (modelinfo_) {
|
if (modelinfo_) {
|
||||||
modelinfo_->removeReference();
|
modelinfo_->removeReference();
|
||||||
|
@ -11,7 +11,6 @@
|
|||||||
#include <objects/ObjectTypes.hpp>
|
#include <objects/ObjectTypes.hpp>
|
||||||
#include <rw/types.hpp>
|
#include <rw/types.hpp>
|
||||||
|
|
||||||
class Skeleton;
|
|
||||||
class CharacterController;
|
class CharacterController;
|
||||||
class Animator;
|
class Animator;
|
||||||
class GameWorld;
|
class GameWorld;
|
||||||
@ -46,7 +45,6 @@ public:
|
|||||||
GameWorld* engine;
|
GameWorld* engine;
|
||||||
|
|
||||||
Animator* animator; /// Object's animator.
|
Animator* animator; /// Object's animator.
|
||||||
Skeleton* skeleton;
|
|
||||||
|
|
||||||
bool inWater;
|
bool inWater;
|
||||||
|
|
||||||
@ -71,7 +69,6 @@ public:
|
|||||||
, rotation(rot)
|
, rotation(rot)
|
||||||
, engine(engine)
|
, engine(engine)
|
||||||
, animator(nullptr)
|
, animator(nullptr)
|
||||||
, skeleton(nullptr)
|
|
||||||
, inWater(false)
|
, inWater(false)
|
||||||
, _lastHeight(std::numeric_limits<float>::max())
|
, _lastHeight(std::numeric_limits<float>::max())
|
||||||
, visible(true)
|
, visible(true)
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
#include <BulletDynamics/Vehicle/btRaycastVehicle.h>
|
#include <BulletDynamics/Vehicle/btRaycastVehicle.h>
|
||||||
#include <data/Clump.hpp>
|
#include <data/Clump.hpp>
|
||||||
#include <data/CollisionModel.hpp>
|
#include <data/CollisionModel.hpp>
|
||||||
#include <data/Skeleton.hpp>
|
|
||||||
#include <dynamics/CollisionInstance.hpp>
|
#include <dynamics/CollisionInstance.hpp>
|
||||||
#include <dynamics/RaycastCallbacks.hpp>
|
#include <dynamics/RaycastCallbacks.hpp>
|
||||||
#include <engine/Animator.hpp>
|
#include <engine/Animator.hpp>
|
||||||
|
@ -14,7 +14,6 @@
|
|||||||
#include <data/ModelData.hpp>
|
#include <data/ModelData.hpp>
|
||||||
|
|
||||||
#include <data/CutsceneData.hpp>
|
#include <data/CutsceneData.hpp>
|
||||||
#include <data/Skeleton.hpp>
|
|
||||||
#include <objects/CutsceneObject.hpp>
|
#include <objects/CutsceneObject.hpp>
|
||||||
#include <render/ObjectRenderer.hpp>
|
#include <render/ObjectRenderer.hpp>
|
||||||
|
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
#include <data/Clump.hpp>
|
#include <data/Clump.hpp>
|
||||||
#include <data/CutsceneData.hpp>
|
#include <data/CutsceneData.hpp>
|
||||||
#include <data/Skeleton.hpp>
|
|
||||||
#include <engine/GameData.hpp>
|
#include <engine/GameData.hpp>
|
||||||
#include <engine/GameState.hpp>
|
#include <engine/GameState.hpp>
|
||||||
#include <glm/gtc/type_ptr.hpp>
|
#include <glm/gtc/type_ptr.hpp>
|
||||||
|
@ -6,7 +6,6 @@
|
|||||||
#include <engine/GameState.hpp>
|
#include <engine/GameState.hpp>
|
||||||
#include <engine/GameData.hpp>
|
#include <engine/GameData.hpp>
|
||||||
#include <engine/Animator.hpp>
|
#include <engine/Animator.hpp>
|
||||||
#include <data/Skeleton.hpp>
|
|
||||||
#include <core/Logger.hpp>
|
#include <core/Logger.hpp>
|
||||||
#include <ai/PlayerController.hpp>
|
#include <ai/PlayerController.hpp>
|
||||||
#include <data/CutsceneData.hpp>
|
#include <data/CutsceneData.hpp>
|
||||||
|
@ -3,7 +3,6 @@
|
|||||||
#include <QMouseEvent>
|
#include <QMouseEvent>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <data/Clump.hpp>
|
#include <data/Clump.hpp>
|
||||||
#include <data/Skeleton.hpp>
|
|
||||||
#include <engine/Animator.hpp>
|
#include <engine/Animator.hpp>
|
||||||
#include <glm/gtc/type_ptr.hpp>
|
#include <glm/gtc/type_ptr.hpp>
|
||||||
#include <objects/CharacterObject.hpp>
|
#include <objects/CharacterObject.hpp>
|
||||||
@ -81,9 +80,8 @@ void ViewerWidget::paintGL() {
|
|||||||
|
|
||||||
r.setViewport(width(), height());
|
r.setViewport(width(), height());
|
||||||
|
|
||||||
if (dummyObject && dummyObject->animator && dummyObject->skeleton) {
|
if (dummyObject && dummyObject->animator) {
|
||||||
dummyObject->animator->tick(1.f / 60.f);
|
dummyObject->animator->tick(1.f / 60.f);
|
||||||
dummyObject->skeleton->interpolate(1.f);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
r.getRenderer()->invalidate();
|
r.getRenderer()->invalidate();
|
||||||
|
@ -1,10 +1,9 @@
|
|||||||
#include "DFFFramesTreeModel.hpp"
|
#include "DFFFramesTreeModel.hpp"
|
||||||
#include <data/Clump.hpp>
|
#include <data/Clump.hpp>
|
||||||
#include <data/Skeleton.hpp>
|
|
||||||
|
|
||||||
DFFFramesTreeModel::DFFFramesTreeModel(Clump* m, Skeleton* skel,
|
DFFFramesTreeModel::DFFFramesTreeModel(Clump* m,
|
||||||
QObject* parent)
|
QObject* parent)
|
||||||
: QAbstractItemModel(parent), model(m), skeleton(skel) {
|
: QAbstractItemModel(parent), model(m) {
|
||||||
}
|
}
|
||||||
|
|
||||||
int DFFFramesTreeModel::columnCount(const QModelIndex& parent) const {
|
int DFFFramesTreeModel::columnCount(const QModelIndex& parent) const {
|
||||||
@ -59,10 +58,7 @@ QVariant DFFFramesTreeModel::data(const QModelIndex& index, int role) const {
|
|||||||
}
|
}
|
||||||
} else if (role == Qt::CheckStateRole) {
|
} else if (role == Qt::CheckStateRole) {
|
||||||
if (index.column() == 0) {
|
if (index.column() == 0) {
|
||||||
if (skeleton) {
|
return true;
|
||||||
return skeleton->getData(f->getIndex()).enabled ? Qt::Checked
|
|
||||||
: Qt::Unchecked;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return QVariant();
|
return QVariant();
|
||||||
@ -77,11 +73,10 @@ bool DFFFramesTreeModel::setData(const QModelIndex& index,
|
|||||||
ModelFrame* f = static_cast<ModelFrame*>(index.internalPointer());
|
ModelFrame* f = static_cast<ModelFrame*>(index.internalPointer());
|
||||||
|
|
||||||
if (role == Qt::CheckStateRole) {
|
if (role == Qt::CheckStateRole) {
|
||||||
if (index.column() == 0 && skeleton) {
|
if (index.column() == 0) {
|
||||||
if ((Qt::CheckState)value.toInt() == Qt::Checked) {
|
if ((Qt::CheckState)value.toInt() == Qt::Checked) {
|
||||||
skeleton->setEnabled(f, true);
|
RW_UNIMPLEMENTED("Hiding Frames");
|
||||||
} else {
|
} else {
|
||||||
skeleton->setEnabled(f, false);
|
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -97,7 +92,7 @@ Qt::ItemFlags DFFFramesTreeModel::flags(const QModelIndex& index) const {
|
|||||||
|
|
||||||
Qt::ItemFlags flags = Qt::ItemIsEnabled | Qt::ItemIsSelectable;
|
Qt::ItemFlags flags = Qt::ItemIsEnabled | Qt::ItemIsSelectable;
|
||||||
|
|
||||||
if (index.column() == 0 && skeleton) {
|
if (index.column() == 0) {
|
||||||
flags |= Qt::ItemIsUserCheckable;
|
flags |= Qt::ItemIsUserCheckable;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,14 +5,12 @@
|
|||||||
#include <rw/types.hpp>
|
#include <rw/types.hpp>
|
||||||
|
|
||||||
class Clump;
|
class Clump;
|
||||||
class Skeleton;
|
|
||||||
|
|
||||||
class DFFFramesTreeModel : public QAbstractItemModel {
|
class DFFFramesTreeModel : public QAbstractItemModel {
|
||||||
Clump* model;
|
Clump* model;
|
||||||
Skeleton* skeleton;
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit DFFFramesTreeModel(Clump* m, Skeleton* skel, QObject* parent = 0);
|
explicit DFFFramesTreeModel(Clump* m, QObject* parent = 0);
|
||||||
|
|
||||||
virtual int columnCount(const QModelIndex& parent = QModelIndex()) const;
|
virtual int columnCount(const QModelIndex& parent = QModelIndex()) const;
|
||||||
|
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
#include "ModelViewer.hpp"
|
#include "ModelViewer.hpp"
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
#include <data/Skeleton.hpp>
|
|
||||||
#include <engine/Animator.hpp>
|
#include <engine/Animator.hpp>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <objects/GameObject.hpp>
|
#include <objects/GameObject.hpp>
|
||||||
@ -9,7 +8,7 @@
|
|||||||
|
|
||||||
ModelViewer::ModelViewer(ViewerWidget* viewer, QWidget* parent,
|
ModelViewer::ModelViewer(ViewerWidget* viewer, QWidget* parent,
|
||||||
Qt::WindowFlags f)
|
Qt::WindowFlags f)
|
||||||
: ViewerInterface(parent, f), viewing(nullptr), skeleton(nullptr) {
|
: ViewerInterface(parent, f), viewing(nullptr) {
|
||||||
mainSplit = new QSplitter;
|
mainSplit = new QSplitter;
|
||||||
mainLayout = new QVBoxLayout;
|
mainLayout = new QVBoxLayout;
|
||||||
|
|
||||||
@ -42,19 +41,14 @@ void ModelViewer::setViewerWidget(ViewerWidget* widget) {
|
|||||||
|
|
||||||
void ModelViewer::showModel(Clump* model) {
|
void ModelViewer::showModel(Clump* model) {
|
||||||
viewing = model;
|
viewing = model;
|
||||||
if (skeleton) {
|
|
||||||
delete skeleton;
|
|
||||||
}
|
|
||||||
skeleton = new Skeleton();
|
|
||||||
viewerWidget->showModel(model);
|
viewerWidget->showModel(model);
|
||||||
frames->setModel(model, nullptr);
|
frames->setModel(model);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ModelViewer::showObject(uint16_t object) {
|
void ModelViewer::showObject(uint16_t object) {
|
||||||
viewerWidget->showObject(object);
|
viewerWidget->showObject(object);
|
||||||
viewing = viewerWidget->currentModel();
|
viewing = viewerWidget->currentModel();
|
||||||
skeleton = viewerWidget->currentObject()->skeleton;
|
frames->setModel(viewing);
|
||||||
frames->setModel(viewing, skeleton);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ModelViewer::loadAnimations(const QString& file) {
|
void ModelViewer::loadAnimations(const QString& file) {
|
||||||
|
@ -15,7 +15,6 @@
|
|||||||
|
|
||||||
class ViewerWidget;
|
class ViewerWidget;
|
||||||
class Clump;
|
class Clump;
|
||||||
class Skeleton;
|
|
||||||
class ModelFramesWidget;
|
class ModelFramesWidget;
|
||||||
class Animation;
|
class Animation;
|
||||||
|
|
||||||
@ -23,7 +22,6 @@ class ModelViewer : public ViewerInterface {
|
|||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
Clump* viewing;
|
Clump* viewing;
|
||||||
Skeleton* skeleton;
|
|
||||||
|
|
||||||
QSplitter* mainSplit;
|
QSplitter* mainSplit;
|
||||||
QVBoxLayout* mainLayout;
|
QVBoxLayout* mainLayout;
|
||||||
|
@ -33,7 +33,7 @@ ModelFramesWidget::ModelFramesWidget(QWidget* parent, Qt::WindowFlags flags)
|
|||||||
setLayout(_layout);
|
setLayout(_layout);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ModelFramesWidget::setModel(Clump* model, Skeleton* skeleton) {
|
void ModelFramesWidget::setModel(Clump* model) {
|
||||||
if (framemodel) {
|
if (framemodel) {
|
||||||
delete framemodel;
|
delete framemodel;
|
||||||
framemodel = nullptr;
|
framemodel = nullptr;
|
||||||
@ -41,7 +41,7 @@ void ModelFramesWidget::setModel(Clump* model, Skeleton* skeleton) {
|
|||||||
}
|
}
|
||||||
gmodel = model;
|
gmodel = model;
|
||||||
if (model != nullptr) {
|
if (model != nullptr) {
|
||||||
framemodel = new DFFFramesTreeModel(model, skeleton, this);
|
framemodel = new DFFFramesTreeModel(model, this);
|
||||||
tree->setModel(framemodel);
|
tree->setModel(framemodel);
|
||||||
tree->setDisabled(false);
|
tree->setDisabled(false);
|
||||||
connect(tree->selectionModel(),
|
connect(tree->selectionModel(),
|
||||||
|
@ -30,7 +30,7 @@ public:
|
|||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
|
|
||||||
void setModel(Clump* model, Skeleton* skeleton);
|
void setModel(Clump* model);
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
|
|
||||||
|
@ -38,7 +38,6 @@ set(TEST_SOURCES
|
|||||||
"test_rwbstream.cpp"
|
"test_rwbstream.cpp"
|
||||||
"test_SaveGame.cpp"
|
"test_SaveGame.cpp"
|
||||||
"test_scriptmachine.cpp"
|
"test_scriptmachine.cpp"
|
||||||
"test_skeleton.cpp"
|
|
||||||
"test_state.cpp"
|
"test_state.cpp"
|
||||||
"test_text.cpp"
|
"test_text.cpp"
|
||||||
"test_trafficdirector.cpp"
|
"test_trafficdirector.cpp"
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
#include <boost/test/unit_test.hpp>
|
#include <boost/test/unit_test.hpp>
|
||||||
#include <data/Clump.hpp>
|
#include <data/Clump.hpp>
|
||||||
#include <data/Skeleton.hpp>
|
|
||||||
#include <engine/Animator.hpp>
|
#include <engine/Animator.hpp>
|
||||||
#include <glm/gtx/string_cast.hpp>
|
#include <glm/gtx/string_cast.hpp>
|
||||||
#include "test_globals.hpp"
|
#include "test_globals.hpp"
|
||||||
@ -10,7 +9,6 @@ BOOST_AUTO_TEST_SUITE(AnimationTests)
|
|||||||
#if RW_TEST_WITH_DATA
|
#if RW_TEST_WITH_DATA
|
||||||
BOOST_AUTO_TEST_CASE(test_matrix) {
|
BOOST_AUTO_TEST_CASE(test_matrix) {
|
||||||
{
|
{
|
||||||
Skeleton skeleton;
|
|
||||||
Animation animation;
|
Animation animation;
|
||||||
|
|
||||||
/** Models are currently needed to relate animation bones <=> model
|
/** Models are currently needed to relate animation bones <=> model
|
||||||
|
@ -1,63 +0,0 @@
|
|||||||
#include <boost/test/unit_test.hpp>
|
|
||||||
#include <data/Skeleton.hpp>
|
|
||||||
#include <glm/glm.hpp>
|
|
||||||
|
|
||||||
BOOST_AUTO_TEST_SUITE(SkeletonTests)
|
|
||||||
|
|
||||||
BOOST_AUTO_TEST_CASE(test_methods) {
|
|
||||||
Skeleton::FrameTransform t1{glm::vec3(0.f, 0.f, 0.f),
|
|
||||||
glm::quat(0.f, 0.f, 0.f, 0.f)};
|
|
||||||
Skeleton::FrameTransform t2{glm::vec3(1.f, 0.f, 0.f),
|
|
||||||
glm::quat(0.f, 0.f, 1.f, 0.f)};
|
|
||||||
|
|
||||||
Skeleton skeleton;
|
|
||||||
|
|
||||||
skeleton.setAllData({{0, {t1, t2, true}}});
|
|
||||||
|
|
||||||
BOOST_CHECK(skeleton.getData(0).a.translation == t1.translation);
|
|
||||||
BOOST_CHECK(skeleton.getData(0).a.rotation == t1.rotation);
|
|
||||||
|
|
||||||
BOOST_CHECK(skeleton.getData(0).b.translation == t2.translation);
|
|
||||||
BOOST_CHECK(skeleton.getData(0).b.rotation == t2.rotation);
|
|
||||||
|
|
||||||
BOOST_CHECK(skeleton.getData(0).enabled);
|
|
||||||
|
|
||||||
skeleton.setData(0, {t2, t1, false});
|
|
||||||
|
|
||||||
BOOST_CHECK(skeleton.getData(0).a.translation == t2.translation);
|
|
||||||
BOOST_CHECK(skeleton.getData(0).a.rotation == t2.rotation);
|
|
||||||
|
|
||||||
BOOST_CHECK(skeleton.getData(0).b.translation == t1.translation);
|
|
||||||
BOOST_CHECK(skeleton.getData(0).b.rotation == t1.rotation);
|
|
||||||
|
|
||||||
BOOST_CHECK(!skeleton.getData(0).enabled);
|
|
||||||
}
|
|
||||||
|
|
||||||
BOOST_AUTO_TEST_CASE(test_interpolate) {
|
|
||||||
Skeleton::FrameTransform t1{glm::vec3(0.f, 0.f, 0.f),
|
|
||||||
glm::quat(0.f, 0.f, 0.f, 0.f)};
|
|
||||||
Skeleton::FrameTransform t2{glm::vec3(1.f, 0.f, 0.f),
|
|
||||||
glm::quat(0.f, 0.f, 1.f, 0.f)};
|
|
||||||
|
|
||||||
Skeleton skeleton;
|
|
||||||
|
|
||||||
skeleton.setAllData({{0, {t2, t1, true}}});
|
|
||||||
|
|
||||||
/** Without calling Skeleton::interpolate(alpha) the result is identity */
|
|
||||||
|
|
||||||
BOOST_CHECK(skeleton.getInterpolated(0).translation ==
|
|
||||||
Skeleton::IdentityTransform.translation);
|
|
||||||
BOOST_CHECK(skeleton.getInterpolated(0).rotation ==
|
|
||||||
Skeleton::IdentityTransform.rotation);
|
|
||||||
|
|
||||||
skeleton.interpolate(0.f);
|
|
||||||
|
|
||||||
BOOST_CHECK(skeleton.getInterpolated(0).translation == t1.translation);
|
|
||||||
BOOST_CHECK(skeleton.getInterpolated(0).rotation == t1.rotation);
|
|
||||||
|
|
||||||
skeleton.interpolate(1.f);
|
|
||||||
|
|
||||||
BOOST_CHECK(skeleton.getInterpolated(0).translation == t2.translation);
|
|
||||||
BOOST_CHECK(skeleton.getInterpolated(0).rotation == t2.rotation);
|
|
||||||
}
|
|
||||||
BOOST_AUTO_TEST_SUITE_END()
|
|
@ -1,6 +1,5 @@
|
|||||||
#include <boost/test/unit_test.hpp>
|
#include <boost/test/unit_test.hpp>
|
||||||
#include <data/Clump.hpp>
|
#include <data/Clump.hpp>
|
||||||
#include <data/Skeleton.hpp>
|
|
||||||
#include <objects/VehicleObject.hpp>
|
#include <objects/VehicleObject.hpp>
|
||||||
#include "test_globals.hpp"
|
#include "test_globals.hpp"
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user