1
This commit is contained in:
parent
a001cd6468
commit
0cd2123369
@ -33,6 +33,9 @@ void Car::FillMFObjectFull(Room* room, Human* hum, cs::MFObjectFull* full_data)
|
|||||||
|
|
||||||
void Car::GetDown(Human* passenger)
|
void Car::GetDown(Human* passenger)
|
||||||
{
|
{
|
||||||
|
if (later_removed_) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (passengers.find(passenger) == passengers.end()) {
|
if (passengers.find(passenger) == passengers.end()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -56,6 +59,8 @@ void Car::GetDown(Human* passenger)
|
|||||||
loot_entity->GetPos());
|
loot_entity->GetPos());
|
||||||
}
|
}
|
||||||
room->TakeOffCarObject(loot_uniid, GetPos());
|
room->TakeOffCarObject(loot_uniid, GetPos());
|
||||||
|
room->RemoveObjectLater(this);
|
||||||
|
later_removed_ = true;
|
||||||
}
|
}
|
||||||
passenger->SetCar(nullptr);
|
passenger->SetCar(nullptr);
|
||||||
passenger->SetSeat(0);
|
passenger->SetSeat(0);
|
||||||
@ -65,4 +70,5 @@ void Car::GetDown(Human* passenger)
|
|||||||
passenger->RemoveBuffByEffectId(kBET_Passenger);
|
passenger->RemoveBuffByEffectId(kBET_Passenger);
|
||||||
room->frame_event.AddCarChg(passenger);
|
room->frame_event.AddCarChg(passenger);
|
||||||
SyncAroundPlayers(__FILE__, __LINE__, __func__);
|
SyncAroundPlayers(__FILE__, __LINE__, __func__);
|
||||||
|
room->NotifyUiUpdate();
|
||||||
}
|
}
|
||||||
|
@ -26,4 +26,7 @@ class Car : public MoveableEntity
|
|||||||
virtual void FillMFObjectFull(Room* room, Human* hum, cs::MFObjectFull* full_data) override;
|
virtual void FillMFObjectFull(Room* room, Human* hum, cs::MFObjectFull* full_data) override;
|
||||||
|
|
||||||
void GetDown(Human* passenger);
|
void GetDown(Human* passenger);
|
||||||
|
|
||||||
|
private:
|
||||||
|
bool later_removed_ = false;
|
||||||
};
|
};
|
||||||
|
@ -191,6 +191,21 @@ void GridService::DelBullet(Bullet* bullet)
|
|||||||
cell.RemoveBullet(bullet);
|
cell.RemoveBullet(bullet);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GridService::AddCar(Car* car)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void GridService::MoveCar(Car* car)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void GridService::DelCar(Car* car)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
void GridService::AddRoomEntity(Room* room, Entity* entity)
|
void GridService::AddRoomEntity(Room* room, Entity* entity)
|
||||||
{
|
{
|
||||||
assert(!entity->IsEntityType(ET_Player));
|
assert(!entity->IsEntityType(ET_Player));
|
||||||
|
@ -4,6 +4,7 @@ class Human;
|
|||||||
class Entity;
|
class Entity;
|
||||||
class Room;
|
class Room;
|
||||||
class Bullet;
|
class Bullet;
|
||||||
|
class Car;
|
||||||
class GridCell;
|
class GridCell;
|
||||||
class GridService
|
class GridService
|
||||||
{
|
{
|
||||||
@ -26,6 +27,10 @@ class GridService
|
|||||||
void MoveBullet(Bullet* bullet);
|
void MoveBullet(Bullet* bullet);
|
||||||
void DelBullet(Bullet* bullet);
|
void DelBullet(Bullet* bullet);
|
||||||
|
|
||||||
|
void AddCar(Car* car);
|
||||||
|
void MoveCar(Car* car);
|
||||||
|
void DelCar(Car* car);
|
||||||
|
|
||||||
void AddRoomEntity(Room* room, Entity* entity);
|
void AddRoomEntity(Room* room, Entity* entity);
|
||||||
void DelRoomEntity(Room* room, Entity* entity);
|
void DelRoomEntity(Room* room, Entity* entity);
|
||||||
|
|
||||||
|
@ -1378,33 +1378,6 @@ void Human::DoGetOn(int obj_uniid)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Human::DoGetDown()
|
|
||||||
{
|
|
||||||
if (GetCar()) {
|
|
||||||
GetCar()->GetDown(this);
|
|
||||||
int loot_uniid = room->CreateLoot(car_->meta->i->id(), GetPos(), 1, 1);
|
|
||||||
Entity* loot_entity = room->GetEntityByUniId(loot_uniid);
|
|
||||||
if (loot_entity && loot_entity->IsEntityType(ET_Loot)) {
|
|
||||||
((Loot*)loot_entity)->bullet_num = 0;
|
|
||||||
((Loot*)loot_entity)->param1 = 0;
|
|
||||||
((Loot*)loot_entity)->param2 = 0;
|
|
||||||
room->UpdateCarObject(car_->car_uniid,
|
|
||||||
loot_entity->GetEntityUniId(),
|
|
||||||
loot_entity->GetPos());
|
|
||||||
}
|
|
||||||
room->TakeOffCarObject(loot_uniid, GetPos());
|
|
||||||
if (car_->meta->i->buffid()) {
|
|
||||||
RemoveBuffById(car_->meta->i->buffid());
|
|
||||||
RecalcSelfCollider();
|
|
||||||
}
|
|
||||||
SyncAroundPlayers(__FILE__, __LINE__, __func__);
|
|
||||||
room->NotifyUiUpdate();
|
|
||||||
SetCar(nullptr);
|
|
||||||
car_weapon = Weapon();
|
|
||||||
CancelAction();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void Human::FindLocation()
|
void Human::FindLocation()
|
||||||
{
|
{
|
||||||
Entity* target = nullptr;
|
Entity* target = nullptr;
|
||||||
@ -4246,31 +4219,30 @@ void Human::NextReload(int prev_weapon_id, int prev_weapon_idx)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Human::DoGetDown()
|
||||||
|
{
|
||||||
|
if (GetCar()) {
|
||||||
|
GetCar()->GetDown(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void Human::DoGetOnWithLoot(Loot* entity)
|
void Human::DoGetOnWithLoot(Loot* entity)
|
||||||
{
|
{
|
||||||
MetaData::Equip* item_meta = MetaMgr::Instance()->GetEquip(entity->item_id);
|
MetaData::Equip* item_meta = MetaMgr::Instance()->GetEquip(entity->item_id);
|
||||||
if (!item_meta) {
|
if (!item_meta) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (car_) {
|
if (GetCar()) {
|
||||||
int loot_uniid = room->CreateLoot(car_->meta->i->id(), GetPos(), 1, 1);
|
GetCar()->GetDown(this);
|
||||||
Entity* loot_entity = room->GetEntityByUniId(loot_uniid);
|
|
||||||
if (loot_entity && loot_entity->IsEntityType(ET_Loot)) {
|
|
||||||
((Loot*)loot_entity)->bullet_num = 0;
|
|
||||||
((Loot*)loot_entity)->param1 = 0;
|
|
||||||
((Loot*)loot_entity)->param2 = 0;
|
|
||||||
room->UpdateCarObject(car_->car_uniid,
|
|
||||||
loot_entity->GetEntityUniId(),
|
|
||||||
loot_entity->GetPos());
|
|
||||||
}
|
|
||||||
room->TakeOffCarObject(loot_uniid, GetPos());
|
|
||||||
if (car_->meta->i->buffid()) {
|
|
||||||
RemoveBuffById(car_->meta->i->buffid());
|
|
||||||
}
|
|
||||||
car_weapon = Weapon();
|
|
||||||
}
|
}
|
||||||
|
car_ = room->CreateCar(
|
||||||
|
this,
|
||||||
|
item_meta,
|
||||||
|
GetPos()
|
||||||
|
);
|
||||||
car_->car_uniid = entity->GetEntityUniId();
|
car_->car_uniid = entity->GetEntityUniId();
|
||||||
car_->meta = item_meta;
|
SetCar(car_);
|
||||||
|
SetSeat(0);
|
||||||
SetPos(entity->GetPos());
|
SetPos(entity->GetPos());
|
||||||
{
|
{
|
||||||
MetaData::Buff* buff_meta = MetaMgr::Instance()->GetBuff(DRIVER_BUFFID);
|
MetaData::Buff* buff_meta = MetaMgr::Instance()->GetBuff(DRIVER_BUFFID);
|
||||||
@ -4284,11 +4256,6 @@ void Human::DoGetOnWithLoot(Loot* entity)
|
|||||||
AddBuff(this, buff_meta, 1);
|
AddBuff(this, buff_meta, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#if 0
|
|
||||||
car_.driver = this;
|
|
||||||
car_.passengers.clear();
|
|
||||||
car_.passengers.insert(this);
|
|
||||||
#endif
|
|
||||||
CancelAction();
|
CancelAction();
|
||||||
SyncAroundPlayers(__FILE__, __LINE__, __func__);
|
SyncAroundPlayers(__FILE__, __LINE__, __func__);
|
||||||
room->TakeOnCarObject(car_->car_uniid);
|
room->TakeOnCarObject(car_->car_uniid);
|
||||||
|
@ -11,6 +11,7 @@
|
|||||||
#include "obstacle.h"
|
#include "obstacle.h"
|
||||||
#include "building.h"
|
#include "building.h"
|
||||||
#include "loot.h"
|
#include "loot.h"
|
||||||
|
#include "car.h"
|
||||||
#include "app.h"
|
#include "app.h"
|
||||||
#include "collider.h"
|
#include "collider.h"
|
||||||
#include "typeconvert.h"
|
#include "typeconvert.h"
|
||||||
@ -794,13 +795,15 @@ void Player::ProcPrepareItems(const ::google::protobuf::RepeatedField< ::google:
|
|||||||
if (GetCar()) {
|
if (GetCar()) {
|
||||||
abort();
|
abort();
|
||||||
}
|
}
|
||||||
SetCar(room->CreateCar
|
Car* car = room->CreateCar
|
||||||
(
|
(
|
||||||
this,
|
this,
|
||||||
car_uniid,
|
item_meta,
|
||||||
item_meta,
|
GetPos()
|
||||||
GetPos()
|
);
|
||||||
));
|
car->car_uniid = car_uniid;
|
||||||
|
SetCar(car);
|
||||||
|
SetSeat(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
#include "roomobstacle.h"
|
#include "roomobstacle.h"
|
||||||
#include "building.h"
|
#include "building.h"
|
||||||
#include "loot.h"
|
#include "loot.h"
|
||||||
|
#include "car.h"
|
||||||
#include "roommgr.h"
|
#include "roommgr.h"
|
||||||
#include "app.h"
|
#include "app.h"
|
||||||
#include "gamelog.h"
|
#include "gamelog.h"
|
||||||
@ -523,7 +524,6 @@ void Room::CreateBullet(Human* hum,
|
|||||||
}
|
}
|
||||||
|
|
||||||
Car* Room::CreateCar(Human* driver,
|
Car* Room::CreateCar(Human* driver,
|
||||||
int car_uniid,
|
|
||||||
MetaData::Equip* meta,
|
MetaData::Equip* meta,
|
||||||
const a8::Vec2& pos)
|
const a8::Vec2& pos)
|
||||||
{
|
{
|
||||||
@ -565,6 +565,13 @@ void Room::RemoveObjectLater(RoomEntity* entity)
|
|||||||
entity->room->RemoveFromHuamnHash((Human*)entity);
|
entity->room->RemoveFromHuamnHash((Human*)entity);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case ET_Car:
|
||||||
|
{
|
||||||
|
entity->BroadcastDeleteState(entity->room);
|
||||||
|
entity->room->grid_service->DelCar((Car*)entity);
|
||||||
|
entity->room->RemoveFromMoveableHash((Car*)entity);
|
||||||
|
}
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
abort();
|
abort();
|
||||||
|
@ -108,7 +108,6 @@ public:
|
|||||||
float fly_distance,
|
float fly_distance,
|
||||||
bool is_tank_skin = false);
|
bool is_tank_skin = false);
|
||||||
Car* CreateCar(Human* driver,
|
Car* CreateCar(Human* driver,
|
||||||
int car_uniid,
|
|
||||||
MetaData::Equip* meta,
|
MetaData::Equip* meta,
|
||||||
const a8::Vec2& pos);
|
const a8::Vec2& pos);
|
||||||
|
|
||||||
@ -157,9 +156,9 @@ public:
|
|||||||
void OnZombieAppear(Human* hum);
|
void OnZombieAppear(Human* hum);
|
||||||
int GetAliveCountByRace(RaceType_e race);
|
int GetAliveCountByRace(RaceType_e race);
|
||||||
int GetOnlinePlayerNum();
|
int GetOnlinePlayerNum();
|
||||||
|
int AllocUniid();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
int AllocUniid();
|
|
||||||
void ShuaAndroid();
|
void ShuaAndroid();
|
||||||
void ShowAndroid(Human* target, int num);
|
void ShowAndroid(Human* target, int num);
|
||||||
void CreateAndroid(int android_num);
|
void CreateAndroid(int android_num);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user