mirror of
https://github.com/TES3MP/openmw-tes3mp.git
synced 2025-03-03 22:49:40 +00:00
Show dedicated players on minimap
This commit is contained in:
parent
14bac1e533
commit
b704519078
7 changed files with 79 additions and 39 deletions
|
@ -366,11 +366,9 @@ namespace MWGui
|
||||||
|
|
||||||
void MapWindow::updatePlayerMarkers()
|
void MapWindow::updatePlayerMarkers()
|
||||||
{
|
{
|
||||||
printf("MapWindow::updatePlayerMarkers!!\n");
|
|
||||||
LocalMapBase::updatePlayerMarkers();
|
LocalMapBase::updatePlayerMarkers();
|
||||||
|
|
||||||
mwmp::Main::get().getGUIController()->updateGlobalMapMarkerTooltips(this);
|
mwmp::Main::get().getGUIController()->updateGlobalMapMarkerTooltips(this);
|
||||||
printf("End of MapWindow::updatePlayerMarkers!!\n");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void LocalMapBase::setActiveCell(const int x, const int y, bool interior)
|
void LocalMapBase::setActiveCell(const int x, const int y, bool interior)
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
#include "../mwmechanics/mechanicsmanagerimp.hpp"
|
#include "../mwmechanics/mechanicsmanagerimp.hpp"
|
||||||
#include "../mwworld/cellstore.hpp"
|
#include "../mwworld/cellstore.hpp"
|
||||||
#include "../mwworld/action.hpp"
|
#include "../mwworld/action.hpp"
|
||||||
|
#include "Main.hpp"
|
||||||
#include <apps/openmw/mwworld/inventorystore.hpp>
|
#include <apps/openmw/mwworld/inventorystore.hpp>
|
||||||
#include <boost/algorithm/clamp.hpp>
|
#include <boost/algorithm/clamp.hpp>
|
||||||
#include <components/openmw-mp/Log.hpp>
|
#include <components/openmw-mp/Log.hpp>
|
||||||
|
@ -107,6 +108,10 @@ void Players::CreatePlayer(RakNet::RakNetGUID id)
|
||||||
dedicPlayer->state = 2;
|
dedicPlayer->state = 2;
|
||||||
|
|
||||||
world->enable(players[id]->ptr);
|
world->enable(players[id]->ptr);
|
||||||
|
|
||||||
|
ESM::CustomMarker mEditingMarker = Main::get().getGUIController()->CreateMarker(id);
|
||||||
|
dedicPlayer->marker = mEditingMarker;
|
||||||
|
dedicPlayer->markerEnabled = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -211,6 +216,8 @@ void DedicatedPlayer::Move(float dt)
|
||||||
|
|
||||||
void Players::Update(float dt)
|
void Players::Update(float dt)
|
||||||
{
|
{
|
||||||
|
static float timer = 0;
|
||||||
|
timer += dt;
|
||||||
for (std::map <RakNet::RakNetGUID, DedicatedPlayer *>::iterator it = players.begin(); it != players.end(); it++)
|
for (std::map <RakNet::RakNetGUID, DedicatedPlayer *>::iterator it = players.begin(); it != players.end(); it++)
|
||||||
{
|
{
|
||||||
DedicatedPlayer *pl = it->second;
|
DedicatedPlayer *pl = it->second;
|
||||||
|
@ -251,7 +258,12 @@ void Players::Update(float dt)
|
||||||
ptrNpcStats->setBaseDisposition(255);
|
ptrNpcStats->setBaseDisposition(255);
|
||||||
pl->Move(dt);
|
pl->Move(dt);
|
||||||
pl->UpdateDrawState();
|
pl->UpdateDrawState();
|
||||||
|
|
||||||
|
if (timer >= 0.2) // call every 200 msec
|
||||||
|
pl->updateMarker();
|
||||||
}
|
}
|
||||||
|
if (timer >= 0.2)
|
||||||
|
timer = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DedicatedPlayer::UpdatePtr(MWWorld::Ptr newPtr)
|
void DedicatedPlayer::UpdatePtr(MWWorld::Ptr newPtr)
|
||||||
|
@ -450,3 +462,35 @@ void DedicatedPlayer::updateCell()
|
||||||
ptr.getBase()->canChangeCell = true;
|
ptr.getBase()->canChangeCell = true;
|
||||||
UpdatePtr(world->moveObject(ptr, cellStore, pos.pos[0], pos.pos[1], pos.pos[2]));
|
UpdatePtr(world->moveObject(ptr, cellStore, pos.pos[0], pos.pos[1], pos.pos[2]));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void DedicatedPlayer::updateMarker()
|
||||||
|
{
|
||||||
|
if (!markerEnabled)
|
||||||
|
return;
|
||||||
|
GUIController *gui = Main::get().getGUIController();
|
||||||
|
if (gui->mPlayerMarkers.isExists(marker))
|
||||||
|
{
|
||||||
|
gui->mPlayerMarkers.deleteMarker(marker);
|
||||||
|
marker = gui->CreateMarker(guid);
|
||||||
|
gui->mPlayerMarkers.addMarker(marker);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
gui->mPlayerMarkers.addMarker(marker, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DedicatedPlayer::removeMarker()
|
||||||
|
{
|
||||||
|
if (!markerEnabled)
|
||||||
|
return;
|
||||||
|
markerEnabled = false;
|
||||||
|
Main::get().getGUIController()->mPlayerMarkers.deleteMarker(marker);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DedicatedPlayer::enableMarker(bool enable)
|
||||||
|
{
|
||||||
|
if (enable)
|
||||||
|
updateMarker();
|
||||||
|
else
|
||||||
|
removeMarker();
|
||||||
|
}
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
#include <RakNetTypes.h>
|
#include <RakNetTypes.h>
|
||||||
|
|
||||||
#include <components/openmw-mp/Base/BasePlayer.hpp>
|
#include <components/openmw-mp/Base/BasePlayer.hpp>
|
||||||
|
#include <components/esm/custommarkerstate.hpp>
|
||||||
|
|
||||||
|
|
||||||
namespace mwmp
|
namespace mwmp
|
||||||
|
@ -46,6 +47,9 @@ namespace mwmp
|
||||||
|
|
||||||
void updateCell();
|
void updateCell();
|
||||||
|
|
||||||
|
void updateMarker();
|
||||||
|
void removeMarker();
|
||||||
|
void enableMarker(bool enable);
|
||||||
private:
|
private:
|
||||||
DedicatedPlayer(RakNet::RakNetGUID guid);
|
DedicatedPlayer(RakNet::RakNetGUID guid);
|
||||||
virtual ~DedicatedPlayer();
|
virtual ~DedicatedPlayer();
|
||||||
|
@ -55,6 +59,9 @@ namespace mwmp
|
||||||
MWWorld::ManualRef* reference;
|
MWWorld::ManualRef* reference;
|
||||||
|
|
||||||
MWWorld::Ptr ptr;
|
MWWorld::Ptr ptr;
|
||||||
|
|
||||||
|
ESM::CustomMarker marker;
|
||||||
|
bool markerEnabled;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
#endif //OPENMW_PLAYER_HPP
|
#endif //OPENMW_PLAYER_HPP
|
||||||
|
|
|
@ -21,11 +21,13 @@
|
||||||
#include <MyGUI_FactoryManager.h>
|
#include <MyGUI_FactoryManager.h>
|
||||||
#include <apps/openmw/mwgui/mapwindow.hpp>
|
#include <apps/openmw/mwgui/mapwindow.hpp>
|
||||||
#include <MyGUI_TextIterator.h>
|
#include <MyGUI_TextIterator.h>
|
||||||
|
#include <components/openmw-mp/Log.hpp>
|
||||||
|
|
||||||
|
|
||||||
#include "GUIController.hpp"
|
#include "GUIController.hpp"
|
||||||
#include "Main.hpp"
|
#include "Main.hpp"
|
||||||
#include "PlayerMarkerCollection.hpp"
|
#include "PlayerMarkerCollection.hpp"
|
||||||
|
#include "DedicatedPlayer.hpp"
|
||||||
|
|
||||||
|
|
||||||
mwmp::GUIController::GUIController(): mInputBox(0)
|
mwmp::GUIController::GUIController(): mInputBox(0)
|
||||||
|
@ -143,25 +145,9 @@ bool mwmp::GUIController::pressedKey(int key)
|
||||||
}
|
}
|
||||||
else if (key == keySay)
|
else if (key == keySay)
|
||||||
{
|
{
|
||||||
//MyGUI::Widget *oldFocus = MyGUI::InputManager::getInstance().getKeyFocusWidget();
|
|
||||||
mChat->PressedSay();
|
mChat->PressedSay();
|
||||||
/*MyGUI::Widget *newFocus = MyGUI::InputManager::getInstance().getKeyFocusWidget();
|
|
||||||
printf("mwmp::GUIController::pressedKey. oldFocus: %s.\n", oldFocus ? oldFocus->getName().c_str() : "nil");
|
|
||||||
printf("mwmp::GUIController::pressedKey.newFocus: %s.\n", newFocus ? newFocus->getName().c_str() : "nil");*/
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else if(key == SDLK_BACKSPACE)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
static bool test = true;
|
|
||||||
if(test)
|
|
||||||
{
|
|
||||||
test = false;
|
|
||||||
SetMapVisibility(0, true);
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
SetMapVisibility(0, true);
|
|
||||||
}
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -233,38 +219,38 @@ private:
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
ESM::CustomMarker mwmp::GUIController::CreateMarker(const RakNet::RakNetGUID &guid)
|
||||||
void mwmp::GUIController::SetMapVisibility(int pid, bool state)
|
|
||||||
{
|
{
|
||||||
|
DedicatedPlayer *player = Players::GetPlayer(guid);
|
||||||
ESM::CustomMarker mEditingMarker;
|
ESM::CustomMarker mEditingMarker;
|
||||||
mEditingMarker.mNote = "TEST";
|
if (!player)
|
||||||
MWBase::World *world = MWBase::Environment::get().getWorld();
|
{
|
||||||
const ESM::Cell *ptrCell = world->getPlayerPtr().getCell()->getCell();
|
LOG_MESSAGE_SIMPLE(Log::LOG_ERROR, "Unknown player guid: %lu", guid.g);
|
||||||
|
return mEditingMarker;
|
||||||
|
}
|
||||||
|
|
||||||
mEditingMarker.mCell = ptrCell->mCellId;
|
mEditingMarker.mNote = player->Npc()->mName;
|
||||||
|
|
||||||
mEditingMarker.mWorldX = world->getPlayerPtr().getRefData().getPosition().pos[0];
|
const ESM::Cell *ptrCell = player->GetCell();
|
||||||
mEditingMarker.mWorldY = world->getPlayerPtr().getRefData().getPosition().pos[1];
|
|
||||||
|
mEditingMarker.mCell = player->GetCell()->mCellId;
|
||||||
|
|
||||||
|
mEditingMarker.mWorldX = player->Position()->pos[0];
|
||||||
|
mEditingMarker.mWorldY = player->Position()->pos[1];
|
||||||
|
|
||||||
mEditingMarker.mCell.mPaged = ptrCell->isExterior();
|
mEditingMarker.mCell.mPaged = ptrCell->isExterior();
|
||||||
|
|
||||||
if (!ptrCell->isExterior())
|
if (!ptrCell->isExterior())
|
||||||
mEditingMarker.mCell.mWorldspace = ptrCell->mName;
|
mEditingMarker.mCell.mWorldspace = ptrCell->mName;
|
||||||
else
|
else
|
||||||
{
|
|
||||||
mEditingMarker.mCell.mWorldspace = ESM::CellId::sDefaultWorldspace;
|
mEditingMarker.mCell.mWorldspace = ESM::CellId::sDefaultWorldspace;
|
||||||
mEditingMarker.mCell.mIndex.mX = ptrCell->getGridX();
|
return mEditingMarker;
|
||||||
mEditingMarker.mCell.mIndex.mY = ptrCell->getGridY();
|
|
||||||
}
|
|
||||||
|
|
||||||
mPlayerMarkers.addMarker(mEditingMarker, true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void mwmp::GUIController::updatePlayersMarkers(MWGui::LocalMapBase *localMapBase)
|
void mwmp::GUIController::updatePlayersMarkers(MWGui::LocalMapBase *localMapBase)
|
||||||
{
|
{
|
||||||
printf("updatePlayersMarkers!!!\n");
|
std::vector<MyGUI::Widget*>::iterator it = localMapBase->mPlayerMarkerWidgets.begin();
|
||||||
for (std::vector<MyGUI::Widget*>::iterator it = localMapBase->mPlayerMarkerWidgets.begin(); it != localMapBase->mPlayerMarkerWidgets.end(); ++it)
|
for (; it != localMapBase->mPlayerMarkerWidgets.end(); ++it)
|
||||||
|
|
||||||
MyGUI::Gui::getInstance().destroyWidget(*it);
|
MyGUI::Gui::getInstance().destroyWidget(*it);
|
||||||
localMapBase->mPlayerMarkerWidgets.clear();
|
localMapBase->mPlayerMarkerWidgets.clear();
|
||||||
|
|
||||||
|
|
|
@ -47,13 +47,12 @@ namespace mwmp
|
||||||
void updatePlayersMarkers(MWGui::LocalMapBase *localMapBase);
|
void updatePlayersMarkers(MWGui::LocalMapBase *localMapBase);
|
||||||
void updateGlobalMapMarkerTooltips(MWGui::MapWindow *pWindow);
|
void updateGlobalMapMarkerTooltips(MWGui::MapWindow *pWindow);
|
||||||
|
|
||||||
void SetMapVisibility(int pid, bool state);
|
ESM::CustomMarker CreateMarker(const RakNet::RakNetGUID &guid);
|
||||||
PlayerMarkerCollection mPlayerMarkers;
|
PlayerMarkerCollection mPlayerMarkers;
|
||||||
private:
|
private:
|
||||||
void setGlobalMapMarkerTooltip(MWGui::MapWindow *mapWindow ,MyGUI::Widget* markerWidget, int x, int y);
|
void setGlobalMapMarkerTooltip(MWGui::MapWindow *mapWindow ,MyGUI::Widget* markerWidget, int x, int y);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::vector<MyGUI::Widget*> mPlayerMarkerWidgets;
|
|
||||||
GUIChat *mChat;
|
GUIChat *mChat;
|
||||||
int keySay;
|
int keySay;
|
||||||
int keyChatMode;
|
int keyChatMode;
|
||||||
|
|
|
@ -72,3 +72,8 @@ size_t PlayerMarkerCollection::size() const
|
||||||
{
|
{
|
||||||
return mMarkers.size();
|
return mMarkers.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool PlayerMarkerCollection::isExists(const ESM::CustomMarker &marker)
|
||||||
|
{
|
||||||
|
return mMarkers.find(marker.mCell) != mMarkers.end();
|
||||||
|
}
|
||||||
|
|
|
@ -39,6 +39,7 @@ namespace mwmp
|
||||||
typedef MyGUI::delegates::CMultiDelegate0 EventHandle_Void;
|
typedef MyGUI::delegates::CMultiDelegate0 EventHandle_Void;
|
||||||
EventHandle_Void eventMarkersChanged;
|
EventHandle_Void eventMarkersChanged;
|
||||||
|
|
||||||
|
bool isExists(const ESM::CustomMarker &marker);
|
||||||
private:
|
private:
|
||||||
ContainerType mMarkers;
|
ContainerType mMarkers;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue