forked from teamnwah/openmw-tes3coop
remove the old inventory code, split HUD, map and mainmenu into seperate implementation files
This commit is contained in:
parent
f300a5621c
commit
967fb13fca
8 changed files with 190 additions and 340 deletions
|
@ -23,10 +23,10 @@ add_openmw_dir (mwinput
|
||||||
)
|
)
|
||||||
|
|
||||||
add_openmw_dir (mwgui
|
add_openmw_dir (mwgui
|
||||||
layouts text_input widgets race class birth review window_manager console dialogue
|
text_input widgets race class birth review window_manager console dialogue
|
||||||
dialogue_history window_base stats_window messagebox journalwindow charactercreation
|
dialogue_history window_base stats_window messagebox journalwindow charactercreation
|
||||||
map_window window_pinnable_base cursorreplace tooltips scrollwindow bookwindow list
|
map_window window_pinnable_base cursorreplace tooltips scrollwindow bookwindow list
|
||||||
formatting itemwidget inventorywindow container
|
formatting itemwidget inventorywindow container hud
|
||||||
)
|
)
|
||||||
|
|
||||||
add_openmw_dir (mwdialogue
|
add_openmw_dir (mwdialogue
|
||||||
|
|
|
@ -1,18 +1,14 @@
|
||||||
#include "layouts.hpp"
|
#include "hud.hpp"
|
||||||
|
|
||||||
#include "../mwmechanics/mechanicsmanager.hpp"
|
|
||||||
#include "window_manager.hpp"
|
|
||||||
|
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
#include <algorithm>
|
|
||||||
#include <iterator>
|
|
||||||
|
|
||||||
#undef min
|
#include <MyGUI.h>
|
||||||
#undef max
|
|
||||||
|
#include <boost/lexical_cast.hpp>
|
||||||
|
|
||||||
|
|
||||||
using namespace MWGui;
|
using namespace MWGui;
|
||||||
|
|
||||||
|
|
||||||
HUD::HUD(int width, int height, int fpsLevel)
|
HUD::HUD(int width, int height, int fpsLevel)
|
||||||
: Layout("openmw_hud_layout.xml")
|
: Layout("openmw_hud_layout.xml")
|
||||||
, health(NULL)
|
, health(NULL)
|
||||||
|
@ -247,86 +243,3 @@ void HUD::setBottomRightVisibility(bool effectBoxVisible, bool minimapBoxVisible
|
||||||
effectBox->setVisible(effectBoxVisible);
|
effectBox->setVisible(effectBoxVisible);
|
||||||
}
|
}
|
||||||
|
|
||||||
LocalMapBase::LocalMapBase()
|
|
||||||
: mCurX(0)
|
|
||||||
, mCurY(0)
|
|
||||||
, mInterior(false)
|
|
||||||
, mFogOfWar(true)
|
|
||||||
, mLocalMap(NULL)
|
|
||||||
, mPrefix()
|
|
||||||
, mChanged(true)
|
|
||||||
, mLayout(NULL)
|
|
||||||
, mLastPositionX(0.0f)
|
|
||||||
, mLastPositionY(0.0f)
|
|
||||||
, mLastDirectionX(0.0f)
|
|
||||||
, mLastDirectionY(0.0f)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void LocalMapBase::init(MyGUI::ScrollView* widget, OEngine::GUI::Layout* layout)
|
|
||||||
{
|
|
||||||
mLocalMap = widget;
|
|
||||||
mLayout = layout;
|
|
||||||
}
|
|
||||||
|
|
||||||
void LocalMapBase::setCellPrefix(const std::string& prefix)
|
|
||||||
{
|
|
||||||
mPrefix = prefix;
|
|
||||||
mChanged = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void LocalMapBase::toggleFogOfWar()
|
|
||||||
{
|
|
||||||
mFogOfWar = !mFogOfWar;
|
|
||||||
applyFogOfWar();
|
|
||||||
}
|
|
||||||
|
|
||||||
void LocalMapBase::applyFogOfWar()
|
|
||||||
{
|
|
||||||
for (int mx=0; mx<3; ++mx)
|
|
||||||
{
|
|
||||||
for (int my=0; my<3; ++my)
|
|
||||||
{
|
|
||||||
std::string name = "Map_" + boost::lexical_cast<std::string>(mx) + "_"
|
|
||||||
+ boost::lexical_cast<std::string>(my);
|
|
||||||
std::string image = mPrefix+"_"+ boost::lexical_cast<std::string>(mCurX + (mx-1)) + "_"
|
|
||||||
+ boost::lexical_cast<std::string>(mCurY + (mInterior ? (my-1) : -1*(my-1)));
|
|
||||||
MyGUI::ImageBox* fog;
|
|
||||||
mLayout->getWidget(fog, name+"_fog");
|
|
||||||
fog->setImageTexture(mFogOfWar ?
|
|
||||||
((MyGUI::RenderManager::getInstance().getTexture(image+"_fog") != 0) ? image+"_fog"
|
|
||||||
: "black.png" )
|
|
||||||
: "");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void LocalMapBase::setActiveCell(const int x, const int y, bool interior)
|
|
||||||
{
|
|
||||||
if (x==mCurX && y==mCurY && mInterior==interior && !mChanged) return; // don't do anything if we're still in the same cell
|
|
||||||
for (int mx=0; mx<3; ++mx)
|
|
||||||
{
|
|
||||||
for (int my=0; my<3; ++my)
|
|
||||||
{
|
|
||||||
std::string name = "Map_" + boost::lexical_cast<std::string>(mx) + "_"
|
|
||||||
+ boost::lexical_cast<std::string>(my);
|
|
||||||
|
|
||||||
std::string image = mPrefix+"_"+ boost::lexical_cast<std::string>(x + (mx-1)) + "_"
|
|
||||||
+ boost::lexical_cast<std::string>(y + (interior ? (my-1) : -1*(my-1)));
|
|
||||||
|
|
||||||
MyGUI::ImageBox* box;
|
|
||||||
mLayout->getWidget(box, name);
|
|
||||||
|
|
||||||
if (MyGUI::RenderManager::getInstance().getTexture(image) != 0)
|
|
||||||
box->setImageTexture(image);
|
|
||||||
else
|
|
||||||
box->setImageTexture("black.png");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
mInterior = interior;
|
|
||||||
mCurX = x;
|
|
||||||
mCurY = y;
|
|
||||||
mChanged = false;
|
|
||||||
applyFogOfWar();
|
|
||||||
}
|
|
||||||
|
|
50
apps/openmw/mwgui/hud.hpp
Normal file
50
apps/openmw/mwgui/hud.hpp
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
#include "map_window.hpp"
|
||||||
|
|
||||||
|
#include <openengine/gui/layout.hpp>
|
||||||
|
|
||||||
|
#include "../mwmechanics/stat.hpp"
|
||||||
|
|
||||||
|
namespace MWGui
|
||||||
|
{
|
||||||
|
class HUD : public OEngine::GUI::Layout, public LocalMapBase
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
HUD(int width, int height, int fpsLevel);
|
||||||
|
void setStats(int h, int hmax, int m, int mmax, int s, int smax);
|
||||||
|
void setWeapIcon(const char *str);
|
||||||
|
void setSpellIcon(const char *str);
|
||||||
|
void setWeapStatus(int s, int smax);
|
||||||
|
void setSpellStatus(int s, int smax);
|
||||||
|
void setEffect(const char *img);
|
||||||
|
void setValue (const std::string& id, const MWMechanics::DynamicStat<int>& value);
|
||||||
|
void setFPS(float fps);
|
||||||
|
void setTriangleCount(size_t count);
|
||||||
|
void setBatchCount(size_t count);
|
||||||
|
void setPlayerDir(const float x, const float y);
|
||||||
|
void setPlayerPos(const float x, const float y);
|
||||||
|
void setBottomLeftVisibility(bool hmsVisible, bool weapVisible, bool spellVisible);
|
||||||
|
void setBottomRightVisibility(bool effectBoxVisible, bool minimapVisible);
|
||||||
|
void setFpsLevel(const int level);
|
||||||
|
|
||||||
|
MyGUI::ProgressPtr health, magicka, stamina;
|
||||||
|
MyGUI::Widget *weapBox, *spellBox;
|
||||||
|
MyGUI::ImageBox *weapImage, *spellImage;
|
||||||
|
MyGUI::ProgressPtr weapStatus, spellStatus;
|
||||||
|
MyGUI::Widget *effectBox, *minimapBox;
|
||||||
|
MyGUI::ImageBox* effect1;
|
||||||
|
MyGUI::ScrollView* minimap;
|
||||||
|
MyGUI::ImageBox* compass;
|
||||||
|
MyGUI::ImageBox* crosshair;
|
||||||
|
|
||||||
|
MyGUI::WidgetPtr fpsbox;
|
||||||
|
MyGUI::TextBox* fpscounter;
|
||||||
|
MyGUI::TextBox* trianglecounter;
|
||||||
|
MyGUI::TextBox* batchcounter;
|
||||||
|
|
||||||
|
private:
|
||||||
|
// bottom left elements
|
||||||
|
int hmsBaseLeft, weapBoxBaseLeft, spellBoxBaseLeft;
|
||||||
|
// bottom right elements
|
||||||
|
int minimapBoxBaseRight, effectBoxBaseRight;
|
||||||
|
};
|
||||||
|
}
|
|
@ -1,236 +0,0 @@
|
||||||
#ifndef MWGUI_LAYOUTS_H
|
|
||||||
#define MWGUI_LAYOUTS_H
|
|
||||||
|
|
||||||
#include <components/esm_store/store.hpp>
|
|
||||||
|
|
||||||
#include <boost/array.hpp>
|
|
||||||
#include <boost/lexical_cast.hpp>
|
|
||||||
|
|
||||||
#include <sstream>
|
|
||||||
#include <set>
|
|
||||||
#include <string>
|
|
||||||
#include <utility>
|
|
||||||
|
|
||||||
#include "../mwmechanics/stat.hpp"
|
|
||||||
#include "window_base.hpp"
|
|
||||||
|
|
||||||
#include <cmath>
|
|
||||||
|
|
||||||
/*
|
|
||||||
This file contains classes corresponding to window layouts
|
|
||||||
defined in resources/mygui/ *.xml.
|
|
||||||
|
|
||||||
Each class inherites GUI::Layout and loads the XML file, and
|
|
||||||
provides some helper functions to manipulate the elements of the
|
|
||||||
window.
|
|
||||||
|
|
||||||
The windows are never created or destroyed (except at startup and
|
|
||||||
shutdown), they are only hid. You can control visibility with
|
|
||||||
setVisible().
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace MWGui
|
|
||||||
{
|
|
||||||
class LocalMapBase
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
LocalMapBase();
|
|
||||||
void init(MyGUI::ScrollView* widget, OEngine::GUI::Layout* layout);
|
|
||||||
|
|
||||||
void setCellPrefix(const std::string& prefix);
|
|
||||||
void setActiveCell(const int x, const int y, bool interior=false);
|
|
||||||
|
|
||||||
void toggleFogOfWar();
|
|
||||||
|
|
||||||
protected:
|
|
||||||
int mCurX, mCurY;
|
|
||||||
bool mInterior;
|
|
||||||
MyGUI::ScrollView* mLocalMap;
|
|
||||||
std::string mPrefix;
|
|
||||||
bool mChanged;
|
|
||||||
bool mFogOfWar;
|
|
||||||
|
|
||||||
void applyFogOfWar();
|
|
||||||
|
|
||||||
OEngine::GUI::Layout* mLayout;
|
|
||||||
|
|
||||||
float mLastPositionX;
|
|
||||||
float mLastPositionY;
|
|
||||||
float mLastDirectionX;
|
|
||||||
float mLastDirectionY;
|
|
||||||
};
|
|
||||||
|
|
||||||
class HUD : public OEngine::GUI::Layout, public LocalMapBase
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
HUD(int width, int height, int fpsLevel);
|
|
||||||
void setStats(int h, int hmax, int m, int mmax, int s, int smax);
|
|
||||||
void setWeapIcon(const char *str);
|
|
||||||
void setSpellIcon(const char *str);
|
|
||||||
void setWeapStatus(int s, int smax);
|
|
||||||
void setSpellStatus(int s, int smax);
|
|
||||||
void setEffect(const char *img);
|
|
||||||
void setValue (const std::string& id, const MWMechanics::DynamicStat<int>& value);
|
|
||||||
void setFPS(float fps);
|
|
||||||
void setTriangleCount(size_t count);
|
|
||||||
void setBatchCount(size_t count);
|
|
||||||
void setPlayerDir(const float x, const float y);
|
|
||||||
void setPlayerPos(const float x, const float y);
|
|
||||||
void setBottomLeftVisibility(bool hmsVisible, bool weapVisible, bool spellVisible);
|
|
||||||
void setBottomRightVisibility(bool effectBoxVisible, bool minimapVisible);
|
|
||||||
void setFpsLevel(const int level);
|
|
||||||
|
|
||||||
MyGUI::ProgressPtr health, magicka, stamina;
|
|
||||||
MyGUI::Widget *weapBox, *spellBox;
|
|
||||||
MyGUI::ImageBox *weapImage, *spellImage;
|
|
||||||
MyGUI::ProgressPtr weapStatus, spellStatus;
|
|
||||||
MyGUI::Widget *effectBox, *minimapBox;
|
|
||||||
MyGUI::ImageBox* effect1;
|
|
||||||
MyGUI::ScrollView* minimap;
|
|
||||||
MyGUI::ImageBox* compass;
|
|
||||||
MyGUI::ImageBox* crosshair;
|
|
||||||
|
|
||||||
MyGUI::WidgetPtr fpsbox;
|
|
||||||
MyGUI::TextBox* fpscounter;
|
|
||||||
MyGUI::TextBox* trianglecounter;
|
|
||||||
MyGUI::TextBox* batchcounter;
|
|
||||||
|
|
||||||
private:
|
|
||||||
// bottom left elements
|
|
||||||
int hmsBaseLeft, weapBoxBaseLeft, spellBoxBaseLeft;
|
|
||||||
// bottom right elements
|
|
||||||
int minimapBoxBaseRight, effectBoxBaseRight;
|
|
||||||
};
|
|
||||||
|
|
||||||
class MainMenu : public OEngine::GUI::Layout
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
MainMenu(int w, int h)
|
|
||||||
: Layout("openmw_mainmenu_layout.xml")
|
|
||||||
{
|
|
||||||
setCoord(0,0,w,h);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
class InventoryWindow : public OEngine::GUI::Layout
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
enum CategoryMode
|
|
||||||
{
|
|
||||||
CM_All = 0, // All items
|
|
||||||
CM_Weapon = 1, // Only weapons
|
|
||||||
CM_Apparel = 2, // Apparel
|
|
||||||
CM_Magic = 3, // Magic
|
|
||||||
CM_Misc = 4 // Misc
|
|
||||||
};
|
|
||||||
|
|
||||||
InventoryWindow ()
|
|
||||||
: Layout("openmw_inventory_window_layout.xml")
|
|
||||||
, categoryMode(CM_All)
|
|
||||||
|
|
||||||
// color should be fetched from skin
|
|
||||||
, activeColor(0, 0, 1)
|
|
||||||
, inactiveColor(0.7, 0.7, 0.7)
|
|
||||||
{
|
|
||||||
setCoord(0, 200, 600, 400);
|
|
||||||
|
|
||||||
// These are just demo values, you should replace these with
|
|
||||||
// real calls from outside the class later.
|
|
||||||
|
|
||||||
mMainWidget->setCaption("Glass Frostsword");
|
|
||||||
setText("EncumbranceBarT", "176/210");
|
|
||||||
|
|
||||||
MyGUI::ProgressPtr pt;
|
|
||||||
getWidget(pt, "EncumbranceBar");
|
|
||||||
pt->setProgressRange(210);
|
|
||||||
pt->setProgressPosition(176);
|
|
||||||
|
|
||||||
MyGUI::WidgetPtr avatar;
|
|
||||||
getWidget(avatar, "Avatar");
|
|
||||||
|
|
||||||
// Adjust armor rating text to bottom of avatar widget
|
|
||||||
MyGUI::TextBox* armor_rating;
|
|
||||||
getWidget(armor_rating, "ArmorRating");
|
|
||||||
armor_rating->setCaption("Armor: 11");
|
|
||||||
MyGUI::IntCoord coord = armor_rating->getCoord();
|
|
||||||
coord.top = avatar->getCoord().height - 4 - coord.height;
|
|
||||||
armor_rating->setCoord(coord);
|
|
||||||
|
|
||||||
names[0] = "All";
|
|
||||||
names[1] = "Weapon";
|
|
||||||
names[2] = "Apparel";
|
|
||||||
names[3] = "Magic";
|
|
||||||
names[4] = "Misc";
|
|
||||||
|
|
||||||
boost::array<CategoryMode, 5> categories = { {
|
|
||||||
CM_All, CM_Weapon, CM_Apparel, CM_Magic, CM_Misc
|
|
||||||
} };
|
|
||||||
|
|
||||||
// Initialize buttons with text and adjust sizes, also mark All as active button
|
|
||||||
int margin = 2;
|
|
||||||
int last_x = 0;
|
|
||||||
for (int i = 0; i < categories.size(); ++i)
|
|
||||||
{
|
|
||||||
CategoryMode mode = categories[i];
|
|
||||||
std::string name = names[mode];
|
|
||||||
name += "Button";
|
|
||||||
setText(name, names[mode]);
|
|
||||||
getWidget(buttons[mode], name);
|
|
||||||
|
|
||||||
MyGUI::ButtonPtr &button_pt = buttons[mode];
|
|
||||||
if (mode == CM_All)
|
|
||||||
button_pt->setTextColour(activeColor);
|
|
||||||
else
|
|
||||||
button_pt->setTextColour(inactiveColor);
|
|
||||||
MyGUI::IntCoord coord = button_pt->getCoord();
|
|
||||||
coord.left = last_x;
|
|
||||||
last_x += coord.width + margin;
|
|
||||||
button_pt->setCoord(coord);
|
|
||||||
|
|
||||||
button_pt->eventMouseButtonClick += MyGUI::newDelegate(this, &InventoryWindow::onCategorySelected);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void setCategory(CategoryMode mode)
|
|
||||||
{
|
|
||||||
MyGUI::ButtonPtr pt = getCategoryButton(categoryMode);
|
|
||||||
pt->setTextColour(inactiveColor);
|
|
||||||
|
|
||||||
pt = getCategoryButton(mode);
|
|
||||||
pt->setTextColour(activeColor);
|
|
||||||
categoryMode = mode;
|
|
||||||
}
|
|
||||||
|
|
||||||
MyGUI::ButtonPtr getCategoryButton(CategoryMode mode)
|
|
||||||
{
|
|
||||||
return buttons[mode];
|
|
||||||
}
|
|
||||||
|
|
||||||
void onCategorySelected(MyGUI::Widget *widget)
|
|
||||||
{
|
|
||||||
boost::array<CategoryMode, 5> categories = { {
|
|
||||||
CM_All, CM_Weapon, CM_Apparel, CM_Magic, CM_Misc
|
|
||||||
} };
|
|
||||||
|
|
||||||
for (int i = 0; i < categories.size(); ++i)
|
|
||||||
{
|
|
||||||
CategoryMode mode = categories[i];
|
|
||||||
if (widget == buttons[mode])
|
|
||||||
{
|
|
||||||
setCategory(mode);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
CategoryMode categoryMode; // Current category filter
|
|
||||||
MyGUI::ButtonPtr buttons[5]; // Button pointers
|
|
||||||
std::string names[5]; // Names of category buttons
|
|
||||||
|
|
||||||
MyGUI::Colour activeColor;
|
|
||||||
MyGUI::Colour inactiveColor;
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
#endif
|
|
16
apps/openmw/mwgui/mainmenu.hpp
Normal file
16
apps/openmw/mwgui/mainmenu.hpp
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
#include <openengine/gui/layout.hpp>
|
||||||
|
|
||||||
|
namespace MWGui
|
||||||
|
{
|
||||||
|
|
||||||
|
class MainMenu : public OEngine::GUI::Layout
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
MainMenu(int w, int h)
|
||||||
|
: Layout("openmw_mainmenu_layout.xml")
|
||||||
|
{
|
||||||
|
setCoord(0,0,w,h);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
|
@ -1,17 +1,95 @@
|
||||||
#include "map_window.hpp"
|
#include "map_window.hpp"
|
||||||
#include "window_manager.hpp"
|
#include "window_manager.hpp"
|
||||||
/*
|
|
||||||
#include "../mwmechanics/mechanicsmanager.hpp"
|
|
||||||
|
|
||||||
#include <cmath>
|
#include <boost/lexical_cast.hpp>
|
||||||
#include <algorithm>
|
|
||||||
#include <iterator>
|
|
||||||
|
|
||||||
#undef min
|
|
||||||
#undef max
|
|
||||||
*/
|
|
||||||
using namespace MWGui;
|
using namespace MWGui;
|
||||||
|
|
||||||
|
LocalMapBase::LocalMapBase()
|
||||||
|
: mCurX(0)
|
||||||
|
, mCurY(0)
|
||||||
|
, mInterior(false)
|
||||||
|
, mFogOfWar(true)
|
||||||
|
, mLocalMap(NULL)
|
||||||
|
, mPrefix()
|
||||||
|
, mChanged(true)
|
||||||
|
, mLayout(NULL)
|
||||||
|
, mLastPositionX(0.0f)
|
||||||
|
, mLastPositionY(0.0f)
|
||||||
|
, mLastDirectionX(0.0f)
|
||||||
|
, mLastDirectionY(0.0f)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void LocalMapBase::init(MyGUI::ScrollView* widget, OEngine::GUI::Layout* layout)
|
||||||
|
{
|
||||||
|
mLocalMap = widget;
|
||||||
|
mLayout = layout;
|
||||||
|
}
|
||||||
|
|
||||||
|
void LocalMapBase::setCellPrefix(const std::string& prefix)
|
||||||
|
{
|
||||||
|
mPrefix = prefix;
|
||||||
|
mChanged = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void LocalMapBase::toggleFogOfWar()
|
||||||
|
{
|
||||||
|
mFogOfWar = !mFogOfWar;
|
||||||
|
applyFogOfWar();
|
||||||
|
}
|
||||||
|
|
||||||
|
void LocalMapBase::applyFogOfWar()
|
||||||
|
{
|
||||||
|
for (int mx=0; mx<3; ++mx)
|
||||||
|
{
|
||||||
|
for (int my=0; my<3; ++my)
|
||||||
|
{
|
||||||
|
std::string name = "Map_" + boost::lexical_cast<std::string>(mx) + "_"
|
||||||
|
+ boost::lexical_cast<std::string>(my);
|
||||||
|
std::string image = mPrefix+"_"+ boost::lexical_cast<std::string>(mCurX + (mx-1)) + "_"
|
||||||
|
+ boost::lexical_cast<std::string>(mCurY + (mInterior ? (my-1) : -1*(my-1)));
|
||||||
|
MyGUI::ImageBox* fog;
|
||||||
|
mLayout->getWidget(fog, name+"_fog");
|
||||||
|
fog->setImageTexture(mFogOfWar ?
|
||||||
|
((MyGUI::RenderManager::getInstance().getTexture(image+"_fog") != 0) ? image+"_fog"
|
||||||
|
: "black.png" )
|
||||||
|
: "");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void LocalMapBase::setActiveCell(const int x, const int y, bool interior)
|
||||||
|
{
|
||||||
|
if (x==mCurX && y==mCurY && mInterior==interior && !mChanged) return; // don't do anything if we're still in the same cell
|
||||||
|
for (int mx=0; mx<3; ++mx)
|
||||||
|
{
|
||||||
|
for (int my=0; my<3; ++my)
|
||||||
|
{
|
||||||
|
std::string name = "Map_" + boost::lexical_cast<std::string>(mx) + "_"
|
||||||
|
+ boost::lexical_cast<std::string>(my);
|
||||||
|
|
||||||
|
std::string image = mPrefix+"_"+ boost::lexical_cast<std::string>(x + (mx-1)) + "_"
|
||||||
|
+ boost::lexical_cast<std::string>(y + (interior ? (my-1) : -1*(my-1)));
|
||||||
|
|
||||||
|
MyGUI::ImageBox* box;
|
||||||
|
mLayout->getWidget(box, name);
|
||||||
|
|
||||||
|
if (MyGUI::RenderManager::getInstance().getTexture(image) != 0)
|
||||||
|
box->setImageTexture(image);
|
||||||
|
else
|
||||||
|
box->setImageTexture("black.png");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
mInterior = interior;
|
||||||
|
mCurX = x;
|
||||||
|
mCurY = y;
|
||||||
|
mChanged = false;
|
||||||
|
applyFogOfWar();
|
||||||
|
}
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
MapWindow::MapWindow(WindowManager& parWindowManager) :
|
MapWindow::MapWindow(WindowManager& parWindowManager) :
|
||||||
MWGui::WindowPinnableBase("openmw_map_window_layout.xml", parWindowManager),
|
MWGui::WindowPinnableBase("openmw_map_window_layout.xml", parWindowManager),
|
||||||
mGlobal(false)
|
mGlobal(false)
|
||||||
|
|
|
@ -1,11 +1,39 @@
|
||||||
#ifndef MWGUI_MAPWINDOW_H
|
#ifndef MWGUI_MAPWINDOW_H
|
||||||
#define MWGUI_MAPWINDOW_H
|
#define MWGUI_MAPWINDOW_H
|
||||||
|
|
||||||
#include "layouts.hpp"
|
|
||||||
#include "window_pinnable_base.hpp"
|
#include "window_pinnable_base.hpp"
|
||||||
|
|
||||||
namespace MWGui
|
namespace MWGui
|
||||||
{
|
{
|
||||||
|
class LocalMapBase
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
LocalMapBase();
|
||||||
|
void init(MyGUI::ScrollView* widget, OEngine::GUI::Layout* layout);
|
||||||
|
|
||||||
|
void setCellPrefix(const std::string& prefix);
|
||||||
|
void setActiveCell(const int x, const int y, bool interior=false);
|
||||||
|
|
||||||
|
void toggleFogOfWar();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
int mCurX, mCurY;
|
||||||
|
bool mInterior;
|
||||||
|
MyGUI::ScrollView* mLocalMap;
|
||||||
|
std::string mPrefix;
|
||||||
|
bool mChanged;
|
||||||
|
bool mFogOfWar;
|
||||||
|
|
||||||
|
void applyFogOfWar();
|
||||||
|
|
||||||
|
OEngine::GUI::Layout* mLayout;
|
||||||
|
|
||||||
|
float mLastPositionX;
|
||||||
|
float mLastPositionY;
|
||||||
|
float mLastDirectionX;
|
||||||
|
float mLastDirectionY;
|
||||||
|
};
|
||||||
|
|
||||||
class MapWindow : public MWGui::WindowPinnableBase, public LocalMapBase
|
class MapWindow : public MWGui::WindowPinnableBase, public LocalMapBase
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
#include "window_manager.hpp"
|
#include "window_manager.hpp"
|
||||||
#include "layouts.hpp"
|
|
||||||
#include "text_input.hpp"
|
#include "text_input.hpp"
|
||||||
#include "review.hpp"
|
#include "review.hpp"
|
||||||
#include "dialogue.hpp"
|
#include "dialogue.hpp"
|
||||||
|
@ -13,6 +12,8 @@
|
||||||
#include "scrollwindow.hpp"
|
#include "scrollwindow.hpp"
|
||||||
#include "bookwindow.hpp"
|
#include "bookwindow.hpp"
|
||||||
#include "list.hpp"
|
#include "list.hpp"
|
||||||
|
#include "hud.hpp"
|
||||||
|
#include "mainmenu.hpp"
|
||||||
|
|
||||||
#include "../mwmechanics/mechanicsmanager.hpp"
|
#include "../mwmechanics/mechanicsmanager.hpp"
|
||||||
#include "../mwinput/inputmanager.hpp"
|
#include "../mwinput/inputmanager.hpp"
|
||||||
|
|
Loading…
Reference in a new issue