Fix compilation and runtime issues with reviewer from recent changes

This commit is contained in:
Daniel Evans 2016-04-16 14:06:02 +01:00
parent f3b81c5690
commit 76eb43c023
11 changed files with 70 additions and 43 deletions

View file

@ -1,5 +1,5 @@
#include "ViewerWidget.hpp" #include "ViewerWidget.hpp"
#include <render/Model.hpp> #include <data/Model.hpp>
#include <render/GameRenderer.hpp> #include <render/GameRenderer.hpp>
#include <render/OpenGLRenderer.hpp> #include <render/OpenGLRenderer.hpp>
#include <glm/gtc/type_ptr.hpp> #include <glm/gtc/type_ptr.hpp>
@ -187,7 +187,10 @@ void ViewerWidget::showObject(qint16 item)
{ {
dummyObject = gworld->createVehicle(item, {}); dummyObject = gworld->createVehicle(item, {});
} }
activeModel = dummyObject->model->resource; RW_CHECK(dummyObject != nullptr, "Dummy Object is null");
if (dummyObject != nullptr) {
activeModel = dummyObject->model->resource;
}
} }
} }

View file

@ -3,14 +3,18 @@
#define _VIEWERWIDGET_HPP_ #define _VIEWERWIDGET_HPP_
#include <engine/GameData.hpp> #include <engine/GameData.hpp>
#include <engine/GameWorld.hpp> #include <engine/GameWorld.hpp>
#include <QGLWidget>
#include <QTimer> #include <QTimer>
#include <loaders/LoaderIFP.hpp> #include <loaders/LoaderIFP.hpp>
#include <render/DrawBuffer.hpp> #include <gl/DrawBuffer.hpp>
#include <render/GeometryBuffer.hpp> #include <gl/GeometryBuffer.hpp>
#include <render/Model.hpp> #include <data/Model.hpp>
#include <glm/glm.hpp> #include <glm/glm.hpp>
// Prevent Qt from conflicting with glLoadGen
#define GL_ARB_debug_output
#define GL_KHR_debug
#include <QGLWidget>
class GameRenderer; class GameRenderer;
class Model; class Model;
class ViewerWidget : public QGLWidget class ViewerWidget : public QGLWidget

View file

@ -101,33 +101,10 @@ void ViewerWindow::closeEvent(QCloseEvent* event)
void ViewerWindow::openAnimations() void ViewerWindow::openAnimations()
{ {
#if 0
QFileDialog dialog(this, "Open Animations", QDir::homePath(), "IFP Animations (*.ifp)"); QFileDialog dialog(this, "Open Animations", QDir::homePath(), "IFP Animations (*.ifp)");
if(dialog.exec()) { if(dialog.exec()) {
std::ifstream dfile(dialog.selectedFiles().at(0).toStdString().c_str()); modelViewer->loadAnimations(dialog.selectedFiles()[0]);
AnimationList anims;
if(dfile.is_open())
{
dfile.seekg(0, std::ios_base::end);
size_t length = dfile.tellg();
dfile.seekg(0);
char *file = new char[length];
dfile.read(file, length);
LoaderIFP loader;
if( loader.loadFromMemory(file) ) {
for(auto& f : loader.animations) {
anims.push_back(f);
}
}
delete[] file;
}
animationswidget->setAnimations(anims);
} }
#endif
} }
void ViewerWindow::loadGame() void ViewerWindow::loadGame()

View file

