コード例 #1
0
ファイル: spellwindow.cpp プロジェクト: swick/openmw
    void SpellWindow::onEnchantedItemSelected(MWWorld::Ptr item, bool alreadyEquipped)
    {
        MWWorld::Ptr player = MWMechanics::getPlayer();
        MWWorld::InventoryStore& store = player.getClass().getInventoryStore(player);

        // retrieve ContainerStoreIterator to the item
        MWWorld::ContainerStoreIterator it = store.begin();
        for (; it != store.end(); ++it)
        {
            if (*it == item)
            {
                break;
            }
        }
        if (it == store.end())
            throw std::runtime_error("can't find selected item");

        // equip, if it can be equipped and is not already equipped
        if (!alreadyEquipped
            && !item.getClass().getEquipmentSlots(item).first.empty())
        {
            MWBase::Environment::get().getWindowManager()->getInventoryWindow()->useItem(item);
            // make sure that item was successfully equipped
            if (!store.isEquipped(item))
                return;
        }

        store.setSelectedEnchantItem(it);
        // to reset WindowManager::mSelectedSpell immediately
        MWBase::Environment::get().getWindowManager()->setSelectedEnchantItem(*it);

        updateSpells();
    }
コード例 #2
0
ファイル: birth.cpp プロジェクト: Bodillium/openmw
    BirthDialog::BirthDialog()
      : WindowModal("openmw_chargen_birth.layout")
    {
        // Centre dialog
        center();

        getWidget(mSpellArea, "SpellArea");

        getWidget(mBirthImage, "BirthsignImage");

        getWidget(mBirthList, "BirthsignList");
        mBirthList->setScrollVisible(true);
        mBirthList->eventListSelectAccept += MyGUI::newDelegate(this, &BirthDialog::onAccept);
        mBirthList->eventListChangePosition += MyGUI::newDelegate(this, &BirthDialog::onSelectBirth);

        MyGUI::Button* backButton;
        getWidget(backButton, "BackButton");
        backButton->eventMouseButtonClick += MyGUI::newDelegate(this, &BirthDialog::onBackClicked);

        MyGUI::Button* okButton;
        getWidget(okButton, "OKButton");
        okButton->setCaption(MWBase::Environment::get().getWindowManager()->getGameSettingString("sOK", ""));
        okButton->eventMouseButtonClick += MyGUI::newDelegate(this, &BirthDialog::onOkClicked);

        updateBirths();
        updateSpells();
    }
コード例 #3
0
ファイル: spellwindow.cpp プロジェクト: rafis/openmw
    void SpellWindow::onEnchantedItemSelected(MyGUI::Widget* _sender)
    {
        MWWorld::Ptr player = MWBase::Environment::get().getWorld()->getPlayerPtr();
        MWWorld::InventoryStore& store = player.getClass().getInventoryStore(player);
        MWWorld::Ptr item = *_sender->getUserData<MWWorld::Ptr>();

        // retrieve ContainerStoreIterator to the item
        MWWorld::ContainerStoreIterator it = store.begin();
        for (; it != store.end(); ++it)
        {
            if (*it == item)
            {
                break;
            }
        }
        assert(it != store.end());

        // equip, if it can be equipped and is not already equipped
        if (_sender->getUserString("Equipped") == "false"
            && !item.getClass().getEquipmentSlots(item).first.empty())
        {
            MWBase::Environment::get().getWindowManager()->getInventoryWindow()->useItem(item);
        }

        MWBase::Environment::get().getWindowManager()->unsetSelectedSpell();
        store.setSelectedEnchantItem(it);

        updateSpells();
    }
コード例 #4
0
ファイル: spellwindow.cpp プロジェクト: rafis/openmw
 void SpellWindow::onWindowResize(MyGUI::Window* _sender)
 {
     if (mMainWidget->getSize() != mWindowSize)
     {
         mWindowSize = mMainWidget->getSize();
         updateSpells();
     }
 }
コード例 #5
0
ファイル: spellwindow.cpp プロジェクト: swick/openmw
    void SpellWindow::onSpellSelected(const std::string& spellId)
    {
        MWWorld::Ptr player = MWMechanics::getPlayer();
        MWWorld::InventoryStore& store = player.getClass().getInventoryStore(player);
        store.setSelectedEnchantItem(store.end());
        MWBase::Environment::get().getWindowManager()->setSelectedSpell(spellId, int(MWMechanics::getSpellSuccessChance(spellId, player)));

        updateSpells();
    }
コード例 #6
0
ファイル: spellwindow.cpp プロジェクト: Allofich/openmw
    void SpellWindow::onOpen()
    {
        // Reset the filter focus when opening the window
        MyGUI::Widget* focus = MyGUI::InputManager::getInstance().getKeyFocusWidget();
        if (focus == mFilterEdit)
            MWBase::Environment::get().getWindowManager()->setKeyFocusWidget(NULL);

        updateSpells();
    }
