1
0
Fork 0
mirror of https://github.com/OpenMW/openmw.git synced 2025-02-02 22:15:36 +00:00

Merge branch 'master' of git://github.com/zinnschlag/openmw

This commit is contained in:
lazydev 2013-02-24 13:53:40 +04:00
commit 6c7dce1396
28 changed files with 265 additions and 111 deletions

View file

@ -529,6 +529,8 @@ if (WIN32)
set(WARNINGS "${WARNINGS} /wd${d}") set(WARNINGS "${WARNINGS} /wd${d}")
endforeach(d) endforeach(d)
set_target_properties(shiny PROPERTIES COMPILE_FLAGS ${WARNINGS})
set_target_properties(shiny.OgrePlatform PROPERTIES COMPILE_FLAGS ${WARNINGS})
set_target_properties(components PROPERTIES COMPILE_FLAGS ${WARNINGS}) set_target_properties(components PROPERTIES COMPILE_FLAGS ${WARNINGS})
if (BUILD_LAUNCHER) if (BUILD_LAUNCHER)
set_target_properties(omwlauncher PROPERTIES COMPILE_FLAGS ${WARNINGS}) set_target_properties(omwlauncher PROPERTIES COMPILE_FLAGS ${WARNINGS})

View file

@ -20,6 +20,7 @@ void CSMDoc::Document::load (const std::vector<boost::filesystem::path>::const_i
getData().loadFile (*end2, false); getData().loadFile (*end2, false);
addOptionalGmsts(); addOptionalGmsts();
addOptionalGlobals();
} }
void CSMDoc::Document::addOptionalGmsts() void CSMDoc::Document::addOptionalGmsts()
@ -139,6 +140,26 @@ void CSMDoc::Document::addOptionalGmsts()
} }
} }
void CSMDoc::Document::addOptionalGlobals()
{
static const char *sGlobals[] =
{
"dayspassed",
"pcwerewolf",
"pcyear",
0
};
for (int i=0; sGlobals[i]; ++i)
{
ESM::Global global;
global.mId = sGlobals[i];
global.mType = ESM::VT_Int;
global.mValue = 0;
addOptionalGlobal (global);
}
}
void CSMDoc::Document::addOptionalGmst (const ESM::GameSetting& gmst) void CSMDoc::Document::addOptionalGmst (const ESM::GameSetting& gmst)
{ {
if (getData().getGmsts().searchId (gmst.mId)==-1) if (getData().getGmsts().searchId (gmst.mId)==-1)
@ -150,6 +171,17 @@ void CSMDoc::Document::addOptionalGmst (const ESM::GameSetting& gmst)
} }
} }
void CSMDoc::Document::addOptionalGlobal (const ESM::Global& global)
{
if (getData().getGlobals().searchId (global.mId)==-1)
{
CSMWorld::Record<ESM::Global> record;
record.mBase = global;
record.mState = CSMWorld::RecordBase::State_BaseOnly;
getData().getGlobals().appendRecord (record);
}
}
void CSMDoc::Document::createBase() void CSMDoc::Document::createBase()
{ {
static const char *sGlobals[] = static const char *sGlobals[] =
@ -249,6 +281,7 @@ void CSMDoc::Document::abortOperation (int type)
if (type==State_Saving) if (type==State_Saving)
{ {
mSaveCount=0;
mSaveTimer.stop(); mSaveTimer.stop();
emit stateChanged (getState(), this); emit stateChanged (getState(), this);
} }

View file

@ -20,6 +20,7 @@ class QAbstractItemModel;
namespace ESM namespace ESM
{ {
struct GameSetting; struct GameSetting;
struct Global;
} }
namespace CSMDoc namespace CSMDoc
@ -53,8 +54,12 @@ namespace CSMDoc
void addOptionalGmsts(); void addOptionalGmsts();
void addOptionalGlobals();
void addOptionalGmst (const ESM::GameSetting& gmst); void addOptionalGmst (const ESM::GameSetting& gmst);
void addOptionalGlobal (const ESM::Global& global);
public: public:
Document (const std::vector<boost::filesystem::path>& files, bool new_); Document (const std::vector<boost::filesystem::path>& files, bool new_);

View file

@ -171,7 +171,7 @@ namespace CSMWorld
record2.mModified = record; record2.mModified = record;
mRecords.push_back (record2); mRecords.push_back (record2);
mIndex.insert (std::make_pair (id, mRecords.size()-1)); mIndex.insert (std::make_pair (Misc::StringUtils::lowerCase (id), mRecords.size()-1));
} }
else else
{ {
@ -306,7 +306,7 @@ namespace CSMWorld
void IdCollection<ESXRecordT>::appendRecord (const RecordBase& record) void IdCollection<ESXRecordT>::appendRecord (const RecordBase& record)
{ {
mRecords.push_back (dynamic_cast<const Record<ESXRecordT>&> (record)); mRecords.push_back (dynamic_cast<const Record<ESXRecordT>&> (record));
mIndex.insert (std::make_pair (getId (record), mRecords.size()-1)); mIndex.insert (std::make_pair (Misc::StringUtils::lowerCase (getId (record)), mRecords.size()-1));
} }
template<typename ESXRecordT> template<typename ESXRecordT>

View file

@ -1,8 +1,11 @@
#include "operation.hpp" #include "operation.hpp"
#include <sstream> #include <sstream>
#include <QProgressBar>
#include <QPushButton>
#include <QVBoxLayout>
#include "../../model/doc/document.hpp" #include "../../model/doc/document.hpp"
void CSVDoc::Operation::updateLabel (int threads) void CSVDoc::Operation::updateLabel (int threads)
@ -28,24 +31,44 @@ void CSVDoc::Operation::updateLabel (int threads)
stream << name << " (%p%)"; stream << name << " (%p%)";
} }
setFormat (stream.str().c_str()); mProgressBar->setFormat (stream.str().c_str());
} }
} }
CSVDoc::Operation::Operation (int type) : mType (type), mStalling (false) CSVDoc::Operation::Operation (int type, QWidget* parent) : mType (type), mStalling (false)
{ {
/// \todo Add a cancel button or a pop up menu with a cancel item /// \todo Add a cancel button or a pop up menu with a cancel item
initWidgets();
setBarColor( type); setBarColor( type);
updateLabel(); updateLabel();
/// \todo assign different progress bar colours to allow the user to distinguish easily between operation types /// \todo assign different progress bar colours to allow the user to distinguish easily between operation types
} }
CSVDoc::Operation::~Operation()
{
delete mLayout;
delete mProgressBar;
delete mAbortButton;
}
void CSVDoc::Operation::initWidgets()
{
mProgressBar = new QProgressBar ();
mAbortButton = new QPushButton("Abort");
mLayout = new QHBoxLayout();
mLayout->addWidget (mProgressBar);
mLayout->addWidget (mAbortButton);
connect (mAbortButton, SIGNAL (clicked()), this, SLOT (abortOperation()));
}
void CSVDoc::Operation::setProgress (int current, int max, int threads) void CSVDoc::Operation::setProgress (int current, int max, int threads)
{ {
updateLabel (threads); updateLabel (threads);
setRange (0, max); mProgressBar->setRange (0, max);
setValue (current); mProgressBar->setValue (current);
} }
int CSVDoc::Operation::getType() const int CSVDoc::Operation::getType() const
@ -64,8 +87,6 @@ void CSVDoc::Operation::setBarColor (int type)
"margin: 2px 1px 1p 2px;" "margin: 2px 1px 1p 2px;"
"}"; "}";
// "QProgressBar::chunk {background-color: %1;}";
QString topColor = "#F2F6F8"; QString topColor = "#F2F6F8";
QString bottomColor = "#E0EFF9"; QString bottomColor = "#E0EFF9";
QString midTopColor = "#D8E1E7"; QString midTopColor = "#D8E1E7";
@ -82,7 +103,7 @@ void CSVDoc::Operation::setBarColor (int type)
midTopColor = "#F17432"; midTopColor = "#F17432";
midBottomColor = "#EA5507"; midBottomColor = "#EA5507";
bottomColor = "#FB955E"; // red gloss #2 bottomColor = "#FB955E"; // red gloss #2
//break; break;
case CSMDoc::State_Searching: case CSMDoc::State_Searching:
@ -90,7 +111,7 @@ void CSVDoc::Operation::setBarColor (int type)
midTopColor = "#ABD3EE"; midTopColor = "#ABD3EE";
midBottomColor = "#89C3EB"; midBottomColor = "#89C3EB";
bottomColor = "#D5EBFB"; //blue gloss #4 bottomColor = "#D5EBFB"; //blue gloss #4
//break; break;
case CSMDoc::State_Verifying: case CSMDoc::State_Verifying:
@ -98,7 +119,7 @@ void CSVDoc::Operation::setBarColor (int type)
midTopColor = "#8EB92A"; midTopColor = "#8EB92A";
midBottomColor = "#72AA00"; midBottomColor = "#72AA00";
bottomColor = "#9ECB2D"; //green gloss bottomColor = "#9ECB2D"; //green gloss
//break; break;
case CSMDoc::State_Compiling: case CSMDoc::State_Compiling:
@ -106,7 +127,7 @@ void CSVDoc::Operation::setBarColor (int type)
midTopColor = "#C19E67"; midTopColor = "#C19E67";
midBottomColor = "#B68D4C"; midBottomColor = "#B68D4C";
bottomColor = "#E9D4B3"; //l Brown 3D bottomColor = "#E9D4B3"; //l Brown 3D
//break; break;
default: default:
@ -116,5 +137,15 @@ void CSVDoc::Operation::setBarColor (int type)
midBottomColor = "#B5C6D0"; // gray gloss for undefined ops midBottomColor = "#B5C6D0"; // gray gloss for undefined ops
} }
setStyleSheet(style.arg(topColor).arg(midTopColor).arg(midBottomColor).arg(bottomColor)); mProgressBar->setStyleSheet(style.arg(topColor).arg(midTopColor).arg(midBottomColor).arg(bottomColor));
}
QHBoxLayout *CSVDoc::Operation::getLayout() const
{
return mLayout;
}
void CSVDoc::Operation::abortOperation()
{
emit abortOperation (mType);
} }

