71 lines
2.2 KiB
C++
71 lines
2.2 KiB
C++
#pragma once
|
|
|
|
#include "creature.h"
|
|
|
|
#include "cs_proto.pb.h"
|
|
|
|
namespace MetaData
|
|
{
|
|
struct Equip;
|
|
struct Player;
|
|
}
|
|
|
|
class Human;
|
|
class Room;
|
|
class CircleCollider;
|
|
class Car : public Creature
|
|
{
|
|
public:
|
|
int car_uniid = 0;
|
|
MetaData::Equip* meta = nullptr;
|
|
MetaData::Player* hero_meta_ = nullptr;
|
|
|
|
Car();
|
|
virtual ~Car() override;
|
|
virtual void Initialize() override;
|
|
virtual void FillMFObjectPart(Room* room, Human* hum, cs::MFObjectPart* part_data) override;
|
|
virtual void FillMFObjectFull(Room* room, Human* hum, cs::MFObjectFull* full_data) override;
|
|
virtual void OnBulletHit(Bullet* bullet) override;
|
|
virtual void OnExplosionHit(Explosion* e) override;
|
|
virtual void GetAabbBox(AabbCollider& aabb_box) override;
|
|
virtual void GetHitAabbBox(AabbCollider& aabb_box) override;
|
|
virtual std::string GetName() 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();
|
|
float GetCurOil() { return cur_oil_; };
|
|
float GetMaxOil();
|
|
bool HasOil() { return cur_oil_ >= 0.00000001f; };
|
|
void DecOil(float dec_oil);
|
|
bool HasPassenter() { return !passengers_.empty();};
|
|
virtual float GetRadius() override;
|
|
virtual float GetSpeed() override;
|
|
virtual void DecHP(float dec_hp, int killer_id, const std::string& killer_name, int weapon_id) override;
|
|
virtual void SendDebugMsg(const std::string& debug_msg) override;
|
|
virtual void SetAttackDir(const a8::Vec2& attack_dir) override;
|
|
virtual void DropItems(Obstacle* obstacle) override;
|
|
|
|
private:
|
|
int AllocSeat();
|
|
void BeKill(int killer_id, const std::string& killer_name, int weapon_id);
|
|
bool IsPassenger(Human* hum);
|
|
void RecalcSelfCollider();
|
|
bool NeedCreatureCollision();
|
|
void CheckCreatureCollision();
|
|
|
|
private:
|
|
long long born_frameno_ = 0;
|
|
bool later_removed_ = false;
|
|
Human* driver_ = nullptr;
|
|
std::set<Human*> passengers_;
|
|
int cur_buff_id_ = 0;
|
|
int cur_buff_idx_ = -1;
|
|
float cur_oil_ = 0;
|
|
CircleCollider* self_collider_ = nullptr;
|
|
};
|