1
0
Fork 0
mirror of https://github.com/OpenMW/openmw.git synced 2025-01-22 09:23:54 +00:00

opening, closing and taking books/scrolls works

This commit is contained in:
scrawl 2012-05-03 05:26:05 +02:00
parent 0e6b82284f
commit 9fc1138a87
11 changed files with 173 additions and 17 deletions

View file

@ -46,7 +46,7 @@ add_openmw_dir (mwsound
add_openmw_dir (mwworld add_openmw_dir (mwworld
refdata world physicssystem scene globals class action nullaction actionteleport refdata world physicssystem scene globals class action nullaction actionteleport
containerstore actiontalk actiontake manualref player cellfunctors containerstore actiontalk actiontake manualref player cellfunctors
cells localscripts customdata weather inventorystore ptr cells localscripts customdata weather inventorystore ptr actionread
) )
add_openmw_dir (mwclass add_openmw_dir (mwclass

View file

@ -8,7 +8,7 @@
#include "../mwbase/environment.hpp" #include "../mwbase/environment.hpp"
#include "../mwworld/ptr.hpp" #include "../mwworld/ptr.hpp"
#include "../mwworld/actiontake.hpp" #include "../mwworld/actionread.hpp"
#include "../mwworld/world.hpp" #include "../mwworld/world.hpp"
#include "../mwrender/objects.hpp" #include "../mwrender/objects.hpp"
@ -60,12 +60,8 @@ namespace MWClass
boost::shared_ptr<MWWorld::Action> Book::activate (const MWWorld::Ptr& ptr, boost::shared_ptr<MWWorld::Action> Book::activate (const MWWorld::Ptr& ptr,
const MWWorld::Ptr& actor) const const MWWorld::Ptr& actor) const
{ {
// TODO implement reading
MWBase::Environment::get().getSoundManager()->playSound3D (ptr, getUpSoundId(ptr), 1.0, 1.0, MWSound::Play_NoTrack);
return boost::shared_ptr<MWWorld::Action> ( return boost::shared_ptr<MWWorld::Action> (
new MWWorld::ActionTake (ptr)); new MWWorld::ActionRead (ptr));
} }
std::string Book::getScript (const MWWorld::Ptr& ptr) const std::string Book::getScript (const MWWorld::Ptr& ptr) const

View file

@ -1,15 +1,58 @@
#include "bookwindow.hpp" #include "bookwindow.hpp"
#include "../mwbase/environment.hpp"
#include "../mwinput/inputmanager.hpp"
#include "../mwsound/soundmanager.hpp"
#include "../mwworld/actiontake.hpp"
using namespace MWGui; using namespace MWGui;
BookWindow::BookWindow(WindowManager& parWindowManager) : BookWindow::BookWindow (WindowManager& parWindowManager) :
WindowBase("openmw_book_layout.xml", parWindowManager) WindowBase("openmw_book_layout.xml", parWindowManager)
{ {
//setVisible(false); getWidget(mCloseButton, "CloseButton");
mCloseButton->eventMouseButtonClick += MyGUI::newDelegate(this, &BookWindow::onCloseButtonClicked);
getWidget(mTakeButton, "TakeButton");
mTakeButton->eventMouseButtonClick += MyGUI::newDelegate(this, &BookWindow::onTakeButtonClicked);
getWidget(mNextPageButton, "NextPageBTN");
mNextPageButton->eventMouseButtonClick += MyGUI::newDelegate(this, &BookWindow::onNextPageButtonClicked);
getWidget(mPrevPageButton, "PrevPageBTN");
mPrevPageButton->eventMouseButtonClick += MyGUI::newDelegate(this, &BookWindow::onPrevPageButtonClicked);
center(); center();
} }
void BookWindow::open(MWWorld::Ptr book) void BookWindow::open (MWWorld::Ptr book)
{
MWBase::Environment::get().getSoundManager()->playSound3D (book, "book open", 1.0, 1.0);
mBook = book;
}
void BookWindow::onCloseButtonClicked (MyGUI::Widget* _sender)
{
MWBase::Environment::get().getSoundManager()->playSound3D (mBook, "book close", 1.0, 1.0);
MWBase::Environment::get().getInputManager()->setGuiMode(MWGui::GM_Game);
}
void BookWindow::onTakeButtonClicked (MyGUI::Widget* _sender)
{
MWBase::Environment::get().getSoundManager()->playSound3D (mBook, "Item Book Up", 1.0, 1.0, MWSound::Play_NoTrack);
MWWorld::ActionTake take(mBook);
take.execute();
MWBase::Environment::get().getInputManager()->setGuiMode (GM_Game);
}
void BookWindow::onNextPageButtonClicked (MyGUI::Widget* _sender)
{ {
} }
void BookWindow::onPrevPageButtonClicked (MyGUI::Widget* _sender)
{
}

View file

@ -12,6 +12,20 @@ namespace MWGui
public: public:
BookWindow(WindowManager& parWindowManager); BookWindow(WindowManager& parWindowManager);
void open(MWWorld::Ptr book); void open(MWWorld::Ptr book);
protected:
void onNextPageButtonClicked (MyGUI::Widget* _sender);
void onPrevPageButtonClicked (MyGUI::Widget* _sender);
void onCloseButtonClicked (MyGUI::Widget* _sender);
void onTakeButtonClicked (MyGUI::Widget* _sender);
private:
MyGUI::Button* mCloseButton;
MyGUI::Button* mTakeButton;
MyGUI::Button* mNextPageButton;
MyGUI::Button* mPrevPageButton;
MWWorld::Ptr mBook;
}; };
} }

