add AllocSeat function

This commit is contained in:
aozhiwei 2021-03-05 15:17:42 +08:00
parent b8c85a3959
commit 2b379e1055
2 changed files with 32 additions and 4 deletions

View File

@ -5,20 +5,21 @@
#include "room.h" #include "room.h"
#include "metamgr.h" #include "metamgr.h"
#include "loot.h" #include "loot.h"
#include "perfmonitor.h"
Car::Car() Car::Car():MoveableEntity()
{ {
++PerfMonitor::Instance()->entity_num[ET_Car];
} }
Car::~Car() Car::~Car()
{ {
--PerfMonitor::Instance()->entity_num[ET_Car];
} }
void Car::Initialize() void Car::Initialize()
{ {
MoveableEntity::Initialize();
} }
void Car::FillMFObjectPart(Room* room, Human* hum, cs::MFObjectPart* part_data) void Car::FillMFObjectPart(Room* room, Human* hum, cs::MFObjectPart* part_data)
@ -95,11 +96,16 @@ void Car::GetOn(Human* passenger)
return; return;
} }
} }
int seat = AllocSeat();
if (seat < 0) {
return;
}
passengers_.insert(passenger); passengers_.insert(passenger);
if (!driver_) { if (!driver_) {
driver_ = passenger; driver_ = passenger;
} }
passenger->SetCar(this); passenger->SetCar(this);
passenger->SetSeat(seat);
passenger->SetPos(GetPos()); passenger->SetPos(GetPos());
{ {
MetaData::Buff* buff_meta = MetaMgr::Instance()->GetBuff MetaData::Buff* buff_meta = MetaMgr::Instance()->GetBuff
@ -118,3 +124,22 @@ void Car::GetOn(Human* passenger)
room->frame_event.AddCarChg(passenger); room->frame_event.AddCarChg(passenger);
SyncAroundPlayers(__FILE__, __LINE__, __func__); SyncAroundPlayers(__FILE__, __LINE__, __func__);
} }
int Car::AllocSeat()
{
int seat = -1;
for (int i = 0; i < meta->int_param2; ++i) {
bool found = false;
for (auto hum : passengers_) {
if (hum->GetSeat() == i) {
found = true;
break;
}
}
if (!found) {
seat = i;
break;
}
}
return seat;
}

View File

@ -26,6 +26,9 @@ class Car : public MoveableEntity
void GetDown(Human* passenger); void GetDown(Human* passenger);
void GetOn(Human* passenger); void GetOn(Human* passenger);
private:
int AllocSeat();
private: private:
bool later_removed_ = false; bool later_removed_ = false;
Human* driver_ = nullptr; Human* driver_ = nullptr;