1
0
Fork 0
mirror of https://github.com/OpenMW/openmw.git synced 2025-02-24 04:39:43 +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)) if (Misc::StringUtils::ciEqual(*mBirthList->getItemDataAt<std::string>(i), birthId))
{ {
mBirthList->setIndexSelected(i); mBirthList->setIndexSelected(i);
MyGUI::Button* okButton;
getWidget(okButton, "OKButton");
break; break;
} }
} }
@ -116,9 +114,6 @@ namespace MWGui
if (_index == MyGUI::ITEM_NONE) if (_index == MyGUI::ITEM_NONE)
return; return;
MyGUI::Button* okButton;
getWidget(okButton, "OKButton");
const std::string *birthId = mBirthList->getItemDataAt<std::string>(_index); const std::string *birthId = mBirthList->getItemDataAt<std::string>(_index);
if (Misc::StringUtils::ciEqual(mCurrentBirthId, *birthId)) if (Misc::StringUtils::ciEqual(mCurrentBirthId, *birthId))
return; return;

View file

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

View file

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

View file

@ -72,14 +72,15 @@ namespace MWRender
l->setDirection (Ogre::Vector3(0.3, -0.7, 0.3)); l->setDirection (Ogre::Vector3(0.3, -0.7, 0.3));
l->setDiffuseColour (Ogre::ColourValue(1,1,1)); 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 = mSceneMgr->createCamera (mName);
mCamera->setFOVy(Ogre::Degree(12.3));
mCamera->setAspectRatio (float(mSizeX) / float(mSizeY)); mCamera->setAspectRatio (float(mSizeX) / float(mSizeY));
Ogre::SceneNode* renderRoot = mSceneMgr->getRootSceneNode()->createChildSceneNode("renderRoot"); 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)); renderRoot->pitch(Ogre::Degree(-90));
mNode = renderRoot->createChildSceneNode(); mNode = renderRoot->createChildSceneNode();
@ -91,7 +92,7 @@ namespace MWRender
mCamera->setPosition(mPosition * scale); mCamera->setPosition(mPosition * scale);
mCamera->lookAt(mLookAt * scale); mCamera->lookAt(mLookAt * scale);
mCamera->setNearClipDistance (0.01); mCamera->setNearClipDistance (1);
mCamera->setFarClipDistance (1000); mCamera->setFarClipDistance (1000);
mTexture = Ogre::TextureManager::getSingleton().createManual(mName, mTexture = Ogre::TextureManager::getSingleton().createManual(mName,
@ -159,7 +160,7 @@ namespace MWRender
InventoryPreview::InventoryPreview(MWWorld::Ptr character) 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) , mSelectionBuffer(NULL)
, mSizeX(0) , mSizeX(0)
, mSizeY(0) , mSizeY(0)
@ -288,9 +289,10 @@ namespace MWRender
RaceSelectionPreview::RaceSelectionPreview() RaceSelectionPreview::RaceSelectionPreview()
: CharacterPreview(MWBase::Environment::get().getWorld()->getPlayerPtr(), : 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) , mBase (*mCharacter.get<ESM::NPC>()->mBase)
, mRef(&mBase) , mRef(&mBase)
, mPitch(Ogre::Degree(6))
{ {
mCharacter = MWWorld::Ptr(&mRef, NULL); mCharacter = MWWorld::Ptr(&mRef, NULL);
} }
@ -298,7 +300,9 @@ namespace MWRender
void RaceSelectionPreview::update(float angle) void RaceSelectionPreview::update(float angle)
{ {
mAnimation->runAnimation(0.0f); 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(); updateCamera();
} }
@ -317,7 +321,8 @@ namespace MWRender
mBase = proto; mBase = proto;
mBase.mId = "player"; mBase.mId = "player";
rebuild(); rebuild();
update(0); mAnimation->runAnimation(0.0f);
updateCamera();
} }
void RaceSelectionPreview::onSetup () void RaceSelectionPreview::onSetup ()

View file

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