1
0
Fork 1
mirror of https://github.com/TES3MP/openmw-tes3mp.git synced 2025-03-03 21:19:40 +00:00

[Client] Add CellController methods to fetch Actors without needing Ptrs

This commit is contained in:
David Cernat 2017-04-19 18:20:12 +03:00
parent 0ef9e014eb
commit 61cedfa192
2 changed files with 52 additions and 9 deletions

View file

@ -166,11 +166,20 @@ void CellController::removeLocalActorRecord(std::string actorIndex)
bool CellController::isLocalActor(MWWorld::Ptr ptr) bool CellController::isLocalActor(MWWorld::Ptr ptr)
{ {
if (ptr.mRef == NULL)
return false;
std::string mapIndex = generateMapIndex(ptr); std::string mapIndex = generateMapIndex(ptr);
return (localActorsToCells.count(mapIndex) > 0); return (localActorsToCells.count(mapIndex) > 0);
} }
bool CellController::isLocalActor(std::string refId, int refNumIndex, int mpNum)
{
std::string mapIndex = generateMapIndex(refId, refNumIndex, mpNum);
return (localActorsToCells.count(mapIndex) > 0);
}
LocalActor *CellController::getLocalActor(MWWorld::Ptr ptr) LocalActor *CellController::getLocalActor(MWWorld::Ptr ptr)
{ {
std::string actorIndex = generateMapIndex(ptr); std::string actorIndex = generateMapIndex(ptr);
@ -179,6 +188,14 @@ LocalActor *CellController::getLocalActor(MWWorld::Ptr ptr)
return cellsActive.at(cellIndex)->getLocalActor(actorIndex); return cellsActive.at(cellIndex)->getLocalActor(actorIndex);
} }
LocalActor *CellController::getLocalActor(std::string refId, int refNumIndex, int mpNum)
{
std::string actorIndex = generateMapIndex(refId, refNumIndex, mpNum);
std::string cellIndex = localActorsToCells.at(actorIndex);
return cellsActive.at(cellIndex)->getLocalActor(actorIndex);
}
void CellController::setDedicatedActorRecord(std::string actorIndex, std::string cellIndex) void CellController::setDedicatedActorRecord(std::string actorIndex, std::string cellIndex)
{ {
dedicatedActorsToCells[actorIndex] = cellIndex; dedicatedActorsToCells[actorIndex] = cellIndex;
@ -189,8 +206,17 @@ void CellController::removeDedicatedActorRecord(std::string actorIndex)
dedicatedActorsToCells.erase(actorIndex); dedicatedActorsToCells.erase(actorIndex);
} }
bool CellController::isDedicatedActor(std::string refId, int refNumIndex, int mpNum)
{
std::string mapIndex = generateMapIndex(refId, refNumIndex, mpNum);
return (dedicatedActorsToCells.count(mapIndex) > 0);
}
bool CellController::isDedicatedActor(MWWorld::Ptr ptr) bool CellController::isDedicatedActor(MWWorld::Ptr ptr)
{ {
if (ptr.mRef == NULL)
return false;
std::string mapIndex = generateMapIndex(ptr); std::string mapIndex = generateMapIndex(ptr);
return (dedicatedActorsToCells.count(mapIndex) > 0); return (dedicatedActorsToCells.count(mapIndex) > 0);
@ -204,22 +230,32 @@ DedicatedActor *CellController::getDedicatedActor(MWWorld::Ptr ptr)
return cellsActive.at(cellIndex)->getDedicatedActor(actorIndex); return cellsActive.at(cellIndex)->getDedicatedActor(actorIndex);
} }
std::string CellController::generateMapIndex(MWWorld::Ptr ptr) DedicatedActor *CellController::getDedicatedActor(std::string refId, int refNumIndex, int mpNum)
{
std::string actorIndex = generateMapIndex(refId, refNumIndex, mpNum);
std::string cellIndex = dedicatedActorsToCells.at(actorIndex);
return cellsActive.at(cellIndex)->getDedicatedActor(actorIndex);
}
std::string CellController::generateMapIndex(std::string refId, int refNumIndex, int mpNum)
{ {
std::string mapIndex = ""; std::string mapIndex = "";
mapIndex += ptr.getCellRef().getRefId(); mapIndex += refId;
mapIndex += "-" + Utils::toString(ptr.getCellRef().getRefNum().mIndex); mapIndex += "-" + Utils::toString(refNumIndex);
mapIndex += "-" + Utils::toString(ptr.getCellRef().getMpNum()); mapIndex += "-" + Utils::toString(mpNum);
return mapIndex; return mapIndex;
} }
std::string CellController::generateMapIndex(MWWorld::Ptr ptr)
{
return generateMapIndex(ptr.getCellRef().getRefId(),
ptr.getCellRef().getRefNum().mIndex, ptr.getCellRef().getMpNum());
}
std::string CellController::generateMapIndex(BaseActor baseActor) std::string CellController::generateMapIndex(BaseActor baseActor)
{ {
std::string mapIndex = ""; return generateMapIndex(baseActor.refId, baseActor.refNumIndex, baseActor.mpNum);
mapIndex += baseActor.refId;
mapIndex += "-" + Utils::toString(baseActor.refNumIndex);
mapIndex += "-" + Utils::toString(baseActor.mpNum);
return mapIndex;
} }
bool CellController::isActiveCell(const ESM::Cell& cell) bool CellController::isActiveCell(const ESM::Cell& cell)

View file

@ -30,14 +30,21 @@ namespace mwmp
void setLocalActorRecord(std::string actorIndex, std::string cellIndex); void setLocalActorRecord(std::string actorIndex, std::string cellIndex);
void removeLocalActorRecord(std::string actorIndex); void removeLocalActorRecord(std::string actorIndex);
bool isLocalActor(MWWorld::Ptr ptr); bool isLocalActor(MWWorld::Ptr ptr);
bool isLocalActor(std::string refId, int refNumIndex, int mpNum);
virtual LocalActor *getLocalActor(MWWorld::Ptr ptr); virtual LocalActor *getLocalActor(MWWorld::Ptr ptr);
virtual LocalActor *getLocalActor(std::string refId, int refNumIndex, int mpNum);
void setDedicatedActorRecord(std::string actorIndex, std::string cellIndex); void setDedicatedActorRecord(std::string actorIndex, std::string cellIndex);
void removeDedicatedActorRecord(std::string actorIndex); void removeDedicatedActorRecord(std::string actorIndex);
bool isDedicatedActor(MWWorld::Ptr ptr);
virtual DedicatedActor *getDedicatedActor(MWWorld::Ptr ptr);
bool isDedicatedActor(MWWorld::Ptr ptr);
bool isDedicatedActor(std::string refId, int refNumIndex, int mpNum);
virtual DedicatedActor *getDedicatedActor(MWWorld::Ptr ptr);
virtual DedicatedActor *getDedicatedActor(std::string refId, int refNumIndex, int mpNum);
std::string generateMapIndex(std::string refId, int refNumindex, int mpNum);
std::string generateMapIndex(MWWorld::Ptr ptr); std::string generateMapIndex(MWWorld::Ptr ptr);
std::string generateMapIndex(mwmp::BaseActor baseActor); std::string generateMapIndex(mwmp::BaseActor baseActor);