@ -0,0 +1 @@ |
|||||||
|
<a href="https://www.freepik.com/free-vector/realistic-lightning-bolt-transparent-background_18952746.htm">Image by pikisuperstar</a> on Freepik |
@ -0,0 +1,317 @@ |
|||||||
|
#include "Animation.h" |
||||||
|
#include "Crawler.h" |
||||||
|
#include "DEFINES.h" |
||||||
|
|
||||||
|
INCLUDE_game |
||||||
|
INCLUDE_ANIMATION_DATA |
||||||
|
|
||||||
|
void sig::Animation::InitializeAnimations(){ |
||||||
|
//Warrior animations.
|
||||||
|
Animate2D::FrameSequence pl_warrior_walk_s{0.2}; |
||||||
|
pl_warrior_walk_s.AddFrame({&game->GFX_Warrior_Sheet,{vi2d{0,0}*24,{24,24}}}); |
||||||
|
pl_warrior_walk_s.AddFrame({&game->GFX_Warrior_Sheet,{vi2d{1,0}*24,{24,24}}}); |
||||||
|
pl_warrior_walk_s.AddFrame({&game->GFX_Warrior_Sheet,{vi2d{0,0}*24,{24,24}}}); |
||||||
|
pl_warrior_walk_s.AddFrame({&game->GFX_Warrior_Sheet,{vi2d{2,0}*24,{24,24}}}); |
||||||
|
ANIMATION_DATA[AnimationState::WARRIOR_WALK_S]=pl_warrior_walk_s; |
||||||
|
Animate2D::FrameSequence pl_warrior_walk_e{0.2}; |
||||||
|
pl_warrior_walk_e.AddFrame({&game->GFX_Warrior_Sheet,{vi2d{0,3}*24,{24,24}}}); |
||||||
|
pl_warrior_walk_e.AddFrame({&game->GFX_Warrior_Sheet,{vi2d{1,3}*24,{24,24}}}); |
||||||
|
pl_warrior_walk_e.AddFrame({&game->GFX_Warrior_Sheet,{vi2d{0,3}*24,{24,24}}}); |
||||||
|
pl_warrior_walk_e.AddFrame({&game->GFX_Warrior_Sheet,{vi2d{2,3}*24,{24,24}}}); |
||||||
|
ANIMATION_DATA[AnimationState::WARRIOR_WALK_E]=pl_warrior_walk_e; |
||||||
|
Animate2D::FrameSequence pl_warrior_walk_w{0.2}; |
||||||
|
pl_warrior_walk_w.AddFrame({&game->GFX_Warrior_Sheet,{vi2d{0,2}*24,{24,24}}}); |
||||||
|
pl_warrior_walk_w.AddFrame({&game->GFX_Warrior_Sheet,{vi2d{1,2}*24,{24,24}}}); |
||||||
|
pl_warrior_walk_w.AddFrame({&game->GFX_Warrior_Sheet,{vi2d{0,2}*24,{24,24}}}); |
||||||
|
pl_warrior_walk_w.AddFrame({&game->GFX_Warrior_Sheet,{vi2d{2,2}*24,{24,24}}}); |
||||||
|
ANIMATION_DATA[AnimationState::WARRIOR_WALK_W]=pl_warrior_walk_w; |
||||||
|
Animate2D::FrameSequence pl_warrior_walk_n{0.2}; |
||||||
|
pl_warrior_walk_n.AddFrame({&game->GFX_Warrior_Sheet,{vi2d{0,1}*24,{24,24}}}); |
||||||
|
pl_warrior_walk_n.AddFrame({&game->GFX_Warrior_Sheet,{vi2d{1,1}*24,{24,24}}}); |
||||||
|
pl_warrior_walk_n.AddFrame({&game->GFX_Warrior_Sheet,{vi2d{0,1}*24,{24,24}}}); |
||||||
|
pl_warrior_walk_n.AddFrame({&game->GFX_Warrior_Sheet,{vi2d{2,1}*24,{24,24}}}); |
||||||
|
ANIMATION_DATA[AnimationState::WARRIOR_WALK_N]=pl_warrior_walk_n; |
||||||
|
Animate2D::FrameSequence pl_warrior_idle_s; |
||||||
|
pl_warrior_idle_s.AddFrame({&game->GFX_Warrior_Sheet,{vi2d{0,0}*24,{24,24}}}); |
||||||
|
ANIMATION_DATA[AnimationState::WARRIOR_IDLE_S]=pl_warrior_idle_s; |
||||||
|
Animate2D::FrameSequence pl_warrior_idle_e; |
||||||
|
pl_warrior_idle_e.AddFrame({&game->GFX_Warrior_Sheet,{vi2d{0,3}*24,{24,24}}}); |
||||||
|
ANIMATION_DATA[AnimationState::WARRIOR_IDLE_E]=pl_warrior_idle_e; |
||||||
|
Animate2D::FrameSequence pl_warrior_idle_w; |
||||||
|
pl_warrior_idle_w.AddFrame({&game->GFX_Warrior_Sheet,{vi2d{0,2}*24,{24,24}}}); |
||||||
|
ANIMATION_DATA[AnimationState::WARRIOR_IDLE_W]=pl_warrior_idle_w; |
||||||
|
Animate2D::FrameSequence pl_warrior_idle_n; |
||||||
|
pl_warrior_idle_n.AddFrame({&game->GFX_Warrior_Sheet,{vi2d{0,1}*24,{24,24}}}); |
||||||
|
ANIMATION_DATA[AnimationState::WARRIOR_IDLE_N]=pl_warrior_idle_n; |
||||||
|
Animate2D::FrameSequence pl_warrior_swing_s(0.05),pl_warrior_swing_n(0.05),pl_warrior_swing_e(0.05),pl_warrior_swing_w(0.05); |
||||||
|
Animate2D::FrameSequence pl_warrior_sonic_swing_s(0.1,Animate2D::Style::OneShot),pl_warrior_sonic_swing_n(0.1,Animate2D::Style::OneShot),pl_warrior_sonic_swing_e(0.1,Animate2D::Style::OneShot),pl_warrior_sonic_swing_w(0.1,Animate2D::Style::OneShot); |
||||||
|
for (int i=0;i<4;i++){ |
||||||
|
pl_warrior_swing_s.AddFrame({&game->GFX_Warrior_Sheet,{vi2d{4+i,0}*24,{24,24}}}); |
||||||
|
pl_warrior_sonic_swing_s.AddFrame({&game->GFX_Warrior_Sheet,{vi2d{4+i,4}*24,{24,24}}}); |
||||||
|
} |
||||||
|
for (int i=0;i<4;i++){ |
||||||
|
pl_warrior_swing_n.AddFrame({&game->GFX_Warrior_Sheet,{vi2d{4+i,1}*24,{24,24}}}); |
||||||
|
pl_warrior_sonic_swing_n.AddFrame({&game->GFX_Warrior_Sheet,{vi2d{4+i,5}*24,{24,24}}}); |
||||||
|
} |
||||||
|
for (int i=0;i<4;i++){ |
||||||
|
pl_warrior_swing_w.AddFrame({&game->GFX_Warrior_Sheet,{vi2d{4+i,2}*24,{24,24}}}); |
||||||
|
pl_warrior_sonic_swing_w.AddFrame({&game->GFX_Warrior_Sheet,{vi2d{4+i,6}*24,{24,24}}}); |
||||||
|
} |
||||||
|
for (int i=0;i<4;i++){ |
||||||
|
pl_warrior_swing_e.AddFrame({&game->GFX_Warrior_Sheet,{vi2d{4+i,3}*24,{24,24}}}); |
||||||
|
pl_warrior_sonic_swing_e.AddFrame({&game->GFX_Warrior_Sheet,{vi2d{4+i,7}*24,{24,24}}}); |
||||||
|
} |
||||||
|
ANIMATION_DATA[AnimationState::WARRIOR_SWINGSWORD_N]=pl_warrior_swing_n; |
||||||
|
ANIMATION_DATA[AnimationState::WARRIOR_SWINGSWORD_E]=pl_warrior_swing_e; |
||||||
|
ANIMATION_DATA[AnimationState::WARRIOR_SWINGSWORD_S]=pl_warrior_swing_s; |
||||||
|
ANIMATION_DATA[AnimationState::WARRIOR_SWINGSWORD_W]=pl_warrior_swing_w; |
||||||
|
ANIMATION_DATA[AnimationState::WARRIOR_SWINGSONICSWORD_N]=pl_warrior_sonic_swing_n; |
||||||
|
ANIMATION_DATA[AnimationState::WARRIOR_SWINGSONICSWORD_E]=pl_warrior_sonic_swing_e; |
||||||
|
ANIMATION_DATA[AnimationState::WARRIOR_SWINGSONICSWORD_S]=pl_warrior_sonic_swing_s; |
||||||
|
ANIMATION_DATA[AnimationState::WARRIOR_SWINGSONICSWORD_W]=pl_warrior_sonic_swing_w; |
||||||
|
|
||||||
|
//Ranger animations
|
||||||
|
Animate2D::FrameSequence pl_ranger_walk_s{0.2}; |
||||||
|
pl_ranger_walk_s.AddFrame({&game->GFX_Ranger_Sheet,{vi2d{0,0}*24,{24,24}}}); |
||||||
|
pl_ranger_walk_s.AddFrame({&game->GFX_Ranger_Sheet,{vi2d{1,0}*24,{24,24}}}); |
||||||
|
pl_ranger_walk_s.AddFrame({&game->GFX_Ranger_Sheet,{vi2d{0,0}*24,{24,24}}}); |
||||||
|
pl_ranger_walk_s.AddFrame({&game->GFX_Ranger_Sheet,{vi2d{2,0}*24,{24,24}}}); |
||||||
|
ANIMATION_DATA[AnimationState::RANGER_WALK_S]=pl_ranger_walk_s; |
||||||
|
Animate2D::FrameSequence pl_ranger_walk_e{0.2}; |
||||||
|
pl_ranger_walk_e.AddFrame({&game->GFX_Ranger_Sheet,{vi2d{0,3}*24,{24,24}}}); |
||||||
|
pl_ranger_walk_e.AddFrame({&game->GFX_Ranger_Sheet,{vi2d{1,3}*24,{24,24}}}); |
||||||
|
pl_ranger_walk_e.AddFrame({&game->GFX_Ranger_Sheet,{vi2d{0,3}*24,{24,24}}}); |
||||||
|
pl_ranger_walk_e.AddFrame({&game->GFX_Ranger_Sheet,{vi2d{2,3}*24,{24,24}}}); |
||||||
|
ANIMATION_DATA[AnimationState::RANGER_WALK_E]=pl_ranger_walk_e; |
||||||
|
Animate2D::FrameSequence pl_ranger_walk_w{0.2}; |
||||||
|
pl_ranger_walk_w.AddFrame({&game->GFX_Ranger_Sheet,{vi2d{0,2}*24,{24,24}}}); |
||||||
|
pl_ranger_walk_w.AddFrame({&game->GFX_Ranger_Sheet,{vi2d{1,2}*24,{24,24}}}); |
||||||
|
pl_ranger_walk_w.AddFrame({&game->GFX_Ranger_Sheet,{vi2d{0,2}*24,{24,24}}}); |
||||||
|
pl_ranger_walk_w.AddFrame({&game->GFX_Ranger_Sheet,{vi2d{2,2}*24,{24,24}}}); |
||||||
|
ANIMATION_DATA[AnimationState::RANGER_WALK_W]=pl_ranger_walk_w; |
||||||
|
Animate2D::FrameSequence pl_ranger_walk_n{0.2}; |
||||||
|
pl_ranger_walk_n.AddFrame({&game->GFX_Ranger_Sheet,{vi2d{0,1}*24,{24,24}}}); |
||||||
|
pl_ranger_walk_n.AddFrame({&game->GFX_Ranger_Sheet,{vi2d{1,1}*24,{24,24}}}); |
||||||
|
pl_ranger_walk_n.AddFrame({&game->GFX_Ranger_Sheet,{vi2d{0,1}*24,{24,24}}}); |
||||||
|
pl_ranger_walk_n.AddFrame({&game->GFX_Ranger_Sheet,{vi2d{2,1}*24,{24,24}}}); |
||||||
|
ANIMATION_DATA[AnimationState::RANGER_WALK_N]=pl_ranger_walk_n; |
||||||
|
Animate2D::FrameSequence pl_ranger_idle_s; |
||||||
|
pl_ranger_idle_s.AddFrame({&game->GFX_Ranger_Sheet,{vi2d{0,0}*24,{24,24}}}); |
||||||
|
ANIMATION_DATA[AnimationState::RANGER_IDLE_S]=pl_ranger_idle_s; |
||||||
|
Animate2D::FrameSequence pl_ranger_idle_e; |
||||||
|
pl_ranger_idle_e.AddFrame({&game->GFX_Ranger_Sheet,{vi2d{0,3}*24,{24,24}}}); |
||||||
|
ANIMATION_DATA[AnimationState::RANGER_IDLE_E]=pl_ranger_idle_e; |
||||||
|
Animate2D::FrameSequence pl_ranger_idle_w; |
||||||
|
pl_ranger_idle_w.AddFrame({&game->GFX_Ranger_Sheet,{vi2d{0,2}*24,{24,24}}}); |
||||||
|
ANIMATION_DATA[AnimationState::RANGER_IDLE_W]=pl_ranger_idle_w; |
||||||
|
Animate2D::FrameSequence pl_ranger_idle_n; |
||||||
|
pl_ranger_idle_n.AddFrame({&game->GFX_Ranger_Sheet,{vi2d{0,1}*24,{24,24}}}); |
||||||
|
ANIMATION_DATA[AnimationState::RANGER_IDLE_N]=pl_ranger_idle_n; |
||||||
|
|
||||||
|
//Wizard animations
|
||||||
|
Animate2D::FrameSequence pl_wizard_walk_s{0.2}; |
||||||
|
pl_wizard_walk_s.AddFrame({&game->GFX_Wizard_Sheet,{vi2d{0,0}*24,{24,24}}}); |
||||||
|
pl_wizard_walk_s.AddFrame({&game->GFX_Wizard_Sheet,{vi2d{1,0}*24,{24,24}}}); |
||||||
|
pl_wizard_walk_s.AddFrame({&game->GFX_Wizard_Sheet,{vi2d{0,0}*24,{24,24}}}); |
||||||
|
pl_wizard_walk_s.AddFrame({&game->GFX_Wizard_Sheet,{vi2d{2,0}*24,{24,24}}}); |
||||||
|
ANIMATION_DATA[AnimationState::WIZARD_WALK_S]=pl_wizard_walk_s; |
||||||
|
Animate2D::FrameSequence pl_wizard_walk_e{0.2}; |
||||||
|
pl_wizard_walk_e.AddFrame({&game->GFX_Wizard_Sheet,{vi2d{0,3}*24,{24,24}}}); |
||||||
|
pl_wizard_walk_e.AddFrame({&game->GFX_Wizard_Sheet,{vi2d{1,3}*24,{24,24}}}); |
||||||
|
pl_wizard_walk_e.AddFrame({&game->GFX_Wizard_Sheet,{vi2d{0,3}*24,{24,24}}}); |
||||||
|
pl_wizard_walk_e.AddFrame({&game->GFX_Wizard_Sheet,{vi2d{2,3}*24,{24,24}}}); |
||||||
|
ANIMATION_DATA[AnimationState::WIZARD_WALK_E]=pl_wizard_walk_e; |
||||||
|
Animate2D::FrameSequence pl_wizard_walk_w{0.2}; |
||||||
|
pl_wizard_walk_w.AddFrame({&game->GFX_Wizard_Sheet,{vi2d{0,2}*24,{24,24}}}); |
||||||
|
pl_wizard_walk_w.AddFrame({&game->GFX_Wizard_Sheet,{vi2d{1,2}*24,{24,24}}}); |
||||||
|
pl_wizard_walk_w.AddFrame({&game->GFX_Wizard_Sheet,{vi2d{0,2}*24,{24,24}}}); |
||||||
|
pl_wizard_walk_w.AddFrame({&game->GFX_Wizard_Sheet,{vi2d{2,2}*24,{24,24}}}); |
||||||
|
ANIMATION_DATA[AnimationState::WIZARD_WALK_W]=pl_wizard_walk_w; |
||||||
|
Animate2D::FrameSequence pl_wizard_walk_n{0.2}; |
||||||
|
pl_wizard_walk_n.AddFrame({&game->GFX_Wizard_Sheet,{vi2d{0,1}*24,{24,24}}}); |
||||||
|
pl_wizard_walk_n.AddFrame({&game->GFX_Wizard_Sheet,{vi2d{1,1}*24,{24,24}}}); |
||||||
|
pl_wizard_walk_n.AddFrame({&game->GFX_Wizard_Sheet,{vi2d{0,1}*24,{24,24}}}); |
||||||
|
pl_wizard_walk_n.AddFrame({&game->GFX_Wizard_Sheet,{vi2d{2,1}*24,{24,24}}}); |
||||||
|
ANIMATION_DATA[AnimationState::WIZARD_WALK_N]=pl_wizard_walk_n; |
||||||
|
Animate2D::FrameSequence pl_wizard_idle_s; |
||||||
|
pl_wizard_idle_s.AddFrame({&game->GFX_Wizard_Sheet,{vi2d{0,0}*24,{24,24}}}); |
||||||
|
ANIMATION_DATA[AnimationState::WIZARD_IDLE_S]=pl_wizard_idle_s; |
||||||
|
Animate2D::FrameSequence pl_wizard_idle_e; |
||||||
|
pl_wizard_idle_e.AddFrame({&game->GFX_Wizard_Sheet,{vi2d{0,3}*24,{24,24}}}); |
||||||
|
ANIMATION_DATA[AnimationState::WIZARD_IDLE_E]=pl_wizard_idle_e; |
||||||
|
Animate2D::FrameSequence pl_wizard_idle_w; |
||||||
|
pl_wizard_idle_w.AddFrame({&game->GFX_Wizard_Sheet,{vi2d{0,2}*24,{24,24}}}); |
||||||
|
ANIMATION_DATA[AnimationState::WIZARD_IDLE_W]=pl_wizard_idle_w; |
||||||
|
Animate2D::FrameSequence pl_wizard_idle_n; |
||||||
|
pl_wizard_idle_n.AddFrame({&game->GFX_Wizard_Sheet,{vi2d{0,1}*24,{24,24}}}); |
||||||
|
ANIMATION_DATA[AnimationState::WIZARD_IDLE_N]=pl_wizard_idle_n; |
||||||
|
Animate2D::FrameSequence pl_wizard_idle_attack_s; |
||||||
|
pl_wizard_idle_attack_s.AddFrame({&game->GFX_Wizard_Sheet,{vi2d{4,0}*24,{24,24}}}); |
||||||
|
ANIMATION_DATA[AnimationState::WIZARD_IDLE_ATTACK_S]=pl_wizard_idle_attack_s; |
||||||
|
Animate2D::FrameSequence pl_wizard_idle_attack_e; |
||||||
|
pl_wizard_idle_attack_e.AddFrame({&game->GFX_Wizard_Sheet,{vi2d{4,3}*24,{24,24}}}); |
||||||
|
ANIMATION_DATA[AnimationState::WIZARD_IDLE_ATTACK_E]=pl_wizard_idle_attack_e; |
||||||
|
Animate2D::FrameSequence pl_wizard_idle_attack_w; |
||||||
|
pl_wizard_idle_attack_w.AddFrame({&game->GFX_Wizard_Sheet,{vi2d{4,2}*24,{24,24}}}); |
||||||
|
ANIMATION_DATA[AnimationState::WIZARD_IDLE_ATTACK_W]=pl_wizard_idle_attack_w; |
||||||
|
Animate2D::FrameSequence pl_wizard_idle_attack_n; |
||||||
|
pl_wizard_idle_attack_n.AddFrame({&game->GFX_Wizard_Sheet,{vi2d{4,1}*24,{24,24}}}); |
||||||
|
ANIMATION_DATA[AnimationState::WIZARD_IDLE_ATTACK_N]=pl_wizard_idle_attack_n; |
||||||
|
Animate2D::FrameSequence pl_wizard_attack_s(0.2); |
||||||
|
for(int i=0;i<3;i++){ |
||||||
|
pl_wizard_attack_s.AddFrame({&game->GFX_Wizard_Sheet,{vi2d{4+i,0}*24,{24,24}}}); |
||||||
|
if(i==1){ |
||||||
|
pl_wizard_attack_s.AddFrame({&game->GFX_Wizard_Sheet,{vi2d{4,0}*24,{24,24}}}); |
||||||
|
} |
||||||
|
} |
||||||
|
ANIMATION_DATA[AnimationState::WIZARD_ATTACK_S]=pl_wizard_attack_s; |
||||||
|
Animate2D::FrameSequence pl_wizard_attack_e(0.2); |
||||||
|
for(int i=0;i<3;i++){ |
||||||
|
pl_wizard_attack_e.AddFrame({&game->GFX_Wizard_Sheet,{vi2d{4+i,3}*24,{24,24}}}); |
||||||
|
if(i==1){ |
||||||
|
pl_wizard_attack_e.AddFrame({&game->GFX_Wizard_Sheet,{vi2d{4,3}*24,{24,24}}}); |
||||||
|
} |
||||||
|
} |
||||||
|
ANIMATION_DATA[AnimationState::WIZARD_ATTACK_E]=pl_wizard_attack_e; |
||||||
|
Animate2D::FrameSequence pl_wizard_attack_w(0.2); |
||||||
|
for(int i=0;i<3;i++){ |
||||||
|
pl_wizard_attack_w.AddFrame({&game->GFX_Wizard_Sheet,{vi2d{4+i,2}*24,{24,24}}}); |
||||||
|
if(i==1){ |
||||||
|
pl_wizard_attack_w.AddFrame({&game->GFX_Wizard_Sheet,{vi2d{4,2}*24,{24,24}}}); |
||||||
|
} |
||||||
|
} |
||||||
|
ANIMATION_DATA[AnimationState::WIZARD_ATTACK_W]=pl_wizard_attack_w; |
||||||
|
Animate2D::FrameSequence pl_wizard_attack_n(0.2); |
||||||
|
for(int i=0;i<3;i++){ |
||||||
|
pl_wizard_attack_n.AddFrame({&game->GFX_Wizard_Sheet,{vi2d{4+i,1}*24,{24,24}}}); |
||||||
|
if(i==1){ |
||||||
|
pl_wizard_attack_n.AddFrame({&game->GFX_Wizard_Sheet,{vi2d{4,1}*24,{24,24}}}); |
||||||
|
} |
||||||
|
} |
||||||
|
ANIMATION_DATA[AnimationState::WIZARD_ATTACK_N]=pl_wizard_attack_n; |
||||||
|
|
||||||
|
//Load slime animations.
|
||||||
|
for(int slime=0;slime<4;slime++){ |
||||||
|
for(int state=0;state<5;state++){ |
||||||
|
Animate2D::FrameSequence anim; |
||||||
|
if(state==4){//These are death animations.
|
||||||
|
anim=Animate2D::FrameSequence(0.1f,Animate2D::Style::OneShot); |
||||||
|
} |
||||||
|
if(state==2){//These are death animations.
|
||||||
|
anim=Animate2D::FrameSequence(0.06f); |
||||||
|
} |
||||||
|
for (int frame=0;frame<10;frame++){ |
||||||
|
anim.AddFrame({&game->GFX_Slime_Sheet,{vi2d{frame,state+5*slime}*24,{24,24}}}); |
||||||
|
} |
||||||
|
ANIMATION_DATA[AnimationState(AnimationState::GREEN_SLIME_IDLE+state+slime*5)]=anim; |
||||||
|
} |
||||||
|
} |
||||||
|
Animate2D::FrameSequence effect_groundslam_back(0.02f,Animate2D::Style::OneShot),effect_groundslam_front(0.02f,Animate2D::Style::OneShot); |
||||||
|
for(int i=0;i<5;i++){ |
||||||
|
effect_groundslam_back.AddFrame({&game->GFX_Effect_GroundSlam_Back,{{i*64,0},{64,64}}}); |
||||||
|
effect_groundslam_front.AddFrame({&game->GFX_Effect_GroundSlam_Front,{{i*64,0},{64,64}}}); |
||||||
|
} |
||||||
|
ANIMATION_DATA[AnimationState::GROUND_SLAM_ATTACK_BACK]=effect_groundslam_back; |
||||||
|
ANIMATION_DATA[AnimationState::GROUND_SLAM_ATTACK_FRONT]=effect_groundslam_front; |
||||||
|
Animate2D::FrameSequence battlecry_effect(0.02f,Animate2D::Style::OneShot); |
||||||
|
for(int i=0;i<5;i++){ |
||||||
|
battlecry_effect.AddFrame({&game->GFX_Battlecry_Effect,{{i*84,0},{84,84}}}); |
||||||
|
} |
||||||
|
ANIMATION_DATA[AnimationState::BATTLECRY_EFFECT]=battlecry_effect; |
||||||
|
Animate2D::FrameSequence sonicslash_effect(0.04f,Animate2D::Style::OneShot); |
||||||
|
for(int i=0;i<4;i++){ |
||||||
|
sonicslash_effect.AddFrame({&game->GFX_SonicSlash,{{i*60,0},{60,60}}}); |
||||||
|
} |
||||||
|
ANIMATION_DATA[AnimationState::SONICSLASH]=sonicslash_effect; |
||||||
|
Animate2D::FrameSequence energy_bolt; |
||||||
|
energy_bolt.AddFrame({&game->GFX_EnergyBolt,{{0,0},{24,24}}}); |
||||||
|
ANIMATION_DATA[AnimationState::ENERGY_BOLT]=energy_bolt; |
||||||
|
|
||||||
|
Animate2D::FrameSequence energy_particle; |
||||||
|
for(int i=0;i<3;i++){ |
||||||
|
energy_particle.AddFrame({&game->GFX_EnergyParticle,{{i*3,0},{3,3}}}); |
||||||
|
} |
||||||
|
ANIMATION_DATA[AnimationState::ENERGY_PARTICLE]=energy_particle; |
||||||
|
|
||||||
|
Animate2D::FrameSequence splash_animation(0.05); |
||||||
|
for(int i=0;i<5;i++){ |
||||||
|
splash_animation.AddFrame({&game->GFX_Splash_Effect,{{i*24,0},{24,24}}}); |
||||||
|
} |
||||||
|
ANIMATION_DATA[AnimationState::SPLASH_EFFECT]=splash_animation; |
||||||
|
|
||||||
|
Animate2D::FrameSequence dot_particle; |
||||||
|
dot_particle.AddFrame({&game->GFX_BulletCircle,{{0,0},{3,3}}}); |
||||||
|
ANIMATION_DATA[AnimationState::DOT_PARTICLE]=dot_particle; |
||||||
|
|
||||||
|
Animate2D::FrameSequence lightningbolt(0.03,Animate2D::Style::PingPong); |
||||||
|
for(int i=0;i<5;i++){ |
||||||
|
lightningbolt.AddFrame({&game->GFX_LightningBolt,{{i*24,0},{24,24}}}); |
||||||
|
} |
||||||
|
ANIMATION_DATA[AnimationState::LIGHTNING_BOLT]=lightningbolt; |
||||||
|
|
||||||
|
Animate2D::FrameSequence lightningboltpart1; |
||||||
|
lightningboltpart1.AddFrame({&game->GFX_LightningBoltParticle1,{{0,0},{5,5}}}); |
||||||
|
ANIMATION_DATA[AnimationState::LIGHTNING_BOLT_PARTICLE1]=lightningboltpart1; |
||||||
|
Animate2D::FrameSequence lightningboltpart2; |
||||||
|
lightningboltpart2.AddFrame({&game->GFX_LightningBoltParticle2,{{0,0},{5,5}}}); |
||||||
|
ANIMATION_DATA[AnimationState::LIGHTNING_BOLT_PARTICLE2]=lightningboltpart2; |
||||||
|
Animate2D::FrameSequence lightningboltpart3; |
||||||
|
lightningboltpart3.AddFrame({&game->GFX_LightningBoltParticle3,{{0,0},{5,5}}}); |
||||||
|
ANIMATION_DATA[AnimationState::LIGHTNING_BOLT_PARTICLE3]=lightningboltpart3; |
||||||
|
Animate2D::FrameSequence lightningboltpart4; |
||||||
|
lightningboltpart4.AddFrame({&game->GFX_LightningBoltParticle4,{{0,0},{5,5}}}); |
||||||
|
ANIMATION_DATA[AnimationState::LIGHTNING_BOLT_PARTICLE4]=lightningboltpart4; |
||||||
|
|
||||||
|
Animate2D::FrameSequence chainlightning; |
||||||
|
chainlightning.AddFrame({&game->GFX_ChainLightning,{{0,0},{1,9}}}); |
||||||
|
ANIMATION_DATA[AnimationState::CHAIN_LIGHTNING]=chainlightning; |
||||||
|
|
||||||
|
Animate2D::FrameSequence lightningsplash; |
||||||
|
for(int i=0;i<5;i++){ |
||||||
|
lightningsplash.AddFrame({&game->GFX_LightningSplash,{{i*24,0},{24,24}}}); |
||||||
|
} |
||||||
|
ANIMATION_DATA[AnimationState::LIGHTNING_SPLASH]=lightningsplash; |
||||||
|
} |
||||||
|
|
||||||
|
void sig::Animation::SetupPlayerAnimations(){ |
||||||
|
game->player.AddAnimation(AnimationState::WARRIOR_WALK_N); |
||||||
|
game->player.AddAnimation(AnimationState::WARRIOR_WALK_E); |
||||||
|
game->player.AddAnimation(AnimationState::WARRIOR_WALK_S); |
||||||
|
game->player.AddAnimation(AnimationState::WARRIOR_WALK_W); |
||||||
|
game->player.AddAnimation(AnimationState::WARRIOR_IDLE_N); |
||||||
|
game->player.AddAnimation(AnimationState::WARRIOR_IDLE_E); |
||||||
|
game->player.AddAnimation(AnimationState::WARRIOR_IDLE_S); |
||||||
|
game->player.AddAnimation(AnimationState::WARRIOR_IDLE_W); |
||||||
|
game->player.AddAnimation(AnimationState::WARRIOR_SWINGSWORD_E); |
||||||
|
game->player.AddAnimation(AnimationState::WARRIOR_SWINGSWORD_S); |
||||||
|
game->player.AddAnimation(AnimationState::WARRIOR_SWINGSWORD_N); |
||||||
|
game->player.AddAnimation(AnimationState::WARRIOR_SWINGSWORD_W); |
||||||
|
game->player.AddAnimation(AnimationState::WARRIOR_SWINGSONICSWORD_E); |
||||||
|
game->player.AddAnimation(AnimationState::WARRIOR_SWINGSONICSWORD_S); |
||||||
|
game->player.AddAnimation(AnimationState::WARRIOR_SWINGSONICSWORD_N); |
||||||
|
game->player.AddAnimation(AnimationState::WARRIOR_SWINGSONICSWORD_W); |
||||||
|
game->player.AddAnimation(AnimationState::RANGER_WALK_N); |
||||||
|
game->player.AddAnimation(AnimationState::RANGER_WALK_E); |
||||||
|
game->player.AddAnimation(AnimationState::RANGER_WALK_S); |
||||||
|
game->player.AddAnimation(AnimationState::RANGER_WALK_W); |
||||||
|
game->player.AddAnimation(AnimationState::RANGER_IDLE_N); |
||||||
|
game->player.AddAnimation(AnimationState::RANGER_IDLE_E); |
||||||
|
game->player.AddAnimation(AnimationState::RANGER_IDLE_S); |
||||||
|
game->player.AddAnimation(AnimationState::RANGER_IDLE_W); |
||||||
|
game->player.AddAnimation(AnimationState::WIZARD_WALK_N); |
||||||
|
game->player.AddAnimation(AnimationState::WIZARD_WALK_E); |
||||||
|
game->player.AddAnimation(AnimationState::WIZARD_WALK_S); |
||||||
|
game->player.AddAnimation(AnimationState::WIZARD_WALK_W); |
||||||
|
game->player.AddAnimation(AnimationState::WIZARD_IDLE_N); |
||||||
|
game->player.AddAnimation(AnimationState::WIZARD_IDLE_E); |
||||||
|
game->player.AddAnimation(AnimationState::WIZARD_IDLE_S); |
||||||
|
game->player.AddAnimation(AnimationState::WIZARD_IDLE_W); |
||||||
|
game->player.AddAnimation(AnimationState::WIZARD_IDLE_ATTACK_N); |
||||||
|
game->player.AddAnimation(AnimationState::WIZARD_IDLE_ATTACK_E); |
||||||
|
game->player.AddAnimation(AnimationState::WIZARD_IDLE_ATTACK_S); |
||||||
|
game->player.AddAnimation(AnimationState::WIZARD_IDLE_ATTACK_W); |
||||||
|
game->player.AddAnimation(AnimationState::WIZARD_ATTACK_N); |
||||||
|
game->player.AddAnimation(AnimationState::WIZARD_ATTACK_E); |
||||||
|
game->player.AddAnimation(AnimationState::WIZARD_ATTACK_S); |
||||||
|
game->player.AddAnimation(AnimationState::WIZARD_ATTACK_W); |
||||||
|
} |
@ -0,0 +1,18 @@ |
|||||||
|
#include "Emitter.h" |
||||||
|
|
||||||
|
std::vector<std::unique_ptr<Emitter>>EMITTER_LIST; |
||||||
|
|
||||||
|
Emitter::Emitter(float frequency,float timer) |
||||||
|
:frequency(frequency),timer(timer){} |
||||||
|
|
||||||
|
bool Emitter::Update(float fElapsedTime){ |
||||||
|
lastEmit=std::max(lastEmit-fElapsedTime,0.f); |
||||||
|
if(lastEmit==0){ |
||||||
|
lastEmit=frequency; |
||||||
|
Emit(); |
||||||
|
} |
||||||
|
timer-=fElapsedTime; |
||||||
|
if(timer<0){ |
||||||
|
return false; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,20 @@ |
|||||||
|
#include "olcPixelGameEngine.h" |
||||||
|
#pragma once |
||||||
|
|
||||||
|
struct Emitter{ |
||||||
|
float frequency; |
||||||
|
float timer; |
||||||
|
float lastEmit=0; |
||||||
|
Emitter(float frequency,float timer); |
||||||
|
bool Update(float fElapsedTime); |
||||||
|
virtual void Emit()=0; |
||||||
|
}; |
||||||
|
|
||||||
|
class LightningBoltEmitter:public Emitter{ |
||||||
|
vf2d startPos,endPos; |
||||||
|
bool upperLevel; |
||||||
|
void DrawLightningBolt(); |
||||||
|
void Emit()override; |
||||||
|
public: |
||||||
|
LightningBoltEmitter(vf2d startPos,vf2d endPos,float frequency,float timer,bool upperLevel); |
||||||
|
}; |
@ -0,0 +1,64 @@ |
|||||||
|
#include "BulletTypes.h" |
||||||
|
#include "Effect.h" |
||||||
|
#include "Crawler.h" |
||||||
|
#include "DEFINES.h" |
||||||
|
#include "Emitter.h" |
||||||
|
#include "utils.h" |
||||||
|
|
||||||
|
INCLUDE_game |
||||||
|
INCLUDE_MONSTER_LIST |
||||||
|
INCLUDE_EMITTER_LIST |
||||||
|
|
||||||
|
LightningBolt::LightningBolt(vf2d pos,vf2d vel,float radius,int damage,bool upperLevel,bool friendly,Pixel col) |
||||||
|
:Bullet(pos,vel,radius,damage,AnimationState::LIGHTNING_BOLT,upperLevel,false,INFINITE,true,friendly,col){} |
||||||
|
|
||||||
|
void LightningBolt::Update(float fElapsedTime){ |
||||||
|
lastParticleSpawn=std::max(0.f,lastParticleSpawn-fElapsedTime); |
||||||
|
if(lastParticleSpawn==0){ |
||||||
|
lastParticleSpawn=0.01; |
||||||
|
uint8_t brightness=uint8_t(util::random(100)+150); |
||||||
|
switch(rand()%4){ |
||||||
|
case 0:{ |
||||||
|
game->AddEffect(Effect(pos+vf2d{util::random(12)-6,util::random(12)-6},util::random(0.1),AnimationState::LIGHTNING_BOLT_PARTICLE1,upperLevel,util::random(0.5)+1,0.1,vel*(util::random(0.1)+0.9),{brightness,brightness,brightness})); |
||||||
|
}break; |
||||||
|
case 1:{ |
||||||
|
game->AddEffect(Effect(pos+vf2d{util::random(12)-6,util::random(12)-6},util::random(0.1),AnimationState::LIGHTNING_BOLT_PARTICLE2,upperLevel,util::random(0.5)+1,0.1,vel*(util::random(0.1)+0.9),{brightness,brightness,brightness})); |
||||||
|
}break; |
||||||
|
case 2:{ |
||||||
|
game->AddEffect(Effect(pos+vf2d{util::random(12)-6,util::random(12)-6},util::random(0.1),AnimationState::LIGHTNING_BOLT_PARTICLE3,upperLevel,util::random(0.5)+1,0.1,vel*(util::random(0.1)+0.9),{brightness,brightness,brightness})); |
||||||
|
}break; |
||||||
|
case 3:{ |
||||||
|
game->AddEffect(Effect(pos+vf2d{util::random(12)-6,util::random(12)-6},util::random(0.1),AnimationState::LIGHTNING_BOLT_PARTICLE4,upperLevel,util::random(0.5)+1,0.1,vel*(util::random(0.1)+0.9),{brightness,brightness,brightness})); |
||||||
|
}break; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
bool LightningBolt::PlayerHit(Player& player) |
||||||
|
{ |
||||||
|
deactivated=true; |
||||||
|
fadeOutTime=0.2f; |
||||||
|
game->AddEffect(Effect(player.GetPos(),0.3,AnimationState::LIGHTNING_SPLASH,upperLevel,player.GetSizeMult(),0.25,{},WHITE,util::random(PI))); |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
bool LightningBolt::MonsterHit(Monster& monster) |
||||||
|
{ |
||||||
|
deactivated=true; |
||||||
|
fadeOutTime=0.2f; |
||||||
|
game->AddEffect(Effect(monster.GetPos(),0.3,AnimationState::LIGHTNING_SPLASH,upperLevel,monster.GetSizeMult(),0.25,{},WHITE,util::random(PI))); |
||||||
|
int targetsHit=0; |
||||||
|
for(Monster&m:MONSTER_LIST){ |
||||||
|
if(&m==&monster||monster.OnUpperLevel()!=m.OnUpperLevel())continue; |
||||||
|
geom2d::line<float>lineToTarget=geom2d::line<float>(monster.GetPos(),m.GetPos()); |
||||||
|
float dist=lineToTarget.length(); |
||||||
|
if(dist<=72){ |
||||||
|
m.Hurt(game->GetPlayer().GetAttack()*2); |
||||||
|
EMITTER_LIST.push_back(std::make_unique<LightningBoltEmitter>(LightningBoltEmitter(monster.GetPos(),m.GetPos(),0.05,0.25,upperLevel))); |
||||||
|
game->AddEffect(Effect(m.GetPos(),0.5,AnimationState::LIGHTNING_SPLASH,upperLevel,monster.GetSizeMult(),0.25,{},WHITE,util::random(PI))); |
||||||
|
targetsHit++; |
||||||
|
} |
||||||
|
if(targetsHit>=2)break; |
||||||
|
} |
||||||
|
return false; |
||||||
|
} |
@ -0,0 +1,38 @@ |
|||||||
|
#include "Emitter.h" |
||||||
|
#include "olcUTIL_Geometry2D.h" |
||||||
|
#include "utils.h" |
||||||
|
#include "Crawler.h" |
||||||
|
#include "DEFINES.h" |
||||||
|
|
||||||
|
INCLUDE_game |
||||||
|
|
||||||
|
LightningBoltEmitter::LightningBoltEmitter(vf2d startPos,vf2d endPos,float frequency,float timer,bool upperLevel) |
||||||
|
:startPos(startPos),endPos(endPos),Emitter(frequency,timer),upperLevel(upperLevel){} |
||||||
|
|
||||||
|
|
||||||
|
void LightningBoltEmitter::Emit(){ |
||||||
|
DrawLightningBolt(); |
||||||
|
} |
||||||
|
|
||||||
|
void LightningBoltEmitter::DrawLightningBolt(){ |
||||||
|
vf2d currentPos=startPos; |
||||||
|
const int MAX_ITERATIONS=100; |
||||||
|
geom2d::line<float>lineToTarget=geom2d::line<float>(startPos,endPos); |
||||||
|
float targetAngle=atan2(lineToTarget.vector().y,lineToTarget.vector().x); |
||||||
|
float targetDist=lineToTarget.length()*util::random(0.5); |
||||||
|
targetAngle+=util::random((PI/2))-PI/4; |
||||||
|
geom2d::line<float>lightningLine=geom2d::line<float>(currentPos,currentPos+vf2d{cos(targetAngle)*targetDist,sin(targetAngle)*targetDist}); |
||||||
|
game->AddEffect(Effect(lightningLine.upoint(0),0,AnimationState::CHAIN_LIGHTNING,upperLevel,{lightningLine.length(),0.2},0.2,{},WHITE,targetAngle,0,true)); |
||||||
|
int iterations=1; |
||||||
|
currentPos+=vf2d{cos(targetAngle)*targetDist,sin(targetAngle)*targetDist}; |
||||||
|
while(iterations<MAX_ITERATIONS&&geom2d::line<float>(currentPos,endPos).length()>1){ |
||||||
|
geom2d::line<float>lineToTarget=geom2d::line<float>(currentPos,endPos); |
||||||
|
float targetAngle=atan2(lineToTarget.vector().y,lineToTarget.vector().x); |
||||||
|
float targetDist=lineToTarget.length()*util::random(0.5); |
||||||
|
targetAngle+=util::random((PI/2))-PI/4; |
||||||
|
geom2d::line<float>lightningLine=geom2d::line<float>(currentPos,currentPos+vf2d{cos(targetAngle)*targetDist,sin(targetAngle)*targetDist}); |
||||||
|
game->AddEffect(Effect(lightningLine.upoint(0),0,AnimationState::CHAIN_LIGHTNING,upperLevel,{lightningLine.length(),0.2},0.2,{},WHITE,targetAngle,0,true)); |
||||||
|
currentPos+=vf2d{cos(targetAngle)*targetDist,sin(targetAngle)*targetDist}; |
||||||
|
iterations++; |
||||||
|
} |
||||||
|
} |
After Width: | Height: | Size: 571 B |
After Width: | Height: | Size: 9.9 KiB |
After Width: | Height: | Size: 547 B |
After Width: | Height: | Size: 542 B |
After Width: | Height: | Size: 537 B |
After Width: | Height: | Size: 539 B |
After Width: | Height: | Size: 10 KiB |