Merge branch 'master' into graphics
commit
d861b8e45e
@ -0,0 +1,16 @@
|
|||||||
|
#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);
|
||||||
|
}
|
@ -0,0 +1,16 @@
|
|||||||
|
#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
|
@ -0,0 +1,81 @@
|
|||||||
|
|
||||||
|
#include "spells.hpp"
|
||||||
|
|
||||||
|
#include <components/esm/loadspel.hpp>
|
||||||
|
|
||||||
|
#include "../mwworld/environment.hpp"
|
||||||
|
#include "../mwworld/world.hpp"
|
||||||
|
|
||||||
|
#include "magiceffects.hpp"
|
||||||
|
|
||||||
|
namespace MWMechanics
|
||||||
|
{
|
||||||
|
void Spells::addSpell (const ESM::Spell *spell, MagicEffects& effects) const
|
||||||
|
{
|
||||||
|
for (std::vector<ESM::ENAMstruct>::const_iterator iter = spell->effects.list.begin();
|
||||||
|
iter!=spell->effects.list.end(); ++iter)
|
||||||
|
{
|
||||||
|
EffectParam param;
|
||||||
|
param.mMagnitude = iter->magnMax; /// \todo calculate magnitude
|
||||||
|
effects.add (EffectKey (*iter), param);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Spells::TIterator Spells::begin() const
|
||||||
|
{
|
||||||
|
return mSpells.begin();
|
||||||
|
}
|
||||||
|
|
||||||
|
Spells::TIterator Spells::end() const
|
||||||
|
{
|
||||||
|
return mSpells.end();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Spells::add (const std::string& spellId)
|
||||||
|
{
|
||||||
|
if (std::find (mSpells.begin(), mSpells.end(), spellId)!=mSpells.end())
|
||||||
|
mSpells.push_back (spellId);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Spells::remove (const std::string& spellId)
|
||||||
|
{
|
||||||
|
TContainer::iterator iter = std::find (mSpells.begin(), mSpells.end(), spellId);
|
||||||
|
|
||||||
|
if (iter!=mSpells.end())
|
||||||
|
mSpells.erase (iter);
|
||||||
|
|
||||||
|
if (spellId==mSelectedSpell)
|
||||||
|
mSelectedSpell.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
MagicEffects Spells::getMagicEffects (const MWWorld::Environment& environment) const
|
||||||
|
{
|
||||||
|
MagicEffects effects;
|
||||||
|
|
||||||
|
for (TIterator iter = mSpells.begin(); iter!=mSpells.end(); ++iter)
|
||||||
|
{
|
||||||
|
const ESM::Spell *spell = environment.mWorld->getStore().spells.find (*iter);
|
||||||
|
|
||||||
|
if (spell->data.type==ESM::Spell::ST_Ability || spell->data.type==ESM::Spell::ST_Blight ||
|
||||||
|
spell->data.type==ESM::Spell::ST_Disease || spell->data.type==ESM::Spell::ST_Curse)
|
||||||
|
addSpell (spell, effects);
|
||||||
|
}
|
||||||
|
|
||||||
|
return effects;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Spells::clear()
|
||||||
|
{
|
||||||
|
mSpells.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Spells::setSelectedSpell (const std::string& spellId)
|
||||||
|
{
|
||||||
|
mSelectedSpell = spellId;
|
||||||
|
}
|
||||||
|
|
||||||
|
const std::string Spells::getSelectedSpell() const
|
||||||
|
{
|
||||||
|
return mSelectedSpell;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,66 @@
|
|||||||
|
#ifndef GAME_MWMECHANICS_SPELLS_H
|
||||||
|
#define GAME_MWMECHANICS_SPELLS_H
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
namespace ESM
|
||||||
|
{
|
||||||
|
struct Spell;
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace MWWorld
|
||||||
|
{
|
||||||
|
struct Environment;
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace MWMechanics
|
||||||
|
{
|
||||||
|
class MagicEffects;
|
||||||
|
|
||||||
|
/// \brief Spell list
|
||||||
|
///
|
||||||
|
/// This class manages known spells as well as abilities, powers and permanent negative effects like
|
||||||
|
/// diseaes.
|
||||||
|
class Spells
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
typedef std::vector<std::string> TContainer;
|
||||||
|
typedef TContainer::const_iterator TIterator;
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
std::vector<std::string> mSpells;
|
||||||
|
std::string mSelectedSpell;
|
||||||
|
|
||||||
|
void addSpell (const ESM::Spell *, MagicEffects& effects) const;
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
TIterator begin() const;
|
||||||
|
|
||||||
|
TIterator end() const;
|
||||||
|
|
||||||
|
void add (const std::string& spell);
|
||||||
|
///< Adding a spell that is already listed in *this is a no-op.
|
||||||
|
|
||||||
|
void remove (const std::string& spell);
|
||||||
|
///< If the spell to be removed is the selected spell, the selected spell will be changed to
|
||||||
|
/// no spell (empty string).
|
||||||
|
|
||||||
|
MagicEffects getMagicEffects (const MWWorld::Environment& environment) const;
|
||||||
|
///< Return sum of magic effects resulting from abilities, blights, deseases and curses.
|
||||||
|
|
||||||
|
void clear();
|
||||||
|
///< Remove all spells of al types.
|
||||||
|
|
||||||
|
void setSelectedSpell (const std::string& spellId);
|
||||||
|
///< This function does not verify, if the spell is available.
|
||||||
|
|
||||||
|
const std::string getSelectedSpell() const;
|
||||||
|
///< May return an empty string.
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
Binary file not shown.
Before Width: | Height: | Size: 4.7 KiB |
@ -1,8 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<MyGUI type="Resource" version="1.1">
|
|
||||||
<Resource type="ResourceSkin" name="Skin name 0" size="32 32" texture="">
|
|
||||||
<BasisSkin type="SubSkin" offset="0 0 32 32" align="Stretch">
|
|
||||||
<State name="normal" offset="0 0 32 32"/>
|
|
||||||
</BasisSkin>
|
|
||||||
</Resource>
|
|
||||||
</MyGUI>
|
|
@ -0,0 +1,74 @@
|
|||||||
|
#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();
|
||||||
|
|
||||||
|
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 destTexture = TextureManager::getSingleton().createManual(
|
||||||
|
destImage,
|
||||||
|
ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME,
|
||||||
|
TEX_TYPE_2D,
|
||||||
|
width, height,
|
||||||
|
0,
|
||||||
|
PF_A8R8G8B8,
|
||||||
|
TU_RENDERTARGET);
|
||||||
|
|
||||||
|
RenderTarget* rtt = destTexture->getBuffer()->getRenderTarget();
|
||||||
|
rtt->setAutoUpdated(false);
|
||||||
|
Viewport* vp = rtt->addViewport(camera);
|
||||||
|
vp->setOverlaysEnabled(false);
|
||||||
|
vp->setShadowsEnabled(false);
|
||||||
|
vp->setBackgroundColour(ColourValue(0,0,0,0));
|
||||||
|
vp->setClearEveryFrame(true, FBT_DEPTH);
|
||||||
|
|
||||||
|
rtt->update();
|
||||||
|
|
||||||
|
// remove all the junk we've created
|
||||||
|
MaterialManager::getSingleton().remove("ImageRotateMaterial");
|
||||||
|
root->destroySceneManager(sceneMgr);
|
||||||
|
delete rect;
|
||||||
|
}
|
@ -0,0 +1,27 @@
|
|||||||
|
#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 New Issue