#pragma once
#include "Bullet.h"
#include "olcPixelGameEngine.h"

struct EnergyBolt:public Bullet{
	float lastParticleSpawn=0;
	EnergyBolt(vf2d pos,vf2d vel,float radius,int damage,bool upperLevel,bool friendly=false,Pixel col=WHITE);
	void Update(float fElapsedTime)override;
	bool PlayerHit(Player*player)override;
	bool MonsterHit(Monster&monster)override;
};

struct FireBolt:public Bullet{
	float lastParticleSpawn=0;
	FireBolt(vf2d pos,vf2d vel,float radius,int damage,bool upperLevel,bool friendly=false,Pixel col=WHITE);
	void Update(float fElapsedTime)override;
	bool PlayerHit(Player*player)override;
	bool MonsterHit(Monster&monster)override;
};

struct LightningBolt:public Bullet{
	float lastParticleSpawn=0;
	LightningBolt(vf2d pos,vf2d vel,float radius,int damage,bool upperLevel,bool friendly=false,Pixel col=WHITE);
	void Update(float fElapsedTime)override;
	bool PlayerHit(Player*player)override;
	bool MonsterHit(Monster&monster)override;
};

struct Arrow:public Bullet{
	float travelDistance=0;
	float finalDistance=0;
	float acc=PI/2*250;
	Arrow(vf2d pos,vf2d targetPos,vf2d vel,float radius,int damage,bool upperLevel,bool friendly=false,Pixel col=WHITE);
	void Update(float fElapsedTime)override;
	bool PlayerHit(Player*player)override;
	bool MonsterHit(Monster&monster)override;
};

struct ChargedArrow:public Bullet{
	vf2d lastLaserPos;
	ChargedArrow(vf2d pos,vf2d vel,float radius,int damage,bool upperLevel,bool friendly=false,Pixel col=WHITE);
	void Update(float fElapsedTime)override;
	bool PlayerHit(Player*player)override;
	bool MonsterHit(Monster&monster)override;
};