Hey guys. I need to update the character animation depending on the state (Idle, Walk, Interact) and the orientation (NE, E, SE, SW, W, NW). Animations are “IdleNE”, “WalkW”, etc.
In order to manage it I would like to have something similar to
private void UpdateAnimation()
{
spriteAnimator.Play(currentState.toString() + currentOrientation.toString())
}
but I came up with nasty nested switches instead…
private void UpdateAnimation()
{
switch (currentState)
{
case PlayerState.Idle:
switch (currentOrientation)
{
case PlayerOrientation.E:
spriteAnimator.Play(idleE);
break;
case PlayerOrientation.NE:
spriteAnimator.Play(idleNE);
break;
case PlayerOrientation.NW:
spriteAnimator.Play(idleNW);
break;
case PlayerOrientation.W:
spriteAnimator.Play(idleW);
break;
case PlayerOrientation.SW:
spriteAnimator.Play(idleSW);
break;
case PlayerOrientation.SE:
spriteAnimator.Play(idleSE);
break;
}
break;
case PlayerState.Walk:
{
switch (currentOrientation)
{
case PlayerOrientation.E:
spriteAnimator.Play(walkE);
break;
case PlayerOrientation.NE:
spriteAnimator.Play(walkNE);
break;
case PlayerOrientation.NW:
spriteAnimator.Play(walkNW);
break;
case PlayerOrientation.W:
spriteAnimator.Play(walkW);
break;
case PlayerOrientation.SW:
spriteAnimator.Play(walkSW);
break;
case PlayerOrientation.SE:
spriteAnimator.Play(walkSE);
break;
}
break;
}
break;
case PlayerState.Interact:
switch (currentOrientation)
{
case PlayerOrientation.E:
spriteAnimator.Play(interactE);
break;
case PlayerOrientation.NE:
spriteAnimator.Play(interactNE);
break;
case PlayerOrientation.NW:
spriteAnimator.Play(interactNW);
break;
case PlayerOrientation.W:
spriteAnimator.Play(interactW);
break;
case PlayerOrientation.SW:
spriteAnimator.Play(interactSW);
break;
case PlayerOrientation.SE:
spriteAnimator.Play(interactSE);
break;
}
break;
default:
break;
}
}
I’m not sure there is any proper alternative to do it, so any idea would be really welcome. Thanks in advance!