mirror of
https://github.com/OpenMW/openmw.git
synced 2025-02-24 10:39:44 +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))
|
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;
|
||||||
|
|
|
@ -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))
|
||||||
|
|
|
@ -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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 ()
|
||||||
|
|
|
@ -120,6 +120,10 @@ namespace MWRender
|
||||||
}
|
}
|
||||||
|
|
||||||
void setPrototype(const ESM::NPC &proto);
|
void setPrototype(const ESM::NPC &proto);
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
Ogre::Radian mPitch;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue