8.驾驶员下车后,车上人员需要可以切换驾驶位

This commit is contained in:
aozhiwei 2021-05-26 10:25:25 +08:00
parent b068f7cb57
commit b0347254a1
4 changed files with 53 additions and 0 deletions

View File

@ -72,6 +72,16 @@ void Car::FillMFObjectFull(Room* room, Human* hum, cs::MFObjectFull* full_data)
FillBuffList(hum, p->mutable_buff_list());
}
Human* Car::GetPassengerBySeat(int seat)
{
for (auto hum : passengers_) {
if (hum->GetSeat() == seat) {
return hum;
}
}
return nullptr;
}
void Car::GetDown(Human* passenger)
{
if (later_removed_) {
@ -169,6 +179,31 @@ void Car::GetOn(Human* passenger)
SyncAroundPlayers(__FILE__, __LINE__, __func__);
}
void Car::SwitchSeat(Human* passenger, int seat)
{
if (seat != 0) {
return;
}
if (driver_) {
return;
}
if (!IsPassenger(passenger)) {
return;
}
if (passenger->GetSeat() == seat) {
return;
}
if (GetPassengerBySeat(seat)) {
return;
}
if (!IsDriver(passenger)) {
passenger->SetSeat(seat);
driver_ = passenger;
room->frame_event.AddCarChg(passenger);
SyncAroundPlayers(__FILE__, __LINE__, __func__);
}
}
bool Car::CanShot(Human* passenger)
{
if (!IsPassenger(passenger)) {

View File

@ -28,8 +28,10 @@ class Car : public Creature
virtual void GetAabbBox(AabbCollider& aabb_box) override;
bool IsDriver(Human* hum) { return driver_ == hum && driver_; }
Human* GetPassengerBySeat(int seat);
void GetDown(Human* passenger);
void GetOn(Human* passenger);
void SwitchSeat(Human* passenger, int seat);
bool CanShot(Human* passenger);
void SyncPos();
virtual float GetRadius() override;

View File

@ -114,6 +114,9 @@ void Player::InternalUpdate(int delta_time)
if (get_on) {
UpdateGetOn();
}
if (switch_seat) {
UpdateSwitchSeat();
}
if (shot_start || shot_hold) {
UpdateShot();
}
@ -421,6 +424,14 @@ void Player::UpdateGetOn()
get_on = 0;
}
void Player::UpdateSwitchSeat()
{
if (GetCar()) {
GetCar()->SwitchSeat(this, switch_seat - 1);
}
switch_seat = 0;
}
void Player::UpdateUseSkill()
{
if (HasBuffEffect(kBET_Vertigo)) {
@ -1114,6 +1125,9 @@ void Player::_CMMove(f8::MsgHdr& hdr, const cs::CMMove& msg)
if (msg.has_get_on()) {
get_on = msg.get_on();
}
if (msg.has_switch_seat()) {
switch_seat = msg.has_switch_seat();
}
if (msg.has_jump()) {
jump = true;
}

View File

@ -65,6 +65,7 @@ class Player : public Human
bool get_down = false;
int get_on = 0;
int switch_seat = 0;
::google::protobuf::RepeatedField< ::google::protobuf::int32 > interaction_objids;
@ -85,6 +86,7 @@ class Player : public Human
void UpdateJump();
void UpdateGetDown();
void UpdateGetOn();
void UpdateSwitchSeat();
void UpdateUseSkill();
void UpdateAiming();
void Shot();