#pragma once
#define INCLUDE_ANIMATION_DATA extern std::map<AnimationState,Animate2D::FrameSequence>ANIMATION_DATA;
#define INCLUDE_MONSTER_LIST extern std::vector<Monster>MONSTER_LIST;
#define INCLUDE_SPAWNER_LIST extern std::vector<MonsterSpawner>SPAWNER_LIST;
#define INCLUDE_DAMAGENUMBER_LIST extern std::vector<std::shared_ptr<DamageNumber>>DAMAGENUMBER_LIST;
#define INCLUDE_game extern Crawler*game;
#define INCLUDE_MONSTER_DATA extern std::map<MonsterName,MonsterData>MONSTER_DATA;
#define INCLUDE_BULLET_LIST extern std::vector<std::unique_ptr<Bullet>>BULLET_LIST;
#define INCLUDE_PARTICLE_LIST extern std::vector<Particle>PARTICLE_LIST;
#define INCLUDE_EMITTER_LIST extern std::vector<std::unique_ptr<Emitter>>EMITTER_LIST;

#define ACCESS_PLAYER Player*p=game->GetPlayer();

#define INFINITE 999999

#define SETUP_CLASS(class) \
class::class() \
    :Player::Player(){} \
class::class(Player*player) \
    :Player::Player(player){} \
Class class::GetClass(){return cl;} \
std::string class::GetClassName(){return name;} \
Ability&class::GetRightClickAbility(){return rightClickAbility;}; \
Ability&class::GetAbility1(){return ability1;}; \
Ability&class::GetAbility2(){return ability2;}; \
Ability&class::GetAbility3(){return ability3;}; \
Ability&class::GetAbility4(){return ability4;}; \
AnimationState&class::GetWalkNAnimation(){return walk_n;}; \
AnimationState&class::GetWalkEAnimation(){return walk_e;}; \
AnimationState&class::GetWalkSAnimation(){return walk_s;}; \
AnimationState&class::GetWalkWAnimation(){return walk_w;}; \
AnimationState&class::GetIdleNAnimation(){return idle_n;}; \
AnimationState&class::GetIdleEAnimation(){return idle_e;}; \
AnimationState&class::GetIdleSAnimation(){return idle_s;}; \
AnimationState&class::GetIdleWAnimation(){return idle_w;}; \
std::string class::name=""; \
Class class::cl=ANY; \
Ability class::rightClickAbility=Ability("",0,0); \
Ability class::ability1=Ability("",0,0); \
Ability class::ability2=Ability("",0,0); \
Ability class::ability3=Ability("",0,0); \
Ability class::ability4=Ability("",0,0); \
AnimationState class::idle_n=WARRIOR_IDLE_N; \
AnimationState class::idle_e=WARRIOR_IDLE_E; \
AnimationState class::idle_s=WARRIOR_IDLE_S; \
AnimationState class::idle_w=WARRIOR_IDLE_W; \
AnimationState class::walk_n=WARRIOR_WALK_N; \
AnimationState class::walk_e=WARRIOR_WALK_E; \
AnimationState class::walk_s=WARRIOR_WALK_S; \
AnimationState class::walk_w=WARRIOR_WALK_W;