|
|
@ -5,15 +5,12 @@ |
|
|
|
#include "olcPGEX_TransformedView.h" |
|
|
|
#include "olcPGEX_TransformedView.h" |
|
|
|
#include "olcUTIL_Animate2D.h" |
|
|
|
#include "olcUTIL_Animate2D.h" |
|
|
|
#include "Monster.h" |
|
|
|
#include "Monster.h" |
|
|
|
|
|
|
|
#include "Animation.h" |
|
|
|
|
|
|
|
|
|
|
|
const vi2d WINDOW_SIZE={24*8,24*8}; |
|
|
|
const vi2d WINDOW_SIZE={24*8,24*8}; |
|
|
|
|
|
|
|
|
|
|
|
extern std::map<MonsterName,MonsterData>MONSTER_DATA; |
|
|
|
extern std::map<MonsterName,MonsterData>MONSTER_DATA; |
|
|
|
|
|
|
|
std::map<AnimationState,Animate2D::FrameSequence>ANIMATION_DATA; |
|
|
|
enum AnimationState{ |
|
|
|
|
|
|
|
WALK_S,WALK_E,WALK_N,WALK_W, |
|
|
|
|
|
|
|
IDLE_S,IDLE_E,IDLE_N,IDLE_W |
|
|
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
struct Player{ |
|
|
|
struct Player{ |
|
|
|
private: |
|
|
|
private: |
|
|
@ -72,8 +69,8 @@ struct Player{ |
|
|
|
void Update(float fElapsedTime){ |
|
|
|
void Update(float fElapsedTime){ |
|
|
|
animation.UpdateState(internal_animState,fElapsedTime); |
|
|
|
animation.UpdateState(internal_animState,fElapsedTime); |
|
|
|
} |
|
|
|
} |
|
|
|
void AddAnimation(AnimationState state,Animate2D::FrameSequence frame){ |
|
|
|
void AddAnimation(AnimationState state){ |
|
|
|
animation.AddState(state,frame); |
|
|
|
animation.AddState(state,ANIMATION_DATA[state]); |
|
|
|
}; |
|
|
|
}; |
|
|
|
void UpdateAnimation(AnimationState animState){ |
|
|
|
void UpdateAnimation(AnimationState animState){ |
|
|
|
animation.ChangeState(internal_animState,animState); |
|
|
|
animation.ChangeState(internal_animState,animState); |
|
|
@ -119,61 +116,72 @@ public: |
|
|
|
GFX_Pl_sheet.Load("assets/nico-warrior.png"); |
|
|
|
GFX_Pl_sheet.Load("assets/nico-warrior.png"); |
|
|
|
|
|
|
|
|
|
|
|
//Animations
|
|
|
|
//Animations
|
|
|
|
|
|
|
|
InitializeAnimations(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
player.AddAnimation(AnimationState::WALK_N); |
|
|
|
|
|
|
|
player.AddAnimation(AnimationState::WALK_E); |
|
|
|
|
|
|
|
player.AddAnimation(AnimationState::WALK_S); |
|
|
|
|
|
|
|
player.AddAnimation(AnimationState::WALK_W); |
|
|
|
|
|
|
|
player.AddAnimation(AnimationState::IDLE_N); |
|
|
|
|
|
|
|
player.AddAnimation(AnimationState::IDLE_E); |
|
|
|
|
|
|
|
player.AddAnimation(AnimationState::IDLE_S); |
|
|
|
|
|
|
|
player.AddAnimation(AnimationState::IDLE_W); |
|
|
|
|
|
|
|
view=TileTransformedView{GetScreenSize(),{1,1}}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
player.SetPos({4*24,4*24}); |
|
|
|
|
|
|
|
player.UpdateAnimation(AnimationState::IDLE_S); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
std::cout<<MONSTER_DATA[SLIME_BLUE].GetHealth()<<std::endl; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return true; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bool OnUserUpdate(float fElapsedTime) override |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
HandleUserInput(fElapsedTime); |
|
|
|
|
|
|
|
player.Update(fElapsedTime); |
|
|
|
|
|
|
|
UpdateCamera(fElapsedTime); |
|
|
|
|
|
|
|
RenderWorld(); |
|
|
|
|
|
|
|
return true; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void InitializeAnimations(){ |
|
|
|
Animate2D::FrameSequence pl_walk_s{0.2}; |
|
|
|
Animate2D::FrameSequence pl_walk_s{0.2}; |
|
|
|
pl_walk_s.AddFrame({&GFX_Pl_sheet,{vi2d{0,0}*24,{24,24}}}); |
|
|
|
pl_walk_s.AddFrame({&GFX_Pl_sheet,{vi2d{0,0}*24,{24,24}}}); |
|
|
|
pl_walk_s.AddFrame({&GFX_Pl_sheet,{vi2d{1,0}*24,{24,24}}}); |
|
|
|
pl_walk_s.AddFrame({&GFX_Pl_sheet,{vi2d{1,0}*24,{24,24}}}); |
|
|
|
pl_walk_s.AddFrame({&GFX_Pl_sheet,{vi2d{0,0}*24,{24,24}}}); |
|
|
|
pl_walk_s.AddFrame({&GFX_Pl_sheet,{vi2d{0,0}*24,{24,24}}}); |
|
|
|
pl_walk_s.AddFrame({&GFX_Pl_sheet,{vi2d{2,0}*24,{24,24}}}); |
|
|
|
pl_walk_s.AddFrame({&GFX_Pl_sheet,{vi2d{2,0}*24,{24,24}}}); |
|
|
|
|
|
|
|
ANIMATION_DATA[AnimationState::WALK_S]=pl_walk_s; |
|
|
|
Animate2D::FrameSequence pl_walk_e{0.2}; |
|
|
|
Animate2D::FrameSequence pl_walk_e{0.2}; |
|
|
|
pl_walk_e.AddFrame({&GFX_Pl_sheet,{vi2d{0,3}*24,{24,24}}}); |
|
|
|
pl_walk_e.AddFrame({&GFX_Pl_sheet,{vi2d{0,3}*24,{24,24}}}); |
|
|
|
pl_walk_e.AddFrame({&GFX_Pl_sheet,{vi2d{1,3}*24,{24,24}}}); |
|
|
|
pl_walk_e.AddFrame({&GFX_Pl_sheet,{vi2d{1,3}*24,{24,24}}}); |
|
|
|
pl_walk_e.AddFrame({&GFX_Pl_sheet,{vi2d{0,3}*24,{24,24}}}); |
|
|
|
pl_walk_e.AddFrame({&GFX_Pl_sheet,{vi2d{0,3}*24,{24,24}}}); |
|
|
|
pl_walk_e.AddFrame({&GFX_Pl_sheet,{vi2d{2,3}*24,{24,24}}}); |
|
|
|
pl_walk_e.AddFrame({&GFX_Pl_sheet,{vi2d{2,3}*24,{24,24}}}); |
|
|
|
|
|
|
|
ANIMATION_DATA[AnimationState::WALK_E]=pl_walk_e; |
|
|
|
Animate2D::FrameSequence pl_walk_w{0.2}; |
|
|
|
Animate2D::FrameSequence pl_walk_w{0.2}; |
|
|
|
pl_walk_w.AddFrame({&GFX_Pl_sheet,{vi2d{0,2}*24,{24,24}}}); |
|
|
|
pl_walk_w.AddFrame({&GFX_Pl_sheet,{vi2d{0,2}*24,{24,24}}}); |
|
|
|
pl_walk_w.AddFrame({&GFX_Pl_sheet,{vi2d{1,2}*24,{24,24}}}); |
|
|
|
pl_walk_w.AddFrame({&GFX_Pl_sheet,{vi2d{1,2}*24,{24,24}}}); |
|
|
|
pl_walk_w.AddFrame({&GFX_Pl_sheet,{vi2d{0,2}*24,{24,24}}}); |
|
|
|
pl_walk_w.AddFrame({&GFX_Pl_sheet,{vi2d{0,2}*24,{24,24}}}); |
|
|
|
pl_walk_w.AddFrame({&GFX_Pl_sheet,{vi2d{2,2}*24,{24,24}}}); |
|
|
|
pl_walk_w.AddFrame({&GFX_Pl_sheet,{vi2d{2,2}*24,{24,24}}}); |
|
|
|
|
|
|
|
ANIMATION_DATA[AnimationState::WALK_W]=pl_walk_w; |
|
|
|
Animate2D::FrameSequence pl_walk_n{0.2}; |
|
|
|
Animate2D::FrameSequence pl_walk_n{0.2}; |
|
|
|
pl_walk_n.AddFrame({&GFX_Pl_sheet,{vi2d{0,1}*24,{24,24}}}); |
|
|
|
pl_walk_n.AddFrame({&GFX_Pl_sheet,{vi2d{0,1}*24,{24,24}}}); |
|
|
|
pl_walk_n.AddFrame({&GFX_Pl_sheet,{vi2d{1,1}*24,{24,24}}}); |
|
|
|
pl_walk_n.AddFrame({&GFX_Pl_sheet,{vi2d{1,1}*24,{24,24}}}); |
|
|
|
pl_walk_n.AddFrame({&GFX_Pl_sheet,{vi2d{0,1}*24,{24,24}}}); |
|
|
|
pl_walk_n.AddFrame({&GFX_Pl_sheet,{vi2d{0,1}*24,{24,24}}}); |
|
|
|
pl_walk_n.AddFrame({&GFX_Pl_sheet,{vi2d{2,1}*24,{24,24}}}); |
|
|
|
pl_walk_n.AddFrame({&GFX_Pl_sheet,{vi2d{2,1}*24,{24,24}}}); |
|
|
|
|
|
|
|
ANIMATION_DATA[AnimationState::WALK_N]=pl_walk_n; |
|
|
|
Animate2D::FrameSequence pl_idle_s; |
|
|
|
Animate2D::FrameSequence pl_idle_s; |
|
|
|
pl_idle_s.AddFrame({&GFX_Pl_sheet,{vi2d{0,0}*24,{24,24}}}); |
|
|
|
pl_idle_s.AddFrame({&GFX_Pl_sheet,{vi2d{0,0}*24,{24,24}}}); |
|
|
|
|
|
|
|
ANIMATION_DATA[AnimationState::IDLE_S]=pl_idle_s; |
|
|
|
Animate2D::FrameSequence pl_idle_e; |
|
|
|
Animate2D::FrameSequence pl_idle_e; |
|
|
|
pl_idle_e.AddFrame({&GFX_Pl_sheet,{vi2d{0,3}*24,{24,24}}}); |
|
|
|
pl_idle_e.AddFrame({&GFX_Pl_sheet,{vi2d{0,3}*24,{24,24}}}); |
|
|
|
|
|
|
|
ANIMATION_DATA[AnimationState::IDLE_E]=pl_idle_e; |
|
|
|
Animate2D::FrameSequence pl_idle_w; |
|
|
|
Animate2D::FrameSequence pl_idle_w; |
|
|
|
pl_idle_w.AddFrame({&GFX_Pl_sheet,{vi2d{0,2}*24,{24,24}}}); |
|
|
|
pl_idle_w.AddFrame({&GFX_Pl_sheet,{vi2d{0,2}*24,{24,24}}}); |
|
|
|
|
|
|
|
ANIMATION_DATA[AnimationState::IDLE_W]=pl_idle_w; |
|
|
|
Animate2D::FrameSequence pl_idle_n; |
|
|
|
Animate2D::FrameSequence pl_idle_n; |
|
|
|
pl_idle_n.AddFrame({&GFX_Pl_sheet,{vi2d{0,1}*24,{24,24}}}); |
|
|
|
pl_idle_n.AddFrame({&GFX_Pl_sheet,{vi2d{0,1}*24,{24,24}}}); |
|
|
|
|
|
|
|
ANIMATION_DATA[AnimationState::IDLE_N]=pl_idle_n; |
|
|
|
|
|
|
|
|
|
|
|
player.AddAnimation(WALK_N,pl_walk_n); |
|
|
|
|
|
|
|
player.AddAnimation(WALK_E,pl_walk_e); |
|
|
|
|
|
|
|
player.AddAnimation(WALK_S,pl_walk_s); |
|
|
|
|
|
|
|
player.AddAnimation(WALK_W,pl_walk_w); |
|
|
|
|
|
|
|
player.AddAnimation(IDLE_N,pl_idle_n); |
|
|
|
|
|
|
|
player.AddAnimation(IDLE_E,pl_idle_e); |
|
|
|
|
|
|
|
player.AddAnimation(IDLE_S,pl_idle_s); |
|
|
|
|
|
|
|
player.AddAnimation(IDLE_W,pl_idle_w); |
|
|
|
|
|
|
|
view=TileTransformedView{GetScreenSize(),{1,1}}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
player.SetPos({4*24,4*24}); |
|
|
|
|
|
|
|
player.UpdateAnimation(IDLE_S); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
std::cout<<MONSTER_DATA[SLIME_BLUE].GetHealth()<<std::endl; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return true; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bool OnUserUpdate(float fElapsedTime) override |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
HandleUserInput(fElapsedTime); |
|
|
|
|
|
|
|
player.Update(fElapsedTime); |
|
|
|
|
|
|
|
UpdateCamera(fElapsedTime); |
|
|
|
|
|
|
|
RenderWorld(); |
|
|
|
|
|
|
|
return true; |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void HandleUserInput(float fElapsedTime){ |
|
|
|
void HandleUserInput(float fElapsedTime){ |
|
|
@ -184,7 +192,7 @@ public: |
|
|
|
} else { |
|
|
|
} else { |
|
|
|
player.SetX(WORLD_SIZE.x*24-12); |
|
|
|
player.SetX(WORLD_SIZE.x*24-12); |
|
|
|
} |
|
|
|
} |
|
|
|
player.UpdateAnimation(WALK_E); |
|
|
|
player.UpdateAnimation(AnimationState::WALK_E); |
|
|
|
setIdleAnimation=false; |
|
|
|
setIdleAnimation=false; |
|
|
|
} |
|
|
|
} |
|
|
|
if(GetKey(LEFT).bHeld){ |
|
|
|
if(GetKey(LEFT).bHeld){ |
|
|
@ -194,7 +202,7 @@ public: |
|
|
|
player.SetX(12); |
|
|
|
player.SetX(12); |
|
|
|
} |
|
|
|
} |
|
|
|
if(setIdleAnimation){ |
|
|
|
if(setIdleAnimation){ |
|
|
|
player.UpdateAnimation(WALK_W); |
|
|
|
player.UpdateAnimation(AnimationState::WALK_W); |
|
|
|
} |
|
|
|
} |
|
|
|
setIdleAnimation=false; |
|
|
|
setIdleAnimation=false; |
|
|
|
} |
|
|
|
} |
|
|
@ -205,7 +213,7 @@ public: |
|
|
|
player.SetY(12); |
|
|
|
player.SetY(12); |
|
|
|
} |
|
|
|
} |
|
|
|
if(setIdleAnimation){ |
|
|
|
if(setIdleAnimation){ |
|
|
|
player.UpdateAnimation(WALK_N); |
|
|
|
player.UpdateAnimation(AnimationState::WALK_N); |
|
|
|
} |
|
|
|
} |
|
|
|
setIdleAnimation=false; |
|
|
|
setIdleAnimation=false; |
|
|
|
} |
|
|
|
} |
|
|
@ -216,7 +224,7 @@ public: |
|
|
|
player.SetY(WORLD_SIZE.y*24-12); |
|
|
|
player.SetY(WORLD_SIZE.y*24-12); |
|
|
|
} |
|
|
|
} |
|
|
|
if(setIdleAnimation){ |
|
|
|
if(setIdleAnimation){ |
|
|
|
player.UpdateAnimation(WALK_S); |
|
|
|
player.UpdateAnimation(AnimationState::WALK_S); |
|
|
|
} |
|
|
|
} |
|
|
|
setIdleAnimation=false; |
|
|
|
setIdleAnimation=false; |
|
|
|
} |
|
|
|
} |
|
|
@ -224,68 +232,68 @@ public: |
|
|
|
if(GetKey(UP).bReleased){ |
|
|
|
if(GetKey(UP).bReleased){ |
|
|
|
player.SetLastReleasedMovementKey(UP); |
|
|
|
player.SetLastReleasedMovementKey(UP); |
|
|
|
if(GetKey(RIGHT).bHeld){ |
|
|
|
if(GetKey(RIGHT).bHeld){ |
|
|
|
player.UpdateAnimation(WALK_E); |
|
|
|
player.UpdateAnimation(AnimationState::WALK_E); |
|
|
|
} else |
|
|
|
} else |
|
|
|
if(GetKey(DOWN).bHeld){ |
|
|
|
if(GetKey(DOWN).bHeld){ |
|
|
|
player.UpdateAnimation(WALK_S); |
|
|
|
player.UpdateAnimation(AnimationState::WALK_S); |
|
|
|
} else |
|
|
|
} else |
|
|
|
if(GetKey(LEFT).bHeld){ |
|
|
|
if(GetKey(LEFT).bHeld){ |
|
|
|
player.UpdateAnimation(WALK_W); |
|
|
|
player.UpdateAnimation(AnimationState::WALK_W); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
if(GetKey(RIGHT).bReleased){ |
|
|
|
if(GetKey(RIGHT).bReleased){ |
|
|
|
player.SetLastReleasedMovementKey(RIGHT); |
|
|
|
player.SetLastReleasedMovementKey(RIGHT); |
|
|
|
if(GetKey(UP).bHeld){ |
|
|
|
if(GetKey(UP).bHeld){ |
|
|
|
player.UpdateAnimation(WALK_N); |
|
|
|
player.UpdateAnimation(AnimationState::WALK_N); |
|
|
|
} else |
|
|
|
} else |
|
|
|
if(GetKey(DOWN).bHeld){ |
|
|
|
if(GetKey(DOWN).bHeld){ |
|
|
|
player.UpdateAnimation(WALK_S); |
|
|
|
player.UpdateAnimation(AnimationState::WALK_S); |
|
|
|
} else |
|
|
|
} else |
|
|
|
if(GetKey(LEFT).bHeld){ |
|
|
|
if(GetKey(LEFT).bHeld){ |
|
|
|
player.UpdateAnimation(WALK_W); |
|
|
|
player.UpdateAnimation(AnimationState::WALK_W); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
if(GetKey(LEFT).bReleased){ |
|
|
|
if(GetKey(LEFT).bReleased){ |
|
|
|
player.SetLastReleasedMovementKey(LEFT); |
|
|
|
player.SetLastReleasedMovementKey(LEFT); |
|
|
|
if(GetKey(RIGHT).bHeld){ |
|
|
|
if(GetKey(RIGHT).bHeld){ |
|
|
|
player.UpdateAnimation(WALK_E); |
|
|
|
player.UpdateAnimation(AnimationState::WALK_E); |
|
|
|
} else |
|
|
|
} else |
|
|
|
if(GetKey(DOWN).bHeld){ |
|
|
|
if(GetKey(DOWN).bHeld){ |
|
|
|
player.UpdateAnimation(WALK_S); |
|
|
|
player.UpdateAnimation(AnimationState::WALK_S); |
|
|
|
} else |
|
|
|
} else |
|
|
|
if(GetKey(UP).bHeld){ |
|
|
|
if(GetKey(UP).bHeld){ |
|
|
|
player.UpdateAnimation(WALK_N); |
|
|
|
player.UpdateAnimation(AnimationState::WALK_N); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
if(GetKey(DOWN).bReleased){ |
|
|
|
if(GetKey(DOWN).bReleased){ |
|
|
|
player.SetLastReleasedMovementKey(DOWN); |
|
|
|
player.SetLastReleasedMovementKey(DOWN); |
|
|
|
if(GetKey(RIGHT).bHeld){ |
|
|
|
if(GetKey(RIGHT).bHeld){ |
|
|
|
player.UpdateAnimation(WALK_E); |
|
|
|
player.UpdateAnimation(AnimationState::WALK_E); |
|
|
|
} else |
|
|
|
} else |
|
|
|
if(GetKey(UP).bHeld){ |
|
|
|
if(GetKey(UP).bHeld){ |
|
|
|
player.UpdateAnimation(WALK_N); |
|
|
|
player.UpdateAnimation(AnimationState::WALK_N); |
|
|
|
} else |
|
|
|
} else |
|
|
|
if(GetKey(LEFT).bHeld){ |
|
|
|
if(GetKey(LEFT).bHeld){ |
|
|
|
player.UpdateAnimation(WALK_W); |
|
|
|
player.UpdateAnimation(AnimationState::WALK_W); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if(setIdleAnimation){ |
|
|
|
if(setIdleAnimation){ |
|
|
|
switch(player.GetLastReleasedMovementKey()){ |
|
|
|
switch(player.GetLastReleasedMovementKey()){ |
|
|
|
case UP:{ |
|
|
|
case UP:{ |
|
|
|
player.UpdateAnimation(IDLE_N); |
|
|
|
player.UpdateAnimation(AnimationState::IDLE_N); |
|
|
|
}break; |
|
|
|
}break; |
|
|
|
case DOWN:{ |
|
|
|
case DOWN:{ |
|
|
|
player.UpdateAnimation(IDLE_S); |
|
|
|
player.UpdateAnimation(AnimationState::IDLE_S); |
|
|
|
}break; |
|
|
|
}break; |
|
|
|
case LEFT:{ |
|
|
|
case LEFT:{ |
|
|
|
player.UpdateAnimation(IDLE_W); |
|
|
|
player.UpdateAnimation(AnimationState::IDLE_W); |
|
|
|
}break; |
|
|
|
}break; |
|
|
|
case RIGHT:{ |
|
|
|
case RIGHT:{ |
|
|
|
player.UpdateAnimation(IDLE_E); |
|
|
|
player.UpdateAnimation(AnimationState::IDLE_E); |
|
|
|
}break; |
|
|
|
}break; |
|
|
|
default:{ |
|
|
|
default:{ |
|
|
|
player.UpdateAnimation(IDLE_S); |
|
|
|
player.UpdateAnimation(AnimationState::IDLE_S); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|