61 lines
1.3 KiB
C++
61 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;
|
|
CreatureWeakPtr passenger;
|
|
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();
|
|
bool IsBomb();
|
|
float GetAtk();
|
|
|
|
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);
|
|
inline void MapServiceUpdate();
|
|
void Check(float distance);
|
|
|
|
private:
|
|
CircleCollider* self_collider_ = nullptr;
|
|
bool later_removed_ = false;
|
|
|
|
friend class EntityFactory;
|
|
};
|