View file

@ -1,16 +1,23 @@
#ifndef CSV_DOC_OPERATION_H #ifndef CSV_DOC_OPERATION_H
#define CSV_DOC_OPERATION_H #define CSV_DOC_OPERATION_H
#include <QProgressBar> #include <QObject>
class QHBoxLayout;
class QPushButton;
class QProgressBar;
namespace CSVDoc namespace CSVDoc
{ {
class Operation : public QProgressBar class Operation : public QObject
{ {
Q_OBJECT Q_OBJECT
int mType; int mType;
bool mStalling; bool mStalling;
QProgressBar *mProgressBar;
QPushButton *mAbortButton;
QHBoxLayout *mLayout;
// not implemented // not implemented
Operation (const Operation&); Operation (const Operation&);
@ -20,15 +27,26 @@ namespace CSVDoc
public: public:
Operation (int type); Operation (int type, QWidget *parent);
~Operation();
void setProgress (int current, int max, int threads); void setProgress (int current, int max, int threads);
int getType() const; int getType() const;
QHBoxLayout *getLayout() const;
private: private:
void setBarColor (int type); void setBarColor (int type);
void initWidgets();
signals:
void abortOperation (int type);
private slots:
void abortOperation();
}; };
} }

View file

@ -1,7 +1,7 @@
#include "operations.hpp" #include "operations.hpp"
#include <QVBoxLayout> #include <QVBoxLayout>
#include <QHBoxLayout>
#include "operation.hpp" #include "operation.hpp"
@ -11,12 +11,14 @@ CSVDoc::Operations::Operations()
setFeatures (QDockWidget::NoDockWidgetFeatures); setFeatures (QDockWidget::NoDockWidgetFeatures);
QWidget *widget = new QWidget; QWidget *widgetContainer = new QWidget (this);
setWidget (widget);
mLayout = new QVBoxLayout; mLayout = new QVBoxLayout;
widget->setLayout (mLayout); widgetContainer->setLayout (mLayout);
setWidget (widgetContainer);
setVisible (false);
setFixedHeight (widgetContainer->height());
setTitleBarWidget (new QWidget (this));
} }
void CSVDoc::Operations::setProgress (int current, int max, int type, int threads) void CSVDoc::Operations::setProgress (int current, int max, int type, int threads)
@ -28,11 +30,20 @@ void CSVDoc::Operations::setProgress (int current, int max, int type, int thread
return; return;
} }
Operation *operation = new Operation (type); int oldCount = mOperations.size();
int newCount = oldCount + 1;
mLayout->addWidget (operation); Operation *operation = new Operation (type, this);
connect (operation, SIGNAL (abortOperation (int)), this, SIGNAL (abortOperation (int)));
mLayout->addLayout (operation->getLayout());
mOperations.push_back (operation); mOperations.push_back (operation);
operation->setProgress (current, max, threads); operation->setProgress (current, max, threads);
if ( oldCount > 0)
setFixedHeight (height()/oldCount * newCount);
setVisible (true);
} }
void CSVDoc::Operations::quitOperation (int type) void CSVDoc::Operations::quitOperation (int type)
@ -40,8 +51,19 @@ void CSVDoc::Operations::quitOperation (int type)
for (std::vector<Operation *>::iterator iter (mOperations.begin()); iter!=mOperations.end(); ++iter) for (std::vector<Operation *>::iterator iter (mOperations.begin()); iter!=mOperations.end(); ++iter)
if ((*iter)->getType()==type) if ((*iter)->getType()==type)
{ {
int oldCount = mOperations.size();
int newCount = oldCount - 1;
mLayout->removeItem ((*iter)->getLayout());
delete *iter; delete *iter;
mOperations.erase (iter); mOperations.erase (iter);
if (oldCount > 1)
setFixedHeight (height() / oldCount * newCount);
else
setVisible (false);
break; break;
} }
} }

