All underlying class differences now applied to code. Preparation for other class implementations. Implemented class swapping via mouse wheel.

pull/28/head
sigonasr2 2 years ago
parent 21368f6f95
commit 9e6573729e
  1. 8
      Crawler/Animation.h
  2. 24
      Crawler/Class.cpp
  3. 2
      Crawler/Class.h
  4. 294
      Crawler/Crawler.cpp
  5. 4
      Crawler/Crawler.h
  6. 2
      Crawler/Monster.cpp
  7. 123
      Crawler/Player.cpp
  8. 2
      Crawler/Player.h
  9. BIN
      Crawler/assets/nico-ranger.png
  10. BIN
      Crawler/assets/nico-ranger2.xcf
  11. BIN
      Crawler/assets/nico-wizard.png
  12. BIN
      Crawler/assets/nico-wizard.xcf
  13. 36
      Crawler/switch-class.snippet

@ -1,12 +1,16 @@
#pragma once
enum AnimationState{
WALK_S,WALK_E,WALK_N,WALK_W,
IDLE_S,IDLE_E,IDLE_N,IDLE_W,
WARRIOR_WALK_S,WARRIOR_WALK_E,WARRIOR_WALK_N,WARRIOR_WALK_W,
WARRIOR_IDLE_S,WARRIOR_IDLE_E,WARRIOR_IDLE_N,WARRIOR_IDLE_W,
GREEN_SLIME_IDLE,GREEN_SLIME_ROLL,GREEN_SLIME_JUMP,GREEN_SLIME_SPIT,GREEN_SLIME_DIE,
BLUE_SLIME_IDLE,BLUE_SLIME_ROLL,BLUE_SLIME_JUMP,BLUE_SLIME_SPIT,BLUE_SLIME_DIE,
RED_SLIME_IDLE,RED_SLIME_ROLL,RED_SLIME_JUMP,RED_SLIME_SPIT,RED_SLIME_DIE,
YELLOW_SLIME_IDLE,YELLOW_SLIME_ROLL,YELLOW_SLIME_JUMP,YELLOW_SLIME_SPIT,YELLOW_SLIME_DIE,
GROUND_SLAM_ATTACK_BACK,GROUND_SLAM_ATTACK_FRONT,
SWINGSWORD_S,SWINGSWORD_E,SWINGSWORD_N,SWINGSWORD_W,
RANGER_WALK_S,RANGER_WALK_E,RANGER_WALK_N,RANGER_WALK_W,
RANGER_IDLE_S,RANGER_IDLE_E,RANGER_IDLE_N,RANGER_IDLE_W,
WIZARD_WALK_S,WIZARD_WALK_E,WIZARD_WALK_N,WIZARD_WALK_W,
WIZARD_IDLE_S,WIZARD_IDLE_E,WIZARD_IDLE_N,WIZARD_IDLE_W,
};

