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(); } }