diff options
author | megamage <none@none> | 2009-01-05 16:03:45 -0600 |
---|---|---|
committer | megamage <none@none> | 2009-01-05 16:03:45 -0600 |
commit | 908776dd93a0c5f20439aff3104f5c07722f6656 (patch) | |
tree | 125255b2a287aeec5798588f964ebb6c952ebe24 /src | |
parent | 169dce868b90035633e395fb84454bbaf874a987 (diff) |
*Some update of relocation notify.
--HG--
branch : trunk
Diffstat (limited to 'src')
-rw-r--r-- | src/game/GridNotifiers.cpp | 10 | ||||
-rw-r--r-- | src/game/GridNotifiers.h | 4 | ||||
-rw-r--r-- | src/game/Map.cpp | 55 | ||||
-rw-r--r-- | src/game/Map.h | 2 | ||||
-rw-r--r-- | src/game/MiscHandler.cpp | 5 | ||||
-rw-r--r-- | src/game/ObjectAccessor.cpp | 4 | ||||
-rw-r--r-- | src/game/ObjectAccessor.h | 2 | ||||
-rw-r--r-- | src/game/World.cpp | 1 |
8 files changed, 56 insertions, 27 deletions
diff --git a/src/game/GridNotifiers.cpp b/src/game/GridNotifiers.cpp index 0c952f69649..7f40df0d46f 100644 --- a/src/game/GridNotifiers.cpp +++ b/src/game/GridNotifiers.cpp @@ -30,7 +30,7 @@ using namespace Trinity; -void +/*void Trinity::PlayerNotifier::Visit(PlayerMapType &m) { for(PlayerMapType::iterator iter=m.begin(); iter != m.end(); ++iter) @@ -45,7 +45,7 @@ Trinity::PlayerNotifier::Visit(PlayerMapType &m) for (SharedVisionList::const_iterator it = i_player.GetSharedVisionList().begin(); it != i_player.GetSharedVisionList().end(); ++it) (*it)->UpdateVisibilityOf(iter->getSource()); } -} +}*/ void VisibleChangesNotifier::Visit(PlayerMapType &m) @@ -68,6 +68,12 @@ VisibleNotifier::Visit(PlayerMapType &m) continue; iter->getSource()->UpdateVisibilityOf(&i_player); + //i_player.UpdateVisibilityOf(iter->getSource()); + + //if (!i_player.GetSharedVisionList().empty()) + // for (SharedVisionList::const_iterator it = i_player.GetSharedVisionList().begin(); it != i_player.GetSharedVisionList().end(); ++it) + // (*it)->UpdateVisibilityOf(iter->getSource()); + i_player.UpdateVisibilityOf(iter->getSource(),i_data,i_data_updates,i_visibleNow); i_clientGUIDs.erase(iter->getSource()->GetGUID()); } diff --git a/src/game/GridNotifiers.h b/src/game/GridNotifiers.h index b00bd33bd24..eb15d8ea7b2 100644 --- a/src/game/GridNotifiers.h +++ b/src/game/GridNotifiers.h @@ -39,13 +39,13 @@ class Player; namespace Trinity { - struct TRINITY_DLL_DECL PlayerNotifier + /*struct TRINITY_DLL_DECL PlayerNotifier { explicit PlayerNotifier(Player &pl) : i_player(pl) {} void Visit(PlayerMapType &); template<class SKIP> void Visit(GridRefManager<SKIP> &) {} Player &i_player; - }; + };*/ struct TRINITY_DLL_DECL VisibleNotifier { diff --git a/src/game/Map.cpp b/src/game/Map.cpp index 6e01788ac58..fc47647ea94 100644 --- a/src/game/Map.cpp +++ b/src/game/Map.cpp @@ -657,24 +657,30 @@ void Map::RelocationNotify() { //creatures may be added to the list during update i_lock = true; + + //Notify for(std::vector<uint64>::iterator iter = i_unitsToNotify.begin(); iter != i_unitsToNotify.end(); ++iter) { Unit *unit = ObjectAccessor::GetObjectInWorld(*iter, (Unit*)NULL); - if(!unit) continue; + if(!unit) + continue; + unit->m_Notified = true; + if(!unit->IsInWorld()) continue; - CellPair val = Trinity::ComputeCellPair(unit->GetPositionX(), unit->GetPositionY()); - Cell cell(val); - cell.SetNoCreate(); - //if(unit->GetTypeId() == TYPEID_PLAYER) - // PlayerRelocationNotify((Player*)unit, cell, val); - //else - // CreatureRelocationNotify((Creature*)unit, cell, val); + if(unit->GetTypeId() == TYPEID_PLAYER) { - UpdatePlayerVisibility((Player*)unit, cell, val); - UpdateObjectsVisibilityFor((Player*)unit, cell, val); + //UpdatePlayerVisibility((Player*)unit, cell, val); + //Trinity::PlayerNotifier pl_notifier(*player); + //VisitWorld(unit->GetPositionX(), unit->GetPositionY(), World::GetMaxVisibleDistance(), pl_notifier); + + //UpdateObjectsVisibilityFor((Player*)unit, cell, val); + Trinity::VisibleNotifier ob_notifier(*((Player*)unit)); + VisitAll(unit->GetPositionX(), unit->GetPositionY(), World::GetMaxVisibleDistance(), ob_notifier); + ob_notifier.Notify(); + Trinity::PlayerRelocationNotifier notifier(*((Player*)unit)); VisitAll(unit->GetPositionX(), unit->GetPositionY(), World::GetMaxVisibleDistance(), notifier); } @@ -683,7 +689,20 @@ void Map::RelocationNotify() Trinity::CreatureRelocationNotifier notifier(*((Creature*)unit)); VisitAll(unit->GetPositionX(), unit->GetPositionY(), World::GetMaxVisibleDistance(), notifier); } + + // Update visibility back to player who is controlling the unit + if(unit->GetSharedVisionList().size()) + { + for(SharedVisionList::const_iterator it = unit->GetSharedVisionList().begin(); it != unit->GetSharedVisionList().end(); ++it) + { + Trinity::VisibleNotifier ob_notifier(**it); + VisitAll(unit->GetPositionX(), unit->GetPositionY(), World::GetMaxVisibleDistance(), ob_notifier); + ob_notifier.Notify(); + } + } } + + //Clear list for(std::vector<uint64>::iterator iter = i_unitsToNotify.begin(); iter != i_unitsToNotify.end(); ++iter) { if(Unit *unit = ObjectAccessor::GetObjectInWorld(*iter, (Unit*)NULL)) @@ -693,6 +712,7 @@ void Map::RelocationNotify() } } i_unitsToNotify.clear(); + i_lock = false; } @@ -814,7 +834,8 @@ void Map::Remove(Player *player, bool remove) SendRemoveTransports(player); - UpdateObjectsVisibilityFor(player,cell,p); + //UpdateObjectsVisibilityFor(player,cell,p); + AddUnitToNotify(player); if( remove ) DeleteFromWorld(player); @@ -903,8 +924,8 @@ Map::PlayerRelocation(Player *player, float x, float y, float z, float orientati //UpdateObjectsVisibilityFor(player,new_cell,new_val); // also update what possessing player sees - if(player->isPossessedByPlayer()) - UpdateObjectsVisibilityFor((Player*)player->GetCharmer(), new_cell, new_val); + //if(player->isPossessedByPlayer()) + // UpdateObjectsVisibilityFor((Player*)player->GetCharmer(), new_cell, new_val); //PlayerRelocationNotify(player,new_cell,new_val); AddUnitToNotify(player); @@ -947,8 +968,8 @@ Map::CreatureRelocation(Creature *creature, float x, float y, float z, float ang { creature->Relocate(x, y, z, ang); // Update visibility back to player who is controlling the creature - if(creature->isPossessedByPlayer()) - UpdateObjectsVisibilityFor((Player*)creature->GetCharmer(), new_cell, new_val); + //if(creature->isPossessedByPlayer()) + // UpdateObjectsVisibilityFor((Player*)creature->GetCharmer(), new_cell, new_val); //CreatureRelocationNotify(creature,new_cell,new_val); AddUnitToNotify(creature); @@ -1389,7 +1410,7 @@ void Map::UpdateObjectVisibility( WorldObject* obj, Cell cell, CellPair cellpair cell_lock->Visit(cell_lock, player_notifier, *this); } -void Map::UpdatePlayerVisibility( Player* player, Cell cell, CellPair cellpair ) +/*void Map::UpdatePlayerVisibility( Player* player, Cell cell, CellPair cellpair ) { cell.data.Part.reserved = ALL_DISTRICT; @@ -1398,7 +1419,7 @@ void Map::UpdatePlayerVisibility( Player* player, Cell cell, CellPair cellpair ) CellLock<ReadGuard> cell_lock(cell, cellpair); cell_lock->Visit(cell_lock, player_notifier, *this); -} +}*/ void Map::UpdateObjectsVisibilityFor( Player* player, Cell cell, CellPair cellpair ) { diff --git a/src/game/Map.h b/src/game/Map.h index c3ae4830cfb..25caa758ae9 100644 --- a/src/game/Map.h +++ b/src/game/Map.h @@ -231,7 +231,7 @@ class TRINITY_DLL_SPEC Map : public GridRefManager<NGridType>, public Trinity::O virtual bool RemoveBones(uint64 guid, float x, float y); void UpdateObjectVisibility(WorldObject* obj, Cell cell, CellPair cellpair); - void UpdatePlayerVisibility(Player* player, Cell cell, CellPair cellpair); + //void UpdatePlayerVisibility(Player* player, Cell cell, CellPair cellpair); void UpdateObjectsVisibilityFor(Player* player, Cell cell, CellPair cellpair); void resetMarkedCells() { marked_cells.reset(); } diff --git a/src/game/MiscHandler.cpp b/src/game/MiscHandler.cpp index 73bfbf2ff31..dcf1f158e92 100644 --- a/src/game/MiscHandler.cpp +++ b/src/game/MiscHandler.cpp @@ -1409,8 +1409,9 @@ void WorldSession::HandleFarSightOpcode( WorldPacket & recv_data ) return; } // Update visibility after vision change - Cell cell(pair); - GetPlayer()->GetMap()->UpdateObjectsVisibilityFor(_player, cell, pair); + //Cell cell(pair); + //GetPlayer()->GetMap()->UpdateObjectsVisibilityFor(_player, cell, pair); + GetPlayer()->SetToNotify(); } void WorldSession::HandleChooseTitleOpcode( WorldPacket & recv_data ) diff --git a/src/game/ObjectAccessor.cpp b/src/game/ObjectAccessor.cpp index 7d51c4c0291..d2b0878c595 100644 --- a/src/game/ObjectAccessor.cpp +++ b/src/game/ObjectAccessor.cpp @@ -583,7 +583,7 @@ ObjectAccessor::UpdateObjectVisibility(WorldObject *obj) obj->GetMap()->UpdateObjectVisibility(obj,cell,p); } -void ObjectAccessor::UpdateVisibilityForPlayer( Player* player ) +/*void ObjectAccessor::UpdateVisibilityForPlayer( Player* player ) { CellPair p = Trinity::ComputeCellPair(player->GetPositionX(), player->GetPositionY()); Cell cell(p); @@ -591,7 +591,7 @@ void ObjectAccessor::UpdateVisibilityForPlayer( Player* player ) m->UpdatePlayerVisibility(player,cell,p); m->UpdateObjectsVisibilityFor(player,cell,p); -} +}*/ /// Define the static member of HashMapHolder diff --git a/src/game/ObjectAccessor.h b/src/game/ObjectAccessor.h index 844a6b49e4d..879c73288cc 100644 --- a/src/game/ObjectAccessor.h +++ b/src/game/ObjectAccessor.h @@ -198,7 +198,7 @@ class TRINITY_DLL_DECL ObjectAccessor : public Trinity::Singleton<ObjectAccessor static void _buildUpdateObject(Object* obj, UpdateDataMapType &); static void UpdateObjectVisibility(WorldObject* obj); - static void UpdateVisibilityForPlayer(Player* player); + //static void UpdateVisibilityForPlayer(Player* player); private: struct WorldObjectChangeAccumulator { diff --git a/src/game/World.cpp b/src/game/World.cpp index c5ed1800132..daa305c8f92 100644 --- a/src/game/World.cpp +++ b/src/game/World.cpp @@ -948,6 +948,7 @@ void World::LoadConfigSettings(bool reload) } if(m_MaxVisibleDistance < m_MaxVisibleDistanceInFlight) m_MaxVisibleDistance = m_MaxVisibleDistanceInFlight; + m_MaxVisibleDistance += 1.0f; ///- Read the "Data" directory from the config file std::string dataPath = sConfig.GetStringDefault("DataDir","./"); |