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:
parent
9a1bde684f
commit
2e5e7370ba
5 changed files with 34 additions and 31 deletions
|
@ -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;
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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 ()
|
||||
|
|
|
@ -120,6 +120,10 @@ namespace MWRender
|
|||
}
|
||||
|
||||
void setPrototype(const ESM::NPC &proto);
|
||||
|
||||
private:
|
||||
|
||||
Ogre::Radian mPitch;
|
||||
};
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue