1
0
Fork 0
mirror of https://github.com/OpenMW/openmw.git synced 2025-02-23 16:09:45 +00:00

Adjust default angle, FOV and viewport of character preview (Fixes #2220)

This commit is contained in:
scrawl 2014-12-23 19:51:17 +01:00
parent 9a1bde684f
commit 2e5e7370ba
5 changed files with 34 additions and 31 deletions

View file

@ -80,8 +80,6 @@ namespace MWGui
if (Misc::StringUtils::ciEqual(*mBirthList->getItemDataAt<std::string>(i), birthId))
{
mBirthList->setIndexSelected(i);
MyGUI::Button* okButton;
getWidget(okButton, "OKButton");
break;
}
}
@ -116,9 +114,6 @@ namespace MWGui
if (_index == MyGUI::ITEM_NONE)
return;
MyGUI::Button* okButton;
getWidget(okButton, "OKButton");
const std::string *birthId = mBirthList->getItemDataAt<std::string>(_index);
if (Misc::StringUtils::ciEqual(mCurrentBirthId, *birthId))
return;

View file

@ -20,6 +20,12 @@ namespace
else
return index;
}
bool sortRaces(const std::pair<std::string, std::string>& left, const std::pair<std::string, std::string>& right)
{
return left.second.compare(right.second) < 0;
}
}
namespace MWGui
@ -122,7 +128,7 @@ namespace MWGui
mPreview.reset(new MWRender::RaceSelectionPreview());
mPreview->setup();
mPreview->update (0);
mPreview->update (mCurrentAngle);
const ESM::NPC proto = mPreview->getPrototype();
setRaceId(proto.mRace);
@ -143,8 +149,11 @@ namespace MWGui
mPreviewImage->setImageTexture (textureName);
mPreviewDirty = true;
}
size_t initialPos = mHeadRotate->getScrollRange()/2+mHeadRotate->getScrollRange()/10;
mHeadRotate->setScrollPosition(initialPos);
onHeadRotate(mHeadRotate, initialPos);
}
void RaceDialog::setRaceId(const std::string &raceId)
{
@ -156,8 +165,6 @@ namespace MWGui
if (Misc::StringUtils::ciEqual(*mRaceList->getItemDataAt<std::string>(i), raceId))
{
mRaceList->setIndexSelected(i);
MyGUI::Button* okButton;
getWidget(okButton, "OKButton");
break;
}
}
@ -191,10 +198,9 @@ namespace MWGui
void RaceDialog::onHeadRotate(MyGUI::ScrollBar* scroll, size_t _position)
{
float angle = (float(_position) / (scroll->getScrollRange()-1) - 0.5) * 3.14 * 2;
float diff = angle - mCurrentAngle;
mPreview->update (diff);
mPreview->update (angle);
mPreviewDirty = true;
mCurrentAngle += diff;
mCurrentAngle = angle;
}
void RaceDialog::onSelectPreviousGender(MyGUI::Widget*)
@ -242,8 +248,6 @@ namespace MWGui
if (_index == MyGUI::ITEM_NONE)
return;
MyGUI::Button* okButton;
getWidget(okButton, "OKButton");
const std::string *raceId = mRaceList->getItemDataAt<std::string>(_index);
if (Misc::StringUtils::ciEqual(mCurrentRaceId, *raceId))
return;
@ -345,7 +349,7 @@ namespace MWGui
const MWWorld::Store<ESM::Race> &races =
MWBase::Environment::get().getWorld()->getStore().get<ESM::Race>();
std::map<std::string, std::string> items; // ID, name
std::vector<std::pair<std::string, std::string> > items; // ID, name
MWWorld::Store<ESM::Race>::iterator it = races.begin();
for (; it != races.end(); ++it)
{
@ -353,11 +357,12 @@ namespace MWGui
if (!playable) // Only display playable races
continue;
items[it->mId] = it->mName;
items.push_back(std::make_pair(it->mId, it->mName));
}
std::sort(items.begin(), items.end(), sortRaces);
int index = 0;
for (std::map<std::string, std::string>::const_iterator it = items.begin(); it != items.end(); ++it)
for (std::vector<std::pair<std::string, std::string> >::const_iterator it = items.begin(); it != items.end(); ++it)
{
mRaceList->addItem(it->second, it->first);
if (Misc::StringUtils::ciEqual(it->first, mCurrentRaceId))

View file

@ -61,13 +61,7 @@ namespace MWGui
void TextInputDialog::onTextAccepted(MyGUI::Edit* _sender)
{
if (mTextEdit->getCaption() == "")
{
MWBase::Environment::get().getWindowManager()->messageBox ("#{sNotifyMessage37}");
MWBase::Environment::get().getWindowManager()->setKeyFocusWidget (mTextEdit);
}
else
eventDone(this);
onOkClicked(_sender);
}
}