@ -6,41 +6,53 @@ std::map<Class,ClassData>CLASS_DATA={
{"Block",15,VERY_DARK_BLUE,DARK_BLUE},
{"Battlecry",12},
{"Ground Slam",15},
{"Sonic Slash",40}
{"Sonic Slash",40},
WARRIOR_WALK_N,WARRIOR_WALK_E,WARRIOR_WALK_S,WARRIOR_WALK_W,
WARRIOR_IDLE_N,WARRIOR_IDLE_E,WARRIOR_IDLE_S,WARRIOR_IDLE_W,
}},
{THIEF,{
"Thief",THIEF,
{"???",15,VERY_DARK_BLUE,DARK_BLUE},
{"???",12},
{"???",15},
{"???",40}
{"???",40},
WARRIOR_WALK_N,WARRIOR_WALK_E,WARRIOR_WALK_S,WARRIOR_WALK_W,
WARRIOR_IDLE_N,WARRIOR_IDLE_E,WARRIOR_IDLE_S,WARRIOR_IDLE_W,
}},
{RANGER,{
"Ranger",RANGER,
{"Retreat",7,VERY_DARK_BLUE,DARK_BLUE},
{"Rapid Fire",12},
{"Charged Shot",15},
{"Multishot",25}
{"Multishot",25},
RANGER_WALK_N,RANGER_WALK_E,RANGER_WALK_S,RANGER_WALK_W,
RANGER_IDLE_N,RANGER_IDLE_E,RANGER_IDLE_S,RANGER_IDLE_W,
}},
{BARD,{
"Bard",BARD,
{"???",7,VERY_DARK_BLUE,DARK_BLUE},
{"???",12},
{"???",15},
{"???",25}
{"???",25},
WARRIOR_WALK_N,WARRIOR_WALK_E,WARRIOR_WALK_S,WARRIOR_WALK_W,
WARRIOR_IDLE_N,WARRIOR_IDLE_E,WARRIOR_IDLE_S,WARRIOR_IDLE_W,
}},
{WIZARD,{
"Wizard",WIZARD,
{"Teleport",8,VERY_DARK_BLUE,DARK_BLUE},
{"Firebolt",6},
{"Lightning Bolt",6},
{"Meteor",40}
{"Meteor",40},
WIZARD_WALK_N,WIZARD_WALK_E,WIZARD_WALK_S,WIZARD_WALK_W,
WIZARD_IDLE_N,WIZARD_IDLE_E,WIZARD_IDLE_S,WIZARD_IDLE_W,
}},
{WITCH,{
"Witch",WITCH,
{"???",8,VERY_DARK_BLUE,DARK_BLUE},
{"???",6},
{"???",6},
{"???",40}
{"???",40},
WARRIOR_WALK_N,WARRIOR_WALK_E,WARRIOR_WALK_S,WARRIOR_WALK_W,
WARRIOR_IDLE_N,WARRIOR_IDLE_E,WARRIOR_IDLE_S,WARRIOR_IDLE_W,
}},
};

