private ICharacterRenderProperties GetRenderPropertiesForState(DisplayState displayState)
        {
            switch (displayState)
            {
            case DisplayState.Standing:
                return(_baseProperties);

            case DisplayState.SitChair:
                return(_baseProperties.WithSitState(SitState.Chair));

            case DisplayState.SitFloor:
                return(_baseProperties.WithSitState(SitState.Floor));

            case DisplayState.Attack1:
                return(_baseProperties.WithNextAttackFrame());

            case DisplayState.Attack2:
                return(_baseProperties.WithNextAttackFrame().WithNextAttackFrame());

            case DisplayState.Walk1:
                return(_baseProperties.WithNextWalkFrame());

            case DisplayState.Walk2:
                return(_baseProperties.WithNextWalkFrame().WithNextWalkFrame());

            case DisplayState.Walk3:
                return(_baseProperties.WithNextWalkFrame().WithNextWalkFrame().WithNextWalkFrame());

            case DisplayState.SpellCast:
                return(_baseProperties.WithNextSpellCastFrame());

            //create a clone of the properties for animation
            case DisplayState.WalkingAnimation:
            case DisplayState.SpellCastAnimation:
            case DisplayState.AttackingAnimation:
                return((ICharacterRenderProperties)_baseProperties.Clone());

            default:
                throw new ArgumentOutOfRangeException();
            }
        }