View file

@ -31,6 +31,10 @@ namespace CSVDoc
void quitOperation (int type); void quitOperation (int type);
///< Calling this function for an operation that is not running is a no-op. ///< Calling this function for an operation that is not running is a no-op.
signals:
void abortOperation (int type);
}; };
} }

View file

@ -1,4 +1,3 @@
#include "subview.hpp" #include "subview.hpp"
CSVDoc::SubView::SubView (const CSMWorld::UniversalId& id) : mUniversalId (id) CSVDoc::SubView::SubView (const CSMWorld::UniversalId& id) : mUniversalId (id)

View file

@ -1,4 +1,3 @@
#include "view.hpp" #include "view.hpp"
#include <sstream> #include <sstream>
@ -7,6 +6,7 @@
#include <QCloseEvent> #include <QCloseEvent>
#include <QMenuBar> #include <QMenuBar>
#include <QMdiArea> #include <QMdiArea>
#include <QDockWidget>
#include "../../model/doc/document.hpp" #include "../../model/doc/document.hpp"
@ -117,13 +117,16 @@ void CSVDoc::View::updateActions()
mVerify->setEnabled (!(mDocument->getState() & CSMDoc::State_Verifying)); mVerify->setEnabled (!(mDocument->getState() & CSMDoc::State_Verifying));
} }
CSVDoc::View::View (ViewManager& viewManager, CSMDoc::Document *document, int totalViews) CSVDoc::View::View (ViewManager& viewManager, CSMDoc::Document *document, int totalViews, QMainWindow *viewParent)
: mViewManager (viewManager), mDocument (document), mViewIndex (totalViews-1), mViewTotal (totalViews) : mViewManager (viewManager), mDocument (document), mViewIndex (totalViews-1), mViewTotal (totalViews), QMainWindow (viewParent)
{ {
setDockOptions (QMainWindow::AllowNestedDocks); setDockOptions (QMainWindow::AllowNestedDocks);
resize (300, 300); /// \todo get default size from settings and set reasonable minimal size resize (300, 300); /// \todo get default size from settings and set reasonable minimal size
mSubViewWindow = new QMainWindow();
setCentralWidget (mSubViewWindow);
mOperations = new Operations; mOperations = new Operations;
addDockWidget (Qt::BottomDockWidgetArea, mOperations); addDockWidget (Qt::BottomDockWidgetArea, mOperations);
@ -133,6 +136,8 @@ CSVDoc::View::View (ViewManager& viewManager, CSMDoc::Document *document, int to
CSVWorld::addSubViewFactories (mSubViewFactory); CSVWorld::addSubViewFactories (mSubViewFactory);
CSVTools::addSubViewFactories (mSubViewFactory); CSVTools::addSubViewFactories (mSubViewFactory);
connect (mOperations, SIGNAL (abortOperation (int)), this, SLOT (abortOperation (int)));
} }
CSVDoc::View::~View() CSVDoc::View::~View()
@ -171,7 +176,7 @@ void CSVDoc::View::updateDocumentState()
for (int i=0; operations[i]!=-1; ++i) for (int i=0; operations[i]!=-1; ++i)
if (!(state & operations[i])) if (!(state & operations[i]))
mOperations->quitOperation (operations[i]); mOperations->quitOperation (operations[i]);
QList<CSVDoc::SubView *> subViews = findChildren<CSVDoc::SubView *>(); QList<CSVDoc::SubView *> subViews = findChildren<CSVDoc::SubView *>();
@ -195,7 +200,7 @@ void CSVDoc::View::addSubView (const CSMWorld::UniversalId& id)
/// \todo add an user setting to reuse sub views (on a per document basis or on a per top level view basis) /// \todo add an user setting to reuse sub views (on a per document basis or on a per top level view basis)
SubView *view = mSubViewFactory.makeSubView (id, *mDocument); SubView *view = mSubViewFactory.makeSubView (id, *mDocument);
addDockWidget (Qt::TopDockWidgetArea, view); mSubViewWindow->addDockWidget (Qt::TopDockWidgetArea, view);
connect (view, SIGNAL (focusId (const CSMWorld::UniversalId&)), this, connect (view, SIGNAL (focusId (const CSMWorld::UniversalId&)), this,
SLOT (addSubView (const CSMWorld::UniversalId&))); SLOT (addSubView (const CSMWorld::UniversalId&)));
@ -227,3 +232,14 @@ void CSVDoc::View::addGmstsSubView()
{ {
addSubView (CSMWorld::UniversalId::Type_Gmsts); addSubView (CSMWorld::UniversalId::Type_Gmsts);
} }
void CSVDoc::View::abortOperation (int type)
{
mDocument->abortOperation (type);
updateActions();
}
QDockWidget *CSVDoc::View::getOperations() const
{
return mOperations;
}

View file

@ -9,6 +9,7 @@
#include "subviewfactory.hpp" #include "subviewfactory.hpp"
class QAction; class QAction;
class QDockWidget;
namespace CSMDoc namespace CSMDoc
{ {
@ -40,6 +41,7 @@ namespace CSVDoc
std::vector<QAction *> mEditingActions; std::vector<QAction *> mEditingActions;
Operations *mOperations; Operations *mOperations;
SubViewFactoryManager mSubViewFactory; SubViewFactoryManager mSubViewFactory;
QMainWindow* mSubViewWindow;
// not implemented // not implemented
View (const View&); View (const View&);
@ -65,7 +67,7 @@ namespace CSVDoc
public: public:
View (ViewManager& viewManager, CSMDoc::Document *document, int totalViews); View (ViewManager& viewManager, CSMDoc::Document *document, int totalViews, QMainWindow *viewParent);
///< The ownership of \a document is not transferred to *this. ///< The ownership of \a document is not transferred to *this.
virtual ~View(); virtual ~View();
@ -80,6 +82,8 @@ namespace CSVDoc
void updateProgress (int current, int max, int type, int threads); void updateProgress (int current, int max, int type, int threads);
QDockWidget *getOperations() const;
signals: signals:
void newDocumentRequest(); void newDocumentRequest();
@ -101,6 +105,8 @@ namespace CSVDoc
void addGlobalsSubView(); void addGlobalsSubView();
void addGmstsSubView(); void addGmstsSubView();
void abortOperation (int type);
}; };
} }

