I am making a small game in my small game engine made with OpenGL c++.
I have to make many classes like Camera, BatchRenderer, AudioEngine, ParticleEngine, Level, Player, Zombie, Humans, etc. Now Player have to interact with classes like Camera, BatchRenderer, AudioEngine, ParticleEngine, level data from Level class, Zombie, Human, etc. And i am passing most of them by reference which are initialized in my Main Game class.

// AudioEngine and ParticleEngine which is created in Main Game class and Player need to play sound and simulate particles. TextureID, position, radius(size), rotation, depth and color are needed to render the player.

```
Player::Player(AudioEngine& a_audioEngine, ParticleEngine& a_particleEngine
               GLuint a_textureID, glm::vec2 a_position, float a_radius,
               float a_rotation, float a_depth, Color a_color)
{...}

```

// Camera for checking if the player is in view. levelData, zombies, humans to check collision detection with Player.

```
void Player::update(Camera& camera, std::vector<std::string>& levelData,
                    std::vector<Zombie>& zombies, std::vector<Human>& humans,
                    float deltaTime)

```

Here you can see too many arguments are passed to player class and also need more in the future.
But I read many people saying the it is bad to have more than two or three arguments in a function. And In my game there are many classes which take more than 5 or 6 arguments.

Is this right for a game Or Is it is a bad practice?
Please tell me how can i solve this problem.

Sorry for bad English.
Thank you very much for reading.