View file

@ -12,12 +12,12 @@ namespace MWGui
GM_Console, // Console mode GM_Console, // Console mode
GM_Journal, // Journal mode GM_Journal, // Journal mode
// None of the following are implemented yet GM_Scroll, // Read scroll
GM_Book, // Read book
GM_Dialogue, // NPC interaction GM_Dialogue, // NPC interaction
GM_Barter, GM_Barter,
GM_Rest, GM_Rest,
// .. more here ..
// Startup character creation dialogs // Startup character creation dialogs
GM_Name, GM_Name,

View file

@ -1,14 +1,44 @@
#include "scrollwindow.hpp" #include "scrollwindow.hpp"
#include "../mwbase/environment.hpp"
#include "../mwinput/inputmanager.hpp"
#include "../mwworld/actiontake.hpp"
#include "../mwsound/soundmanager.hpp"
using namespace MWGui; using namespace MWGui;
ScrollWindow::ScrollWindow(WindowManager& parWindowManager) : ScrollWindow::ScrollWindow (WindowManager& parWindowManager) :
WindowBase("openmw_scroll_layout.xml", parWindowManager) WindowBase("openmw_scroll_layout.xml", parWindowManager)
{ {
setVisible(false); getWidget(mCloseButton, "CloseButton");
mCloseButton->eventMouseButtonClick += MyGUI::newDelegate(this, &ScrollWindow::onCloseButtonClicked);
getWidget(mTakeButton, "TakeButton");
mTakeButton->eventMouseButtonClick += MyGUI::newDelegate(this, &ScrollWindow::onTakeButtonClicked);
center(); center();
} }
void ScrollWindow::open(MWWorld::Ptr scroll) void ScrollWindow::open (MWWorld::Ptr scroll)
{ {
MWBase::Environment::get().getSoundManager()->playSound3D (scroll, "scroll", 1.0, 1.0);
mScroll = scroll;
}
void ScrollWindow::onCloseButtonClicked (MyGUI::Widget* _sender)
{
MWBase::Environment::get().getSoundManager()->playSound3D (mScroll, "scroll", 1.0, 1.0);
MWBase::Environment::get().getInputManager()->setGuiMode (GM_Game);
}
void ScrollWindow::onTakeButtonClicked (MyGUI::Widget* _sender)
{
MWBase::Environment::get().getSoundManager()->playSound3D (mScroll, "Item Book Up", 1.0, 1.0, MWSound::Play_NoTrack);
MWWorld::ActionTake take(mScroll);
take.execute();
MWBase::Environment::get().getInputManager()->setGuiMode (GM_Game);
} }

