mirror of
https://github.com/OpenMW/openmw.git
synced 2026-01-09 16:31:18 +00:00
update offer player side, next frame update view
This commit is contained in:
parent
0247082e19
commit
a6cf359820
9 changed files with 96 additions and 61 deletions
|
|
@ -43,6 +43,7 @@ namespace MWGui
|
|||
, mSortModel(nullptr)
|
||||
, mModel(nullptr)
|
||||
, mSelectedItem(-1)
|
||||
, mUpdateNextFrame(false)
|
||||
, mDragAndDrop(dragAndDrop)
|
||||
, mMessageBoxManager(manager)
|
||||
{
|
||||
|
|
@ -141,7 +142,13 @@ namespace MWGui
|
|||
void CompanionWindow::onFrame(float dt)
|
||||
{
|
||||
checkReferenceAvailable();
|
||||
updateEncumbranceBar();
|
||||
|
||||
if (mUpdateNextFrame)
|
||||
{
|
||||
updateEncumbranceBar();
|
||||
mItemView->update();
|
||||
mUpdateNextFrame = false;
|
||||
}
|
||||
}
|
||||
|
||||
void CompanionWindow::updateEncumbranceBar()
|
||||
|
|
@ -204,9 +211,13 @@ namespace MWGui
|
|||
mSortModel = nullptr;
|
||||
}
|
||||
|
||||
void CompanionWindow::updateItemView()
|
||||
void CompanionWindow::itemAdded(const MWWorld::ConstPtr& item, int count)
|
||||
{
|
||||
mItemView->update();
|
||||
mUpdateNextFrame = true;
|
||||
}
|
||||
|
||||
void CompanionWindow::itemRemoved(const MWWorld::ConstPtr& item, int count)
|
||||
{
|
||||
mUpdateNextFrame = true;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -32,10 +32,8 @@ namespace MWGui
|
|||
void onFrame(float dt) override;
|
||||
void clear() override { resetReference(); }
|
||||
|
||||
void updateItemView();
|
||||
|
||||
void itemAdded(const MWWorld::ConstPtr& item, int count) override { updateItemView(); }
|
||||
void itemRemoved(const MWWorld::ConstPtr& item, int count) override { updateItemView(); }
|
||||
void itemAdded(const MWWorld::ConstPtr& item, int count) override;
|
||||
void itemRemoved(const MWWorld::ConstPtr& item, int count) override;
|
||||
|
||||
std::string_view getWindowIdForLua() const override { return "Companion"; }
|
||||
|
||||
|
|
@ -44,6 +42,7 @@ namespace MWGui
|
|||
SortFilterItemModel* mSortModel;
|
||||
CompanionItemModel* mModel;
|
||||
int mSelectedItem;
|
||||
bool mUpdateNextFrame;
|
||||
|
||||
DragAndDrop* mDragAndDrop;
|
||||
|
||||
|
|
|
|||
|
|
@ -38,6 +38,7 @@ namespace MWGui
|
|||
, mSortModel(nullptr)
|
||||
, mModel(nullptr)
|
||||
, mSelectedItem(-1)
|
||||
, mUpdateNextFrame(false)
|
||||
, mTreatNextOpenAsLoot(false)
|
||||
{
|
||||
getWidget(mDisposeCorpseButton, "DisposeCorpseButton");
|
||||
|
|
@ -323,8 +324,24 @@ namespace MWGui
|
|||
MWBase::Environment::get().getWindowManager()->removeGuiMode(GM_Container);
|
||||
}
|
||||
|
||||
void ContainerWindow::updateItemView()
|
||||
void ContainerWindow::onFrame(float dt)
|
||||
{
|
||||
mItemView->update();
|
||||
checkReferenceAvailable();
|
||||
|
||||
if (mUpdateNextFrame)
|
||||
{
|
||||
mItemView->update();
|
||||
mUpdateNextFrame = false;
|
||||
}
|
||||
}
|
||||
|
||||
void ContainerWindow::itemAdded(const MWWorld::ConstPtr& item, int count)
|
||||
{
|
||||
mUpdateNextFrame = true;
|
||||
}
|
||||
|
||||
void ContainerWindow::itemRemoved(const MWWorld::ConstPtr& item, int count)
|
||||
{
|
||||
mUpdateNextFrame = true;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@ namespace MWGui
|
|||
void onClose() override;
|
||||
void clear() override { resetReference(); }
|
||||
|
||||
void onFrame(float dt) override { checkReferenceAvailable(); }
|
||||
void onFrame(float dt) override;
|
||||
|
||||
void resetReference() override;
|
||||
|
||||
|
|
@ -40,10 +40,8 @@ namespace MWGui
|
|||
|
||||
void treatNextOpenAsLoot() { mTreatNextOpenAsLoot = true; }
|
||||
|
||||
void updateItemView();
|
||||
|
||||
void itemAdded(const MWWorld::ConstPtr& item, int count) override { updateItemView(); }
|
||||
void itemRemoved(const MWWorld::ConstPtr& item, int count) override { updateItemView(); }
|
||||
void itemAdded(const MWWorld::ConstPtr& item, int count) override;
|
||||
void itemRemoved(const MWWorld::ConstPtr& item, int count) override;
|
||||
|
||||
std::string_view getWindowIdForLua() const override { return "Container"; }
|
||||
|
||||
|
|
@ -54,6 +52,7 @@ namespace MWGui
|
|||
SortFilterItemModel* mSortModel;
|
||||
ItemModel* mModel;
|
||||
int mSelectedItem;
|
||||
bool mUpdateNextFrame;
|
||||
bool mTreatNextOpenAsLoot;
|
||||
MyGUI::Button* mDisposeCorpseButton;
|
||||
MyGUI::Button* mTakeButton;
|
||||
|
|
|
|||
|
|
@ -84,13 +84,12 @@ namespace MWGui
|
|||
mDraggedWidget->setNeedMouseFocus(false);
|
||||
mDraggedWidget->setCount(count);
|
||||
|
||||
sourceView->update();
|
||||
|
||||
MWBase::Environment::get().getWindowManager()->setDragDrop(true);
|
||||
|
||||
mIsOnDragAndDrop = true;
|
||||
|
||||
MWBase::Environment::get().getWindowManager()->getInventoryWindow()->updateItemView();
|
||||
// Update item view after completing drag-and-drop setup
|
||||
mSourceView->update();
|
||||
}
|
||||
|
||||
void DragAndDrop::drop(ItemModel* targetModel, ItemView* targetView)
|
||||
|
|
@ -153,8 +152,12 @@ namespace MWGui
|
|||
// since mSourceView doesn't get updated in drag()
|
||||
MWBase::Environment::get().getWindowManager()->getInventoryWindow()->updateItemView();
|
||||
|
||||
MyGUI::Gui::getInstance().destroyWidget(mDraggedWidget);
|
||||
mDraggedWidget = nullptr;
|
||||
if (mDraggedWidget)
|
||||
{
|
||||
MyGUI::Gui::getInstance().destroyWidget(mDraggedWidget);
|
||||
mDraggedWidget = nullptr;
|
||||
}
|
||||
|
||||
MWBase::Environment::get().getWindowManager()->setDragDrop(false);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -86,7 +86,7 @@ namespace MWGui
|
|||
, mLastYSize(0)
|
||||
, mPreview(std::make_unique<MWRender::InventoryPreview>(parent, resourceSystem, MWMechanics::getPlayer()))
|
||||
, mTrading(false)
|
||||
, mUpdateTimer(0.f)
|
||||
, mUpdateNextFrame(false)
|
||||
{
|
||||
mPreviewTexture
|
||||
= std::make_unique<osgMyGUI::OSGTexture>(mPreview->getTexture(), mPreview->getTextureStateSet());
|
||||
|
|
@ -683,22 +683,21 @@ namespace MWGui
|
|||
|
||||
void InventoryWindow::onFrame(float dt)
|
||||
{
|
||||
updateEncumbranceBar();
|
||||
|
||||
if (mPinned)
|
||||
if (mUpdateNextFrame)
|
||||
{
|
||||
mUpdateTimer += dt;
|
||||
if (0.1f < mUpdateTimer)
|
||||
if (mTrading)
|
||||
{
|
||||
mUpdateTimer = 0;
|
||||
|
||||
// Update pinned inventory in-game
|
||||
if (!MWBase::Environment::get().getWindowManager()->isGuiMode())
|
||||
{
|
||||
mItemView->update();
|
||||
notifyContentChanged();
|
||||
}
|
||||
mTradeModel->updateBorrowed();
|
||||
MWBase::Environment::get().getWindowManager()->getTradeWindow()->mTradeModel->updateBorrowed();
|
||||
MWBase::Environment::get().getWindowManager()->getTradeWindow()->updateItemView();
|
||||
MWBase::Environment::get().getWindowManager()->getTradeWindow()->updateOffer();
|
||||
}
|
||||
|
||||
updateEncumbranceBar();
|
||||
mDragAndDrop->update();
|
||||
mItemView->update();
|
||||
notifyContentChanged();
|
||||
mUpdateNextFrame = false;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -850,19 +849,14 @@ namespace MWGui
|
|||
mPreview->rebuild();
|
||||
}
|
||||
|
||||
void InventoryWindow::itemAdded(const MWWorld::ConstPtr& item, int count)
|
||||
{
|
||||
mUpdateNextFrame = true;
|
||||
}
|
||||
|
||||
void InventoryWindow::itemRemoved(const MWWorld::ConstPtr& item, int count)
|
||||
{
|
||||
if (mDragAndDrop->mIsOnDragAndDrop && mDragAndDrop->mItem.mBase == item)
|
||||
mDragAndDrop->update();
|
||||
|
||||
if (mTrading)
|
||||
{
|
||||
mTradeModel->updateBorrowed();
|
||||
MWBase::Environment::get().getWindowManager()->getTradeWindow()->getTradeModel()->updateBorrowed();
|
||||
MWBase::Environment::get().getWindowManager()->getTradeWindow()->updateItemView();
|
||||
}
|
||||
|
||||
updateItemView();
|
||||
mUpdateNextFrame = true;
|
||||
}
|
||||
|
||||
MyGUI::IntSize InventoryWindow::getPreviewViewportSize() const
|
||||
|
|
|
|||
|
|
@ -63,7 +63,7 @@ namespace MWGui
|
|||
|
||||
void setGuiMode(GuiMode mode);
|
||||
|
||||
void itemAdded(const MWWorld::ConstPtr& item, int count) override { updateItemView(); }
|
||||
void itemAdded(const MWWorld::ConstPtr& item, int count) override;
|
||||
void itemRemoved(const MWWorld::ConstPtr& item, int count) override;
|
||||
|
||||
/// Cycle to previous/next weapon
|
||||
|
|
@ -111,7 +111,7 @@ namespace MWGui
|
|||
std::unique_ptr<MWRender::InventoryPreview> mPreview;
|
||||
|
||||
bool mTrading;
|
||||
float mUpdateTimer;
|
||||
bool mUpdateNextFrame;
|
||||
|
||||
void toggleMaximized();
|
||||
|
||||
|
|
|
|||
|
|
@ -123,6 +123,7 @@ namespace MWGui
|
|||
, mItemToSell(-1)
|
||||
, mCurrentBalance(0)
|
||||
, mCurrentMerchantOffer(0)
|
||||
, mUpdateNextFrame(false)
|
||||
{
|
||||
getWidget(mFilterAll, "AllButton");
|
||||
getWidget(mFilterWeapon, "WeaponButton");
|
||||
|
|
@ -209,6 +210,16 @@ namespace MWGui
|
|||
void TradeWindow::onFrame(float dt)
|
||||
{
|
||||
checkReferenceAvailable();
|
||||
|
||||
if (isVisible() && mUpdateNextFrame)
|
||||
{
|
||||
mTradeModel->updateBorrowed();
|
||||
MWBase::Environment::get().getWindowManager()->getInventoryWindow()->getTradeModel()->updateBorrowed();
|
||||
MWBase::Environment::get().getWindowManager()->getInventoryWindow()->updateItemView();
|
||||
mItemView->update();
|
||||
updateOffer();
|
||||
mUpdateNextFrame = false;
|
||||
}
|
||||
}
|
||||
|
||||
void TradeWindow::onNameFilterChanged(MyGUI::EditBox* _sender)
|
||||
|
|
@ -652,14 +663,13 @@ namespace MWGui
|
|||
mItemView->update();
|
||||
}
|
||||
|
||||
void TradeWindow::itemAdded(const MWWorld::ConstPtr& item, int count)
|
||||
{
|
||||
mUpdateNextFrame = true;
|
||||
}
|
||||
|
||||
void TradeWindow::itemRemoved(const MWWorld::ConstPtr& item, int count)
|
||||
{
|
||||
mTradeModel->updateBorrowed();
|
||||
MWBase::Environment::get().getWindowManager()->getInventoryWindow()->getTradeModel()->updateBorrowed();
|
||||
|
||||
MWBase::Environment::get().getWindowManager()->getInventoryWindow()->updateItemView();
|
||||
updateItemView();
|
||||
|
||||
updateOffer();
|
||||
mUpdateNextFrame = true;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -33,22 +33,15 @@ namespace MWGui
|
|||
void onFrame(float dt) override;
|
||||
void clear() override { resetReference(); }
|
||||
|
||||
void borrowItem(int index, size_t count);
|
||||
void returnItem(int index, size_t count);
|
||||
|
||||
int getMerchantServices();
|
||||
|
||||
bool exit() override;
|
||||
|
||||
void resetReference() override;
|
||||
|
||||
void onDeleteCustomData(const MWWorld::Ptr& ptr) override;
|
||||
|
||||
TradeItemModel* getTradeModel() { return mTradeModel; }
|
||||
|
||||
void updateItemView();
|
||||
|
||||
void itemAdded(const MWWorld::ConstPtr& item, int count) override { updateItemView(); }
|
||||
void itemAdded(const MWWorld::ConstPtr& item, int count) override;
|
||||
void itemRemoved(const MWWorld::ConstPtr& item, int count) override;
|
||||
|
||||
typedef MyGUI::delegates::MultiDelegate<> EventHandle_TradeDone;
|
||||
|
|
@ -57,6 +50,8 @@ namespace MWGui
|
|||
std::string_view getWindowIdForLua() const override { return "Trade"; }
|
||||
|
||||
private:
|
||||
friend class InventoryWindow;
|
||||
|
||||
ItemView* mItemView;
|
||||
SortFilterItemModel* mSortModel;
|
||||
TradeItemModel* mTradeModel;
|
||||
|
|
@ -90,6 +85,8 @@ namespace MWGui
|
|||
int mCurrentBalance;
|
||||
int mCurrentMerchantOffer;
|
||||
|
||||
bool mUpdateNextFrame;
|
||||
|
||||
void sellToNpc(
|
||||
const MWWorld::Ptr& item, int count, bool boughtItem); ///< only used for adjusting the gold balance
|
||||
void buyFromNpc(
|
||||
|
|
@ -100,6 +97,11 @@ namespace MWGui
|
|||
void onItemSelected(int index);
|
||||
void sellItem(MyGUI::Widget* sender, int count);
|
||||
|
||||
void borrowItem(int index, size_t count);
|
||||
void returnItem(int index, size_t count);
|
||||
|
||||
int getMerchantServices();
|
||||
|
||||
void onFilterChanged(MyGUI::Widget* _sender);
|
||||
void onNameFilterChanged(MyGUI::EditBox* _sender);
|
||||
void onOfferButtonClicked(MyGUI::Widget* _sender);
|
||||
|
|
|
|||
Loading…
Reference in a new issue