aozhiwei e1ba7d045c 1
2021-04-02 19:21:22 +08:00

60 lines
1.3 KiB
C++

#pragma once
#include "moveableentity.h"
#include "weakptr.h"
namespace MetaData
{
struct Player;
struct Equip;
struct EquipUpgrade;
}
class Human;
class Obstacle;
class Creature;
class CircleCollider;
class MovementComponent;
class Bullet : public MoveableEntity
{
public:
int gun_lv = 0;
MetaData::Equip* gun_meta = nullptr;
MetaData::EquipUpgrade* gun_upgrade_meta = nullptr;
MetaData::Equip* meta = nullptr;
CreatureWeakPtr sender;
a8::Vec2 dir;
a8::Vec2 born_pos;
a8::Vec2 born_dir;
float fly_distance = 0.0f;
bool is_tank_skin = false;
MovementComponent* movement = nullptr;
virtual ~Bullet() override;
virtual void Initialize() override;
virtual void Update(int delta_time) override;
void RecalcSelfCollider();
protected:
Bullet();
private:
void OnHit(std::set<Entity*>& objects);
void ProcBomb();
void ProcSmokeBomb();
void ProcFragBomb(int delay_time);
void ProcPosionGasBomb(int delay_time);
void ProcMolotorCocktailBomb(int delay_time);
bool IsBomb();
inline void MapServiceUpdate();
float GetAtk();
void Check(float distance);
private:
CircleCollider* self_collider_ = nullptr;
bool later_removed_ = false;
friend class EntityFactory;
};