View file

@ -10,8 +10,18 @@ namespace MWGui
class ScrollWindow : public WindowBase class ScrollWindow : public WindowBase
{ {
public: public:
ScrollWindow(WindowManager& parWindowManager); ScrollWindow (WindowManager& parWindowManager);
void open(MWWorld::Ptr scroll); void open (MWWorld::Ptr scroll);
protected:
void onCloseButtonClicked (MyGUI::Widget* _sender);
void onTakeButtonClicked (MyGUI::Widget* _sender);
private:
MyGUI::Button* mCloseButton;
MyGUI::Button* mTakeButton;
MWWorld::Ptr mScroll;
}; };
} }

View file

@ -185,6 +185,8 @@ void WindowManager::updateVisible()
stats->setVisible(false); stats->setVisible(false);
console->disable(); console->disable();
mJournal->setVisible(false); mJournal->setVisible(false);
mScrollWindow->setVisible(false);
mBookWindow->setVisible(false);
dialogueWindow->setVisible(false); dialogueWindow->setVisible(false);
// Mouse is visible whenever we're not in game mode // Mouse is visible whenever we're not in game mode
@ -205,6 +207,12 @@ void WindowManager::updateVisible()
case GM_Console: case GM_Console:
console->enable(); console->enable();
break; break;
case GM_Scroll:
mScrollWindow->setVisible(true);
break;
case GM_Book:
mBookWindow->setVisible(true);
break;
case GM_Name: case GM_Name:
case GM_Race: case GM_Race:
case GM_Class: case GM_Class:

View file

@ -127,6 +127,9 @@ namespace MWGui
MWGui::DialogueWindow* getDialogueWindow() {return dialogueWindow;} MWGui::DialogueWindow* getDialogueWindow() {return dialogueWindow;}
MWGui::BookWindow* getBookWindow() {return mBookWindow;}
MWGui::ScrollWindow* getScrollWindow() {return mScrollWindow;}
MyGUI::Gui* getGui() const { return gui; } MyGUI::Gui* getGui() const { return gui; }
void wmUpdateFps(float fps, size_t triangleCount, size_t batchCount) void wmUpdateFps(float fps, size_t triangleCount, size_t batchCount)

View file

@ -0,0 +1,31 @@
#include "actionread.hpp"
#include "../mwbase/environment.hpp"
#include "../mwgui/window_manager.hpp"
#include "../mwgui/bookwindow.hpp"
#include "../mwgui/scrollwindow.hpp"
namespace MWWorld
{
ActionRead::ActionRead (const MWWorld::Ptr& object) : mObject (object)
{
}
void ActionRead::execute ()
{
ESMS::LiveCellRef<ESM::Book, MWWorld::RefData> *ref =
mObject.get<ESM::Book>();
if (ref->base->data.isScroll)
{
MWBase::Environment::get().getWindowManager()->setGuiMode(MWGui::GM_Scroll);
MWBase::Environment::get().getWindowManager()->getScrollWindow()->open(mObject);
}
else
{
MWBase::Environment::get().getWindowManager()->setGuiMode(MWGui::GM_Book);
MWBase::Environment::get().getWindowManager()->getBookWindow()->open(mObject);
}
}
}

View file

@ -0,0 +1,21 @@
#ifndef GAME_MWWORLD_ACTIONREAD_H
#define GAME_MWWORLD_ACTIONREAD_H
#include "action.hpp"
#include "ptr.hpp"
namespace MWWorld
{
class ActionRead : public Action
{
Ptr mObject; // book or scroll to read
public:
/// @param book or scroll to read
ActionRead (const Ptr& object);
virtual void execute ();
};
}
#endif // ACTIONOPEN_H