Code Review Stack Exchange is a question and answer site for peer programmer code reviews. It's 100% free, no registration required.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I have code here which will change a sprite depending on the variables called gunUpgrade and moveUpgrade. Any way to make the code simpler or shorter? I'm using Unity 3D.

if (gunUpgrade > 0 && moveUpgrade > 0)
    {
        if (gunUpgrade == 1)
        {
            // For every moveupgrade, set the sprite to array number
            if (moveUpgrade == 1) { currentSprite = playerSprites[8]; }
            else if (moveUpgrade == 2) { currentSprite = playerSprites[9]; }
            else if (moveUpgrade == 3) { currentSprite = playerSprites[10]; }
            else if (moveUpgrade == 4) { currentSprite = playerSprites[11]; }
        }
        if (gunUpgrade == 2)
        {
            if (moveUpgrade == 1) { currentSprite = playerSprites[12]; }
            else if (moveUpgrade == 2) { currentSprite = playerSprites[13]; }
            else if (moveUpgrade == 3) { currentSprite = playerSprites[14]; }
            else if (moveUpgrade == 4) { currentSprite = playerSprites[15]; }
        }
        if (gunUpgrade == 3)
        {
            if (moveUpgrade == 1) { currentSprite = playerSprites[16]; }
            else if (moveUpgrade == 2) { currentSprite = playerSprites[17]; }
            else if (moveUpgrade == 3) { currentSprite = playerSprites[18]; }
            else if (moveUpgrade == 4) { currentSprite = playerSprites[19]; }
        }
    }
share|improve this question
up vote 2 down vote accepted

Use some math.

currentSprite = playerSprites[gunUpgrade*4+4+moveUpgrade-1];
share|improve this answer

I suggest writing it as

currentSprite = playerSprites[4 * (gunUpgrade + 1) + (moveUpgrade - 1)];

Consider laying out the elements of playerSprites so as to require fewer ±1 operations.

Note that you must ensure that gunUpgrade never exceeds 3, and moveUpgrade never exceeds 4.

share|improve this answer
    
Sorry for the lack of a detailed answer but in the end this is the same as I suggested. – Bruno Costa yesterday
2  
@BrunoCosta: But he lack of a detailed answer make it so your code is "magic", and you leave a few important details such as the limitation of it, or how to scale it up. – DrakaSAN yesterday

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.