From 4387cece7baceb5e4e7c74f9271de6c3192f1111 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Fri, 5 Mar 2021 17:30:43 +0800 Subject: [PATCH] 1 --- server/gameserver/car.cc | 15 +++++++++++++++ server/gameserver/car.h | 1 + server/gameserver/player.cc | 3 +++ 3 files changed, 19 insertions(+) diff --git a/server/gameserver/car.cc b/server/gameserver/car.cc index 841d74b..7865917 100644 --- a/server/gameserver/car.cc +++ b/server/gameserver/car.cc @@ -158,3 +158,18 @@ int Car::AllocSeat() } return seat; } + +void Car::SyncPos() +{ + if (driver_) { + SetPos(driver_->GetPos()); + move_dir = driver_->move_dir; + for (auto hum : passengers_) { + if (hum != driver_) { + hum->SetPos(GetPos()); + hum->move_dir = move_dir; + room->grid_service->MoveHuman(hum); + } + } + } +} diff --git a/server/gameserver/car.h b/server/gameserver/car.h index 4567a1a..5d17bf2 100644 --- a/server/gameserver/car.h +++ b/server/gameserver/car.h @@ -27,6 +27,7 @@ class Car : public MoveableEntity bool IsDriver(Human* hum) { return driver_ == hum && driver_; } void GetDown(Human* passenger); void GetOn(Human* passenger); + void SyncPos(); private: int AllocSeat(); diff --git a/server/gameserver/player.cc b/server/gameserver/player.cc index 579e23d..dfe1fc7 100644 --- a/server/gameserver/player.cc +++ b/server/gameserver/player.cc @@ -148,6 +148,9 @@ void Player::UpdateMove() if (GetLastCollisionDoor() && !TestCollision(room, GetLastCollisionDoor())) { SetLastCollisionDoor(nullptr); } + if (GetCar() && GetCar()->IsDriver(this)) { + GetCar()->SyncPos(); + } #ifdef DEBUG room->CheckPartObjects(); #endif