# pragma once
# include "olcPixelGameEngine.h"
# include "Animation.h"
# include "olcUTIL_Animate2D.h"
# include "Monster.h"
# include "DEFINES.h"
struct Bullet {
friend class Crawler ;
vf2d pos ;
vf2d vel ;
float radius ;
int damage ;
Pixel col ;
float lifetime = INFINITE ;
bool hitsMultiple = false ;
bool rotates = false ;
bool animated = false ;
bool deactivated = false ; //A deactivated bullet no longer interacts with the world. It's just a visual.
float fadeOutTime = 0 ;
bool friendly = false ; //Whether or not it's a player bullet or enemy bullet.
bool upperLevel = false ;
private :
float fadeOutTimer = 0 ;
void UpdateFadeTime ( float fElapsedTime ) ;
public :
Animate2D : : Animation < AnimationState > animation ;
Animate2D : : AnimationState internal_animState ;
std : : map < Monster * , bool > hitList ;
virtual ~ Bullet ( ) = default ;
Bullet ( vf2d pos , vf2d vel , float radius , int damage , bool upperLevel , bool friendly = false , Pixel col = WHITE ) ;
//Initializes a bullet with an animation.
Bullet ( vf2d pos , vf2d vel , float radius , int damage , AnimationState animation , bool upperLevel , bool hitsMultiple = false , float lifetime = INFINITE , bool rotatesWithAngle = false , bool friendly = false , Pixel col = WHITE ) ;
public :
virtual void Update ( float fElapsedTime ) ;
//Return true when the bullet should be destroyed. Return false to handle it otherwise (like deactivating it instead). You become responsible for getting rid of the bullet.
virtual bool PlayerHit ( Player * player ) ;
//Return true when the bullet should be destroyed. Return false to handle it otherwise (like deactivating it instead). You become responsible for getting rid of the bullet.
virtual bool MonsterHit ( Monster & monster ) ;
Animate2D : : Frame GetFrame ( ) ;
void Draw ( ) ;
bool OnUpperLevel ( ) ;
} ;