コード例 #7
0
ファイル: spellwindow.cpp プロジェクト: swick/openmw
    void SpellWindow::onDeleteSpellAccept()
    {
        MWWorld::Ptr player = MWMechanics::getPlayer();
        MWMechanics::CreatureStats& stats = player.getClass().getCreatureStats(player);
        MWMechanics::Spells& spells = stats.getSpells();

        if (MWBase::Environment::get().getWindowManager()->getSelectedSpell() == mSpellToDelete)
            MWBase::Environment::get().getWindowManager()->unsetSelectedSpell();

        spells.remove(mSpellToDelete);

        updateSpells();
    }
コード例 #8
0
ファイル: spellwindow.cpp プロジェクト: Manbeardo/openmw
    SpellWindow::SpellWindow(MWBase::WindowManager& parWindowManager)
        : WindowPinnableBase("openmw_spell_window.layout", parWindowManager)
        , mHeight(0)
        , mWidth(0)
    {
        getWidget(mSpellView, "SpellView");
        getWidget(mEffectBox, "EffectsBox");

        setCoord(498, 300, 302, 300);

        updateSpells();

        mMainWidget->castType<MyGUI::Window>()->eventWindowChangeCoord += MyGUI::newDelegate(this, &SpellWindow::onWindowResize);
    }
コード例 #9
0
ファイル: birth.cpp プロジェクト: Bodillium/openmw
    void BirthDialog::onSelectBirth(MyGUI::ListBox* _sender, size_t _index)
    {
        if (_index == MyGUI::ITEM_NONE)
            return;

        MyGUI::Button* okButton;
        getWidget(okButton, "OKButton");

        const std::string *birthId = mBirthList->getItemDataAt<std::string>(_index);
        if (Misc::StringUtils::ciEqual(mCurrentBirthId, *birthId))
            return;

        mCurrentBirthId = *birthId;
        updateSpells();
    }
コード例 #10
0
ファイル: birth.cpp プロジェクト: Bodillium/openmw
    void BirthDialog::setBirthId(const std::string &birthId)
    {
        mCurrentBirthId = birthId;
        mBirthList->setIndexSelected(MyGUI::ITEM_NONE);
        size_t count = mBirthList->getItemCount();
        for (size_t i = 0; i < count; ++i)
        {
            if (Misc::StringUtils::ciEqual(*mBirthList->getItemDataAt<std::string>(i), birthId))
            {
                mBirthList->setIndexSelected(i);
                MyGUI::Button* okButton;
                getWidget(okButton, "OKButton");
                break;
            }
        }

        updateSpells();
    }
コード例 #11
0
ファイル: spellwindow.cpp プロジェクト: JanneVirkkunen/openmw
    void SpellWindow::onSpellSelected(MyGUI::Widget* _sender)
    {
        std::string spellId = _sender->getUserString("Spell");
        MWWorld::Ptr player = MWBase::Environment::get().getWorld()->getPlayer().getPlayer();
        MWMechanics::CreatureStats& stats = MWWorld::Class::get(player).getCreatureStats(player);
        MWWorld::InventoryStore& store = MWWorld::Class::get(player).getInventoryStore(player);
        MWMechanics::Spells& spells = stats.getSpells();

        if (MyGUI::InputManager::getInstance().isShiftPressed())
        {
            // delete spell, if allowed
            const ESM::Spell* spell =
                MWBase::Environment::get().getWorld()->getStore().get<ESM::Spell>().find(spellId);

            if (spell->mData.mFlags & ESM::Spell::F_Always
                || spell->mData.mType == ESM::Spell::ST_Power)
            {
                MWBase::Environment::get().getWindowManager()->messageBox("#{sDeleteSpellError}");
            }
            else
            {
                // ask for confirmation
                mSpellToDelete = spellId;
                ConfirmationDialog* dialog = MWBase::Environment::get().getWindowManager()->getConfirmationDialog();
                std::string question = MWBase::Environment::get().getWindowManager()->getGameSettingString("sQuestionDeleteSpell", "Delete %s?");
                question = boost::str(boost::format(question) % spell->mName);
                dialog->open(question);
                dialog->eventOkClicked.clear();
                dialog->eventOkClicked += MyGUI::newDelegate(this, &SpellWindow::onDeleteSpellAccept);
                dialog->eventCancelClicked.clear();
            }
        }
        else
        {
            spells.setSelectedSpell(spellId);
            store.setSelectedEnchantItem(store.end());
            MWBase::Environment::get().getWindowManager()->setSelectedSpell(spellId, int(MWMechanics::getSpellSuccessChance(spellId, player)));
        }

        updateSpells();
    }