@ -1,5 +1,6 @@
#pragma once
#include "Ability.h"
#include "Animation.h"
#include "olcPixelGameEngine.h"
enum Class{
@ -9,4 +10,5 @@ struct ClassData{
std::string name;
Class cl;
Ability rightClickAbility,ability1,ability2,ability3;
AnimationState walk_n,walk_e,walk_s,walk_w,idle_n,idle_e,idle_s,idle_w;
};

@ -31,25 +31,43 @@ bool Crawler::OnUserCreate(){
camera.EnableWorldBoundary(false);
//Graphics
GFX_Pl_Sheet.Load("assets/nico-warrior.png");
GFX_Warrior_Sheet.Load("assets/nico-warrior.png");
GFX_Slime_Sheet.Load("assets/slime.png");
GFX_Circle.Load("assets/circle.png");
GFX_Effect_GroundSlam_Back.Load("assets/ground-slam-attack-back.png");
GFX_Effect_GroundSlam_Front.Load("assets/ground-slam-attack-front.png");
GFX_Heart.Load("assets/heart.png");
GFX_BLOCK_BUBBLE.Load("assets/block.png");
GFX_Ranger_Sheet.Load("assets/nico-ranger.png");
GFX_Wizard_Sheet.Load("assets/nico-wizard.png");
//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);
player.AddAnimation(AnimationState::WARRIOR_WALK_N);
player.AddAnimation(AnimationState::WARRIOR_WALK_E);
player.AddAnimation(AnimationState::WARRIOR_WALK_S);
player.AddAnimation(AnimationState::WARRIOR_WALK_W);
player.AddAnimation(AnimationState::WARRIOR_IDLE_N);
player.AddAnimation(AnimationState::WARRIOR_IDLE_E);
player.AddAnimation(AnimationState::WARRIOR_IDLE_S);
player.AddAnimation(AnimationState::WARRIOR_IDLE_W);
player.AddAnimation(AnimationState::RANGER_WALK_N);
player.AddAnimation(AnimationState::RANGER_WALK_E);
player.AddAnimation(AnimationState::RANGER_WALK_S);
player.AddAnimation(AnimationState::RANGER_WALK_W);
player.AddAnimation(AnimationState::RANGER_IDLE_N);
player.AddAnimation(AnimationState::RANGER_IDLE_E);
player.AddAnimation(AnimationState::RANGER_IDLE_S);
player.AddAnimation(AnimationState::RANGER_IDLE_W);
player.AddAnimation(AnimationState::WIZARD_WALK_N);
player.AddAnimation(AnimationState::WIZARD_WALK_E);
player.AddAnimation(AnimationState::WIZARD_WALK_S);
player.AddAnimation(AnimationState::WIZARD_WALK_W);
player.AddAnimation(AnimationState::WIZARD_IDLE_N);
player.AddAnimation(AnimationState::WIZARD_IDLE_E);
player.AddAnimation(AnimationState::WIZARD_IDLE_S);
player.AddAnimation(AnimationState::WIZARD_IDLE_W);
player.AddAnimation(AnimationState::SWINGSWORD_E);
player.AddAnimation(AnimationState::SWINGSWORD_S);
player.AddAnimation(AnimationState::SWINGSWORD_N);
@ -58,8 +76,6 @@ bool Crawler::OnUserCreate(){
player.SetClass(WARRIOR);
player.SetPos({4*24,4*24});
player.UpdateAnimation(AnimationState::IDLE_S);
SPAWNER_LIST.push_back(MonsterSpawner({360*1,96},4*24,{{
{MonsterName::SLIME_GREEN,{(rand()%20/2.f-5)*24,(rand()%20/2.f-5)*24}}
@ -120,59 +136,137 @@ bool Crawler::OnUserUpdate(float fElapsedTime){
}
void Crawler::InitializeAnimations(){
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{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{2,0}*24,{24,24}}});
ANIMATION_DATA[AnimationState::WALK_S]=pl_walk_s;
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{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{2,3}*24,{24,24}}});
ANIMATION_DATA[AnimationState::WALK_E]=pl_walk_e;
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{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{2,2}*24,{24,24}}});
ANIMATION_DATA[AnimationState::WALK_W]=pl_walk_w;
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{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{2,1}*24,{24,24}}});
ANIMATION_DATA[AnimationState::WALK_N]=pl_walk_n;
Animate2D::FrameSequence pl_idle_s;
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;
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;
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;
pl_idle_n.AddFrame({&GFX_Pl_Sheet,{vi2d{0,1}*24,{24,24}}});
ANIMATION_DATA[AnimationState::IDLE_N]=pl_idle_n;
Animate2D::FrameSequence pl_swing_s(0.05),pl_swing_n(0.05),pl_swing_e(0.05),pl_swing_w(0.05);
//Warrior animations.
Animate2D::FrameSequence pl_warrior_walk_s{0.2};
pl_warrior_walk_s.AddFrame({&GFX_Warrior_Sheet,{vi2d{0,0}*24,{24,24}}});
pl_warrior_walk_s.AddFrame({&GFX_Warrior_Sheet,{vi2d{1,0}*24,{24,24}}});
pl_warrior_walk_s.AddFrame({&GFX_Warrior_Sheet,{vi2d{0,0}*24,{24,24}}});
pl_warrior_walk_s.AddFrame({&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({&GFX_Warrior_Sheet,{vi2d{0,3}*24,{24,24}}});
pl_warrior_walk_e.AddFrame({&GFX_Warrior_Sheet,{vi2d{1,3}*24,{24,24}}});
pl_warrior_walk_e.AddFrame({&GFX_Warrior_Sheet,{vi2d{0,3}*24,{24,24}}});
pl_warrior_walk_e.AddFrame({&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({&GFX_Warrior_Sheet,{vi2d{0,2}*24,{24,24}}});
pl_warrior_walk_w.AddFrame({&GFX_Warrior_Sheet,{vi2d{1,2}*24,{24,24}}});
pl_warrior_walk_w.AddFrame({&GFX_Warrior_Sheet,{vi2d{0,2}*24,{24,24}}});
pl_warrior_walk_w.AddFrame({&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({&GFX_Warrior_Sheet,{vi2d{0,1}*24,{24,24}}});
pl_warrior_walk_n.AddFrame({&GFX_Warrior_Sheet,{vi2d{1,1}*24,{24,24}}});
pl_warrior_walk_n.AddFrame({&GFX_Warrior_Sheet,{vi2d{0,1}*24,{24,24}}});
pl_warrior_walk_n.AddFrame({&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({&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({&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({&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({&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);
for (int i=0;i<4;i++){
pl_swing_s.AddFrame({&GFX_Pl_Sheet,{vi2d{4+i,0}*24,{24,24}}});
pl_warrior_swing_s.AddFrame({&GFX_Warrior_Sheet,{vi2d{4+i,0}*24,{24,24}}});
}
for (int i=0;i<4;i++){
pl_swing_n.AddFrame({&GFX_Pl_Sheet,{vi2d{4+i,1}*24,{24,24}}});
pl_warrior_swing_n.AddFrame({&GFX_Warrior_Sheet,{vi2d{4+i,1}*24,{24,24}}});
}
for (int i=0;i<4;i++){
pl_swing_w.AddFrame({&GFX_Pl_Sheet,{vi2d{4+i,2}*24,{24,24}}});
pl_warrior_swing_w.AddFrame({&GFX_Warrior_Sheet,{vi2d{4+i,2}*24,{24,24}}});
}
for (int i=0;i<4;i++){
pl_swing_e.AddFrame({&GFX_Pl_Sheet,{vi2d{4+i,3}*24,{24,24}}});
pl_warrior_swing_e.AddFrame({&GFX_Warrior_Sheet,{vi2d{4+i,3}*24,{24,24}}});
}
ANIMATION_DATA[AnimationState::SWINGSWORD_N]=pl_swing_n;
ANIMATION_DATA[AnimationState::SWINGSWORD_E]=pl_swing_e;
ANIMATION_DATA[AnimationState::SWINGSWORD_S]=pl_swing_s;
ANIMATION_DATA[AnimationState::SWINGSWORD_W]=pl_swing_w;
ANIMATION_DATA[AnimationState::SWINGSWORD_N]=pl_warrior_swing_n;
ANIMATION_DATA[AnimationState::SWINGSWORD_E]=pl_warrior_swing_e;
ANIMATION_DATA[AnimationState::SWINGSWORD_S]=pl_warrior_swing_s;
ANIMATION_DATA[AnimationState::SWINGSWORD_W]=pl_warrior_swing_w;
//Ranger animations
Animate2D::FrameSequence pl_ranger_walk_s{0.2};
pl_ranger_walk_s.AddFrame({&GFX_Ranger_Sheet,{vi2d{0,0}*24,{24,24}}});
pl_ranger_walk_s.AddFrame({&GFX_Ranger_Sheet,{vi2d{1,0}*24,{24,24}}});
pl_ranger_walk_s.AddFrame({&GFX_Ranger_Sheet,{vi2d{0,0}*24,{24,24}}});
pl_ranger_walk_s.AddFrame({&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({&GFX_Ranger_Sheet,{vi2d{0,3}*24,{24,24}}});
pl_ranger_walk_e.AddFrame({&GFX_Ranger_Sheet,{vi2d{1,3}*24,{24,24}}});
pl_ranger_walk_e.AddFrame({&GFX_Ranger_Sheet,{vi2d{0,3}*24,{24,24}}});
pl_ranger_walk_e.AddFrame({&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({&GFX_Ranger_Sheet,{vi2d{0,2}*24,{24,24}}});
pl_ranger_walk_w.AddFrame({&GFX_Ranger_Sheet,{vi2d{1,2}*24,{24,24}}});
pl_ranger_walk_w.AddFrame({&GFX_Ranger_Sheet,{vi2d{0,2}*24,{24,24}}});
pl_ranger_walk_w.AddFrame({&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({&GFX_Ranger_Sheet,{vi2d{0,1}*24,{24,24}}});
pl_ranger_walk_n.AddFrame({&GFX_Ranger_Sheet,{vi2d{1,1}*24,{24,24}}});
pl_ranger_walk_n.AddFrame({&GFX_Ranger_Sheet,{vi2d{0,1}*24,{24,24}}});
pl_ranger_walk_n.AddFrame({&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({&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({&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({&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({&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({&GFX_Wizard_Sheet,{vi2d{0,0}*24,{24,24}}});
pl_wizard_walk_s.AddFrame({&GFX_Wizard_Sheet,{vi2d{1,0}*24,{24,24}}});
pl_wizard_walk_s.AddFrame({&GFX_Wizard_Sheet,{vi2d{0,0}*24,{24,24}}});
pl_wizard_walk_s.AddFrame({&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({&GFX_Wizard_Sheet,{vi2d{0,3}*24,{24,24}}});
pl_wizard_walk_e.AddFrame({&GFX_Wizard_Sheet,{vi2d{1,3}*24,{24,24}}});
pl_wizard_walk_e.AddFrame({&GFX_Wizard_Sheet,{vi2d{0,3}*24,{24,24}}});
pl_wizard_walk_e.AddFrame({&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({&GFX_Wizard_Sheet,{vi2d{0,2}*24,{24,24}}});
pl_wizard_walk_w.AddFrame({&GFX_Wizard_Sheet,{vi2d{1,2}*24,{24,24}}});
pl_wizard_walk_w.AddFrame({&GFX_Wizard_Sheet,{vi2d{0,2}*24,{24,24}}});
pl_wizard_walk_w.AddFrame({&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({&GFX_Wizard_Sheet,{vi2d{0,1}*24,{24,24}}});
pl_wizard_walk_n.AddFrame({&GFX_Wizard_Sheet,{vi2d{1,1}*24,{24,24}}});
pl_wizard_walk_n.AddFrame({&GFX_Wizard_Sheet,{vi2d{0,1}*24,{24,24}}});
pl_wizard_walk_n.AddFrame({&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({&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({&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({&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({&GFX_Wizard_Sheet,{vi2d{0,1}*24,{24,24}}});
ANIMATION_DATA[AnimationState::WIZARD_IDLE_N]=pl_wizard_idle_n;
//Load slime animations.
for(int slime=0;slime<4;slime++){
for(int state=0;state<5;state++){
@ -225,9 +319,49 @@ bool Crawler::DownReleased(){
void Crawler::HandleUserInput(float fElapsedTime){
bool setIdleAnimation=true;
if(GetKey(SPACE).bPressed&&player.GetAbility2Cooldown()==0){
player.Spin(Player::GROUND_SLAM_SPIN_TIME,14*PI);
player.iframe_time=Player::GROUND_SLAM_SPIN_TIME+0.1;
if(GetMouseWheel()>0){
switch(player.cl){
case WARRIOR:{
player.SetClass(RANGER);
}break;
case RANGER:{
player.SetClass(WIZARD);
}break;
case WIZARD:{
player.SetClass(WARRIOR);
}break;
}
}
if(GetMouseWheel()<0){
switch(player.cl){
case WARRIOR:{
player.SetClass(WIZARD);
}break;
case RANGER:{
player.SetClass(WARRIOR);
}break;
case WIZARD:{
player.SetClass(RANGER);
}break;
}
}
if(player.ability2.cooldown==0&&GetKey(SPACE).bPressed){
switch(player.cl){
case WARRIOR:{
player.Spin(Player::GROUND_SLAM_SPIN_TIME,14*PI);
player.iframe_time=Player::GROUND_SLAM_SPIN_TIME+0.1;
}break;
case THIEF:{
}break;
case RANGER:{
}break;
case BARD:{
}break;
case WIZARD:{
}break;
case WITCH:{
}break;
}
}
if(player.GetVelocity()==vf2d{0,0}){
if(RightHeld()){
@ -238,7 +372,7 @@ void Crawler::HandleUserInput(float fElapsedTime){
}
player.SetFacingDirection(RIGHT);
if(player.GetState()==State::NORMAL){
player.UpdateAnimation(AnimationState::WALK_E);
player.UpdateWalkingAnimation(RIGHT);
}
setIdleAnimation=false;
}
@ -251,7 +385,7 @@ void Crawler::HandleUserInput(float fElapsedTime){
if(setIdleAnimation){
player.SetFacingDirection(LEFT);
if(player.GetState()==State::NORMAL){
player.UpdateAnimation(AnimationState::WALK_W);
player.UpdateWalkingAnimation(LEFT);
}
}
setIdleAnimation=false;
@ -265,7 +399,7 @@ void Crawler::HandleUserInput(float fElapsedTime){
if(setIdleAnimation){
player.SetFacingDirection(UP);
if(player.GetState()==State::NORMAL){
player.UpdateAnimation(AnimationState::WALK_N);
player.UpdateWalkingAnimation(UP);
}
}
setIdleAnimation=false;
@ -279,7 +413,7 @@ void Crawler::HandleUserInput(float fElapsedTime){
if(setIdleAnimation){
player.SetFacingDirection(DOWN);
if(player.GetState()==State::NORMAL){
player.UpdateAnimation(AnimationState::WALK_S);
player.UpdateWalkingAnimation(DOWN);
}
}
setIdleAnimation=false;
@ -289,13 +423,13 @@ void Crawler::HandleUserInput(float fElapsedTime){
player.SetLastReleasedMovementKey(UP);
if(player.GetState()==State::NORMAL){
if(RightHeld()){
player.UpdateAnimation(AnimationState::WALK_E);
player.UpdateWalkingAnimation(RIGHT);
} else
if(DownHeld()){
player.UpdateAnimation(AnimationState::WALK_S);
player.UpdateWalkingAnimation(DOWN);
} else
if(LeftHeld()){
player.UpdateAnimation(AnimationState::WALK_W);
player.UpdateWalkingAnimation(LEFT);
}
}
}
@ -303,13 +437,13 @@ void Crawler::HandleUserInput(float fElapsedTime){
player.SetLastReleasedMovementKey(RIGHT);
if(player.GetState()==State::NORMAL){
if(UpHeld()){
player.UpdateAnimation(AnimationState::WALK_N);
player.UpdateWalkingAnimation(UP);
} else
if(DownHeld()){
player.UpdateAnimation(AnimationState::WALK_S);
player.UpdateWalkingAnimation(DOWN);
} else
if(LeftHeld()){
player.UpdateAnimation(AnimationState::WALK_W);
player.UpdateWalkingAnimation(LEFT);
}
}
}
@ -317,13 +451,13 @@ void Crawler::HandleUserInput(float fElapsedTime){
player.SetLastReleasedMovementKey(LEFT);
if(player.GetState()==State::NORMAL){
if(RightHeld()){
player.UpdateAnimation(AnimationState::WALK_E);
player.UpdateWalkingAnimation(RIGHT);
} else
if(DownHeld()){
player.UpdateAnimation(AnimationState::WALK_S);
player.UpdateWalkingAnimation(DOWN);
} else
if(UpHeld()){
player.UpdateAnimation(AnimationState::WALK_N);
player.UpdateWalkingAnimation(UP);
}
}
}
@ -331,13 +465,13 @@ void Crawler::HandleUserInput(float fElapsedTime){
player.SetLastReleasedMovementKey(DOWN);
if(player.GetState()==State::NORMAL){
if(RightHeld()){
player.UpdateAnimation(AnimationState::WALK_E);
player.UpdateWalkingAnimation(RIGHT);
} else
if(UpHeld()){
player.UpdateAnimation(AnimationState::WALK_N);
player.UpdateWalkingAnimation(UP);
} else
if(LeftHeld()){
player.UpdateAnimation(AnimationState::WALK_W);
player.UpdateWalkingAnimation(LEFT);
}
}
}
@ -372,19 +506,19 @@ void Crawler::HandleUserInput(float fElapsedTime){
if(setIdleAnimation){
switch(player.GetLastReleasedMovementKey()){
case UP:{
player.UpdateAnimation(AnimationState::IDLE_N);
player.UpdateIdleAnimation(UP);
}break;
case DOWN:{
player.UpdateAnimation(AnimationState::IDLE_S);
player.UpdateIdleAnimation(DOWN);
}break;
case LEFT:{
player.UpdateAnimation(AnimationState::IDLE_W);
player.UpdateIdleAnimation(LEFT);
}break;
case RIGHT:{
player.UpdateAnimation(AnimationState::IDLE_E);
player.UpdateIdleAnimation(RIGHT);
}break;
default:{
player.UpdateAnimation(AnimationState::IDLE_S);
player.UpdateIdleAnimation(DOWN);
}
}
} else {

@ -12,9 +12,9 @@ class Crawler : public olc::PixelGameEngine
{
Camera2D camera;
Player player;
Renderable GFX_Pl_Sheet,GFX_Slime_Sheet,GFX_Circle,
Renderable GFX_Warrior_Sheet,GFX_Slime_Sheet,GFX_Circle,
GFX_Effect_GroundSlam_Back,GFX_Effect_GroundSlam_Front,
GFX_Heart,GFX_BLOCK_BUBBLE;
GFX_Heart,GFX_BLOCK_BUBBLE,GFX_Ranger_Sheet,GFX_Wizard_Sheet;
std::vector<Effect>foregroundEffects,backgroundEffects;
public:

@ -305,7 +305,7 @@ AnimationState Monster::GetDeathAnimationName(){
return AnimationState::RED_SLIME_DIE;
}
default:{
return AnimationState::IDLE_S;
return AnimationState::WARRIOR_IDLE_S;
}
}
}

@ -23,6 +23,7 @@ void Player::SetClass(Class cl){
ability1=CLASS_DATA[cl].ability1;
ability2=CLASS_DATA[cl].ability2;
ability3=CLASS_DATA[cl].ability3;
UpdateIdleAnimation(DOWN);
}
void Player::SetX(float x){
@ -99,14 +100,14 @@ void Player::Update(float fElapsedTime){
if(lastAnimationFlip==0){
lastAnimationFlip=0.03;
facingDirection=DOWN;
animation.ChangeState(internal_animState,AnimationState::WALK_S);
animation.ChangeState(internal_animState,AnimationState::WARRIOR_WALK_S);
}
}break;
case DOWN:{
if(lastAnimationFlip==0){
lastAnimationFlip=0.03;
facingDirection=UP;
animation.ChangeState(internal_animState,AnimationState::WALK_N);
animation.ChangeState(internal_animState,AnimationState::WARRIOR_WALK_N);
}
}break;
}
@ -177,41 +178,71 @@ void Player::Update(float fElapsedTime){
pos.y=newY;
}
if(attack_cooldown_timer==0&&game->GetMouse(0).bHeld){
bool attack=false;
Monster*closest=nullptr;
float closest_dist=999999;
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))
&&geom2d::line<float>(game->GetWorldMousePos(),m.GetPos()).length()<closest_dist){
closest_dist=geom2d::line<float>(game->GetWorldMousePos(),m.GetPos()).length();
closest=&m;
}
}
if(closest!=nullptr&&closest->Hurt(atk)){
attack_cooldown_timer=ATTACK_COOLDOWN;
swordSwingTimer=0.2;
SetState(State::SWING_SWORD);
switch(facingDirection){
case DOWN:{
UpdateAnimation(AnimationState::SWINGSWORD_S);
}break;
case RIGHT:{
UpdateAnimation(AnimationState::SWINGSWORD_E);
}break;
case LEFT:{
UpdateAnimation(AnimationState::SWINGSWORD_W);
}break;
case UP:{
UpdateAnimation(AnimationState::SWINGSWORD_N);
}break;
}
switch (cl) {
case WARRIOR: {
bool attack=false;
Monster*closest=nullptr;
float closest_dist=999999;
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))
&&geom2d::line<float>(game->GetWorldMousePos(),m.GetPos()).length()<closest_dist){
closest_dist=geom2d::line<float>(game->GetWorldMousePos(),m.GetPos()).length();
closest=&m;
}
}
if(closest!=nullptr&&closest->Hurt(atk)){
attack_cooldown_timer=ATTACK_COOLDOWN;
swordSwingTimer=0.2;
SetState(State::SWING_SWORD);
switch(facingDirection){
case DOWN:{
UpdateAnimation(AnimationState::SWINGSWORD_S);
}break;
case RIGHT:{
UpdateAnimation(AnimationState::SWINGSWORD_E);
}break;
case LEFT:{
UpdateAnimation(AnimationState::SWINGSWORD_W);
}break;
case UP:{
UpdateAnimation(AnimationState::SWINGSWORD_N);
}break;
}
}
}break;
case THIEF: {
}break;
case RANGER: {
}break;
case BARD: {
}break;
case WIZARD: {
}break;
case WITCH: {
}break;
}
}
if(rightClickAbility.cooldown==0&&GetState()==State::NORMAL&&game->GetMouse(1).bHeld){
rightClickAbility.cooldown=rightClickAbility.COOLDOWN_TIME;
SetState(State::BLOCK);
moveSpd=0.7;
if(rightClickAbility.cooldown==0&&game->GetMouse(1).bHeld){
switch (cl) {
case WARRIOR: {
if(GetState()==State::NORMAL){
rightClickAbility.cooldown=rightClickAbility.COOLDOWN_TIME;
SetState(State::BLOCK);
moveSpd=0.7;
}
}break;
case THIEF: {
}break;
case RANGER: {
}break;
case BARD: {
}break;
case WIZARD: {
}break;
case WITCH: {
}break;
}
}
}
@ -291,4 +322,26 @@ void Player::Spin(float duration,float spinSpd){
spin_spd=spinSpd;
spin_angle=0;
ability2.cooldown=ability2.COOLDOWN_TIME;
}
void Player::UpdateWalkingAnimation(Key direction){
AnimationState anim;
switch(direction){
case UP:anim=CLASS_DATA[cl].walk_n;break;
case RIGHT:anim=CLASS_DATA[cl].walk_e;break;
case DOWN:anim=CLASS_DATA[cl].walk_s;break;
case LEFT:anim=CLASS_DATA[cl].walk_w;break;
}
UpdateAnimation(anim);
}
void Player::UpdateIdleAnimation(Key direction){
AnimationState anim;
switch(direction){
case UP:anim=CLASS_DATA[cl].idle_n;break;
case RIGHT:anim=CLASS_DATA[cl].idle_e;break;
case DOWN:anim=CLASS_DATA[cl].idle_s;break;
case LEFT:anim=CLASS_DATA[cl].idle_w;break;
}
UpdateAnimation(anim);
}

@ -64,6 +64,8 @@ public:
Key GetFacingDirection();
vf2d GetVelocity();
bool HasIframes();
void UpdateWalkingAnimation(Key direction);
void UpdateIdleAnimation(Key direction);
bool Hurt(int damage);
void UpdateAnimation(AnimationState animState);

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

@ -0,0 +1,36 @@
<?xml version="1.0" encoding="utf-8"?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
<CodeSnippet Format="1.0.0">
<Header>
<Title>Class Switch</Title>
<Author>Sig</Author>
<Description>A switch statement of all classes.</Description>
<Shortcut>switchcl</Shortcut>
</Header>
<Snippet>
<Code Language="CPP">
<![CDATA[switch ($clVar$){
case WARRIOR:{
}break;
case THIEF:{
}break;
case RANGER:{
}break;
case BARD:{
}break;
case WIZARD:{
}break;
case WITCH:{
}break;
}]]>
</Code>
<Declarations>
<Literal>
<ID>clVar</ID>
<ToolTip>Name of the class variable.</ToolTip>
<Default>cl</Default>
</Literal>
</Declarations>
</Snippet>
</CodeSnippet>
</CodeSnippets>
Loading…
Cancel
Save