private void RemoveStatesWithLowerSeverity(AnimatableCharacterState state) { if (state.StateName == HeroVirtualTabletop.AnimatedAbility.DefaultAbilities.UNCONSCIOUS) { RemoveStateFromActiveStates(HeroVirtualTabletop.AnimatedAbility.DefaultAbilities.STUNNED); } else if (state.StateName == HeroVirtualTabletop.AnimatedAbility.DefaultAbilities.DYING) { RemoveStateFromActiveStates(HeroVirtualTabletop.AnimatedAbility.DefaultAbilities.STUNNED); RemoveStateFromActiveStates(HeroVirtualTabletop.AnimatedAbility.DefaultAbilities.UNCONSCIOUS); } else if (state.StateName == HeroVirtualTabletop.AnimatedAbility.DefaultAbilities.DEAD) { RemoveStateFromActiveStates(HeroVirtualTabletop.AnimatedAbility.DefaultAbilities.STUNNED); RemoveStateFromActiveStates(HeroVirtualTabletop.AnimatedAbility.DefaultAbilities.UNCONSCIOUS); RemoveStateFromActiveStates(HeroVirtualTabletop.AnimatedAbility.DefaultAbilities.DYING); } else if (state.StateName == HeroVirtualTabletop.AnimatedAbility.DefaultAbilities.KNOCKEDBACK) { RemoveStateFromActiveStates(HeroVirtualTabletop.AnimatedAbility.DefaultAbilities.STUNNED); RemoveStateFromActiveStates(HeroVirtualTabletop.AnimatedAbility.DefaultAbilities.UNCONSCIOUS); RemoveStateFromActiveStates(HeroVirtualTabletop.AnimatedAbility.DefaultAbilities.DYING); RemoveStateFromActiveStates(HeroVirtualTabletop.AnimatedAbility.DefaultAbilities.DEAD); } }
public void AddState(AnimatableCharacterState state, bool playImmediately = true) { if (!ActiveStates.Any(s => s.StateName == state.StateName)) { ActiveStates.Add(state); } if (playImmediately && state.AbilityAlreadyPlayed == false) { state.Ability.Play(this); state.AbilityAlreadyPlayed = true; } NotifyOfPropertyChange(() => ActiveStates.Count); }
public void RemoveState(AnimatableCharacterState state, bool playImmediately = true) { ActiveStates.Remove(state); state.Ability?.Stop(this); state.AbilityAlreadyPlayed = false; bool canPlayStopAbility = checkIfStopAbilityShouldBePlayedForAttackImpacts(state); var stopAbility = state.Ability.StopAbility; if (canPlayStopAbility && playImmediately) { stopAbility?.Play(this); } RemoveStatesWithLowerSeverity(state); NotifyOfPropertyChange(() => ActiveStates.Count); }
private bool checkIfStopAbilityShouldBePlayedForAttackImpacts(AnimatableCharacterState state) { switch (state.StateName) { case HeroVirtualTabletop.AnimatedAbility.DefaultAbilities.DYING: return(!this.ActiveStates.Any(s => s.StateName == HeroVirtualTabletop.AnimatedAbility.DefaultAbilities.DEAD)); case HeroVirtualTabletop.AnimatedAbility.DefaultAbilities.UNCONSCIOUS: return(!this.ActiveStates.Any(s => s.StateName == HeroVirtualTabletop.AnimatedAbility.DefaultAbilities.DEAD || s.StateName == HeroVirtualTabletop.AnimatedAbility.DefaultAbilities.DYING)); case HeroVirtualTabletop.AnimatedAbility.DefaultAbilities.STUNNED: return(!this.ActiveStates.Any(s => s.StateName == HeroVirtualTabletop.AnimatedAbility.DefaultAbilities.DEAD || s.StateName == HeroVirtualTabletop.AnimatedAbility.DefaultAbilities.DYING || s.StateName == HeroVirtualTabletop.AnimatedAbility.DefaultAbilities.UNCONSCIOUS)); default: return(true); } }