@ -5,7 +5,6 @@
#include <engine/GameData.hpp> #include <engine/GameData.hpp>
#include <engine/GameWorld.hpp> #include <engine/GameWorld.hpp>
#include <core/Logger.hpp> #include <core/Logger.hpp>
#include <QGLContext>
#include <QStackedWidget> #include <QStackedWidget>
#include <QVBoxLayout> #include <QVBoxLayout>
@ -13,6 +12,7 @@ class ObjectViewer;
class ModelViewer; class ModelViewer;
class ViewerWidget; class ViewerWidget;
class GameRenderer; class GameRenderer;
class QGLContext;
class ViewerWindow : public QMainWindow class ViewerWindow : public QMainWindow
{ {

View file

@ -1,5 +1,5 @@
#include "DFFFramesTreeModel.hpp" #include "DFFFramesTreeModel.hpp"
#include <render/Model.hpp> #include <data/Model.hpp>
#include <data/Skeleton.hpp> #include <data/Skeleton.hpp>
DFFFramesTreeModel::DFFFramesTreeModel(Model *m, Skeleton* skel, QObject* parent) DFFFramesTreeModel::DFFFramesTreeModel(Model *m, Skeleton* skel, QObject* parent)

View file

@ -2,7 +2,7 @@
#ifndef _DFFFRAMESTREEMODEL_HPP_ #ifndef _DFFFRAMESTREEMODEL_HPP_
#define _DFFFRAMESTREEMODEL_HPP_ #define _DFFFRAMESTREEMODEL_HPP_
#include <QAbstractItemModel> #include <QAbstractItemModel>
#include <engine/RWTypes.hpp> #include <rw/types.hpp>
class Model; class Model;
class Skeleton; class Skeleton;

View file

@ -1,9 +1,10 @@
#include "ModelViewer.hpp" #include "ModelViewer.hpp"
#include <widgets/ModelFramesWidget.hpp>
#include "ViewerWidget.hpp"
#include <data/Skeleton.hpp>
#include <objects/GameObject.hpp>
#include <QDebug> #include <QDebug>
#include <widgets/ModelFramesWidget.hpp>
#include <data/Skeleton.hpp>
#include <engine/Animator.hpp>
#include <objects/GameObject.hpp>
#include "ViewerWidget.hpp"
ModelViewer::ModelViewer(ViewerWidget* viewer, QWidget* parent, Qt::WindowFlags f) ModelViewer::ModelViewer(ViewerWidget* viewer, QWidget* parent, Qt::WindowFlags f)
: QWidget(parent, f), _world(nullptr), viewing(nullptr), skeleton(nullptr) : QWidget(parent, f), _world(nullptr), viewing(nullptr), skeleton(nullptr)
@ -14,10 +15,15 @@ ModelViewer::ModelViewer(ViewerWidget* viewer, QWidget* parent, Qt::WindowFlags
viewerWidget = viewer; viewerWidget = viewer;
viewerWidget->setMinimumSize(250,250); viewerWidget->setMinimumSize(250,250);
animationWidget = new AnimationListWidget;
connect(animationWidget, SIGNAL(selectedAnimationChanged(Animation*)),
SLOT(playAnimation(Animation*)));
frames = new ModelFramesWidget; frames = new ModelFramesWidget;
frames->setMaximumWidth(300); frames->setMaximumWidth(300);
mainSplit->addWidget(frames); mainSplit->addWidget(frames);
mainSplit->addWidget(animationWidget);
mainLayout->addWidget(mainSplit); mainLayout->addWidget(mainSplit);
this->setLayout(mainLayout); this->setLayout(mainLayout);
@ -58,3 +64,34 @@ void ModelViewer::showObject(uint16_t object)
skeleton = viewerWidget->currentObject()->skeleton; skeleton = viewerWidget->currentObject()->skeleton;
frames->setModel(viewing, skeleton); frames->setModel(viewing, skeleton);
} }
void ModelViewer::loadAnimations(const QString& file)
{
std::ifstream dfile(file.toStdString().c_str());
AnimationList anims;
if(dfile.is_open())
{
dfile.seekg(0, std::ios_base::end);
size_t length = dfile.tellg();
dfile.seekg(0);
char *file = new char[length];
dfile.read(file, length);
LoaderIFP loader;
if( loader.loadFromMemory(file) ) {
for(auto& f : loader.animations) {
anims.push_back(f);
}
}
delete[] file;
}
animationWidget->setAnimations(anims);
}
void ModelViewer::playAnimation(Animation* anim)
{
viewerWidget->currentObject()->animator->setAnimation(anim);
}

View file

@ -1,19 +1,20 @@
#pragma once #pragma once
#ifndef _MODELVIEWER_HPP_ #ifndef _MODELVIEWER_HPP_
#define _MODELVIEWER_HPP_ #define _MODELVIEWER_HPP_
#include <engine/GameData.hpp>
#include <engine/GameWorld.hpp>
#include <QGLWidget>
#include <QTreeView> #include <QTreeView>
#include <QLabel> #include <QLabel>
#include <QVBoxLayout> #include <QVBoxLayout>
#include <QSplitter> #include <QSplitter>
#include <QLayout> #include <QLayout>
#include <engine/GameData.hpp>
#include <engine/GameWorld.hpp>
#include "AnimationListWidget.hpp"
class ViewerWidget; class ViewerWidget;
class Model; class Model;
class Skeleton; class Skeleton;
class ModelFramesWidget; class ModelFramesWidget;
class Animation;
class ModelViewer : public QWidget class ModelViewer : public QWidget
{ {
@ -28,6 +29,9 @@ class ModelViewer : public QWidget
ViewerWidget* viewerWidget; ViewerWidget* viewerWidget;
ModelFramesWidget* frames; ModelFramesWidget* frames;
AnimationList loadedAnimations;
AnimationListWidget *animationWidget;
public: public:
ModelViewer(ViewerWidget *viewer = 0, QWidget* parent = 0, Qt::WindowFlags f = 0); ModelViewer(ViewerWidget *viewer = 0, QWidget* parent = 0, Qt::WindowFlags f = 0);
@ -52,6 +56,9 @@ public slots:
void showObject(uint16_t object); void showObject(uint16_t object);
void showData(GameWorld* world); void showData(GameWorld* world);
void loadAnimations(const QString& file);
void playAnimation(Animation* anim);
}; };
#endif #endif

View file

@ -3,7 +3,6 @@
#define _OBJECTVIEWER_HPP_ #define _OBJECTVIEWER_HPP_
#include <engine/GameData.hpp> #include <engine/GameData.hpp>
#include <engine/GameWorld.hpp> #include <engine/GameWorld.hpp>
#include <QGLWidget>
#include <QTableView> #include <QTableView>
#include <QLabel> #include <QLabel>
#include <QGridLayout> #include <QGridLayout>

View file

@ -1,5 +1,5 @@
#include "ModelFramesWidget.hpp" #include "ModelFramesWidget.hpp"
#include <render/Model.hpp> #include <data/Model.hpp>
#include <glm/gtx/string_cast.hpp> #include <glm/gtx/string_cast.hpp>
void ModelFramesWidget::updateInfoBox(Model* model, ModelFrame *f) void ModelFramesWidget::updateInfoBox(Model* model, ModelFrame *f)

View file

@ -4,7 +4,7 @@
#include <QDockWidget> #include <QDockWidget>
#include <QTreeView> #include <QTreeView>
#include "models/DFFFramesTreeModel.hpp" #include "models/DFFFramesTreeModel.hpp"
#include <engine/RWTypes.hpp> #include <rw/types.hpp>
#include <QVBoxLayout> #include <QVBoxLayout>
#include <QLabel> #include <QLabel>