diff --git a/server/gameserver/movement.cc b/server/gameserver/movement.cc index b6017b2..6fd47c2 100644 --- a/server/gameserver/movement.cc +++ b/server/gameserver/movement.cc @@ -7,7 +7,13 @@ void MovementComponent::Update(int delta_time) { if (path_index_ < paths_.size()) { MovePathPoint& target_point = paths_[path_index_]; - owner->pos = owner->pos + (target_point.pos - owner->pos) * delta_time * move_speed_; + if (owner->pos == target_point.pos) { + ++path_index_; + return; + } + Vector2D path = target_point.pos - owner->pos; + float distance = path.Norm(); + owner->pos = owner->pos + path.Normalize() * std::min(move_speed_, distance); if (owner->pos == target_point.pos) { ++path_index_; } diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index f0fea54..c0338e6 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -67,7 +67,16 @@ void Room::AddPlayer(Player* hum) uniid_hash_[hum->entity_uniid] = hum; moveable_hash_[hum->entity_uniid] = hum; accountid_hash_[hum->account_id] = hum; + human_hash_[hum->entity_uniid] = hum; ++alive_count_; + for (auto& pair : human_hash_) { + if (pair.second != hum) { + pair.second->new_players.insert(hum); + pair.second->part_players.insert(hum); + hum->new_players.insert(pair.second); + hum->part_players.insert(pair.second); + } + } } unsigned short Room::AllocUniid() @@ -94,7 +103,17 @@ void Room::ShuaAndroid() hum->Initialize(); uniid_hash_[hum->entity_uniid] = hum; moveable_hash_[hum->entity_uniid] = hum; + human_hash_[hum->entity_uniid] = hum; ++alive_count_; + + for (auto& pair : human_hash_) { + if (pair.second != hum) { + pair.second->new_players.insert(hum); + pair.second->part_players.insert(hum); + hum->new_players.insert(pair.second); + hum->part_players.insert(pair.second); + } + } } } diff --git a/server/gameserver/room.h b/server/gameserver/room.h index 8d91570..590e8b5 100644 --- a/server/gameserver/room.h +++ b/server/gameserver/room.h @@ -62,4 +62,5 @@ private: std::map accountid_hash_; std::map uniid_hash_; std::map moveable_hash_; + std::map human_hash_; };