protected override bool CustomApply(IEntity entity) { if (entity is ICharacter character) { if (!character.Conditions.Any(c => c.Id == Id)) { var flatFooted = (FlatFooted)character.Conditions.FirstOrDefault(c => c.Id == EntityIds.FLAT_FOOTED_CONDITION_ID); if (flatFooted == null) { flatFooted = new FlatFooted(FlatFooted.AllCharacters); _appliedConditions.Add(flatFooted); character.Conditions.Add(flatFooted); } else if (!flatFooted.FlatFootedFrom.Contains(FlatFooted.AllCharacters)) { flatFooted = new FlatFooted(flatFooted, false, FlatFooted.AllCharacters); } var immobilized = character.Conditions.FirstOrDefault(c => c.Id == EntityIds.IMMOBILIZED_CONDITION_ID); if (immobilized == null) { immobilized = new Immobilized(); _appliedConditions.Add(immobilized); character.Conditions.Add(immobilized); } character.Conditions.Add(this); return(true); } throw new ConditionExistsException(this, character.Conditions.First(c => c.Id == Id)); } return(false); }
protected override bool CustomApply(IEntity entity) { if (entity is ICharacter character) { if (!character.Conditions.Any(c => c.Id == Id)) { character.Conditions.Add(this); if (!character.Conditions.Any(c => c.Id == EntityIds.FLAT_FOOTED_CONDITION_ID)) { var flatFooted = new FlatFooted(FlatFooted.AllCharacters); flatFooted.Apply(character); _hasAppliedFlatFooted = true; return(true); } else { var flatFooted = (FlatFooted)character.Conditions.First(c => c.Id == EntityIds.FLAT_FOOTED_CONDITION_ID); if (!flatFooted.FlatFootedFrom.Contains(FlatFooted.AllCharacters)) { var newFlatFooted = new FlatFooted(flatFooted, false, FlatFooted.AllCharacters); flatFooted.Remove(character); newFlatFooted.Apply(character); return(true); } } } throw new ConditionExistsException(this, character.Conditions.First(c => c.Id == Id)); } return(false); }
private void AddFlatFootedCondition(ICharacter character) { var flatFooted = (FlatFooted)character.Conditions.FirstOrDefault(c => c.Id == EntityIds.FLAT_FOOTED_CONDITION_ID); if (flatFooted == null) { flatFooted = new FlatFooted(FlatFooted.AllCharacters); flatFooted.Apply(character); _conditionsAdded.Add(flatFooted); } else if (!flatFooted.FlatFootedFrom.Contains(FlatFooted.AllCharacters)) { flatFooted.Remove(character); flatFooted = new FlatFooted(FlatFooted.AllCharacters); flatFooted.Apply(character); _conditionsAdded.Add(flatFooted); } }
protected override bool CustomRemove(IEntity entity) { if (entity is ICharacter character && character.Conditions.Any(c => c.Id == Id)) { var condition = character.Conditions.First(c => c.Id == Id); character.Conditions.Remove(condition); if (_hasAppliedFlatFooted && character.Conditions.Any(c => c.Id == EntityIds.FLAT_FOOTED_CONDITION_ID)) { var flatFooted = (FlatFooted)character.Conditions.First(c => c.Id == EntityIds.FLAT_FOOTED_CONDITION_ID); if (flatFooted.FlatFootedFrom.Contains(FlatFooted.AllCharacters)) { character.Conditions.Remove(flatFooted); var newFlatFooted = new FlatFooted(flatFooted, true, FlatFooted.AllCharacters); if (newFlatFooted.FlatFootedFrom.Count > 0) { newFlatFooted.Apply(character); } } } _hasAppliedFlatFooted = false; return(true); } return(false); }