#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::Animationanimation; Animate2D::AnimationState internal_animState; std::maphitList; 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(); };