View file

@ -72,14 +72,15 @@ namespace MWRender
l->setDirection (Ogre::Vector3(0.3, -0.7, 0.3));
l->setDiffuseColour (Ogre::ColourValue(1,1,1));
mSceneMgr->setAmbientLight (Ogre::ColourValue(0.5, 0.5, 0.5));
mSceneMgr->setAmbientLight (Ogre::ColourValue(0.25, 0.25, 0.25));
mCamera = mSceneMgr->createCamera (mName);
mCamera->setFOVy(Ogre::Degree(12.3));
mCamera->setAspectRatio (float(mSizeX) / float(mSizeY));
Ogre::SceneNode* renderRoot = mSceneMgr->getRootSceneNode()->createChildSceneNode("renderRoot");
//we do this with mwRoot in renderingManager, do it here too.
// leftover of old coordinate system. TODO: remove this and adjust positions/orientations to match
renderRoot->pitch(Ogre::Degree(-90));
mNode = renderRoot->createChildSceneNode();
@ -91,7 +92,7 @@ namespace MWRender
mCamera->setPosition(mPosition * scale);
mCamera->lookAt(mLookAt * scale);
mCamera->setNearClipDistance (0.01);
mCamera->setNearClipDistance (1);
mCamera->setFarClipDistance (1000);
mTexture = Ogre::TextureManager::getSingleton().createManual(mName,
@ -159,7 +160,7 @@ namespace MWRender
InventoryPreview::InventoryPreview(MWWorld::Ptr character)
: CharacterPreview(character, 512, 1024, "CharacterPreview", Ogre::Vector3(0, 65, -180), Ogre::Vector3(0,65,0))
: CharacterPreview(character, 512, 1024, "CharacterPreview", Ogre::Vector3(0, 71, -700), Ogre::Vector3(0,71,0))
, mSelectionBuffer(NULL)
, mSizeX(0)
, mSizeY(0)
@ -288,9 +289,10 @@ namespace MWRender
RaceSelectionPreview::RaceSelectionPreview()
: CharacterPreview(MWBase::Environment::get().getWorld()->getPlayerPtr(),
512, 512, "CharacterHeadPreview", Ogre::Vector3(0, 6, -35), Ogre::Vector3(0,125,0))
512, 512, "CharacterHeadPreview", Ogre::Vector3(0, 8, -125), Ogre::Vector3(0,127,0))
, mBase (*mCharacter.get<ESM::NPC>()->mBase)
, mRef(&mBase)
, mPitch(Ogre::Degree(6))
{
mCharacter = MWWorld::Ptr(&mRef, NULL);
}
@ -298,7 +300,9 @@ namespace MWRender
void RaceSelectionPreview::update(float angle)
{
mAnimation->runAnimation(0.0f);
mNode->roll(Ogre::Radian(angle), Ogre::SceneNode::TS_LOCAL);
mNode->setOrientation(Ogre::Quaternion(Ogre::Radian(angle), Ogre::Vector3::UNIT_Z)
* Ogre::Quaternion(mPitch, Ogre::Vector3::UNIT_X));
updateCamera();
}
@ -317,7 +321,8 @@ namespace MWRender
mBase = proto;
mBase.mId = "player";
rebuild();
update(0);
mAnimation->runAnimation(0.0f);
updateCamera();
}
void RaceSelectionPreview::onSetup ()

View file

@ -120,6 +120,10 @@ namespace MWRender
}
void setPrototype(const ESM::NPC &proto);
private:
Ogre::Radian mPitch;
};
}