45 lines
1.7 KiB
C
Raw Normal View History

2023-06-15 00:11:39 -05:00
#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};
2023-07-06 03:43:34 -05:00
Pixel col=WHITE;
2023-06-24 02:14:11 -07:00
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);
2023-06-15 00:11:39 -05:00
Animate2D::Frame GetFrame();
virtual void Draw();
2023-07-07 06:42:49 -05:00
bool OnUpperLevel();
protected:
float original_fadeoutTime;
2023-06-15 00:11:39 -05:00
private:
Animate2D::Animation<AnimationState>animation;
Animate2D::AnimationState internal_animState;
2023-07-07 06:42:49 -05:00
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);
float startLifetime=0;
bool shakeField=false;
bool Update(float fElapsedTime)override;
void Draw()override;
2023-07-21 17:29:20 -05:00
};
struct PulsatingFire:Effect{
PulsatingFire(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);
std::vector<float>pulsatingFireValues;
float lastParticleTimer=0;
float lastDamageTimer=0;
2023-07-21 17:29:20 -05:00
bool Update(float fElapsedTime)override;
void Draw()override;
2023-06-15 00:11:39 -05:00
};