View file

@ -59,7 +59,9 @@ CSVDoc::View *CSVDoc::ViewManager::addView (CSMDoc::Document *document)
this, SLOT (progress (int, int, int, int, CSMDoc::Document *))); this, SLOT (progress (int, int, int, int, CSMDoc::Document *)));
} }
View *view = new View (*this, document, countViews (document)+1); QMainWindow *mainWindow = new QMainWindow;
View *view = new View (*this, document, countViews (document)+1, mainWindow);
mViews.push_back (view); mViews.push_back (view);

View file

@ -19,11 +19,11 @@
#include "inventorywindow.hpp" #include "inventorywindow.hpp"
static const float BALANCE_CHANGE_INITIAL_PAUSE = 0.5; // in seconds
static const float BALANCE_CHANGE_INTERVAL = 0.1; // in seconds
namespace MWGui namespace MWGui
{ {
const float TradeWindow::sBalanceChangeInitialPause = 0.5;
const float TradeWindow::sBalanceChangeInterval = 0.1;
TradeWindow::TradeWindow(MWBase::WindowManager& parWindowManager) : TradeWindow::TradeWindow(MWBase::WindowManager& parWindowManager) :
WindowBase("openmw_trade_window.layout", parWindowManager) WindowBase("openmw_trade_window.layout", parWindowManager)
, ContainerBase(NULL) // no drag&drop , ContainerBase(NULL) // no drag&drop
@ -157,7 +157,7 @@ namespace MWGui
mBalanceChangePause -= frameDuration; mBalanceChangePause -= frameDuration;
if (mBalanceChangePause < 0.0) { if (mBalanceChangePause < 0.0) {
mBalanceChangePause += BALANCE_CHANGE_INTERVAL; mBalanceChangePause += sBalanceChangeInterval;
if (mBalanceButtonsState == BBS_Increase) if (mBalanceButtonsState == BBS_Increase)
onIncreaseButtonTriggered(); onIncreaseButtonTriggered();
else if (mBalanceButtonsState == BBS_Decrease) else if (mBalanceButtonsState == BBS_Decrease)
@ -296,14 +296,14 @@ namespace MWGui
void TradeWindow::onIncreaseButtonPressed(MyGUI::Widget* _sender, int _left, int _top, MyGUI::MouseButton _id) void TradeWindow::onIncreaseButtonPressed(MyGUI::Widget* _sender, int _left, int _top, MyGUI::MouseButton _id)
{ {
mBalanceButtonsState = BBS_Increase; mBalanceButtonsState = BBS_Increase;
mBalanceChangePause = BALANCE_CHANGE_INITIAL_PAUSE; mBalanceChangePause = sBalanceChangeInitialPause;
onIncreaseButtonTriggered(); onIncreaseButtonTriggered();
} }
void TradeWindow::onDecreaseButtonPressed(MyGUI::Widget* _sender, int _left, int _top, MyGUI::MouseButton _id) void TradeWindow::onDecreaseButtonPressed(MyGUI::Widget* _sender, int _left, int _top, MyGUI::MouseButton _id)
{ {
mBalanceButtonsState = BBS_Decrease; mBalanceButtonsState = BBS_Decrease;
mBalanceChangePause = BALANCE_CHANGE_INITIAL_PAUSE; mBalanceChangePause = sBalanceChangeInitialPause;
onDecreaseButtonTriggered(); onDecreaseButtonTriggered();
} }

View file

@ -37,6 +37,9 @@ namespace MWGui
void onFrame(float frameDuration); void onFrame(float frameDuration);
protected: protected:
static const float sBalanceChangeInitialPause; // in seconds
static const float sBalanceChangeInterval; // in seconds
MyGUI::Button* mFilterAll; MyGUI::Button* mFilterAll;
MyGUI::Button* mFilterWeapon; MyGUI::Button* mFilterWeapon;
MyGUI::Button* mFilterApparel; MyGUI::Button* mFilterApparel;

View file

@ -163,7 +163,9 @@ void Actors::updateObjectCell(const MWWorld::Ptr &ptr)
{ {
/// \note Update key (Ptr's are compared only with refdata so mCell /// \note Update key (Ptr's are compared only with refdata so mCell
/// on key is outdated), maybe redundant /// on key is outdated), maybe redundant
Animation *anim = iter->second; NpcAnimation *anim = static_cast<NpcAnimation *>(iter->second);
anim->updateParts(MWWorld::Class::get(ptr).getInventoryStore(ptr));
mAllActors.erase(iter); mAllActors.erase(iter);
mAllActors[ptr] = anim; mAllActors[ptr] = anim;
} }

View file

@ -48,21 +48,21 @@ NpcAnimation::~NpcAnimation()
NpcAnimation::NpcAnimation(const MWWorld::Ptr& ptr, Ogre::SceneNode* node, MWWorld::InventoryStore& inv, int visibilityFlags) NpcAnimation::NpcAnimation(const MWWorld::Ptr& ptr, Ogre::SceneNode* node, MWWorld::InventoryStore& inv, int visibilityFlags)
: Animation(), : Animation(),
mStateID(-1), mStateID(-1),
mInv(inv), mInv(&inv),
mTimeToChange(0), mTimeToChange(0),
mVisibilityFlags(visibilityFlags), mVisibilityFlags(visibilityFlags),
mRobe(mInv.end()), mRobe(mInv->end()),
mHelmet(mInv.end()), mHelmet(mInv->end()),
mShirt(mInv.end()), mShirt(mInv->end()),
mCuirass(mInv.end()), mCuirass(mInv->end()),
mGreaves(mInv.end()), mGreaves(mInv->end()),
mPauldronL(mInv.end()), mPauldronL(mInv->end()),
mPauldronR(mInv.end()), mPauldronR(mInv->end()),
mBoots(mInv.end()), mBoots(mInv->end()),
mPants(mInv.end()), mPants(mInv->end()),
mGloveL(mInv.end()), mGloveL(mInv->end()),
mGloveR(mInv.end()), mGloveR(mInv->end()),
mSkirtIter(mInv.end()) mSkirtIter(mInv->end())
{ {
mNpc = ptr.get<ESM::NPC>()->mBase; mNpc = ptr.get<ESM::NPC>()->mBase;
@ -160,7 +160,7 @@ void NpcAnimation::updateParts()
}; };
for(size_t i = 0;i < sizeof(slotlist)/sizeof(slotlist[0]);i++) for(size_t i = 0;i < sizeof(slotlist)/sizeof(slotlist[0]);i++)
{ {
MWWorld::ContainerStoreIterator iter = mInv.getSlot(slotlist[i].slot); MWWorld::ContainerStoreIterator iter = mInv->getSlot(slotlist[i].slot);
if(*slotlist[i].iter != iter) if(*slotlist[i].iter != iter)
{ {
*slotlist[i].iter = iter; *slotlist[i].iter = iter;
@ -171,7 +171,7 @@ void NpcAnimation::updateParts()
if(apparelChanged) if(apparelChanged)
{ {
if(mRobe != mInv.end()) if(mRobe != mInv->end())
{ {
MWWorld::Ptr ptr = *mRobe; MWWorld::Ptr ptr = *mRobe;
@ -191,7 +191,7 @@ void NpcAnimation::updateParts()
reserveIndividualPart(ESM::PRT_RPauldron, MWWorld::InventoryStore::Slot_Robe, 5); reserveIndividualPart(ESM::PRT_RPauldron, MWWorld::InventoryStore::Slot_Robe, 5);
reserveIndividualPart(ESM::PRT_LPauldron, MWWorld::InventoryStore::Slot_Robe, 5); reserveIndividualPart(ESM::PRT_LPauldron, MWWorld::InventoryStore::Slot_Robe, 5);
} }
if(mSkirtIter != mInv.end()) if(mSkirtIter != mInv->end())
{ {
MWWorld::Ptr ptr = *mSkirtIter; MWWorld::Ptr ptr = *mSkirtIter;
@ -203,39 +203,39 @@ void NpcAnimation::updateParts()
reserveIndividualPart(ESM::PRT_LLeg, MWWorld::InventoryStore::Slot_Skirt, 4); reserveIndividualPart(ESM::PRT_LLeg, MWWorld::InventoryStore::Slot_Skirt, 4);
} }
if(mHelmet != mInv.end()) if(mHelmet != mInv->end())
{ {
removeIndividualPart(ESM::PRT_Hair); removeIndividualPart(ESM::PRT_Hair);
const ESM::Armor *armor = (mHelmet->get<ESM::Armor>())->mBase; const ESM::Armor *armor = (mHelmet->get<ESM::Armor>())->mBase;
std::vector<ESM::PartReference> parts = armor->mParts.mParts; std::vector<ESM::PartReference> parts = armor->mParts.mParts;
addPartGroup(MWWorld::InventoryStore::Slot_Helmet, 3, parts); addPartGroup(MWWorld::InventoryStore::Slot_Helmet, 3, parts);
} }
if(mCuirass != mInv.end()) if(mCuirass != mInv->end())
{ {
const ESM::Armor *armor = (mCuirass->get<ESM::Armor>())->mBase; const ESM::Armor *armor = (mCuirass->get<ESM::Armor>())->mBase;
std::vector<ESM::PartReference> parts = armor->mParts.mParts; std::vector<ESM::PartReference> parts = armor->mParts.mParts;
addPartGroup(MWWorld::InventoryStore::Slot_Cuirass, 3, parts); addPartGroup(MWWorld::InventoryStore::Slot_Cuirass, 3, parts);
} }
if(mGreaves != mInv.end()) if(mGreaves != mInv->end())
{ {
const ESM::Armor *armor = (mGreaves->get<ESM::Armor>())->mBase; const ESM::Armor *armor = (mGreaves->get<ESM::Armor>())->mBase;
std::vector<ESM::PartReference> parts = armor->mParts.mParts; std::vector<ESM::PartReference> parts = armor->mParts.mParts;
addPartGroup(MWWorld::InventoryStore::Slot_Greaves, 3, parts); addPartGroup(MWWorld::InventoryStore::Slot_Greaves, 3, parts);
} }
if(mPauldronL != mInv.end()) if(mPauldronL != mInv->end())
{ {
const ESM::Armor *armor = (mPauldronL->get<ESM::Armor>())->mBase; const ESM::Armor *armor = (mPauldronL->get<ESM::Armor>())->mBase;
std::vector<ESM::PartReference> parts = armor->mParts.mParts; std::vector<ESM::PartReference> parts = armor->mParts.mParts;
addPartGroup(MWWorld::InventoryStore::Slot_LeftPauldron, 3, parts); addPartGroup(MWWorld::InventoryStore::Slot_LeftPauldron, 3, parts);
} }
if(mPauldronR != mInv.end()) if(mPauldronR != mInv->end())
{ {
const ESM::Armor *armor = (mPauldronR->get<ESM::Armor>())->mBase; const ESM::Armor *armor = (mPauldronR->get<ESM::Armor>())->mBase;
std::vector<ESM::PartReference> parts = armor->mParts.mParts; std::vector<ESM::PartReference> parts = armor->mParts.mParts;
addPartGroup(MWWorld::InventoryStore::Slot_RightPauldron, 3, parts); addPartGroup(MWWorld::InventoryStore::Slot_RightPauldron, 3, parts);
} }
if(mBoots != mInv.end()) if(mBoots != mInv->end())
{ {
if(mBoots->getTypeName() == typeid(ESM::Clothing).name()) if(mBoots->getTypeName() == typeid(ESM::Clothing).name())
{ {
@ -250,7 +250,7 @@ void NpcAnimation::updateParts()
addPartGroup(MWWorld::InventoryStore::Slot_Boots, 3, parts); addPartGroup(MWWorld::InventoryStore::Slot_Boots, 3, parts);
} }
} }
if(mGloveL != mInv.end()) if(mGloveL != mInv->end())
{ {
if(mGloveL->getTypeName() == typeid(ESM::Clothing).name()) if(mGloveL->getTypeName() == typeid(ESM::Clothing).name())
{ {
@ -265,7 +265,7 @@ void NpcAnimation::updateParts()
addPartGroup(MWWorld::InventoryStore::Slot_LeftGauntlet, 3, parts); addPartGroup(MWWorld::InventoryStore::Slot_LeftGauntlet, 3, parts);
} }
} }
if(mGloveR != mInv.end()) if(mGloveR != mInv->end())
{ {
if(mGloveR->getTypeName() == typeid(ESM::Clothing).name()) if(mGloveR->getTypeName() == typeid(ESM::Clothing).name())
{ {
@ -282,13 +282,13 @@ void NpcAnimation::updateParts()
} }
if(mShirt != mInv.end()) if(mShirt != mInv->end())
{ {
const ESM::Clothing *clothes = (mShirt->get<ESM::Clothing>())->mBase; const ESM::Clothing *clothes = (mShirt->get<ESM::Clothing>())->mBase;
std::vector<ESM::PartReference> parts = clothes->mParts.mParts; std::vector<ESM::PartReference> parts = clothes->mParts.mParts;
addPartGroup(MWWorld::InventoryStore::Slot_Shirt, 2, parts); addPartGroup(MWWorld::InventoryStore::Slot_Shirt, 2, parts);
} }
if(mPants != mInv.end()) if(mPants != mInv->end())
{ {
const ESM::Clothing *clothes = (mPants->get<ESM::Clothing>())->mBase; const ESM::Clothing *clothes = (mPants->get<ESM::Clothing>())->mBase;
std::vector<ESM::PartReference> parts = clothes->mParts.mParts; std::vector<ESM::PartReference> parts = clothes->mParts.mParts;

View file

@ -17,7 +17,7 @@ namespace MWRender{
class NpcAnimation: public Animation{ class NpcAnimation: public Animation{
private: private:
MWWorld::InventoryStore& mInv; MWWorld::InventoryStore *mInv;
int mStateID; int mStateID;
int mPartslots[27]; //Each part slot is taken by clothing, armor, or is empty int mPartslots[27]; //Each part slot is taken by clothing, armor, or is empty
@ -78,7 +78,13 @@ public:
virtual ~NpcAnimation(); virtual ~NpcAnimation();
NifOgre::EntityList insertBoundedPart(const std::string &mesh, int group, const std::string &bonename); NifOgre::EntityList insertBoundedPart(const std::string &mesh, int group, const std::string &bonename);
virtual void runAnimation(float timepassed); virtual void runAnimation(float timepassed);
void updateParts(); void updateParts();
void updateParts(MWWorld::InventoryStore &inventory) {
mInv = &inventory;
updateParts();
}
void removeEntities(NifOgre::EntityList &entities); void removeEntities(NifOgre::EntityList &entities);
void removeIndividualPart(int type); void removeIndividualPart(int type);
void reserveIndividualPart(int type, int group, int priority); void reserveIndividualPart(int type, int group, int priority);

View file

@ -514,9 +514,5 @@ void Objects::updateObjectCell(const MWWorld::Ptr &ptr)
node = mCellSceneNodes[newCell]; node = mCellSceneNodes[newCell];
} }
node->addChild(ptr.getRefData().getBaseNode()); node->addChild(ptr.getRefData().getBaseNode());
/// \note Still unaware how to move aabb and static w/o full rebuild,
/// moving static objects may cause problems
insertMesh(ptr, MWWorld::Class::get(ptr).getModel(ptr));
} }

View file

@ -25,7 +25,7 @@ namespace
const MWWorld::Class& class_ = const MWWorld::Class& class_ =
MWWorld::Class::get (MWWorld::Ptr (&*cellRefList.mList.begin(), &cell)); MWWorld::Class::get (MWWorld::Ptr (&*cellRefList.mList.begin(), &cell));
int numRefs = cellRefList.mList.size(); size_t numRefs = cellRefList.mList.size();
int current = 0; int current = 0;
for (typename T::List::iterator it = cellRefList.mList.begin(); for (typename T::List::iterator it = cellRefList.mList.begin();
it != cellRefList.mList.end(); it++) it != cellRefList.mList.end(); it++)

View file

@ -17,7 +17,7 @@ namespace MWWorld
virtual void setUp() {} virtual void setUp() {}
virtual void listIdentifier(std::vector<std::string> &list) const {} virtual void listIdentifier(std::vector<std::string> &list) const {}
virtual int getSize() const = 0; virtual size_t getSize() const = 0;
virtual void load(ESM::ESMReader &esm, const std::string &id) = 0; virtual void load(ESM::ESMReader &esm, const std::string &id) = 0;
virtual bool eraseStatic(const std::string &id) {return false;} virtual bool eraseStatic(const std::string &id) {return false;}
@ -158,7 +158,7 @@ namespace MWWorld
return mShared.end(); return mShared.end();
} }
int getSize() const { size_t getSize() const {
return mShared.size(); return mShared.size();
} }
@ -275,11 +275,11 @@ namespace MWWorld
return ptr; return ptr;
} }
int getSize() const { size_t getSize() const {
return mStatic.size(); return mStatic.size();
} }
int getSize(size_t plugin) const { size_t getSize(size_t plugin) const {
assert(plugin < mStatic.size()); assert(plugin < mStatic.size());
return mStatic[plugin].size(); return mStatic[plugin].size();
} }
@ -344,7 +344,7 @@ namespace MWWorld
} }
int getSize() const { size_t getSize() const {
return mStatic.size(); return mStatic.size();
} }
@ -573,7 +573,7 @@ namespace MWWorld
return 0; return 0;
} }
int getSize() const { size_t getSize() const {
return mSharedInt.size() + mSharedExt.size(); return mSharedInt.size() + mSharedExt.size();
} }
@ -707,7 +707,7 @@ namespace MWWorld
mStatic.back().load(esm); mStatic.back().load(esm);
} }
int getSize() const { size_t getSize() const {
return mStatic.size(); return mStatic.size();
} }
@ -936,7 +936,7 @@ namespace MWWorld
} }
} }
int getSize() const { size_t getSize() const {
return mStatic.size(); return mStatic.size();
} }