コード例 #12
0
ファイル: spellwindow.cpp プロジェクト: Manbeardo/openmw
    void SpellWindow::onEnchantedItemSelected(MyGUI::Widget* _sender)
    {
        MWWorld::Ptr player = MWBase::Environment::get().getWorld()->getPlayer().getPlayer();
        MWMechanics::CreatureStats& stats = MWWorld::Class::get(player).getCreatureStats(player);
        MWWorld::InventoryStore& store = MWWorld::Class::get(player).getInventoryStore(player);
        MWMechanics::Spells& spells = stats.getSpells();
        MWWorld::Ptr item = *_sender->getUserData<MWWorld::Ptr>();

        // retrieve ContainerStoreIterator to the item
        MWWorld::ContainerStoreIterator it = store.begin();
        for (; it != store.end(); ++it)
        {
            if (*it == item)
            {
                break;
            }
        }
        assert(it != store.end());

        // equip, if it can be equipped and is not already equipped
        if (_sender->getUserString("Equipped") == "false"
            && !MWWorld::Class::get(item).getEquipmentSlots(item).first.empty())
        {
            // Note: can't use Class::use here because enchanted scrolls for example would then open the scroll window instead of equipping

            MWWorld::ActionEquip action(item);
            action.execute (MWBase::Environment::get().getWorld ()->getPlayer ().getPlayer ());

            // since we changed equipping status, update the inventory window
            mWindowManager.getInventoryWindow()->drawItems();
        }

        store.setSelectedEnchantItem(it);
        spells.setSelectedSpell("");
        mWindowManager.setSelectedEnchantItem(item, 100); /// \todo track charge %

        updateSpells();
    }
コード例 #13
0
ファイル: spellwindow.cpp プロジェクト: swick/openmw
 void SpellWindow::open()
 {
     updateSpells();
 }
コード例 #14
0
ファイル: birth.cpp プロジェクト: Bodillium/openmw
 void BirthDialog::open()
 {
     WindowModal::open();
     updateBirths();
     updateSpells();
 }
コード例 #15
0
ファイル: spellwindow.cpp プロジェクト: Manbeardo/openmw
 void SpellWindow::onWindowResize(MyGUI::Window* _sender)
 {
     updateSpells();
 }
コード例 #16
0
ファイル: spellwindow.cpp プロジェクト: BungaDunga/openmw
    void SpellWindow::onEnchantedItemSelected(MyGUI::Widget* _sender)
    {
        MWWorld::Ptr player = MWBase::Environment::get().getWorld()->getPlayer().getPlayer();
        MWMechanics::CreatureStats& stats = MWWorld::Class::get(player).getCreatureStats(player);
        MWWorld::InventoryStore& store = MWWorld::Class::get(player).getInventoryStore(player);
        MWMechanics::Spells& spells = stats.mSpells;
        MWWorld::Ptr item = *_sender->getUserData<MWWorld::Ptr>();

        // retrieve ContainerStoreIterator to the item
        MWWorld::ContainerStoreIterator it = store.begin();
        for (; it != store.end(); ++it)
        {
            if (*it == item)
            {
                break;
            }
        }
        assert(it != store.end());

        // equip, if it can be equipped and is not already equipped
        if (_sender->getUserString("Equipped") == "false"
            && !MWWorld::Class::get(item).getEquipmentSlots(item).first.empty())
        {
            // sound
            MWBase::Environment::get().getSoundManager()->playSound(MWWorld::Class::get(item).getUpSoundId(item), 1.0, 1.0);

            // Note: can't use Class::use here because enchanted scrolls for example would then open the scroll window instead of equipping

            /// \todo the following code is pretty much copy&paste from ActionEquip, put it in a function?
            // slots that this item can be equipped in
            std::pair<std::vector<int>, bool> slots = MWWorld::Class::get(item).getEquipmentSlots(item);

            // equip the item in the first free slot
            for (std::vector<int>::const_iterator slot=slots.first.begin();
                slot!=slots.first.end(); ++slot)
            {
                // if all slots are occupied, replace the last slot
                if (slot == --slots.first.end())
                {
                    store.equip(*slot, it);
                    break;
                }

                if (store.getSlot(*slot) == store.end())
                {
                    // slot is not occupied
                    store.equip(*slot, it);
                    break;
                }
            }
            /// \todo scripts?

            // since we changed equipping status, update the inventory window
            mWindowManager.getInventoryWindow()->drawItems();
        }

        store.setSelectedEnchantItem(it);
        spells.setSelectedSpell("");
        mWindowManager.setSelectedEnchantItem(item, 100); /// \todo track charge %

        updateSpells();
    }