forked from teamnwah/openmw-tes3coop
player arrow rotated correctly
This commit is contained in:
parent
770b0f2106
commit
06fa310e29
6 changed files with 20 additions and 5 deletions
|
@ -14,6 +14,8 @@
|
||||||
#include "../mwmechanics/stat.hpp"
|
#include "../mwmechanics/stat.hpp"
|
||||||
#include "window_base.hpp"
|
#include "window_base.hpp"
|
||||||
|
|
||||||
|
#include <cmath>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
This file contains classes corresponding to window layouts
|
This file contains classes corresponding to window layouts
|
||||||
defined in resources/mygui/ *.xml.
|
defined in resources/mygui/ *.xml.
|
||||||
|
@ -144,11 +146,16 @@ namespace MWGui
|
||||||
mLocalMap->setViewOffset(pos);
|
mLocalMap->setViewOffset(pos);
|
||||||
|
|
||||||
mPlayerArrow->setPosition(MyGUI::IntPoint(x*512-16, y*512-16));
|
mPlayerArrow->setPosition(MyGUI::IntPoint(x*512-16, y*512-16));
|
||||||
|
}
|
||||||
|
|
||||||
|
void setPlayerDir(const float x, const float y)
|
||||||
|
{
|
||||||
|
if (!mVisible) return;
|
||||||
MyGUI::ISubWidget* main = mPlayerArrow->getSubWidgetMain();
|
MyGUI::ISubWidget* main = mPlayerArrow->getSubWidgetMain();
|
||||||
MyGUI::RotatingSkin* rotatingSubskin = main->castType<MyGUI::RotatingSkin>();
|
MyGUI::RotatingSkin* rotatingSubskin = main->castType<MyGUI::RotatingSkin>();
|
||||||
rotatingSubskin->setCenter(MyGUI::IntPoint(16,16));
|
rotatingSubskin->setCenter(MyGUI::IntPoint(16,16));
|
||||||
rotatingSubskin->setAngle(3.141);
|
float angle = std::atan2(x,y);
|
||||||
|
rotatingSubskin->setAngle(angle);
|
||||||
}
|
}
|
||||||
|
|
||||||
void onDragStart(MyGUI::Widget* _sender, int _left, int _top, MyGUI::MouseButton _id)
|
void onDragStart(MyGUI::Widget* _sender, int _left, int _top, MyGUI::MouseButton _id)
|
||||||
|
|
|
@ -429,3 +429,8 @@ void WindowManager::setPlayerPos(const float x, const float y)
|
||||||
{
|
{
|
||||||
map->setPlayerPos(x,y);
|
map->setPlayerPos(x,y);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void WindowManager::setPlayerDir(const float x, const float y)
|
||||||
|
{
|
||||||
|
map->setPlayerDir(x,y);
|
||||||
|
}
|
||||||
|
|
|
@ -155,6 +155,7 @@ namespace MWGui
|
||||||
|
|
||||||
void changeCell(MWWorld::Ptr::CellStore* cell); ///< change the active cell
|
void changeCell(MWWorld::Ptr::CellStore* cell); ///< change the active cell
|
||||||
void setPlayerPos(const float x, const float y); ///< set player position in map space
|
void setPlayerPos(const float x, const float y); ///< set player position in map space
|
||||||
|
void setPlayerDir(const float x, const float y); ///< set player view direction in map space
|
||||||
|
|
||||||
void setInteriorMapTexture(const int x, const int y);
|
void setInteriorMapTexture(const int x, const int y);
|
||||||
///< set the index of the map texture that should be used (for interiors)
|
///< set the index of the map texture that should be used (for interiors)
|
||||||
|
|
|
@ -225,7 +225,7 @@ void LocalMap::render(const float x, const float y,
|
||||||
mRendering->getScene()->setFog(FOG_LINEAR, clr, 0, fStart, fEnd);
|
mRendering->getScene()->setFog(FOG_LINEAR, clr, 0, fStart, fEnd);
|
||||||
}
|
}
|
||||||
|
|
||||||
void LocalMap::setPlayerPosition (const Ogre::Vector3& position)
|
void LocalMap::updatePlayer (const Ogre::Vector3& position, const Ogre::Vector3& direction)
|
||||||
{
|
{
|
||||||
if (sFogOfWarSkip != 0)
|
if (sFogOfWarSkip != 0)
|
||||||
{
|
{
|
||||||
|
@ -276,6 +276,7 @@ void LocalMap::setPlayerPosition (const Ogre::Vector3& position)
|
||||||
texName = mInteriorName + "_" + coordStr(x,y);
|
texName = mInteriorName + "_" + coordStr(x,y);
|
||||||
}
|
}
|
||||||
mEnvironment->mWindowManager->setPlayerPos(u, v);
|
mEnvironment->mWindowManager->setPlayerPos(u, v);
|
||||||
|
mEnvironment->mWindowManager->setPlayerDir(direction.x, -direction.z);
|
||||||
|
|
||||||
// explore radius (squared)
|
// explore radius (squared)
|
||||||
const float sqrExploreRadius = 0.01 * sFogOfWarResolution*sFogOfWarResolution;
|
const float sqrExploreRadius = 0.01 * sFogOfWarResolution*sFogOfWarResolution;
|
||||||
|
|
|
@ -40,12 +40,13 @@ namespace MWRender
|
||||||
Ogre::AxisAlignedBox bounds);
|
Ogre::AxisAlignedBox bounds);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the position of the player.
|
* Set the position & direction of the player.
|
||||||
* @remarks This is used to draw a "fog of war" effect
|
* @remarks This is used to draw a "fog of war" effect
|
||||||
* to hide areas on the map the player has not discovered yet.
|
* to hide areas on the map the player has not discovered yet.
|
||||||
* @param position (OGRE coordinates)
|
* @param position (OGRE coordinates)
|
||||||
|
* @param view direction (OGRE coordinates)
|
||||||
*/
|
*/
|
||||||
void setPlayerPosition (const Ogre::Vector3& position);
|
void updatePlayer (const Ogre::Vector3& position, const Ogre::Vector3& direction);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Save the fog of war for the current cell to disk.
|
* Save the fog of war for the current cell to disk.
|
||||||
|
|
|
@ -141,7 +141,7 @@ void RenderingManager::update (float duration){
|
||||||
|
|
||||||
mRendering.update(duration);
|
mRendering.update(duration);
|
||||||
|
|
||||||
mLocalMap->setPlayerPosition( mRendering.getCamera()->getRealPosition() );
|
mLocalMap->updatePlayer( mRendering.getCamera()->getRealPosition(), mRendering.getCamera()->getRealDirection() );
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingManager::skyEnable ()
|
void RenderingManager::skyEnable ()
|
||||||
|
|
Loading…
Reference in a new issue