Merge branch 'master' of https://github.com/zinnschlag/openmw into graphics

actorid
scrawl 12 years ago
commit db9e49968e

@ -660,6 +660,7 @@ if (NOT WIN32 AND NOT DPKG_PROGRAM AND NOT APPLE)
INSTALL(PROGRAMS "${OpenMW_BINARY_DIR}/omwlauncher" DESTINATION "${BINDIR}" ) INSTALL(PROGRAMS "${OpenMW_BINARY_DIR}/omwlauncher" DESTINATION "${BINDIR}" )
INSTALL(PROGRAMS "${OpenMW_BINARY_DIR}/esmtool" DESTINATION "${BINDIR}" ) INSTALL(PROGRAMS "${OpenMW_BINARY_DIR}/esmtool" DESTINATION "${BINDIR}" )
INSTALL(PROGRAMS "${OpenMW_BINARY_DIR}/mwiniimport" DESTINATION "${BINDIR}" ) INSTALL(PROGRAMS "${OpenMW_BINARY_DIR}/mwiniimport" DESTINATION "${BINDIR}" )
INSTALL(PROGRAMS "${OpenMW_BINARY_DIR}/opencs" DESTINATION "${BINDIR}" )
# Install icon and .desktop # Install icon and .desktop
INSTALL(FILES "${OpenMW_SOURCE_DIR}/apps/launcher/resources/images/openmw.png" DESTINATION "${ICONDIR}") INSTALL(FILES "${OpenMW_SOURCE_DIR}/apps/launcher/resources/images/openmw.png" DESTINATION "${ICONDIR}")

@ -30,7 +30,7 @@ add_openmw_dir (mwgui
formatting inventorywindow container hud countdialog tradewindow settingswindow formatting inventorywindow container hud countdialog tradewindow settingswindow
confirmationdialog alchemywindow referenceinterface spellwindow mainmenu quickkeysmenu confirmationdialog alchemywindow referenceinterface spellwindow mainmenu quickkeysmenu
itemselection spellbuyingwindow loadingscreen levelupdialog waitdialog spellcreationdialog itemselection spellbuyingwindow loadingscreen levelupdialog waitdialog spellcreationdialog
enchantingdialog trainingwindow travelwindow imagebutton enchantingdialog trainingwindow travelwindow imagebutton exposedwindow
) )
add_openmw_dir (mwdialogue add_openmw_dir (mwdialogue

@ -215,7 +215,7 @@ void OMW::Engine::addMaster (const std::string& master)
{ {
mMaster.push_back(master); mMaster.push_back(master);
std::string &str = mMaster.back(); std::string &str = mMaster.back();
// Append .esm if not already there // Append .esm if not already there
std::string::size_type sep = str.find_last_of ("."); std::string::size_type sep = str.find_last_of (".");
if (sep == std::string::npos) if (sep == std::string::npos)
@ -303,7 +303,7 @@ void OMW::Engine::prepareEngine (Settings::Manager & settings)
} }
mOgre = new OEngine::Render::OgreRenderer; mOgre = new OEngine::Render::OgreRenderer;
mOgre->configure( mOgre->configure(
mCfgMgr.getLogPath().string(), mCfgMgr.getLogPath().string(),
renderSystem, renderSystem,
@ -344,7 +344,8 @@ void OMW::Engine::prepareEngine (Settings::Manager & settings)
//Load translation data //Load translation data
mTranslationDataStorage.setEncoder(mEncoder); mTranslationDataStorage.setEncoder(mEncoder);
mTranslationDataStorage.loadTranslationData(mFileCollections, mMaster[0]); for (size_t i = 0; i < mMaster.size(); i++)
mTranslationDataStorage.loadTranslationData(mFileCollections, mMaster[i]);
// Create window manager - this manages all the MW-specific GUI windows // Create window manager - this manages all the MW-specific GUI windows
MWScript::registerExtensions (mExtensions); MWScript::registerExtensions (mExtensions);

@ -0,0 +1,26 @@
#include "exposedwindow.hpp"
#include "MyGUI_Window.h"
namespace MWGui
{
MyGUI::VectorWidgetPtr ExposedWindow::getSkinWidgetsByName (const std::string &name)
{
return MyGUI::Widget::getSkinWidgetsByName (name);
}
MyGUI::Widget* ExposedWindow::getSkinWidget(const std::string & _name, bool _throw)
{
MyGUI::VectorWidgetPtr widgets = getSkinWidgetsByName (_name);
if (widgets.empty())
{
MYGUI_ASSERT( ! _throw, "widget name '" << _name << "' not found in skin of layout '" << getName() << "'");
return nullptr;
}
else
{
return widgets[0];
}
}
}

@ -0,0 +1,26 @@
#ifndef MWGUI_EXPOSEDWINDOW_H
#define MWGUI_EXPOSEDWINDOW_H
#include "MyGUI_Window.h"
namespace MWGui
{
/**
* @brief subclass to provide access to some Widget internals.
*/
class ExposedWindow : public MyGUI::Window
{
MYGUI_RTTI_DERIVED(ExposedWindow)
public:
MyGUI::VectorWidgetPtr getSkinWidgetsByName (const std::string &name);
MyGUI::Widget* getSkinWidget(const std::string & _name, bool _throw = true);
///< Get a widget defined in the inner skin of this window.
};
}
#endif

@ -2,32 +2,27 @@
#include "../mwbase/windowmanager.hpp" #include "../mwbase/windowmanager.hpp"
#include "exposedwindow.hpp"
using namespace MWGui; using namespace MWGui;
WindowPinnableBase::WindowPinnableBase(const std::string& parLayout, MWBase::WindowManager& parWindowManager) WindowPinnableBase::WindowPinnableBase(const std::string& parLayout, MWBase::WindowManager& parWindowManager)
: WindowBase(parLayout, parWindowManager), mPinned(false), mVisible(false) : WindowBase(parLayout, parWindowManager), mPinned(false), mVisible(false)
{ {
MyGUI::WindowPtr t = static_cast<MyGUI::WindowPtr>(mMainWidget); ExposedWindow* window = static_cast<ExposedWindow*>(mMainWidget);
t->eventWindowButtonPressed += MyGUI::newDelegate(this, &WindowPinnableBase::onWindowButtonPressed); mPinButton = window->getSkinWidget ("Button");
}
void WindowPinnableBase::setVisible(bool b) mPinButton->eventMouseButtonClick += MyGUI::newDelegate(this, &WindowPinnableBase::onPinButtonClicked);
{
// Pinned windows can not be hidden
if (mPinned && !b)
return;
WindowBase::setVisible(b);
mVisible = b;
} }
void WindowPinnableBase::onWindowButtonPressed(MyGUI::Window* sender, const std::string& eventName) void WindowPinnableBase::onPinButtonClicked(MyGUI::Widget* _sender)
{ {
if ("PinToggle" == eventName) mPinned = !mPinned;
{
mPinned = !mPinned; if (mPinned)
onPinToggled(); mPinButton->changeWidgetSkin ("PinDown");
} else
mPinButton->changeWidgetSkin ("PinUp");
eventDone(this); onPinToggled();
} }

@ -11,15 +11,15 @@ namespace MWGui
{ {
public: public:
WindowPinnableBase(const std::string& parLayout, MWBase::WindowManager& parWindowManager); WindowPinnableBase(const std::string& parLayout, MWBase::WindowManager& parWindowManager);
void setVisible(bool b);
bool pinned() { return mPinned; } bool pinned() { return mPinned; }
private: private:
void onWindowButtonPressed(MyGUI::Window* sender, const std::string& eventName); void onPinButtonClicked(MyGUI::Widget* _sender);
protected: protected:
virtual void onPinToggled() = 0; virtual void onPinToggled() = 0;
MyGUI::Widget* mPinButton;
bool mPinned; bool mPinned;
bool mVisible; bool mVisible;
}; };

@ -52,6 +52,7 @@
#include "enchantingdialog.hpp" #include "enchantingdialog.hpp"
#include "trainingwindow.hpp" #include "trainingwindow.hpp"
#include "imagebutton.hpp" #include "imagebutton.hpp"
#include "exposedwindow.hpp"
using namespace MWGui; using namespace MWGui;
@ -128,6 +129,7 @@ WindowManager::WindowManager(
MyGUI::FactoryManager::getInstance().registerFactory<MWGui::Widgets::AutoSizedTextBox>("Widget"); MyGUI::FactoryManager::getInstance().registerFactory<MWGui::Widgets::AutoSizedTextBox>("Widget");
MyGUI::FactoryManager::getInstance().registerFactory<MWGui::Widgets::AutoSizedButton>("Widget"); MyGUI::FactoryManager::getInstance().registerFactory<MWGui::Widgets::AutoSizedButton>("Widget");
MyGUI::FactoryManager::getInstance().registerFactory<MWGui::ImageButton>("Widget"); MyGUI::FactoryManager::getInstance().registerFactory<MWGui::ImageButton>("Widget");
MyGUI::FactoryManager::getInstance().registerFactory<MWGui::ExposedWindow>("Widget");
MyGUI::LanguageManager::getInstance().eventRequestTag = MyGUI::newDelegate(this, &WindowManager::onRetrieveTag); MyGUI::LanguageManager::getInstance().eventRequestTag = MyGUI::newDelegate(this, &WindowManager::onRetrieveTag);
@ -310,9 +312,16 @@ void WindowManager::updateVisible()
setSpellVisibility((mAllowed & GW_Magic) && !mSpellWindow->pinned()); setSpellVisibility((mAllowed & GW_Magic) && !mSpellWindow->pinned());
setHMSVisibility((mAllowed & GW_Stats) && !mStatsWindow->pinned()); setHMSVisibility((mAllowed & GW_Stats) && !mStatsWindow->pinned());
// If in game mode, don't show anything. // If in game mode, show only the pinned windows
if (gameMode) if (gameMode)
{
mMap->setVisible(mMap->pinned());
mStatsWindow->setVisible(mStatsWindow->pinned());
mInventoryWindow->setVisible(mInventoryWindow->pinned());
mSpellWindow->setVisible(mSpellWindow->pinned());
return; return;
}
GuiMode mode = mGuiModes.back(); GuiMode mode = mGuiModes.back();
@ -327,6 +336,12 @@ void WindowManager::updateVisible()
mSettingsWindow->setVisible(true); mSettingsWindow->setVisible(true);
break; break;
case GM_Console: case GM_Console:
// Show the pinned windows
mMap->setVisible(mMap->pinned());
mStatsWindow->setVisible(mStatsWindow->pinned());
mInventoryWindow->setVisible(mInventoryWindow->pinned());
mSpellWindow->setVisible(mSpellWindow->pinned());
mConsole->enable(); mConsole->enable();
break; break;
case GM_Scroll: case GM_Scroll:

@ -23,9 +23,7 @@
#include "bsa_file.hpp" #include "bsa_file.hpp"
//#include <stdexcept> #include <stdexcept>
//#include <cstdlib>
//#include <cassert>
#include "../files/constrainedfiledatastream.hpp" #include "../files/constrainedfiledatastream.hpp"

@ -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
{ {

@ -43,25 +43,14 @@ http://www.gnu.org/licenses/ .
typedef unsigned char ubyte; typedef unsigned char ubyte;
using namespace NifBullet; namespace NifBullet
{
ManualBulletShapeLoader::~ManualBulletShapeLoader() ManualBulletShapeLoader::~ManualBulletShapeLoader()
{ {
} }
btQuaternion ManualBulletShapeLoader::getbtQuat(Ogre::Matrix3 const &m)
{
Ogre::Quaternion oquat(m);
btQuaternion quat;
quat.setW(oquat.w);
quat.setX(oquat.x);
quat.setY(oquat.y);
quat.setZ(oquat.z);
return quat;
}
btVector3 ManualBulletShapeLoader::getbtVector(Ogre::Vector3 const &v) btVector3 ManualBulletShapeLoader::getbtVector(Ogre::Vector3 const &v)
{ {
return btVector3(v[0], v[1], v[2]); return btVector3(v[0], v[1], v[2]);
@ -90,7 +79,6 @@ void ManualBulletShapeLoader::loadResource(Ogre::Resource *resource)
return; return;
} }
// The first record is assumed to be the root node // The first record is assumed to be the root node
Nif::Record *r = nif.getRecord(0); Nif::Record *r = nif.getRecord(0);
assert(r != NULL); assert(r != NULL);
@ -106,13 +94,11 @@ void ManualBulletShapeLoader::loadResource(Ogre::Resource *resource)
bool hasCollisionNode = hasRootCollisionNode(node); bool hasCollisionNode = hasRootCollisionNode(node);
//do a first pass //do a first pass
handleNode(node,0,NULL,hasCollisionNode,false,false); handleNode(node,0,hasCollisionNode,false,false);
//if collide = false, then it does a second pass which create a shape for raycasting. //if collide = false, then it does a second pass which create a shape for raycasting.
if(cShape->mCollide == false) if(cShape->mCollide == false)
{ handleNode(node,0,hasCollisionNode,false,true);
handleNode(node,0,NULL,hasCollisionNode,false,true);
}
//cShape->collide = hasCollisionNode&&cShape->collide; //cShape->collide = hasCollisionNode&&cShape->collide;
@ -129,9 +115,9 @@ void ManualBulletShapeLoader::loadResource(Ogre::Resource *resource)
delete m_meshInterface; delete m_meshInterface;
} }
}; };
if(mBoundingBox != NULL) if(mBoundingBox != NULL)
cShape->Shape = mBoundingBox; cShape->Shape = mBoundingBox;
else else
{ {
currentShape = new TriangleMeshShape(mTriMesh,true); currentShape = new TriangleMeshShape(mTriMesh,true);
@ -141,34 +127,30 @@ void ManualBulletShapeLoader::loadResource(Ogre::Resource *resource)
bool ManualBulletShapeLoader::hasRootCollisionNode(Nif::Node const * node) bool ManualBulletShapeLoader::hasRootCollisionNode(Nif::Node const * node)
{ {
if (node->recType == Nif::RC_NiNode) if(node->recType == Nif::RC_RootCollisionNode)
return true;
const Nif::NiNode *ninode = dynamic_cast<const Nif::NiNode*>(node);
if(ninode)
{ {
Nif::NodeList &list = ((Nif::NiNode*)node)->children; const Nif::NodeList &list = ninode->children;
int n = list.length(); for(size_t i = 0;i < list.length();i++)
for (int i=0; i<n; i++)
{ {
if (!list[i].empty()) if(!list[i].empty())
{ {
if(hasRootCollisionNode(list[i].getPtr())) return true;; if(hasRootCollisionNode(list[i].getPtr()))
return true;
} }
} }
} }
else if (node->recType == Nif::RC_NiTriShape)
{
return false;
}
else if(node->recType == Nif::RC_RootCollisionNode)
{
return true;
}
return false; return false;
} }
void ManualBulletShapeLoader::handleNode(Nif::Node const *node, int flags, void ManualBulletShapeLoader::handleNode(const Nif::Node *node, int flags,
const Nif::Transformation *parentTrafo,bool hasCollisionNode,bool isCollisionNode,bool raycastingOnly) bool hasCollisionNode, bool isCollisionNode,
bool raycastingOnly)
{ {
// Accumulate the flags from all the child nodes. This works for all // Accumulate the flags from all the child nodes. This works for all
// the flags we currently use, at least. // the flags we currently use, at least.
flags |= node->flags; flags |= node->flags;
@ -209,70 +191,36 @@ void ManualBulletShapeLoader::handleNode(Nif::Node const *node, int flags,
} }
} }
Nif::Transformation childTrafo = node->trafo;
if (parentTrafo)
{
// Get a non-const reference to the node's data, since we're
// overwriting it. TODO: Is this necessary?
// For both position and rotation we have that:
// final_vector = old_vector + old_rotation*new_vector*old_scale
childTrafo.pos = parentTrafo->pos + parentTrafo->rotation*childTrafo.pos*parentTrafo->scale;
// Merge the rotations together
childTrafo.rotation = parentTrafo->rotation * childTrafo.rotation;
// Scale
childTrafo.scale *= parentTrafo->scale;
}
if(node->hasBounds) if(node->hasBounds)
{ {
btVector3 boxsize = getbtVector(node->boundXYZ);
cShape->boxTranslation = node->boundPos; cShape->boxTranslation = node->boundPos;
cShape->boxRotation = node->boundRot; cShape->boxRotation = node->boundRot;
mBoundingBox = new btBoxShape(getbtVector(node->boundXYZ));
mBoundingBox = new btBoxShape(boxsize);
} }
if(node->recType == Nif::RC_NiTriShape && (isCollisionNode || !hasCollisionNode))
// For NiNodes, loop through children
if (node->recType == Nif::RC_NiNode)
{
Nif::NodeList const &list = ((Nif::NiNode const *)node)->children;
int n = list.length();
for (int i=0; i<n; i++)
{
if (!list[i].empty())
{
handleNode(list[i].getPtr(), flags,&childTrafo,hasCollisionNode,isCollisionNode,raycastingOnly);
}
}
}
else if (node->recType == Nif::RC_NiTriShape && (isCollisionNode || !hasCollisionNode))
{ {
cShape->mCollide = !(flags&0x800); cShape->mCollide = !(flags&0x800);
handleNiTriShape(dynamic_cast<Nif::NiTriShape const *>(node), flags,childTrafo.rotation,childTrafo.pos,childTrafo.scale,raycastingOnly); handleNiTriShape(static_cast<const Nif::NiTriShape*>(node), flags, node->getWorldTransform(), raycastingOnly);
} }
else if(node->recType == Nif::RC_RootCollisionNode)
// For NiNodes, loop through children
const Nif::NiNode *ninode = dynamic_cast<const Nif::NiNode*>(node);
if(ninode)
{ {
Nif::NodeList &list = ((Nif::NiNode*)node)->children; isCollisionNode = isCollisionNode || (node->recType == Nif::RC_RootCollisionNode);
int n = list.length();
for (int i=0; i<n; i++) const Nif::NodeList &list = ninode->children;
for(size_t i = 0;i < list.length();i++)
{ {
if (!list[i].empty()) if(!list[i].empty())
handleNode(list[i].getPtr(), flags,&childTrafo, hasCollisionNode,true,raycastingOnly); handleNode(list[i].getPtr(), flags, hasCollisionNode, isCollisionNode, raycastingOnly);
} }
} }
} }
void ManualBulletShapeLoader::handleNiTriShape(Nif::NiTriShape const *shape, int flags,Ogre::Matrix3 parentRot,Ogre::Vector3 parentPos,float parentScale, void ManualBulletShapeLoader::handleNiTriShape(const Nif::NiTriShape *shape, int flags, const Ogre::Matrix4 &transform,
bool raycastingOnly) bool raycastingOnly)
{ {
assert(shape != NULL); assert(shape != NULL);
@ -296,18 +244,14 @@ void ManualBulletShapeLoader::handleNiTriShape(Nif::NiTriShape const *shape, int
return; return;
Nif::NiTriShapeData *data = shape->data.getPtr(); const Nif::NiTriShapeData *data = shape->data.getPtr();
const std::vector<Ogre::Vector3> &vertices = data->vertices; const std::vector<Ogre::Vector3> &vertices = data->vertices;
const Ogre::Matrix3 &rot = shape->trafo.rotation; const short *triangles = &data->triangles[0];
const Ogre::Vector3 &pos = shape->trafo.pos;
float scale = shape->trafo.scale * parentScale;
short* triangles = &data->triangles[0];
for(size_t i = 0;i < data->triangles.size();i+=3) for(size_t i = 0;i < data->triangles.size();i+=3)
{ {
Ogre::Vector3 b1 = pos + rot*vertices[triangles[i+0]]*scale; Ogre::Vector3 b1 = transform*vertices[triangles[i+0]];
Ogre::Vector3 b2 = pos + rot*vertices[triangles[i+1]]*scale; Ogre::Vector3 b2 = transform*vertices[triangles[i+1]];
Ogre::Vector3 b3 = pos + rot*vertices[triangles[i+2]]*scale; Ogre::Vector3 b3 = transform*vertices[triangles[i+2]];
mTriMesh->addTriangle(btVector3(b1.x,b1.y,b1.z),btVector3(b2.x,b2.y,b2.z),btVector3(b3.x,b3.y,b3.z)); mTriMesh->addTriangle(btVector3(b1.x,b1.y,b1.z),btVector3(b2.x,b2.y,b2.z),btVector3(b3.x,b3.y,b3.z));
} }
} }
@ -320,3 +264,5 @@ void ManualBulletShapeLoader::load(const std::string &name,const std::string &gr
return; return;
OEngine::Physic::BulletShapeManager::getSingleton().create(name,group,true,this); OEngine::Physic::BulletShapeManager::getSingleton().create(name,group,true,this);
} }
} // namespace NifBullet

@ -51,19 +51,18 @@ namespace NifBullet
class ManualBulletShapeLoader : public OEngine::Physic::BulletShapeLoader class ManualBulletShapeLoader : public OEngine::Physic::BulletShapeLoader
{ {
public: public:
ManualBulletShapeLoader():resourceGroup("General"){} ManualBulletShapeLoader():resourceGroup("General"){}
virtual ~ManualBulletShapeLoader(); virtual ~ManualBulletShapeLoader();
void warn(std::string msg) void warn(const std::string &msg)
{ {
std::cerr << "NIFLoader: Warn:" << msg << "\n"; std::cerr << "NIFLoader: Warn:" << msg << "\n";
} }
void fail(std::string msg) void fail(const std::string &msg)
{ {
std::cerr << "NIFLoader: Fail: "<< msg << std::endl; std::cerr << "NIFLoader: Fail: "<< msg << std::endl;
assert(1); abort();
} }
/** /**
@ -79,31 +78,26 @@ public:
void load(const std::string &name,const std::string &group); void load(const std::string &name,const std::string &group);
private: private:
btQuaternion getbtQuat(Ogre::Matrix3 const &m);
btVector3 getbtVector(Ogre::Vector3 const &v); btVector3 getbtVector(Ogre::Vector3 const &v);
/** /**
*Parse a node. *Parse a node.
*/ */
void handleNode(Nif::Node const *node, int flags, void handleNode(Nif::Node const *node, int flags, bool hasCollisionNode, bool isCollisionNode, bool raycastingOnly);
const Nif::Transformation *trafo, bool hasCollisionNode,bool isCollisionNode,bool raycastingOnly);
/** /**
*Helper function *Helper function
*/ */
bool hasRootCollisionNode(Nif::Node const * node); bool hasRootCollisionNode(const Nif::Node *node);
/** /**
*convert a NiTriShape to a bullet trishape. *convert a NiTriShape to a bullet trishape.
*/ */
void handleNiTriShape(Nif::NiTriShape const *shape, int flags,Ogre::Matrix3 parentRot,Ogre::Vector3 parentPos,float parentScales,bool raycastingOnly); void handleNiTriShape(const Nif::NiTriShape *shape, int flags, const Ogre::Matrix4 &transform, bool raycastingOnly);
std::string resourceName; std::string resourceName;
std::string resourceGroup; std::string resourceGroup;
OEngine::Physic::BulletShape* cShape;//current shape OEngine::Physic::BulletShape* cShape;//current shape
btTriangleMesh *mTriMesh; btTriangleMesh *mTriMesh;
btBoxShape *mBoundingBox; btBoxShape *mBoundingBox;

@ -16,6 +16,7 @@ Alexander Olofsson (Ace)
Artem Kotsynyak (greye) Artem Kotsynyak (greye)
athile athile
BrotherBrick BrotherBrick
Chris Robinson
Cory F. Cohen (cfcohen) Cory F. Cohen (cfcohen)
Cris Mihalache (Mirceam) Cris Mihalache (Mirceam)
Douglas Diniz (Dgdiniz) Douglas Diniz (Dgdiniz)

@ -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>

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<MyGUI type="Layout"> <MyGUI type="Layout">
<Widget type="Window" skin="MW_Window_Pinnable" layer="Windows" position="0 0 600 300" name="_Main"> <Widget type="ExposedWindow" skin="MW_Window_Pinnable" layer="Windows" position="0 0 600 300" name="_Main">
<Widget type="Widget" skin="" position="0 0 224 223" align="Left Top" name="LeftPane"> <Widget type="Widget" skin="" position="0 0 224 223" align="Left Top" name="LeftPane">

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<MyGUI type="Layout"> <MyGUI type="Layout">
<Widget type="Window" skin="MW_Window_Pinnable" layer="Windows" position="0 0 300 300" name="_Main"> <Widget type="ExposedWindow" skin="MW_Window_Pinnable" layer="Windows" position="0 0 300 300" name="_Main">
<!-- Local map --> <!-- Local map -->
<Widget type="ScrollView" skin="MW_MapView" position="0 0 284 264" align="ALIGN_STRETCH" name="LocalMap"> <Widget type="ScrollView" skin="MW_MapView" position="0 0 284 264" align="ALIGN_STRETCH" name="LocalMap">

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<MyGUI type="Layout"> <MyGUI type="Layout">
<Widget type="Window" skin="MW_Window_Pinnable" layer="Windows" position="0 0 300 600" name="_Main"> <Widget type="ExposedWindow" skin="MW_Window_Pinnable" layer="Windows" position="0 0 300 600" name="_Main">
<!-- Effect box--> <!-- Effect box-->
<Widget type="Widget" skin="MW_Box" position="8 8 268 24" align="Left Top HStretch"> <Widget type="Widget" skin="MW_Box" position="8 8 268 24" align="Left Top HStretch">

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<MyGUI type="Layout"> <MyGUI type="Layout">
<Widget type="Window" skin="MW_Window_Pinnable" layer="Windows" position="0 0 500 342" name="_Main"> <Widget type="ExposedWindow" skin="MW_Window_Pinnable" layer="Windows" position="0 0 500 342" name="_Main">
<Widget type="Widget" skin="" name="LeftPane" position="0 0 220 342"> <Widget type="Widget" skin="" name="LeftPane" position="0 0 220 342">

@ -8,6 +8,118 @@
</BasisSkin> </BasisSkin>
</Skin> </Skin>
<!-- Define the borders for pin button (up) -->
<Skin name="PU_B" size="12 2" texture="textures\menu_rightbuttonup_bottom.dds">
<BasisSkin type="MainSkin" offset = "0 0 12 2">
<State name="normal" offset = "0 0 12 2"/>
</BasisSkin>
</Skin>
<Skin name="PU_BR" size="2 2" texture="textures\menu_rightbuttonup_bottom_right.dds">
<BasisSkin type="MainSkin" offset = "0 0 2 2">
<State name="normal" offset = "0 0 2 2"/>
</BasisSkin>
</Skin>
<Skin name="PU_R" size="2 12" texture="textures\menu_rightbuttonup_right.dds">
<BasisSkin type="MainSkin" offset = "0 0 2 12">
<State name="normal" offset = "0 0 2 12"/>
</BasisSkin>
</Skin>
<Skin name="PU_TR" size="2 2" texture="textures\menu_rightbuttonup_top_right.dds">
<BasisSkin type="MainSkin" offset = "0 0 2 2">
<State name="normal" offset = "0 0 2 2"/>
</BasisSkin>
</Skin>
<Skin name="PU_T" size="12 2" texture="textures\menu_rightbuttonup_top.dds">
<BasisSkin type="MainSkin" offset = "0 0 12 2">
<State name="normal" offset = "0 0 12 2"/>
</BasisSkin>
</Skin>
<Skin name="PU_TL" size="2 2" texture="textures\menu_rightbuttonup_top_left.dds">
<BasisSkin type="MainSkin" offset = "0 0 2 2">
<State name="normal" offset = "0 0 2 2"/>
</BasisSkin>
</Skin>
<Skin name="PU_L" size="2 12" texture="textures\menu_rightbuttonup_left.dds">
<BasisSkin type="MainSkin" offset = "0 0 2 12">
<State name="normal" offset = "0 0 2 12"/>
</BasisSkin>
</Skin>
<Skin name="PU_BL" size="2 2" texture="textures\menu_rightbuttonup_bottom_left.dds">
<BasisSkin type="MainSkin" offset = "0 0 2 2">
<State name="normal" offset = "0 0 2 2"/>
</BasisSkin>
</Skin>
<!-- Define the borders for pin button (down) -->
<Skin name="PD_B" size="12 2" texture="textures\menu_rightbuttondown_bottom.dds">
<BasisSkin type="MainSkin" offset = "0 0 12 2">
<State name="normal" offset = "0 0 12 2"/>
</BasisSkin>
</Skin>
<Skin name="PD_BR" size="2 2" texture="textures\menu_rightbuttondown_bottom_right.dds">
<BasisSkin type="MainSkin" offset = "0 0 2 2">
<State name="normal" offset = "0 0 2 2"/>
</BasisSkin>
</Skin>
<Skin name="PD_R" size="2 12" texture="textures\menu_rightbuttondown_right.dds">
<BasisSkin type="MainSkin" offset = "0 0 2 12">
<State name="normal" offset = "0 0 2 12"/>
</BasisSkin>
</Skin>
<Skin name="PD_TR" size="2 2" texture="textures\menu_rightbuttondown_top_right.dds">
<BasisSkin type="MainSkin" offset = "0 0 2 2">
<State name="normal" offset = "0 0 2 2"/>
</BasisSkin>
</Skin>
<Skin name="PD_T" size="12 2" texture="textures\menu_rightbuttondown_top.dds">
<BasisSkin type="MainSkin" offset = "0 0 12 2">
<State name="normal" offset = "0 0 12 2"/>
</BasisSkin>
</Skin>
<Skin name="PD_TL" size="2 2" texture="textures\menu_rightbuttondown_top_left.dds">
<BasisSkin type="MainSkin" offset = "0 0 2 2">
<State name="normal" offset = "0 0 2 2"/>
</BasisSkin>
</Skin>
<Skin name="PD_L" size="2 12" texture="textures\menu_rightbuttondown_left.dds">
<BasisSkin type="MainSkin" offset = "0 0 2 12">
<State name="normal" offset = "0 0 2 12"/>
</BasisSkin>
</Skin>
<Skin name="PD_BL" size="2 2" texture="textures\menu_rightbuttondown_bottom_left.dds">
<BasisSkin type="MainSkin" offset = "0 0 2 2">
<State name="normal" offset = "0 0 2 2"/>
</BasisSkin>
</Skin>
<!-- Define the pin button skin -->
<Skin name = "PinUp" size = "19 19" texture="textures\menu_rightbuttonup_center.dds">
<BasisSkin type="MainSkin" offset = "0 0 19 19">
<State name="normal" offset = "0 0 19 19"/>
</BasisSkin>
<Child type="Widget" skin="PU_B" offset="2 17 15 2" align="ALIGN_HSTRETCH ALIGN_VSTRETCH"/>
<Child type="Widget" skin="PU_BR" offset="17 17 2 2" align="ALIGN_HSTRETCH ALIGN_VSTRETCH"/>
<Child type="Widget" skin="PU_R" offset="17 2 2 15" align="ALIGN_HSTRETCH ALIGN_VSTRETCH"/>
<Child type="Widget" skin="PU_TR" offset="17 0 2 2" align="ALIGN_HSTRETCH ALIGN_VSTRETCH"/>
<Child type="Widget" skin="PU_T" offset="2 0 15 2" align="ALIGN_HSTRETCH ALIGN_VSTRETCH"/>
<Child type="Widget" skin="PU_TL" offset="0 0 2 2" align="ALIGN_HSTRETCH ALIGN_VSTRETCH"/>
<Child type="Widget" skin="PU_L" offset="0 2 2 15" align="ALIGN_HSTRETCH ALIGN_VSTRETCH"/>
<Child type="Widget" skin="PU_BL" offset="0 17 2 2" align="ALIGN_HSTRETCH ALIGN_VSTRETCH"/>
</Skin>
<Skin name = "PinDown" size = "19 19" texture="textures\menu_rightbuttondown_center.dds">
<BasisSkin type="MainSkin" offset = "0 0 19 19">
<State name="normal" offset = "0 0 19 19"/>
</BasisSkin>
<Child type="Widget" skin="PD_B" offset="2 17 15 2" align="ALIGN_HSTRETCH ALIGN_VSTRETCH"/>
<Child type="Widget" skin="PD_BR" offset="17 17 2 2" align="ALIGN_HSTRETCH ALIGN_VSTRETCH"/>
<Child type="Widget" skin="PD_R" offset="17 2 2 15" align="ALIGN_HSTRETCH ALIGN_VSTRETCH"/>
<Child type="Widget" skin="PD_TR" offset="17 0 2 2" align="ALIGN_HSTRETCH ALIGN_VSTRETCH"/>
<Child type="Widget" skin="PD_T" offset="2 0 15 2" align="ALIGN_HSTRETCH ALIGN_VSTRETCH"/>
<Child type="Widget" skin="PD_TL" offset="0 0 2 2" align="ALIGN_HSTRETCH ALIGN_VSTRETCH"/>
<Child type="Widget" skin="PD_L" offset="0 2 2 15" align="ALIGN_HSTRETCH ALIGN_VSTRETCH"/>
<Child type="Widget" skin="PD_BL" offset="0 17 2 2" align="ALIGN_HSTRETCH ALIGN_VSTRETCH"/>
</Skin>
<!-- Defines a pure black background --> <!-- Defines a pure black background -->
<Skin name = "DialogBG" size = "8 8" texture = "black.png"> <Skin name = "DialogBG" size = "8 8" texture = "black.png">
<BasisSkin type="MainSkin" offset = "0 0 8 8"> <BasisSkin type="MainSkin" offset = "0 0 8 8">
@ -473,9 +585,7 @@
<Property key="Scale" value = "1 1 0 0"/> <Property key="Scale" value = "1 1 0 0"/>
</Child> </Child>
<Child type="Button" skin="BlackBG" offset="230 4 21 19" align="ALIGN_RIGHT ALIGN_TOP" name="Button"> <Child type="Button" skin="PinUp" offset="232 4 19 19" align="ALIGN_RIGHT ALIGN_TOP" name="Button"/>
<Property key="Event" value="PinToggle"/>
</Child>
</Skin> </Skin>
<Skin name = "MW_Dialog" size = "256 54"> <Skin name = "MW_Dialog" size = "256 54">

Loading…
Cancel
Save