View file

@ -746,7 +746,11 @@ namespace MWWorld
copyObjectToCell(ptr, newCell, pos); copyObjectToCell(ptr, newCell, pos);
else if (!mWorldScene->isCellActive(newCell)) else if (!mWorldScene->isCellActive(newCell))
{ {
MWWorld::Class::get(ptr).copyToCell(ptr, newCell); MWWorld::Class::get(ptr)
.copyToCell(ptr, newCell)
.getRefData()
.setBaseNode(0);
mWorldScene->removeObjectFromScene(ptr); mWorldScene->removeObjectFromScene(ptr);
mLocalScripts.remove(ptr); mLocalScripts.remove(ptr);
removeContainerScripts (ptr); removeContainerScripts (ptr);

View file

@ -136,15 +136,15 @@ void ESMWriter::writeHNString(const std::string& name, const std::string& data)
endRecord(name); endRecord(name);
} }
void ESMWriter::writeHNString(const std::string& name, const std::string& data, int size) void ESMWriter::writeHNString(const std::string& name, const std::string& data, size_t size)
{ {
assert(static_cast<int> (data.size()) <= size); assert(data.size() <= size);
startSubRecord(name); startSubRecord(name);
writeHString(data); writeHString(data);
if (static_cast<int> (data.size()) < size) if (data.size() < size)
{ {
for (int i = data.size(); i < size; ++i) for (size_t i = data.size(); i < size; ++i)
write("\0",1); write("\0",1);
} }
@ -177,7 +177,7 @@ void ESMWriter::writeName(const std::string& name)
write(name.c_str(), name.size()); write(name.c_str(), name.size());
} }
void ESMWriter::write(const char* data, int size) void ESMWriter::write(const char* data, size_t size)
{ {
if (count && !m_records.empty()) if (count && !m_records.empty())
{ {

View file

@ -16,7 +16,7 @@ class ESMWriter
{ {
std::string name; std::string name;
std::streampos position; std::streampos position;
int size; size_t size;
}; };
public: public:
@ -35,7 +35,7 @@ public:
void close(); void close();
void writeHNString(const std::string& name, const std::string& data); void writeHNString(const std::string& name, const std::string& data);
void writeHNString(const std::string& name, const std::string& data, int size); void writeHNString(const std::string& name, const std::string& data, size_t size);
void writeHNCString(const std::string& name, const std::string& data) void writeHNCString(const std::string& name, const std::string& data)
{ {
startSubRecord(name); startSubRecord(name);
@ -76,7 +76,7 @@ public:
} }
template<typename T> template<typename T>
void writeT(const T& data, int size) void writeT(const T& data, size_t size)
{ {
write((char*)&data, size); write((char*)&data, size);
} }
@ -87,7 +87,7 @@ public:
void writeHString(const std::string& data); void writeHString(const std::string& data);
void writeHCString(const std::string& data); void writeHCString(const std::string& data);
void writeName(const std::string& data); void writeName(const std::string& data);
void write(const char* data, int size); void write(const char* data, size_t size);
private: private:
std::list<MasterData> m_masters; std::list<MasterData> m_masters;

View file

@ -37,7 +37,7 @@
//TODO: when threading is needed, enable these //TODO: when threading is needed, enable these
//#include <boost/mutex.hpp> //#include <boost/mutex.hpp>
//#include <boost/thread/locks.hpp> #include <boost/thread/locks.hpp>
namespace Nif namespace Nif
{ {

View file

@ -70,7 +70,7 @@ Utf8Encoder::Utf8Encoder(const FromType sourceEncoding):
} }
} }
std::string Utf8Encoder::getUtf8(const char* input, int size) std::string Utf8Encoder::getUtf8(const char* input, size_t size)
{ {
// Double check that the input string stops at some point (it might // Double check that the input string stops at some point (it might
// contain zero terminators before this, inside its own data, which // contain zero terminators before this, inside its own data, which
@ -111,7 +111,7 @@ std::string Utf8Encoder::getUtf8(const char* input, int size)
return std::string(&mOutput[0], outlen); return std::string(&mOutput[0], outlen);
} }
std::string Utf8Encoder::getLegacyEnc(const char *input, int size) std::string Utf8Encoder::getLegacyEnc(const char *input, size_t size)
{ {
// Double check that the input string stops at some point (it might // Double check that the input string stops at some point (it might
// contain zero terminators before this, inside its own data, which // contain zero terminators before this, inside its own data, which

View file

@ -27,13 +27,13 @@ namespace ToUTF8
Utf8Encoder(FromType sourceEncoding); Utf8Encoder(FromType sourceEncoding);
// Convert to UTF8 from the previously given code page. // Convert to UTF8 from the previously given code page.
std::string getUtf8(const char *input, int size); std::string getUtf8(const char *input, size_t size);
inline std::string getUtf8(const std::string &str) inline std::string getUtf8(const std::string &str)
{ {
return getUtf8(str.c_str(), str.size()); return getUtf8(str.c_str(), str.size());
} }
std::string getLegacyEnc(const char *input, int size); std::string getLegacyEnc(const char *input, size_t size);
inline std::string getLegacyEnc(const std::string &str) inline std::string getLegacyEnc(const std::string &str)
{ {
return getLegacyEnc(str.c_str(), str.size()); return getLegacyEnc(str.c_str(), str.size());

View file

@ -40,6 +40,7 @@ Nikolay Kasyanov (corristo)
Pieter van der Kloet (pvdk) Pieter van der Kloet (pvdk)
Roman Melnik (Kromgart) Roman Melnik (Kromgart)
Sebastian Wick (swick) Sebastian Wick (swick)
Sergey Shambir
Sylvain T. (Garvek) Sylvain T. (Garvek)
Tom Mason (wheybags) Tom Mason (wheybags)

View file

@ -2,41 +2,45 @@
<MyGUI type="Layout"> <MyGUI type="Layout">
<Widget type="Window" skin="" layer="Windows" align="Left|Top" position="0 0 512 256" name="_Main"> <Widget type="Window" skin="" layer="Windows" align="Left|Top" position="0 0 565 390" name="_Main">
<Widget type="ImageBox" skin="ImageBox" position_real="0 0 1 1" align="Top|Right" name="BookImage"> <Widget type="ImageBox" skin="ImageBox" position="0 0 565 390" align="Top|Right" name="JImage">
<Property key="ImageTexture" value="textures\tx_menubook.dds"/> <Property key="ImageTexture" value="textures\tx_menubook.dds"/>
<Property key="ImageCoord" value="50 0 412 256"/>
<Widget type="ImageButton" skin="ImageBox" position="251 220 128 32" name="NextPageBTN"> <Widget type="ImageButton" skin="ImageBox" position="300 350 48 32" name="NextPageBTN">
<Property key="ImageCoord" value="0 0 48 32"/>
<Property key="ImageHighlighted" value="textures\tx_menubook_next_over.dds"/> <Property key="ImageHighlighted" value="textures\tx_menubook_next_over.dds"/>
<Property key="ImageNormal" value="textures\tx_menubook_next_idle.dds"/> <Property key="ImageNormal" value="textures\tx_menubook_next_idle.dds"/>
<Property key="ImagePushed" value="textures\tx_menubook_next_pressed.dds"/> <Property key="ImagePushed" value="textures\tx_menubook_next_pressed.dds"/>
</Widget> </Widget>
<Widget type="ImageButton" skin="ImageBox" position="165 220 128 32" name="PrevPageBTN"> <Widget type="ImageButton" skin="ImageBox" position="220 350 48 32" name="PrevPageBTN">
<Property key="ImageCoord" value="0 0 48 32"/>
<Property key="ImageHighlighted" value="textures\tx_menubook_prev_over.dds"/> <Property key="ImageHighlighted" value="textures\tx_menubook_prev_over.dds"/>
<Property key="ImageNormal" value="textures\tx_menubook_prev_idle.dds"/> <Property key="ImageNormal" value="textures\tx_menubook_prev_idle.dds"/>
<Property key="ImagePushed" value="textures\tx_menubook_prev_pressed.dds"/> <Property key="ImagePushed" value="textures\tx_menubook_prev_pressed.dds"/>
</Widget> </Widget>
<Widget type="ImageButton" skin="ImageBox" position="75 220 128 32" name="TakeButton"> <Widget type="ImageButton" skin="ImageBox" position="40 350 64 32" name="TakeButton">
<Property key="ImageHighlighted" value="textures\tx_menubook_take_over.dds"/> <Property key="ImageHighlighted" value="textures\tx_menubook_take_over.dds"/>
<Property key="ImageNormal" value="textures\tx_menubook_take_idle.dds"/> <Property key="ImageNormal" value="textures\tx_menubook_take_idle.dds"/>
<Property key="ImagePushed" value="textures\tx_menubook_take_pressed.dds"/> <Property key="ImagePushed" value="textures\tx_menubook_take_pressed.dds"/>
</Widget> </Widget>
<Widget type="ImageButton" skin="ImageBox" position="360 220 128 32" name="CloseButton"> <Widget type="ImageButton" skin="ImageBox" position="475 350 48 32" name="CloseButton">
<Property key="ImageCoord" value="0 0 48 32"/>
<Property key="ImageHighlighted" value="textures\tx_menubook_close_over.dds"/> <Property key="ImageHighlighted" value="textures\tx_menubook_close_over.dds"/>
<Property key="ImageNormal" value="textures\tx_menubook_close_idle.dds"/> <Property key="ImageNormal" value="textures\tx_menubook_close_idle.dds"/>
<Property key="ImagePushed" value="textures\tx_menubook_close_pressed.dds"/> <Property key="ImagePushed" value="textures\tx_menubook_close_pressed.dds"/>
</Widget> </Widget>
<Widget type="TextBox" skin="NormalText" position="155 215 24 24" name="LeftPageNumber"> <Widget type="TextBox" skin="NormalText" position="150 350 32 16" name="LeftPageNumber">
<Property key="TextColour" value="0 0 0"/> <Property key="TextColour" value="0 0 0"/>
</Widget> </Widget>
<Widget type="TextBox" skin="NormalText" position="325 215 24 24" name="RightPageNumber"> <Widget type="TextBox" skin="NormalText" position="410 350 32 16" name="RightPageNumber">
<Property key="TextColour" value="0 0 0"/> <Property key="TextColour" value="0 0 0"/>
</Widget> </Widget>
<Widget type="Widget" skin="" position_real="0.15 0.1 0.3 0.75" name = "LeftPage"/> <Widget type="Widget" skin="" position="30 22 240 300" name = "LeftPage"/>
<Widget type="Widget" skin="" position_real="0.55 0.1 0.3 0.75" name = "RightPage"/> <Widget type="Widget" skin="" position="300 22 240 300" name = "RightPage"/>
</Widget> </Widget>
</Widget> </Widget>