I am writing an enemy class for a 2D tile-based game and it seems necessary to instantiate all private members of the class. This leads to some design difficulties, as I need to pass in 10+ arguments into the constructor. How should I go about cleaning this up, as it is necessary to initialize these values when the object is created?
Here is the code:
class Enemy {
private:
SDL_Rect pos;
int health;
int type;
int id;
SDL_Texture* default_texture;
Animation walking_animation;
Animation attack_animation;
std::vector<Item> drop_when_killed;
double velocity_x;
double velocity_y;
double attack_range; // in terms of pixels
int walking_speed;
int jump_height;
public:
explicit Enemy(SDL_Rect pos_, int health_, int type_, int id_,
SDL_Texture* default_texture_, Animation walking_animation_,
Animation attack_animation_, std::vector<Item> drop_when_killed_, double attack_range_,
int walking_speed_, int jump_height_);
: pos(pos_), health(health_), type(type_), id(id_), default_texture(default_texture_),
walking_animation(walking_animation_), attack_animation(attack_animation_),
drop_when_killed(drop_when_killed_), attack_range(attack_range_),
walking_speed(walking_speed_), jump_height(jump_height_) {};
void WalkToPlayer(SDL_Rect player_pos);
void AttackPlayer(Character& ch);
void TakeDamage(int damage_num);
void Die();
void Update(Character& ch);
SDL_Rect GetPos() const;
~Enemy();
};
Please login or Register to submit your answer