Finished implementing Ground Slam effect, cooldown display, and range hit.
This commit is contained in:
parent
7e543a3021
commit
3aebde6287
@ -61,6 +61,7 @@ bool Crawler::OnUserUpdate(float fElapsedTime){
|
|||||||
}
|
}
|
||||||
UpdateCamera(fElapsedTime);
|
UpdateCamera(fElapsedTime);
|
||||||
RenderWorld(fElapsedTime);
|
RenderWorld(fElapsedTime);
|
||||||
|
RenderHud();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -125,7 +126,7 @@ void Crawler::InitializeAnimations(){
|
|||||||
|
|
||||||
void Crawler::HandleUserInput(float fElapsedTime){
|
void Crawler::HandleUserInput(float fElapsedTime){
|
||||||
bool setIdleAnimation=true;
|
bool setIdleAnimation=true;
|
||||||
if(GetKey(SPACE).bPressed&&player.GetState()==State::NORMAL){
|
if(GetKey(SPACE).bPressed&&player.GetState()==State::NORMAL&&player.GetGroundSlamCooldown()==0){
|
||||||
player.Spin(Player::GROUND_SLAM_SPIN_TIME,14*PI);
|
player.Spin(Player::GROUND_SLAM_SPIN_TIME,14*PI);
|
||||||
}
|
}
|
||||||
if(GetKey(RIGHT).bHeld){
|
if(GetKey(RIGHT).bHeld){
|
||||||
@ -273,6 +274,13 @@ void Crawler::UpdateEffects(float fElapsedTime){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
void Crawler::HurtEnemies(vf2d pos,float radius,int damage){
|
||||||
|
for(Monster&m:MONSTER_LIST){
|
||||||
|
if(geom2d::overlaps(geom2d::circle(pos,radius),geom2d::circle(m.GetPos(),12*m.GetSizeMult()))){
|
||||||
|
m.Hurt(damage);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void Crawler::RenderWorld(float fElapsedTime){
|
void Crawler::RenderWorld(float fElapsedTime){
|
||||||
Clear({100,180,100});
|
Clear({100,180,100});
|
||||||
@ -320,6 +328,16 @@ void Crawler::RenderWorld(float fElapsedTime){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Crawler::RenderHud(){
|
||||||
|
if(player.GetGroundSlamCooldown()>0){
|
||||||
|
FillRectDecal({10,ScreenHeight()-22.f},{64,6},BLACK);
|
||||||
|
FillRectDecal({11,ScreenHeight()-21.f},{62,4},DARK_GREY);
|
||||||
|
GradientFillRectDecal({10,ScreenHeight()-22.f},{(player.GetGroundSlamCooldown()/Player::GROUND_SLAM_COOLDOWN)*64,6},VERY_DARK_RED,VERY_DARK_RED,DARK_RED,DARK_RED);
|
||||||
|
DrawRotatedStringPropDecal(vf2d{8,ScreenHeight()-20.f}+vf2d{1,1},"G R O U N D S L A M",-PI/64,{0,0},BLACK,{0.4,0.4});
|
||||||
|
DrawRotatedStringPropDecal({8,ScreenHeight()-20.f},"G R O U N D S L A M",-PI/64,{0,0},WHITE,{0.4,0.4});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void Crawler::AddEffect(Effect foreground,Effect background){
|
void Crawler::AddEffect(Effect foreground,Effect background){
|
||||||
foregroundEffects.push_back(foreground);
|
foregroundEffects.push_back(foreground);
|
||||||
backgroundEffects.push_back(background);
|
backgroundEffects.push_back(background);
|
||||||
|
|||||||
@ -29,5 +29,7 @@ public:
|
|||||||
void UpdateCamera(float fElapsedTime);
|
void UpdateCamera(float fElapsedTime);
|
||||||
void UpdateEffects(float fElapsedTime);
|
void UpdateEffects(float fElapsedTime);
|
||||||
void RenderWorld(float fElapsedTime);
|
void RenderWorld(float fElapsedTime);
|
||||||
|
void RenderHud();
|
||||||
void AddEffect(Effect foreground,Effect background);
|
void AddEffect(Effect foreground,Effect background);
|
||||||
|
void HurtEnemies(vf2d pos,float radius,int damage);
|
||||||
};
|
};
|
||||||
@ -5,8 +5,8 @@
|
|||||||
INCLUDE_ANIMATION_DATA
|
INCLUDE_ANIMATION_DATA
|
||||||
INCLUDE_game
|
INCLUDE_game
|
||||||
|
|
||||||
Effect::Effect(vf2d pos,float lifetime,AnimationState animation,float fadeout)
|
Effect::Effect(vf2d pos,float lifetime,AnimationState animation,float size,float fadeout)
|
||||||
:pos(pos),lifetime(lifetime),fadeout(fadeout),original_fadeoutTime(fadeout){
|
:pos(pos),lifetime(lifetime),size(size),fadeout(fadeout),original_fadeoutTime(fadeout){
|
||||||
this->animation.AddState(animation,ANIMATION_DATA[animation]);
|
this->animation.AddState(animation,ANIMATION_DATA[animation]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -7,7 +7,8 @@ struct Effect{
|
|||||||
vf2d pos;
|
vf2d pos;
|
||||||
float lifetime;
|
float lifetime;
|
||||||
float fadeout;
|
float fadeout;
|
||||||
Effect(vf2d pos,float lifetime,AnimationState animation,float fadeout=0.0f);
|
float size;
|
||||||
|
Effect(vf2d pos,float lifetime,AnimationState animation,float size=1.0f,float fadeout=0.0f);
|
||||||
bool Update(float fElapsedTime);
|
bool Update(float fElapsedTime);
|
||||||
Animate2D::Frame GetFrame();
|
Animate2D::Frame GetFrame();
|
||||||
void Draw();
|
void Draw();
|
||||||
|
|||||||
@ -98,12 +98,14 @@ AnimationState Monster::GetDeathAnimationName(){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
void Monster::Hurt(int damage){
|
bool Monster::Hurt(int damage){
|
||||||
|
if(hp<=0) return false;
|
||||||
hp=std::max(0,hp-damage);
|
hp=std::max(0,hp-damage);
|
||||||
DAMAGENUMBER_LIST.push_back(DamageNumber(pos,damage));
|
DAMAGENUMBER_LIST.push_back(DamageNumber(pos,damage));
|
||||||
if(hp<=0){
|
if(hp<=0){
|
||||||
animation.ChangeState(internal_animState,GetDeathAnimationName());
|
animation.ChangeState(internal_animState,GetDeathAnimationName());
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Monster::IsAlive(){
|
bool Monster::IsAlive(){
|
||||||
|
|||||||
@ -64,7 +64,8 @@ struct Monster{
|
|||||||
Animate2D::Frame GetFrame();
|
Animate2D::Frame GetFrame();
|
||||||
void UpdateAnimation(AnimationState state);
|
void UpdateAnimation(AnimationState state);
|
||||||
bool Update(float fElapsedTime);
|
bool Update(float fElapsedTime);
|
||||||
void Hurt(int damage);
|
//Returns true when damage is actually dealt (there is a death check here.)
|
||||||
|
bool Hurt(int damage);
|
||||||
bool IsAlive();
|
bool IsAlive();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -12,6 +12,7 @@ INCLUDE_DAMAGENUMBER_LIST
|
|||||||
INCLUDE_game
|
INCLUDE_game
|
||||||
|
|
||||||
const float Player::GROUND_SLAM_SPIN_TIME=0.6f;
|
const float Player::GROUND_SLAM_SPIN_TIME=0.6f;
|
||||||
|
const float Player::GROUND_SLAM_COOLDOWN=20;
|
||||||
|
|
||||||
Player::Player(){
|
Player::Player(){
|
||||||
}
|
}
|
||||||
@ -116,7 +117,8 @@ void Player::Update(float fElapsedTime){
|
|||||||
state=NORMAL;
|
state=NORMAL;
|
||||||
spin_angle=0;
|
spin_angle=0;
|
||||||
z=0;
|
z=0;
|
||||||
game->AddEffect(Effect{GetPos(),0.5,AnimationState::GROUND_SLAM_ATTACK_FRONT,0.6f},Effect{GetPos(),0.5,AnimationState::GROUND_SLAM_ATTACK_BACK,0.6f});
|
game->HurtEnemies(pos,3*12,atk*2.5);
|
||||||
|
game->AddEffect(Effect{GetPos(),0.5,AnimationState::GROUND_SLAM_ATTACK_FRONT,1.33f,0.6f},Effect{GetPos(),0.5,AnimationState::GROUND_SLAM_ATTACK_BACK,1.33f,0.6f});
|
||||||
}
|
}
|
||||||
if(lastAnimationFlip>0){
|
if(lastAnimationFlip>0){
|
||||||
lastAnimationFlip=std::max(0.f,lastAnimationFlip-fElapsedTime);
|
lastAnimationFlip=std::max(0.f,lastAnimationFlip-fElapsedTime);
|
||||||
@ -128,13 +130,15 @@ void Player::Update(float fElapsedTime){
|
|||||||
[[fallthrough]];
|
[[fallthrough]];
|
||||||
}
|
}
|
||||||
animation.UpdateState(internal_animState,fElapsedTime);
|
animation.UpdateState(internal_animState,fElapsedTime);
|
||||||
|
groundSlamCooldown=std::max(0.f,groundSlamCooldown-fElapsedTime);
|
||||||
if(attack_cooldown_timer==0&&game->GetMouse(0).bHeld){
|
if(attack_cooldown_timer==0&&game->GetMouse(0).bHeld){
|
||||||
bool attack=false;
|
bool attack=false;
|
||||||
for(Monster&m:MONSTER_LIST){
|
for(Monster&m:MONSTER_LIST){
|
||||||
if(m.IsAlive()&&geom2d::overlaps(geom2d::circle<float>(pos-vf2d{size*12,size*12},attack_range*size*12),geom2d::circle<float>(m.GetPos()-vf2d{m.GetSizeMult()*12,m.GetSizeMult()*12},m.GetSizeMult()*12))){
|
if(geom2d::overlaps(geom2d::circle<float>(pos-vf2d{size*12,size*12},attack_range*size*12),geom2d::circle<float>(m.GetPos()-vf2d{m.GetSizeMult()*12,m.GetSizeMult()*12},m.GetSizeMult()*12))){
|
||||||
m.Hurt(atk);
|
if(m.Hurt(atk)){
|
||||||
attack=true;
|
attack=true;
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(attack){
|
if(attack){
|
||||||
@ -184,9 +188,14 @@ void Player::Moved(){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
float Player::GetGroundSlamCooldown(){
|
||||||
|
return groundSlamCooldown;
|
||||||
|
}
|
||||||
|
|
||||||
void Player::Spin(float duration,float spinSpd){
|
void Player::Spin(float duration,float spinSpd){
|
||||||
state=State::SPIN;
|
state=State::SPIN;
|
||||||
spin_attack_timer=duration;
|
spin_attack_timer=duration;
|
||||||
spin_spd=spinSpd;
|
spin_spd=spinSpd;
|
||||||
spin_angle=0;
|
spin_angle=0;
|
||||||
|
groundSlamCooldown=GROUND_SLAM_COOLDOWN;
|
||||||
}
|
}
|
||||||
@ -19,6 +19,7 @@ private:
|
|||||||
float spin_spd=0;
|
float spin_spd=0;
|
||||||
float spin_angle=0;
|
float spin_angle=0;
|
||||||
float lastAnimationFlip=0;
|
float lastAnimationFlip=0;
|
||||||
|
float groundSlamCooldown=0;
|
||||||
State state;
|
State state;
|
||||||
Animate2D::Animation<AnimationState>animation;
|
Animate2D::Animation<AnimationState>animation;
|
||||||
Animate2D::AnimationState internal_animState;
|
Animate2D::AnimationState internal_animState;
|
||||||
@ -28,6 +29,7 @@ public:
|
|||||||
Player();
|
Player();
|
||||||
Player(vf2d pos);
|
Player(vf2d pos);
|
||||||
const static float GROUND_SLAM_SPIN_TIME;
|
const static float GROUND_SLAM_SPIN_TIME;
|
||||||
|
const static float GROUND_SLAM_COOLDOWN;
|
||||||
void SetX(float x);
|
void SetX(float x);
|
||||||
void SetY(float y);
|
void SetY(float y);
|
||||||
void SetZ(float z);
|
void SetZ(float z);
|
||||||
@ -57,6 +59,8 @@ public:
|
|||||||
void SetLastReleasedMovementKey(Key k);
|
void SetLastReleasedMovementKey(Key k);
|
||||||
Key GetLastReleasedMovementKey();
|
Key GetLastReleasedMovementKey();
|
||||||
|
|
||||||
|
float GetGroundSlamCooldown();
|
||||||
|
|
||||||
//Triggers when the player has moved.
|
//Triggers when the player has moved.
|
||||||
void Moved();
|
void Moved();
|
||||||
};
|
};
|
||||||
Loading…
x
Reference in New Issue
Block a user