mirror of
https://github.com/TES3MP/openmw-tes3mp.git
synced 2025-02-01 09:45:33 +00:00
Merge remote-tracking branch 'scrawl/cursor'
This commit is contained in:
commit
6dfcc6e60f
14 changed files with 219 additions and 184 deletions
|
@ -74,7 +74,6 @@ set(LIBDIR ${CMAKE_SOURCE_DIR}/libs)
|
||||||
set(OENGINE_OGRE
|
set(OENGINE_OGRE
|
||||||
${LIBDIR}/openengine/ogre/renderer.cpp
|
${LIBDIR}/openengine/ogre/renderer.cpp
|
||||||
${LIBDIR}/openengine/ogre/fader.cpp
|
${LIBDIR}/openengine/ogre/fader.cpp
|
||||||
${LIBDIR}/openengine/ogre/imagerotate.cpp
|
|
||||||
${LIBDIR}/openengine/ogre/selectionbuffer.cpp
|
${LIBDIR}/openengine/ogre/selectionbuffer.cpp
|
||||||
)
|
)
|
||||||
set(OENGINE_GUI
|
set(OENGINE_GUI
|
||||||
|
|
|
@ -26,11 +26,11 @@ add_openmw_dir (mwinput
|
||||||
add_openmw_dir (mwgui
|
add_openmw_dir (mwgui
|
||||||
text_input widgets race class birth review windowmanagerimp console dialogue
|
text_input widgets race class birth review windowmanagerimp 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 tooltips scrollwindow bookwindow list
|
||||||
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 exposedwindow
|
enchantingdialog trainingwindow travelwindow imagebutton exposedwindow cursor
|
||||||
)
|
)
|
||||||
|
|
||||||
add_openmw_dir (mwdialogue
|
add_openmw_dir (mwdialogue
|
||||||
|
|
|
@ -18,7 +18,6 @@
|
||||||
#include "mwinput/inputmanagerimp.hpp"
|
#include "mwinput/inputmanagerimp.hpp"
|
||||||
|
|
||||||
#include "mwgui/windowmanagerimp.hpp"
|
#include "mwgui/windowmanagerimp.hpp"
|
||||||
#include "mwgui/cursorreplace.hpp"
|
|
||||||
|
|
||||||
#include "mwscript/scriptmanagerimp.hpp"
|
#include "mwscript/scriptmanagerimp.hpp"
|
||||||
#include "mwscript/extensions.hpp"
|
#include "mwscript/extensions.hpp"
|
||||||
|
@ -333,9 +332,6 @@ void OMW::Engine::prepareEngine (Settings::Manager & settings)
|
||||||
|
|
||||||
loadBSA();
|
loadBSA();
|
||||||
|
|
||||||
// cursor replacer (converts the cursor from the bsa so they can be used by mygui)
|
|
||||||
MWGui::CursorReplace replacer;
|
|
||||||
|
|
||||||
// Create the world
|
// Create the world
|
||||||
mEnvironment.setWorld( new MWWorld::World (*mOgre, mFileCollections, mMaster, mPlugins,
|
mEnvironment.setWorld( new MWWorld::World (*mOgre, mFileCollections, mMaster, mPlugins,
|
||||||
mResDir, mCfgMgr.getCachePath(), mNewGame, mEncoder, mFallbackMap,
|
mResDir, mCfgMgr.getCachePath(), mNewGame, mEncoder, mFallbackMap,
|
||||||
|
|
130
apps/openmw/mwgui/cursor.cpp
Normal file
130
apps/openmw/mwgui/cursor.cpp
Normal file
|
@ -0,0 +1,130 @@
|
||||||
|
#include "cursor.hpp"
|
||||||
|
|
||||||
|
#include <MyGUI_PointerManager.h>
|
||||||
|
#include <MyGUI_InputManager.h>
|
||||||
|
#include <MyGUI_RenderManager.h>
|
||||||
|
#include <MyGUI_RotatingSkin.h>
|
||||||
|
#include <MyGUI_Gui.h>
|
||||||
|
|
||||||
|
#include <OgreMath.h>
|
||||||
|
|
||||||
|
|
||||||
|
namespace MWGui
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
ResourceImageSetPointerFix::ResourceImageSetPointerFix() :
|
||||||
|
mImageSet(nullptr)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
ResourceImageSetPointerFix::~ResourceImageSetPointerFix()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void ResourceImageSetPointerFix::deserialization(MyGUI::xml::ElementPtr _node, MyGUI::Version _version)
|
||||||
|
{
|
||||||
|
Base::deserialization(_node, _version);
|
||||||
|
|
||||||
|
MyGUI::xml::ElementEnumerator info = _node->getElementEnumerator();
|
||||||
|
while (info.next("Property"))
|
||||||
|
{
|
||||||
|
const std::string& key = info->findAttribute("key");
|
||||||
|
const std::string& value = info->findAttribute("value");
|
||||||
|
|
||||||
|
if (key == "Point")
|
||||||
|
mPoint = MyGUI::IntPoint::parse(value);
|
||||||
|
else if (key == "Size")
|
||||||
|
mSize = MyGUI::IntSize::parse(value);
|
||||||
|
else if (key == "Rotation")
|
||||||
|
mRotation = MyGUI::utility::parseInt(value);
|
||||||
|
else if (key == "Resource")
|
||||||
|
mImageSet = MyGUI::ResourceManager::getInstance().getByName(value)->castType<MyGUI::ResourceImageSet>();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int ResourceImageSetPointerFix::getRotation()
|
||||||
|
{
|
||||||
|
return mRotation;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ResourceImageSetPointerFix::setImage(MyGUI::ImageBox* _image)
|
||||||
|
{
|
||||||
|
if (mImageSet != nullptr)
|
||||||
|
_image->setItemResourceInfo(mImageSet->getIndexInfo(0, 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
void ResourceImageSetPointerFix::setPosition(MyGUI::ImageBox* _image, const MyGUI::IntPoint& _point)
|
||||||
|
{
|
||||||
|
_image->setCoord(_point.left - mPoint.left, _point.top - mPoint.top, mSize.width, mSize.height);
|
||||||
|
}
|
||||||
|
|
||||||
|
MyGUI::ResourceImageSetPtr ResourceImageSetPointerFix:: getImageSet()
|
||||||
|
{
|
||||||
|
return mImageSet;
|
||||||
|
}
|
||||||
|
|
||||||
|
MyGUI::IntPoint ResourceImageSetPointerFix::getHotSpot()
|
||||||
|
{
|
||||||
|
return mPoint;
|
||||||
|
}
|
||||||
|
|
||||||
|
MyGUI::IntSize ResourceImageSetPointerFix::getSize()
|
||||||
|
{
|
||||||
|
return mSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
Cursor::Cursor()
|
||||||
|
{
|
||||||
|
// hide mygui's pointer since we're rendering it ourselves (because mygui's pointer doesn't support rotation)
|
||||||
|
MyGUI::PointerManager::getInstance().setVisible(false);
|
||||||
|
|
||||||
|
MyGUI::PointerManager::getInstance().eventChangeMousePointer += MyGUI::newDelegate(this, &Cursor::onCursorChange);
|
||||||
|
|
||||||
|
mWidget = MyGUI::Gui::getInstance().createWidget<MyGUI::ImageBox>("RotatingSkin",0,0,0,0,MyGUI::Align::Default,"Pointer","");
|
||||||
|
|
||||||
|
onCursorChange(MyGUI::PointerManager::getInstance().getDefaultPointer());
|
||||||
|
}
|
||||||
|
|
||||||
|
Cursor::~Cursor()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void Cursor::onCursorChange(const std::string &name)
|
||||||
|
{
|
||||||
|
ResourceImageSetPointerFix* imgSetPtr = dynamic_cast<ResourceImageSetPointerFix*>(
|
||||||
|
MyGUI::PointerManager::getInstance().getByName(name));
|
||||||
|
assert(imgSetPtr != NULL);
|
||||||
|
|
||||||
|
MyGUI::ResourceImageSet* imgSet = imgSetPtr->getImageSet();
|
||||||
|
|
||||||
|
std::string texture = imgSet->getIndexInfo(0,0).texture;
|
||||||
|
|
||||||
|
mSize = imgSetPtr->getSize();
|
||||||
|
mHotSpot = imgSetPtr->getHotSpot();
|
||||||
|
|
||||||
|
int rotation = imgSetPtr->getRotation();
|
||||||
|
|
||||||
|
mWidget->setImageTexture(texture);
|
||||||
|
MyGUI::ISubWidget* main = mWidget->getSubWidgetMain();
|
||||||
|
MyGUI::RotatingSkin* rotatingSubskin = main->castType<MyGUI::RotatingSkin>();
|
||||||
|
rotatingSubskin->setCenter(MyGUI::IntPoint(mSize.width/2,mSize.height/2));
|
||||||
|
rotatingSubskin->setAngle(Ogre::Degree(rotation).valueRadians());
|
||||||
|
}
|
||||||
|
|
||||||
|
void Cursor::update()
|
||||||
|
{
|
||||||
|
MyGUI::IntPoint position = MyGUI::InputManager::getInstance().getMousePosition();
|
||||||
|
|
||||||
|
mWidget->setPosition(position - mHotSpot);
|
||||||
|
mWidget->setSize(mSize);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Cursor::setVisible(bool visible)
|
||||||
|
{
|
||||||
|
mWidget->setVisible(visible);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
62
apps/openmw/mwgui/cursor.hpp
Normal file
62
apps/openmw/mwgui/cursor.hpp
Normal file
|
@ -0,0 +1,62 @@
|
||||||
|
#ifndef MWGUI_CURSOR_H
|
||||||
|
#define MWGUI_CURSOR_H
|
||||||
|
|
||||||
|
#include <MyGUI_IPointer.h>
|
||||||
|
#include <MyGUI_ResourceImageSet.h>
|
||||||
|
#include <MyGUI_RTTI.h>
|
||||||
|
|
||||||
|
namespace MWGui
|
||||||
|
{
|
||||||
|
|
||||||
|
/// \brief Allows us to get the members of
|
||||||
|
/// ResourceImageSetPointer that we need.
|
||||||
|
/// \example MyGUI::FactoryManager::getInstance().registerFactory<ResourceImageSetPointerFix>("Resource", "ResourceImageSetPointer");
|
||||||
|
/// MyGUI::ResourceManager::getInstance().load("core.xml");
|
||||||
|
class ResourceImageSetPointerFix :
|
||||||
|
public MyGUI::IPointer
|
||||||
|
{
|
||||||
|
MYGUI_RTTI_DERIVED( ResourceImageSetPointerFix )
|
||||||
|
|
||||||
|
public:
|
||||||
|
ResourceImageSetPointerFix();
|
||||||
|
virtual ~ResourceImageSetPointerFix();
|
||||||
|
|
||||||
|
virtual void deserialization(MyGUI::xml::ElementPtr _node, MyGUI::Version _version);
|
||||||
|
|
||||||
|
virtual void setImage(MyGUI::ImageBox* _image);
|
||||||
|
virtual void setPosition(MyGUI::ImageBox* _image, const MyGUI::IntPoint& _point);
|
||||||
|
|
||||||
|
//and now for the whole point of this class, allow us to get
|
||||||
|
//the hot spot, the image and the size of the cursor.
|
||||||
|
virtual MyGUI::ResourceImageSetPtr getImageSet();
|
||||||
|
virtual MyGUI::IntPoint getHotSpot();
|
||||||
|
virtual MyGUI::IntSize getSize();
|
||||||
|
virtual int getRotation();
|
||||||
|
|
||||||
|
private:
|
||||||
|
MyGUI::IntPoint mPoint;
|
||||||
|
MyGUI::IntSize mSize;
|
||||||
|
MyGUI::ResourceImageSetPtr mImageSet;
|
||||||
|
int mRotation; // rotation in degrees
|
||||||
|
};
|
||||||
|
|
||||||
|
class Cursor
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Cursor();
|
||||||
|
~Cursor();
|
||||||
|
void update ();
|
||||||
|
|
||||||
|
void setVisible (bool visible);
|
||||||
|
|
||||||
|
void onCursorChange (const std::string& name);
|
||||||
|
|
||||||
|
private:
|
||||||
|
MyGUI::ImageBox* mWidget;
|
||||||
|
|
||||||
|
MyGUI::IntSize mSize;
|
||||||
|
MyGUI::IntPoint mHotSpot;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
|
@ -1,16 +0,0 @@
|
||||||
#include "cursorreplace.hpp"
|
|
||||||
|
|
||||||
#include <boost/filesystem.hpp>
|
|
||||||
#include <openengine/ogre/imagerotate.hpp>
|
|
||||||
|
|
||||||
#include <OgreResourceGroupManager.h>
|
|
||||||
#include <OgreRoot.h>
|
|
||||||
|
|
||||||
using namespace MWGui;
|
|
||||||
|
|
||||||
CursorReplace::CursorReplace()
|
|
||||||
{
|
|
||||||
OEngine::Render::ImageRotate::rotate("textures\\tx_cursormove.dds", "mwpointer_vresize.png", 90);
|
|
||||||
OEngine::Render::ImageRotate::rotate("textures\\tx_cursormove.dds", "mwpointer_dresize1.png", -45);
|
|
||||||
OEngine::Render::ImageRotate::rotate("textures\\tx_cursormove.dds", "mwpointer_dresize2.png", 45);
|
|
||||||
}
|
|
|
@ -1,16 +0,0 @@
|
||||||
#ifndef GAME_CURSORREPLACE_H
|
|
||||||
#define GAME_CURSORREPLACE_H
|
|
||||||
|
|
||||||
#include <string>
|
|
||||||
|
|
||||||
namespace MWGui
|
|
||||||
{
|
|
||||||
/// \brief MyGUI does not support rotating cursors, so we have to do it manually
|
|
||||||
class CursorReplace
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
CursorReplace();
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
|
@ -53,6 +53,7 @@
|
||||||
#include "trainingwindow.hpp"
|
#include "trainingwindow.hpp"
|
||||||
#include "imagebutton.hpp"
|
#include "imagebutton.hpp"
|
||||||
#include "exposedwindow.hpp"
|
#include "exposedwindow.hpp"
|
||||||
|
#include "cursor.hpp"
|
||||||
|
|
||||||
using namespace MWGui;
|
using namespace MWGui;
|
||||||
|
|
||||||
|
@ -130,6 +131,9 @@ WindowManager::WindowManager(
|
||||||
MyGUI::FactoryManager::getInstance().registerFactory<MWGui::ImageButton>("Widget");
|
MyGUI::FactoryManager::getInstance().registerFactory<MWGui::ImageButton>("Widget");
|
||||||
MyGUI::FactoryManager::getInstance().registerFactory<MWGui::ExposedWindow>("Widget");
|
MyGUI::FactoryManager::getInstance().registerFactory<MWGui::ExposedWindow>("Widget");
|
||||||
|
|
||||||
|
MyGUI::FactoryManager::getInstance().registerFactory<ResourceImageSetPointerFix>("Resource", "ResourceImageSetPointer");
|
||||||
|
MyGUI::ResourceManager::getInstance().load("core.xml");
|
||||||
|
|
||||||
MyGUI::LanguageManager::getInstance().eventRequestTag = MyGUI::newDelegate(this, &WindowManager::onRetrieveTag);
|
MyGUI::LanguageManager::getInstance().eventRequestTag = MyGUI::newDelegate(this, &WindowManager::onRetrieveTag);
|
||||||
|
|
||||||
// Get size info from the Gui object
|
// Get size info from the Gui object
|
||||||
|
@ -178,6 +182,8 @@ WindowManager::WindowManager(
|
||||||
|
|
||||||
mInputBlocker = mGui->createWidget<MyGUI::Widget>("",0,0,w,h,MyGUI::Align::Default,"Windows","");
|
mInputBlocker = mGui->createWidget<MyGUI::Widget>("",0,0,w,h,MyGUI::Align::Default,"Windows","");
|
||||||
|
|
||||||
|
mCursor = new Cursor();
|
||||||
|
|
||||||
// The HUD is always on
|
// The HUD is always on
|
||||||
mHud->setVisible(true);
|
mHud->setVisible(true);
|
||||||
|
|
||||||
|
@ -236,6 +242,7 @@ WindowManager::~WindowManager()
|
||||||
delete mTrainingWindow;
|
delete mTrainingWindow;
|
||||||
delete mCountDialog;
|
delete mCountDialog;
|
||||||
delete mQuickKeysMenu;
|
delete mQuickKeysMenu;
|
||||||
|
delete mCursor;
|
||||||
|
|
||||||
cleanupGarbage();
|
cleanupGarbage();
|
||||||
|
|
||||||
|
@ -262,6 +269,8 @@ void WindowManager::update()
|
||||||
mHud->setFPS(mFPS);
|
mHud->setFPS(mFPS);
|
||||||
mHud->setTriangleCount(mTriangleCount);
|
mHud->setTriangleCount(mTriangleCount);
|
||||||
mHud->setBatchCount(mBatchCount);
|
mHud->setBatchCount(mBatchCount);
|
||||||
|
|
||||||
|
mCursor->update();
|
||||||
}
|
}
|
||||||
|
|
||||||
void WindowManager::updateVisible()
|
void WindowManager::updateVisible()
|
||||||
|
@ -293,7 +302,7 @@ void WindowManager::updateVisible()
|
||||||
mHud->setVisible(true);
|
mHud->setVisible(true);
|
||||||
|
|
||||||
// Mouse is visible whenever we're not in game mode
|
// Mouse is visible whenever we're not in game mode
|
||||||
MyGUI::PointerManager::getInstance().setVisible(isGuiMode());
|
mCursor->setVisible(isGuiMode());
|
||||||
|
|
||||||
bool gameMode = !isGuiMode();
|
bool gameMode = !isGuiMode();
|
||||||
|
|
||||||
|
@ -421,7 +430,7 @@ void WindowManager::updateVisible()
|
||||||
break;
|
break;
|
||||||
case GM_LoadingWallpaper:
|
case GM_LoadingWallpaper:
|
||||||
mHud->setVisible(false);
|
mHud->setVisible(false);
|
||||||
MyGUI::PointerManager::getInstance().setVisible(false);
|
mCursor->setVisible(false);
|
||||||
break;
|
break;
|
||||||
case GM_Loading:
|
case GM_Loading:
|
||||||
// Show the pinned windows
|
// Show the pinned windows
|
||||||
|
@ -430,10 +439,10 @@ void WindowManager::updateVisible()
|
||||||
mInventoryWindow->setVisible(mInventoryWindow->pinned());
|
mInventoryWindow->setVisible(mInventoryWindow->pinned());
|
||||||
mSpellWindow->setVisible(mSpellWindow->pinned());
|
mSpellWindow->setVisible(mSpellWindow->pinned());
|
||||||
|
|
||||||
MyGUI::PointerManager::getInstance().setVisible(false);
|
mCursor->setVisible(false);
|
||||||
break;
|
break;
|
||||||
case GM_Video:
|
case GM_Video:
|
||||||
MyGUI::PointerManager::getInstance().setVisible(false);
|
mCursor->setVisible(false);
|
||||||
mHud->setVisible(false);
|
mHud->setVisible(false);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -755,7 +764,7 @@ void WindowManager::setSpellVisibility(bool visible)
|
||||||
|
|
||||||
void WindowManager::setMouseVisible(bool visible)
|
void WindowManager::setMouseVisible(bool visible)
|
||||||
{
|
{
|
||||||
MyGUI::PointerManager::getInstance().setVisible(visible);
|
mCursor->setVisible(visible);
|
||||||
}
|
}
|
||||||
|
|
||||||
void WindowManager::setDragDrop(bool dragDrop)
|
void WindowManager::setDragDrop(bool dragDrop)
|
||||||
|
|
|
@ -72,6 +72,7 @@ namespace MWGui
|
||||||
class SpellCreationDialog;
|
class SpellCreationDialog;
|
||||||
class EnchantingDialog;
|
class EnchantingDialog;
|
||||||
class TrainingWindow;
|
class TrainingWindow;
|
||||||
|
class Cursor;
|
||||||
|
|
||||||
class WindowManager : public MWBase::WindowManager
|
class WindowManager : public MWBase::WindowManager
|
||||||
{
|
{
|
||||||
|
@ -260,6 +261,7 @@ namespace MWGui
|
||||||
EnchantingDialog* mEnchantingDialog;
|
EnchantingDialog* mEnchantingDialog;
|
||||||
TrainingWindow* mTrainingWindow;
|
TrainingWindow* mTrainingWindow;
|
||||||
Translation::Storage& mTranslationDataStorage;
|
Translation::Storage& mTranslationDataStorage;
|
||||||
|
Cursor* mCursor;
|
||||||
|
|
||||||
CharacterCreation* mCharGen;
|
CharacterCreation* mCharGen;
|
||||||
|
|
||||||
|
|
|
@ -5,26 +5,31 @@
|
||||||
<Property key="Point" value="7 0"/>
|
<Property key="Point" value="7 0"/>
|
||||||
<Property key="Size" value="32 32"/>
|
<Property key="Size" value="32 32"/>
|
||||||
<Property key="Resource" value="ArrowPointerImage"/>
|
<Property key="Resource" value="ArrowPointerImage"/>
|
||||||
|
<Property key="Rotation" value="0"/>
|
||||||
</Resource>
|
</Resource>
|
||||||
<Resource type="ResourceImageSetPointer" name="hresize">
|
<Resource type="ResourceImageSetPointer" name="hresize">
|
||||||
<Property key="Point" value="16 14"/>
|
<Property key="Point" value="16 14"/>
|
||||||
<Property key="Size" value="32 32"/>
|
<Property key="Size" value="32 32"/>
|
||||||
<Property key="Resource" value="HResizePointerImage"/>
|
<Property key="Resource" value="HResizePointerImage"/>
|
||||||
|
<Property key="Rotation" value="0"/>
|
||||||
</Resource>
|
</Resource>
|
||||||
<Resource type="ResourceImageSetPointer" name="vresize">
|
<Resource type="ResourceImageSetPointer" name="vresize">
|
||||||
<Property key="Point" value="17 16"/>
|
<Property key="Point" value="17 16"/>
|
||||||
<Property key="Size" value="32 32"/>
|
<Property key="Size" value="32 32"/>
|
||||||
<Property key="Resource" value="VResizePointerImage"/>
|
<Property key="Resource" value="HResizePointerImage"/>
|
||||||
|
<Property key="Rotation" value="90"/>
|
||||||
</Resource>
|
</Resource>
|
||||||
<Resource type="ResourceImageSetPointer" name="dresize">
|
<Resource type="ResourceImageSetPointer" name="dresize">
|
||||||
<Property key="Point" value="17 15"/>
|
<Property key="Point" value="17 15"/>
|
||||||
<Property key="Size" value="32 32"/>
|
<Property key="Size" value="32 32"/>
|
||||||
<Property key="Resource" value="DResizePointerImage"/>
|
<Property key="Resource" value="HResizePointerImage"/>
|
||||||
|
<Property key="Rotation" value="45"/>
|
||||||
</Resource>
|
</Resource>
|
||||||
<Resource type="ResourceImageSetPointer" name="dresize2">
|
<Resource type="ResourceImageSetPointer" name="dresize2">
|
||||||
<Property key="Point" value="15 15"/>
|
<Property key="Point" value="15 15"/>
|
||||||
<Property key="Size" value="32 32"/>
|
<Property key="Size" value="32 32"/>
|
||||||
<Property key="Resource" value="DResize2PointerImage"/>
|
<Property key="Resource" value="HResizePointerImage"/>
|
||||||
|
<Property key="Rotation" value="-45"/>
|
||||||
</Resource>
|
</Resource>
|
||||||
<Resource type="ResourceImageSetPointer" name="drop_ground">
|
<Resource type="ResourceImageSetPointer" name="drop_ground">
|
||||||
<Property key="Point" value="0 24"/>
|
<Property key="Point" value="0 24"/>
|
||||||
|
|
|
@ -17,27 +17,6 @@
|
||||||
</Index>
|
</Index>
|
||||||
</Group>
|
</Group>
|
||||||
</Resource>
|
</Resource>
|
||||||
<Resource type="ResourceImageSet" name="VResizePointerImage">
|
|
||||||
<Group name="Pointer" texture="mwpointer_vresize.png" size="32 32">
|
|
||||||
<Index name="Pointer" >
|
|
||||||
<Frame point="0 0"/>
|
|
||||||
</Index>
|
|
||||||
</Group>
|
|
||||||
</Resource>
|
|
||||||
<Resource type="ResourceImageSet" name="DResizePointerImage">
|
|
||||||
<Group name="Pointer" texture="mwpointer_dresize1.png" size="32 32">
|
|
||||||
<Index name="Pointer" >
|
|
||||||
<Frame point="o o"/>
|
|
||||||
</Index>
|
|
||||||
</Group>
|
|
||||||
</Resource>
|
|
||||||
<Resource type="ResourceImageSet" name="DResize2PointerImage">
|
|
||||||
<Group name="Pointer" texture="mwpointer_dresize2.png" size="32 32">
|
|
||||||
<Index name="Pointer" >
|
|
||||||
<Frame point="0 0"/>
|
|
||||||
</Index>
|
|
||||||
</Group>
|
|
||||||
</Resource>
|
|
||||||
<Resource type="ResourceImageSet" name="DropGroundPointerImage">
|
<Resource type="ResourceImageSet" name="DropGroundPointerImage">
|
||||||
<Group name="Pointer" texture="textures\cursor_drop_ground.dds" size="32 32">
|
<Group name="Pointer" texture="textures\cursor_drop_ground.dds" size="32 32">
|
||||||
<Index name="Pointer" >
|
<Index name="Pointer" >
|
||||||
|
|
|
@ -53,7 +53,7 @@ void MyGUIManager::setup(Ogre::RenderWindow *wnd, Ogre::SceneManager *mgr, bool
|
||||||
|
|
||||||
// Create GUI
|
// Create GUI
|
||||||
mGui = new Gui();
|
mGui = new Gui();
|
||||||
mGui->initialise("core.xml");
|
mGui->initialise("");
|
||||||
}
|
}
|
||||||
|
|
||||||
void MyGUIManager::shutdown()
|
void MyGUIManager::shutdown()
|
||||||
|
|
|
@ -1,88 +0,0 @@
|
||||||
#include "imagerotate.hpp"
|
|
||||||
|
|
||||||
#include <OgreRoot.h>
|
|
||||||
#include <OgreSceneManager.h>
|
|
||||||
#include <OgreImage.h>
|
|
||||||
#include <OgreTexture.h>
|
|
||||||
#include <OgreRenderTarget.h>
|
|
||||||
#include <OgreCamera.h>
|
|
||||||
#include <OgreTextureUnitState.h>
|
|
||||||
#include <OgreHardwarePixelBuffer.h>
|
|
||||||
|
|
||||||
using namespace Ogre;
|
|
||||||
using namespace OEngine::Render;
|
|
||||||
|
|
||||||
void ImageRotate::rotate(const std::string& sourceImage, const std::string& destImage, const float angle)
|
|
||||||
{
|
|
||||||
Root* root = Ogre::Root::getSingletonPtr();
|
|
||||||
|
|
||||||
std::string destImageRot = std::string(destImage) + std::string("_rot");
|
|
||||||
|
|
||||||
SceneManager* sceneMgr = root->createSceneManager(ST_GENERIC);
|
|
||||||
Camera* camera = sceneMgr->createCamera("ImageRotateCamera");
|
|
||||||
|
|
||||||
MaterialPtr material = MaterialManager::getSingleton().create("ImageRotateMaterial", ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);
|
|
||||||
material->getTechnique(0)->getPass(0)->setLightingEnabled(false);
|
|
||||||
material->getTechnique(0)->getPass(0)->setDepthCheckEnabled(false);
|
|
||||||
TextureUnitState* tus = material->getTechnique(0)->getPass(0)->createTextureUnitState(sourceImage);
|
|
||||||
Degree deg(angle);
|
|
||||||
tus->setTextureRotate(Radian(deg.valueRadians()));
|
|
||||||
tus->setTextureAddressingMode(TextureUnitState::TAM_BORDER);
|
|
||||||
tus->setTextureBorderColour(ColourValue(0, 0, 0, 0));
|
|
||||||
|
|
||||||
Rectangle2D* rect = new Rectangle2D(true);
|
|
||||||
rect->setCorners(-1.0, 1.0, 1.0, -1.0);
|
|
||||||
rect->setMaterial("ImageRotateMaterial");
|
|
||||||
// Render the background before everything else
|
|
||||||
rect->setRenderQueueGroup(RENDER_QUEUE_BACKGROUND);
|
|
||||||
|
|
||||||
// Use infinite AAB to always stay visible
|
|
||||||
AxisAlignedBox aabInf;
|
|
||||||
aabInf.setInfinite();
|
|
||||||
rect->setBoundingBox(aabInf);
|
|
||||||
|
|
||||||
// Attach background to the scene
|
|
||||||
SceneNode* node = sceneMgr->getRootSceneNode()->createChildSceneNode();
|
|
||||||
node->attachObject(rect);
|
|
||||||
|
|
||||||
// retrieve image width and height
|
|
||||||
TexturePtr sourceTexture = TextureManager::getSingleton().getByName(sourceImage);
|
|
||||||
unsigned int width = sourceTexture->getWidth();
|
|
||||||
unsigned int height = sourceTexture->getHeight();
|
|
||||||
|
|
||||||
TexturePtr destTextureRot = TextureManager::getSingleton().createManual(
|
|
||||||
destImageRot,
|
|
||||||
ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME,
|
|
||||||
TEX_TYPE_2D,
|
|
||||||
width, height,
|
|
||||||
0,
|
|
||||||
PF_FLOAT16_RGBA,
|
|
||||||
TU_RENDERTARGET);
|
|
||||||
|
|
||||||
RenderTarget* rtt = destTextureRot->getBuffer()->getRenderTarget();
|
|
||||||
rtt->setAutoUpdated(false);
|
|
||||||
Viewport* vp = rtt->addViewport(camera);
|
|
||||||
vp->setOverlaysEnabled(false);
|
|
||||||
vp->setShadowsEnabled(false);
|
|
||||||
vp->setBackgroundColour(ColourValue(0,0,0,0));
|
|
||||||
|
|
||||||
rtt->update();
|
|
||||||
|
|
||||||
//copy the rotated image to a static texture
|
|
||||||
TexturePtr destTexture = TextureManager::getSingleton().createManual(
|
|
||||||
destImage,
|
|
||||||
ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME,
|
|
||||||
TEX_TYPE_2D,
|
|
||||||
width, height,
|
|
||||||
0,
|
|
||||||
PF_FLOAT16_RGBA,
|
|
||||||
Ogre::TU_STATIC);
|
|
||||||
|
|
||||||
destTexture->getBuffer()->blit(destTextureRot->getBuffer());
|
|
||||||
|
|
||||||
// remove all the junk we've created
|
|
||||||
TextureManager::getSingleton().remove(destImageRot);
|
|
||||||
MaterialManager::getSingleton().remove("ImageRotateMaterial");
|
|
||||||
root->destroySceneManager(sceneMgr);
|
|
||||||
delete rect;
|
|
||||||
}
|
|
|
@ -1,27 +0,0 @@
|
||||||
#ifndef OENGINE_OGRE_IMAGEROTATE_HPP
|
|
||||||
#define OENGINE_OGRE_IMAGEROTATE_HPP
|
|
||||||
|
|
||||||
#include <string>
|
|
||||||
|
|
||||||
namespace OEngine
|
|
||||||
{
|
|
||||||
namespace Render
|
|
||||||
{
|
|
||||||
|
|
||||||
/// Rotate an image by certain degrees and save as file, uses the GPU
|
|
||||||
/// Make sure Ogre Root is initialised before calling
|
|
||||||
class ImageRotate
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
/**
|
|
||||||
* @param source image (file name - has to exist in an resource group)
|
|
||||||
* @param name of the destination texture to save to (in memory)
|
|
||||||
* @param angle in degrees to turn
|
|
||||||
*/
|
|
||||||
static void rotate(const std::string& sourceImage, const std::string& destImage, const float angle);
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
Loading…
Reference in a new issue