#pragma once
#include "olcPixelGameEngine.h"
#include "Animation.h"
#include "olcUTIL_Animate2D.h"

struct Effect{
	vf2d pos={0,0};
	float lifetime=0;
	float fadeout=0;
	vf2d size={1,1};
	Pixel col=WHITE;
	vf2d spd={};
	float rotation=0;
	float rotationSpd=0;
	bool additiveBlending=false;
	Effect(vf2d pos,float lifetime,AnimationState animation,bool upperLevel,float size=1.0f,float fadeout=0.0f,vf2d spd={},Pixel col=WHITE,float rotation=0,float rotationSpd=0,bool additiveBlending=false);
	Effect(vf2d pos,float lifetime,AnimationState animation,bool upperLevel,vf2d size={1,1},float fadeout=0.0f,vf2d spd={},Pixel col=WHITE,float rotation=0,float rotationSpd=0,bool additiveBlending=false);
	virtual bool Update(float fElapsedTime);
	Animate2D::Frame GetFrame();
	virtual void Draw();
	bool OnUpperLevel();
private:
	Animate2D::Animation<AnimationState>animation;
	Animate2D::AnimationState internal_animState;
	float original_fadeoutTime;
	bool upperLevel=false;
};

struct Meteor:Effect{
	Meteor(vf2d pos,float lifetime,AnimationState animation,bool upperLevel,vf2d size={1,1},float fadeout=0.0f,vf2d spd={},Pixel col=WHITE,float rotation=0,float rotationSpd=0,bool additiveBlending=false);
	bool Update(float fElapsedTime)override;
	void Draw()override;
};