Search code examples
c#collisionmonogameenumerator

Foreach statement does not contain public definition for getEnumerator


I am trying to implement collision between two paddles and I am getting the GetEnumerator error.

This is where I am getting the error:

foreach (Player item in paddle1)
{
    item.Update(gameTime);
    if (paddle2.CollisionSprite(item))
    {
        paddle2.Velocity = -paddle2.Velocity;
    }
}

And my Collision methods from Player:

public virtual Circle CollisionCircle
{
    get
    {
        return new Circle((int)(Position.X - SpriteOrigin.X * Scale), (int)(Position.Y - SpriteOrigin.Y * Scale),
                (int)(TextureImage.Width * Scale), (int)(TextureImage.Height * Scale));
    }
}

public bool CollisionSprite(Player sprite)
{
    return CollisionCircle.Intersects(sprite.CollisionCircle);
}

Solution

  • The error is because paddle1 is of type Player, not an IEnumerable. If you only have two players, you shouldn't have to loop and can just implement your function like this:

    public void CollisionDetection(Player firstPlayer, Player secondPlayer)
    {
        firstPlayer.Update(gameTime);
        secondPlayer.Update(gameTime);
    
        if (firstPlayer.CollisionSprite(secondPlayer))
        {
            firstPlayer.Velocity = -firstPlayer.Velocity;
            secondPlayer.Velocity = -secondPlayer.Velocity;
        }
    }
    

    Usage would be:

    CollisionDetection(paddle1, paddle2);